forked from LogBlock/LogBlock
Fix chest logging for double chests and maybe other block types.
This commit is contained in:
@@ -2,16 +2,20 @@ package de.diddiz.LogBlock.listeners;
|
|||||||
|
|
||||||
import static de.diddiz.util.BukkitUtils.compareInventories;
|
import static de.diddiz.util.BukkitUtils.compareInventories;
|
||||||
import static de.diddiz.util.BukkitUtils.compressInventory;
|
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 static de.diddiz.util.BukkitUtils.rawData;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
|
import org.bukkit.block.DoubleChest;
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
import org.bukkit.event.inventory.InventoryOpenEvent;
|
import org.bukkit.event.inventory.InventoryOpenEvent;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import de.diddiz.LogBlock.LogBlock;
|
import de.diddiz.LogBlock.LogBlock;
|
||||||
|
|
||||||
@@ -25,13 +29,14 @@ public class ChestAccessLogging extends LoggingListener
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onInventoryClose(InventoryCloseEvent event) {
|
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 HumanEntity player = event.getPlayer();
|
||||||
final ItemStack[] before = containers.get(player);
|
final ItemStack[] before = containers.get(player);
|
||||||
if (before != null) {
|
if (before != null) {
|
||||||
final ItemStack[] after = compressInventory(event.getInventory().getContents());
|
final ItemStack[] after = compressInventory(event.getInventory().getContents());
|
||||||
final ItemStack[] diff = compareInventories(before, after);
|
final ItemStack[] diff = compareInventories(before, after);
|
||||||
final Location loc = ((BlockState)event.getInventory().getHolder()).getLocation();
|
final Location loc = getInventoryHolderLocation(holder);
|
||||||
for (final ItemStack item : diff) {
|
for (final ItemStack item : diff) {
|
||||||
consumer.queueChestAccess(player.getName(), loc, loc.getWorld().getBlockTypeIdAt(loc), (short)item.getTypeId(), (short)item.getAmount(), rawData(item));
|
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)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onInventoryOpen(InventoryOpenEvent event) {
|
public void onInventoryOpen(InventoryOpenEvent event) {
|
||||||
if (event.getInventory().getHolder() instanceof BlockState) {
|
InventoryHolder holder = event.getInventory().getHolder();
|
||||||
BlockState block = (BlockState)event.getInventory().getHolder();
|
if (holder instanceof BlockState || holder instanceof DoubleChest) {
|
||||||
if (block.getTypeId() != 58) {
|
if (getInventoryHolderType(holder) != 58) {
|
||||||
containers.put(event.getPlayer(), compressInventory(event.getInventory().getContents()));
|
containers.put(event.getPlayer(), compressInventory(event.getInventory().getContents()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,7 @@ import org.bukkit.Chunk;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
|
import org.bukkit.block.DoubleChest;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.TNTPrimed;
|
import org.bukkit.entity.TNTPrimed;
|
||||||
@@ -35,6 +36,26 @@ public class BukkitUtils
|
|||||||
blockEquivalents.add(new HashSet<Integer>(Arrays.asList(93, 94)));
|
blockEquivalents.add(new HashSet<Integer>(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) {
|
public static ItemStack[] compareInventories(ItemStack[] items1, ItemStack[] items2) {
|
||||||
final ItemStackComparator comperator = new ItemStackComparator();
|
final ItemStackComparator comperator = new ItemStackComparator();
|
||||||
final ArrayList<ItemStack> diff = new ArrayList<ItemStack>();
|
final ArrayList<ItemStack> diff = new ArrayList<ItemStack>();
|
||||||
|
Reference in New Issue
Block a user