Skip to content

Commit 666681f

Browse files
committed
Allow structure void to be used in structures to define literal air
1 parent 85bcad8 commit 666681f

File tree

5 files changed

+18
-8
lines changed

5 files changed

+18
-8
lines changed

src/main/java/aztech/modern_industrialization/machines/multiblocks/ShapeMatcher.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,11 +284,13 @@ public int buildMultiblock(Level level, boolean structureBlocks) {
284284
var optionalStructureBlock = member.asStructureBlock(pos, structureBlocks);
285285
if (optionalStructureBlock.isPresent()) {
286286
BlockState state = optionalStructureBlock.get().getFirst();
287-
FastBlockEntity be = optionalStructureBlock.get().getSecond();
288287
level.setBlockAndUpdate(pos, state);
289-
level.setBlockEntity(be);
290-
be.setChanged();
291-
be.sync();
288+
FastBlockEntity be = optionalStructureBlock.get().getSecond();
289+
if (be != null) {
290+
level.setBlockEntity(be);
291+
be.setChanged();
292+
be.sync();
293+
}
292294
setBlocks++;
293295
continue;
294296
} else if (member instanceof SimpleStructureMember simpleMember) {

src/main/java/aztech/modern_industrialization/machines/multiblocks/structure/MIStructureTemplateManager.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,12 @@ public static StructureResult fromWorld(ResourceLocation id, Level level,
127127

128128
for (BlockPos pos : BlockPos.betweenClosed(minPos, maxPos)) {
129129
BlockState state = toTemplateState(level, pos, level.getBlockState(pos), controllerDirection);
130-
if (state.isAir() || state.is(Blocks.STRUCTURE_VOID)) {
130+
if (state.isAir()) {
131131
continue;
132132
}
133+
if (state.is(Blocks.STRUCTURE_VOID)) {
134+
state = Blocks.AIR.defaultBlockState();
135+
}
133136
BlockEntity blockEntity = level.getBlockEntity(pos);
134137

135138
boolean isIgnoreNBT = ignoreNBTPositions.contains(pos);

src/main/java/aztech/modern_industrialization/machines/multiblocks/structure/member/HatchStructureMember.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import java.util.Optional;
4141
import net.minecraft.core.BlockPos;
4242
import net.minecraft.world.level.block.state.BlockState;
43+
import org.jetbrains.annotations.Nullable;
4344

4445
public final class HatchStructureMember extends SimpleStructureMember {
4546
public static final MapCodec<HatchStructureMember> CODEC = RecordCodecBuilder.mapCodec(instance -> instance
@@ -79,7 +80,7 @@ public StructureMemberType<?> type() {
7980
}
8081

8182
@Override
82-
public Optional<Pair<BlockState, FastBlockEntity>> asStructureBlock(BlockPos pos, boolean required) {
83+
public Optional<Pair<BlockState, @Nullable FastBlockEntity>> asStructureBlock(BlockPos pos, boolean required) {
8384
if (required) {
8485
var state = MIBlock.STRUCTURE_MULTIBLOCK_MEMBER.asBlock().defaultBlockState();
8586
state = state.setValue(StructureMultiblockMemberBlock.MODE, StructureMemberMode.HATCH);

src/main/java/aztech/modern_industrialization/machines/multiblocks/structure/member/LiteralStructureMember.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.List;
3333
import java.util.Optional;
3434
import net.minecraft.core.BlockPos;
35+
import net.minecraft.world.level.block.Blocks;
3536
import net.minecraft.world.level.block.entity.BlockEntity;
3637
import net.minecraft.world.level.block.state.BlockState;
3738
import org.jetbrains.annotations.Nullable;
@@ -59,7 +60,10 @@ public boolean matchesState(BlockState state, @Nullable BlockEntity blockEntity)
5960
}
6061

6162
@Override
62-
public Optional<Pair<BlockState, FastBlockEntity>> asStructureBlock(BlockPos pos, boolean required) {
63+
public Optional<Pair<BlockState, @Nullable FastBlockEntity>> asStructureBlock(BlockPos pos, boolean required) {
64+
if (preview.state().get().isAir()) {
65+
return Optional.of(new Pair<>(Blocks.STRUCTURE_VOID.defaultBlockState(), null));
66+
}
6367
return Optional.empty();
6468
}
6569

src/main/java/aztech/modern_industrialization/machines/multiblocks/structure/member/SimpleStructureMember.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public StructureMemberType<?> type() {
8282
}
8383

8484
@Override
85-
public Optional<Pair<BlockState, FastBlockEntity>> asStructureBlock(BlockPos pos, boolean required) {
85+
public Optional<Pair<BlockState, @Nullable FastBlockEntity>> asStructureBlock(BlockPos pos, boolean required) {
8686
if (required) {
8787
var state = MIBlock.STRUCTURE_MULTIBLOCK_MEMBER.asBlock().defaultBlockState();
8888
state = state.setValue(StructureMultiblockMemberBlock.MODE, StructureMemberMode.SIMPLE);

0 commit comments

Comments
 (0)