Core/src/main/java/eu/univento/core/api/items/InventoryManager.java

94 lines
3.0 KiB
Java

package eu.univento.core.api.items;
import eu.univento.core.api.player.CustomPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack;
import java.util.List;
/**
* @author joethei
* @version 0.1
*/
public class InventoryManager implements Listener{
private static List<ClickInventory> inventoryList;
public static List<ClickInventory> getInventoryList() {
return inventoryList;
}
public static void addInventory(ClickInventory inventory) {
inventoryList.add(inventory);
}
public static void removeInventory(ClickInventory inventory) {
inventoryList.remove(inventory);
}
public static NamedInventory[] getNamedInventories(final CustomPlayer p) {
if(!p.hasMetadata("NamedInventory")) return new NamedInventory[2];
return ((NamedInventory[])p.getMetadata("NamedInventory").get(0).value()).clone();
}
public static NamedInventory getNamedInventory(final CustomPlayer p) {
return getNamedInventories(p)[0];
}
public static PageInventory[] getPageInventories(final CustomPlayer p) {
if(!p.hasMetadata("PageInventory")) return new PageInventory[2];
return ((PageInventory[])p.getMetadata("PageInventory").get(0).value()).clone();
}
public static PageInventory getPageInventory(CustomPlayer p) {
return getPageInventories(p)[0];
}
public static ItemStack[] generateEmptyPage(int size) {
size = (int) (Math.ceil(size / 9.0) * 9);
return new ItemStack[Math.min(54, size)];
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
int i = 0;
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getWhoClicked());
if(e.getInventory() instanceof ClickInventory) {
for(ClickInventory inventory : inventoryList) {
if(inventory.getPlayer() == p)
inventory.onInventoryClick(e);
if(i++ == 1) break;
}
}
}
@EventHandler
public void onInventoryDrag(InventoryDragEvent e) {
int i = 0;
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getWhoClicked());
for(ClickInventory inventory : inventoryList) {
if(inventory.getPlayer() == p) {
inventory.onInventoryDrag(e);
if(i++ == 1) break;
}
}
}
@EventHandler
public void onQuit(PlayerQuitEvent e) {
int i = 0;
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if(inventoryList == null) return;
for(ClickInventory inventory : inventoryList) {
if(inventory.getPlayer() == p) {
if(inventory.isInUse()) inventory.closeInventory(false);
if(i ++ == 1) break;
}
}
}
}