Worker blockstate property
This commit is contained in:
parent
c719917035
commit
d3286c30de
@ -4,15 +4,18 @@ import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
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 net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
import ru.dbotthepony.mc.otm.Registry;
|
||||
import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterDecomposer;
|
||||
import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatteryPoweredWorker;
|
||||
import ru.dbotthepony.mc.otm.shapes.BlockShapes;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
@ -31,6 +34,12 @@ public class BlockMatterDecomposer extends BlockMatteryRotatable implements Enti
|
||||
return p_153212_.isClientSide || p_153214_ != Registry.BlockEntities.MATTER_DECOMPOSER ? null : BlockEntityMatterDecomposer::tick;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
||||
super.createBlockStateDefinition(builder);
|
||||
builder.add(BlockEntityMatteryPoweredWorker.WORKER_STATE);
|
||||
}
|
||||
|
||||
private static final List<VoxelShape> SHAPES;
|
||||
|
||||
static {
|
||||
|
@ -4,11 +4,13 @@ import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
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 net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
import ru.dbotthepony.mc.otm.Registry;
|
||||
@ -32,6 +34,12 @@ public class BlockMatterReplicator extends BlockMatteryRotatable implements Enti
|
||||
return p_153212_.isClientSide || p_153214_ != Registry.BlockEntities.MATTER_REPLICATOR ? null : BlockEntityMatteryPoweredWorker::basicTicker;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
||||
super.createBlockStateDefinition(builder);
|
||||
builder.add(BlockEntityMatteryPoweredWorker.WORKER_STATE);
|
||||
}
|
||||
|
||||
private static final List<VoxelShape> SHAPES;
|
||||
|
||||
static {
|
||||
|
@ -4,11 +4,13 @@ import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
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 net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
import ru.dbotthepony.mc.otm.Registry;
|
||||
@ -32,6 +34,12 @@ public class BlockMatterScanner extends BlockMatteryRotatable implements EntityB
|
||||
return p_153212_.isClientSide || p_153214_ != Registry.BlockEntities.MATTER_SCANNER ? null : BlockEntityMatteryPoweredWorker::basicTicker;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
||||
super.createBlockStateDefinition(builder);
|
||||
builder.add(BlockEntityMatteryPoweredWorker.WORKER_STATE);
|
||||
}
|
||||
|
||||
private static final List<VoxelShape> SHAPES;
|
||||
|
||||
static {
|
||||
|
@ -5,11 +5,14 @@ import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.DoubleTag;
|
||||
import net.minecraft.nbt.StringTag;
|
||||
import net.minecraft.nbt.Tag;
|
||||
import net.minecraft.util.StringRepresentable;
|
||||
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.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.properties.EnumProperty;
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@ -151,8 +154,31 @@ abstract public class BlockEntityMatteryPoweredWorker extends BlockEntityMattery
|
||||
return new MachineJobStatus();
|
||||
}
|
||||
|
||||
public enum WorkerState implements StringRepresentable {
|
||||
IDLE,
|
||||
WORKING,
|
||||
ERROR;
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public String getSerializedName() {
|
||||
return this == IDLE ? "idle" : this == WORKING ? "working" : "error";
|
||||
}
|
||||
}
|
||||
|
||||
public static final EnumProperty<WorkerState> WORKER_STATE = EnumProperty.create("worker", WorkerState.class);
|
||||
|
||||
private int idle_ticks_anim = 0;
|
||||
private int working_ticks_anim = 0;
|
||||
|
||||
protected void workerLoop() {
|
||||
if (throttle_ticks > 0) {
|
||||
if (level != null && throttle_ticks > 40 && getBlockState().hasProperty(WORKER_STATE) && getBlockState().getValue(WORKER_STATE) != WorkerState.ERROR) {
|
||||
level.setBlock(getBlockPos(), getBlockState().setValue(WORKER_STATE, WorkerState.ERROR), Block.UPDATE_CLIENTS);
|
||||
}
|
||||
|
||||
working_ticks_anim = 0;
|
||||
idle_ticks_anim = 0;
|
||||
throttle_ticks--;
|
||||
|
||||
if (throttle_ticks > 0)
|
||||
@ -160,6 +186,13 @@ abstract public class BlockEntityMatteryPoweredWorker extends BlockEntityMattery
|
||||
}
|
||||
|
||||
if (is_idling) {
|
||||
working_ticks_anim = 0;
|
||||
idle_ticks_anim++;
|
||||
|
||||
if (level != null && idle_ticks_anim > 20 && getBlockState().hasProperty(WORKER_STATE) && getBlockState().getValue(WORKER_STATE) != WorkerState.IDLE) {
|
||||
level.setBlock(getBlockPos(), getBlockState().setValue(WORKER_STATE, WorkerState.IDLE), Block.UPDATE_CLIENTS);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -168,14 +201,24 @@ abstract public class BlockEntityMatteryPoweredWorker extends BlockEntityMattery
|
||||
|
||||
if (input == null) {
|
||||
is_idling = true;
|
||||
working_ticks_anim = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
current_job = input;
|
||||
}
|
||||
|
||||
if (current_job.power_consumption_multiplier.compareTo(BigDecimal.ZERO) != 0 && energy.getBatteryLevel().compareTo(BigDecimal.ZERO) == 0)
|
||||
if (current_job.power_consumption_multiplier.compareTo(BigDecimal.ZERO) != 0 && energy.getBatteryLevel().compareTo(BigDecimal.ZERO) == 0) {
|
||||
idle_ticks_anim++;
|
||||
|
||||
if (level != null && idle_ticks_anim > 20 && getBlockState().hasProperty(WORKER_STATE) && getBlockState().getValue(WORKER_STATE) != WorkerState.IDLE) {
|
||||
level.setBlock(getBlockPos(), getBlockState().setValue(WORKER_STATE, WorkerState.IDLE), Block.UPDATE_CLIENTS);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
idle_ticks_anim = 0;
|
||||
|
||||
if (work_ticks < current_job.ticks_processing_time) {
|
||||
if (current_job.power_consumption_multiplier.compareTo(BigDecimal.ZERO) != 0) {
|
||||
@ -191,6 +234,8 @@ abstract public class BlockEntityMatteryPoweredWorker extends BlockEntityMattery
|
||||
return;
|
||||
}
|
||||
|
||||
working_ticks_anim++;
|
||||
|
||||
double new_work_ticks = work_speed.doubleValue() + work_ticks;
|
||||
|
||||
if (new_work_ticks > current_job.ticks_processing_time) {
|
||||
@ -212,7 +257,6 @@ abstract public class BlockEntityMatteryPoweredWorker extends BlockEntityMattery
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
MachineJobStatus status = onWorkTick(new WorkTickContext(current_job, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ONE));
|
||||
|
||||
if (!status.valid) {
|
||||
@ -220,6 +264,7 @@ abstract public class BlockEntityMatteryPoweredWorker extends BlockEntityMattery
|
||||
return;
|
||||
}
|
||||
|
||||
working_ticks_anim++;
|
||||
work_ticks += 1d;
|
||||
|
||||
if (work_ticks >= current_job.ticks_processing_time) {
|
||||
@ -243,6 +288,10 @@ abstract public class BlockEntityMatteryPoweredWorker extends BlockEntityMattery
|
||||
throttle_ticks += finish.throttle;
|
||||
}
|
||||
}
|
||||
|
||||
if (level != null && working_ticks_anim > 20 && getBlockState().hasProperty(WORKER_STATE) && getBlockState().getValue(WORKER_STATE) != WorkerState.WORKING) {
|
||||
level.setBlock(getBlockPos(), getBlockState().setValue(WORKER_STATE, WorkerState.WORKING), Block.UPDATE_CLIENTS);
|
||||
}
|
||||
}
|
||||
|
||||
public double getWorkTicks() {
|
||||
|
Loading…
Reference in New Issue
Block a user