| 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;    }}
 |