Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package tk.blackwolf12333.grieflog.listeners;
- import java.util.ArrayList;
- import java.util.HashMap;
- import org.bukkit.Material;
- import org.bukkit.block.Chest;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.inventory.InventoryCloseEvent;
- import org.bukkit.event.inventory.InventoryOpenEvent;
- import org.bukkit.event.inventory.InventoryType;
- import org.bukkit.inventory.InventoryView;
- import org.bukkit.inventory.ItemStack;
- import tk.blackwolf12333.grieflog.GriefLog;
- import tk.blackwolf12333.grieflog.data.player.InventoryTransactionData;
- import tk.blackwolf12333.grieflog.utils.InventoryStringDeSerializer;
- public class InventoryListener implements Listener {
- GriefLog plugin;
- HashMap<String, InventoryView> inventories = new HashMap<String, InventoryView>();
- public InventoryListener(GriefLog plugin) {
- this.plugin = plugin;
- }
- @EventHandler
- public void onInventoryOpen(InventoryOpenEvent event) {
- inventories.put(event.getPlayer().getName(), event.getView());
- }
- @EventHandler
- public void onInventoryClose(InventoryCloseEvent event) {
- if(event.getInventory().getType() == InventoryType.CHEST) {
- Chest chest = (Chest) event.getInventory().getHolder();
- Integer chestX = chest.getX();
- Integer chestY = chest.getY();
- Integer chestZ = chest.getZ();
- String chestWorld = chest.getWorld().getName();
- String player = event.getPlayer().getName();
- String result = calculateInventoryDifference(event.getView(), event.getPlayer().getName());
- GriefLog.debug("Transaction by: " + player + " with " + result);
- new InventoryTransactionData(player, chestX, chestY, chestZ, chestWorld, result).log();
- }
- inventories.remove(event.getPlayer().getName());
- }
- private String calculateInventoryDifference(InventoryView currentView, String name) {
- ArrayList<ItemStack> taken = new ArrayList<ItemStack>();
- ArrayList<ItemStack> put = new ArrayList<ItemStack>();
- InventoryView oldView = inventories.get(name);
- for(int i = 0; i < currentView.getTopInventory().getSize(); i++) {
- if((oldView.getItem(i).getTypeId() != currentView.getItem(i).getTypeId()) && (oldView.getItem(i).getAmount() != currentView.getItem(i).getAmount())) {
- GriefLog.debug("new item != old item\n");
- taken.add(oldView.getItem(i));
- } else {
- if((oldView.getItem(i).getType() == Material.AIR) && (currentView.getItem(i).getType() != Material.AIR)) {
- put.add(currentView.getItem(i));
- }
- }
- }
- return getDifferenceResultInString(taken, put);
- }
- private String getDifferenceResultInString(ArrayList<ItemStack> taken, ArrayList<ItemStack> put) {
- String takenStr = new String("Taken: ");
- String putStr = new String("Put: ");
- for(ItemStack i : taken) {
- takenStr += taken.indexOf(i) + "#" + InventoryStringDeSerializer.itemToString(i) + ";";
- }
- for(ItemStack i : put) {
- putStr += put.indexOf(i) + "#" + InventoryStringDeSerializer.itemToString(i) + ";";
- }
- return takenStr + " " + putStr;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement