coriin

CastingTableBlockEntity

Jan 13th, 2024
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.14 KB | None | 0 0
  1. package net.coriin.rechroma.block.entity.custom;
  2.  
  3. import net.coriin.rechroma.block.ModBlocks;
  4. import net.coriin.rechroma.block.entity.ModBlockEntities;
  5. import net.minecraft.core.BlockPos;
  6. import net.minecraft.core.Direction;
  7. import net.minecraft.nbt.CompoundTag;
  8. import net.minecraft.network.chat.Component;
  9. import net.minecraft.network.chat.TextComponent;
  10. import net.minecraft.world.MenuProvider;
  11. import net.minecraft.world.SimpleContainer;
  12. import net.minecraft.world.entity.player.Inventory;
  13. import net.minecraft.world.entity.player.Player;
  14. import net.minecraft.world.inventory.AbstractContainerMenu;
  15. import net.minecraft.world.level.block.entity.BlockEntity;
  16. import net.minecraft.world.level.block.entity.BlockEntityType;
  17. import net.minecraft.world.level.block.state.BlockState;
  18. import net.minecraftforge.common.capabilities.Capability;
  19. import net.minecraftforge.common.util.LazyOptional;
  20. import net.minecraftforge.items.CapabilityItemHandler;
  21. import net.minecraftforge.items.IItemHandler;
  22. import net.minecraftforge.items.ItemStackHandler;
  23. import org.jetbrains.annotations.NotNull;
  24. import org.jetbrains.annotations.Nullable;
  25.  
  26. import javax.annotation.Nonnull;
  27.  
  28. public class CastingTableBlockEntity extends BlockEntity implements MenuProvider {
  29.  
  30.     protected final ItemStackHandler itemHandler = new ItemStackHandler(10){
  31.         @Override
  32.         protected void onContentsChanged(int slot) {
  33.             setChanged();
  34.         }
  35.     };
  36.  
  37.     private LazyOptional<IItemHandler> lazyItemHandler= LazyOptional.empty();
  38.  
  39.     public CastingTableBlockEntity(BlockEntityType<?> pType, BlockPos pPos, BlockState pBlockState) {
  40.         super(ModBlockEntities.CASTING_TABLE_ENTITY.get(), pPos, pBlockState);
  41.     }
  42.  
  43.     @Override
  44.     public Component getDisplayName() {
  45.         return new TextComponent("Casting Table");
  46.     }
  47.  
  48.     @Nullable
  49.     @Override
  50.     public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) {
  51.         return ;
  52.     }
  53.  
  54.     @Nonnull
  55.     @Override
  56.     public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @javax.annotation.Nullable Direction side) {
  57.         if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
  58.             return lazyItemHandler.cast();
  59.         }
  60.  
  61.         return super.getCapability(cap, side);
  62.     }
  63.  
  64.     @Override
  65.     public void onLoad() {
  66.         super.onLoad();
  67.         lazyItemHandler = LazyOptional.of(() -> itemHandler);
  68.     }
  69.  
  70.     @Override
  71.     public void invalidateCaps()  {
  72.         super.invalidateCaps();
  73.         lazyItemHandler.invalidate();
  74.     }
  75.  
  76.     @Override
  77.     protected void saveAdditional(@NotNull CompoundTag tag) {
  78.         tag.put("inventory", itemHandler.serializeNBT());
  79.         super.saveAdditional(tag);
  80.     }
  81.  
  82.     @Override
  83.     public void load(CompoundTag nbt) {
  84.         super.load(nbt);
  85.         itemHandler.deserializeNBT(nbt.getCompound("inventory"));
  86.     }
  87.  
  88.     public void drops() {
  89.         SimpleContainer inventory = new SimpleContainer(itemHandler.getSlots());
  90.         for (int i = 0; i < itemHandler.getSlots(); i++) {
  91.             inventory.setItem(i, itemHandler.getStackInSlot(i));
  92.         }
  93.     }
  94. }
  95.  
  96.  
Add Comment
Please, Sign In to add comment