Skip to content

Commit b516467

Browse files
committed
better name and extended storage
1 parent 88fc285 commit b516467

File tree

2 files changed

+31
-19
lines changed

2 files changed

+31
-19
lines changed

src/main/java/com/simibubi/create/content/contraptions/Contraption.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,7 +1144,7 @@ public void addBlocksToWorld(Level world, StructureTransform transform) {
11441144

11451145
translateMultiblockControllers(transform);
11461146

1147-
SingleBlockServerLevel popChamber = null;
1147+
GhostPlacementServerLevel ghost_level = null;
11481148

11491149
for (boolean nonBrittles : Iterate.trueAndFalse) {
11501150
for (StructureBlockInfo block : blocks.values()) {
@@ -1170,19 +1170,19 @@ public void addBlocksToWorld(Level world, StructureTransform transform) {
11701170
if (targetPos.getY() == world.getMinBuildHeight())
11711171
targetPos = targetPos.above();
11721172

1173-
if(popChamber == null && world instanceof ServerLevel serverWorld)
1174-
popChamber = new SingleBlockServerLevel(serverWorld);
1173+
if(ghost_level == null && world instanceof ServerLevel serverWorld)
1174+
ghost_level = new GhostPlacementServerLevel(serverWorld);
11751175

1176-
if(popChamber != null){
1177-
popChamber.setBlock(targetPos, state, Block.UPDATE_NONE);
1178-
BlockEntity be = popChamber.getBlockEntity(targetPos);
1176+
if(ghost_level != null){
1177+
ghost_level.setBlock(targetPos, state, Block.UPDATE_NONE);
1178+
BlockEntity be = ghost_level.getBlockEntity(targetPos);
11791179
if (be != null) {
11801180
CompoundTag tag = block.nbt();
11811181
tag = NBTProcessors.process(state, be, tag, false);
11821182
if (tag != null)
11831183
be.load(tag);
11841184
}
1185-
popChamber.destroyBlock(targetPos, true);
1185+
ghost_level.destroyBlock(targetPos, true);
11861186
}
11871187
world.levelEvent(2001, targetPos, Block.getId(state));
11881188
continue;

src/main/java/com/simibubi/create/content/contraptions/SingleBlockServerLevel.java renamed to src/main/java/com/simibubi/create/content/contraptions/GhostPlacementServerLevel.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,43 +13,55 @@
1313
import net.minecraft.world.level.block.entity.BlockEntity;
1414
import net.minecraft.world.level.block.state.BlockState;
1515

16-
public class SingleBlockServerLevel extends WrappedServerLevel {
16+
import java.util.HashMap;
17+
import java.util.Map;
1718

18-
public BlockState blockState;
19-
public @Nullable BlockEntity blockEntity;
19+
public class GhostPlacementServerLevel extends WrappedServerLevel {
2020

21-
public SingleBlockServerLevel(ServerLevel level) {
21+
protected final Map<BlockPos, BlockState> blockStates = new HashMap<>();
22+
protected final Map<BlockPos, BlockEntity> blockEntities = new HashMap<>();
23+
24+
public GhostPlacementServerLevel(ServerLevel level) {
2225
super(level);
23-
blockState = Blocks.AIR.defaultBlockState();
24-
blockEntity = null;
2526
}
2627

2728
@Override
2829
public boolean setBlock(BlockPos pos, BlockState newState, int flags) {
29-
blockState.onRemove(this, pos, newState, (flags & 64) != 0);
30-
blockState = newState;
31-
blockEntity = null;
30+
pos = pos.immutable();
31+
getBlockState(pos).onRemove(this, pos, newState, (flags & 64) != 0);
32+
BlockEntity blockEntity = getBlockEntity(pos);
33+
if (blockEntity != null) {
34+
blockEntity.setRemoved();
35+
blockEntities.remove(pos);
36+
}
37+
blockStates.put(pos, newState);
3238
return true;
3339
}
3440

3541
@Override
3642
public BlockState getBlockState(BlockPos pos) {
37-
return blockState;
43+
return blockStates.getOrDefault(pos, Blocks.AIR.defaultBlockState());
3844
}
3945

4046
@Nullable
4147
public BlockEntity getBlockEntity(BlockPos pos) {
42-
if (blockState.hasBlockEntity() && blockEntity == null)
48+
BlockState blockState = getBlockState(pos);
49+
BlockEntity blockEntity = blockEntities.getOrDefault(pos, null);
50+
if (blockState.hasBlockEntity() && blockEntity == null) {
4351
blockEntity = ((EntityBlock) blockState.getBlock()).newBlockEntity(pos, blockState);
52+
pos = pos.immutable();
53+
blockEntities.put(pos, blockEntity);
54+
}
4455
return blockEntity;
4556
}
4657

4758
@Override
4859
public boolean destroyBlock(BlockPos pos, boolean dropBlock, @Nullable Entity entity, int recursionLeft){
60+
BlockState blockState = getBlockState(pos);
4961
if (blockState.isAir())
5062
return false;
5163
if (dropBlock)
52-
Block.dropResources(blockState, this, pos, blockEntity, entity, ItemStack.EMPTY);
64+
Block.dropResources(blockState, this, pos, getBlockEntity(pos), entity, ItemStack.EMPTY);
5365
setBlock(pos, Blocks.AIR.defaultBlockState(), Block.UPDATE_NONE);
5466
return true;
5567
}

0 commit comments

Comments
 (0)