diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/world/SpeedMineModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/world/SpeedMineModule.java index 969a8b3..a224940 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/world/SpeedMineModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/world/SpeedMineModule.java @@ -10,7 +10,9 @@ import me.rigamortis.seppuku.api.value.Value; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; +import net.minecraft.init.Blocks; import net.minecraft.network.play.client.CPacketPlayerDigging; +import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import team.stiff.pomelo.impl.annotated.handler.annotation.Listener; @@ -24,9 +26,13 @@ public final class SpeedMineModule extends Module { public final Value mode = new Value("Mode", new String[]{"Mode", "M"}, "The speed-mine mode to use.", Mode.PACKET); private enum Mode { - PACKET, DAMAGE, INSTANT + PACKET, DAMAGE, INSTANT, SEQUENTIAL } + public BlockPos seqPos; + public EnumFacing seqDir; + final Minecraft mc = Minecraft.getMinecraft(); + public final Value reset = new Value("Reset", new String[]{"Res"}, "Stops current block destroy damage from resetting if enabled.", true); public final Value doubleBreak = new Value("DoubleBreak", new String[]{"DoubleBreak", "Double", "DB"}, "Mining a block will also mine the block above it, if enabled.", false); @@ -41,11 +47,15 @@ public final class SpeedMineModule extends Module { @Listener public void onUpdate(EventPlayerUpdate event) { - if (event.getStage() == EventStageable.EventStage.PRE) { - Minecraft.getMinecraft().playerController.blockHitDelay = 0; - if (this.reset.getValue() && Minecraft.getMinecraft().gameSettings.keyBindUseItem.isKeyDown()) { - Minecraft.getMinecraft().playerController.isHittingBlock = false; + if (event.getStage() == EventStageable.EventStage.PRE) { + mc.playerController.blockHitDelay = 0; + + if (seqPos != null && mc.world.getBlockState(seqPos).getBlock() != Blocks.AIR && mode.getValue() == Mode.SEQUENTIAL) { + mc.player.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.STOP_DESTROY_BLOCK, seqPos, seqDir)); + } + if (this.reset.getValue() && mc.gameSettings.keyBindUseItem.isKeyDown()) { + mc.playerController.isHittingBlock = false; } } } @@ -60,8 +70,8 @@ public final class SpeedMineModule extends Module { @Listener public void clickBlock(EventClickBlock event) { if (this.reset.getValue()) { - if (Minecraft.getMinecraft().playerController.curBlockDamageMP > 0.1f) { - Minecraft.getMinecraft().playerController.isHittingBlock = true; + if (mc.playerController.curBlockDamageMP > 0.1f) { + mc.playerController.isHittingBlock = true; } } } @@ -70,8 +80,6 @@ public final class SpeedMineModule extends Module { public void damageBlock(EventPlayerDamageBlock event) { if (canBreak(event.getPos())) { - final Minecraft mc = Minecraft.getMinecraft(); - if (this.reset.getValue()) { mc.playerController.isHittingBlock = false; } @@ -95,14 +103,19 @@ public final class SpeedMineModule extends Module { mc.playerController.onPlayerDestroyBlock(event.getPos()); mc.world.setBlockToAir(event.getPos()); break; + case SEQUENTIAL: + mc.player.swingArm(EnumHand.MAIN_HAND); + mc.player.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.START_DESTROY_BLOCK, event.getPos(), event.getFace())); + mc.player.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.STOP_DESTROY_BLOCK, event.getPos(), event.getFace())); + seqPos = event.getPos(); + seqDir = event.getFace(); + event.setCanceled(true); + break; } } if (this.doubleBreak.getValue()) { final BlockPos above = event.getPos().add(0, 1, 0); - - final Minecraft mc = Minecraft.getMinecraft(); - if (canBreak(above) && mc.player.getDistance(above.getX(), above.getY(), above.getZ()) <= 5f) { mc.player.swingArm(EnumHand.MAIN_HAND); mc.player.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.START_DESTROY_BLOCK, above, event.getFace())); @@ -113,11 +126,14 @@ public final class SpeedMineModule extends Module { } } + + + private boolean canBreak(BlockPos pos) { - final IBlockState blockState = Minecraft.getMinecraft().world.getBlockState(pos); + final IBlockState blockState = mc.world.getBlockState(pos); final Block block = blockState.getBlock(); - return block.getBlockHardness(blockState, Minecraft.getMinecraft().world, pos) != -1; + return block.getBlockHardness(blockState, mc.world, pos) != -1; } }