Skip to content

Commit 12015ef

Browse files
committed
Use Lazy<BlockState> for the lazy blockstate codec instead of a supplier
1 parent 1bcda12 commit 12015ef

File tree

7 files changed

+31
-47
lines changed

7 files changed

+31
-47
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import net.minecraft.tags.BlockTags;
4242
import net.minecraft.world.level.block.Blocks;
4343
import net.minecraft.world.level.block.state.BlockState;
44+
import net.neoforged.neoforge.common.util.Lazy;
4445
import org.jetbrains.annotations.Nullable;
4546

4647
public final class StructureMultiblockInputFormatters {
@@ -128,7 +129,7 @@ public static List<StructureMemberTest> members(String input) {
128129
} else {
129130
try {
130131
var blockResult = BlockStateParser.parseForBlock(registry, part, true);
131-
members.add(new StateStructureMemberTest(blockResult::blockState));
132+
members.add(new StateStructureMemberTest(Lazy.of(blockResult::blockState)));
132133
} catch (CommandSyntaxException ignored) {
133134
return null;
134135
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@
3838
import java.util.List;
3939
import java.util.Objects;
4040
import java.util.Optional;
41-
import java.util.function.Supplier;
4241
import net.minecraft.core.BlockPos;
4342
import net.minecraft.world.level.block.state.BlockState;
43+
import net.neoforged.neoforge.common.util.Lazy;
4444

4545
public final class HatchStructureMember extends SimpleStructureMember {
4646
public static final MapCodec<HatchStructureMember> CODEC = RecordCodecBuilder.mapCodec(instance -> instance
4747
.group(
48-
MIExtraCodecs.LAZY_BLOCK_STATE.fieldOf("preview").forGetter(member -> member.previewSupplier),
48+
MIExtraCodecs.LAZY_BLOCK_STATE.fieldOf("preview").forGetter(member -> member.preview),
4949
StructureMemberTest.CODEC.listOf().fieldOf("tests").forGetter(HatchStructureMember::tests),
5050
MachineCasing.CODEC.fieldOf("casing").forGetter(HatchStructureMember::casing),
5151
HatchFlags.CODEC.fieldOf("hatch_flags").forGetter(HatchStructureMember::hatchFlags))
@@ -54,7 +54,7 @@ public final class HatchStructureMember extends SimpleStructureMember {
5454
private final MachineCasing casing;
5555
private final HatchFlags hatchFlags;
5656

57-
public HatchStructureMember(Supplier<BlockState> previewSupplier, List<StructureMemberTest> tests, MachineCasing casing, HatchFlags hatchFlags) {
57+
public HatchStructureMember(Lazy<BlockState> previewSupplier, List<StructureMemberTest> tests, MachineCasing casing, HatchFlags hatchFlags) {
5858
super(previewSupplier, tests);
5959
Objects.requireNonNull(casing);
6060
Objects.requireNonNull(hatchFlags);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@
3030
import com.mojang.serialization.MapCodec;
3131
import java.util.List;
3232
import java.util.Optional;
33-
import java.util.function.Supplier;
3433
import net.minecraft.core.BlockPos;
3534
import net.minecraft.world.level.block.state.BlockState;
35+
import net.neoforged.neoforge.common.util.Lazy;
3636

3737
public final class LiteralStructureMember extends SimpleStructureMember {
3838
public static final MapCodec<LiteralStructureMember> CODEC = MIExtraCodecs.LAZY_BLOCK_STATE
39-
.xmap(LiteralStructureMember::new, member -> member.previewSupplier).fieldOf("state");
39+
.xmap(LiteralStructureMember::new, member -> member.preview).fieldOf("state");
4040

41-
public LiteralStructureMember(Supplier<BlockState> previewSupplier) {
41+
public LiteralStructureMember(Lazy<BlockState> previewSupplier) {
4242
super(previewSupplier, List.of(new StateStructureMemberTest(previewSupplier)));
4343
}
4444

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

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,24 @@
3737
import java.util.List;
3838
import java.util.Objects;
3939
import java.util.Optional;
40-
import java.util.function.Supplier;
4140
import net.minecraft.core.BlockPos;
42-
import net.minecraft.world.level.block.Blocks;
4341
import net.minecraft.world.level.block.state.BlockState;
42+
import net.neoforged.neoforge.common.util.Lazy;
4443

4544
public sealed class SimpleStructureMember extends StructureMember permits HatchStructureMember, LiteralStructureMember {
4645
public static final MapCodec<SimpleStructureMember> CODEC = RecordCodecBuilder.mapCodec(instance -> instance
4746
.group(
48-
MIExtraCodecs.LAZY_BLOCK_STATE.fieldOf("preview").forGetter(member -> member.previewSupplier),
47+
MIExtraCodecs.LAZY_BLOCK_STATE.fieldOf("preview").forGetter(member -> member.preview),
4948
StructureMemberTest.CODEC.listOf().fieldOf("tests").forGetter(SimpleStructureMember::tests))
5049
.apply(instance, SimpleStructureMember::new));
5150

52-
protected final Supplier<BlockState> previewSupplier;
53-
54-
protected BlockState preview;
51+
protected final Lazy<BlockState> preview;
5552
protected final List<StructureMemberTest> tests;
5653

57-
public SimpleStructureMember(Supplier<BlockState> previewSupplier, List<StructureMemberTest> tests) {
58-
Objects.requireNonNull(previewSupplier);
54+
public SimpleStructureMember(Lazy<BlockState> preview, List<StructureMemberTest> tests) {
55+
Objects.requireNonNull(preview);
5956
Objects.requireNonNull(tests);
60-
this.previewSupplier = previewSupplier;
57+
this.preview = preview;
6158
this.tests = tests;
6259
}
6360

@@ -96,13 +93,7 @@ public boolean matchesState(BlockState state) {
9693

9794
@Override
9895
public BlockState getPreviewState() {
99-
if (preview == null) {
100-
preview = previewSupplier.get();
101-
if (preview == null) {
102-
preview = Blocks.AIR.defaultBlockState();
103-
}
104-
}
105-
return preview;
96+
return preview.get();
10697
}
10798

10899
@Override

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.function.Supplier;
3737
import net.minecraft.core.BlockPos;
3838
import net.minecraft.world.level.block.state.BlockState;
39+
import net.neoforged.neoforge.common.util.Lazy;
3940

4041
public sealed abstract class StructureMember implements SimpleMember permits SimpleStructureMember, VariableStructureMember {
4142
public static final Codec<StructureMember> CODEC = Codec.STRING.flatComapMap(
@@ -47,16 +48,16 @@ public sealed abstract class StructureMember implements SimpleMember permits Sim
4748
public abstract Optional<Pair<BlockState, FastBlockEntity>> asStructureBlock(BlockPos pos, boolean required);
4849

4950
public static SimpleStructureMember simple(Supplier<BlockState> preview, List<StructureMemberTest> tests) {
50-
return new SimpleStructureMember(preview, tests);
51+
return new SimpleStructureMember(Lazy.of(preview), tests);
5152
}
5253

5354
public static LiteralStructureMember literal(Supplier<BlockState> blockState) {
54-
return new LiteralStructureMember(blockState);
55+
return new LiteralStructureMember(Lazy.of(blockState));
5556
}
5657

5758
public static HatchStructureMember hatch(Supplier<BlockState> preview, List<StructureMemberTest> tests, MachineCasing casing,
5859
HatchFlags hatchFlags) {
59-
return new HatchStructureMember(preview, tests, casing, hatchFlags);
60+
return new HatchStructureMember(Lazy.of(preview), tests, casing, hatchFlags);
6061
}
6162

6263
public static VariableStructureMember variable(String name) {

src/main/java/aztech/modern_industrialization/machines/multiblocks/structure/member/test/StateStructureMemberTest.java

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,33 +27,24 @@
2727
import com.mojang.serialization.MapCodec;
2828
import com.mojang.serialization.codecs.RecordCodecBuilder;
2929
import java.util.Objects;
30-
import java.util.function.Supplier;
31-
import net.minecraft.world.level.block.Blocks;
3230
import net.minecraft.world.level.block.state.BlockState;
31+
import net.neoforged.neoforge.common.util.Lazy;
3332

3433
public final class StateStructureMemberTest extends StructureMemberTest {
3534
public static final MapCodec<StateStructureMemberTest> CODEC = RecordCodecBuilder.mapCodec(instance -> instance
3635
.group(
37-
MIExtraCodecs.LAZY_BLOCK_STATE.fieldOf("state").forGetter(test -> test.blockStateSupplier))
36+
MIExtraCodecs.LAZY_BLOCK_STATE.fieldOf("state").forGetter(test -> test.blockState))
3837
.apply(instance, StateStructureMemberTest::new));
3938

40-
private final Supplier<BlockState> blockStateSupplier;
39+
private final Lazy<BlockState> blockState;
4140

42-
private BlockState blockState;
43-
44-
public StateStructureMemberTest(Supplier<BlockState> blockStateSupplier) {
45-
Objects.requireNonNull(blockStateSupplier);
46-
this.blockStateSupplier = blockStateSupplier;
41+
public StateStructureMemberTest(Lazy<BlockState> blockState) {
42+
Objects.requireNonNull(blockState);
43+
this.blockState = blockState;
4744
}
4845

4946
public BlockState blockState() {
50-
if (blockState == null) {
51-
blockState = blockStateSupplier.get();
52-
if (blockState == null) {
53-
blockState = Blocks.AIR.defaultBlockState();
54-
}
55-
}
56-
return blockState;
47+
return blockState.get();
5748
}
5849

5950
@Override

src/main/java/aztech/modern_industrialization/util/MIExtraCodecs.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,23 @@
3232
import java.util.List;
3333
import java.util.Optional;
3434
import java.util.function.Function;
35-
import java.util.function.Supplier;
3635
import net.minecraft.world.level.block.state.BlockState;
3736
import net.neoforged.neoforge.common.conditions.ConditionalOps;
37+
import net.neoforged.neoforge.common.util.Lazy;
3838
import net.neoforged.neoforge.common.util.NeoForgeExtraCodecs;
3939

4040
public class MIExtraCodecs {
4141
public static final Codec<Float> FLOAT_01 = Codec.floatRange(0, 1);
4242
public static final Codec<Long> NON_NEGATIVE_LONG = longRange(0, Long.MAX_VALUE);
4343
public static final Codec<Long> POSITIVE_LONG = longRange(1, Long.MAX_VALUE);
44-
public static final Codec<Supplier<BlockState>> LAZY_BLOCK_STATE = new Codec<>() {
44+
public static final Codec<Lazy<BlockState>> LAZY_BLOCK_STATE = new Codec<>() {
4545
@Override
46-
public <T> DataResult<Pair<Supplier<BlockState>, T>> decode(DynamicOps<T> ops, T input) {
47-
return DataResult.success(Pair.of(() -> BlockState.CODEC.decode(ops, input).getOrThrow().getFirst(), input));
46+
public <T> DataResult<Pair<Lazy<BlockState>, T>> decode(DynamicOps<T> ops, T input) {
47+
return DataResult.success(Pair.of(Lazy.of(() -> BlockState.CODEC.decode(ops, input).getOrThrow().getFirst()), input));
4848
}
4949

5050
@Override
51-
public <T> DataResult<T> encode(Supplier<BlockState> input, DynamicOps<T> ops, T prefix) {
51+
public <T> DataResult<T> encode(Lazy<BlockState> input, DynamicOps<T> ops, T prefix) {
5252
return BlockState.CODEC.encode(input.get(), ops, prefix);
5353
}
5454
};

0 commit comments

Comments
 (0)