TheOnlyTails

RubyBarrelContainer

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