From 54ea789ab9825e364c7f51436738a036fd013f67 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 24 Jun 2012 10:44:31 +1000 Subject: [PATCH] Fix chest logging for double chests and maybe other block types. --- .../listeners/ChestAccessLogging.java | 15 ++++++++----- src/de/diddiz/util/BukkitUtils.java | 21 +++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/de/diddiz/LogBlock/listeners/ChestAccessLogging.java b/src/de/diddiz/LogBlock/listeners/ChestAccessLogging.java index 315c693..b9af057 100644 --- a/src/de/diddiz/LogBlock/listeners/ChestAccessLogging.java +++ b/src/de/diddiz/LogBlock/listeners/ChestAccessLogging.java @@ -2,16 +2,20 @@ package de.diddiz.LogBlock.listeners; import static de.diddiz.util.BukkitUtils.compareInventories; import static de.diddiz.util.BukkitUtils.compressInventory; +import static de.diddiz.util.BukkitUtils.getInventoryHolderType; +import static de.diddiz.util.BukkitUtils.getInventoryHolderLocation; import static de.diddiz.util.BukkitUtils.rawData; import java.util.HashMap; import java.util.Map; import org.bukkit.Location; import org.bukkit.block.BlockState; +import org.bukkit.block.DoubleChest; import org.bukkit.entity.HumanEntity; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import de.diddiz.LogBlock.LogBlock; @@ -25,13 +29,14 @@ public class ChestAccessLogging extends LoggingListener @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onInventoryClose(InventoryCloseEvent event) { - if (event.getInventory().getHolder() instanceof BlockState) { + InventoryHolder holder = event.getInventory().getHolder(); + if (holder instanceof BlockState || holder instanceof DoubleChest) { final HumanEntity player = event.getPlayer(); final ItemStack[] before = containers.get(player); if (before != null) { final ItemStack[] after = compressInventory(event.getInventory().getContents()); final ItemStack[] diff = compareInventories(before, after); - final Location loc = ((BlockState)event.getInventory().getHolder()).getLocation(); + final Location loc = getInventoryHolderLocation(holder); for (final ItemStack item : diff) { consumer.queueChestAccess(player.getName(), loc, loc.getWorld().getBlockTypeIdAt(loc), (short)item.getTypeId(), (short)item.getAmount(), rawData(item)); } @@ -42,9 +47,9 @@ public class ChestAccessLogging extends LoggingListener @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onInventoryOpen(InventoryOpenEvent event) { - if (event.getInventory().getHolder() instanceof BlockState) { - BlockState block = (BlockState)event.getInventory().getHolder(); - if (block.getTypeId() != 58) { + InventoryHolder holder = event.getInventory().getHolder(); + if (holder instanceof BlockState || holder instanceof DoubleChest) { + if (getInventoryHolderType(holder) != 58) { containers.put(event.getPlayer(), compressInventory(event.getInventory().getContents())); } } diff --git a/src/de/diddiz/util/BukkitUtils.java b/src/de/diddiz/util/BukkitUtils.java index cd99dc4..32a3c0b 100644 --- a/src/de/diddiz/util/BukkitUtils.java +++ b/src/de/diddiz/util/BukkitUtils.java @@ -13,6 +13,7 @@ import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.BlockState; +import org.bukkit.block.DoubleChest; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; @@ -35,6 +36,26 @@ public class BukkitUtils blockEquivalents.add(new HashSet(Arrays.asList(93, 94))); } + public static int getInventoryHolderType(InventoryHolder holder) { + if (holder instanceof BlockState) { + return ((BlockState)holder).getTypeId(); + } else if (holder instanceof DoubleChest) { + return ((DoubleChest)holder).getLocation().getBlock().getTypeId(); + } else { + return -1; + } + } + + public static Location getInventoryHolderLocation(InventoryHolder holder) { + if (holder instanceof BlockState) { + return ((BlockState)holder).getLocation(); + } else if (holder instanceof DoubleChest) { + return ((DoubleChest)holder).getLocation(); + } else { + return null; + } + } + public static ItemStack[] compareInventories(ItemStack[] items1, ItemStack[] items2) { final ItemStackComparator comperator = new ItemStackComparator(); final ArrayList diff = new ArrayList();