From 5876f86ac34aa1ed95a3d4c686db368cbbea423f Mon Sep 17 00:00:00 2001 From: JeromSar Date: Mon, 26 Aug 2013 17:22:35 +0200 Subject: [PATCH] Added logblock stick --- appinfo.properties | 6 +- buildnumber.properties | 4 +- .../Commands/Command_cage.java | 2 +- .../Listener/TFM_PlayerListener.java | 33 +++++ .../TotalFreedomMod/TFM_RollbackManager.java | 135 +++++++++++++----- 5 files changed, 140 insertions(+), 40 deletions(-) diff --git a/appinfo.properties b/appinfo.properties index aa169d70..504a5fd9 100644 --- a/appinfo.properties +++ b/appinfo.properties @@ -1,5 +1,5 @@ -#Mon, 26 Aug 2013 15:12:00 +0200 +#Mon, 26 Aug 2013 17:21:52 +0200 program.VERSION=3.1 -program.BUILDNUM=501 -program.BUILDDATE=08/26/2013 03\:12 PM +program.BUILDNUM=505 +program.BUILDDATE=08/26/2013 05\:21 PM diff --git a/buildnumber.properties b/buildnumber.properties index 5fc94930..6b6c8427 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Mon Aug 26 15:12:00 CEST 2013 -build.number=502 +#Mon Aug 26 17:21:52 CEST 2013 +build.number=506 diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_cage.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_cage.java index d24a6d7a..a000e126 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_cage.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_cage.java @@ -23,7 +23,7 @@ public class Command_cage extends TFM_Command if (TFM_Util.isStopCommand(args[0]) && sender instanceof Player) { - TFM_Util.adminAction(sender.getName(), "Uncaging " + sender.getName(), true);; + TFM_Util.adminAction(sender.getName(), "Uncaging " + sender.getName(), true); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(sender_p); playerdata.setCaged(false); diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 485afac7..d0e611e5 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -7,6 +7,8 @@ import java.util.List; import java.util.Map.Entry; import java.util.regex.Pattern; import me.StevenLawson.TotalFreedomMod.*; +import me.StevenLawson.TotalFreedomMod.TFM_RollbackManager.EntryType; +import me.StevenLawson.TotalFreedomMod.TFM_RollbackManager.RollbackEntry; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -83,6 +85,34 @@ public class TFM_PlayerListener implements Listener switch (event.getMaterial()) { case STICK: + { + if (!TFM_SuperadminList.isUserSuperadmin(player)) + { + break; + } + + event.setCancelled(true); + + final Location location = player.getTargetBlock(null, 5).getLocation(); + final List entries = TFM_RollbackManager.getEntriesAtLocation(location); + + if (entries.isEmpty()) + { + TFM_Util.playerMsg(player, "No block edits at that location."); + break; + } + + TFM_Util.playerMsg(player, "Block edits at (" + ChatColor.WHITE + "X" + location.getBlockX() + ", Y" + location.getBlockY() + ", Z" + location.getBlockZ() + ChatColor.BLUE + ")" + ChatColor.WHITE + ":", ChatColor.BLUE); + for (RollbackEntry entry : entries) + { + String material = (entry.getType() == EntryType.BLOCK_BREAK ? entry.getFromMaterial() : entry.getToMaterial() + String.valueOf(entry.getData() == 0 ? entry.getData() : "")).toString(); + TFM_Util.playerMsg(player, " - " + ChatColor.BLUE + entry.getAuthor() + " " + entry.getType() + " " + material); + } + + break; + } + + case BONE: { TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player); if (playerdata.mobThrowerEnabled()) @@ -98,6 +128,7 @@ public class TFM_PlayerListener implements Listener } break; } + case SULPHUR: { TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player); @@ -116,6 +147,7 @@ public class TFM_PlayerListener implements Listener } break; } + case BLAZE_ROD: { if (TFM_ConfigEntry.ALLOW_EXPLOSIONS.getBoolean()) @@ -148,6 +180,7 @@ public class TFM_PlayerListener implements Listener } break; } + case CARROT: { if (TFM_ConfigEntry.ALLOW_EXPLOSIONS.getBoolean()) diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_RollbackManager.java b/src/me/StevenLawson/TotalFreedomMod/TFM_RollbackManager.java index 4412947f..f43152d8 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_RollbackManager.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_RollbackManager.java @@ -12,7 +12,7 @@ import org.bukkit.entity.Player; public class TFM_RollbackManager { - private static final Map> PLAYER_HISTORY_MAP = new HashMap>(); + private static final Map> PLAYER_HISTORY_MAP = new HashMap>(); private TFM_RollbackManager() { @@ -21,17 +21,17 @@ public class TFM_RollbackManager public static void blockPlace(org.bukkit.event.block.BlockPlaceEvent event) { - storeEntry(event.getPlayer(), new TFM_RollbackManager_Entry(event.getBlock(), TFM_RollbackManager_EntryType.BLOCK_PLACE)); + storeEntry(event.getPlayer(), new RollbackEntry(event.getPlayer().getName(), event.getBlock(), EntryType.BLOCK_PLACE)); } public static void blockBreak(org.bukkit.event.block.BlockBreakEvent event) { - storeEntry(event.getPlayer(), new TFM_RollbackManager_Entry(event.getBlock(), TFM_RollbackManager_EntryType.BLOCK_BREAK)); + storeEntry(event.getPlayer(), new RollbackEntry(event.getPlayer().getName(), event.getBlock(), EntryType.BLOCK_BREAK)); } - private static void storeEntry(Player player, TFM_RollbackManager_Entry entry) + private static void storeEntry(Player player, RollbackEntry entry) { - List playerEntryList = getPlayerEntryList(player.getName()); + List playerEntryList = getEntriesByPlayer(player.getName()); if (playerEntryList != null) { playerEntryList.add(0, entry); @@ -40,10 +40,10 @@ public class TFM_RollbackManager public static int purgeEntries() { - Iterator> it = PLAYER_HISTORY_MAP.values().iterator(); + Iterator> it = PLAYER_HISTORY_MAP.values().iterator(); while (it.hasNext()) { - List playerEntryList = it.next(); + List playerEntryList = it.next(); if (playerEntryList != null) { playerEntryList.clear(); @@ -54,7 +54,7 @@ public class TFM_RollbackManager public static int purgeEntries(String playerName) { - List playerEntryList = getPlayerEntryList(playerName); + List playerEntryList = getEntriesByPlayer(playerName); if (playerEntryList != null) { int count = playerEntryList.size(); @@ -71,14 +71,14 @@ public class TFM_RollbackManager public static int rollback(String playerName) { - List playerEntryList = getPlayerEntryList(playerName); + List playerEntryList = getEntriesByPlayer(playerName); if (playerEntryList != null) { int count = playerEntryList.size(); - Iterator it = playerEntryList.iterator(); + Iterator it = playerEntryList.iterator(); while (it.hasNext()) { - TFM_RollbackManager_Entry entry = it.next(); + RollbackEntry entry = it.next(); if (entry != null) { entry.restore(); @@ -90,49 +90,116 @@ public class TFM_RollbackManager return 0; } - private static List getPlayerEntryList(String playerName) + public static List getEntriesAtLocation(Location location) + { + location = location.clone(); + + List entries = new ArrayList(); + for (String playername : PLAYER_HISTORY_MAP.keySet()) + { + for (RollbackEntry entry : PLAYER_HISTORY_MAP.get(playername)) + { + if (entry.getLocation().equals(location)) + { + entries.add(0, entry); + } + } + } + return entries; + } + + private static List getEntriesByPlayer(String playerName) { playerName = playerName.toLowerCase(); - List playerEntryList = PLAYER_HISTORY_MAP.get(playerName); + List playerEntryList = PLAYER_HISTORY_MAP.get(playerName); if (playerEntryList == null) { - playerEntryList = new ArrayList(); + playerEntryList = new ArrayList(); PLAYER_HISTORY_MAP.put(playerName, playerEntryList); } return playerEntryList; } - private enum TFM_RollbackManager_EntryType + public enum EntryType { - BLOCK_PLACE, BLOCK_BREAK - } - - private static class TFM_RollbackManager_Entry - { - private final Location location; - private final Material material; - private final byte data; - - public TFM_RollbackManager_Entry(Block block, TFM_RollbackManager_EntryType entryType) + BLOCK_PLACE, BLOCK_BREAK; + + @Override + public String toString() { - this.location = block.getLocation(); - if (entryType == TFM_RollbackManager_EntryType.BLOCK_BREAK) + if (this == BLOCK_PLACE) { - this.material = block.getType(); - this.data = block.getData(); + return "placed"; } else { - this.material = Material.AIR; - this.data = 0; + return "broke"; } } + } + + public static class RollbackEntry + { + private final String author; + private final Location location; + private final int toBlockId; // ints have less overhead than Materials + private final int fromBlockId; + private final byte data; + + private RollbackEntry(String author, Block block, EntryType entryType) + { + this.location = block.getLocation().clone(); + this.author = author; + + if (entryType == EntryType.BLOCK_BREAK) + { + fromBlockId = block.getTypeId(); + toBlockId = Material.AIR.getId(); + data = block.getData(); + } + else + { + fromBlockId = Material.AIR.getId(); + toBlockId = block.getTypeId(); + data = 0; + } + } + + public String getAuthor() + { + return author; + } + + public Location getLocation() + { + return location; + } + + public Material getFromMaterial() + { + return Material.getMaterial(fromBlockId); + } + + public Material getToMaterial() + { + return Material.getMaterial(toBlockId); + } + + public byte getData() + { + return data; + } + + public EntryType getType() + { + return (getFromMaterial() == Material.AIR ? EntryType.BLOCK_PLACE : EntryType.BLOCK_BREAK); + } public void restore() { - Block b = this.location.getWorld().getBlockAt(this.location); - b.setType(this.material); - b.setData(this.data); + Block block = location.getWorld().getBlockAt(location); + block.setType(getFromMaterial()); + block.setData(data); } } }