From 3c86defdb6c311c3ae1b0420ce293184ca1894b1 Mon Sep 17 00:00:00 2001 From: xia-mc <2052472631@qq.com> Date: Sun, 23 Jun 2024 14:45:25 +0800 Subject: [PATCH] Release 1.5.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [+] **Add** Active mode to HitSelect. - Active mode will cancel attack action and keep swing action. It looks like "Legit KeepSprint", and may be flagged by Polar. - [※] **Fix** JumpReset sometimes do impossible jump. - [+] **Improve** TimerRange. - **Add** fov option. default is 180° it means only TimerRange if you are face the target. - **Add** ignoreTeammates option. - Now TimerRange didn't need KillAura anymore. - [※] **Improve** StrafeTest mode in Speed. - Renamed "Strafe (Deprecated)" to "StrafeTest". - [+] **Add** Latency compensation option to Water bucket. - if the value > 0, module will predict your future move and extend your reach distance. - [※] **Fix** Block-In - fix direction --- .../mixins/impl/entity/MixinEntityPlayer.java | 4 + .../module/impl/combat/AutoClicker.java | 2 +- .../module/impl/combat/HitSelect.java | 36 +++++-- .../module/impl/combat/JumpReset.java | 16 ++- .../module/impl/combat/TimerRange.java | 30 +++++- .../module/impl/movement/KeepSprint.java | 2 +- .../module/impl/movement/LongJump.java | 12 ++- .../module/impl/movement/Speed.java | 11 ++- .../anticheats/utils/world/BlockUtils.java | 5 +- .../module/impl/player/Backtrack.java | 1 + .../module/impl/render/BreakProgress.java | 4 +- .../keystrokesmod/module/impl/render/HUD.java | 2 +- .../module/impl/world/BedAura.java | 97 ++++++++++--------- .../module/impl/world/BlockIn.java | 58 +++++------ .../module/impl/world/WaterBucket.java | 13 ++- .../keystrokesmod/script/ScriptDefaults.java | 2 +- .../keystrokesmod/script/ScriptManager.java | 5 +- .../keystrokesmod/utility/BlockUtils.java | 24 +++-- .../keystrokesmod/utility/RotationUtils.java | 24 ++--- .../java/keystrokesmod/utility/Utils.java | 2 +- 20 files changed, 212 insertions(+), 138 deletions(-) diff --git a/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntityPlayer.java b/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntityPlayer.java index 588bfcefb..8c8acb9d6 100644 --- a/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntityPlayer.java +++ b/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntityPlayer.java @@ -1,6 +1,7 @@ package keystrokesmod.mixins.impl.entity; import keystrokesmod.module.ModuleManager; +import keystrokesmod.module.impl.combat.HitSelect; import keystrokesmod.module.impl.combat.Reduce; import keystrokesmod.module.impl.movement.KeepSprint; import net.minecraft.enchantment.EnchantmentHelper; @@ -106,6 +107,9 @@ public void attackTargetEntityWithCurrentItem(Entity p_attackTargetEntityWithCur else if (ModuleManager.keepSprint != null && ModuleManager.keepSprint.isEnabled()) { KeepSprint.keepSprint(p_attackTargetEntityWithCurrentItem_1_); } +// else if (ModuleManager.hitSelect != null && ModuleManager.hitSelect.isEnabled()) { +// HitSelect.hitSelect(p_attackTargetEntityWithCurrentItem_1_); +// } else { this.motionX *= 0.6D; this.motionZ *= 0.6D; diff --git a/src/main/java/keystrokesmod/module/impl/combat/AutoClicker.java b/src/main/java/keystrokesmod/module/impl/combat/AutoClicker.java index 2df5cfedd..c23eb4f2f 100644 --- a/src/main/java/keystrokesmod/module/impl/combat/AutoClicker.java +++ b/src/main/java/keystrokesmod/module/impl/combat/AutoClicker.java @@ -98,7 +98,7 @@ public void guiUpdate() { @SubscribeEvent public void onRenderTick(@NotNull RenderTickEvent ev) { - if (ev.phase != Phase.END && Utils.nullCheck() && !mc.thePlayer.isEating() && HitSelect.canAttack()) { + if (ev.phase != Phase.END && Utils.nullCheck() && !mc.thePlayer.isEating() && mc.objectMouseOver != null && HitSelect.canAttack(mc.objectMouseOver.entityHit)) { if (mc.currentScreen == null && mc.inGameHasFocus) { if (weaponOnly.isToggled() && !Utils.holdingWeapon()) { return; diff --git a/src/main/java/keystrokesmod/module/impl/combat/HitSelect.java b/src/main/java/keystrokesmod/module/impl/combat/HitSelect.java index 34cdfe2b5..c21a3c007 100644 --- a/src/main/java/keystrokesmod/module/impl/combat/HitSelect.java +++ b/src/main/java/keystrokesmod/module/impl/combat/HitSelect.java @@ -1,12 +1,12 @@ package keystrokesmod.module.impl.combat; import keystrokesmod.event.PreUpdateEvent; -import keystrokesmod.event.SendPacketEvent; import keystrokesmod.module.Module; +import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.DescriptionSetting; import keystrokesmod.module.setting.impl.SliderSetting; -import net.minecraft.network.Packet; -import net.minecraft.network.play.client.C02PacketUseEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -15,20 +15,38 @@ import static keystrokesmod.module.ModuleManager.hitSelect; public class HitSelect extends Module { - private static long attackTime = -1; + private static final String[] MODES = new String[]{"Pause", "Active"}; + private final SliderSetting mode; private final SliderSetting delay; private final SliderSetting chance; + private final ButtonSetting smart; + + private static long attackTime = -1; private static boolean currentShouldAttack = false; public HitSelect() { super("HitSelect", category.combat); this.registerSetting(new DescriptionSetting("chooses the best time to hit.")); - this.registerSetting(delay = new SliderSetting("Delay", 420, 200, 750, 1)); + this.registerSetting(mode = new SliderSetting("Mode", MODES, 0)); + this.registerSetting(delay = new SliderSetting("Delay", 420, 400, 500, 1)); this.registerSetting(chance = new SliderSetting("Chance", 80, 0, 100, 1)); + this.registerSetting(smart = new ButtonSetting("Smart", true)); + } + + @Override + public String getInfo() { + return MODES[(int) mode.getInput()]; } @SubscribeEvent(priority = EventPriority.LOWEST) public void onAttack(@NotNull AttackEntityEvent event) { + if (mode.getInput() == 1 && !currentShouldAttack && (!smart.isToggled() + || !(event.target instanceof EntityLivingBase) + || ((EntityLivingBase) event.target).hurtTime > 0)) { + event.setCanceled(true); + return; + } + attackTime = System.currentTimeMillis(); } @@ -37,12 +55,16 @@ public void onPreUpdate(PreUpdateEvent event) { currentShouldAttack = Math.random() > hitSelect.chance.getInput() || System.currentTimeMillis() - HitSelect.attackTime >= hitSelect.delay.getInput(); } - public static boolean canAttack() { + public static boolean canAttack(Entity target) { + if (target instanceof EntityLivingBase) + if (hitSelect.smart.isToggled() && ((EntityLivingBase) target).hurtTime == 0) + return true; + return canSwing(); } public static boolean canSwing() { - if (!hitSelect.isEnabled()) return true; + if (!hitSelect.isEnabled() || hitSelect.mode.getInput() == 1) return true; return currentShouldAttack; } } diff --git a/src/main/java/keystrokesmod/module/impl/combat/JumpReset.java b/src/main/java/keystrokesmod/module/impl/combat/JumpReset.java index cd76ee00c..ffec3a40b 100644 --- a/src/main/java/keystrokesmod/module/impl/combat/JumpReset.java +++ b/src/main/java/keystrokesmod/module/impl/combat/JumpReset.java @@ -16,7 +16,6 @@ public class JumpReset extends Module { private final SliderSetting minDelay; private final SliderSetting maxDelay; private final SliderSetting chance; - private final SliderSetting motion; private final SliderSetting maxFallDistance; private final ButtonSetting ignoreFire; private boolean jump; @@ -26,7 +25,6 @@ public JumpReset() { this.registerSetting(minDelay = new SliderSetting("Min delay", 0, 0, 150, 1, "ms")); this.registerSetting(maxDelay = new SliderSetting("Max delay", 0, 0, 150, 1, "ms")); this.registerSetting(chance = new SliderSetting("Chance", 80, 0, 100, 1, "%")); - this.registerSetting(motion = new SliderSetting("Jump motion", 0.42, 0, 1, 0.01)); this.registerSetting(maxFallDistance = new SliderSetting("Max fall distance", 3, 1, 8, 0.5)); this.registerSetting(ignoreFire = new ButtonSetting("Ignore fire", true)); } @@ -66,14 +64,17 @@ public void onLivingUpdate(LivingEvent.LivingUpdateEvent ev) { return; } } - if (jump && mc.thePlayer.onGround) { + if (jump) { long delay = (long) (Math.random() * (maxDelay.getInput() - minDelay.getInput()) + minDelay.getInput()); if (delay == 0) { - mc.thePlayer.jump(); + if (mc.thePlayer.onGround) mc.thePlayer.jump(); + jump = false; } else { - Raven.getExecutor().schedule(() -> mc.thePlayer.jump(), delay, TimeUnit.MILLISECONDS); + Raven.getExecutor().schedule(() -> { + if (mc.thePlayer.onGround) mc.thePlayer.jump(); + jump = false; + }, delay, TimeUnit.MILLISECONDS); } - jump = false; } } } @@ -83,9 +84,6 @@ public void onJump(JumpEvent e) { if (!Utils.nullCheck() || !jump) { return; } - if (motion.getInput() != 0.42) { - e.setMotionY((float) motion.getInput()); - } jump = false; } } diff --git a/src/main/java/keystrokesmod/module/impl/combat/TimerRange.java b/src/main/java/keystrokesmod/module/impl/combat/TimerRange.java index 58f771b65..96930fb7d 100644 --- a/src/main/java/keystrokesmod/module/impl/combat/TimerRange.java +++ b/src/main/java/keystrokesmod/module/impl/combat/TimerRange.java @@ -1,19 +1,27 @@ package keystrokesmod.module.impl.combat; +import akka.japi.Pair; import keystrokesmod.module.Module; +import keystrokesmod.module.impl.world.AntiBot; +import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.DescriptionSetting; import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.script.classes.Vec3; import keystrokesmod.utility.Utils; +import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; +import java.util.Comparator; + public class TimerRange extends Module { private final SliderSetting lagTicks; private final SliderSetting timerTicks; private final SliderSetting minRange; private final SliderSetting maxRange; private final SliderSetting delay; + private final SliderSetting fov; + private final ButtonSetting ignoreTeammates; private int hasLag = 0; private long lastTimerTime = 0; @@ -21,12 +29,13 @@ public class TimerRange extends Module { public TimerRange() { super("TimerRange", category.combat); this.registerSetting(new DescriptionSetting("Use timer help you to beat opponent.")); - this.registerSetting(new DescriptionSetting("Only work with KillAura.")); this.registerSetting(lagTicks = new SliderSetting("Lag ticks", 2, 0, 10, 1)); this.registerSetting(timerTicks = new SliderSetting("Timer ticks", 2, 0, 10, 1)); this.registerSetting(minRange = new SliderSetting("Min range", 3.6, 0, 8, 0.1)); this.registerSetting(maxRange = new SliderSetting("Max range", 5, 0, 8, 0.1)); this.registerSetting(delay = new SliderSetting("Delay", 500, 0, 4000, 1)); + this.registerSetting(fov = new SliderSetting("Fov", 180, 0, 360, 30)); + this.registerSetting(ignoreTeammates = new ButtonSetting("Ignore teammates", true)); } @SubscribeEvent @@ -59,9 +68,24 @@ public void onDisable() { } private boolean shouldStart() { + if (!Utils.isMoving()) return false; + if (fov.getInput() == 0) return false; if (System.currentTimeMillis() - lastTimerTime < delay.getInput()) return false; - if (KillAura.target == null) return false; - double distance = new Vec3(KillAura.target).distanceTo(mc.thePlayer); + + EntityPlayer target = mc.theWorld.playerEntities.stream() + .filter(p -> !ignoreTeammates.isToggled() || !Utils.isTeamMate(p)) + .filter(p -> !Utils.isFriended(p)) + .filter(p -> !AntiBot.isBot(p)) + .map(p -> new Pair<>(p, mc.thePlayer.getDistanceSqToEntity(p))) + .min(Comparator.comparing(Pair::second)) + .map(Pair::first) + .orElse(null); + + if (target == null) return false; + + if (fov.getInput() < 360 && !Utils.inFov((float) fov.getInput(), target)) return false; + + double distance = new Vec3(target).distanceTo(mc.thePlayer); return distance >= minRange.getInput() && distance <= maxRange.getInput(); } diff --git a/src/main/java/keystrokesmod/module/impl/movement/KeepSprint.java b/src/main/java/keystrokesmod/module/impl/movement/KeepSprint.java index 3612feaa7..2ee6bf124 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/KeepSprint.java +++ b/src/main/java/keystrokesmod/module/impl/movement/KeepSprint.java @@ -16,7 +16,7 @@ public class KeepSprint extends Module { public KeepSprint() { super("KeepSprint", Module.category.movement, 0); - this.registerSetting(new DescriptionSetting(new String("Default is 40% motion reduction."))); + this.registerSetting(new DescriptionSetting("Default is 40% motion reduction.")); this.registerSetting(slow = new SliderSetting("Slow %", 40.0D, 0.0D, 40.0D, 1.0D)); this.registerSetting(disableWhileJump = new ButtonSetting("Disable while jumping", false)); this.registerSetting(reduceReachHits = new ButtonSetting("Only reduce reach hits", false)); diff --git a/src/main/java/keystrokesmod/module/impl/movement/LongJump.java b/src/main/java/keystrokesmod/module/impl/movement/LongJump.java index 60d460f85..1627cbc01 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/LongJump.java +++ b/src/main/java/keystrokesmod/module/impl/movement/LongJump.java @@ -24,6 +24,7 @@ public class LongJump extends Module { public static final String[] MODES = {"Fireball", "Fireball Auto", "Self Damage"}; private final SliderSetting mode; private final SliderSetting horizonBoost; + private final SliderSetting horizonMotionMultiplier; private final SliderSetting verticalMotion; private final ButtonSetting reverseYaw; private final SliderSetting pitch; @@ -41,8 +42,9 @@ public class LongJump extends Module { public LongJump() { super("Long Jump", category.movement); this.registerSetting(mode = new SliderSetting("Mode", MODES, 0)); - this.registerSetting(horizonBoost = new SliderSetting("Horizon boost", 1.0, 0.5, 3.0, 0.05)); - this.registerSetting(verticalMotion = new SliderSetting("Vertical motion", 0.35, 0.01, 0.4, 0.01)); + this.registerSetting(horizonBoost = new SliderSetting("Horizon boost", 1.0, 1.0, 1.5, 0.01)); + this.registerSetting(horizonMotionMultiplier = new SliderSetting("Horizon motion multiplier", 1.0, 0.9, 1.1, 0.005)); + this.registerSetting(verticalMotion = new SliderSetting("Vertical motion", 0.01, 0.01, 0.6, 0.01)); this.registerSetting(reverseYaw = new ButtonSetting("Reverse yaw", false)); this.registerSetting(pitch = new SliderSetting("Pitch", 90, 80, 90, 0.5)); this.registerSetting(aimTicks = new SliderSetting("Aim ticks", 2, 1, 10, 1)); @@ -80,8 +82,8 @@ public void onPreMotion(PreMotionEvent event) { if (ticks < 40) { event.setOnGround(false); mc.thePlayer.motionX = mc.thePlayer.motionZ = 0; - event.setPosZ(mc.thePlayer.prevPosZ); - event.setPosX(mc.thePlayer.prevPosX); + event.setPosZ(mc.thePlayer.lastTickPosZ); + event.setPosX(mc.thePlayer.lastTickPosX); } else if (ticks == 50) { event.setOnGround(true); } @@ -144,6 +146,8 @@ public void onPreUpdate(PreUpdateEvent event) { } if (ticks > 0 && ticks < 30) { + mc.thePlayer.motionX *= horizonMotionMultiplier.getInput(); + mc.thePlayer.motionZ *= horizonMotionMultiplier.getInput(); mc.thePlayer.motionY = verticalMotion.getInput(); } else if (ticks >= 30) { done = true; diff --git a/src/main/java/keystrokesmod/module/impl/movement/Speed.java b/src/main/java/keystrokesmod/module/impl/movement/Speed.java index 3ae5edbf8..a5d2b78f5 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/Speed.java +++ b/src/main/java/keystrokesmod/module/impl/movement/Speed.java @@ -2,14 +2,17 @@ import keystrokesmod.event.PreMotionEvent; import keystrokesmod.module.Module; +import keystrokesmod.module.impl.other.anticheats.utils.world.BlockUtils; import keystrokesmod.module.impl.player.NoFall; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; +import keystrokesmod.script.classes.Vec3; import keystrokesmod.utility.MoveUtil; import keystrokesmod.utility.Utils; import net.minecraft.block.BlockAir; import net.minecraft.network.play.client.C07PacketPlayerDigging; import net.minecraft.potion.Potion; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -22,7 +25,7 @@ public class Speed extends Module { private final ButtonSetting sneakDisable; private final ButtonSetting stopMotion; private final ButtonSetting stopSprint; - private final String[] modes = new String[]{"Strafe (Deprecated)", "Ground", "Damage", "Old Hypixel"}; + private final String[] modes = new String[]{"StrafeTest", "Ground", "Damage", "OldHypixel"}; private int offGroundTicks = 0; public static int ticksSinceVelocity = Integer.MAX_VALUE; @@ -85,15 +88,15 @@ public void onUpdate() { mc.thePlayer.motionY = 0.42; break; case 10: + if (!BlockUtils.isFullBlock(keystrokesmod.utility.BlockUtils.getBlockState(mc.thePlayer.getPosition().down()))) + break; + MoveUtil.strafe(0.315); mc.thePlayer.motionY = -0.28; break; case 11: MoveUtil.strafe(); break; - case 12: - MoveUtil.stop(); - break; } } break; diff --git a/src/main/java/keystrokesmod/module/impl/other/anticheats/utils/world/BlockUtils.java b/src/main/java/keystrokesmod/module/impl/other/anticheats/utils/world/BlockUtils.java index ca4464d68..3c86edc59 100644 --- a/src/main/java/keystrokesmod/module/impl/other/anticheats/utils/world/BlockUtils.java +++ b/src/main/java/keystrokesmod/module/impl/other/anticheats/utils/world/BlockUtils.java @@ -1,10 +1,13 @@ package keystrokesmod.module.impl.other.anticheats.utils.world; +import net.minecraft.block.Block; +import net.minecraft.block.BlockGlass; import net.minecraft.block.state.IBlockState; import org.jetbrains.annotations.NotNull; public class BlockUtils { public static boolean isFullBlock(@NotNull IBlockState blockState) { - return blockState.getBlock().isFullBlock(); + Block block = blockState.getBlock(); + return block instanceof BlockGlass || block.isFullBlock(); } } \ No newline at end of file diff --git a/src/main/java/keystrokesmod/module/impl/player/Backtrack.java b/src/main/java/keystrokesmod/module/impl/player/Backtrack.java index bb90a9e68..f06f774b4 100644 --- a/src/main/java/keystrokesmod/module/impl/player/Backtrack.java +++ b/src/main/java/keystrokesmod/module/impl/player/Backtrack.java @@ -9,6 +9,7 @@ import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.script.classes.Vec3; import keystrokesmod.utility.Utils; +import keystrokesmod.utility.render.RenderUtils; import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.network.Packet; diff --git a/src/main/java/keystrokesmod/module/impl/render/BreakProgress.java b/src/main/java/keystrokesmod/module/impl/render/BreakProgress.java index 54f477b72..13632e473 100644 --- a/src/main/java/keystrokesmod/module/impl/render/BreakProgress.java +++ b/src/main/java/keystrokesmod/module/impl/render/BreakProgress.java @@ -19,7 +19,7 @@ public class BreakProgress extends Module { private ButtonSetting manual; private ButtonSetting bedAura; private String[] modes = new String[]{"Percentage", "Second", "Decimal"}; - private float progress; + private double progress; private BlockPos block; private String progressStr; @@ -76,7 +76,7 @@ public void onUpdate() { return; } if (bedAura.isToggled() && ModuleManager.bedAura != null && ModuleManager.bedAura.isEnabled() && ModuleManager.bedAura.breakProgress != 0.0f && ModuleManager.bedAura.currentBlock != null && !(BlockUtils.getBlock(ModuleManager.bedAura.currentBlock) instanceof BlockBed)) { - this.progress = Math.min(1.0f, ModuleManager.bedAura.breakProgress); + this.progress = Math.min(1.0, ModuleManager.bedAura.breakProgress); this.block = ModuleManager.bedAura.currentBlock; if (this.block == null) { return; diff --git a/src/main/java/keystrokesmod/module/impl/render/HUD.java b/src/main/java/keystrokesmod/module/impl/render/HUD.java index 7c96dac41..3df3e8a3d 100644 --- a/src/main/java/keystrokesmod/module/impl/render/HUD.java +++ b/src/main/java/keystrokesmod/module/impl/render/HUD.java @@ -27,7 +27,7 @@ import java.util.List; public class HUD extends Module { - public static final String VERSION = "1.5.2"; + public static final String VERSION = "1.5.3"; public static SliderSetting theme; // public static SliderSetting font; // public static SliderSetting fontSize; diff --git a/src/main/java/keystrokesmod/module/impl/world/BedAura.java b/src/main/java/keystrokesmod/module/impl/world/BedAura.java index 1a0cf3709..3cf80bbcf 100644 --- a/src/main/java/keystrokesmod/module/impl/world/BedAura.java +++ b/src/main/java/keystrokesmod/module/impl/world/BedAura.java @@ -8,8 +8,10 @@ import keystrokesmod.module.Module; import keystrokesmod.module.ModuleManager; import keystrokesmod.module.impl.minigames.BedWars; +import keystrokesmod.module.impl.render.HUD; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; +import keystrokesmod.script.classes.Vec3; import keystrokesmod.utility.*; import keystrokesmod.utility.render.RenderUtils; import net.minecraft.block.Block; @@ -29,47 +31,46 @@ import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import org.jetbrains.annotations.Nullable; import java.awt.*; import java.util.Arrays; import java.util.HashMap; -import java.util.Iterator; +import java.util.List; import java.util.Map; public class BedAura extends Module { public SliderSetting mode; - private SliderSetting breakSpeed; - private SliderSetting fov; - private SliderSetting range; - private SliderSetting rate; + private final SliderSetting breakSpeed; + private final SliderSetting fov; + private final SliderSetting range; + private final SliderSetting rate; public ButtonSetting allowAura; - private ButtonSetting breakNearBlock; - private ButtonSetting cancelKnockback; - private ButtonSetting disableBreakEffects; + private final ButtonSetting breakNearBlock; + private final ButtonSetting cancelKnockback; + private final ButtonSetting disableBreakEffects; public ButtonSetting groundSpoof; public ButtonSetting ignoreSlow; - private ButtonSetting onlyWhileVisible; - private ButtonSetting renderOutline; - private ButtonSetting sendAnimations; - private ButtonSetting silentSwing; - private String[] modes = new String[]{"Legit", "Instant", "Swap"}; + private final ButtonSetting onlyWhileVisible; + private final ButtonSetting renderOutline; + private final ButtonSetting sendAnimations; + private final ButtonSetting silentSwing; + private final String[] modes = new String[]{"Legit", "Instant", "Swap"}; private BlockPos[] bedPos; - public float breakProgress; + public double breakProgress; private int currentSlot = -1; private int lastSlot = -1; private boolean rotate; public BlockPos currentBlock; private long lastCheck = 0; public boolean stopAutoblock; - private int outlineColor = new Color(226, 65, 65).getRGB(); - private int breakTickDelay = 5; private int ticksAfterBreak = 0; private boolean delayStart; private BlockPos nearestBlock; - private Map breakProgressMap = new HashMap<>(); + private final Map breakProgressMap = new HashMap<>(); public double lastProgress; public float vanillaProgress; - private int defaultOutlineColor = new Color(226, 65, 65).getRGB(); + private final int defaultOutlineColor = new Color(226, 65, 65).getRGB(); public BedAura() { super("BedAura", category.world, 0); @@ -80,7 +81,7 @@ public BedAura() { this.registerSetting(rate = new SliderSetting("Rate", 0.2, 0.05, 3.0, 0.05, " second")); this.registerSetting(allowAura = new ButtonSetting("Allow aura", true)); this.registerSetting(breakNearBlock = new ButtonSetting("Break near block", false)); - this.registerSetting(cancelKnockback = new ButtonSetting("Cancel knockback", false)); + this.registerSetting(cancelKnockback = new ButtonSetting("Cancel knockBack", false)); this.registerSetting(disableBreakEffects = new ButtonSetting("Disable break effects", false)); this.registerSetting(groundSpoof = new ButtonSetting("Ground spoof", false)); this.registerSetting(ignoreSlow = new ButtonSetting("Ignore slow", false)); @@ -105,6 +106,13 @@ public void onPreUpdate(PreUpdateEvent e) { if (!Utils.nullCheck()) { return; } + if (currentBlock != null) { + if (new Vec3(mc.thePlayer).distanceTo(Vec3.convert(currentBlock)) > Math.max(6, range.getInput())) { + currentBlock = null; + reset(true); + return; + } + } if (ModuleManager.bedwars != null && ModuleManager.bedwars.isEnabled() && BedWars.whitelistOwnBed.isToggled() && !BedWars.outsideSpawn) { reset(true); return; @@ -129,8 +137,10 @@ public void onPreUpdate(PreUpdateEvent e) { return; } } + if (delayStart) { resetSlot(); + int breakTickDelay = 0; if (ticksAfterBreak++ <= breakTickDelay) { return; } @@ -142,6 +152,7 @@ public void onPreUpdate(PreUpdateEvent e) { else { ticksAfterBreak = 0; } + if (breakNearBlock.isToggled() && isCovered(bedPos[0]) && isCovered(bedPos[1])) { if (nearestBlock == null) { nearestBlock = getBestBlock(bedPos, true); @@ -151,7 +162,8 @@ public void onPreUpdate(PreUpdateEvent e) { else { nearestBlock = null; resetSlot(); - breakBlock(getBestBlock(bedPos, false) != null ? getBestBlock(bedPos, false) : bedPos[0]); + BlockPos bestBlock = getBestBlock(bedPos, false); + breakBlock(bestBlock != null ? bestBlock : bedPos[0]); } } @@ -196,11 +208,12 @@ public void onRenderWorld(RenderWorldLastEvent renderWorldLastEvent) { if (!renderOutline.isToggled() || currentBlock == null || !Utils.nullCheck()) { return; } + int outlineColor; if (ModuleManager.bedESP != null && ModuleManager.bedESP.isEnabled()) { outlineColor = Theme.getGradient((int) ModuleManager.bedESP.theme.getInput(), 0); } else if (ModuleManager.hud != null && ModuleManager.hud.isEnabled()) { - outlineColor = Theme.getGradient((int) ModuleManager.hud.theme.getInput(), 0); + outlineColor = Theme.getGradient((int) HUD.theme.getInput(), 0); } else { outlineColor = defaultOutlineColor; @@ -213,7 +226,7 @@ private void resetSlot() { setPacketSlot(mc.thePlayer.inventory.currentItem); } else if (lastSlot != -1) { - lastSlot = mc.thePlayer.inventory.currentItem = lastSlot; + mc.thePlayer.inventory.currentItem = lastSlot; } } @@ -221,24 +234,24 @@ public boolean cancelKnockback() { return this.isEnabled() && this.currentBlock != null && this.cancelKnockback.isToggled(); } - private BlockPos[] getBedPos() { - int range; - priority: - for (int n = range = (int) this.range.getInput(); range >= -n; --range) { - for (int j = -n; j <= n; ++j) { - for (int k = -n; k <= n; ++k) { - final BlockPos blockPos = new BlockPos(mc.thePlayer.posX + j, mc.thePlayer.posY + range, mc.thePlayer.posZ + k); - final IBlockState getBlockState = mc.theWorld.getBlockState(blockPos); - if (getBlockState.getBlock() == Blocks.bed && getBlockState.getValue((IProperty) BlockBed.PART) == BlockBed.EnumPartType.FOOT) { - float fov = (float) this.fov.getInput(); - if (fov != 360 && !Utils.inFov(fov, blockPos)) { - continue priority; - } - return new BlockPos[]{blockPos, blockPos.offset((EnumFacing) getBlockState.getValue((IProperty) BlockBed.FACING))}; - } + private BlockPos @Nullable [] getBedPos() { + final int range = (int) Math.round(this.range.getInput()); + final List blocks = BlockUtils.getAllInBox( + mc.thePlayer.getPosition().add(-range, -range, -range), + mc.thePlayer.getPosition().add(range, range, range) + ); + + for (BlockPos blockPos : blocks) { + final IBlockState getBlockState = mc.theWorld.getBlockState(blockPos); + if (getBlockState.getBlock() == Blocks.bed && getBlockState.getValue((IProperty) BlockBed.PART) == BlockBed.EnumPartType.FOOT) { + float fov = (float) this.fov.getInput(); + if (fov != 360 && !Utils.inFov(fov, blockPos)) { + continue; } + return new BlockPos[]{blockPos, blockPos.offset((EnumFacing) getBlockState.getValue((IProperty) BlockBed.FACING))}; } } + return null; } @@ -360,7 +373,7 @@ private void breakBlock(BlockPos blockPos) { return; } float fov = (float) this.fov.getInput(); - if (fov != 360 && !Utils.inFov(fov, blockPos)) { + if (fov < 360 && !Utils.inFov(fov, blockPos)) { return; } if (RotationUtils.notInRange(blockPos, range.getInput())) { @@ -395,13 +408,7 @@ else if (breakProgress >= 1) { reset(false); stopAutoblock = true; delayStart = true; - Iterator> iterator = breakProgressMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - if (entry.getKey().equals(blockPos)) { - iterator.remove(); - } - } + breakProgressMap.entrySet().removeIf(entry -> entry.getKey().equals(blockPos)); if (!disableBreakEffects.isToggled()) { mc.playerController.onPlayerDestroyBlock(blockPos, EnumFacing.UP); } diff --git a/src/main/java/keystrokesmod/module/impl/world/BlockIn.java b/src/main/java/keystrokesmod/module/impl/world/BlockIn.java index 904a30447..a96e50b74 100644 --- a/src/main/java/keystrokesmod/module/impl/world/BlockIn.java +++ b/src/main/java/keystrokesmod/module/impl/world/BlockIn.java @@ -1,6 +1,5 @@ package keystrokesmod.module.impl.world; -import akka.japi.Pair; import keystrokesmod.event.PreMotionEvent; import keystrokesmod.module.Module; import keystrokesmod.module.impl.other.anticheats.utils.phys.Vec2; @@ -21,6 +20,7 @@ import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; +import org.apache.commons.lang3.tuple.Triple; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -39,7 +39,7 @@ public class BlockIn extends Module { public BlockIn() { super("Block-In", category.world); this.registerSetting(new DescriptionSetting("make you block in.")); - this.registerSetting(rotationMode = new SliderSetting("Rotation mode", rotationModes, 1)); + this.registerSetting(rotationMode = new SliderSetting("Rotation mode", rotationModes, 2)); this.registerSetting(aimSpeed = new SliderSetting("Aim speed", 5, 0, 5, 0.05)); this.registerSetting(lookView = new ButtonSetting("Look view", false)); this.registerSetting(placeDelay = new SliderSetting("Place delay", 50, 0, 500, 1, "ms")); @@ -88,18 +88,14 @@ public void onRender(TickEvent.RenderTickEvent event) { if (currentTime - lastPlace < placeDelay.getInput()) return; if (!BlockUtils.replaceable(blockPos)) continue; - Pair placeSideBlock; + Triple placeSideBlock; try { placeSideBlock = getPlaceSide(blockPos).orElseThrow(NoSuchElementException::new); } catch (NoSuchElementException e) { continue; } - Vec3 hitPos = new Vec3( - placeSideBlock.first().getX() + 0.5, - placeSideBlock.first().getY() + 1, - placeSideBlock.first().getZ() + 0.5 - ); + Vec3 hitPos = placeSideBlock.getRight(); Vec2 rotation = new Vec2(PlayerRotation.getYaw(hitPos), PlayerRotation.getPitch(hitPos)); if ((int) rotationMode.getInput() == 2) { @@ -132,7 +128,7 @@ public void onRender(TickEvent.RenderTickEvent event) { mc.playerController.onPlayerRightClick( mc.thePlayer, mc.theWorld, mc.thePlayer.getHeldItem(), - placeSideBlock.first(), placeSideBlock.second(), + placeSideBlock.getLeft(), placeSideBlock.getMiddle(), hitPos.toVec3() ); @@ -151,20 +147,10 @@ public void onRender(TickEvent.RenderTickEvent event) { } private @NotNull Set getBlockInBlocks() { - Set surroundBlocks = BlockUtils.getSurroundBlocks(mc.thePlayer); - - int maxX = Integer.MIN_VALUE, maxY = Integer.MIN_VALUE, maxZ = Integer.MIN_VALUE; - for (BlockPos block : surroundBlocks) { - maxX = Math.max(block.getX(), maxX); - maxY = Math.max(block.getY(), maxY); - maxZ = Math.max(block.getZ(), maxZ); - } - - surroundBlocks.add(new BlockPos(maxX - 1, maxY, maxZ)); - return surroundBlocks; + return BlockUtils.getSurroundBlocks(mc.thePlayer); } - private @NotNull Optional> getPlaceSide(@NotNull BlockPos blockPos) { + private @NotNull Optional> getPlaceSide(@NotNull BlockPos blockPos) { final List possible = Arrays.asList( blockPos.down(), blockPos.east(), blockPos.west(), blockPos.north(), blockPos.south(), blockPos.up() @@ -173,14 +159,28 @@ public void onRender(TickEvent.RenderTickEvent event) { for (BlockPos pos : possible) { if (BlockUtils.getBlockState(pos).getBlock().isFullBlock()) { EnumFacing facing; - if (pos.getY() < blockPos.getY()) facing = EnumFacing.UP; - else if (pos.getX() > blockPos.getX()) facing = EnumFacing.EAST; - else if (pos.getX() < blockPos.getX()) facing = EnumFacing.WEST; - else if (pos.getZ() < blockPos.getZ()) facing = EnumFacing.NORTH; - else if (pos.getZ() > blockPos.getZ()) facing = EnumFacing.SOUTH; - else facing = EnumFacing.DOWN; - - return Optional.of(new Pair<>(pos, facing)); + Vec3 hitPos; + if (pos.getY() < blockPos.getY()) { + facing = EnumFacing.UP; + hitPos = new Vec3(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5); + } else if (pos.getX() > blockPos.getX()) { + facing = EnumFacing.WEST; + hitPos = new Vec3(pos.getX(), pos.getY() + 0.5, pos.getZ() + 0.5); + } else if (pos.getX() < blockPos.getX()) { + facing = EnumFacing.EAST; + hitPos = new Vec3(pos.getX() + 1, pos.getY() + 0.5, pos.getZ() + 0.5); + } else if (pos.getZ() < blockPos.getZ()) { + facing = EnumFacing.SOUTH; + hitPos = new Vec3(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 1); + } else if (pos.getZ() > blockPos.getZ()) { + facing = EnumFacing.NORTH; + hitPos = new Vec3(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ()); + } else { + facing = EnumFacing.DOWN; + hitPos = new Vec3(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); + } + + return Optional.of(Triple.of(pos, facing, hitPos)); } } return Optional.empty(); diff --git a/src/main/java/keystrokesmod/module/impl/world/WaterBucket.java b/src/main/java/keystrokesmod/module/impl/world/WaterBucket.java index 2718e0fc8..c8850a1a5 100644 --- a/src/main/java/keystrokesmod/module/impl/world/WaterBucket.java +++ b/src/main/java/keystrokesmod/module/impl/world/WaterBucket.java @@ -2,8 +2,10 @@ import keystrokesmod.event.PreMotionEvent; import keystrokesmod.module.Module; +import keystrokesmod.module.impl.other.anticheats.utils.world.PlayerMove; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; +import keystrokesmod.utility.MoveUtil; import keystrokesmod.utility.RotationUtils; import keystrokesmod.utility.Utils; import net.minecraft.entity.player.InventoryPlayer; @@ -15,12 +17,14 @@ import org.jetbrains.annotations.NotNull; public class WaterBucket extends Module { + private final SliderSetting latency; private final SliderSetting minDistance; private final ButtonSetting silentAim; private final ButtonSetting switchToItem; public WaterBucket() { super("Water bucket", category.world, 0); + this.registerSetting(latency = new SliderSetting("Latency compensation", 0, 0, 200, 50)); this.registerSetting(minDistance = new SliderSetting("Min distance", 3, 0, 20, 0.5)); this.registerSetting(silentAim = new ButtonSetting("Silent aim", true)); this.registerSetting(switchToItem = new ButtonSetting("Switch to item", true)); @@ -28,7 +32,14 @@ public WaterBucket() { @SubscribeEvent public void onPreMotion(@NotNull PreMotionEvent e) { - MovingObjectPosition rayCast = RotationUtils.rayCast(mc.playerController.getBlockReachDistance(), e.getYaw(), 90); + double extraDistance = 0; + if (latency.getInput() > 0) { + for (int i = 0; i < (int) latency.getInput() / 50; i++) { + extraDistance += PlayerMove.predictedMotion(mc.thePlayer.motionY, i); + } + } + + MovingObjectPosition rayCast = RotationUtils.rayCast(mc.playerController.getBlockReachDistance() + extraDistance, e.getYaw(), 90); if (inPosition() && rayCast != null && rayCast.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && holdWaterBucket(switchToItem.isToggled())) { if (silentAim.isToggled()) { e.setPitch(90); diff --git a/src/main/java/keystrokesmod/script/ScriptDefaults.java b/src/main/java/keystrokesmod/script/ScriptDefaults.java index 4e6fdf420..06ee94a5a 100644 --- a/src/main/java/keystrokesmod/script/ScriptDefaults.java +++ b/src/main/java/keystrokesmod/script/ScriptDefaults.java @@ -582,7 +582,7 @@ public Vec3 getBedAuraPosition() { public float[] getBedAuraProgress() { if (ModuleManager.bedAura != null && ModuleManager.bedAura.isEnabled()) { - return new float[]{ModuleManager.bedAura.breakProgress, ModuleManager.bedAura.vanillaProgress}; + return new float[]{(float) ModuleManager.bedAura.breakProgress, ModuleManager.bedAura.vanillaProgress}; } return new float[]{0, 0}; } diff --git a/src/main/java/keystrokesmod/script/ScriptManager.java b/src/main/java/keystrokesmod/script/ScriptManager.java index b07c51776..8c68e6822 100644 --- a/src/main/java/keystrokesmod/script/ScriptManager.java +++ b/src/main/java/keystrokesmod/script/ScriptManager.java @@ -2,10 +2,8 @@ import keystrokesmod.Raven; import keystrokesmod.clickgui.ClickGui; -import keystrokesmod.clickgui.components.impl.CategoryComponent; import keystrokesmod.module.Module; import keystrokesmod.script.classes.Entity; -import net.minecraft.client.Minecraft; import net.minecraftforge.fml.common.FMLCommonHandler; import javax.tools.JavaCompiler; @@ -23,7 +21,6 @@ public class ScriptManager { protected static Entity localPlayer; - private Minecraft mc = Minecraft.getMinecraft(); public HashMap scripts = new LinkedHashMap<>(); public JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); public boolean d = true; @@ -33,7 +30,7 @@ public class ScriptManager { public String b = ((String[])ScriptManager.class.getProtectionDomain().getCodeSource().getLocation().getPath().split("\\.jar!"))[0].substring(5) + ".jar"; public ScriptManager() { - directory = new File(mc.mcDataDir + File.separator + "keystrokes", "scripts"); + directory = new File(Raven.mc.mcDataDir + File.separator + "keystrokes", "scripts"); } public void onEnable(Script dv) { diff --git a/src/main/java/keystrokesmod/utility/BlockUtils.java b/src/main/java/keystrokesmod/utility/BlockUtils.java index 8018c232a..e333f9ab8 100644 --- a/src/main/java/keystrokesmod/utility/BlockUtils.java +++ b/src/main/java/keystrokesmod/utility/BlockUtils.java @@ -16,6 +16,7 @@ import net.minecraft.util.BlockPos; import net.minecraft.util.MathHelper; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.HashSet; @@ -173,19 +174,30 @@ public static boolean isBlockUnder(int distance) { new BlockPos(from.x() - blockDistance, from.y() - blockDistance, from.z() - blockDistance), new BlockPos(from.x() + blockDistance, from.y() + blockDistance, from.z() + blockDistance) )) { - final IBlockState blockState = getBlockState(blockPos); + AxisAlignedBB box = getCollisionBoundingBox(blockPos); + if (box == null) continue; - if (RotationUtils.getNearestPoint(getCollisionBoundingBox(blockPos), from).distanceTo(from) <= distance) + if (RotationUtils.getNearestPoint(box, from).distanceTo(from) <= distance) blocks.add(blockPos); } return blocks; } - public static AxisAlignedBB getCollisionBoundingBox(BlockPos blockPos) { + public static @Nullable AxisAlignedBB getCollisionBoundingBox(BlockPos blockPos) { final IBlockState blockState = getBlockState(blockPos); + final Block block = blockState.getBlock(); - return blockState.getBlock().getCollisionBoundingBox(mc.theWorld, blockPos, blockState); + if (block instanceof BlockAir) { + return null; + } + if (block instanceof BlockGlass) { + return new AxisAlignedBB( + blockPos.getX(), blockPos.getY(), blockPos.getZ(), + blockPos.getX() + 1, blockPos.getY() + 1, blockPos.getZ() + 1 + ); + } + return block.getCollisionBoundingBox(mc.theWorld, blockPos, blockState); } @@ -207,8 +219,8 @@ public static AxisAlignedBB getCollisionBoundingBox(BlockPos blockPos) { ))) .filter(blockPos -> !((blockPos.getX() == minX || blockPos.getX() == maxX) && (blockPos.getZ() == minZ || blockPos.getZ() == maxZ))) - .filter(blockPos -> !((blockPos.getY() == minY || blockPos.getY() == maxY) - && (blockPos.getX() == minX || blockPos.getX() == maxX || blockPos.getZ() == minZ || blockPos.getZ() == maxZ))) +// .filter(blockPos -> !((blockPos.getY() == minY || blockPos.getY() == maxY) +// && (blockPos.getX() == minX || blockPos.getX() == maxX || blockPos.getZ() == minZ || blockPos.getZ() == maxZ))) .collect(Collectors.toSet()); } } diff --git a/src/main/java/keystrokesmod/utility/RotationUtils.java b/src/main/java/keystrokesmod/utility/RotationUtils.java index 1b6729526..6b24866e9 100644 --- a/src/main/java/keystrokesmod/utility/RotationUtils.java +++ b/src/main/java/keystrokesmod/utility/RotationUtils.java @@ -59,25 +59,13 @@ public static float i(final double n, final double n2) { } public static boolean notInRange(final BlockPos blockPos, final double n) { - final float[] array = RotationUtils.getRotations(blockPos); - final Vec3 getPositionEyes = mc.thePlayer.getPositionEyes(1.0f); - final float n2 = -array[0] * 0.017453292f; - final float n3 = -array[1] * 0.017453292f; - final float cos = MathHelper.cos(n2 - 3.1415927f); - final float sin = MathHelper.sin(n2 - 3.1415927f); - final float n4 = -MathHelper.cos(n3); - final Vec3 vec3 = new Vec3(sin * n4, MathHelper.sin(n3), cos * n4); - Block block = BlockUtils.getBlock(blockPos); - IBlockState blockState = BlockUtils.getBlockState(blockPos); - if (block != null && blockState != null) { - AxisAlignedBB boundingBox = block.getCollisionBoundingBox(mc.theWorld, blockPos, blockState); - if (boundingBox != null) { - Vec3 targetVec = getPositionEyes.addVector(vec3.xCoord * n, vec3.yCoord * n, vec3.zCoord * n); - MovingObjectPosition intercept = boundingBox.calculateIntercept(getPositionEyes, targetVec); - return intercept == null; - } + AxisAlignedBB box = BlockUtils.getCollisionBoundingBox(blockPos); + keystrokesmod.script.classes.Vec3 eyePos = Utils.getEyePos(); + if (box == null) { + return eyePos.distanceTo(keystrokesmod.script.classes.Vec3.convert(blockPos)) > n; + } else { + return eyePos.distanceTo(getNearestPoint(box, eyePos)) > n; } - return true; } public static float[] getRotations(final Entity entity) { diff --git a/src/main/java/keystrokesmod/utility/Utils.java b/src/main/java/keystrokesmod/utility/Utils.java index f79f46e17..57a935f39 100644 --- a/src/main/java/keystrokesmod/utility/Utils.java +++ b/src/main/java/keystrokesmod/utility/Utils.java @@ -169,7 +169,7 @@ public static void attackEntity(Entity e, boolean clientSwing, boolean silentSwi else if (silentSwing || (!silentSwing && !clientSwing)) { if (HitSelect.canSwing()) mc.thePlayer.sendQueue.addToSendQueue(new C0APacketAnimation()); } - if (HitSelect.canAttack()) mc.playerController.attackEntity(mc.thePlayer, e); + if (HitSelect.canAttack(e)) mc.playerController.attackEntity(mc.thePlayer, e); } public static void sendRawMessage(String txt) {