Drive viewer "drive" blockstate property

This commit is contained in:
DBotThePony 2021-09-01 16:25:32 +07:00
parent 079b0d8dcf
commit 9d13db4298
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 64 additions and 3 deletions

View File

@ -253,10 +253,50 @@ const facings = [
fs.writeFileSync(_root + 'blockstates/pattern_storage.json', JSON.stringify(blockstate, null, '\t'))
}
// Drive Viewer
{
const states = ['idle', 'working']
const machine = 'drive_viewer'
const blockstate = {
multipart: []
}
for (const face of facings) {
for (const state of states) {
blockstate.multipart.push({
when: {
facing: face.facing,
worker: state
},
apply: {
model: 'overdrive_that_matters:block/' + machine + '_' + state,
y: face.y ? face.y : undefined
}
});
}
blockstate.multipart.push({
when: {
facing: face.facing,
drive: true
},
apply: {
model: 'overdrive_that_matters:block/' + machine + '_drive_part',
y: face.y ? face.y : undefined
}
});
}
fs.writeFileSync(_root + 'blockstates/' + machine + '.json', JSON.stringify(blockstate, null, '\t'))
}
// Машины с WorkerState
{
const to_generate = ['matter_scanner', 'matter_replicator', 'matter_decomposer']
const to_generate_semi = ['matter_bottler', 'drive_viewer']
const to_generate_semi = ['matter_bottler']
const states = ['idle', 'working', 'error']
const states_semi = ['idle', 'working']

View File

@ -9,6 +9,7 @@ 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.level.block.state.properties.BooleanProperty;
import ru.dbotthepony.mc.otm.Registry;
import ru.dbotthepony.mc.otm.block.entity.BlockEntityDriveViewer;
@ -29,9 +30,12 @@ public class BlockDriveViewer extends BlockMatteryRotatable implements EntityBlo
return p_153212_.isClientSide || p_153214_ != Registry.BlockEntities.DRIVE_VIEWER ? null : BlockEntityDriveViewer::ticker;
}
public static final BooleanProperty DRIVE_PRESENT = BooleanProperty.create("drive");
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
super.createBlockStateDefinition(builder);
builder.add(SEMI_WORKER_STATE);
builder.add(DRIVE_PRESENT);
}
}

View File

@ -13,6 +13,7 @@ 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 ru.dbotthepony.mc.otm.Registry;
import ru.dbotthepony.mc.otm.block.BlockDriveViewer;
import ru.dbotthepony.mc.otm.block.entity.worker.WorkerState;
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import ru.dbotthepony.mc.otm.capability.MatteryMachineEnergyStorage;
@ -34,15 +35,31 @@ public class BlockEntityDriveViewer extends BlockEntityMatteryPowered {
super.setChanged();
if (level != null) {
var state = getBlockState();
if (drive_slot.getItem(0).getCapability(MatteryCapability.DRIVE).isPresent()) {
if (!getBlockState().getValue(BlockDriveViewer.DRIVE_PRESENT)) {
state = state.setValue(BlockDriveViewer.DRIVE_PRESENT, true);
}
} else {
if (getBlockState().getValue(BlockDriveViewer.DRIVE_PRESENT)) {
state = state.setValue(BlockDriveViewer.DRIVE_PRESENT, false);
}
}
if (drive_slot.getItem(0).getCapability(MatteryCapability.DRIVE).isPresent() && canIOItems()) {
if (getBlockState().getValue(WorkerState.SEMI_WORKER_STATE) != WorkerState.WORKING) {
level.setBlock(getBlockPos(), getBlockState().setValue(WorkerState.SEMI_WORKER_STATE, WorkerState.WORKING), Block.UPDATE_CLIENTS);
state = state.setValue(WorkerState.SEMI_WORKER_STATE, WorkerState.WORKING);
}
} else {
if (getBlockState().getValue(WorkerState.SEMI_WORKER_STATE) != WorkerState.IDLE) {
level.setBlock(getBlockPos(), getBlockState().setValue(WorkerState.SEMI_WORKER_STATE, WorkerState.IDLE), Block.UPDATE_CLIENTS);
state = state.setValue(WorkerState.SEMI_WORKER_STATE, WorkerState.IDLE);
}
}
if (state != getBlockState()) {
level.setBlock(getBlockPos(), state, Block.UPDATE_CLIENTS);
}
}
}