Replace RotationMoveEvent Inject with Redirect
This commit is contained in:
		@@ -17,7 +17,6 @@
 | 
			
		||||
 | 
			
		||||
package baritone.api.event.events;
 | 
			
		||||
 | 
			
		||||
import baritone.api.event.events.type.EventState;
 | 
			
		||||
import baritone.api.event.events.type.ManagedPlayerEvent;
 | 
			
		||||
import net.minecraft.client.entity.EntityPlayerSP;
 | 
			
		||||
import net.minecraft.entity.Entity;
 | 
			
		||||
@@ -35,21 +34,21 @@ public final class RotationMoveEvent extends ManagedPlayerEvent {
 | 
			
		||||
    private final Type type;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The state of the event
 | 
			
		||||
     * The yaw rotation
 | 
			
		||||
     */
 | 
			
		||||
    private final EventState state;
 | 
			
		||||
    private float yaw;
 | 
			
		||||
 | 
			
		||||
    public RotationMoveEvent(EntityPlayerSP player, EventState state, Type type) {
 | 
			
		||||
    public RotationMoveEvent(EntityPlayerSP player, Type type, float yaw) {
 | 
			
		||||
        super(player);
 | 
			
		||||
        this.state = state;
 | 
			
		||||
        this.type = type;
 | 
			
		||||
        this.yaw = yaw;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return The state of the event
 | 
			
		||||
     * @return The yaw rotation
 | 
			
		||||
     */
 | 
			
		||||
    public final EventState getState() {
 | 
			
		||||
        return this.state;
 | 
			
		||||
    public final float getYaw() {
 | 
			
		||||
        return this.yaw;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -19,14 +19,17 @@ package baritone.launch.mixins;
 | 
			
		||||
 | 
			
		||||
import baritone.Baritone;
 | 
			
		||||
import baritone.api.event.events.RotationMoveEvent;
 | 
			
		||||
import baritone.api.event.events.type.EventState;
 | 
			
		||||
import net.minecraft.client.entity.EntityPlayerSP;
 | 
			
		||||
import net.minecraft.entity.Entity;
 | 
			
		||||
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.Redirect;
 | 
			
		||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 | 
			
		||||
 | 
			
		||||
import static org.spongepowered.asm.lib.Opcodes.GETFIELD;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Brady
 | 
			
		||||
 * @since 8/21/2018
 | 
			
		||||
@@ -34,23 +37,37 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 | 
			
		||||
@Mixin(Entity.class)
 | 
			
		||||
public class MixinEntity {
 | 
			
		||||
 | 
			
		||||
    @Shadow public float rotationYaw;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Event called to override the movement direction when walking
 | 
			
		||||
     */
 | 
			
		||||
    private RotationMoveEvent motionUpdateRotationEvent;
 | 
			
		||||
 | 
			
		||||
    @Inject(
 | 
			
		||||
            method = "moveRelative",
 | 
			
		||||
            at = @At("HEAD")
 | 
			
		||||
    )
 | 
			
		||||
    private void preMoveRelative(float strafe, float up, float forward, float friction, CallbackInfo ci) {
 | 
			
		||||
        Entity _this = (Entity) (Object) this;
 | 
			
		||||
        if (EntityPlayerSP.class.isInstance(_this))
 | 
			
		||||
            Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent((EntityPlayerSP) _this, EventState.PRE, RotationMoveEvent.Type.MOTION_UPDATE));
 | 
			
		||||
        // noinspection ConstantConditions
 | 
			
		||||
        if (EntityPlayerSP.class.isInstance(this)) {
 | 
			
		||||
            this.motionUpdateRotationEvent = new RotationMoveEvent((EntityPlayerSP) (Object) this, RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw);
 | 
			
		||||
            Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(this.motionUpdateRotationEvent);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Inject(
 | 
			
		||||
    @Redirect(
 | 
			
		||||
            method = "moveRelative",
 | 
			
		||||
            at = @At("RETURN")
 | 
			
		||||
            at = @At(
 | 
			
		||||
                    value = "FIELD",
 | 
			
		||||
                    opcode = GETFIELD,
 | 
			
		||||
                    target = "net/minecraft/entity/Entity.rotationYaw:F"
 | 
			
		||||
            )
 | 
			
		||||
    private void postMoveRelative(float strafe, float up, float forward, float friction, CallbackInfo ci) {
 | 
			
		||||
        Entity _this = (Entity) (Object) this;
 | 
			
		||||
        if (EntityPlayerSP.class.isInstance(_this))
 | 
			
		||||
            Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent((EntityPlayerSP) _this, EventState.POST, RotationMoveEvent.Type.MOTION_UPDATE));
 | 
			
		||||
    )
 | 
			
		||||
    private float overrideYaw(Entity entity) {
 | 
			
		||||
        if (entity instanceof EntityPlayerSP) {
 | 
			
		||||
            return this.motionUpdateRotationEvent.getYaw();
 | 
			
		||||
        }
 | 
			
		||||
        return entity.rotationYaw;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,41 +19,59 @@ package baritone.launch.mixins;
 | 
			
		||||
 | 
			
		||||
import baritone.Baritone;
 | 
			
		||||
import baritone.api.event.events.RotationMoveEvent;
 | 
			
		||||
import baritone.api.event.events.type.EventState;
 | 
			
		||||
import net.minecraft.client.entity.EntityPlayerSP;
 | 
			
		||||
import net.minecraft.entity.Entity;
 | 
			
		||||
import net.minecraft.entity.EntityLivingBase;
 | 
			
		||||
import net.minecraft.world.World;
 | 
			
		||||
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.Redirect;
 | 
			
		||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 | 
			
		||||
 | 
			
		||||
import static org.spongepowered.asm.lib.Opcodes.GETFIELD;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Brady
 | 
			
		||||
 * @since 9/10/2018
 | 
			
		||||
 */
 | 
			
		||||
@Mixin(EntityLivingBase.class)
 | 
			
		||||
public class MixinEntityLivingBase {
 | 
			
		||||
public abstract class MixinEntityLivingBase extends Entity {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Event called to override the movement direction when jumping
 | 
			
		||||
     */
 | 
			
		||||
    private RotationMoveEvent jumpRotationEvent;
 | 
			
		||||
 | 
			
		||||
    public MixinEntityLivingBase(World worldIn, RotationMoveEvent jumpRotationEvent) {
 | 
			
		||||
        super(worldIn);
 | 
			
		||||
        this.jumpRotationEvent = jumpRotationEvent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Inject(
 | 
			
		||||
            method = "jump",
 | 
			
		||||
            at = @At("HEAD")
 | 
			
		||||
    )
 | 
			
		||||
    private void preJump(CallbackInfo ci) {
 | 
			
		||||
        EntityLivingBase _this = (EntityLivingBase) (Object) this;
 | 
			
		||||
        // This uses Class.isInstance instead of instanceof since proguard optimizes out the instanceof (since MixinEntityLivingBase could never be instanceof EntityLivingBase in normal java)
 | 
			
		||||
        // but proguard isn't smart enough to optimize out this Class.isInstance =)
 | 
			
		||||
        if (EntityPlayerSP.class.isInstance(_this))
 | 
			
		||||
            Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent((EntityPlayerSP) _this, EventState.PRE, RotationMoveEvent.Type.JUMP));
 | 
			
		||||
    private void preMoveRelative(CallbackInfo ci) {
 | 
			
		||||
        // noinspection ConstantConditions
 | 
			
		||||
        if (EntityPlayerSP.class.isInstance(this)) {
 | 
			
		||||
            this.jumpRotationEvent = new RotationMoveEvent((EntityPlayerSP) (Object) this, RotationMoveEvent.Type.JUMP, this.rotationYaw);
 | 
			
		||||
            Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Inject(
 | 
			
		||||
    @Redirect(
 | 
			
		||||
            method = "jump",
 | 
			
		||||
            at = @At("RETURN")
 | 
			
		||||
            at = @At(
 | 
			
		||||
                    value = "FIELD",
 | 
			
		||||
                    opcode = GETFIELD,
 | 
			
		||||
                    target = "net/minecraft/entity/EntityLivingBase.rotationYaw:F"
 | 
			
		||||
            )
 | 
			
		||||
    private void postJump(CallbackInfo ci) {
 | 
			
		||||
        EntityLivingBase _this = (EntityLivingBase) (Object) this;
 | 
			
		||||
        // See above
 | 
			
		||||
        if (EntityPlayerSP.class.isInstance(_this))
 | 
			
		||||
            Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent((EntityPlayerSP) _this, EventState.POST, RotationMoveEvent.Type.JUMP));
 | 
			
		||||
    )
 | 
			
		||||
    private float overrideYaw(EntityLivingBase entity) {
 | 
			
		||||
        if (entity instanceof EntityPlayerSP) {
 | 
			
		||||
            return this.jumpRotationEvent.getYaw();
 | 
			
		||||
        }
 | 
			
		||||
        return entity.rotationYaw;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user