From 64a5056257a7722e3480b439d381eb985af7c33f Mon Sep 17 00:00:00 2001 From: ABKQPO <93412322+ABKQPO@users.noreply.github.com> Date: Thu, 10 Sep 2026 18:35:17 +0800 Subject: [PATCH] Add a creative fluid source for guide scenes Scenes build with a creative item source, and now with a creative fluid source as well. * A multiblock that wants water is shown complete instead of with an empty water position. * The existing fallback to a creative construct when survival placement makes no progress is unchanged. * Requires StructureLib 1.4.44. --- dependencies.gradle | 4 +-- .../structurelib/CreativeFluidSource.java | 26 +++++++++++++++++++ .../StructureLibBuildService.java | 3 ++- 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/hfstudio/guidenh/integration/structurelib/CreativeFluidSource.java diff --git a/dependencies.gradle b/dependencies.gradle index 3f56da0a..d32b7471 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -17,7 +17,7 @@ dependencies { shadowImplementation("org.eclipse.elk:org.eclipse.elk.alg.layered:0.11.0") shadowImplementation("org.eclipse.xtext:org.eclipse.xtext.xbase.lib:2.36.0") - devOnlyNonPublishable("com.github.GTNewHorizons:StructureLib:1.4.42:dev") + devOnlyNonPublishable("com.github.GTNewHorizons:StructureLib:1.4.44:dev") devOnlyNonPublishable("com.github.GTNewHorizons:GT5-Unofficial:5.09.54.36:dev") devOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.8.128-GTNH:dev") devOnlyNonPublishable("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-1045-GTNH:dev") @@ -61,7 +61,7 @@ dependencies { annotationProcessor("com.google.auto.value:auto-value:1.10.4") testImplementation("org.junit.jupiter:junit-jupiter-api:5.12.2") - testImplementation("com.github.GTNewHorizons:StructureLib:1.4.42:dev") + testImplementation("com.github.GTNewHorizons:StructureLib:1.4.44:dev") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.12.2") testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.12.2") } diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/CreativeFluidSource.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/CreativeFluidSource.java new file mode 100644 index 00000000..325b430d --- /dev/null +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/CreativeFluidSource.java @@ -0,0 +1,26 @@ +package com.hfstudio.guidenh.integration.structurelib; + +import net.minecraftforge.fluids.FluidStack; + +import javax.annotation.Nonnull; + +import com.gtnewhorizon.structurelib.fluid.IFluidSource; + +/** + * A fluid source that always holds as much of the requested fluid as asked for. + *

+ * Guide book scenes are built with a creative item source, and this is its fluid counterpart: it lets a scene fill the + * positions a multiblock wants a fluid at, e.g. the water an ore washing plant needs, without anybody having to carry + * that fluid. + */ +public class CreativeFluidSource implements IFluidSource { + + public static final CreativeFluidSource instance = new CreativeFluidSource(); + + @Nonnull + @Override + public FluidStack take(FluidStack resource, boolean simulate) { + if (resource == null || resource.getFluid() == null) throw new IllegalArgumentException(); + return new FluidStack(resource, resource.amount); + } +} diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibBuildService.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibBuildService.java index c8e5fd08..3b452d9d 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibBuildService.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibBuildService.java @@ -171,7 +171,8 @@ private static void buildStructure(IConstructable constructable, ItemStack trigg boolean useSurvival = constructable instanceof ISurvivalConstructable; if (useSurvival) { ISurvivalConstructable sc = (ISurvivalConstructable) constructable; - ISurvivalBuildEnvironment env = ISurvivalBuildEnvironment.create(createItemSource(), fakePlayer); + ISurvivalBuildEnvironment env = ISurvivalBuildEnvironment + .create(createItemSource(), CreativeFluidSource.instance, fakePlayer); int rounds = 0; while (rounds++ < SURVIVAL_MAX_ROUNDS) { int result = sc.survivalConstruct(trigger, SURVIVAL_BUDGET, env);