From 537fce643af1eaf867dee70ba0d5f9a6f585bded Mon Sep 17 00:00:00 2001 From: xia-mc <2052472631@qq.com> Date: Sat, 8 Jun 2024 17:36:05 +0800 Subject: [PATCH] B1.1.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [+] TargetStrafe - Strafes around the target. - [+] Blink mode for InvMove - [+] Module enable/disable sound. - [+] Fast option for Scaffold - [+] Alan34 mode for NoFall - [※] KillAura - fix sometimes fails to attack. - [※] fix HUD issue - [※] fix MultiPlayer issue +2 unverified changes. --- .../components/impl/CategoryComponent.java | 2 +- .../components/impl/ModuleComponent.java | 2 +- .../impl/client/KeyBindingAccessor.java | 11 ++ .../impl/network/MixinNetworkManager.java | 9 +- .../java/keystrokesmod/module/Module.java | 4 +- .../keystrokesmod/module/ModuleManager.java | 2 + .../module/impl/combat/KillAura.java | 31 ++-- .../module/impl/minigames/BridgeInfo.java | 2 +- .../module/impl/minigames/MurderMystery.java | 2 +- .../module/impl/movement/Fly.java | 3 +- .../module/impl/movement/InvMove.java | 47 +++-- .../module/impl/movement/LongJump.java | 124 +++++++++---- .../module/impl/movement/Speed.java | 16 +- .../module/impl/movement/TargetStrafe.java | 85 +++++++++ .../module/impl/player/Blink.java | 2 +- .../module/impl/player/Freecam.java | 2 +- .../module/impl/player/NoFall.java | 32 +++- .../module/impl/render/BedESP.java | 2 +- .../module/impl/render/ChestESP.java | 2 +- .../keystrokesmod/module/impl/render/HUD.java | 6 +- .../module/impl/render/Indicators.java | 2 +- .../module/impl/render/ItemESP.java | 2 +- .../module/impl/render/MobESP.java | 2 +- .../module/impl/render/PlayerESP.java | 2 +- .../module/impl/render/Radar.java | 2 +- .../module/impl/render/TargetHUD.java | 26 ++- .../module/impl/render/Tracers.java | 2 +- .../module/impl/render/Trajectories.java | 2 +- .../module/impl/render/Xray.java | 2 +- .../module/impl/world/BedAura.java | 1 + .../module/impl/world/Scaffold.java | 67 +++++-- .../keystrokesmod/script/ScriptDefaults.java | 4 +- .../keystrokesmod/script/classes/Vec3.java | 10 + .../java/keystrokesmod/utility/Commands.java | 1 + .../utility/DebugInfoRenderer.java | 7 +- .../java/keystrokesmod/utility/MoveUtil.java | 11 +- .../keystrokesmod/utility/TargetSelector.java | 175 ++++++++++++++++++ .../utility/profile/ProfileManager.java | 6 +- .../utility/render/Animation.java | 128 +++++++++++++ .../keystrokesmod/utility/render/Easing.java | 58 ++++++ .../utility/{ => render}/RenderUtils.java | 3 +- .../assets/keystrokesmod/sounds.json | 14 ++ src/main/resources/mixins.raven.json | 11 +- 43 files changed, 774 insertions(+), 150 deletions(-) create mode 100644 src/main/java/keystrokesmod/mixins/impl/client/KeyBindingAccessor.java create mode 100644 src/main/java/keystrokesmod/module/impl/movement/TargetStrafe.java create mode 100644 src/main/java/keystrokesmod/utility/TargetSelector.java create mode 100644 src/main/java/keystrokesmod/utility/render/Animation.java create mode 100644 src/main/java/keystrokesmod/utility/render/Easing.java rename src/main/java/keystrokesmod/utility/{ => render}/RenderUtils.java (99%) create mode 100644 src/main/resources/assets/keystrokesmod/sounds.json diff --git a/src/main/java/keystrokesmod/clickgui/components/impl/CategoryComponent.java b/src/main/java/keystrokesmod/clickgui/components/impl/CategoryComponent.java index c8c2871c5..17ddbee83 100644 --- a/src/main/java/keystrokesmod/clickgui/components/impl/CategoryComponent.java +++ b/src/main/java/keystrokesmod/clickgui/components/impl/CategoryComponent.java @@ -4,7 +4,7 @@ import keystrokesmod.clickgui.components.Component; import keystrokesmod.module.Module; import keystrokesmod.module.impl.client.Gui; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Timer; import keystrokesmod.utility.Utils; import keystrokesmod.utility.profile.Manager; diff --git a/src/main/java/keystrokesmod/clickgui/components/impl/ModuleComponent.java b/src/main/java/keystrokesmod/clickgui/components/impl/ModuleComponent.java index 3461d962c..c996cc0ba 100644 --- a/src/main/java/keystrokesmod/clickgui/components/impl/ModuleComponent.java +++ b/src/main/java/keystrokesmod/clickgui/components/impl/ModuleComponent.java @@ -7,7 +7,7 @@ import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.DescriptionSetting; import keystrokesmod.module.setting.impl.SliderSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.profile.Manager; import keystrokesmod.utility.profile.ProfileModule; import net.minecraft.client.Minecraft; diff --git a/src/main/java/keystrokesmod/mixins/impl/client/KeyBindingAccessor.java b/src/main/java/keystrokesmod/mixins/impl/client/KeyBindingAccessor.java new file mode 100644 index 000000000..50e0f3da2 --- /dev/null +++ b/src/main/java/keystrokesmod/mixins/impl/client/KeyBindingAccessor.java @@ -0,0 +1,11 @@ +package keystrokesmod.mixins.impl.client; + +import net.minecraft.client.settings.KeyBinding; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(KeyBinding.class) +public interface KeyBindingAccessor { + @Accessor + void setPressed(boolean pressed); +} diff --git a/src/main/java/keystrokesmod/mixins/impl/network/MixinNetworkManager.java b/src/main/java/keystrokesmod/mixins/impl/network/MixinNetworkManager.java index 6f82316f8..7c19784b9 100644 --- a/src/main/java/keystrokesmod/mixins/impl/network/MixinNetworkManager.java +++ b/src/main/java/keystrokesmod/mixins/impl/network/MixinNetworkManager.java @@ -1,20 +1,26 @@ package keystrokesmod.mixins.impl.network; import io.netty.channel.ChannelHandlerContext; +import keystrokesmod.Raven; import keystrokesmod.event.ReceivePacketEvent; import keystrokesmod.event.SendPacketEvent; import keystrokesmod.utility.PacketUtils; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(NetworkManager.class) -public class MixinNetworkManager { +public abstract class MixinNetworkManager { + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + @Shadow public abstract boolean isChannelOpen(); + @Inject(method = "sendPacket(Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true) public void sendPacket(Packet p_sendPacket_1_, CallbackInfo ci) { + if (Raven.mc.thePlayer == null || Raven.mc.theWorld == null || !this.isChannelOpen()) return; if (PacketUtils.skipSendEvent.contains(p_sendPacket_1_)) { PacketUtils.skipSendEvent.remove(p_sendPacket_1_); return; @@ -29,6 +35,7 @@ public void sendPacket(Packet p_sendPacket_1_, CallbackInfo ci) { @Inject(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true) public void receivePacket(ChannelHandlerContext p_channelRead0_1_, Packet p_channelRead0_2_, CallbackInfo ci) { + if (Raven.mc.thePlayer == null || Raven.mc.theWorld == null || !this.isChannelOpen()) return; if (PacketUtils.skipReceiveEvent.contains(p_channelRead0_2_)) { PacketUtils.skipReceiveEvent.remove(p_channelRead0_2_); return; diff --git a/src/main/java/keystrokesmod/module/Module.java b/src/main/java/keystrokesmod/module/Module.java index aad3975d7..5b777d8b3 100644 --- a/src/main/java/keystrokesmod/module/Module.java +++ b/src/main/java/keystrokesmod/module/Module.java @@ -173,10 +173,10 @@ public void onDisable() { public void toggle() { if (this.isEnabled()) { this.disable(); - mc.thePlayer.playSound("keystrokesmod.toggle.disable", 1, 1); + mc.thePlayer.playSound("keystrokesmod:toggle.disable", 1, 1); } else { this.enable(); - mc.thePlayer.playSound("keystrokesmod.toggle.enable", 1, 1); + mc.thePlayer.playSound("keystrokesmod:toggle.enable", 1, 1); } } diff --git a/src/main/java/keystrokesmod/module/ModuleManager.java b/src/main/java/keystrokesmod/module/ModuleManager.java index 40472a978..bf304df25 100644 --- a/src/main/java/keystrokesmod/module/ModuleManager.java +++ b/src/main/java/keystrokesmod/module/ModuleManager.java @@ -58,6 +58,7 @@ public class ModuleManager { public static AntiVoid antiVoid; public static Criticals criticals; public static TimerRange timerRange; + public static TargetStrafe targetStrafe; public void register() { this.addModule(autoClicker = new AutoClicker()); @@ -146,6 +147,7 @@ public void register() { this.addModule(antiVoid = new AntiVoid()); this.addModule(criticals = new Criticals()); this.addModule(timerRange = new TimerRange()); + this.addModule(targetStrafe = new TargetStrafe()); antiBot.enable(); modules.sort(Comparator.comparing(Module::getName)); } diff --git a/src/main/java/keystrokesmod/module/impl/combat/KillAura.java b/src/main/java/keystrokesmod/module/impl/combat/KillAura.java index 53d101008..ef41f9fa0 100644 --- a/src/main/java/keystrokesmod/module/impl/combat/KillAura.java +++ b/src/main/java/keystrokesmod/module/impl/combat/KillAura.java @@ -5,10 +5,10 @@ import keystrokesmod.event.*; import keystrokesmod.module.Module; import keystrokesmod.module.ModuleManager; -import keystrokesmod.module.impl.other.anticheats.utils.world.LevelUtils; import keystrokesmod.module.impl.world.AntiBot; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; +import keystrokesmod.script.classes.Vec3; import keystrokesmod.utility.*; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.EntityLivingBase; @@ -17,11 +17,13 @@ import net.minecraft.network.Packet; import net.minecraft.network.play.client.*; import net.minecraft.network.play.server.S2FPacketSetSlot; -import net.minecraft.util.*; +import net.minecraft.util.BlockPos; +import net.minecraft.util.MovingObjectPosition; import net.minecraftforge.client.event.MouseEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; +import org.jetbrains.annotations.NotNull; import org.lwjgl.input.Mouse; import java.util.*; @@ -336,7 +338,7 @@ public void onReceivePacket(ReceivePacketEvent e) { } @SubscribeEvent - public void onMouse(final MouseEvent mouseEvent) { + public void onMouse(final @NotNull MouseEvent mouseEvent) { if (mouseEvent.button == 0 && mouseEvent.buttonstate) { if (target != null || swing) { mouseEvent.setCanceled(true); @@ -628,20 +630,15 @@ private boolean behindBlocks(float[] rotations) { break; case 1: try { - return keystrokesmod.module.impl.other.anticheats.utils.world.BlockUtils.isFullBlock( - LevelUtils.getClientLevel().getBlockState( - Objects.requireNonNull(rotationSmoothing.getInput() >= 4 && rotationMode.getInput() == 1 || rotationSmoothing.getInput() > 0 ? - RotationUtils.rayCast( - attackRange.getInput(), - prevRotations != null ? prevRotations[0] : mc.thePlayer.rotationYaw, - prevRotations != null ? prevRotations[1] : mc.thePlayer.rotationPitch - ) - : RotationUtils.rayCast(attackRange.getInput(), rotations[0], rotations[1]) - ).getBlockPos() - ) - ); - } catch (NullPointerException e) { - return false; + MovingObjectPosition hitResult = RotationUtils.rayCast( + new keystrokesmod.script.classes.Vec3(target).add(new keystrokesmod.script.classes.Vec3(0, target.getEyeHeight(), 0)) + .distanceTo(new keystrokesmod.script.classes.Vec3(mc.thePlayer).add(new Vec3(0, mc.thePlayer.getEyeHeight(), 0))), rotations[0], rotations[1]); + if (hitResult != null) { + if (keystrokesmod.module.impl.other.anticheats.utils.world.BlockUtils.isFullBlock(mc.theWorld.getBlockState(hitResult.getBlockPos()))) { + return true; + } + } + } catch (NullPointerException ignored) { } } return false; diff --git a/src/main/java/keystrokesmod/module/impl/minigames/BridgeInfo.java b/src/main/java/keystrokesmod/module/impl/minigames/BridgeInfo.java index b4953bd4f..356ab0290 100644 --- a/src/main/java/keystrokesmod/module/impl/minigames/BridgeInfo.java +++ b/src/main/java/keystrokesmod/module/impl/minigames/BridgeInfo.java @@ -3,7 +3,7 @@ import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.DescriptionSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; diff --git a/src/main/java/keystrokesmod/module/impl/minigames/MurderMystery.java b/src/main/java/keystrokesmod/module/impl/minigames/MurderMystery.java index 4c5088000..47b8573b4 100644 --- a/src/main/java/keystrokesmod/module/impl/minigames/MurderMystery.java +++ b/src/main/java/keystrokesmod/module/impl/minigames/MurderMystery.java @@ -2,7 +2,7 @@ import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; diff --git a/src/main/java/keystrokesmod/module/impl/movement/Fly.java b/src/main/java/keystrokesmod/module/impl/movement/Fly.java index d9f0a768a..9711f8102 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/Fly.java +++ b/src/main/java/keystrokesmod/module/impl/movement/Fly.java @@ -3,12 +3,11 @@ import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import org.apache.commons.lang3.RandomUtils; -import org.lwjgl.input.Keyboard; public class Fly extends Module { private SliderSetting mode; diff --git a/src/main/java/keystrokesmod/module/impl/movement/InvMove.java b/src/main/java/keystrokesmod/module/impl/movement/InvMove.java index d76db1e2b..971ee625c 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/InvMove.java +++ b/src/main/java/keystrokesmod/module/impl/movement/InvMove.java @@ -1,39 +1,56 @@ package keystrokesmod.module.impl.movement; import keystrokesmod.module.Module; +import keystrokesmod.module.setting.impl.DescriptionSetting; +import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.utility.Utils; -import net.minecraft.client.gui.GuiChat; +import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.settings.KeyBinding; import org.lwjgl.input.Keyboard; +import static keystrokesmod.module.ModuleManager.blink; + public class InvMove extends Module { + public static final String[] MODES = {"Normal", "Blink"}; + private final SliderSetting mode; + private boolean blinking = false; public InvMove() { super("InvMove", category.movement); + this.registerSetting(new DescriptionSetting("Allow you move in inventory.")); + this.registerSetting(mode = new SliderSetting("Mode", MODES, 0)); } + @Override public void onUpdate() { - if (mc.currentScreen != null) { - if (mc.currentScreen instanceof GuiChat) { - return; + if (mc.currentScreen instanceof GuiContainer) { + if (!blinking) { + blink.enable(); } + blinking = true; KeyBinding.setKeyBindState(mc.gameSettings.keyBindForward.getKeyCode(), Keyboard.isKeyDown(mc.gameSettings.keyBindForward.getKeyCode())); KeyBinding.setKeyBindState(mc.gameSettings.keyBindBack.getKeyCode(), Keyboard.isKeyDown(mc.gameSettings.keyBindBack.getKeyCode())); KeyBinding.setKeyBindState(mc.gameSettings.keyBindRight.getKeyCode(), Keyboard.isKeyDown(mc.gameSettings.keyBindRight.getKeyCode())); KeyBinding.setKeyBindState(mc.gameSettings.keyBindLeft.getKeyCode(), Keyboard.isKeyDown(mc.gameSettings.keyBindLeft.getKeyCode())); KeyBinding.setKeyBindState(mc.gameSettings.keyBindJump.getKeyCode(), Utils.jumpDown()); - if (Keyboard.isKeyDown(208) && mc.thePlayer.rotationPitch < 90.0F) { - mc.thePlayer.rotationPitch += 6.0F; - } - if (Keyboard.isKeyDown(200) && mc.thePlayer.rotationPitch > -90.0F) { - mc.thePlayer.rotationPitch -= 6.0F; - } - if (Keyboard.isKeyDown(205)) { - mc.thePlayer.rotationYaw += 6.0F; - } - if (Keyboard.isKeyDown(203)) { - mc.thePlayer.rotationYaw -= 6.0F; + } else { + if (blinking && blink.isEnabled()) { + blink.disable(); } + blinking = false; } } + + @Override + public void onDisable() { + if (blinking && blink.isEnabled()) { + blink.disable(); + } + blinking = false; + } + + @Override + public String getInfo() { + return MODES[(int) mode.getInput()]; + } } diff --git a/src/main/java/keystrokesmod/module/impl/movement/LongJump.java b/src/main/java/keystrokesmod/module/impl/movement/LongJump.java index 007e8d471..2edb9fb86 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/LongJump.java +++ b/src/main/java/keystrokesmod/module/impl/movement/LongJump.java @@ -1,11 +1,13 @@ package keystrokesmod.module.impl.movement; import keystrokesmod.event.PreMotionEvent; +import keystrokesmod.event.PrePlayerInput; import keystrokesmod.event.PreUpdateEvent; import keystrokesmod.event.ReceivePacketEvent; import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; +import keystrokesmod.utility.MoveUtil; import keystrokesmod.utility.Reflection; import keystrokesmod.utility.Utils; import net.minecraft.init.Items; @@ -16,6 +18,7 @@ import org.jetbrains.annotations.NotNull; 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 verticalMotion; @@ -28,16 +31,30 @@ public class LongJump extends Module { public LongJump() { super("Long Jump", category.movement); - this.registerSetting(mode = new SliderSetting("Mode", new String[]{"Fireball", "Fireball Auto"}, 0)); - this.registerSetting(horizonBoost = new SliderSetting("Horizon boost", 1.0, 0.5, 3.0, 0.01)); + 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(jumpAtEnd = new ButtonSetting("Jump at end.", false)); } @SubscribeEvent(priority = EventPriority.HIGH) public void onPreMotion(PreMotionEvent event) { - if (mode.getInput() == 1 && !waitForDamage) { - event.setPitch(90); + switch ((int) mode.getInput()) { + case 1: + if (!waitForDamage) { + event.setPitch(90); + } + break; + case 2: + if (ticks < 40) { + event.setOnGround(false); + mc.thePlayer.motionX = mc.thePlayer.motionZ = 0; + event.setPosZ(mc.thePlayer.prevPosZ); + event.setPosX(mc.thePlayer.prevPosX); + } else if (ticks == 50) { + event.setOnGround(true); + } + break; } } @@ -45,45 +62,83 @@ public void onPreMotion(PreMotionEvent event) { public void onReceivePacket(@NotNull ReceivePacketEvent event) throws IllegalAccessException { if (event.getPacket() instanceof S12PacketEntityVelocity && Utils.nullCheck()) { S12PacketEntityVelocity packet = (S12PacketEntityVelocity) event.getPacket(); - if (packet.getEntityID() == mc.thePlayer.getEntityId() && ticks == 0) { - Reflection.S12PacketEntityVelocityXMotion.set(packet, (int) Math.floor(packet.getMotionX() * horizonBoost.getInput())); - Reflection.S12PacketEntityVelocityZMotion.set(packet, (int) Math.floor(packet.getMotionZ() * horizonBoost.getInput())); - start = true; + if (packet.getEntityID() != mc.thePlayer.getEntityId()) return; + switch ((int) mode.getInput()) { + case 0: + case 1: + if (ticks == 0) { + Reflection.S12PacketEntityVelocityXMotion.set(packet, (int) Math.floor(packet.getMotionX() * horizonBoost.getInput())); + Reflection.S12PacketEntityVelocityZMotion.set(packet, (int) Math.floor(packet.getMotionZ() * horizonBoost.getInput())); + start = true; + } + break; + case 2: + if (ticks >= 50) + event.setCanceled(true); } } } @SubscribeEvent(priority = EventPriority.LOWEST) public void onPreUpdate(PreUpdateEvent event) { - if (mode.getInput() == 1 && !waitForDamage) { - int shouldSlot = getFireball(); - if (shouldSlot != mc.thePlayer.inventory.currentItem) { - mc.thePlayer.inventory.currentItem = shouldSlot; - } else { - mc.playerController.sendUseItem(mc.thePlayer, mc.theWorld, mc.thePlayer.inventory.getCurrentItem()); - waitForDamage = true; - } - } + switch ((int) mode.getInput()) { + case 1: + if (!waitForDamage) { + int shouldSlot = getFireball(); + if (shouldSlot != mc.thePlayer.inventory.currentItem) { + mc.thePlayer.inventory.currentItem = shouldSlot; + } else { + mc.playerController.sendUseItem(mc.thePlayer, mc.theWorld, mc.thePlayer.inventory.getCurrentItem()); + waitForDamage = true; + } + } + case 0: + if (mc.thePlayer.hurtTime >= 3) { + start = true; + } - if (mc.thePlayer.hurtTime >= 3) { - start = true; - } + if (start) { + ticks++; + } - if (start) { - ticks++; - } + if (ticks > 0 && ticks < 30) { + mc.thePlayer.motionY = verticalMotion.getInput(); + } else if (ticks >= 30) { + done = true; + start = false; + } - if (ticks > 0 && ticks < 30) { - mc.thePlayer.motionY = verticalMotion.getInput(); - } else if (ticks >= 30) { - done = true; - start = false; + if (mc.thePlayer.hurtTime == 0 && done) { + if (jumpAtEnd.isToggled()) + mc.thePlayer.motionY = 0.4; + disable(); + } + break; + case 2: + mc.thePlayer.setSprinting(true); + if (ticks < 40) { + if (mc.thePlayer.onGround) mc.thePlayer.jump(); + } else if (ticks > 40 && mc.thePlayer.onGround && !waitForDamage) { + MoveUtil.strafe(0.6); + mc.thePlayer.motionY = 0.42; + waitForDamage = true; + } else if (waitForDamage && mc.thePlayer.hurtTime == 5) { + MoveUtil.strafe(horizonBoost.getInput()); + mc.thePlayer.motionY = verticalMotion.getInput(); + disable(); + } + ticks++; + break; } + } - if (mc.thePlayer.hurtTime == 0 && done) { - if (jumpAtEnd.isToggled()) - mc.thePlayer.motionY = 0.4; - disable(); + @SubscribeEvent + public void onPreInput(PrePlayerInput event) { + if ((int) mode.getInput() == 2) { + if (ticks < 40) { + event.setForward(0); + event.setStrafe(0); + } } } @@ -117,4 +172,9 @@ private int getFireball() { } return n; } + + @Override + public String getInfo() { + return MODES[(int) mode.getInput()]; + } } diff --git a/src/main/java/keystrokesmod/module/impl/movement/Speed.java b/src/main/java/keystrokesmod/module/impl/movement/Speed.java index 0ea15583d..6f5222b58 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/Speed.java +++ b/src/main/java/keystrokesmod/module/impl/movement/Speed.java @@ -1,11 +1,14 @@ package keystrokesmod.module.impl.movement; +import keystrokesmod.event.PreMotionEvent; import keystrokesmod.module.Module; -import keystrokesmod.module.ModuleManager; -import keystrokesmod.utility.MoveUtil; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; +import keystrokesmod.utility.MoveUtil; import keystrokesmod.utility.Utils; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import static keystrokesmod.module.ModuleManager.scaffold; public class Speed extends Module { private final SliderSetting mode; @@ -31,6 +34,13 @@ public String getInfo() { return modes[(int) mode.getInput()]; } + @SubscribeEvent + public void onPreMotion(PreMotionEvent event) { + if ((int) mode.getInput() == 0) { + event.setSprinting(false); + } + } + public void onUpdate() { if (mc.thePlayer.onGround) { offGroundTicks = 0; @@ -41,7 +51,7 @@ public void onUpdate() { if (((mc.thePlayer.isInWater() || mc.thePlayer.isInLava()) && liquidDisable.isToggled()) || (mc.thePlayer.isSneaking() && sneakDisable.isToggled()) - || ModuleManager.scaffold.isEnabled() + || scaffold.isEnabled() ) { return; } diff --git a/src/main/java/keystrokesmod/module/impl/movement/TargetStrafe.java b/src/main/java/keystrokesmod/module/impl/movement/TargetStrafe.java new file mode 100644 index 000000000..6f663fb21 --- /dev/null +++ b/src/main/java/keystrokesmod/module/impl/movement/TargetStrafe.java @@ -0,0 +1,85 @@ +package keystrokesmod.module.impl.movement; + +import keystrokesmod.event.PrePlayerInput; +import keystrokesmod.module.Module; +import keystrokesmod.module.impl.combat.KillAura; +import keystrokesmod.module.setting.impl.ButtonSetting; +import keystrokesmod.module.setting.impl.DescriptionSetting; +import keystrokesmod.utility.RotationUtils; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import static keystrokesmod.module.ModuleManager.speed; + +public class TargetStrafe extends Module { + private final ButtonSetting onlySpeed; + + public static float getMovementYaw() { + return movementYaw != null ? movementYaw : mc.thePlayer.rotationYaw; + } + + private static Float movementYaw = null; + + public TargetStrafe() { + super("TargetStrafe", category.movement); + this.registerSetting(new DescriptionSetting("Strafes around the target.")); + this.registerSetting(onlySpeed = new ButtonSetting("Only Speed", true)); + } + + private float normalize(float yaw) { + while (yaw > 180) { + yaw -= 360; + } + while (yaw < -180) { + yaw += 360; + } + return yaw; + } + + @SubscribeEvent(priority = EventPriority.HIGH) + public void onPreInput(PrePlayerInput input) { + if (KillAura.target == null || (onlySpeed.isToggled() && !speed.isEnabled())) { + movementYaw = null; + return; + } + + float current = normalize(mc.thePlayer.rotationYaw); + float toTarget = RotationUtils.getRotations(KillAura.target)[0]; + float diff = toTarget - current; + + if (diff == 0) return; +// if (diff > -22.5 && diff < 22.5) { // 0 +// input.setForward(1); +// input.setStrafe(0); +// } else if (diff > 22.5 && diff < 67.5) { // 45 +// input.setForward(1); +// input.setStrafe(1); +// } else if (diff < -22.5 && diff > -67.5) { // -45 +// input.setForward(1); +// input.setStrafe(-1); +// } else if (diff > 67.5 && diff < 112.5) { // 90 +// input.setForward(0); +// input.setStrafe(1); +// } else if (diff < -67.5 && diff > -112.5) { // -90 +// input.setForward(0); +// input.setStrafe(-1); +// } else if (diff > 112.5 && diff < 157.5) { // 135 +// input.setForward(-1); +// input.setStrafe(1); +// } else if (diff < -112.5 && diff > -157.5) { // -135 +// input.setForward(-1); +// input.setStrafe(-1); +// } else if (diff > 157.5 || diff < -157.5) { // 180 +// input.setForward(-1); +// input.setStrafe(0); +// } + + input.setYaw(toTarget); + movementYaw = toTarget; + } + + @Override + public void onDisable() { + movementYaw = null; + } +} diff --git a/src/main/java/keystrokesmod/module/impl/player/Blink.java b/src/main/java/keystrokesmod/module/impl/player/Blink.java index d116c7b5f..56f346795 100644 --- a/src/main/java/keystrokesmod/module/impl/player/Blink.java +++ b/src/main/java/keystrokesmod/module/impl/player/Blink.java @@ -4,7 +4,7 @@ import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.utility.PacketUtils; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.network.Packet; diff --git a/src/main/java/keystrokesmod/module/impl/player/Freecam.java b/src/main/java/keystrokesmod/module/impl/player/Freecam.java index 26cd077ce..1426437c7 100644 --- a/src/main/java/keystrokesmod/module/impl/player/Freecam.java +++ b/src/main/java/keystrokesmod/module/impl/player/Freecam.java @@ -4,7 +4,7 @@ import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.client.entity.EntityOtherPlayerMP; import net.minecraft.network.play.client.C02PacketUseEntity; diff --git a/src/main/java/keystrokesmod/module/impl/player/NoFall.java b/src/main/java/keystrokesmod/module/impl/player/NoFall.java index c12ecf8d1..aae6bf073 100644 --- a/src/main/java/keystrokesmod/module/impl/player/NoFall.java +++ b/src/main/java/keystrokesmod/module/impl/player/NoFall.java @@ -1,14 +1,19 @@ package keystrokesmod.module.impl.player; import keystrokesmod.event.PreMotionEvent; +import keystrokesmod.event.ReceivePacketEvent; import keystrokesmod.event.SendPacketEvent; import keystrokesmod.module.Module; import keystrokesmod.module.ModuleManager; +import keystrokesmod.module.impl.other.anticheats.utils.world.PlayerMove; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.utility.Reflection; import keystrokesmod.utility.Utils; +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; import net.minecraft.network.play.client.C03PacketPlayer; +import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -18,10 +23,11 @@ public class NoFall extends Module { public final SliderSetting mode; private final SliderSetting minFallDistance; private final ButtonSetting ignoreVoid; - private final String[] modes = new String[]{"Spoof", "Extra", "NoGround", "Blink"}; + private final String[] modes = new String[]{"Spoof", "Extra", "NoGround", "Blink", "Alan34"}; // for blink noFall private boolean blinked = false; + private int ticksSinceTeleport = 0; public NoFall() { super("NoFall", category.player); @@ -49,6 +55,7 @@ public void onUpdate() { if (mode.getInput() == 1 && (mc.thePlayer.fallDistance > minFallDistance.getInput()|| minFallDistance.getInput() == 0)) { mc.thePlayer.sendQueue.addToSendQueue(new C03PacketPlayer(true)); } + ticksSinceTeleport++; } @SubscribeEvent @@ -72,7 +79,7 @@ public void onPacketSend(@NotNull SendPacketEvent event) { blinked = true; } Reflection.C03PacketPlayerOnGround.set(packet, true); - } else if (blinked) { + } else if (blinked && packet.isOnGround()) { ModuleManager.blink.disable(); blinked = false; } @@ -85,6 +92,27 @@ public void onPacketSend(@NotNull SendPacketEvent event) { } } + @SubscribeEvent + public void onPacketReceive(@NotNull ReceivePacketEvent event) { + if (event.getPacket() instanceof C03PacketPlayer) { + ticksSinceTeleport = 0; + } + } + + @SubscribeEvent + public void onPreMotionEvent(PreMotionEvent event) { + if (mode.getInput() != 4) return; + if (mc.thePlayer.fallDistance > 3.5 && !(blockRelativeToPlayer(PlayerMove.predictedMotion(mc.thePlayer.motionY, 1)) instanceof BlockAir) && ticksSinceTeleport > 50) { + mc.thePlayer.sendQueue.addToSendQueue(new C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 50 - Math.random(), mc.thePlayer.posZ, false)); + + mc.thePlayer.fallDistance = 0; + } + } + + private Block blockRelativeToPlayer(final double offsetY) { + return mc.theWorld.getBlockState(new BlockPos(mc.thePlayer).add(0, offsetY, 0)).getBlock(); + } + @Override public String getInfo() { return modes[(int) mode.getInput()]; diff --git a/src/main/java/keystrokesmod/module/impl/render/BedESP.java b/src/main/java/keystrokesmod/module/impl/render/BedESP.java index 159be537d..97bb055d1 100644 --- a/src/main/java/keystrokesmod/module/impl/render/BedESP.java +++ b/src/main/java/keystrokesmod/module/impl/render/BedESP.java @@ -4,7 +4,7 @@ import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.utility.BlockUtils; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Theme; import keystrokesmod.utility.Utils; import net.minecraft.block.BlockBed; diff --git a/src/main/java/keystrokesmod/module/impl/render/ChestESP.java b/src/main/java/keystrokesmod/module/impl/render/ChestESP.java index 4defd686d..cfbadad87 100644 --- a/src/main/java/keystrokesmod/module/impl/render/ChestESP.java +++ b/src/main/java/keystrokesmod/module/impl/render/ChestESP.java @@ -3,7 +3,7 @@ import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityChest; diff --git a/src/main/java/keystrokesmod/module/impl/render/HUD.java b/src/main/java/keystrokesmod/module/impl/render/HUD.java index a9cbf581f..37cc1936c 100644 --- a/src/main/java/keystrokesmod/module/impl/render/HUD.java +++ b/src/main/java/keystrokesmod/module/impl/render/HUD.java @@ -5,7 +5,7 @@ import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.DescriptionSetting; import keystrokesmod.module.setting.impl.SliderSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Theme; import keystrokesmod.utility.Utils; import net.minecraft.client.gui.*; @@ -21,7 +21,7 @@ import java.util.List; public class HUD extends Module { - public static final String VERSION = "1.0.1"; + public static final String VERSION = "1.1.0"; public static SliderSetting theme; public static ButtonSetting dropShadow; public static ButtonSetting alphabeticalSort; @@ -70,7 +70,7 @@ public void onRenderTick(RenderTickEvent ev) { canShowInfo = showInfo.isToggled(); ModuleManager.sort(); } - if (!(mc.currentScreen instanceof GuiChat) || mc.gameSettings.showDebugInfo) { + if (mc.currentScreen != null && !(mc.currentScreen instanceof GuiChat) || mc.gameSettings.showDebugInfo) { return; } int n = hudY; diff --git a/src/main/java/keystrokesmod/module/impl/render/Indicators.java b/src/main/java/keystrokesmod/module/impl/render/Indicators.java index adecc9609..9dd7947ea 100644 --- a/src/main/java/keystrokesmod/module/impl/render/Indicators.java +++ b/src/main/java/keystrokesmod/module/impl/render/Indicators.java @@ -4,7 +4,7 @@ import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.utility.Reflection; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.entity.Entity; diff --git a/src/main/java/keystrokesmod/module/impl/render/ItemESP.java b/src/main/java/keystrokesmod/module/impl/render/ItemESP.java index 1e9e80089..9f96c370e 100644 --- a/src/main/java/keystrokesmod/module/impl/render/ItemESP.java +++ b/src/main/java/keystrokesmod/module/impl/render/ItemESP.java @@ -2,7 +2,7 @@ import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.Entity; diff --git a/src/main/java/keystrokesmod/module/impl/render/MobESP.java b/src/main/java/keystrokesmod/module/impl/render/MobESP.java index acc13b616..95af7553b 100644 --- a/src/main/java/keystrokesmod/module/impl/render/MobESP.java +++ b/src/main/java/keystrokesmod/module/impl/render/MobESP.java @@ -2,7 +2,7 @@ import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/keystrokesmod/module/impl/render/PlayerESP.java b/src/main/java/keystrokesmod/module/impl/render/PlayerESP.java index cc0687b84..4a4a9e282 100644 --- a/src/main/java/keystrokesmod/module/impl/render/PlayerESP.java +++ b/src/main/java/keystrokesmod/module/impl/render/PlayerESP.java @@ -7,7 +7,7 @@ import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.DescriptionSetting; import keystrokesmod.module.setting.impl.SliderSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/keystrokesmod/module/impl/render/Radar.java b/src/main/java/keystrokesmod/module/impl/render/Radar.java index 999b2262b..d4ddd1e04 100644 --- a/src/main/java/keystrokesmod/module/impl/render/Radar.java +++ b/src/main/java/keystrokesmod/module/impl/render/Radar.java @@ -4,7 +4,7 @@ import keystrokesmod.module.Module; import keystrokesmod.module.impl.world.AntiBot; import keystrokesmod.module.setting.impl.ButtonSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.ScaledResolution; diff --git a/src/main/java/keystrokesmod/module/impl/render/TargetHUD.java b/src/main/java/keystrokesmod/module/impl/render/TargetHUD.java index 2f01ed2d7..cf49fcc11 100644 --- a/src/main/java/keystrokesmod/module/impl/render/TargetHUD.java +++ b/src/main/java/keystrokesmod/module/impl/render/TargetHUD.java @@ -5,7 +5,7 @@ import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.DescriptionSetting; import keystrokesmod.module.setting.impl.SliderSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Theme; import keystrokesmod.utility.Timer; import keystrokesmod.utility.Utils; @@ -19,11 +19,10 @@ import java.awt.*; public class TargetHUD extends Module { - private DescriptionSetting description; - private SliderSetting theme; - private ButtonSetting renderEsp; - private ButtonSetting showStatus; - private ButtonSetting healthColor; + private final SliderSetting theme; + private final ButtonSetting renderEsp; + private final ButtonSetting showStatus; + private final ButtonSetting healthColor; private Timer fadeTimer; private Timer healthBarTimer = null; private EntityLivingBase target; @@ -33,7 +32,7 @@ public class TargetHUD extends Module { public TargetHUD() { super("TargetHUD", category.render); - this.registerSetting(description = new DescriptionSetting("Only works with KillAura.")); + this.registerSetting(new DescriptionSetting("Only works with KillAura.")); this.registerSetting(theme = new SliderSetting("Theme", Theme.themes, 0)); this.registerSetting(renderEsp = new ButtonSetting("Render ESP", true)); this.registerSetting(showStatus = new ButtonSetting("Show win or loss", true)); @@ -103,18 +102,17 @@ private void drawTargetHUD(Timer cd, String string, double health) { final int n9 = n5 + (mc.fontRendererObj.FONT_HEIGHT + 5) - 6 + n2; final int n10 = (cd == null) ? 255 : (255 - cd.getValueInt(0, 255, 1)); if (n10 > 0) { - final int n11 = (n10 > 110) ? 110 : n10; - final int n12 = (n10 > 210) ? 210 : n10; + final int n11 = Math.min(n10, 110); + final int n12 = Math.min(n10, 210); final int[] array = Theme.getGradients((int) theme.getInput()); RenderUtils.drawRoundedGradientOutlinedRectangle((float) n6, (float) n7, (float) n8, (float) (n9 + 13), 10.0f, Utils.merge(Color.black.getRGB(), n11), Utils.merge(array[0], n10), Utils.merge(array[1], n10)); // outline final int n13 = n6 + 6; final int n14 = n8 - 6; - final int n15 = n9; - RenderUtils.drawRoundedRectangle((float) n13, (float) n15, (float) n14, (float) (n15 + 5), 4.0f, Utils.merge(Color.black.getRGB(), n11)); // background + RenderUtils.drawRoundedRectangle((float) n13, (float) n9, (float) n14, (float) (n9 + 5), 4.0f, Utils.merge(Color.black.getRGB(), n11)); // background int k = Utils.merge(array[0], n12); int n16 = Utils.merge(array[1], n12); - float healthBar = (float) (int) (n14 + (n13 - n14) * (1.0 - ((health < 0.05) ? 0.05 : health))); - if (healthBar - n13 < 3) { // if goes below, the rounded health bar glitches out + float healthBar = (float) (int) (n14 + (n13 - n14) * (1.0 - (Math.max(health, 0.05)))); + if (healthBar - n13 < 3) { // if it goes below, the rounded health bar glitches out healthBar = n13 + 3; } if (healthBar != lastHealthBar && lastHealthBar - n13 >= 3 && healthBarTimer != null ) { @@ -132,7 +130,7 @@ private void drawTargetHUD(Timer cd, String string, double health) { if (healthColor.isToggled()) { k = n16 = Utils.merge(Utils.getColorForHealth(health), n12); } - RenderUtils.drawRoundedGradientRect((float) n13, (float) n15, lastHealthBar, (float) (n15 + 5), 4.0f, k, k, k, n16); // health bar + RenderUtils.drawRoundedGradientRect((float) n13, (float) n9, lastHealthBar, (float) (n9 + 5), 4.0f, k, k, k, n16); // health bar GlStateManager.pushMatrix(); GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); diff --git a/src/main/java/keystrokesmod/module/impl/render/Tracers.java b/src/main/java/keystrokesmod/module/impl/render/Tracers.java index 5c7a4551c..f970e4480 100644 --- a/src/main/java/keystrokesmod/module/impl/render/Tracers.java +++ b/src/main/java/keystrokesmod/module/impl/render/Tracers.java @@ -5,7 +5,7 @@ import keystrokesmod.module.impl.world.AntiBot; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/keystrokesmod/module/impl/render/Trajectories.java b/src/main/java/keystrokesmod/module/impl/render/Trajectories.java index f0750f4e0..35a454b2a 100644 --- a/src/main/java/keystrokesmod/module/impl/render/Trajectories.java +++ b/src/main/java/keystrokesmod/module/impl/render/Trajectories.java @@ -3,7 +3,7 @@ import keystrokesmod.module.Module; import keystrokesmod.module.impl.world.AntiBot; import keystrokesmod.module.setting.impl.ButtonSetting; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/keystrokesmod/module/impl/render/Xray.java b/src/main/java/keystrokesmod/module/impl/render/Xray.java index 683966643..d4257d39f 100644 --- a/src/main/java/keystrokesmod/module/impl/render/Xray.java +++ b/src/main/java/keystrokesmod/module/impl/render/Xray.java @@ -4,7 +4,7 @@ import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.utility.BlockUtils; -import keystrokesmod.utility.RenderUtils; +import keystrokesmod.utility.render.RenderUtils; import keystrokesmod.utility.Utils; import net.minecraft.block.Block; import net.minecraft.init.Blocks; diff --git a/src/main/java/keystrokesmod/module/impl/world/BedAura.java b/src/main/java/keystrokesmod/module/impl/world/BedAura.java index 8cc5a35b3..43e00067f 100644 --- a/src/main/java/keystrokesmod/module/impl/world/BedAura.java +++ b/src/main/java/keystrokesmod/module/impl/world/BedAura.java @@ -11,6 +11,7 @@ import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.utility.*; +import keystrokesmod.utility.render.RenderUtils; import net.minecraft.block.Block; import net.minecraft.block.BlockBed; import net.minecraft.block.properties.IProperty; diff --git a/src/main/java/keystrokesmod/module/impl/world/Scaffold.java b/src/main/java/keystrokesmod/module/impl/world/Scaffold.java index 5ace85517..2f3520971 100644 --- a/src/main/java/keystrokesmod/module/impl/world/Scaffold.java +++ b/src/main/java/keystrokesmod/module/impl/world/Scaffold.java @@ -7,7 +7,9 @@ import keystrokesmod.module.impl.render.HUD; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; +import static keystrokesmod.script.ScriptDefaults.client; import keystrokesmod.utility.*; +import keystrokesmod.utility.render.RenderUtils; import net.minecraft.block.BlockAir; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.settings.KeyBinding; @@ -28,36 +30,38 @@ import java.util.Map; public class Scaffold extends Module { // from b4 :) - private SliderSetting motion; - private SliderSetting rotation; - private SliderSetting fastScaffold; - private ButtonSetting autoSwap; - private ButtonSetting fastOnRMB; - private ButtonSetting highlightBlocks; - private ButtonSetting multiPlace; + private final SliderSetting motion; + private final SliderSetting rotation; + private final SliderSetting fastScaffold; + private final ButtonSetting autoSwap; + private final ButtonSetting fastOnRMB; + private final ButtonSetting highlightBlocks; + private final ButtonSetting multiPlace; public ButtonSetting safeWalk; - private ButtonSetting showBlockCount; + private final ButtonSetting showBlockCount; private ButtonSetting delayOnJump; - private ButtonSetting silentSwing; + private final ButtonSetting silentSwing; public ButtonSetting tower; + public ButtonSetting fast; private MovingObjectPosition placeBlock; private int lastSlot; - private String[] rotationModes = new String[]{"None", "Backwards", "Strict", "Raytrace"}; - private String[] fastScaffoldModes = new String[]{"Disabled", "Sprint", "Edge", "Jump", "Float"}; public float placeYaw; public float placePitch; public int at; public int index; public boolean rmbDown; private double startPos = -1; - private Map highlight = new HashMap<>(); + private final Map highlight = new HashMap<>(); private boolean forceStrict; private boolean down; private int add; + private boolean speeded; public Scaffold() { super("Scaffold", category.world); this.registerSetting(motion = new SliderSetting("Motion", 1.0, 0.5, 1.2, 0.01)); + String[] rotationModes = new String[]{"None", "Backwards", "Strict", "Raytrace"}; this.registerSetting(rotation = new SliderSetting("Rotation", rotationModes, 1)); + String[] fastScaffoldModes = new String[]{"Disabled", "Sprint", "Edge", "Jump", "Float"}; this.registerSetting(fastScaffold = new SliderSetting("Fast scaffold", fastScaffoldModes, 0)); //this.registerSetting(delayOnJump = new ButtonSetting("Delay on jump", true)); this.registerSetting(autoSwap = new ButtonSetting("AutoSwap", true)); @@ -68,6 +72,7 @@ public Scaffold() { this.registerSetting(showBlockCount = new ButtonSetting("Show block count", true)); this.registerSetting(silentSwing = new ButtonSetting("Silent swing", false)); this.registerSetting(tower = new ButtonSetting("Tower", false)); + this.registerSetting(fast = new ButtonSetting("Fast", false)); } public void onDisable() { @@ -107,6 +112,24 @@ public void onPreMotion(PreMotionEvent event) { @SubscribeEvent public void onPreUpdate(PreUpdateEvent e) { // place here + if (fast.isToggled()) { + if (client.isMouseDown(1) && !client.isKeyDown(57) && client.keybinds.isPressed("forward") && client.getPlayer().onGround()) { + client.keybinds.setPressed("use", false); + client.keybinds.setPressed("jump", false); + if (!isDiagonal() && !(client.keybinds.isPressed("right") || client.keybinds.isPressed("left"))) { + client.setSpeed(0.5); + client.setSprinting(false); + client.jump(); + } else if (isDiagonal() || (client.keybinds.isPressed("right") || client.keybinds.isPressed("left"))) { + client.jump(); + } + speeded = true; + } else if (!client.isMouseDown(1) && !client.isKeyDown(57) && speeded) { + client.setMotion(0, client.getMotion().y, 0); + speeded = false; + } + } + final ItemStack heldItem = mc.thePlayer.getHeldItem(); if (!autoSwap.isToggled() || getSlot() == -1) { if (heldItem == null || !(heldItem.getItem() instanceof ItemBlock)) { @@ -185,7 +208,7 @@ else if (!keepYPosition()) { MovingObjectPosition rayCasted = null; double distance = -1.0; float searchYaw = 25; - float searchPitch[] = new float[]{70, 23}; + float[] searchPitch = new float[]{70, 23}; for (int i = 0; i < 2; i++) { if (i == 1 && Utils.overPlaceable(-1) && !keepYPosition()) { searchYaw = 180; @@ -211,12 +234,7 @@ else if (i == 1) { if (((ItemBlock) heldItem.getItem()).canPlaceBlockOnSide(mc.theWorld, raycast.getBlockPos(), raycast.sideHit, mc.thePlayer, heldItem)) { double squareDistanceTo = mc.thePlayer.getPositionVector().squareDistanceTo(raycast.hitVec); if (rayCasted == null || squareDistanceTo < distance) { - if ((forceStrict(checkYaw)) && i == 1) { - forceStrict = true; - } - else { - forceStrict = false; - } + forceStrict = (forceStrict(checkYaw)) && i == 1; rayCasted = raycast; distance = squareDistanceTo; placeYaw = fixedYaw; @@ -244,6 +262,17 @@ else if (i == 1) { } } + private boolean isDiagonal() { + float yaw = client.getPlayer().getYaw(); + yaw = (yaw + 360) % 360; + final float threshold = 9; + boolean isNorth = Math.abs(yaw - 0) < threshold || Math.abs(yaw - 360) < threshold; + boolean isSouth = Math.abs(yaw - 180) < threshold; + boolean isEast = Math.abs(yaw - 90) < threshold; + boolean isWest = Math.abs(yaw - 270) < threshold; + return !(isNorth || isSouth || isEast || isWest); + } + @SubscribeEvent public void onRenderTick(TickEvent.RenderTickEvent ev) { if (!Utils.nullCheck() || !showBlockCount.isToggled()) { diff --git a/src/main/java/keystrokesmod/script/ScriptDefaults.java b/src/main/java/keystrokesmod/script/ScriptDefaults.java index ca236d305..4e6fdf420 100644 --- a/src/main/java/keystrokesmod/script/ScriptDefaults.java +++ b/src/main/java/keystrokesmod/script/ScriptDefaults.java @@ -11,9 +11,9 @@ import keystrokesmod.script.packets.serverbound.CPacket; import keystrokesmod.script.packets.serverbound.PacketHandler; import keystrokesmod.utility.*; +import keystrokesmod.utility.render.RenderUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiEnchantment; import net.minecraft.client.gui.GuiScreenBook; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.gui.inventory.*; @@ -23,7 +23,6 @@ import net.minecraft.client.settings.KeyBinding; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ContainerChest; import net.minecraft.inventory.IInventory; import net.minecraft.network.Packet; @@ -35,7 +34,6 @@ import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Map; diff --git a/src/main/java/keystrokesmod/script/classes/Vec3.java b/src/main/java/keystrokesmod/script/classes/Vec3.java index c0a8e147b..2608a7aa8 100644 --- a/src/main/java/keystrokesmod/script/classes/Vec3.java +++ b/src/main/java/keystrokesmod/script/classes/Vec3.java @@ -2,6 +2,7 @@ import net.minecraft.entity.Entity; import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; import net.minecraft.util.MathHelper; import org.jetbrains.annotations.NotNull; @@ -72,4 +73,13 @@ public Vec3 add(@NotNull Vec3 vec3) { public Vec3 subtract(@NotNull Vec3 vec3) { return add(new Vec3(-vec3.x(), -vec3.y(), -vec3.z())); } + + public double relative(EnumFacing.@NotNull Axis axis) { + switch (axis) { + case X: return x(); + case Y: return y(); + case Z: return z(); + } + return 0; + } } diff --git a/src/main/java/keystrokesmod/utility/Commands.java b/src/main/java/keystrokesmod/utility/Commands.java index 465a89f72..8580cc27e 100644 --- a/src/main/java/keystrokesmod/utility/Commands.java +++ b/src/main/java/keystrokesmod/utility/Commands.java @@ -10,6 +10,7 @@ import keystrokesmod.module.impl.other.FakeChat; import keystrokesmod.module.impl.other.NameHider; import keystrokesmod.utility.profile.Profile; +import keystrokesmod.utility.render.RenderUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import org.lwjgl.opengl.GL11; diff --git a/src/main/java/keystrokesmod/utility/DebugInfoRenderer.java b/src/main/java/keystrokesmod/utility/DebugInfoRenderer.java index 127c0d9be..5d7871e0e 100644 --- a/src/main/java/keystrokesmod/utility/DebugInfoRenderer.java +++ b/src/main/java/keystrokesmod/utility/DebugInfoRenderer.java @@ -1,17 +1,12 @@ package keystrokesmod.utility; import keystrokesmod.Raven; -import keystrokesmod.module.impl.player.Freecam; +import keystrokesmod.utility.render.RenderUtils; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.entity.Entity; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; import net.minecraftforge.fml.common.gameevent.TickEvent.RenderTickEvent; -import java.awt.*; - public class DebugInfoRenderer extends net.minecraft.client.gui.Gui { private static Minecraft mc = Minecraft.getMinecraft(); diff --git a/src/main/java/keystrokesmod/utility/MoveUtil.java b/src/main/java/keystrokesmod/utility/MoveUtil.java index 4f74c25bb..a38b77f92 100644 --- a/src/main/java/keystrokesmod/utility/MoveUtil.java +++ b/src/main/java/keystrokesmod/utility/MoveUtil.java @@ -1,5 +1,6 @@ package keystrokesmod.utility; +import keystrokesmod.module.impl.movement.TargetStrafe; import net.minecraft.util.MathHelper; import static keystrokesmod.Raven.mc; @@ -17,20 +18,12 @@ public static void strafe() { * Makes the player strafe at the specified speed */ public static void strafe(final double speed) { - if (!isMoving()) { - return; - } - final double yaw = direction(); mc.thePlayer.motionX = -MathHelper.sin((float) yaw) * speed; mc.thePlayer.motionZ = MathHelper.cos((float) yaw) * speed; } public static void strafe(final double speed, float yaw) { - if (!isMoving()) { - return; - } - yaw = (float) Math.toRadians(yaw); mc.thePlayer.motionX = -MathHelper.sin(yaw) * speed; mc.thePlayer.motionZ = MathHelper.cos(yaw) * speed; @@ -48,7 +41,7 @@ public static void stop() { * Gets the players' movement yaw */ public static double direction() { - float rotationYaw = mc.thePlayer.rotationYaw; + float rotationYaw = TargetStrafe.getMovementYaw(); if (mc.thePlayer.moveForward < 0) { rotationYaw += 180; diff --git a/src/main/java/keystrokesmod/utility/TargetSelector.java b/src/main/java/keystrokesmod/utility/TargetSelector.java new file mode 100644 index 000000000..ca9660d40 --- /dev/null +++ b/src/main/java/keystrokesmod/utility/TargetSelector.java @@ -0,0 +1,175 @@ +package keystrokesmod.utility; + +import keystrokesmod.module.impl.other.anticheats.utils.phys.Vec2; +import keystrokesmod.module.impl.other.anticheats.utils.world.BlockUtils; +import keystrokesmod.script.classes.Vec3; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.MovingObjectPosition; + +import java.util.*; +import java.util.concurrent.LinkedBlockingDeque; + +import static keystrokesmod.Raven.mc; + +public class TargetSelector { + private static int lastSwitchSince = Integer.MAX_VALUE; + private static final Deque switchedTarget = new LinkedBlockingDeque<>(); + + public static Optional getTarget(double swingRange, double attackRange, double blockRange, + double aps, double fov, + boolean allowPlayer, boolean allowEntity, boolean allowTeammates, + SelectMode mode, boolean rayCast, + int switchTargets, int switchDelay) { + boolean canAttack = false; + if (aps >= 20) canAttack = true; + else if ((Math.random() - 1) + aps / 20 > 0) { + canAttack = true; + } + + lastSwitchSince++; + if (attackRange > swingRange) + return Optional.empty(); + + List possibleTargets = new ArrayList<>(); + for (Entity baseEntity : mc.theWorld.loadedEntityList) { + if (!(baseEntity instanceof EntityLivingBase)) { + continue; + } + EntityLivingBase entity = (EntityLivingBase) baseEntity; + + if (!allowPlayer && entity instanceof EntityPlayer) { + continue; + } + if (!allowEntity && !(entity instanceof EntityPlayer)) { + continue; + } + if (!allowTeammates && Utils.isTeamMate(entity)) { + continue; + } + + double distance = new Vec3(entity).add(new Vec3(0, entity.getEyeHeight(), 0)) + .distanceTo(new Vec3(mc.thePlayer).add(new Vec3(0, mc.thePlayer.getEyeHeight(), 0))); + boolean swing = distance <= swingRange; + boolean attack = distance <= attackRange; + boolean block = distance <= blockRange; + if (!swing && !attack && !block) { + continue; + } + + final float[] rotations = RotationUtils.getRotations(entity); + if (rotations == null || rotations.length < 2) { + Utils.sendMessage("Can't get rotation for " + entity.getName() + "!"); + } + assert rotations != null; + if (fov <= 360) { + if (Math.abs(rotations[0] % 360 - mc.thePlayer.rotationYaw % 360) > fov) { + continue; + } + } + if (rayCast) { + MovingObjectPosition hitResult = RotationUtils.rayCast(attackRange, rotations[0], rotations[1]); + if (hitResult != null) { + if (BlockUtils.isFullBlock(mc.theWorld.getBlockState(hitResult.getBlockPos()))) { + continue; + } + } + } + + possibleTargets.add(new TargetData(entity, distance, new Vec2(rotations[0], rotations[1]), swing && canAttack, attack && canAttack, block)); + } + + while (switchTargets > switchedTarget.size()) { + switchedTarget.poll(); + } + if (lastSwitchSince < switchDelay) { + EntityLivingBase lastTarget = switchedTarget.peekLast(); + Optional targetData = possibleTargets.stream().filter(data -> data.getTarget().equals(lastTarget)).findAny(); + if (lastTarget != null && targetData.isPresent()) { + return targetData; + } + } else { + switchedTarget.poll(); + lastSwitchSince = 0; + } + + if (possibleTargets.isEmpty()) { + return Optional.empty(); + } + + possibleTargets.removeIf(target -> switchedTarget.contains(target.getTarget())); + + Optional finalTarget = possibleTargets.stream() + .min((data1, data2) -> { + switch (mode) { + default: + case DISTANCE: + return (int) ((data1.getDistance() - data2.getDistance()) * 100); + case HEALTH: + return (int) ((data1.getTarget().getHealth() - data2.getTarget().getHealth()) * 2); + case HURT_TIME: + return (data1.getTarget().maxHurtTime - data1.getTarget().hurtTime) - (data2.getTarget().maxHurtTime - data2.getTarget().hurtTime); + } + }); + + finalTarget.ifPresent(data -> switchedTarget.add(data.getTarget())); + return finalTarget; + } + + + public enum SelectMode { + DISTANCE, + HEALTH, + HURT_TIME + } + + public static class TargetData { + private final EntityLivingBase target; + private final double distance; + private final boolean swing; + private final boolean attack; + private final boolean block; + private final Vec2 rotation; + + public TargetData(EntityLivingBase target, double distance, Vec2 rotation, boolean swing, boolean attack, boolean block) { + this.target = target; + this.distance = distance; + this.rotation = rotation; + this.swing = swing; + this.attack = attack; + this.block = block; + } + + public EntityLivingBase getTarget() { + return target; + } + protected double getDistance() { + return distance; + } + public Vec2 getRotation() { + return rotation; + } + public boolean isSwing() { + return swing; + } + public boolean isAttack() { + return attack; + } + public boolean isBlock() { + return block; + } + + @Override + public String toString() { + return "TargetData{" + + "target=" + target + + ", distance=" + distance + + ", swing=" + swing + + ", attack=" + attack + + ", block=" + block + + ", rotation=" + rotation + + '}'; + } + } +} diff --git a/src/main/java/keystrokesmod/utility/profile/ProfileManager.java b/src/main/java/keystrokesmod/utility/profile/ProfileManager.java index b1441e067..95fbd3371 100644 --- a/src/main/java/keystrokesmod/utility/profile/ProfileManager.java +++ b/src/main/java/keystrokesmod/utility/profile/ProfileManager.java @@ -129,8 +129,12 @@ public void loadProfile(String name) { for (JsonElement moduleJson : modules) { JsonObject moduleInformation = moduleJson.getAsJsonObject(); String moduleName = moduleInformation.get("name").getAsString(); + if (moduleName.equals("AntiKnockback")) + moduleName = "Velocity"; + else if (moduleName.equals("Bhop")) + moduleName = "Speed"; - if (moduleName == null || moduleName.isEmpty()) { + if (moduleName.isEmpty()) { continue; } diff --git a/src/main/java/keystrokesmod/utility/render/Animation.java b/src/main/java/keystrokesmod/utility/render/Animation.java new file mode 100644 index 000000000..2f4a65400 --- /dev/null +++ b/src/main/java/keystrokesmod/utility/render/Animation.java @@ -0,0 +1,128 @@ +package keystrokesmod.utility.render; + +public class Animation { + + private Easing easing; + private long duration; + private long millis; + private long startTime; + + private double startValue; + private double destinationValue; + private double value; + private boolean finished; + + public Animation(final Easing easing, final long duration) { + this.easing = easing; + this.startTime = System.currentTimeMillis(); + this.duration = duration; + } + + /** + * Updates the animation by using the easing function and time + * + * @param destinationValue the value that the animation is going to reach + */ + public void run(final double destinationValue) { + this.millis = System.currentTimeMillis(); + if (this.destinationValue != destinationValue) { + this.destinationValue = destinationValue; + this.reset(); + } else { + this.finished = this.millis - this.duration > this.startTime; + if (this.finished) { + this.value = destinationValue; + return; + } + } + + final double result = this.easing.getFunction().apply(this.getProgress()); + if (this.value > destinationValue) { + this.value = this.startValue - (this.startValue - destinationValue) * result; + } else { + this.value = this.startValue + (destinationValue - this.startValue) * result; + } + } + + /** + * Returns the progress of the animation + * + * @return value between 0 and 1 + */ + public double getProgress() { + return (double) (System.currentTimeMillis() - this.startTime) / (double) this.duration; + } + + /** + * Resets the animation to the start value + */ + public void reset() { + this.startTime = System.currentTimeMillis(); + this.startValue = value; + this.finished = false; + } + + public Easing getEasing() { + return easing; + } + + public void setEasing(Easing easing) { + this.easing = easing; + } + + public long getDuration() { + return duration; + } + + public void setDuration(long duration) { + this.duration = duration; + } + + public long getMillis() { + return millis; + } + + public void setMillis(long millis) { + this.millis = millis; + } + + public long getStartTime() { + return startTime; + } + + public void setStartTime(long startTime) { + this.startTime = startTime; + } + + public double getStartValue() { + return startValue; + } + + public void setStartValue(double startValue) { + this.startValue = startValue; + } + + public double getDestinationValue() { + return destinationValue; + } + + public void setDestinationValue(double destinationValue) { + this.destinationValue = destinationValue; + } + + public double getValue() { + return value; + } + + public void setValue(double value) { + this.value = value; + } + + public boolean isFinished() { + return finished; + } + + public void setFinished(boolean finished) { + this.finished = finished; + } +} diff --git a/src/main/java/keystrokesmod/utility/render/Easing.java b/src/main/java/keystrokesmod/utility/render/Easing.java new file mode 100644 index 000000000..4473f391b --- /dev/null +++ b/src/main/java/keystrokesmod/utility/render/Easing.java @@ -0,0 +1,58 @@ +package keystrokesmod.utility.render; + +import org.apache.commons.lang3.StringUtils; + +import java.util.function.Function; + +import static java.lang.Math.pow; +import static java.lang.Math.sin; + +/** + * This is the easing class used to manage the different easing functions. + * Each function is supposed to return a value between 0 and 1. + * More easing functions can be found here: ... + * + * @author Patrick + */ +public enum Easing { + LINEAR(x -> x), + EASE_IN_QUAD(x -> x * x), + EASE_OUT_QUAD(x -> x * (2 - x)), + EASE_IN_OUT_QUAD(x -> x < 0.5 ? 2 * x * x : -1 + (4 - 2 * x) * x), + EASE_IN_CUBIC(x -> x * x * x), + EASE_OUT_CUBIC(x -> (--x) * x * x + 1), + EASE_IN_OUT_CUBIC(x -> x < 0.5 ? 4 * x * x * x : (x - 1) * (2 * x - 2) * (2 * x - 2) + 1), + EASE_IN_QUART(x -> x * x * x * x), + EASE_OUT_QUART(x -> 1 - (--x) * x * x * x), + EASE_IN_OUT_QUART(x -> x < 0.5 ? 8 * x * x * x * x : 1 - 8 * (--x) * x * x * x), + EASE_IN_QUINT(x -> x * x * x * x * x), + EASE_OUT_QUINT(x -> 1 + (--x) * x * x * x * x), + EASE_IN_OUT_QUINT(x -> x < 0.5 ? 16 * x * x * x * x * x : 1 + 16 * (--x) * x * x * x * x), + EASE_IN_SINE(x -> 1 - Math.cos(x * Math.PI / 2)), + EASE_OUT_SINE(x -> sin(x * Math.PI / 2)), + EASE_IN_OUT_SINE(x -> 1 - Math.cos(Math.PI * x / 2)), + EASE_IN_EXPO(x -> x == 0 ? 0 : pow(2, 10 * x - 10)), + EASE_OUT_EXPO(x -> x == 1 ? 1 : 1 - pow(2, -10 * x)), + EASE_IN_OUT_EXPO(x -> x == 0 ? 0 : x == 1 ? 1 : x < 0.5 ? pow(2, 20 * x - 10) / 2 : (2 - pow(2, -20 * x + 10)) / 2), + EASE_IN_CIRC(x -> 1 - Math.sqrt(1 - x * x)), + EASE_OUT_CIRC(x -> Math.sqrt(1 - (--x) * x)), + EASE_IN_OUT_CIRC(x -> x < 0.5 ? (1 - Math.sqrt(1 - 4 * x * x)) / 2 : (Math.sqrt(1 - 4 * (x - 1) * x) + 1) / 2), + SIGMOID(x -> 1 / (1 + Math.exp(-x))), + EASE_OUT_ELASTIC(x -> x == 0 ? 0 : x == 1 ? 1 : pow(2, -10 * x) * sin((x * 10 - 0.75) * ((2 * Math.PI) / 3)) * 0.5 + 1), + EASE_IN_BACK(x -> (1.70158 + 1) * x * x * x - 1.70158 * x * x); + + private final Function function; + + Easing(final Function function) { + this.function = function; + } + + public Function getFunction() { + return function; + } + + @Override + public String toString() { + return StringUtils.capitalize(super.toString().toLowerCase().replace("_"," ")); + } +} diff --git a/src/main/java/keystrokesmod/utility/RenderUtils.java b/src/main/java/keystrokesmod/utility/render/RenderUtils.java similarity index 99% rename from src/main/java/keystrokesmod/utility/RenderUtils.java rename to src/main/java/keystrokesmod/utility/render/RenderUtils.java index 7c3287552..968b8eca7 100644 --- a/src/main/java/keystrokesmod/utility/RenderUtils.java +++ b/src/main/java/keystrokesmod/utility/render/RenderUtils.java @@ -1,6 +1,7 @@ -package keystrokesmod.utility; +package keystrokesmod.utility.render; import keystrokesmod.module.impl.player.Freecam; +import keystrokesmod.utility.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.ScaledResolution; diff --git a/src/main/resources/assets/keystrokesmod/sounds.json b/src/main/resources/assets/keystrokesmod/sounds.json new file mode 100644 index 000000000..6071977da --- /dev/null +++ b/src/main/resources/assets/keystrokesmod/sounds.json @@ -0,0 +1,14 @@ +{ + "toggle.enable":{ + "category": "player", + "sounds": [ + "keystrokesmod:toggle/enable" + ] + }, + "toggle.disable":{ + "category": "player", + "sounds": [ + "keystrokesmod:toggle/disable" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/mixins.raven.json b/src/main/resources/mixins.raven.json index d8eb840db..01d9c34da 100644 --- a/src/main/resources/mixins.raven.json +++ b/src/main/resources/mixins.raven.json @@ -5,13 +5,16 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "entity.MixinEntity", - "render.MixinFontRenderer", + "entity.MixinEntityLivingBase", + "entity.MixinEntityPlayer", "entity.MixinEntityPlayerSP", + "network.MixinNetworkManager", + "render.MixinFontRenderer", "render.MixinLayerCape", "render.MixinModelBiped", - "entity.MixinEntityLivingBase", - "network.MixinNetworkManager", - "entity.MixinEntityPlayer", "render.MixinRendererLivingEntity" + ], + "client": [ + "client.KeyBindingAccessor" ] } \ No newline at end of file