mirror of
https://github.com/TotalFreedomMC/TF-WorldGuardExtraFlagsPlugin.git
synced 2025-02-05 11:52:42 +00:00
Add "fly-speed" flag. (#144)
* Add "fly-speed" flag Similar to walk-speed, but for players who are flying.
This commit is contained in:
parent
4d084282e5
commit
146505dd96
5 changed files with 154 additions and 66 deletions
|
@ -32,6 +32,7 @@ public final class Flags
|
||||||
public final static SetFlag<String> CONSOLE_COMMAND_ON_EXIT = WorldGuardUtils.getCommunicator().getCustomSetFlag("console-command-on-exit", new CommandStringFlag(null));
|
public final static SetFlag<String> CONSOLE_COMMAND_ON_EXIT = WorldGuardUtils.getCommunicator().getCustomSetFlag("console-command-on-exit", new CommandStringFlag(null));
|
||||||
|
|
||||||
public final static DoubleFlag WALK_SPEED = new DoubleFlag("walk-speed");
|
public final static DoubleFlag WALK_SPEED = new DoubleFlag("walk-speed");
|
||||||
|
public final static DoubleFlag FLY_SPEED = new DoubleFlag("fly-speed");
|
||||||
|
|
||||||
public final static BooleanFlag KEEP_INVENTORY = new BooleanFlag("keep-inventory");
|
public final static BooleanFlag KEEP_INVENTORY = new BooleanFlag("keep-inventory");
|
||||||
public final static BooleanFlag KEEP_EXP = new BooleanFlag("keep-exp");
|
public final static BooleanFlag KEEP_EXP = new BooleanFlag("keep-exp");
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
package net.goldtreeservers.worldguardextraflags.wg.handlers;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||||
|
import com.sk89q.worldguard.protection.flags.DoubleFlag;
|
||||||
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
|
import com.sk89q.worldguard.session.MoveType;
|
||||||
|
import com.sk89q.worldguard.session.Session;
|
||||||
|
import net.goldtreeservers.worldguardextraflags.flags.Flags;
|
||||||
|
import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils;
|
||||||
|
import net.goldtreeservers.worldguardextraflags.wg.wrappers.HandlerWrapper;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
public abstract class AbstractSpeedFlagHandler extends HandlerWrapper
|
||||||
|
{
|
||||||
|
|
||||||
|
private Float originalSpeed;
|
||||||
|
private DoubleFlag flag;
|
||||||
|
|
||||||
|
protected AbstractSpeedFlagHandler(Plugin plugin, Session session, DoubleFlag flag)
|
||||||
|
{
|
||||||
|
super(plugin, session);
|
||||||
|
|
||||||
|
this.flag = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract float getSpeed(Player player);
|
||||||
|
|
||||||
|
protected abstract void setSpeed(Player player, float speed);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(Player player, Location current, ApplicableRegionSet set)
|
||||||
|
{
|
||||||
|
Double speed = WorldGuardUtils.queryValue(player, current.getWorld(), set.getRegions(), this.flag);
|
||||||
|
this.handleValue(player, speed);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCrossBoundary(Player player, Location from, Location to, ApplicableRegionSet toSet, Set<ProtectedRegion> entered, Set<ProtectedRegion> exited, MoveType moveType)
|
||||||
|
{
|
||||||
|
Double speed = WorldGuardUtils.queryValue(player, to.getWorld(), toSet.getRegions(), this.flag);
|
||||||
|
this.handleValue(player, speed);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleValue(Player player, Double speed)
|
||||||
|
{
|
||||||
|
if (speed != null)
|
||||||
|
{
|
||||||
|
if (speed > 1.0)
|
||||||
|
{
|
||||||
|
speed = 1.0;
|
||||||
|
}
|
||||||
|
else if (speed < -1.0)
|
||||||
|
{
|
||||||
|
speed = -1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.getSpeed(player) != speed.floatValue())
|
||||||
|
{
|
||||||
|
if (this.originalSpeed == null)
|
||||||
|
{
|
||||||
|
this.originalSpeed = this.getSpeed(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setSpeed(player, speed.floatValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.originalSpeed != null)
|
||||||
|
{
|
||||||
|
this.setSpeed(player, this.originalSpeed);
|
||||||
|
|
||||||
|
this.originalSpeed = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package net.goldtreeservers.worldguardextraflags.wg.handlers;
|
||||||
|
|
||||||
|
import com.sk89q.worldguard.session.Session;
|
||||||
|
|
||||||
|
import net.goldtreeservers.worldguardextraflags.flags.Flags;
|
||||||
|
import net.goldtreeservers.worldguardextraflags.wg.wrappers.HandlerWrapper;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
public class FlySpeedFlagHandler extends AbstractSpeedFlagHandler
|
||||||
|
{
|
||||||
|
public static final Factory FACTORY(Plugin plugin)
|
||||||
|
{
|
||||||
|
return new Factory(plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Factory extends HandlerWrapper.Factory<FlySpeedFlagHandler>
|
||||||
|
{
|
||||||
|
public Factory(Plugin plugin)
|
||||||
|
{
|
||||||
|
super(plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FlySpeedFlagHandler create(Session session)
|
||||||
|
{
|
||||||
|
return new FlySpeedFlagHandler(this.getPlugin(), session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected FlySpeedFlagHandler(Plugin plugin, Session session)
|
||||||
|
{
|
||||||
|
super(plugin, session, Flags.FLY_SPEED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected float getSpeed(Player player)
|
||||||
|
{
|
||||||
|
return player.getFlySpeed();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setSpeed(Player player, float speed)
|
||||||
|
{
|
||||||
|
player.setFlySpeed(speed);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,95 +1,48 @@
|
||||||
package net.goldtreeservers.worldguardextraflags.wg.handlers;
|
package net.goldtreeservers.worldguardextraflags.wg.handlers;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import com.sk89q.worldguard.session.MoveType;
|
|
||||||
import com.sk89q.worldguard.session.Session;
|
import com.sk89q.worldguard.session.Session;
|
||||||
|
|
||||||
import net.goldtreeservers.worldguardextraflags.flags.Flags;
|
import net.goldtreeservers.worldguardextraflags.flags.Flags;
|
||||||
import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils;
|
|
||||||
import net.goldtreeservers.worldguardextraflags.wg.wrappers.HandlerWrapper;
|
import net.goldtreeservers.worldguardextraflags.wg.wrappers.HandlerWrapper;
|
||||||
|
|
||||||
public class WalkSpeedFlagHandler extends HandlerWrapper
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
public class WalkSpeedFlagHandler extends AbstractSpeedFlagHandler
|
||||||
{
|
{
|
||||||
public static final Factory FACTORY(Plugin plugin)
|
public static final Factory FACTORY(Plugin plugin)
|
||||||
{
|
{
|
||||||
return new Factory(plugin);
|
return new Factory(plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Factory extends HandlerWrapper.Factory<WalkSpeedFlagHandler>
|
public static class Factory extends HandlerWrapper.Factory<WalkSpeedFlagHandler>
|
||||||
{
|
{
|
||||||
public Factory(Plugin plugin)
|
public Factory(Plugin plugin)
|
||||||
{
|
{
|
||||||
super(plugin);
|
super(plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WalkSpeedFlagHandler create(Session session)
|
public WalkSpeedFlagHandler create(Session session)
|
||||||
{
|
{
|
||||||
return new WalkSpeedFlagHandler(this.getPlugin(), session);
|
return new WalkSpeedFlagHandler(this.getPlugin(), session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Float originalWalkSpeed;
|
|
||||||
|
|
||||||
protected WalkSpeedFlagHandler(Plugin plugin, Session session)
|
protected WalkSpeedFlagHandler(Plugin plugin, Session session)
|
||||||
{
|
{
|
||||||
super(plugin, session);
|
super(plugin, session, Flags.WALK_SPEED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(Player player, Location current, ApplicableRegionSet set)
|
protected float getSpeed(Player player)
|
||||||
{
|
{
|
||||||
Double speed = WorldGuardUtils.queryValue(player, current.getWorld(), set.getRegions(), Flags.WALK_SPEED);
|
return player.getWalkSpeed();
|
||||||
this.handleValue(player, speed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCrossBoundary(Player player, Location from, Location to, ApplicableRegionSet toSet, Set<ProtectedRegion> entered, Set<ProtectedRegion> exited, MoveType moveType)
|
protected void setSpeed(Player player, float speed)
|
||||||
{
|
{
|
||||||
Double speed = WorldGuardUtils.queryValue(player, to.getWorld(), toSet.getRegions(), Flags.WALK_SPEED);
|
player.setWalkSpeed(speed);
|
||||||
this.handleValue(player, speed);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleValue(Player player, Double speed)
|
|
||||||
{
|
|
||||||
if (speed != null)
|
|
||||||
{
|
|
||||||
if (speed > 1.0)
|
|
||||||
{
|
|
||||||
speed = 1.0;
|
|
||||||
}
|
|
||||||
else if (speed < -1.0)
|
|
||||||
{
|
|
||||||
speed = -1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.getWalkSpeed() != speed.floatValue())
|
|
||||||
{
|
|
||||||
if (this.originalWalkSpeed == null)
|
|
||||||
{
|
|
||||||
this.originalWalkSpeed = player.getWalkSpeed();
|
|
||||||
}
|
|
||||||
|
|
||||||
player.setWalkSpeed(speed.floatValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (this.originalWalkSpeed != null)
|
|
||||||
{
|
|
||||||
player.setWalkSpeed(this.originalWalkSpeed);
|
|
||||||
|
|
||||||
this.originalWalkSpeed = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ import net.goldtreeservers.worldguardextraflags.wg.handlers.CommandOnExitFlagHan
|
||||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.ConsoleCommandOnEntryFlagHandler;
|
import net.goldtreeservers.worldguardextraflags.wg.handlers.ConsoleCommandOnEntryFlagHandler;
|
||||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.ConsoleCommandOnExitFlagHandler;
|
import net.goldtreeservers.worldguardextraflags.wg.handlers.ConsoleCommandOnExitFlagHandler;
|
||||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.FlyFlagHandler;
|
import net.goldtreeservers.worldguardextraflags.wg.handlers.FlyFlagHandler;
|
||||||
|
import net.goldtreeservers.worldguardextraflags.wg.handlers.FlySpeedFlagHandler;
|
||||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.GiveEffectsFlagHandler;
|
import net.goldtreeservers.worldguardextraflags.wg.handlers.GiveEffectsFlagHandler;
|
||||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.GlideFlagHandler;
|
import net.goldtreeservers.worldguardextraflags.wg.handlers.GlideFlagHandler;
|
||||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.GodmodeFlagHandler;
|
import net.goldtreeservers.worldguardextraflags.wg.handlers.GodmodeFlagHandler;
|
||||||
|
@ -48,6 +49,7 @@ public interface WorldGuardCommunicator
|
||||||
flagRegistry.register(Flags.WORLDEDIT);
|
flagRegistry.register(Flags.WORLDEDIT);
|
||||||
flagRegistry.register(Flags.GIVE_EFFECTS);
|
flagRegistry.register(Flags.GIVE_EFFECTS);
|
||||||
flagRegistry.register(Flags.FLY);
|
flagRegistry.register(Flags.FLY);
|
||||||
|
flagRegistry.register(Flags.FLY_SPEED);
|
||||||
flagRegistry.register(Flags.PLAY_SOUNDS);
|
flagRegistry.register(Flags.PLAY_SOUNDS);
|
||||||
flagRegistry.register(Flags.MYTHICMOB_EGGS);
|
flagRegistry.register(Flags.MYTHICMOB_EGGS);
|
||||||
flagRegistry.register(Flags.FROSTWALKER);
|
flagRegistry.register(Flags.FROSTWALKER);
|
||||||
|
@ -76,6 +78,7 @@ public interface WorldGuardCommunicator
|
||||||
sessionManager.registerHandler(GodmodeFlagHandler.FACTORY(plugin));
|
sessionManager.registerHandler(GodmodeFlagHandler.FACTORY(plugin));
|
||||||
sessionManager.registerHandler(GiveEffectsFlagHandler.FACTORY(plugin));
|
sessionManager.registerHandler(GiveEffectsFlagHandler.FACTORY(plugin));
|
||||||
sessionManager.registerHandler(FlyFlagHandler.FACTORY(plugin));
|
sessionManager.registerHandler(FlyFlagHandler.FACTORY(plugin));
|
||||||
|
sessionManager.registerHandler(FlySpeedFlagHandler.FACTORY(plugin));
|
||||||
sessionManager.registerHandler(PlaySoundsFlagHandler.FACTORY(plugin));
|
sessionManager.registerHandler(PlaySoundsFlagHandler.FACTORY(plugin));
|
||||||
sessionManager.registerHandler(GlideFlagHandler.FACTORY(plugin));
|
sessionManager.registerHandler(GlideFlagHandler.FACTORY(plugin));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue