Advertisement
Guest User

InventoryListener

a guest
Dec 7th, 2012
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.01 KB | None | 0 0
  1. package tk.blackwolf12333.grieflog.listeners;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5.  
  6. import org.bukkit.Material;
  7. import org.bukkit.block.Chest;
  8. import org.bukkit.event.EventHandler;
  9. import org.bukkit.event.Listener;
  10. import org.bukkit.event.inventory.InventoryCloseEvent;
  11. import org.bukkit.event.inventory.InventoryOpenEvent;
  12. import org.bukkit.event.inventory.InventoryType;
  13. import org.bukkit.inventory.InventoryView;
  14. import org.bukkit.inventory.ItemStack;
  15.  
  16. import tk.blackwolf12333.grieflog.GriefLog;
  17. import tk.blackwolf12333.grieflog.data.player.InventoryTransactionData;
  18. import tk.blackwolf12333.grieflog.utils.InventoryStringDeSerializer;
  19.  
  20. public class InventoryListener implements Listener {
  21.  
  22.     GriefLog plugin;
  23.     HashMap<String, InventoryView> inventories = new HashMap<String, InventoryView>();
  24.    
  25.     public InventoryListener(GriefLog plugin) {
  26.         this.plugin = plugin;
  27.     }
  28.    
  29.     @EventHandler
  30.     public void onInventoryOpen(InventoryOpenEvent event) {
  31.         inventories.put(event.getPlayer().getName(), event.getView());
  32.     }
  33.    
  34.     @EventHandler
  35.     public void onInventoryClose(InventoryCloseEvent event) {
  36.         if(event.getInventory().getType() == InventoryType.CHEST) {
  37.             Chest chest = (Chest) event.getInventory().getHolder();
  38.             Integer chestX = chest.getX();
  39.             Integer chestY = chest.getY();
  40.             Integer chestZ = chest.getZ();
  41.             String chestWorld = chest.getWorld().getName();
  42.             String player = event.getPlayer().getName();
  43.             String result = calculateInventoryDifference(event.getView(), event.getPlayer().getName());
  44.             GriefLog.debug("Transaction by: " + player + " with " + result);
  45.             new InventoryTransactionData(player, chestX, chestY, chestZ, chestWorld, result).log();
  46.         }
  47.         inventories.remove(event.getPlayer().getName());
  48.     }
  49.  
  50.     private String calculateInventoryDifference(InventoryView currentView, String name) {
  51.         ArrayList<ItemStack> taken = new ArrayList<ItemStack>();
  52.         ArrayList<ItemStack> put = new ArrayList<ItemStack>();
  53.         InventoryView oldView = inventories.get(name);
  54.         for(int i = 0; i < currentView.getTopInventory().getSize(); i++) {
  55.             if((oldView.getItem(i).getTypeId() != currentView.getItem(i).getTypeId()) && (oldView.getItem(i).getAmount() != currentView.getItem(i).getAmount())) {
  56.                 GriefLog.debug("new item != old item\n");
  57.                 taken.add(oldView.getItem(i));
  58.             } else {
  59.                 if((oldView.getItem(i).getType() == Material.AIR) && (currentView.getItem(i).getType() != Material.AIR)) {
  60.                     put.add(currentView.getItem(i));
  61.                 }
  62.             }
  63.         }
  64.        
  65.         return getDifferenceResultInString(taken, put);
  66.     }
  67.  
  68.     private String getDifferenceResultInString(ArrayList<ItemStack> taken, ArrayList<ItemStack> put) {
  69.         String takenStr = new String("Taken: ");
  70.         String putStr = new String("Put: ");
  71.        
  72.         for(ItemStack i : taken) {
  73.             takenStr += taken.indexOf(i) + "#" + InventoryStringDeSerializer.itemToString(i) + ";";
  74.         }
  75.         for(ItemStack i : put) {
  76.             putStr += put.indexOf(i) + "#" + InventoryStringDeSerializer.itemToString(i) + ";";
  77.         }
  78.        
  79.         return takenStr + " " + putStr;
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement