123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package me.km.inventory;
- import me.km.KajetansMod;
- import net.minecraft.entity.player.PlayerEntity;
- import net.minecraft.entity.player.ServerPlayerEntity;
- import net.minecraft.inventory.container.ClickType;
- import net.minecraft.item.ItemStack;
- import net.minecraft.util.text.ITextComponent;
- public class CustomContainer extends CustomContainerBase
- {
- private boolean canBeClosed;
-
- public CustomContainer(InventoryBase inv, ServerPlayerEntity p, ITextComponent title)
- {
- super(inv, p, title);
- canBeClosed = true;
- }
-
- public CustomContainer(InventoryBase inv, PlayerEntity p, ITextComponent title, int id)
- {
- super(inv, p, title, id);
- canBeClosed = true;
- }
-
- @Override
- public void closeSafe()
- {
- if(canBeClosed)
- {
- super.closeSafe();
- }
- else if(isServerSide)
- {
- KajetansMod.scheduler.scheduleTask(() ->
- {
- if(viewer.openContainer.windowId == this.windowId)
- {
- super.closeSafe();
- }
- });
- }
- }
-
- @Override
- public void openForPlayer()
- {
- // opening container on next tick to prevent closing during noClicking or onCanceledClick
- if(isServerSide)
- {
- if(viewer.openContainer instanceof CustomContainer)
- {
- CustomContainer cc = (CustomContainer) viewer.openContainer;
- if(!cc.canBeClosed)
- {
- KajetansMod.scheduler.scheduleTask(() -> openForPlayer());
- return;
- }
- }
- super.openForPlayer();
- }
- }
-
- @Override
- public final ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity p)
- {
- if(slotId < 0 || slotId >= inv.getSizeInventory())
- {
- return super.slotClick(slotId, dragType, clickTypeIn, p);
- }
- switch(inv.getSlotStatus(slotId))
- {
- case 0: return ItemStack.EMPTY;
- case 1: return super.slotClick(slotId, dragType, clickTypeIn, p);
- case 2:
- if(isServerSide)
- {
- //System.out.println("Button was pressed");
- ServerPlayerEntity player = (ServerPlayerEntity) p;
- canBeClosed = false;
- onButtonClick(slotId, dragType, clickTypeIn, player);
- canBeClosed = true;
- }
- return ItemStack.EMPTY;
- case 3:
- if(isServerSide)
- {
- //System.out.println("Button was pressed, serverside cancel possible");
- ServerPlayerEntity player = (ServerPlayerEntity) p;
- canBeClosed = false;
- if(onButtonClick(slotId, dragType, clickTypeIn, player))
- {
- canBeClosed = true;
- return ItemStack.EMPTY;
- }
- canBeClosed = true;
- }
- return super.slotClick(slotId, dragType, clickTypeIn, p);
- }
- return ItemStack.EMPTY;
- }
-
- public boolean onButtonClick(int slotId, int dragType, ClickType clickTypeIn, ServerPlayerEntity player)
- {
- return false;
- }
- }
|