CustomContainer.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package me.km.inventory;
  2. import me.km.KajetansMod;
  3. import net.minecraft.entity.player.EntityPlayer;
  4. import net.minecraft.entity.player.EntityPlayerMP;
  5. import net.minecraft.inventory.ClickType;
  6. import net.minecraft.item.ItemStack;
  7. public class CustomContainer extends CustomContainerBase
  8. {
  9. private boolean canBeClosed;
  10. public CustomContainer(InventoryBase inv, EntityPlayer p)
  11. {
  12. super(inv, p);
  13. canBeClosed = true;
  14. }
  15. @Override
  16. public void closeSafe()
  17. {
  18. if(canBeClosed)
  19. {
  20. super.closeSafe();
  21. }
  22. else if(isServerSide)
  23. {
  24. KajetansMod.scheduler.scheduleTask(() ->
  25. {
  26. if(viewer.openContainer.windowId == this.windowId)
  27. {
  28. super.closeSafe();
  29. }
  30. });
  31. }
  32. }
  33. @Override
  34. public void openForPlayer()
  35. {
  36. // opening container on next tick to prevent closing during noClicking or onCanceledClick
  37. if(isServerSide)
  38. {
  39. if(viewer.openContainer instanceof CustomContainer)
  40. {
  41. CustomContainer cc = (CustomContainer) viewer.openContainer;
  42. if(!cc.canBeClosed)
  43. {
  44. KajetansMod.scheduler.scheduleTask(() -> openForPlayer());
  45. return;
  46. }
  47. }
  48. super.openForPlayer();
  49. }
  50. }
  51. @Override
  52. public final ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer p)
  53. {
  54. if(slotId < 0 || slotId >= inv.getSizeInventory())
  55. {
  56. return super.slotClick(slotId, dragType, clickTypeIn, p);
  57. }
  58. switch(inv.getSlotStatus(slotId))
  59. {
  60. case 0: return ItemStack.EMPTY;
  61. case 1: return super.slotClick(slotId, dragType, clickTypeIn, p);
  62. case 2:
  63. if(isServerSide)
  64. {
  65. //System.out.println("Button was pressed");
  66. EntityPlayerMP player = (EntityPlayerMP) p;
  67. canBeClosed = false;
  68. onButtonClick(slotId, dragType, clickTypeIn, player);
  69. canBeClosed = true;
  70. }
  71. return ItemStack.EMPTY;
  72. case 3:
  73. if(isServerSide)
  74. {
  75. //System.out.println("Button was pressed, serverside cancel possible");
  76. EntityPlayerMP player = (EntityPlayerMP) p;
  77. canBeClosed = false;
  78. if(onButtonClick(slotId, dragType, clickTypeIn, player))
  79. {
  80. canBeClosed = true;
  81. return ItemStack.EMPTY;
  82. }
  83. canBeClosed = true;
  84. }
  85. return super.slotClick(slotId, dragType, clickTypeIn, p);
  86. }
  87. return ItemStack.EMPTY;
  88. }
  89. public boolean onButtonClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayerMP player)
  90. {
  91. return false;
  92. }
  93. }