CreativeMasterBonin

BaseGenerator pops items out

Mar 25th, 2025
91
0
15 hours
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.70 KB | None | 0 0
  1. package net.bcm.cmatd.blockentity;
  2.  
  3. import net.bcm.cmatd.BaseEnergyStorage;
  4. import net.bcm.cmatd.Cmatd;
  5. import net.bcm.cmatd.gui.BaseEnergyMakerMenu;
  6. import net.minecraft.core.BlockPos;
  7. import net.minecraft.core.Direction;
  8. import net.minecraft.core.HolderLookup;
  9. import net.minecraft.core.NonNullList;
  10. import net.minecraft.nbt.CompoundTag;
  11. import net.minecraft.network.chat.Component;
  12. import net.minecraft.network.protocol.Packet;
  13. import net.minecraft.network.protocol.game.ClientGamePacketListener;
  14. import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
  15. import net.minecraft.world.ContainerHelper;
  16. import net.minecraft.world.MenuProvider;
  17. import net.minecraft.world.entity.player.Inventory;
  18. import net.minecraft.world.entity.player.Player;
  19. import net.minecraft.world.inventory.AbstractContainerMenu;
  20. import net.minecraft.world.inventory.ContainerData;
  21. import net.minecraft.world.item.ItemStack;
  22. import net.minecraft.world.item.crafting.RecipeType;
  23. import net.minecraft.world.level.block.entity.BlockEntity;
  24. import net.minecraft.world.level.block.state.BlockState;
  25. import net.minecraft.world.level.block.state.properties.BlockStateProperties;
  26. import net.neoforged.neoforge.capabilities.Capabilities;
  27. import net.neoforged.neoforge.common.util.Lazy;
  28. import net.neoforged.neoforge.energy.IEnergyStorage;
  29. import net.neoforged.neoforge.items.IItemHandler;
  30. import net.neoforged.neoforge.items.ItemStackHandler;
  31. import org.jetbrains.annotations.Nullable;
  32.  
  33. public class BaseEnergyMakerBE extends BlockEntity implements MenuProvider {
  34.     private final BaseEnergyStorage energyStorage =
  35.             new BaseEnergyStorage(10000,1000,1000){
  36.                 @Override
  37.                 public boolean canReceive() {
  38.                     return false;
  39.                 }
  40.             };
  41.     private final Lazy<IEnergyStorage> lazyEnergyStorage = Lazy.of(() ->
  42.             energyStorage);
  43.  
  44.     public int energy,energyProduction;
  45.  
  46.     private NonNullList<ItemStack> itemList = NonNullList.withSize(1, ItemStack.EMPTY);
  47.  
  48.     private final ItemStackHandler items = new ItemStackHandler(){
  49.         @Override
  50.         protected void onContentsChanged(int slot) {
  51.             setChanged();
  52.         }
  53.     };
  54.  
  55.     private final ContainerData machineData;
  56.  
  57.     public static final int GENERATE = 50;
  58.     public static final int CAPACITY = 10000;
  59.  
  60.     public static int SLOT_COUNT = 1;
  61.     public static int SLOT = 0;
  62.  
  63.     private int burnTime;
  64.  
  65.     public int getBurnTime(){
  66.         return burnTime;
  67.     }
  68.  
  69.     public BaseEnergyMakerBE(BlockPos pos, BlockState blockState){
  70.         super(CmatdBE.BASE_ENERGY_MAKER_BE.get(), pos, blockState);
  71.         this.machineData = new ContainerData() {
  72.             @Override
  73.             public int get(int index) {
  74.                 return switch(index){
  75.                     case 0 -> energyStorage.getEnergyStored() & 0xFFFF;
  76.                     case 1 -> energyStorage.getEnergyStored() >> 16;
  77.                     default -> throw new IllegalArgumentException("index not in bounds " + index);
  78.                 };
  79.             }
  80.  
  81.             @Override
  82.             public void set(int index, int value) {
  83.                 switch(index){
  84.                     case 0 -> energyStorage.setEnergy((energyStorage.getEnergyStored() & 0xFFFF0000) | (value & 0xFFFF));
  85.                     case 1 -> energyStorage.setEnergy((energyStorage.getEnergyStored() & 0xFFFF) | (value << 16));
  86.                     default -> throw new IllegalArgumentException("index not in bounds " + index);
  87.                 }
  88.             }
  89.  
  90.             @Override
  91.             public int getCount() {
  92.                 return 2;
  93.             }
  94.         };
  95.     }
  96.  
  97.     public BaseEnergyStorage getEnergyObject(){
  98.         return energyStorage;
  99.     }
  100.  
  101.     @Override
  102.     public Component getDisplayName() {
  103.         return Component.literal("Base Energy Maker");
  104.     }
  105.  
  106.     @Nullable
  107.     @Override
  108.     public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) {
  109.         return new BaseEnergyMakerMenu(i,player,getBlockPos());
  110.     }
  111.  
  112.     public void serverTick(){
  113.         if(!(getBlockEntity().getLevel() == null)){
  114.             if(getBlockEntity().getLevel().getGameTime() % 2 == 0){
  115.                 boolean saturated = energyStorage.isSaturatedEnergy();
  116.                 boolean burnTimeNotZero = burnTime > 0;
  117.                 level.setBlockAndUpdate(getBlockPos(),getBlockState().setValue(BlockStateProperties.POWERED,burnTimeNotZero));
  118.             }
  119.         }
  120.         generateEnergy();
  121.         distributeEnergy();
  122.     }
  123.  
  124.     private void setBurnTime(int bt) {
  125.         if (bt == burnTime) {
  126.             return;
  127.         }
  128.         burnTime = bt;
  129.     }
  130.  
  131.     private void generateEnergy() {
  132.         if (energyStorage.getEnergyStored() < energyStorage.getMaxEnergyStored()) {
  133.             if (burnTime <= 0) {
  134.                 ItemStack fuel = items.getStackInSlot(SLOT);
  135.                 // no fuel
  136.                 if (fuel.isEmpty()) {
  137.                     return;
  138.                 }
  139.                 setBurnTime(fuel.getBurnTime(RecipeType.SMELTING));
  140.                 // not fuel
  141.                 if (burnTime <= 0) {
  142.                     return;
  143.                 }
  144.                 items.extractItem(SLOT, 1, false);
  145.                 setChanged();
  146.             }
  147.             else{
  148.                 setBurnTime(burnTime - 1);
  149.                 energyStorage.receiveEnergy(GENERATE, false);
  150.                 setChanged();
  151.             }
  152.         }
  153.     }
  154.  
  155.     private void distributeEnergy() {
  156.         for (Direction direction : Direction.values()) {
  157.             if (energyStorage.getEnergyStored() <= 0) {
  158.                 return;
  159.             }
  160.             // get blocks that are energy capable
  161.             IEnergyStorage energy = level.getCapability(Capabilities.EnergyStorage.BLOCK,
  162.                     getBlockPos().relative(direction), null);
  163.             if (energy != null) {
  164.                 if (energy.canReceive()) {
  165.                     int received = energy.receiveEnergy(Math.min(
  166.                             this.energyStorage.getEnergyStored(),
  167.                             energyStorage.getMaxExtract()), false);
  168.                     this.energyStorage.extractEnergy(received, false);
  169.                     setChanged();
  170.                 }
  171.             }
  172.         }
  173.     }
  174.  
  175.     public NonNullList<ItemStack> getItemStackList(){
  176.         return this.itemList;
  177.     }
  178.  
  179.     @Override
  180.     protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) {
  181.         super.saveAdditional(tag, registries);
  182.         this.itemList.set(0,this.items.getStackInSlot(0));
  183.         ContainerHelper.saveAllItems(tag,this.itemList,registries);
  184.         tag.putInt("energy",energyStorage.getEnergyStored());
  185.         tag.putInt("burn_time",burnTime);
  186.     }
  187.  
  188.     @Override
  189.     protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) {
  190.         super.loadAdditional(tag, registries);
  191.         this.itemList = NonNullList.withSize(1, ItemStack.EMPTY);
  192.         ContainerHelper.loadAllItems(tag,this.itemList,registries);
  193.  
  194.         if(tag.contains("energy")){
  195.             energyStorage.setEnergy(tag.getInt("energy"));
  196.         }
  197.         burnTime = tag.getInt("burn_time");
  198.     }
  199.  
  200.     public BlockEntity getBlockEntity(){
  201.         return this;
  202.     }
  203.  
  204.     public IItemHandler getItemHandler(){
  205.         return items;
  206.     }
  207.  
  208.     public int getMaxEnergy(){
  209.         return this.energyStorage.getCapacity();
  210.     }
  211.  
  212.     @Nullable
  213.     @Override
  214.     public Packet<ClientGamePacketListener> getUpdatePacket() {
  215.         return ClientboundBlockEntityDataPacket.create(this);
  216.     }
  217.  
  218.     public IEnergyStorage getEnergyStorage() {
  219.         return lazyEnergyStorage.get();
  220.     }
  221. }
  222.  
Add Comment
Please, Sign In to add comment