From 4efedcdb8439bc662756444e30f4540713e71ff2 Mon Sep 17 00:00:00 2001 From: Cassian Date: Fri, 9 Oct 2026 15:58:16 -0400 Subject: [PATCH] Fix NeoForge crashing when Fabric mods try calling `isInFluid` --- .../fluids/EntityFluidInteractionMixin.java | 34 +++++++++++++++++++ .../resources/ffapi_fluid_types.mixins.json | 3 +- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 internal/ffapi-fluid-types/src/main/java/org/sinytra/ffapi/mixin/fluids/EntityFluidInteractionMixin.java diff --git a/internal/ffapi-fluid-types/src/main/java/org/sinytra/ffapi/mixin/fluids/EntityFluidInteractionMixin.java b/internal/ffapi-fluid-types/src/main/java/org/sinytra/ffapi/mixin/fluids/EntityFluidInteractionMixin.java new file mode 100644 index 000000000..051926611 --- /dev/null +++ b/internal/ffapi-fluid-types/src/main/java/org/sinytra/ffapi/mixin/fluids/EntityFluidInteractionMixin.java @@ -0,0 +1,34 @@ +package org.sinytra.ffapi.mixin.fluids; + +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.EntityFluidInteraction; + +import net.neoforged.neoforge.fluids.FluidType; +import org.sinytra.ffapi.impl.fluids.FabricFluidTypes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.minecraft.world.level.material.Fluid; + +import java.util.List; +import java.util.Optional; + +@Mixin(EntityFluidInteraction.class) +public class EntityFluidInteractionMixin { + @Inject(method = "getFluidTypeByTag", at = @At(value = "INVOKE", target = "Ljava/lang/IllegalArgumentException;(Ljava/lang/String;)V"), cancellable = true) + private static void getFabricVanillaFluidType(TagKey fluidTag, CallbackInfoReturnable cir) { + BuiltInRegistries.FLUID.get(fluidTag).ifPresent(named->{ + List> contents = named.contents(); + if (contents.isEmpty()) return; + FluidType fabricFluidType = FabricFluidTypes.getFluidType(contents.getFirst().value()); + if (fabricFluidType != null) { + cir.setReturnValue(fabricFluidType); + } + }); + } +} diff --git a/internal/ffapi-fluid-types/src/main/resources/ffapi_fluid_types.mixins.json b/internal/ffapi-fluid-types/src/main/resources/ffapi_fluid_types.mixins.json index 2291429cb..335eb636d 100644 --- a/internal/ffapi-fluid-types/src/main/resources/ffapi_fluid_types.mixins.json +++ b/internal/ffapi-fluid-types/src/main/resources/ffapi_fluid_types.mixins.json @@ -3,7 +3,8 @@ "package": "org.sinytra.ffapi.mixin.fluids", "compatibilityLevel": "JAVA_25", "mixins": [ - "CommonHooksMixin" + "CommonHooksMixin", + "EntityFluidInteractionMixin" ], "injectors": { "defaultRequire": 1