diff --git a/appinfo.properties b/appinfo.properties index 162d6c42..bb5aad83 100644 --- a/appinfo.properties +++ b/appinfo.properties @@ -1,5 +1,5 @@ -#Sat, 10 Aug 2013 12:37:32 -0400 +#Sat, 10 Aug 2013 15:43:16 -0400 program.VERSION=2.22 -program.BUILDNUM=386 -program.BUILDDATE=08/10/2013 12\:37 PM +program.BUILDNUM=392 +program.BUILDDATE=08/10/2013 03\:43 PM diff --git a/buildnumber.properties b/buildnumber.properties index ca60bca4..cb0e152b 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Sat Aug 10 12:37:32 EDT 2013 -build.number=387 +#Sat Aug 10 15:43:16 EDT 2013 +build.number=393 diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_trail.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_trail.java new file mode 100644 index 00000000..72e24c00 --- /dev/null +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_trail.java @@ -0,0 +1,108 @@ +package me.StevenLawson.TotalFreedomMod.Commands; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import me.StevenLawson.TotalFreedomMod.TFM_Util; +import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.plugin.RegisteredListener; + +@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME) +@CommandParameters(description = "Pretty rainbow trails.", usage = "/ [off]") +public class Command_trail extends TFM_Command +{ + private static Listener movementListener = null; + private static final List trailPlayers = new ArrayList(); + private static final Random RANDOM = new Random(); + + @Override + public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + if (args.length > 0 && TFM_Util.isStopCommand(args[0])) + { + trailPlayers.remove(sender_p); + + playerMsg("Trail disabled."); + } + else + { + if (!trailPlayers.contains(sender_p)) + { + trailPlayers.add(sender_p); + } + + playerMsg("Trail enabled!"); + } + + if (!trailPlayers.isEmpty()) + { + registerMovementHandler(); + } + else + { + unregisterMovementHandler(); + } + + return true; + } + + private static void registerMovementHandler() + { + if (getRegisteredListener(movementListener) == null) + { + Bukkit.getPluginManager().registerEvents(movementListener = new Listener() + { + @EventHandler(priority = EventPriority.NORMAL) + public void onPlayerMove(PlayerMoveEvent event) + { + Player player = event.getPlayer(); + if (trailPlayers.contains(player)) + { + Block fromBlock = event.getFrom().getBlock(); + if (fromBlock.isEmpty()) + { + Block toBlock = event.getTo().getBlock(); + if (!fromBlock.equals(toBlock)) + { + fromBlock.setType(Material.WOOL); + fromBlock.setData((byte) RANDOM.nextInt(16)); + } + } + } + } + }, TotalFreedomMod.plugin); + } + } + + private static void unregisterMovementHandler() + { + Listener registeredListener = getRegisteredListener(movementListener); + if (registeredListener != null) + { + PlayerMoveEvent.getHandlerList().unregister(registeredListener); + } + } + + private static Listener getRegisteredListener(Listener listener) + { + RegisteredListener[] registeredListeners = PlayerMoveEvent.getHandlerList().getRegisteredListeners(); + for (RegisteredListener registeredListener : registeredListeners) + { + if (registeredListener.getListener() == listener) + { + return listener; + } + } + return null; + } +}