diff --git a/src/main/java/com/bawnorton/bettertrims/config/Config.java b/src/main/java/com/bawnorton/bettertrims/config/Config.java index b9a2e73..cb3a358 100644 --- a/src/main/java/com/bawnorton/bettertrims/config/Config.java +++ b/src/main/java/com/bawnorton/bettertrims/config/Config.java @@ -4,6 +4,7 @@ public class Config { private static Config INSTANCE; + @Expose public Integer trimDurability; @Expose @@ -86,7 +87,6 @@ public static class Silver { public static class SlimeBall { @Expose public Float fallDamageReduction; - @Expose public Float knockbackIncrease; } diff --git a/src/main/java/com/bawnorton/bettertrims/mixin/ActiveTargetGoalMixin.java b/src/main/java/com/bawnorton/bettertrims/mixin/ActiveTargetGoalMixin.java index 2f33225..9a927f4 100644 --- a/src/main/java/com/bawnorton/bettertrims/mixin/ActiveTargetGoalMixin.java +++ b/src/main/java/com/bawnorton/bettertrims/mixin/ActiveTargetGoalMixin.java @@ -20,32 +20,32 @@ public abstract class ActiveTargetGoalMixin { @ModifyArg(method = "(Lnet/minecraft/entity/mob/MobEntity;Ljava/lang/Class;IZZLjava/util/function/Predicate;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/ai/TargetPredicate;setPredicate(Ljava/util/function/Predicate;)Lnet/minecraft/entity/ai/TargetPredicate;")) private Predicate checkPlayerTrims(@Nullable Predicate predicate, @Local MobEntity mob) { - if(!(mob instanceof EntityExtender extender)) return predicate; - if(mob instanceof IllagerEntity) { - return getTrimPredicate(predicate, extender, ArmorTrimEffects.PLATINUM); + return getTrimPredicate(predicate, ArmorTrimEffects.PLATINUM); } if(mob instanceof GuardianEntity) { - return getTrimPredicate(predicate, extender, ArmorTrimEffects.PRISMARINE_SHARD); + return getTrimPredicate(predicate, ArmorTrimEffects.PRISMARINE_SHARD); } if(mob instanceof BlazeEntity) { - return getTrimPredicate(predicate, extender, ArmorTrimEffects.NETHER_BRICK, 2); + return getTrimPredicate(predicate, ArmorTrimEffects.NETHER_BRICK); } if(mob instanceof WitherSkeletonEntity) { - return getTrimPredicate(predicate, extender, ArmorTrimEffects.NETHER_BRICK, 4); + return getTrimPredicate(predicate, ArmorTrimEffects.NETHER_BRICK, 2); } return predicate; } @Unique - private Predicate getTrimPredicate(Predicate original, EntityExtender extender, ArmorTrimEffect effect) { - return getTrimPredicate(original, extender, effect, 1); + private Predicate getTrimPredicate(Predicate original, ArmorTrimEffect effect) { + return getTrimPredicate(original, effect, 1); } @Unique - private Predicate getTrimPredicate(Predicate original, EntityExtender extender, ArmorTrimEffect effect, int required) { - NumberWrapper trimCount = NumberWrapper.zero(); - effect.apply(extender.betterTrims$getTrimmables(), () -> trimCount.increment(1)); - return target -> trimCount.getInt() < required && (original == null || original.test(target)); + private Predicate getTrimPredicate(Predicate original, ArmorTrimEffect effect, int required) { + return target -> { + NumberWrapper trimCount = NumberWrapper.zero(); + effect.apply(((EntityExtender) target).betterTrims$getTrimmables(), () -> trimCount.increment(1)); + return trimCount.getInt() < required && (original == null || original.test(target)); + }; } } diff --git a/src/main/java/com/bawnorton/bettertrims/mixin/EscapeDanagerGoalMixin.java b/src/main/java/com/bawnorton/bettertrims/mixin/EscapeDanagerGoalMixin.java new file mode 100644 index 0000000..3d9a1ef --- /dev/null +++ b/src/main/java/com/bawnorton/bettertrims/mixin/EscapeDanagerGoalMixin.java @@ -0,0 +1,25 @@ +package com.bawnorton.bettertrims.mixin; + +import com.bawnorton.bettertrims.effect.ArmorTrimEffects; +import com.bawnorton.bettertrims.extend.EntityExtender; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import net.minecraft.entity.ai.goal.EscapeDangerGoal; +import net.minecraft.entity.mob.PathAwareEntity; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(EscapeDangerGoal.class) +public abstract class EscapeDanagerGoalMixin { + @Shadow @Final protected PathAwareEntity mob; + + @SuppressWarnings("unused") + @ModifyReturnValue(method = "isInDanger", at = @At("RETURN")) + private boolean checkPlayerTrims(boolean original) { + if (!original) return false; + if(!(mob.getAttacker() instanceof EntityExtender extender)) return true; + + return !ArmorTrimEffects.RABBIT_HIDE.appliesTo(extender.betterTrims$getTrimmables()); + } +} diff --git a/src/main/java/com/bawnorton/bettertrims/mixin/FleeEntityGoalMixin.java b/src/main/java/com/bawnorton/bettertrims/mixin/FleeEntityGoalMixin.java new file mode 100644 index 0000000..64a6bd8 --- /dev/null +++ b/src/main/java/com/bawnorton/bettertrims/mixin/FleeEntityGoalMixin.java @@ -0,0 +1,38 @@ +package com.bawnorton.bettertrims.mixin; + +import com.bawnorton.bettertrims.effect.ArmorTrimEffects; +import com.bawnorton.bettertrims.extend.EntityExtender; +import com.bawnorton.bettertrims.util.NumberWrapper; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.goal.FleeEntityGoal; +import net.minecraft.entity.mob.PathAwareEntity; +import net.minecraft.entity.passive.AnimalEntity; +import net.minecraft.entity.player.PlayerEntity; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +import java.util.function.Predicate; + +@Mixin(FleeEntityGoal.class) +public abstract class FleeEntityGoalMixin { + @ModifyArg(method = "(Lnet/minecraft/entity/mob/PathAwareEntity;Ljava/lang/Class;Ljava/util/function/Predicate;FDDLjava/util/function/Predicate;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/ai/TargetPredicate;setPredicate(Ljava/util/function/Predicate;)Lnet/minecraft/entity/ai/TargetPredicate;")) + private Predicate checkPlayerTrims(@Nullable Predicate predicate, @Local Class classToFleeFrom, @Local PathAwareEntity mob) { + if(mob instanceof AnimalEntity && classToFleeFrom.isAssignableFrom(PlayerEntity.class)) { + return getTrimPredicate(predicate); + } + return predicate; + } + + @Unique + private Predicate getTrimPredicate(Predicate original) { + return target -> { + NumberWrapper trimCount = NumberWrapper.zero(); + ArmorTrimEffects.RABBIT_HIDE.apply(((EntityExtender) target).betterTrims$getTrimmables(), () -> trimCount.increment(1)); + return trimCount.getInt() < 1 && (original == null || original.test(target)); + }; + } +} diff --git a/src/main/java/com/bawnorton/bettertrims/mixin/LivingEntityMixin.java b/src/main/java/com/bawnorton/bettertrims/mixin/LivingEntityMixin.java index 8984c44..4044747 100644 --- a/src/main/java/com/bawnorton/bettertrims/mixin/LivingEntityMixin.java +++ b/src/main/java/com/bawnorton/bettertrims/mixin/LivingEntityMixin.java @@ -114,12 +114,6 @@ private float applyTrimJumpHeight(float original) { return original; } - @SuppressWarnings("BooleanMethodIsAlwaysInverted") - @ModifyReturnValue(method = "canTarget(Lnet/minecraft/entity/LivingEntity;)Z", at = @At("RETURN")) - protected boolean shouldTargetTrimmedPlayer(boolean original, LivingEntity target) { - return original; - } - @ModifyExpressionValue(method = "damage", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/damage/DamageSource;getAttacker()Lnet/minecraft/entity/Entity;")) private Entity applyFireChargeTrim(Entity original) { if(!ArmorTrimEffects.FIRE_CHARGE.appliesTo(betterTrims$getTrimmables())) return original; diff --git a/src/main/java/com/bawnorton/bettertrims/mixin/compat/IllagerEntityMixin.java b/src/main/java/com/bawnorton/bettertrims/mixin/compat/IllagerEntityMixin.java new file mode 100644 index 0000000..fb5dac1 --- /dev/null +++ b/src/main/java/com/bawnorton/bettertrims/mixin/compat/IllagerEntityMixin.java @@ -0,0 +1,24 @@ +package com.bawnorton.bettertrims.mixin.compat; + +import com.bawnorton.bettertrims.effect.ArmorTrimEffects; +import com.bawnorton.bettertrims.extend.EntityExtender; +import com.bawnorton.bettertrims.mixin.LivingEntityMixin; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.mob.IllagerEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(IllagerEntity.class) +public abstract class IllagerEntityMixin extends LivingEntityMixin { + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + @ModifyReturnValue(method = "canTarget(Lnet/minecraft/entity/LivingEntity;)Z", at = @At("RETURN")) + protected boolean canTargetTrimmedPlayer(boolean original, LivingEntity target) { + return original && !ArmorTrimEffects.PLATINUM.appliesTo(((EntityExtender) target).betterTrims$getTrimmables()); + } +} + + + + + diff --git a/src/main/java/com/bawnorton/bettertrims/mixin/compat/friendsandfoes/IceologerMixin.java b/src/main/java/com/bawnorton/bettertrims/mixin/compat/friendsandfoes/IceologerMixin.java deleted file mode 100644 index 2a9fe93..0000000 --- a/src/main/java/com/bawnorton/bettertrims/mixin/compat/friendsandfoes/IceologerMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.bawnorton.bettertrims.mixin.compat.friendsandfoes; - -import com.bawnorton.bettertrims.annotation.ConditionalMixin; -import com.bawnorton.bettertrims.annotation.MultiConditionMixin; -import com.bawnorton.bettertrims.effect.ArmorTrimEffects; -import com.bawnorton.bettertrims.extend.EntityExtender; -import com.bawnorton.bettertrims.mixin.LivingEntityMixin; -import com.faboslav.friendsandfoes.entity.IceologerEntity; -import net.minecraft.entity.LivingEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; - -@Pseudo -@Mixin(IceologerEntity.class) -@MultiConditionMixin( - conditions = { - @ConditionalMixin(modid = "friendsandfoes"), - @ConditionalMixin(modid = "illagerinvasion") - } -) -public abstract class IceologerMixin extends LivingEntityMixin { - @Override - protected boolean shouldTargetTrimmedPlayer(boolean original, LivingEntity target) { - return super.shouldTargetTrimmedPlayer(original, target) && !ArmorTrimEffects.PLATINUM.appliesTo(((EntityExtender) target).betterTrims$getTrimmables()); - } -} diff --git a/src/main/java/com/bawnorton/bettertrims/mixin/compat/illagerinvasion/IllagerEntityMixin.java b/src/main/java/com/bawnorton/bettertrims/mixin/compat/illagerinvasion/IllagerEntityMixin.java deleted file mode 100644 index 0e5175f..0000000 --- a/src/main/java/com/bawnorton/bettertrims/mixin/compat/illagerinvasion/IllagerEntityMixin.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.bawnorton.bettertrims.mixin.compat.illagerinvasion; - -import com.bawnorton.bettertrims.annotation.ConditionalMixin; -import com.bawnorton.bettertrims.effect.ArmorTrimEffects; -import com.bawnorton.bettertrims.extend.EntityExtender; -import com.bawnorton.bettertrims.mixin.LivingEntityMixin; -import fuzs.illagerinvasion.world.entity.monster.*; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.mob.EvokerEntity; -import net.minecraft.entity.mob.IllusionerEntity; -import net.minecraft.entity.mob.PillagerEntity; -import net.minecraft.entity.mob.VindicatorEntity; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(value = { - VindicatorEntity.class, - PillagerEntity.class, - EvokerEntity.class, - IllusionerEntity.class, - Alchemist.class, - Archivist.class, - Basher.class, - Firecaller.class, - Inquisitor.class, - Invoker.class, - Marauder.class, - Necromancer.class, - Provoker.class, - Sorcerer.class -}, priority = 1500) -@ConditionalMixin(modid = "illagerinvasion") -public abstract class IllagerEntityMixin extends LivingEntityMixin { - @Override - protected boolean shouldTargetTrimmedPlayer(boolean original, LivingEntity target) { - return super.shouldTargetTrimmedPlayer(original, target) && !ArmorTrimEffects.PLATINUM.appliesTo(((EntityExtender) target).betterTrims$getTrimmables()); - } -} - - - - - diff --git a/src/main/resources/bettertrims.mixins.json b/src/main/resources/bettertrims.mixins.json index 374d736..3874405 100644 --- a/src/main/resources/bettertrims.mixins.json +++ b/src/main/resources/bettertrims.mixins.json @@ -9,6 +9,8 @@ "ElderGuardianEntityMixin", "EndermanEntityMixin", "EntityMixin", + "EscapeDanagerGoalMixin", + "FleeEntityGoalMixin", "GameEventDispatchManagerMixin", "ItemEntityMixin", "LivingEntityMixin", @@ -21,12 +23,11 @@ "StatusEffectInstanceMixin", "VillagerEntityMixin", "accessor.AbstractFurnaceBlockEntityAccessor", + "compat.IllagerEntityMixin", "compat.connector.fabric.EnchantmentHelperMixin", "compat.connector.fabric.PlayerEntityMixin", "compat.connector.forge.EnchantmentHelperMixin", - "compat.connector.forge.PlayerEntityMixin", - "compat.friendsandfoes.IceologerMixin", - "compat.illagerinvasion.IllagerEntityMixin" + "compat.connector.forge.PlayerEntityMixin" ], "injectors": { "defaultRequire": 1