Package com.massivecraft.mcore.util

Source Code of com.massivecraft.mcore.util.InventoryUtil

package com.massivecraft.mcore.util;

import java.util.HashMap;

import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftInventoryCustom;
import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftInventoryPlayer;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.inventory.InventoryType.SlotType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;

import com.massivecraft.mcore.inventory.MCorePlayerInventory;

public class InventoryUtil
{
  // -------------------------------------------- //
  // EVENT INTERPRETATION
  // -------------------------------------------- //
 
  public static boolean isOutside(InventoryClickEvent event)
  {
    return event.getRawSlot() < 0;
  }
  public static boolean isTopInventory(InventoryClickEvent event)
  {
    if (isOutside(event)) return false;
    return event.getRawSlot() < event.getInventory().getSize();
  }
  public static boolean isBottomInventory(InventoryClickEvent event)
  {
    if (isOutside(event)) return false;
    return event.getRawSlot() >= event.getInventory().getSize();
  }
 
  public static boolean isGiving(InventoryClickEvent event)
  {
    if (isOutside(event)) return false;
    boolean topClicked = isTopInventory(event);
   
    boolean ret = false;
   
    if (topClicked)
    {
      ret = (event.getCursor() != null && event.getCursor().getAmount() > 0);
    }
    else
    {
      ret = event.isShiftClick();
    }
   
    return ret;
  }
 
  public static boolean isTaking(InventoryClickEvent event)
  {
    if (isOutside(event)) return false;
    boolean topClicked = isTopInventory(event);
   
    boolean ret = false;
   
    if (topClicked)
    {
      ret = (event.getCurrentItem() != null && event.getCurrentItem().getAmount() > 0);
    }
   
    return ret;
  }
 
  public static boolean isAltering(InventoryClickEvent event)
  {
    return isGiving(event) || isTaking(event);
  }
 
  /**
   * This method will return the ItemStack the player is trying to equip.
   * If the click event would not result in equipping something null will be returned.
   * Note that this algorithm is not perfect. It's an adequate guess.
   *
   * @param event The InventoryClickEvent to analyze.
   * @return The ItemStack the player is trying to equip.
   */
  public static ItemStack isEquipping(InventoryClickEvent event)
  {
    /*
    System.out.println("---");
    System.out.println("getInventory().getType() "+event.getInventory().getType());
    System.out.println("getView().getTopInventory().getType() "+event.getView().getTopInventory().getType());
    System.out.println("getView().getType() "+event.getView().getType());
    System.out.println("getView().getBottomInventory().getType() "+event.getView().getBottomInventory().getType());
    System.out.println("event.getSlotType() "+event.getSlotType());
    System.out.println("event.getRawSlot() "+event.getRawSlot());
    System.out.println("event.getSlot() "+event.getSlot());
    */
   
    boolean isShiftClick = event.isShiftClick();
    InventoryType inventoryType = event.getInventory().getType();
    SlotType slotType = event.getSlotType();
    ItemStack cursor = event.getCursor();
    ItemStack currentItem = event.getCurrentItem();
   
    if (isShiftClick)
    {
      if (inventoryType != InventoryType.CRAFTING) return null;
      if (slotType == SlotType.CRAFTING) return null;
      if (slotType == SlotType.ARMOR) return null;
      if (slotType == SlotType.RESULT) return null;
      if (currentItem.getType() == Material.AIR) return null;
      return currentItem;
    }
    else
    {
      if (slotType == SlotType.ARMOR)
      {
        return cursor;
      }
      return null;
    }
  }
 
  // -------------------------------------------- //
  // CREATE PLAYER INVENTORY
  // -------------------------------------------- //
 
  public static PlayerInventory createPlayerInventory()
  {
    return new CraftInventoryPlayer(new MCorePlayerInventory());
  }
 
  // -------------------------------------------- //
  // IS EMPTY?
  // -------------------------------------------- //
 
  public static boolean isEmpty(Inventory inv)
  {
    if (inv == null) return true;
   
    for (ItemStack itemStack : inv.getContents())
    {
      if (isSomething(itemStack)) return false;
    }
   
    if (inv instanceof PlayerInventory)
    {
      PlayerInventory pinv = (PlayerInventory)inv;
     
      if (isSomething(pinv.getHelmet())) return false;
      if (isSomething(pinv.getChestplate())) return false;
      if (isSomething(pinv.getLeggings())) return false;
      if (isSomething(pinv.getBoots())) return false;
    }
   
    return true;
  }
 
  public static boolean isNothing(ItemStack itemStack)
  {
    if (itemStack == null) return true;
    if (itemStack.getAmount() == 0) return true;
    if (itemStack.getTypeId() == 0) return true;
    return false;
  }
 
  public static boolean isSomething(ItemStack itemStack)
  {
    return !isNothing(itemStack);
  }
 
  // -------------------------------------------- //
  // CLONE ITEMSTACKS/INVENTORY
  // -------------------------------------------- //
 
  public static ItemStack[] cloneItemStacks(ItemStack[] itemStacks)
  {
    ItemStack[] ret = new ItemStack[itemStacks.length];
    for (int i = 0; i < itemStacks.length; i++)
    {
      ItemStack stack = itemStacks[i];
      if (stack == null) continue;
      ret[i] = new ItemStack(itemStacks[i]);
    }
    return ret;
  }
 
  public static Inventory cloneInventory(Inventory inventory)
  {
    if (inventory == null) return null;
   
    Inventory ret = null;
   
    int size = inventory.getSize();
    InventoryHolder holder = inventory.getHolder();
    String title = inventory.getTitle();
   
    if (inventory instanceof PlayerInventory)
    {
      PlayerInventory pret = createPlayerInventory();
      ret = pret;
     
      PlayerInventory pinventory = (PlayerInventory)inventory;
     
      pret.setHelmet(pinventory.getHelmet() == null ? null : new ItemStack(pinventory.getHelmet()));
      pret.setChestplate(pinventory.getChestplate() == null ? null : new ItemStack(pinventory.getChestplate()));
      pret.setLeggings(pinventory.getLeggings() == null ? null : new ItemStack(pinventory.getLeggings()));
      pret.setBoots(pinventory.getBoots() == null ? null : new ItemStack(pinventory.getBoots()));
    }
    else
    {
      ret = new CraftInventoryCustom(holder, size, title);
    }
   
    ItemStack[] contents = cloneItemStacks(inventory.getContents());
    ret.setContents(contents);
   
    return ret;
  }
 
  public static PlayerInventory cloneInventory(PlayerInventory inventory)
  {
    return (PlayerInventory)cloneInventory((Inventory)inventory);
  }
 
  // -------------------------------------------- //
  // SET CONTENT
  // -------------------------------------------- //
  // This one simply moves the content pointers from on inventory to another.
  // You may want to clone the from inventory first.
 
  public static void setAllContents(Inventory from, Inventory to)
  {
    to.setContents(from.getContents());
    if (from instanceof PlayerInventory)
    {
      PlayerInventory pfrom = (PlayerInventory)from;
      if (to instanceof PlayerInventory)
      {
        PlayerInventory pto = (PlayerInventory)to;
       
        pto.setHelmet(pfrom.getHelmet());
        pto.setChestplate(pfrom.getChestplate());
        pto.setLeggings(pfrom.getLeggings());
        pto.setBoots(pfrom.getBoots());
      }
    }
  }
 
  // -------------------------------------------- //
  // CAN I ADD MANY?
  // -------------------------------------------- //
 
  // Calculate how many times you could add this item to the inventory.
  // NOTE: This method does not alter the inventory.
  public static int roomLeft(Inventory inventory, ItemStack item, int limit)
  {
    inventory = cloneInventory(inventory);
    int ret = 0;
    while(limit <= 0 || ret < limit)
    {
      HashMap<Integer, ItemStack> result = inventory.addItem(item.clone());
      if (result.size() != 0) return ret;
      ret++;
    }
    return ret;
  }
 
  // NOTE: Use the roomLeft method first to ensure this method would succeed
  public static void addItemTimes(Inventory inventory, ItemStack item, int times)
  {
    for (int i = 0 ; i < times ; i++)
    {
      inventory.addItem(item.clone());
    }
  }
 
  // -------------------------------------------- //
  // COUNT
  // -------------------------------------------- //
 
  public static int countSimilar(Inventory inventory, ItemStack itemStack)
  {
    int ret = 0;
    for (ItemStack item : inventory.getContents())
    {
      if (item == null) continue;
      if (!item.isSimilar(itemStack)) continue;
      ret += item.getAmount();
    }
    return ret;
  }

}
TOP

Related Classes of com.massivecraft.mcore.util.InventoryUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.