123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package me.km.inventory;
- import me.km.KajetansMod;
- import me.km.snuviscript.SnuviInventory;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.entity.player.EntityPlayerMP;
- import net.minecraft.inventory.ClickType;
- import net.minecraft.inventory.ContainerChest;
- import net.minecraft.inventory.IInventory;
- import net.minecraft.inventory.InventoryBasic;
- import net.minecraft.item.ItemStack;
- import net.minecraft.network.play.server.SPacketOpenWindow;
- public class CustomContainer extends ContainerChest
- {
- private boolean canBeClosed;
-
- public CustomContainer(String title, int slotCount, EntityPlayerMP p)
- {
- super(p.inventory, new EntityInventory(title, slotCount, p), p);
- canBeClosed = true;
- }
-
- public void closeSafe(EntityPlayer p)
- {
- if(canBeClosed)
- {
- p.closeScreen();
- }
- else
- {
- KajetansMod.scheduler.scheduleTask(() ->
- {
- if(p.openContainer.windowId == this.windowId)
- {
- p.closeScreen();
- }
- });
- }
- }
-
- public CustomContainer(SnuviInventory inv, EntityPlayerMP p)
- {
- super(p.inventory, inv, p);
- canBeClosed = true;
- }
-
- public InventoryBasic getShownInventory()
- {
- return (InventoryBasic) this.getLowerChestInventory();
- }
-
- public void openForPlayer(EntityPlayerMP p)
- {
- // opening container on next tick to prevent closing during noClicking or onCanceledClick
- if(p.openContainer instanceof CustomContainer)
- {
- CustomContainer cc = (CustomContainer) p.openContainer;
- if(!cc.canBeClosed)
- {
- KajetansMod.scheduler.scheduleTask(() -> openForPlayer(p));
- return;
- }
- }
- if(p.openContainer != p.inventoryContainer)
- {
- p.closeScreen();
- }
- p.getNextWindowId();
- IInventory inv = this.getLowerChestInventory();
- p.connection.sendPacket(new SPacketOpenWindow(p.currentWindowId, "minecraft:container", inv.getDisplayName(), inv.getSizeInventory()));
- p.openContainer = this;
- p.openContainer.windowId = p.currentWindowId;
- p.openContainer.addListener(p);
- }
-
- public boolean noClicking(int slotId, int dragType, ClickType clickTypeIn, EntityPlayerMP player)
- {
- return true;
- }
-
- @Override
- public final ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer p)
- {
- if(p instanceof EntityPlayerMP)
- {
- EntityPlayerMP player = (EntityPlayerMP) p;
- canBeClosed = false;
- if(noClicking(slotId, dragType, clickTypeIn, player))
- {
- onCanceledClick(slotId, dragType, clickTypeIn, player);
- canBeClosed = true;
- return ItemStack.EMPTY;
- }
- canBeClosed = true;
- }
- return super.slotClick(slotId, dragType, clickTypeIn, p);
- }
-
- public void onCanceledClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayerMP player)
- {
- }
- }
|