TheOnlyTails

Container

Sep 29th, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.89 KB | None | 0 0
  1. public class RubyBarrelContainer extends Container {
  2.     public final RubyBarrelTileEntity tileEntity;
  3.     private final IWorldPosCallable canInteractWithCallable;
  4.  
  5.     public RubyBarrelContainer(final int windowId,
  6.                                @NotNull final PlayerInventory playerInventory,
  7.                                final RubyBarrelTileEntity tileEntity) {
  8.         super(ContainersRegistry.RUBY_BARREL.get(), windowId);
  9.  
  10.         this.tileEntity = tileEntity;
  11.  
  12.         assert tileEntity.getWorld() != null;
  13.  
  14.         this.canInteractWithCallable = IWorldPosCallable.of(tileEntity.getWorld(), tileEntity.getPos());
  15.  
  16.         int startX = 8;
  17.         int startY = 18;
  18.         int slotSizePlus2 = 18;
  19.  
  20.         // Barrel inventory slot assignment
  21.         for (int row = 0; row < 5; ++row) {
  22.             for (int column = 0; column < 9; ++column) {
  23.                 this.addSlot(new Slot(tileEntity,
  24.                         (row * 9) + column,
  25.                         startX + (column * slotSizePlus2),
  26.                         startY + (row * slotSizePlus2))
  27.                 );
  28.             }
  29.         }
  30.  
  31.         // Player inventory slot assignment
  32.         int startPlayerInvY = startY * 5 + 32;
  33.  
  34.         for (int row = 0; row < 3; ++row) {
  35.             for (int column = 0; column < 9; ++column) {
  36.                 this.addSlot(new Slot(playerInventory,
  37.                         9 + (row * 9) + column,
  38.                         startX + (column * slotSizePlus2),
  39.                         startPlayerInvY + (row * slotSizePlus2))
  40.                 );
  41.             }
  42.         }
  43.  
  44.         // Hotbar inventory slot assignment
  45.         int hotbarY = startPlayerInvY + (startPlayerInvY / 2) - 3;
  46.  
  47.         for (int column = 0; column < 9; column++) {
  48.             this.addSlot(new Slot(playerInventory,
  49.                     column,
  50.                     startX + (column * slotSizePlus2),
  51.                     hotbarY)
  52.             );
  53.         }
  54.     }
  55.  
  56.     public RubyBarrelContainer(
  57.             final int windowId, final PlayerInventory playerInventory, final PacketBuffer data) {
  58.         this(windowId, playerInventory,
  59.                 getTileEntity(playerInventory, data));
  60.     }
  61.  
  62.     private static RubyBarrelTileEntity getTileEntity(final PlayerInventory playerInventory,
  63.                                                       final PacketBuffer data) {
  64.  
  65.         Objects.requireNonNull(playerInventory, "playerInventory cannot be null");
  66.         Objects.requireNonNull(data, "data cannot be null");
  67.         final TileEntity tileAtPos = playerInventory.player.world.getTileEntity(data.readBlockPos());
  68.  
  69.         if (tileAtPos instanceof RubyBarrelTileEntity) {
  70.             return (RubyBarrelTileEntity) tileAtPos;
  71.         }
  72.  
  73.         throw new IllegalStateException("Tile entity is not correct! " + tileAtPos);
  74.     }
  75.  
  76.     @Override
  77.     public boolean canInteractWith(@NotNull PlayerEntity playerIn) {
  78.         return isWithinUsableDistance(
  79.                 canInteractWithCallable, playerIn, BlocksRegistry.RUBY_BARREL.get());
  80.     }
  81.  
  82.     @Override
  83.     public @NotNull ItemStack transferStackInSlot(@NotNull PlayerEntity playerIn, int index) {
  84.         ItemStack itemstack = ItemStack.EMPTY;
  85.         Slot slot = this.inventorySlots.get(index);
  86.         if (slot != null && slot.getHasStack()) {
  87.             ItemStack itemStack1 = slot.getStack();
  88.             itemstack = itemStack1.copy();
  89.             if (index < 36) {
  90.                 if (!this.mergeItemStack(itemStack1, 36, this.inventorySlots.size(), true)) {
  91.                     return ItemStack.EMPTY;
  92.                 }
  93.             } else if (!this.mergeItemStack(itemStack1, 0, 36, false)) {
  94.                 return ItemStack.EMPTY;
  95.             }
  96.  
  97.             if (itemStack1.isEmpty()) {
  98.                 slot.putStack(ItemStack.EMPTY);
  99.             } else {
  100.                 slot.onSlotChanged();
  101.             }
  102.         }
  103.         return itemstack;
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment