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