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