diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index 14334d5e2..05199fcac 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -35,21 +35,27 @@ import net.minecraft.world.World; */ public interface IPlayerController { + void syncHeldItem(); + + boolean hasBrokenBlock(); + boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side); void resetBlockRemoving(); ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, EntityPlayer player); - void setGameType(GameType type); - GameType getGameType(); - default double getBlockReachDistance() { - return this.getGameType().isCreative() ? 5.0F : 4.5F; - } - EnumActionResult processRightClickBlock(EntityPlayerSP player, World world, BlockPos pos, EnumFacing direction, Vec3d vec, EnumHand hand); EnumActionResult processRightClick(EntityPlayerSP player, World world, EnumHand hand); + + boolean clickBlock(BlockPos loc, EnumFacing face); + + void setHittingBlock(boolean hittingBlock); + + default double getBlockReachDistance() { + return this.getGameType().isCreative() ? 5.0F : 4.5F; + } } diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index 7f8ada847..d1f3509ef 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -19,11 +19,7 @@ package baritone.utils; import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; -import baritone.utils.accessor.IPlayerControllerMP; -import net.minecraft.client.Minecraft; -import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; /** @@ -32,49 +28,46 @@ import net.minecraft.util.math.RayTraceResult; */ public final class BlockBreakHelper implements Helper { + private final IPlayerContext ctx; private boolean didBreakLastTick; - private final IPlayerContext playerContext; - - public BlockBreakHelper(IPlayerContext playerContext) { - this.playerContext = playerContext; - } - - private void tryBreakBlock(BlockPos pos, EnumFacing side) { - if (playerContext.playerController().onPlayerDamageBlock(pos, side)) { - playerContext.player().swingArm(EnumHand.MAIN_HAND); - } + BlockBreakHelper(IPlayerContext ctx) { + this.ctx = ctx; } public void stopBreakingBlock() { // The player controller will never be null, but the player can be - if (playerContext.player() != null && didBreakLastTick) { - if (((IPlayerControllerMP) mc.playerController).getCurrentBlock().getY() != -1) { + if (ctx.player() != null && didBreakLastTick) { + if (!ctx.playerController().hasBrokenBlock()) { // insane bypass to check breaking succeeded - ((IPlayerControllerMP) mc.playerController).setIsHittingBlock(true); + ctx.playerController().setHittingBlock(true); } - playerContext.playerController().resetBlockRemoving(); + ctx.playerController().resetBlockRemoving(); didBreakLastTick = false; } } - public void tick(boolean isLeftClick) { - RayTraceResult trace = playerContext.objectMouseOver(); + RayTraceResult trace = ctx.objectMouseOver(); boolean isBlockTrace = trace != null && trace.typeOfHit == RayTraceResult.Type.BLOCK; if (isLeftClick && isBlockTrace) { if (!didBreakLastTick) { - ((IPlayerControllerMP) Minecraft.getMinecraft().playerController).callSyncCurrentPlayItem(); - Minecraft.getMinecraft().playerController.clickBlock(trace.getBlockPos(), trace.sideHit); - playerContext.player().swingArm(EnumHand.MAIN_HAND); + ctx.playerController().syncHeldItem(); + ctx.playerController().clickBlock(trace.getBlockPos(), trace.sideHit); + ctx.player().swingArm(EnumHand.MAIN_HAND); } - tryBreakBlock(trace.getBlockPos(), trace.sideHit); + + // Attempt to break the block + if (ctx.playerController().onPlayerDamageBlock(trace.getBlockPos(), trace.sideHit)) { + ctx.player().swingArm(EnumHand.MAIN_HAND); + } + didBreakLastTick = true; } else if (didBreakLastTick) { stopBreakingBlock(); didBreakLastTick = false; } - ((IPlayerControllerMP) Minecraft.getMinecraft().playerController).setIsHittingBlock(false); + ctx.playerController().setHittingBlock(false); } } diff --git a/src/main/java/baritone/utils/BlockPlaceHelper.java b/src/main/java/baritone/utils/BlockPlaceHelper.java index ee8f2b738..06588c12f 100644 --- a/src/main/java/baritone/utils/BlockPlaceHelper.java +++ b/src/main/java/baritone/utils/BlockPlaceHelper.java @@ -28,7 +28,7 @@ public class BlockPlaceHelper implements Helper { private final IPlayerContext ctx; private int rightClickTimer; - public BlockPlaceHelper(IPlayerContext playerContext) { + BlockPlaceHelper(IPlayerContext playerContext) { this.ctx = playerContext; } diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index 120f996cc..b013f9161 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -19,6 +19,7 @@ package baritone.utils.player; import baritone.api.utils.Helper; import baritone.api.utils.IPlayerController; +import baritone.utils.accessor.IPlayerControllerMP; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.entity.player.EntityPlayer; @@ -42,6 +43,16 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { INSTANCE; + @Override + public void syncHeldItem() { + ((IPlayerControllerMP) mc.playerController).callSyncCurrentPlayItem(); + } + + @Override + public boolean hasBrokenBlock() { + return ((IPlayerControllerMP) mc.playerController).getCurrentBlock().getY() == -1; + } + @Override public boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side) { return mc.playerController.onPlayerDamageBlock(pos, side); @@ -57,11 +68,6 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { return mc.playerController.windowClick(windowId, slotId, mouseButton, type, player); } - @Override - public void setGameType(GameType type) { - mc.playerController.setGameType(type); - } - @Override public GameType getGameType() { return mc.playerController.getCurrentGameType(); @@ -69,7 +75,6 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { @Override public EnumActionResult processRightClickBlock(EntityPlayerSP player, World world, BlockPos pos, EnumFacing direction, Vec3d vec, EnumHand hand) { - // primaryplayercontroller is always in a WorldClient so this is ok return mc.playerController.processRightClickBlock(player, (WorldClient) world, pos, direction, vec, hand); } @@ -77,4 +82,14 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { public EnumActionResult processRightClick(EntityPlayerSP player, World world, EnumHand hand) { return mc.playerController.processRightClick(player, world, hand); } + + @Override + public boolean clickBlock(BlockPos loc, EnumFacing face) { + return mc.playerController.clickBlock(loc, face); + } + + @Override + public void setHittingBlock(boolean hittingBlock) { + ((IPlayerControllerMP) mc.playerController).setIsHittingBlock(hittingBlock); + } }