diff --git a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/Flags.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/Flags.java index b88ce54..a72118b 100644 --- a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/Flags.java +++ b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/Flags.java @@ -32,6 +32,7 @@ public final class Flags public final static SetFlag 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 FLY_SPEED = new DoubleFlag("fly-speed"); public final static BooleanFlag KEEP_INVENTORY = new BooleanFlag("keep-inventory"); public final static BooleanFlag KEEP_EXP = new BooleanFlag("keep-exp"); diff --git a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/handlers/AbstractSpeedFlagHandler.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/handlers/AbstractSpeedFlagHandler.java new file mode 100644 index 0000000..e4d2aa6 --- /dev/null +++ b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/handlers/AbstractSpeedFlagHandler.java @@ -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 entered, Set 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; + } + } + } +} diff --git a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/handlers/FlySpeedFlagHandler.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/handlers/FlySpeedFlagHandler.java new file mode 100644 index 0000000..5a19647 --- /dev/null +++ b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/handlers/FlySpeedFlagHandler.java @@ -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 + { + 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); + } +} diff --git a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/handlers/WalkSpeedFlagHandler.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/handlers/WalkSpeedFlagHandler.java index d5a3a45..d0393a4 100644 --- a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/handlers/WalkSpeedFlagHandler.java +++ b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/handlers/WalkSpeedFlagHandler.java @@ -1,95 +1,48 @@ 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 net.goldtreeservers.worldguardextraflags.flags.Flags; -import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils; 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) { return new Factory(plugin); } - public static class Factory extends HandlerWrapper.Factory - { - public Factory(Plugin plugin) - { + public static class Factory extends HandlerWrapper.Factory + { + public Factory(Plugin plugin) + { super(plugin); } @Override - public WalkSpeedFlagHandler create(Session session) - { - return new WalkSpeedFlagHandler(this.getPlugin(), session); - } - } - - private Float originalWalkSpeed; - + public WalkSpeedFlagHandler create(Session session) + { + return new WalkSpeedFlagHandler(this.getPlugin(), session); + } + } + protected WalkSpeedFlagHandler(Plugin plugin, Session session) { - super(plugin, session); + super(plugin, session, Flags.WALK_SPEED); } @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); - this.handleValue(player, speed); + return player.getWalkSpeed(); } @Override - public boolean onCrossBoundary(Player player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) + protected void setSpeed(Player player, float speed) { - Double speed = WorldGuardUtils.queryValue(player, to.getWorld(), toSet.getRegions(), Flags.WALK_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; - } - } + player.setWalkSpeed(speed); } } diff --git a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/WorldGuardCommunicator.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/WorldGuardCommunicator.java index f226346..4329044 100644 --- a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/WorldGuardCommunicator.java +++ b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/WorldGuardCommunicator.java @@ -18,6 +18,7 @@ import net.goldtreeservers.worldguardextraflags.wg.handlers.CommandOnExitFlagHan import net.goldtreeservers.worldguardextraflags.wg.handlers.ConsoleCommandOnEntryFlagHandler; import net.goldtreeservers.worldguardextraflags.wg.handlers.ConsoleCommandOnExitFlagHandler; 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.GlideFlagHandler; import net.goldtreeservers.worldguardextraflags.wg.handlers.GodmodeFlagHandler; @@ -48,6 +49,7 @@ public interface WorldGuardCommunicator flagRegistry.register(Flags.WORLDEDIT); flagRegistry.register(Flags.GIVE_EFFECTS); flagRegistry.register(Flags.FLY); + flagRegistry.register(Flags.FLY_SPEED); flagRegistry.register(Flags.PLAY_SOUNDS); flagRegistry.register(Flags.MYTHICMOB_EGGS); flagRegistry.register(Flags.FROSTWALKER); @@ -76,6 +78,7 @@ public interface WorldGuardCommunicator sessionManager.registerHandler(GodmodeFlagHandler.FACTORY(plugin)); sessionManager.registerHandler(GiveEffectsFlagHandler.FACTORY(plugin)); sessionManager.registerHandler(FlyFlagHandler.FACTORY(plugin)); + sessionManager.registerHandler(FlySpeedFlagHandler.FACTORY(plugin)); sessionManager.registerHandler(PlaySoundsFlagHandler.FACTORY(plugin)); sessionManager.registerHandler(GlideFlagHandler.FACTORY(plugin)); }