diff --git a/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorMod.java b/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorMod.java index 6fd4d7d2..c5cfd234 100644 --- a/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorMod.java +++ b/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorMod.java @@ -25,12 +25,16 @@ import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.loading.FMLLoader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.InputStream; import java.util.Optional; @Mod(ConnectorUtil.CONNECTOR_MODID) public class ConnectorMod { + public static final Logger LOG = LoggerFactory.getLogger(ConnectorMod.class); + private static boolean clientLoadComplete; private static boolean preventFreeze; diff --git a/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/ForgeHooksMixin.java b/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/ForgeHooksMixin.java index b0e23c62..6da0f8ce 100644 --- a/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/ForgeHooksMixin.java +++ b/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/ForgeHooksMixin.java @@ -1,14 +1,24 @@ package dev.su5ed.sinytra.connector.mod.mixin; +import com.llamalad7.mixinextras.sugar.Local; +import dev.su5ed.sinytra.connector.ConnectorUtil; +import dev.su5ed.sinytra.connector.mod.ConnectorMod; import dev.su5ed.sinytra.connector.mod.compat.FluidHandlerCompat; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.DefaultAttributes; import net.minecraft.world.level.material.Fluid; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.fluids.FluidType; 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.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Map; + @Mixin(ForgeHooks.class) public abstract class ForgeHooksMixin { @@ -19,4 +29,18 @@ private static void getFabricVanillaFluidType(Fluid fluid, CallbackInfoReturnabl cir.setReturnValue(fabricFluidType); } } + + @Inject(at = @At("TAIL"), method = "modifyAttributes", remap = false) + private static void connector$allowAttributeMixins(CallbackInfo ci, @Local Map, AttributeSupplier.Builder> modifiedMap) { + modifiedMap.forEach((entity, attributes) -> { + final var fromVanilla = DefaultAttributes.getSupplier(entity); + // A mod is mixing into DefaultAttributes to add their attribute + if (ForgeHooks.getAttributesView().get(entity) != fromVanilla) { + ConnectorMod.LOG.debug("Entity {} has its attributes added via a mixin. Adding event-modified attributes.", entity); + final AttributeSupplier.Builder newBuilder = new AttributeSupplier.Builder(fromVanilla); + newBuilder.combine(attributes); + fromVanilla.instances = newBuilder.build().instances; + } + }); + } }