forked from LogBlock/LogBlock
Use sexy new (but untested) chest logging.
This commit is contained in:
@@ -1,42 +0,0 @@
|
|||||||
package de.diddiz.LogBlock;
|
|
||||||
|
|
||||||
import static de.diddiz.util.BukkitUtils.compareInventories;
|
|
||||||
import static de.diddiz.util.BukkitUtils.compressInventory;
|
|
||||||
import static de.diddiz.util.BukkitUtils.rawData;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.getspout.spoutapi.event.inventory.InventoryCloseEvent;
|
|
||||||
import org.getspout.spoutapi.event.inventory.InventoryOpenEvent;
|
|
||||||
import de.diddiz.LogBlock.listeners.LoggingListener;
|
|
||||||
|
|
||||||
class LBSpoutChestAccessListener extends LoggingListener
|
|
||||||
{
|
|
||||||
private final Map<Player, ItemStack[]> containers = new HashMap<Player, ItemStack[]>();
|
|
||||||
|
|
||||||
private LBSpoutChestAccessListener(LogBlock lb) {
|
|
||||||
super(lb);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onInventoryClose(InventoryCloseEvent event) {
|
|
||||||
if (!event.isCancelled() && event.getLocation() != null) {
|
|
||||||
final Player 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 = event.getLocation();
|
|
||||||
for (final ItemStack item : diff)
|
|
||||||
consumer.queueChestAccess(player.getName(), loc, loc.getWorld().getBlockTypeIdAt(loc), (short)item.getTypeId(), (short)item.getAmount(), rawData(item));
|
|
||||||
containers.remove(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onInventoryOpen(InventoryOpenEvent event) {
|
|
||||||
if (!event.isCancelled() && event.getLocation() != null && event.getLocation().getBlock().getTypeId() != 58)
|
|
||||||
containers.put(event.getPlayer(), compressInventory(event.getInventory().getContents()));
|
|
||||||
}
|
|
||||||
}
|
|
@@ -184,12 +184,7 @@ public class LogBlock extends JavaPlugin
|
|||||||
if (isLogging(Logging.LEAVESDECAY))
|
if (isLogging(Logging.LEAVESDECAY))
|
||||||
pm.registerEvents(new LeavesDecayLogging(this), this);
|
pm.registerEvents(new LeavesDecayLogging(this), this);
|
||||||
if (isLogging(Logging.CHESTACCESS)) {
|
if (isLogging(Logging.CHESTACCESS)) {
|
||||||
// if (pm.isPluginEnabled("Spout")) { //TODO
|
|
||||||
// pm.registerEvents(Type.CUSTOM_EVENT, new LBSpoutChestAccessListener(this), Priority.Monitor, this);
|
|
||||||
// getLogger().info("[LogBlock] Using Spout as chest access API");
|
|
||||||
// } else {
|
|
||||||
pm.registerEvents(new ChestAccessLogging(this), this);
|
pm.registerEvents(new ChestAccessLogging(this), this);
|
||||||
getLogger().info("[LogBlock] Using own chest access API");
|
|
||||||
}
|
}
|
||||||
if (isLogging(Logging.SWITCHINTERACT) || isLogging(Logging.DOORINTERACT) || isLogging(Logging.CAKEEAT) || isLogging(Logging.DIODEINTERACT) || isLogging(Logging.NOTEBLOCKINTERACT))
|
if (isLogging(Logging.SWITCHINTERACT) || isLogging(Logging.DOORINTERACT) || isLogging(Logging.CAKEEAT) || isLogging(Logging.DIODEINTERACT) || isLogging(Logging.NOTEBLOCKINTERACT))
|
||||||
pm.registerEvents(new InteractLogging(this), this);
|
pm.registerEvents(new InteractLogging(this), this);
|
||||||
|
@@ -1,98 +1,52 @@
|
|||||||
package de.diddiz.LogBlock.listeners;
|
package de.diddiz.LogBlock.listeners;
|
||||||
|
|
||||||
import static de.diddiz.LogBlock.config.Config.isLogging;
|
import de.diddiz.LogBlock.LogBlock;
|
||||||
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.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.Block;
|
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
import org.bukkit.event.player.PlayerChatEvent;
|
import org.bukkit.event.inventory.InventoryOpenEvent;
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import de.diddiz.LogBlock.LogBlock;
|
|
||||||
import de.diddiz.LogBlock.Logging;
|
|
||||||
|
|
||||||
public class ChestAccessLogging extends LoggingListener
|
public class ChestAccessLogging extends LoggingListener
|
||||||
{
|
{
|
||||||
private final Map<Player, ContainerState> containers = new HashMap<Player, ContainerState>();
|
private final Map<HumanEntity, ItemStack[]> containers = new HashMap<HumanEntity, ItemStack[]>();
|
||||||
|
|
||||||
public ChestAccessLogging(LogBlock lb) {
|
public ChestAccessLogging(LogBlock lb) {
|
||||||
super(lb);
|
super(lb);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkInventoryClose(Player player) {
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
final ContainerState cont = containers.get(player);
|
public void onInventoryClose(InventoryCloseEvent event) {
|
||||||
if (cont != null) {
|
if (event.getInventory().getHolder() instanceof BlockState) {
|
||||||
final ItemStack[] before = cont.items;
|
final HumanEntity player = event.getPlayer();
|
||||||
final BlockState state = cont.loc.getBlock().getState();
|
final ItemStack[] before = containers.get(player);
|
||||||
if (!(state instanceof InventoryHolder))
|
if (before != null) {
|
||||||
return;
|
final ItemStack[] after = compressInventory(event.getInventory().getContents());
|
||||||
final ItemStack[] after = compressInventory(((InventoryHolder)state).getInventory().getContents());
|
|
||||||
final ItemStack[] diff = compareInventories(before, after);
|
final ItemStack[] diff = compareInventories(before, after);
|
||||||
for (final ItemStack item : diff)
|
final Location loc = ((BlockState) event.getInventory().getHolder()).getLocation();
|
||||||
consumer.queueChestAccess(player.getName(), cont.loc, state.getTypeId(), (short)item.getTypeId(), (short)item.getAmount(), rawData(item));
|
for (final ItemStack item : diff) {
|
||||||
|
consumer.queueChestAccess(player.getName(), loc, loc.getWorld().getBlockTypeIdAt(loc), (short) item.getTypeId(), (short) item.getAmount(), rawData(item));
|
||||||
|
}
|
||||||
containers.remove(player);
|
containers.remove(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkInventoryOpen(Player player, Block block) {
|
|
||||||
final BlockState state = block.getState();
|
|
||||||
if (!(state instanceof InventoryHolder))
|
|
||||||
return;
|
|
||||||
containers.put(player, new ContainerState(block.getLocation(), compressInventory(((InventoryHolder)state).getInventory().getContents())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onPlayerChat(PlayerChatEvent event) {
|
public void onInventoryOpen(InventoryOpenEvent event) {
|
||||||
checkInventoryClose(event.getPlayer());
|
if (event.getInventory().getHolder() instanceof BlockState) {
|
||||||
}
|
BlockState block = (BlockState) event.getInventory().getHolder();
|
||||||
|
if (block.getTypeId() != 58) {
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
containers.put(event.getPlayer(), compressInventory(event.getInventory().getContents()));
|
||||||
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
|
}
|
||||||
checkInventoryClose(event.getPlayer());
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
|
||||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
|
||||||
checkInventoryClose(event.getPlayer());
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
|
||||||
public void onPlayerTeleport(PlayerTeleportEvent event) {
|
|
||||||
checkInventoryClose(event.getPlayer());
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
|
||||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
|
||||||
final Player player = event.getPlayer();
|
|
||||||
checkInventoryClose(player);
|
|
||||||
if (!event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_BLOCK && isLogging(player.getWorld(), Logging.CHESTACCESS)) {
|
|
||||||
final Block block = event.getClickedBlock();
|
|
||||||
final int type = block.getTypeId();
|
|
||||||
if (type == 23 || type == 54 || type == 61 || type == 62)
|
|
||||||
checkInventoryOpen(player, block);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class ContainerState
|
|
||||||
{
|
|
||||||
public final ItemStack[] items;
|
|
||||||
public final Location loc;
|
|
||||||
|
|
||||||
private ContainerState(Location loc, ItemStack[] items) {
|
|
||||||
this.items = items;
|
|
||||||
this.loc = loc;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user