diff --git a/src/main/java/net/anvilcraft/ntx4core/mixin/common/ForgeFlowingFluidMixin.java b/src/main/java/net/anvilcraft/ntx4core/mixin/common/ForgeFlowingFluidMixin.java new file mode 100644 index 0000000..5f5b547 --- /dev/null +++ b/src/main/java/net/anvilcraft/ntx4core/mixin/common/ForgeFlowingFluidMixin.java @@ -0,0 +1,35 @@ +package net.anvilcraft.ntx4core.mixin.common; + +import java.util.function.Supplier; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import net.minecraft.fluid.Fluid; +import net.minecraftforge.fluids.ForgeFlowingFluid; + +/** + * This fixes a bug in forge where `ForgeFlowingFluid.matchesType` would always assume + * that this.flowing != null. + * + * Fixes: https://github.com/Creators-of-Create/Create/issues/3712 + */ +@Mixin(ForgeFlowingFluid.class) +public class ForgeFlowingFluidMixin { + @Shadow(remap = false) + private Supplier flowing; + @Shadow(remap = false) + private Supplier still; + + /** + * @reason Forge has a bullshit implementation here that NPEs when this.flowing is + * null. + * @author LordMZTE + */ + @Overwrite + public boolean matchesType(Fluid fluid) { + return (still != null && still.get() == fluid) + || (flowing != null && flowing.get() == fluid); + } +} diff --git a/src/main/resources/ntx4core.mixins.json b/src/main/resources/ntx4core.mixins.json index c76fb87..c72a590 100644 --- a/src/main/resources/ntx4core.mixins.json +++ b/src/main/resources/ntx4core.mixins.json @@ -4,7 +4,8 @@ "compatibilityLevel": "JAVA_17", "minVersion": "0.8", "mixins": [ - "accessor.StructureFeatureAccessor" + "accessor.StructureFeatureAccessor", + "common.ForgeFlowingFluidMixin" ], "client": [ "client.SplashOverlayMixin",