diff --git a/src/main/java/baritone/bot/net/BotNetHandlerPlayClient.java b/src/main/java/baritone/bot/net/BotNetHandlerPlayClient.java index e20e58c4c..02fa54bb0 100644 --- a/src/main/java/baritone/bot/net/BotNetHandlerPlayClient.java +++ b/src/main/java/baritone/bot/net/BotNetHandlerPlayClient.java @@ -20,8 +20,11 @@ package baritone.bot.net; import baritone.bot.IBaritoneUser; import baritone.bot.entity.EntityBot; import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.entity.player.PlayerCapabilities; import net.minecraft.network.NetworkManager; import net.minecraft.network.PacketThreadUtil; import net.minecraft.network.play.INetHandlerPlayClient; @@ -34,6 +37,11 @@ import net.minecraft.world.World; import javax.annotation.Nonnull; +// Notes +// - Make some sort of system that prevents repetition of entity info updating +// - For some packets, such as ones that modify position, we can check if the existing server state matches the packet proposed state +// - For other things, we'll actually need the system + /** * @author Brady * @since 10/22/2018 @@ -61,7 +69,7 @@ public class BotNetHandlerPlayClient implements INetHandlerPlayClient { /** * The current world. */ - private World world; + private WorldClient world; public BotNetHandlerPlayClient(NetworkManager networkManager, IThreadListener client, IBaritoneUser user) { this.networkManager = networkManager; @@ -255,6 +263,14 @@ public class BotNetHandlerPlayClient implements INetHandlerPlayClient { @Override public void handlePlayerAbilities(@Nonnull SPacketPlayerAbilities packetIn) { PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.client); + + PlayerCapabilities c = this.player.capabilities; + c.disableDamage = packetIn.isInvulnerable(); + c.isFlying = packetIn.isFlying(); + c.allowFlying = packetIn.isAllowFlying(); + c.isCreativeMode = packetIn.isCreativeMode(); + c.setFlySpeed(packetIn.getFlySpeed()); + c.setPlayerWalkSpeed(packetIn.getWalkSpeed()); } @Override @@ -265,11 +281,20 @@ public class BotNetHandlerPlayClient implements INetHandlerPlayClient { @Override public void handleDestroyEntities(@Nonnull SPacketDestroyEntities packetIn) { PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.client); + + for (int i = 0; i < packetIn.getEntityIDs().length; ++i) { + this.world.removeEntityFromWorld(packetIn.getEntityIDs()[i]); + } } @Override public void handleRemoveEntityEffect(@Nonnull SPacketRemoveEntityEffect packetIn) { PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.client); + + Entity entity = packetIn.getEntity(this.world); + if (entity instanceof EntityLivingBase) { + ((EntityLivingBase)entity).removeActivePotionEffect(packetIn.getPotion()); + } } @Override