diff --git a/common/src/main/java/artifacts/item/UmbrellaItem.java b/common/src/main/java/artifacts/item/UmbrellaItem.java index 46397e81..905d9a23 100644 --- a/common/src/main/java/artifacts/item/UmbrellaItem.java +++ b/common/src/main/java/artifacts/item/UmbrellaItem.java @@ -7,6 +7,7 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ArmorItem; @@ -81,4 +82,10 @@ public static boolean isHoldingUmbrellaUpright(LivingEntity entity, InteractionH public static boolean isHoldingUmbrellaUpright(LivingEntity entity) { return isHoldingUmbrellaUpright(entity, InteractionHand.MAIN_HAND) || isHoldingUmbrellaUpright(entity, InteractionHand.OFF_HAND); } + + public static boolean isHoldingUmbrellaUpright(Entity entity) { + return entity instanceof LivingEntity livingEntity + && isHoldingUmbrellaUpright(livingEntity); + } + } diff --git a/fabric/build.gradle b/fabric/build.gradle index d59271f9..f512f615 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -46,7 +46,7 @@ dependencies { modImplementation include("be.florens:expandability-fabric:${rootProject.expandability_version}") // Compat & integration - modCompileOnly("io.github.apace100:apoli:2.12.0-alpha.11+mc.1.21.x") + modCompileOnly("io.github.apace100:apoli:2.12.0-alpha.15+mc.1.21.1") } processResources { diff --git a/fabric/src/main/java/artifacts/fabric/integration/ApoliCompat.java b/fabric/src/main/java/artifacts/fabric/integration/ApoliCompat.java deleted file mode 100644 index ba9d0be9..00000000 --- a/fabric/src/main/java/artifacts/fabric/integration/ApoliCompat.java +++ /dev/null @@ -1,45 +0,0 @@ -package artifacts.fabric.integration; - -import artifacts.fabric.mixin.compat.apoli.ConditionTypeFactoryAccessor; -import artifacts.item.UmbrellaItem; -import io.github.apace100.apoli.Apoli; -import io.github.apace100.apoli.condition.factory.ConditionTypeFactory; -import io.github.apace100.apoli.registry.ApoliRegistries; -import io.github.apace100.calio.data.SerializableData; -import net.fabricmc.fabric.api.event.registry.RegistryEntryAddedCallback; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; - -import java.util.function.Function; -import java.util.function.Predicate; - -public class ApoliCompat implements CompatHandler { - - @Override - public void run() { - for (ConditionTypeFactory conditionFactory : ApoliRegistries.ENTITY_CONDITION) { - processCondition(conditionFactory); - } - RegistryEntryAddedCallback.event(ApoliRegistries.ENTITY_CONDITION).register( - (rawId, id, conditionFactory) -> processCondition(conditionFactory) - ); - } - - @SuppressWarnings("unchecked") - private void processCondition(ConditionTypeFactory conditionFactory) { - // Held-up umbrella blocks apoli:exposed_to_sun condition - if (conditionFactory.getSerializerId().equals(Apoli.identifier("exposed_to_sun"))) { - ConditionTypeFactoryAccessor conditionAccess = (ConditionTypeFactoryAccessor) conditionFactory; - // Wrapper around original condition - final Function> condition = conditionAccess.getConditionFactory(); - conditionAccess.setConditionFactory((instance) -> condition.apply(instance).and( - entity -> !UmbrellaItem.isHoldingUmbrellaUpright(entity) - )); - } - } - - @Override - public String getModId() { - return "apoli"; - } -} diff --git a/fabric/src/main/java/artifacts/fabric/mixin/compat/apoli/ConditionTypeFactoryAccessor.java b/fabric/src/main/java/artifacts/fabric/mixin/compat/apoli/ConditionTypeFactoryAccessor.java deleted file mode 100644 index 60ccaaa5..00000000 --- a/fabric/src/main/java/artifacts/fabric/mixin/compat/apoli/ConditionTypeFactoryAccessor.java +++ /dev/null @@ -1,21 +0,0 @@ -package artifacts.fabric.mixin.compat.apoli; - -import io.github.apace100.apoli.condition.factory.ConditionTypeFactory; -import io.github.apace100.calio.data.SerializableData; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.function.Function; -import java.util.function.Predicate; - -@Mixin(value = ConditionTypeFactory.class, remap = false) -public interface ConditionTypeFactoryAccessor { - - @Accessor - Function> getConditionFactory(); - - @Mutable - @Accessor - void setConditionFactory(Function> conditionFactory); -} diff --git a/fabric/src/main/java/artifacts/fabric/mixin/compat/apoli/condition/type/entity/ExposedToSunEntityConditionTypeMixin.java b/fabric/src/main/java/artifacts/fabric/mixin/compat/apoli/condition/type/entity/ExposedToSunEntityConditionTypeMixin.java new file mode 100644 index 00000000..18ce060f --- /dev/null +++ b/fabric/src/main/java/artifacts/fabric/mixin/compat/apoli/condition/type/entity/ExposedToSunEntityConditionTypeMixin.java @@ -0,0 +1,20 @@ +package artifacts.fabric.mixin.compat.apoli.condition.type.entity; + +import artifacts.item.UmbrellaItem; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.llamalad7.mixinextras.sugar.Local; +import io.github.apace100.apoli.condition.type.entity.ExposedToSunEntityConditionType; +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ExposedToSunEntityConditionType.class) +public abstract class ExposedToSunEntityConditionTypeMixin { + + @ModifyReturnValue(method = "test(Lio/github/apace100/apoli/condition/context/EntityConditionContext;)Z", at = @At("RETURN"), remap = false) + private boolean accountForUprightUmbrella(boolean original, @Local Entity entity) { + return original + && !UmbrellaItem.isHoldingUmbrellaUpright(entity); + } + +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 5c125ad9..b1e938b4 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -23,9 +23,6 @@ "client": [ "artifacts.fabric.ArtifactsFabricClient" ], - "artifacts:compat_handlers": [ - "artifacts.fabric.integration.ApoliCompat" - ], "modmenu": [ "artifacts.fabric.integration.ModMenuIntegration" ], @@ -53,4 +50,4 @@ "artifacts:ability_toggles" ] } -} \ No newline at end of file +} diff --git a/fabric/src/main/resources/mixins.artifacts.fabric.json b/fabric/src/main/resources/mixins.artifacts.fabric.json index 6637e44c..1264ff89 100644 --- a/fabric/src/main/resources/mixins.artifacts.fabric.json +++ b/fabric/src/main/resources/mixins.artifacts.fabric.json @@ -16,7 +16,7 @@ "attribute.entityexperience.LivingEntityMixin", "attribute.slipresistance.LivingEntityMixin", "attribute.swimspeed.LivingEntityMixin", - "compat.apoli.ConditionTypeFactoryAccessor", + "compat.apoli.condition.type.entity.ExposedToSunEntityConditionTypeMixin", "item.WearableArtifactItemMixin" ], "client": [ @@ -28,4 +28,4 @@ "injectors": { "defaultRequire": 1 } -} \ No newline at end of file +}