diff --git a/src/main/java/ru/dbotthepony/mc/otm/block/BlockMatterBottler.java b/src/main/java/ru/dbotthepony/mc/otm/block/BlockMatterBottler.java index 56e20e32f..07f110640 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/block/BlockMatterBottler.java +++ b/src/main/java/ru/dbotthepony/mc/otm/block/BlockMatterBottler.java @@ -2,13 +2,16 @@ package ru.dbotthepony.mc.otm.block; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; import ru.dbotthepony.mc.otm.Registry; import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterBottler; +import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatteryPoweredWorker; import javax.annotation.Nullable; @@ -24,4 +27,10 @@ public class BlockMatterBottler extends BlockMatteryRotatable implements EntityB public BlockEntityTicker getTicker(Level p_153212_, BlockState p_153213_, BlockEntityType p_153214_) { return p_153212_.isClientSide || p_153214_ != Registry.BlockEntities.MATTER_BOTTLER ? null : BlockEntityMatterBottler::tick; } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(BlockEntityMatteryPoweredWorker.WORKER_STATE); + } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityMatterBottler.java b/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityMatterBottler.java index 27cf5c40c..da2373cf2 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityMatterBottler.java +++ b/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityMatterBottler.java @@ -11,6 +11,7 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.common.capabilities.Capability; @@ -254,6 +255,10 @@ public class BlockEntityMatterBottler extends BlockEntityMatteryPowered implemen if (tile.work_flow) { if (capability != null) { + if (tile.getBlockState().getValue(BlockEntityMatteryPoweredWorker.WORKER_STATE) != BlockEntityMatteryPoweredWorker.WorkerState.WORKING) { + level.setBlock(tile.getBlockPos(), tile.getBlockState().setValue(BlockEntityMatteryPoweredWorker.WORKER_STATE, BlockEntityMatteryPoweredWorker.WorkerState.WORKING), Block.UPDATE_CLIENTS); + } + if (tile.matter.getStoredMatter().compareTo(MATTER_EXCHANGE_RATE) < 0) { if (tile.grid != null) { var extracted = tile.grid.extractMatter( @@ -292,9 +297,17 @@ public class BlockEntityMatterBottler extends BlockEntityMatteryPowered implemen } } } + } else { + if (tile.getBlockState().getValue(BlockEntityMatteryPoweredWorker.WORKER_STATE) != BlockEntityMatteryPoweredWorker.WorkerState.IDLE) { + level.setBlock(tile.getBlockPos(), tile.getBlockState().setValue(BlockEntityMatteryPoweredWorker.WORKER_STATE, BlockEntityMatteryPoweredWorker.WorkerState.IDLE), Block.UPDATE_CLIENTS); + } } } else { if (capability != null) { + if (tile.getBlockState().getValue(BlockEntityMatteryPoweredWorker.WORKER_STATE) != BlockEntityMatteryPoweredWorker.WorkerState.WORKING) { + level.setBlock(tile.getBlockPos(), tile.getBlockState().setValue(BlockEntityMatteryPoweredWorker.WORKER_STATE, BlockEntityMatteryPoweredWorker.WorkerState.WORKING), Block.UPDATE_CLIENTS); + } + var energy = tile.energy.extractEnergyInner(ENERGY_CONSUMPTION, true); if (energy.compareTo(BigDecimal.ZERO) > 0) { @@ -316,6 +329,10 @@ public class BlockEntityMatterBottler extends BlockEntityMatteryPowered implemen } } } + } else { + if (tile.getBlockState().getValue(BlockEntityMatteryPoweredWorker.WORKER_STATE) != BlockEntityMatteryPoweredWorker.WorkerState.IDLE) { + level.setBlock(tile.getBlockPos(), tile.getBlockState().setValue(BlockEntityMatteryPoweredWorker.WORKER_STATE, BlockEntityMatteryPoweredWorker.WorkerState.IDLE), Block.UPDATE_CLIENTS); + } } if (tile.matter.getStoredMatter().compareTo(BigDecimal.ZERO) > 0 && tile.grid != null) {