package com.thebrokenrail.energonrelics.block.entity.reactor; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.Inventories; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.collection.DefaultedList; import java.util.Objects; public class ReactorInputBlockEntity extends BlockEntity implements Inventory { public ReactorInputBlockEntity(BlockEntityType type) { super(type); } private final int INVENTORY_SIZE = 5; private final DefaultedList inv = DefaultedList.ofSize(INVENTORY_SIZE, ItemStack.EMPTY); @Override public int size() { return inv.size(); } @Override public boolean isEmpty() { boolean empty = false; for (ItemStack stack : inv) { if (stack.isEmpty()) { empty = true; break; } } return empty; } @Override public ItemStack getStack(int slot) { return inv.get(slot); } @Override public ItemStack removeStack(int slot, int amount) { ItemStack stack = Inventories.splitStack(inv, slot, amount); if (!stack.isEmpty()) { markDirty(); } return stack; } @Override public ItemStack removeStack(int slot) { return Inventories.removeStack(inv, slot); } @Override public void setStack(int slot, ItemStack stack) { inv.set(slot, stack); if (stack.getCount() > getMaxCountPerStack()) { stack.setCount(getMaxCountPerStack()); } } @Override public boolean canPlayerUse(PlayerEntity player) { if (Objects.requireNonNull(getWorld()).getBlockEntity(getPos()) != this) { return false; } else { return player.squaredDistanceTo((double) getPos().getX() + 0.5D, (double) getPos().getY() + 0.5D, (double) getPos().getZ() + 0.5D) <= 64.0D; } } @Override public void clear() { inv.clear(); } @Override public void fromTag(BlockState state, CompoundTag tag) { super.fromTag(state, tag); inv.clear(); Inventories.fromTag(tag, inv); } @Override public CompoundTag toTag(CompoundTag tag) { super.toTag(tag); Inventories.toTag(tag, inv); return tag; } }