From 59529c6c94676ef46285414ef69ca2fb9ff52256 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 10 Jun 2022 15:10:19 +0200 Subject: [PATCH] [Feature] Speed modified Elytra API --- .../bclib/items/elytra/BCLElytraItem.java | 11 ++++++ .../common/elytra/LivingEntityMixin.java | 35 +++++++++++++++++++ src/main/resources/bclib.mixins.common.json | 1 + 3 files changed, 47 insertions(+) create mode 100644 src/main/java/org/betterx/bclib/items/elytra/BCLElytraItem.java create mode 100644 src/main/java/org/betterx/bclib/mixin/common/elytra/LivingEntityMixin.java diff --git a/src/main/java/org/betterx/bclib/items/elytra/BCLElytraItem.java b/src/main/java/org/betterx/bclib/items/elytra/BCLElytraItem.java new file mode 100644 index 00000000..f2474357 --- /dev/null +++ b/src/main/java/org/betterx/bclib/items/elytra/BCLElytraItem.java @@ -0,0 +1,11 @@ +package org.betterx.bclib.items.elytra; + +import net.minecraft.resources.ResourceLocation; + +import net.fabricmc.fabric.api.entity.event.v1.FabricElytraItem; + +public interface BCLElytraItem extends FabricElytraItem { + ResourceLocation getModelTexture(); + + double getMovementFactor(); +} diff --git a/src/main/java/org/betterx/bclib/mixin/common/elytra/LivingEntityMixin.java b/src/main/java/org/betterx/bclib/mixin/common/elytra/LivingEntityMixin.java new file mode 100644 index 00000000..c5f1115a --- /dev/null +++ b/src/main/java/org/betterx/bclib/mixin/common/elytra/LivingEntityMixin.java @@ -0,0 +1,35 @@ +package org.betterx.bclib.mixin.common.elytra; + +import org.betterx.bclib.items.elytra.BCLElytraItem; + +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; + +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.ModifyArg; +import org.spongepowered.asm.mixin.injection.Slice; + +@Mixin(value = LivingEntity.class, priority = 199) +public abstract class LivingEntityMixin { + @Shadow + public abstract ItemStack getItemBySlot(EquipmentSlot equipmentSlot); + + @ModifyArg( + method = "travel", + slice = @Slice( + from = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;isFallFlying()Z"), + to = @At(value = "INVOKE:LAST", target = "Lnet/minecraft/world/entity/LivingEntity;setSharedFlag(IZ)V") + ), + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V") + ) + public Vec3 be_travel(Vec3 moveDelta) { + ItemStack itemStack = getItemBySlot(EquipmentSlot.CHEST); + double movementFactor = ((BCLElytraItem) itemStack.getItem()).getMovementFactor(); + moveDelta = moveDelta.multiply(movementFactor, 1.0D, movementFactor); + return moveDelta; + } +} diff --git a/src/main/resources/bclib.mixins.common.json b/src/main/resources/bclib.mixins.common.json index 4526867e..35a18d72 100644 --- a/src/main/resources/bclib.mixins.common.json +++ b/src/main/resources/bclib.mixins.common.json @@ -47,6 +47,7 @@ "WorldGenRegionMixin", "WorldOpenFlowsMixin", "WorldPresetsBootstrapMixin", + "elytra.LivingEntityMixin", "shears.BeehiveBlockMixin", "shears.DiggingEnchantmentMixin", "shears.ItemPredicateBuilderMixin",