From 8febed2e425681030253488c754c7f9d3e8d9bc0 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 14 Dec 2018 17:24:07 -0600 Subject: [PATCH] Remove dependency for PlayerControllerMP implementation --- .../baritone/api/utils/IPlayerContext.java | 3 +- .../baritone/api/utils/IPlayerController.java | 43 ++++ src/main/java/baritone/bot/BaritoneUser.java | 8 +- .../java/baritone/bot/BotPlayerContext.java | 4 +- src/main/java/baritone/bot/IBaritoneUser.java | 5 +- .../bot/handler/BotNetHandlerPlayClient.java | 2 +- .../bot/spec/BotPlayerController.java | 191 ++---------------- .../utils/player/PrimaryPlayerContext.java | 5 +- .../utils/player/PrimaryPlayerController.java | 58 ++++++ 9 files changed, 133 insertions(+), 186 deletions(-) create mode 100644 src/api/java/baritone/api/utils/IPlayerController.java create mode 100644 src/main/java/baritone/utils/player/PrimaryPlayerController.java diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index cd80a7d9..83040ab5 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -20,7 +20,6 @@ package baritone.api.utils; import baritone.api.cache.IWorldData; import net.minecraft.block.BlockSlab; import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.multiplayer.PlayerControllerMP; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; @@ -37,7 +36,7 @@ public interface IPlayerContext { EntityPlayerSP player(); - PlayerControllerMP playerController(); + IPlayerController playerController(); World world(); diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java new file mode 100644 index 00000000..bf987a06 --- /dev/null +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -0,0 +1,43 @@ +/* + * 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.utils; + +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.GameType; + +/** + * @author Brady + * @since 12/14/2018 + */ +public interface IPlayerController { + + boolean clickBlock(BlockPos pos, EnumFacing side); + + boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side); + + void resetBlockRemoving(); + + void setGameType(GameType type); + + GameType getGameType(); + + default double getBlockReachDistance() { + return this.getGameType().isCreative() ? 5.0F : 4.5F; + } +} diff --git a/src/main/java/baritone/bot/BaritoneUser.java b/src/main/java/baritone/bot/BaritoneUser.java index f75493d0..d6223a7a 100644 --- a/src/main/java/baritone/bot/BaritoneUser.java +++ b/src/main/java/baritone/bot/BaritoneUser.java @@ -19,7 +19,7 @@ package baritone.bot; import baritone.Baritone; import baritone.api.IBaritone; -import baritone.bot.spec.BotPlayerController; +import baritone.api.utils.IPlayerController; import baritone.bot.spec.BotWorld; import baritone.bot.spec.EntityBot; import com.mojang.authlib.GameProfile; @@ -44,7 +44,7 @@ class BaritoneUser implements IBaritoneUser { private BotWorld world; private EntityBot player; - private BotPlayerController playerController; + private IPlayerController playerController; private final Baritone baritone; @@ -57,14 +57,14 @@ class BaritoneUser implements IBaritoneUser { } @Override - public void onWorldLoad(BotWorld world, EntityBot player, BotPlayerController playerController) { + public void onWorldLoad(BotWorld world, EntityBot player, IPlayerController playerController) { this.world = world; this.player = player; this.playerController = playerController; } @Override - public BotPlayerController getPlayerController() { + public IPlayerController getPlayerController() { return this.playerController; } diff --git a/src/main/java/baritone/bot/BotPlayerContext.java b/src/main/java/baritone/bot/BotPlayerContext.java index 4928d7ee..87d90dc8 100644 --- a/src/main/java/baritone/bot/BotPlayerContext.java +++ b/src/main/java/baritone/bot/BotPlayerContext.java @@ -19,9 +19,9 @@ package baritone.bot; import baritone.api.cache.IWorldData; import baritone.api.utils.IPlayerContext; +import baritone.api.utils.IPlayerController; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.multiplayer.PlayerControllerMP; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; @@ -45,7 +45,7 @@ public class BotPlayerContext implements IPlayerContext { } @Override - public PlayerControllerMP playerController() { + public IPlayerController playerController() { if (bot.getEntity() == null) { return null; } diff --git a/src/main/java/baritone/bot/IBaritoneUser.java b/src/main/java/baritone/bot/IBaritoneUser.java index b2b1a407..a564bf7f 100644 --- a/src/main/java/baritone/bot/IBaritoneUser.java +++ b/src/main/java/baritone/bot/IBaritoneUser.java @@ -18,6 +18,7 @@ package baritone.bot; import baritone.api.IBaritone; +import baritone.api.utils.IPlayerController; import baritone.bot.spec.BotPlayerController; import baritone.bot.spec.BotWorld; import baritone.bot.spec.EntityBot; @@ -48,7 +49,7 @@ public interface IBaritoneUser { * @param player The player object * @param playerController The player controller */ - void onWorldLoad(BotWorld world, EntityBot player, BotPlayerController playerController); + void onWorldLoad(BotWorld world, EntityBot player, IPlayerController playerController); /** * @return The network manager that is responsible for the current connection. @@ -72,7 +73,7 @@ public interface IBaritoneUser { /** * @return The bot player controller */ - BotPlayerController getPlayerController(); + IPlayerController getPlayerController(); /** * Returns the user login session. Should never be {@code null}, as this should be set when the diff --git a/src/main/java/baritone/bot/handler/BotNetHandlerPlayClient.java b/src/main/java/baritone/bot/handler/BotNetHandlerPlayClient.java index 4e303bd8..ffa408e7 100644 --- a/src/main/java/baritone/bot/handler/BotNetHandlerPlayClient.java +++ b/src/main/java/baritone/bot/handler/BotNetHandlerPlayClient.java @@ -355,7 +355,7 @@ public class BotNetHandlerPlayClient extends NetHandlerPlayClient { public void handleJoinGame(@Nonnull SPacketJoinGame packetIn) { PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.client); - this.playerController = new BotPlayerController((Minecraft) this.client, this); + this.playerController = new BotPlayerController(this.user); this.world = this.user.getManager().getWorldProvider().getWorld(packetIn.getDimension()); this.player = new EntityBot(this.user, (Minecraft) this.client, this.world, this, new StatisticsManager(), new RecipeBookClient()); this.player.preparePlayerToSpawn(); diff --git a/src/main/java/baritone/bot/spec/BotPlayerController.java b/src/main/java/baritone/bot/spec/BotPlayerController.java index e55a7eab..c8cdecd9 100644 --- a/src/main/java/baritone/bot/spec/BotPlayerController.java +++ b/src/main/java/baritone/bot/spec/BotPlayerController.java @@ -17,203 +17,48 @@ package baritone.bot.spec; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.multiplayer.PlayerControllerMP; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.client.network.NetHandlerPlayClient; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.ClickType; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.stats.RecipeBook; -import net.minecraft.stats.StatisticsManager; -import net.minecraft.util.EnumActionResult; +import baritone.api.utils.IPlayerController; +import baritone.bot.IBaritoneUser; import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; import net.minecraft.world.GameType; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; /** * @author Brady * @since 11/14/2018 */ -public class BotPlayerController extends PlayerControllerMP { +public class BotPlayerController implements IPlayerController { - public BotPlayerController(Minecraft mcIn, NetHandlerPlayClient netHandler) { - super(mcIn, netHandler); + private final IBaritoneUser user; + private GameType gameType; + + public BotPlayerController(IBaritoneUser user) { + this.user = user; } @Override - public void setPlayerCapabilities(EntityPlayer player) { - super.setPlayerCapabilities(player); + public boolean clickBlock(BlockPos pos, EnumFacing side) { + return false; } @Override - public boolean isSpectator() { - return super.isSpectator(); - } - - @Override - public void setGameType(@Nonnull GameType type) { - super.setGameType(type); - } - - @Override - public void flipPlayer(EntityPlayer playerIn) { - super.flipPlayer(playerIn); - } - - @Override - public boolean shouldDrawHUD() { - return super.shouldDrawHUD(); - } - - @Override - public boolean onPlayerDestroyBlock(@Nonnull BlockPos pos) { - return super.onPlayerDestroyBlock(pos); - } - - @Override - public boolean clickBlock(@Nonnull BlockPos loc, @Nonnull EnumFacing face) { - return super.clickBlock(loc, face); + public boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side) { + return false; } @Override public void resetBlockRemoving() { - super.resetBlockRemoving(); + } @Override - public boolean onPlayerDamageBlock(@Nonnull BlockPos posBlock, @Nonnull EnumFacing directionFacing) { - return super.onPlayerDamageBlock(posBlock, directionFacing); + public void setGameType(GameType type) { + this.gameType = type; + this.gameType.configurePlayerCapabilities(this.user.getEntity().capabilities); } @Override - public float getBlockReachDistance() { - return super.getBlockReachDistance(); - } - - @Override - public void updateController() { - super.updateController(); - } - - @Nonnull - @Override - public EnumActionResult processRightClickBlock(EntityPlayerSP player, @Nonnull WorldClient worldIn, BlockPos pos, @Nonnull EnumFacing direction, Vec3d vec, @Nonnull EnumHand hand) { - return super.processRightClickBlock(player, worldIn, pos, direction, vec, hand); - } - - @Nonnull - @Override - public EnumActionResult processRightClick(@Nonnull EntityPlayer player, @Nonnull World worldIn, @Nonnull EnumHand hand) { - return super.processRightClick(player, worldIn, hand); - } - - @Nonnull - @Override - public EntityPlayerSP createPlayer(World p_192830_1_, @Nonnull StatisticsManager p_192830_2_, @Nonnull RecipeBook p_192830_3_) { - return super.createPlayer(p_192830_1_, p_192830_2_, p_192830_3_); - } - - @Override - public void attackEntity(@Nonnull EntityPlayer playerIn, Entity targetEntity) { - super.attackEntity(playerIn, targetEntity); - } - - @Nonnull - @Override - public EnumActionResult interactWithEntity(@Nonnull EntityPlayer player, Entity target, @Nonnull EnumHand hand) { - return super.interactWithEntity(player, target, hand); - } - - @Nonnull - @Override - public EnumActionResult interactWithEntity(@Nonnull EntityPlayer player, Entity target, RayTraceResult ray, @Nonnull EnumHand hand) { - return super.interactWithEntity(player, target, ray, hand); - } - - @Nonnull - @Override - public ItemStack windowClick(int windowId, int slotId, int mouseButton, @Nonnull ClickType type, EntityPlayer player) { - return super.windowClick(windowId, slotId, mouseButton, type, player); - } - - @Override - public void func_194338_a(int p_194338_1_, @Nonnull IRecipe p_194338_2_, boolean p_194338_3_, EntityPlayer p_194338_4_) { - super.func_194338_a(p_194338_1_, p_194338_2_, p_194338_3_, p_194338_4_); - } - - @Override - public void sendEnchantPacket(int windowID, int button) { - super.sendEnchantPacket(windowID, button); - } - - @Override - public void sendSlotPacket(@Nonnull ItemStack itemStackIn, int slotId) { - super.sendSlotPacket(itemStackIn, slotId); - } - - @Override - public void sendPacketDropItem(@Nonnull ItemStack itemStackIn) { - super.sendPacketDropItem(itemStackIn); - } - - @Override - public void onStoppedUsingItem(EntityPlayer playerIn) { - super.onStoppedUsingItem(playerIn); - } - - @Override - public boolean gameIsSurvivalOrAdventure() { - return super.gameIsSurvivalOrAdventure(); - } - - @Override - public boolean isNotCreative() { - return super.isNotCreative(); - } - - @Override - public boolean isInCreativeMode() { - return super.isInCreativeMode(); - } - - @Override - public boolean extendedReach() { - return super.extendedReach(); - } - - @Override - public boolean isRidingHorse() { - return super.isRidingHorse(); - } - - @Override - public boolean isSpectatorMode() { - return super.isSpectatorMode(); - } - - @Nonnull - @Override - public GameType getCurrentGameType() { - return super.getCurrentGameType(); - } - - @Override - public boolean getIsHittingBlock() { - return super.getIsHittingBlock(); - } - - @Override - public void pickItem(int index) { - super.pickItem(index); + public GameType getGameType() { + return this.gameType; } } diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index 4247e92b..05b1f80a 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -20,6 +20,7 @@ package baritone.utils.player; import baritone.api.BaritoneAPI; import baritone.api.cache.IWorldData; import baritone.api.utils.IPlayerContext; +import baritone.api.utils.IPlayerController; import baritone.utils.Helper; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.multiplayer.PlayerControllerMP; @@ -42,8 +43,8 @@ public enum PrimaryPlayerContext implements IPlayerContext, Helper { } @Override - public PlayerControllerMP playerController() { - return mc.playerController; + public IPlayerController playerController() { + return PrimaryPlayerController.INSTANCE; } @Override diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java new file mode 100644 index 00000000..750d578c --- /dev/null +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -0,0 +1,58 @@ +/* + * 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.utils.player; + +import baritone.api.utils.IPlayerController; +import baritone.utils.Helper; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.GameType; + +/** + * @author Brady + * @since 12/14/2018 + */ +public enum PrimaryPlayerController implements IPlayerController, Helper { + + INSTANCE; + + @Override + public boolean clickBlock(BlockPos pos, EnumFacing side) { + return mc.playerController.clickBlock(pos, side); + } + + @Override + public boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side) { + return mc.playerController.onPlayerDamageBlock(pos, side); + } + + @Override + public void resetBlockRemoving() { + mc.playerController.resetBlockRemoving(); + } + + @Override + public void setGameType(GameType type) { + mc.playerController.setGameType(type); + } + + @Override + public GameType getGameType() { + return mc.playerController.getCurrentGameType(); + } +}