From 7dfe6ac3ca1df192817c67b431e56b7a363a821d Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 11 Oct 2018 12:32:42 -0500 Subject: [PATCH] Add EntityPlayerSP field to relevant events --- .../api/event/events/BlockInteractEvent.java | 2 + .../baritone/api/event/events/ChatEvent.java | 8 ++- .../api/event/events/PacketEvent.java | 10 ++- .../api/event/events/PlayerUpdateEvent.java | 7 ++- .../api/event/events/RotationMoveEvent.java | 7 ++- .../api/event/events/type/Cancellable.java | 10 +-- .../api/event/events/type/ICancellable.java | 35 +++++++++++ .../event/events/type/ManagedPlayerEvent.java | 61 +++++++++++++++++++ .../baritone/launch/mixins/MixinEntity.java | 10 +-- .../launch/mixins/MixinEntityLivingBase.java | 15 +++-- .../launch/mixins/MixinEntityPlayerSP.java | 6 +- .../launch/mixins/MixinNetworkManager.java | 8 +-- 12 files changed, 144 insertions(+), 35 deletions(-) create mode 100644 src/api/java/baritone/api/event/events/type/ICancellable.java create mode 100644 src/api/java/baritone/api/event/events/type/ManagedPlayerEvent.java diff --git a/src/api/java/baritone/api/event/events/BlockInteractEvent.java b/src/api/java/baritone/api/event/events/BlockInteractEvent.java index cc98a6ba..fbdadba1 100644 --- a/src/api/java/baritone/api/event/events/BlockInteractEvent.java +++ b/src/api/java/baritone/api/event/events/BlockInteractEvent.java @@ -20,6 +20,8 @@ package baritone.api.event.events; import net.minecraft.util.math.BlockPos; /** + * Called when the local player interacts with a block, can be either {@link Type#BREAK} or {@link Type#USE}. + * * @author Brady * @since 8/22/2018 */ diff --git a/src/api/java/baritone/api/event/events/ChatEvent.java b/src/api/java/baritone/api/event/events/ChatEvent.java index e103377f..ede83f24 100644 --- a/src/api/java/baritone/api/event/events/ChatEvent.java +++ b/src/api/java/baritone/api/event/events/ChatEvent.java @@ -17,20 +17,22 @@ package baritone.api.event.events; -import baritone.api.event.events.type.Cancellable; +import baritone.api.event.events.type.ManagedPlayerEvent; +import net.minecraft.client.entity.EntityPlayerSP; /** * @author Brady * @since 8/1/2018 6:39 PM */ -public final class ChatEvent extends Cancellable { +public final class ChatEvent extends ManagedPlayerEvent.Cancellable { /** * The message being sent */ private final String message; - public ChatEvent(String message) { + public ChatEvent(EntityPlayerSP player, String message) { + super(player); this.message = message; } diff --git a/src/api/java/baritone/api/event/events/PacketEvent.java b/src/api/java/baritone/api/event/events/PacketEvent.java index 9516db4b..91ffd41f 100644 --- a/src/api/java/baritone/api/event/events/PacketEvent.java +++ b/src/api/java/baritone/api/event/events/PacketEvent.java @@ -18,6 +18,7 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; +import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; /** @@ -26,15 +27,22 @@ import net.minecraft.network.Packet; */ public final class PacketEvent { + private NetworkManager networkManager; + private final EventState state; private final Packet packet; - public PacketEvent(EventState state, Packet packet) { + public PacketEvent(NetworkManager networkManager, EventState state, Packet packet) { + this.networkManager = networkManager; this.state = state; this.packet = packet; } + public final NetworkManager getNetworkManager() { + return this.networkManager; + } + public final EventState getState() { return this.state; } diff --git a/src/api/java/baritone/api/event/events/PlayerUpdateEvent.java b/src/api/java/baritone/api/event/events/PlayerUpdateEvent.java index 6ac08bdd..99370552 100644 --- a/src/api/java/baritone/api/event/events/PlayerUpdateEvent.java +++ b/src/api/java/baritone/api/event/events/PlayerUpdateEvent.java @@ -18,19 +18,22 @@ 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; /** * @author Brady * @since 8/21/2018 */ -public final class PlayerUpdateEvent { +public final class PlayerUpdateEvent extends ManagedPlayerEvent { /** * The state of the event */ private final EventState state; - public PlayerUpdateEvent(EventState state) { + public PlayerUpdateEvent(EntityPlayerSP player, EventState state) { + super(player); this.state = state; } diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index ef6d9b7e..7a7514db 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -18,6 +18,8 @@ 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; import net.minecraft.entity.EntityLivingBase; @@ -25,7 +27,7 @@ import net.minecraft.entity.EntityLivingBase; * @author Brady * @since 8/21/2018 */ -public final class RotationMoveEvent { +public final class RotationMoveEvent extends ManagedPlayerEvent { /** * The type of event @@ -37,7 +39,8 @@ public final class RotationMoveEvent { */ private final EventState state; - public RotationMoveEvent(EventState state, Type type) { + public RotationMoveEvent(EntityPlayerSP player, EventState state, Type type) { + super(player); this.state = state; this.type = type; } diff --git a/src/api/java/baritone/api/event/events/type/Cancellable.java b/src/api/java/baritone/api/event/events/type/Cancellable.java index 331870c6..62ff9049 100644 --- a/src/api/java/baritone/api/event/events/type/Cancellable.java +++ b/src/api/java/baritone/api/event/events/type/Cancellable.java @@ -21,23 +21,19 @@ package baritone.api.event.events.type; * @author Brady * @since 8/1/2018 6:41 PM */ -public class Cancellable { +public class Cancellable implements ICancellable { /** * Whether or not this event has been cancelled */ private boolean cancelled; - /** - * Cancels this event - */ + @Override public final void cancel() { this.cancelled = true; } - /** - * @return Whether or not this event has been cancelled - */ + @Override public final boolean isCancelled() { return this.cancelled; } diff --git a/src/api/java/baritone/api/event/events/type/ICancellable.java b/src/api/java/baritone/api/event/events/type/ICancellable.java new file mode 100644 index 00000000..1df5cd79 --- /dev/null +++ b/src/api/java/baritone/api/event/events/type/ICancellable.java @@ -0,0 +1,35 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events.type; + +/** + * @author Brady + * @since 10/11/2018 + */ +public interface ICancellable { + + /** + * Cancels this event + */ + void cancel(); + + /** + * @return Whether or not this event has been cancelled + */ + boolean isCancelled(); +} diff --git a/src/api/java/baritone/api/event/events/type/ManagedPlayerEvent.java b/src/api/java/baritone/api/event/events/type/ManagedPlayerEvent.java new file mode 100644 index 00000000..a3487a67 --- /dev/null +++ b/src/api/java/baritone/api/event/events/type/ManagedPlayerEvent.java @@ -0,0 +1,61 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events.type; + +import net.minecraft.client.entity.EntityPlayerSP; + +/** + * An event that has a reference to a locally managed player. + * + * @author Brady + * @since 10/11/2018 + */ +public class ManagedPlayerEvent { + + protected final EntityPlayerSP player; + + public ManagedPlayerEvent(EntityPlayerSP player) { + this.player = player; + } + + public final EntityPlayerSP getPlayer() { + return this.player; + } + + public static class Cancellable extends ManagedPlayerEvent implements ICancellable { + + /** + * Whether or not this event has been cancelled + */ + private boolean cancelled; + + public Cancellable(EntityPlayerSP player) { + super(player); + } + + @Override + public final void cancel() { + this.cancelled = true; + } + + @Override + public final boolean isCancelled() { + return this.cancelled; + } + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index b96b5b41..c3c040a3 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -20,7 +20,7 @@ package baritone.launch.mixins; import baritone.Baritone; import baritone.api.event.events.RotationMoveEvent; import baritone.api.event.events.type.EventState; -import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -40,8 +40,8 @@ public class MixinEntity { ) private void preMoveRelative(float strafe, float up, float forward, float friction, CallbackInfo ci) { Entity _this = (Entity) (Object) this; - if (_this == Minecraft.getMinecraft().player) - Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent(EventState.PRE, RotationMoveEvent.Type.MOTION_UPDATE)); + if (_this instanceof EntityPlayerSP) + Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent((EntityPlayerSP) _this, EventState.PRE, RotationMoveEvent.Type.MOTION_UPDATE)); } @Inject( @@ -50,7 +50,7 @@ public class MixinEntity { ) private void postMoveRelative(float strafe, float up, float forward, float friction, CallbackInfo ci) { Entity _this = (Entity) (Object) this; - if (_this == Minecraft.getMinecraft().player) - Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent(EventState.POST, RotationMoveEvent.Type.MOTION_UPDATE)); + if (_this instanceof EntityPlayerSP) + Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent((EntityPlayerSP) _this, EventState.POST, RotationMoveEvent.Type.MOTION_UPDATE)); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index e840576e..b35bad3d 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -20,8 +20,7 @@ package baritone.launch.mixins; import baritone.Baritone; import baritone.api.event.events.RotationMoveEvent; import baritone.api.event.events.type.EventState; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; +import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.EntityLivingBase; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -40,9 +39,9 @@ public class MixinEntityLivingBase { at = @At("HEAD") ) private void preJump(CallbackInfo ci) { - Entity _this = (Entity) (Object) this; - if (_this == Minecraft.getMinecraft().player) - Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent(EventState.PRE, RotationMoveEvent.Type.JUMP)); + EntityLivingBase _this = (EntityLivingBase) (Object) this; + if (_this instanceof EntityPlayerSP) + Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent((EntityPlayerSP) _this, EventState.PRE, RotationMoveEvent.Type.JUMP)); } @Inject( @@ -50,8 +49,8 @@ public class MixinEntityLivingBase { at = @At("RETURN") ) private void postJump(CallbackInfo ci) { - Entity _this = (Entity) (Object) this; - if (_this == Minecraft.getMinecraft().player) - Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent(EventState.POST, RotationMoveEvent.Type.JUMP)); + EntityLivingBase _this = (EntityLivingBase) (Object) this; + if (_this instanceof EntityPlayerSP) + Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(new RotationMoveEvent((EntityPlayerSP) _this, EventState.POST, RotationMoveEvent.Type.JUMP)); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index e9a575c5..39bc8af1 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -40,7 +40,7 @@ public class MixinEntityPlayerSP { cancellable = true ) private void sendChatMessage(String msg, CallbackInfo ci) { - ChatEvent event = new ChatEvent(msg); + ChatEvent event = new ChatEvent((EntityPlayerSP) (Object) this, msg); Baritone.INSTANCE.getGameEventHandler().onSendChatMessage(event); if (event.isCancelled()) { ci.cancel(); @@ -57,7 +57,7 @@ public class MixinEntityPlayerSP { ) ) private void onPreUpdate(CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.PRE)); + Baritone.INSTANCE.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent((EntityPlayerSP) (Object) this, EventState.PRE)); } @Inject( @@ -70,6 +70,6 @@ public class MixinEntityPlayerSP { ) ) private void onPostUpdate(CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); + Baritone.INSTANCE.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent((EntityPlayerSP) (Object) this, EventState.POST)); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index f79e007f..3f5f297b 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -54,7 +54,7 @@ public class MixinNetworkManager { ) private void preDispatchPacket(Packet inPacket, final GenericFutureListener>[] futureListeners, CallbackInfo ci) { if (this.direction == EnumPacketDirection.CLIENTBOUND) { - Baritone.INSTANCE.getGameEventHandler().onSendPacket(new PacketEvent(EventState.PRE, inPacket)); + Baritone.INSTANCE.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, inPacket)); } } @@ -64,7 +64,7 @@ public class MixinNetworkManager { ) private void postDispatchPacket(Packet inPacket, final GenericFutureListener>[] futureListeners, CallbackInfo ci) { if (this.direction == EnumPacketDirection.CLIENTBOUND) { - Baritone.INSTANCE.getGameEventHandler().onSendPacket(new PacketEvent(EventState.POST, inPacket)); + Baritone.INSTANCE.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, inPacket)); } } @@ -77,7 +77,7 @@ public class MixinNetworkManager { ) private void preProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { if (this.direction == EnumPacketDirection.CLIENTBOUND) { - Baritone.INSTANCE.getGameEventHandler().onReceivePacket(new PacketEvent(EventState.PRE, packet));} + Baritone.INSTANCE.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, packet));} } @Inject( @@ -86,7 +86,7 @@ public class MixinNetworkManager { ) private void postProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { if (this.channel.isOpen() && this.direction == EnumPacketDirection.CLIENTBOUND) { - Baritone.INSTANCE.getGameEventHandler().onReceivePacket(new PacketEvent(EventState.POST, packet)); + Baritone.INSTANCE.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, packet)); } } }