From a2784d72c447ff14a42c58b0c8660ace0e52a2b1 Mon Sep 17 00:00:00 2001 From: Benjamin-Norton Date: Sat, 29 Jul 2023 11:59:54 -0400 Subject: [PATCH] Add redstone trim support for elytra and horses --- gradle.properties | 2 +- .../bawnorton/mixin/LivingEntityMixin.java | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ce692c4..5a7c158 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.20+build.1 loader_version=0.14.21 # Mod Properties -mod_version=1.0.3 +mod_version=1.1.0 maven_group=com.bawnorton archives_base_name=bettertrims diff --git a/src/main/java/com/bawnorton/mixin/LivingEntityMixin.java b/src/main/java/com/bawnorton/mixin/LivingEntityMixin.java index ff59c78..d4f30d4 100644 --- a/src/main/java/com/bawnorton/mixin/LivingEntityMixin.java +++ b/src/main/java/com/bawnorton/mixin/LivingEntityMixin.java @@ -3,15 +3,20 @@ import com.bawnorton.config.Config; import com.bawnorton.effect.ArmorTrimEffects; import com.bawnorton.util.Wrapper; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.passive.AbstractHorseEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @SuppressWarnings("unused") @@ -29,11 +34,34 @@ private float modifySwimSpeed(float speed) { @Inject(method = "getMovementSpeed()F", at = @At("RETURN"), cancellable = true) private void modifyMovementSpeed(CallbackInfoReturnable cir) { + if(((LivingEntity) (Object) this) instanceof AbstractHorseEntity horseEntity) { + System.out.println("a"); + if(horseEntity.getControllingPassenger() instanceof PlayerEntity player) { + System.out.println("b"); + Wrapper increase = Wrapper.of(1f); + ArmorTrimEffects.REDSTONE.apply(player.getArmorItems(), stack -> { + System.out.println("c"); + increase.set(increase.get() + Config.getInstance().redstoneMovementSpeedIncrease); + }); + cir.setReturnValue(cir.getReturnValue() * increase.get()); + } + } Wrapper increase = Wrapper.of(1f); ArmorTrimEffects.REDSTONE.apply(getArmorItems(), stack -> increase.set(increase.get() + Config.getInstance().redstoneMovementSpeedIncrease)); cir.setReturnValue(cir.getReturnValue() * increase.get()); } + @ModifyExpressionValue(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getVelocity()Lnet/minecraft/util/math/Vec3d;", ordinal = 2), slice = + @Slice( + from = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;isFallFlying()Z"), + to = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getWorld()Lnet/minecraft/world/World;", ordinal = 1) + )) + private Vec3d modifyFlightSpeed(Vec3d original) { + Wrapper increase = Wrapper.of(1f); + ArmorTrimEffects.REDSTONE.apply(getArmorItems(), stack -> increase.set(increase.get() + Config.getInstance().redstoneMovementSpeedIncrease)); + return original.multiply(increase.get(), 1, increase.get()); + } + @WrapOperation(method = "applyArmorToDamage", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/DamageUtil;getDamageLeft(FFF)F")) private float modifyDamage(float damage, float armor, float armorToughness, Operation original) { float orignal = original.call(damage, armor, armorToughness);