From fda2f44287db00f6dbe3cdb794ce200e3475adb9 Mon Sep 17 00:00:00 2001 From: xia-mc <2052472631@qq.com> Date: Mon, 1 Jul 2024 16:11:22 +0800 Subject: [PATCH] Release 1.8.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [+] **Add** Animations. - Allow you change swing/block animation and speed. - Override LabyMod 'block/swing' option. - [+] **Add** FreeLook. - [+] **Add** Step. - Made for Hypixel. - [※] **Improve** Backtrack. - [+] **Add** 'LegitInv' mode to InvMove. - [※] **Fix** 'Sort mode' of KillAura doesn't work. - [+] **Add** 'WaitBreakBlock' to Phase. - [※] **Improve** JumpReset. - [※] **Fix** AntiVoid sometimes do useless blink. - [※] **Fix** 'Hit through block' of Reach sometimes crash with FastMine. - [※] **Fix** sometimes crash on starting client. - [+] **Add** 'LowHopTest', 'Strafe B' mode to Speed. - Thanks to @dragon. - [+] **Add** 'Hypixel' mode to Timer. - Thanks to @dragon. - [※] **Fix** Slider sometimes draws wrong. - [+] **Add** 'Hypixel' mode to Sprint. - Old Sprint now is called 'Legit' mode. - [+] **Add** 'Cancel air' option to Velocity. --- logo/logo.png | Bin 0 -> 31797 bytes logo/logo.psd | Bin 0 -> 152334 bytes src/main/java/keystrokesmod/Raven.java | 8 +- .../components/impl/ButtonComponent.java | 1 + .../components/impl/ModeComponent.java | 31 +++- .../components/impl/SliderComponent.java | 6 +- .../event/PostVelocityEvent.java | 6 + .../keystrokesmod/event/RenderItemEvent.java | 71 ++++++++++ .../java/keystrokesmod/event/StepEvent.java | 15 ++ .../event/SwingAnimationEvent.java | 19 +++ .../mixins/impl/entity/MixinEntity.java | 10 +- .../impl/entity/MixinEntityLivingBase.java | 30 +++- .../network/MixinNetHandlerPlayClient.java | 26 ++++ .../impl/render/ItemRendererAccessor.java | 15 ++ .../mixins/impl/render/MixinItemRenderer.java | 134 ++++++++++++++++++ .../keystrokesmod/module/ModuleManager.java | 38 ++--- .../module/impl/combat/JumpReset.java | 72 +++------- .../module/impl/combat/KillAura.java | 10 +- .../module/impl/combat/Velocity.java | 40 +++++- .../module/impl/movement/InvMove.java | 111 ++++++++++++--- .../module/impl/movement/LongJump.java | 21 ++- .../module/impl/movement/Phase.java | 20 ++- .../module/impl/movement/Speed.java | 62 +++++++- .../module/impl/movement/Sprint.java | 38 ++++- .../module/impl/movement/Step.java | 75 ++++++++++ .../module/impl/movement/Timer.java | 61 ++++++-- .../anticheats/utils/world/BlockUtils.java | 2 +- .../module/impl/player/AntiVoid.java | 3 +- .../module/impl/player/Backtrack.java | 13 +- .../module/impl/render/Animations.java | 128 +++++++++++++++++ .../module/impl/render/FreeLook.java | 94 ++++++++++++ .../keystrokesmod/module/impl/render/HUD.java | 2 +- .../module/impl/world/FastMine.java | 20 ++- .../module/impl/world/Tower.java | 13 +- .../java/keystrokesmod/utility/Utils.java | 13 ++ .../utility/profile/ProfileManager.java | 2 +- .../resources/assets/keystrokesmod/icon.png | Bin 0 -> 31797 bytes src/main/resources/mixins.raven.json | 5 +- 38 files changed, 1049 insertions(+), 166 deletions(-) create mode 100644 logo/logo.png create mode 100644 logo/logo.psd create mode 100644 src/main/java/keystrokesmod/event/PostVelocityEvent.java create mode 100644 src/main/java/keystrokesmod/event/RenderItemEvent.java create mode 100644 src/main/java/keystrokesmod/event/StepEvent.java create mode 100644 src/main/java/keystrokesmod/event/SwingAnimationEvent.java create mode 100644 src/main/java/keystrokesmod/mixins/impl/network/MixinNetHandlerPlayClient.java create mode 100644 src/main/java/keystrokesmod/mixins/impl/render/ItemRendererAccessor.java create mode 100644 src/main/java/keystrokesmod/mixins/impl/render/MixinItemRenderer.java create mode 100644 src/main/java/keystrokesmod/module/impl/movement/Step.java create mode 100644 src/main/java/keystrokesmod/module/impl/render/Animations.java create mode 100644 src/main/java/keystrokesmod/module/impl/render/FreeLook.java create mode 100644 src/main/resources/assets/keystrokesmod/icon.png diff --git a/logo/logo.png b/logo/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3a4623e35e0512e07d5505682617f0a0ae278538 GIT binary patch literal 31797 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 P{eapNZKayW)?xn#3t%gm literal 0 HcmV?d00001 diff --git a/logo/logo.psd b/logo/logo.psd new file mode 100644 index 0000000000000000000000000000000000000000..3ec6b4e0323902861be2e6d89225143d4dcaae09 GIT binary patch literal 152334 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%0DWoA|M@wEImL9}pPM}ESb9Pf71PWua5^b+6 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 L=D`17IPiY}lUIk2 literal 0 HcmV?d00001 diff --git a/src/main/java/keystrokesmod/Raven.java b/src/main/java/keystrokesmod/Raven.java index 62f49c78..91a60ff3 100644 --- a/src/main/java/keystrokesmod/Raven.java +++ b/src/main/java/keystrokesmod/Raven.java @@ -93,9 +93,11 @@ public void onTick(@NotNull ClientTickEvent e) { module.onUpdate(); } } - for (Profile profile : Raven.profileManager.profiles) { - if (mc.currentScreen == null) { - profile.getModule().keybind(); + synchronized (Raven.profileManager.profiles) { + for (Profile profile : Raven.profileManager.profiles) { + if (mc.currentScreen == null) { + profile.getModule().keybind(); + } } } for (Module module : Raven.scriptManager.scripts.values()) { diff --git a/src/main/java/keystrokesmod/clickgui/components/impl/ButtonComponent.java b/src/main/java/keystrokesmod/clickgui/components/impl/ButtonComponent.java index 5089da32..d29a29c0 100644 --- a/src/main/java/keystrokesmod/clickgui/components/impl/ButtonComponent.java +++ b/src/main/java/keystrokesmod/clickgui/components/impl/ButtonComponent.java @@ -103,6 +103,7 @@ public void onClick(int x, int y, int b) { if (Raven.currentProfile != null) { ((ProfileModule) Raven.currentProfile.getModule()).saved = false; } + parent.categoryComponent.render(); } } diff --git a/src/main/java/keystrokesmod/clickgui/components/impl/ModeComponent.java b/src/main/java/keystrokesmod/clickgui/components/impl/ModeComponent.java index 7053f39d..3d923b03 100644 --- a/src/main/java/keystrokesmod/clickgui/components/impl/ModeComponent.java +++ b/src/main/java/keystrokesmod/clickgui/components/impl/ModeComponent.java @@ -48,13 +48,32 @@ public void onDrawScreen(int x, int y) { } public void onClick(int x, int y, int b) { - if (isHover(x, y) && b == 0 && this.parent.po) { - if (Keyboard.isKeyDown(Raven.mc.gameSettings.keyBindSneak.getKeyCode())) { - this.ModeSetting.prevValue(); - } else { - this.ModeSetting.nextValue(); - } + if (isHover(x, y) && this.parent.po) { + changeValue(b, Keyboard.isKeyDown(Raven.mc.gameSettings.keyBindSneak.getKeyCode())); parent.categoryComponent.render(); } } + + private void changeValue(int b, boolean reserve) { + boolean next; + switch (b) { + case 0: + next = true; + break; + case 1: + next = false; + break; + default: + return; + } + + if (reserve) + next = !next; + + if (next) { + this.ModeSetting.nextValue(); + } else { + this.ModeSetting.prevValue(); + } + } } diff --git a/src/main/java/keystrokesmod/clickgui/components/impl/SliderComponent.java b/src/main/java/keystrokesmod/clickgui/components/impl/SliderComponent.java index fe44ba92..5fa3bbca 100644 --- a/src/main/java/keystrokesmod/clickgui/components/impl/SliderComponent.java +++ b/src/main/java/keystrokesmod/clickgui/components/impl/SliderComponent.java @@ -77,16 +77,18 @@ public void onDrawScreen(int x, int y) { this.w = (double) (this.parent.categoryComponent.gw() - 8) * (this.sliderSetting.getInput() - this.sliderSetting.getMin()) / (this.sliderSetting.getMax() - this.sliderSetting.getMin()); if (this.d) { if (d == 0.0D) { + this.sliderSetting.setValue(this.sliderSetting.getMin()); if (this.sliderSetting.getInput() != this.sliderSetting.getMin() && ModuleManager.hud != null && ModuleManager.hud.isEnabled() && !ModuleManager.organizedModules.isEmpty()) { ModuleManager.sort(); } - this.sliderSetting.setValue(this.sliderSetting.getMin()); + parent.categoryComponent.render(); } else { double n = roundToInterval(d / (double) (this.parent.categoryComponent.gw() - 8) * (this.sliderSetting.getMax() - this.sliderSetting.getMin()) + this.sliderSetting.getMin(), 2); + this.sliderSetting.setValue(n); if (this.sliderSetting.getInput() != n && ModuleManager.hud != null && ModuleManager.hud.isEnabled() && !ModuleManager.organizedModules.isEmpty()) { ModuleManager.sort(); } - this.sliderSetting.setValue(n); + parent.categoryComponent.render(); } if (Raven.currentProfile != null) { ((ProfileModule) Raven.currentProfile.getModule()).saved = false; diff --git a/src/main/java/keystrokesmod/event/PostVelocityEvent.java b/src/main/java/keystrokesmod/event/PostVelocityEvent.java new file mode 100644 index 00000000..f559487d --- /dev/null +++ b/src/main/java/keystrokesmod/event/PostVelocityEvent.java @@ -0,0 +1,6 @@ +package keystrokesmod.event; + +import net.minecraftforge.fml.common.eventhandler.Event; + +public class PostVelocityEvent extends Event { +} diff --git a/src/main/java/keystrokesmod/event/RenderItemEvent.java b/src/main/java/keystrokesmod/event/RenderItemEvent.java new file mode 100644 index 00000000..56918c2e --- /dev/null +++ b/src/main/java/keystrokesmod/event/RenderItemEvent.java @@ -0,0 +1,71 @@ +package keystrokesmod.event; + +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event; + +@Cancelable +public final class RenderItemEvent extends Event { + private EnumAction enumAction; + private boolean useItem; + private float animationProgression, partialTicks, swingProgress; + private ItemStack itemToRender; + + public RenderItemEvent(EnumAction enumAction, boolean useItem, float animationProgression, float partialTicks, float swingProgress, ItemStack itemToRender) { + this.enumAction = enumAction; + this.useItem = useItem; + this.animationProgression = animationProgression; + this.partialTicks = partialTicks; + this.swingProgress = swingProgress; + this.itemToRender = itemToRender; + } + + public EnumAction getEnumAction() { + return enumAction; + } + + public void setEnumAction(EnumAction enumAction) { + this.enumAction = enumAction; + } + + public boolean isUseItem() { + return useItem; + } + + public void setUseItem(boolean useItem) { + this.useItem = useItem; + } + + public float getAnimationProgression() { + return animationProgression; + } + + public void setAnimationProgression(float animationProgression) { + this.animationProgression = animationProgression; + } + + public float getPartialTicks() { + return partialTicks; + } + + public void setPartialTicks(float partialTicks) { + this.partialTicks = partialTicks; + } + + public float getSwingProgress() { + return swingProgress; + } + + public void setSwingProgress(float swingProgress) { + this.swingProgress = swingProgress; + } + + public ItemStack getItemToRender() { + return itemToRender; + } + + public void setItemToRender(ItemStack itemToRender) { + this.itemToRender = itemToRender; + } +} \ No newline at end of file diff --git a/src/main/java/keystrokesmod/event/StepEvent.java b/src/main/java/keystrokesmod/event/StepEvent.java new file mode 100644 index 00000000..94062bc9 --- /dev/null +++ b/src/main/java/keystrokesmod/event/StepEvent.java @@ -0,0 +1,15 @@ +package keystrokesmod.event; + +import net.minecraftforge.fml.common.eventhandler.Event; + +public class StepEvent extends Event { + private final double height; + + public StepEvent(double height) { + this.height = height; + } + + public double getHeight() { + return height; + } +} diff --git a/src/main/java/keystrokesmod/event/SwingAnimationEvent.java b/src/main/java/keystrokesmod/event/SwingAnimationEvent.java new file mode 100644 index 00000000..842452ec --- /dev/null +++ b/src/main/java/keystrokesmod/event/SwingAnimationEvent.java @@ -0,0 +1,19 @@ +package keystrokesmod.event; + +import net.minecraftforge.fml.common.eventhandler.Event; + +public final class SwingAnimationEvent extends Event { + private int animationEnd; + + public SwingAnimationEvent(int animationEnd) { + this.animationEnd = animationEnd; + } + + public int getAnimationEnd() { + return animationEnd; + } + + public void setAnimationEnd(int animationEnd) { + this.animationEnd = animationEnd; + } +} \ No newline at end of file diff --git a/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntity.java b/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntity.java index 53bf8ebb..d95f6b85 100644 --- a/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntity.java +++ b/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntity.java @@ -3,6 +3,7 @@ import keystrokesmod.event.PostInputEvent; import keystrokesmod.event.PreMotionEvent; import keystrokesmod.event.PrePlayerInput; +import keystrokesmod.event.StepEvent; import keystrokesmod.module.ModuleManager; import keystrokesmod.module.impl.client.Settings; import keystrokesmod.module.impl.world.SafeWalk; @@ -14,6 +15,7 @@ import net.minecraft.block.BlockWall; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReportCategory; import net.minecraft.entity.Entity; @@ -21,6 +23,7 @@ import net.minecraft.init.Blocks; import net.minecraft.util.*; import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @@ -235,13 +238,18 @@ public void moveEntity(double x, double y, double z) { this.setEntityBoundingBox(this.getEntityBoundingBox().offset(0.0D, 0.0D, z)); + if ((Entity)(Object) this instanceof EntityPlayerSP) { + StepEvent event = new StepEvent(this.getEntityBoundingBox().minY - this.posY); + MinecraftForge.EVENT_BUS.post(event); + } + if (this.stepHeight > 0.0F && flag1 && (d3 != x || d5 != z)) { double d11 = x; double d7 = y; double d8 = z; AxisAlignedBB axisalignedbb3 = this.getEntityBoundingBox(); this.setEntityBoundingBox(axisalignedbb); - y = (double) this.stepHeight; + y = this.stepHeight; List list = this.worldObj.getCollidingBoundingBoxes((Entity) ((Object) this), this.getEntityBoundingBox().addCoord(d3, y, d5)); AxisAlignedBB axisalignedbb4 = this.getEntityBoundingBox(); AxisAlignedBB axisalignedbb5 = axisalignedbb4.addCoord(d3, 0.0D, d5); diff --git a/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntityLivingBase.java b/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntityLivingBase.java index e2b566a7..f2e2fb04 100644 --- a/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntityLivingBase.java +++ b/src/main/java/keystrokesmod/mixins/impl/entity/MixinEntityLivingBase.java @@ -3,9 +3,12 @@ import com.google.common.collect.Maps; import keystrokesmod.event.JumpEvent; import keystrokesmod.event.PreMotionEvent; +import keystrokesmod.event.SwingAnimationEvent; import keystrokesmod.module.ModuleManager; import keystrokesmod.module.impl.client.Settings; import keystrokesmod.utility.RotationUtils; +import keystrokesmod.utility.Utils; +import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -15,6 +18,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.MinecraftForge; +import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @@ -117,13 +121,13 @@ protected void jump() { this.motionY = jumpEvent.getMotionY(); if (this.isPotionActive(Potion.jump)) { - this.motionY += (double) ((float) (this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F); + this.motionY += (float) (this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F; } if (this.isSprinting()) { float f = jumpEvent.getYaw() * 0.017453292F; - this.motionX -= (double) (MathHelper.sin(f) * 0.2F); - this.motionZ += (double) (MathHelper.cos(f) * 0.2F); + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; } this.isAirBorne = true; @@ -136,4 +140,22 @@ private void isPotionActive(Potion p_isPotionActive_1_, final CallbackInfoReturn callbackInfoReturnable.setReturnValue(false); } } -} \ No newline at end of file + + /** + * @author xia__mc + * @reason for Animations module + */ + @Overwrite + private int getArmSwingAnimationEnd() { + int swingAnimationEnd = this.isPotionActive(Potion.digSpeed) ? 6 - + (1 + this.getActivePotionEffect(Potion.digSpeed).getAmplifier()) : + (this.isPotionActive(Potion.digSlowdown) ? 6 + + (1 + this.getActivePotionEffect(Potion.digSlowdown).getAmplifier()) * 2 : 6); + + SwingAnimationEvent swingAnimationEvent = new SwingAnimationEvent(swingAnimationEnd); + MinecraftForge.EVENT_BUS.post(swingAnimationEvent); + swingAnimationEnd = swingAnimationEvent.getAnimationEnd(); + + return (int) (swingAnimationEnd * Utils.getTimer().timerSpeed); + } +} diff --git a/src/main/java/keystrokesmod/mixins/impl/network/MixinNetHandlerPlayClient.java b/src/main/java/keystrokesmod/mixins/impl/network/MixinNetHandlerPlayClient.java new file mode 100644 index 00000000..767d2d47 --- /dev/null +++ b/src/main/java/keystrokesmod/mixins/impl/network/MixinNetHandlerPlayClient.java @@ -0,0 +1,26 @@ +package keystrokesmod.mixins.impl.network; + + +import keystrokesmod.Raven; +import keystrokesmod.event.PostVelocityEvent; +import keystrokesmod.utility.Utils; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.network.play.server.S12PacketEntityVelocity; +import net.minecraftforge.common.MinecraftForge; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(NetHandlerPlayClient.class) +public abstract class MixinNetHandlerPlayClient { + + @Inject(method = "handleEntityVelocity", at = @At("RETURN")) + public void onHandleEntityVelocity(S12PacketEntityVelocity packet, CallbackInfo ci) { + if (!Utils.nullCheck()) return; + + if (packet.getEntityID() == Raven.mc.thePlayer.getEntityId()) { + MinecraftForge.EVENT_BUS.post(new PostVelocityEvent()); + } + } +} diff --git a/src/main/java/keystrokesmod/mixins/impl/render/ItemRendererAccessor.java b/src/main/java/keystrokesmod/mixins/impl/render/ItemRendererAccessor.java new file mode 100644 index 00000000..247d76df --- /dev/null +++ b/src/main/java/keystrokesmod/mixins/impl/render/ItemRendererAccessor.java @@ -0,0 +1,15 @@ +package keystrokesmod.mixins.impl.render; + +import net.minecraft.client.renderer.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(ItemRenderer.class) +public interface ItemRendererAccessor { + + @Invoker("transformFirstPersonItem") + void transformFirstPersonItem(float animationProgression, float swingProgress); + + @Invoker("func_178103_d") + void blockTransformation(); +} diff --git a/src/main/java/keystrokesmod/mixins/impl/render/MixinItemRenderer.java b/src/main/java/keystrokesmod/mixins/impl/render/MixinItemRenderer.java new file mode 100644 index 00000000..ba9ddc8b --- /dev/null +++ b/src/main/java/keystrokesmod/mixins/impl/render/MixinItemRenderer.java @@ -0,0 +1,134 @@ +package keystrokesmod.mixins.impl.render; + + +import keystrokesmod.event.RenderItemEvent; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; +import net.minecraftforge.common.MinecraftForge; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(ItemRenderer.class) +public abstract class MixinItemRenderer { + + @Shadow private float prevEquippedProgress; + + @Shadow private float equippedProgress; + + @Shadow @Final private Minecraft mc; + + @Shadow protected abstract void func_178101_a(float p_178101_1_, float p_178101_2_); + + @Shadow protected abstract void func_178109_a(AbstractClientPlayer p_178109_1_); + + @Shadow protected abstract void func_178110_a(EntityPlayerSP p_178110_1_, float p_178110_2_); + + @Shadow private ItemStack itemToRender; + + @Shadow protected abstract void renderItemMap(AbstractClientPlayer p_renderItemMap_1_, float p_renderItemMap_2_, float p_renderItemMap_3_, float p_renderItemMap_4_); + + @Shadow protected abstract void transformFirstPersonItem(float p_transformFirstPersonItem_1_, float p_transformFirstPersonItem_2_); + + @Shadow protected abstract void func_178104_a(AbstractClientPlayer p_178104_1_, float p_178104_2_); + + @Shadow protected abstract void func_178103_d(); + + @Shadow protected abstract void func_178098_a(float p_178098_1_, AbstractClientPlayer p_178098_2_); + + @Shadow public abstract void renderItem(EntityLivingBase p_renderItem_1_, ItemStack p_renderItem_2_, ItemCameraTransforms.TransformType p_renderItem_3_); + + @Shadow protected abstract void func_178095_a(AbstractClientPlayer p_178095_1_, float p_178095_2_, float p_178095_3_); + + /** + * @author xia__mc + * @reason for Animations module. + */ + @Overwrite + public void renderItemInFirstPerson(final float partialTicks) { + float animationProgression = 1.0F - (this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * partialTicks); + final EntityPlayerSP thePlayer = this.mc.thePlayer; + float swingProgress = thePlayer.getSwingProgress(partialTicks); + final float f2 = thePlayer.prevRotationPitch + (thePlayer.rotationPitch - thePlayer.prevRotationPitch) * partialTicks; + final float f3 = thePlayer.prevRotationYaw + (thePlayer.rotationYaw - thePlayer.prevRotationYaw) * partialTicks; + this.func_178101_a(f2, f3); + this.func_178109_a(thePlayer); + this.func_178110_a(thePlayer, partialTicks); + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + + if (this.itemToRender != null) { + EnumAction enumaction = this.itemToRender.getItemUseAction(); + final int itemInUseCount = thePlayer.getItemInUseCount(); + boolean useItem = itemInUseCount > 0; + + final RenderItemEvent event = new RenderItemEvent(enumaction, useItem, animationProgression, partialTicks, swingProgress, itemToRender); + MinecraftForge.EVENT_BUS.post(event); + enumaction = event.getEnumAction(); + useItem = event.isUseItem(); + animationProgression = event.getAnimationProgression(); + swingProgress = event.getSwingProgress(); + + if (this.itemToRender.getItem() instanceof ItemMap) { + this.renderItemMap(thePlayer, f2, animationProgression, swingProgress); + } else if (useItem) { + if (!event.isCanceled()) { + switch (enumaction) { + case NONE: + this.transformFirstPersonItem(animationProgression, 0.0F); + break; + + case EAT: + case DRINK: + this.func_178104_a(thePlayer, partialTicks); + this.transformFirstPersonItem(animationProgression, 0.0F); + break; + + case BLOCK: + this.transformFirstPersonItem(animationProgression, 0.0F); + this.func_178103_d(); + break; + + case BOW: + this.transformFirstPersonItem(animationProgression, 0.0F); + this.func_178098_a(partialTicks, thePlayer); + } + } + } else if (!event.isCanceled()) { + this.func_178105_d(swingProgress); + this.transformFirstPersonItem(animationProgression, swingProgress); + } + + this.renderItem(thePlayer, this.itemToRender, ItemCameraTransforms.TransformType.FIRST_PERSON); + } else if (!thePlayer.isInvisible()) { + this.func_178095_a(thePlayer, animationProgression, swingProgress); + } + + GlStateManager.popMatrix(); + GlStateManager.disableRescaleNormal(); + RenderHelper.disableStandardItemLighting(); + } + + /** + * @author xia__mc + * @reason fix crash issue with LabyMod. + */ + @Overwrite + public void func_178105_d(float p_178105_1_) { + float f = -0.4F * MathHelper.sin(MathHelper.sqrt_float(p_178105_1_) * 3.1415927F); + float f1 = 0.2F * MathHelper.sin(MathHelper.sqrt_float(p_178105_1_) * 3.1415927F * 2.0F); + float f2 = -0.2F * MathHelper.sin(p_178105_1_ * 3.1415927F); + GlStateManager.translate(f, f1, f2); + } +} diff --git a/src/main/java/keystrokesmod/module/ModuleManager.java b/src/main/java/keystrokesmod/module/ModuleManager.java index 1acfe19b..bc556612 100644 --- a/src/main/java/keystrokesmod/module/ModuleManager.java +++ b/src/main/java/keystrokesmod/module/ModuleManager.java @@ -33,23 +33,23 @@ public class ModuleManager { public static Module antiBot; public static Module noSlow; public static KillAura killAura; - public static Module autoClicker; - public static Module hitBox; - public static Module reach; + public static AutoClicker autoClicker; + public static HitBox hitBox; + public static Reach reach; public static BedESP bedESP; public static HUD hud; public static Timer timer; - public static Module fly; - public static Module moreKB; + public static Fly fly; + public static MoreKB moreKB; public static Potions potions; public static NoFall noFall; public static PlayerESP playerESP; - public static Module reduce; + public static Reduce reduce; public static SafeWalk safeWalk; - public static Module keepSprint; - public static Module antiKnockback; + public static KeepSprint keepSprint; + public static Velocity velocity; public static Tower tower; - public static Module bedwars; + public static BedWars bedwars; public static Speed speed; public static InvManager invManager; public static Scaffold scaffold; @@ -64,7 +64,6 @@ public class ModuleManager { public static NoHurtCam noHurtCam; public static NoCameraClip noCameraClip; public static AutoPlay autoPlay; - public static SaveMoveKeys saveMoveKeys; public static NyaProxy nyaProxy; public static CustomName customName; public static CommandChat commandChat; @@ -78,6 +77,9 @@ public class ModuleManager { public static ClickRecorder clickRecorder; public static InfiniteAura infiniteAura; public static LegitScaffold legitScaffold; + public static FreeLook freeLook; + public static Step step; + public static Animations animations; public void register() { this.addModule(autoClicker = new AutoClicker()); @@ -119,7 +121,7 @@ public void register() { this.addModule(noFall = new NoFall()); this.addModule(safeWalk = new SafeWalk()); this.addModule(reduce = new Reduce()); - this.addModule(antiKnockback = new Velocity()); + this.addModule(velocity = new Velocity()); this.addModule(antiBot = new AntiBot()); this.addModule(antiShuffle = new AntiShuffle()); this.addModule(new Chams()); @@ -172,7 +174,6 @@ public void register() { this.addModule(noHurtCam = new NoHurtCam()); this.addModule(noCameraClip = new NoCameraClip()); this.addModule(autoPlay = new AutoPlay()); -// this.addModule(saveMoveKeys = new SaveMoveKeys()); this.addModule(nyaProxy = new NyaProxy()); this.addModule(customName = new CustomName()); this.addModule(commandChat = new CommandChat()); @@ -186,6 +187,9 @@ public void register() { this.addModule(clickRecorder = new ClickRecorder()); this.addModule(infiniteAura = new InfiniteAura()); this.addModule(legitScaffold = new LegitScaffold()); + this.addModule(freeLook = new FreeLook()); + this.addModule(step = new Step()); + this.addModule(animations = new Animations()); antiBot.enable(); modules.sort(Comparator.comparing(Module::getPrettyName)); } @@ -198,16 +202,16 @@ public List getModules() { return modules; } - public List inCategory(Module.category categ) { - ArrayList categML = new ArrayList<>(); + public List inCategory(Module.category category) { + ArrayList categoryML = new ArrayList<>(); for (Module mod : this.getModules()) { - if (mod.moduleCategory().equals(categ)) { - categML.add(mod); + if (mod.moduleCategory().equals(category)) { + categoryML.add(mod); } } - return categML; + return categoryML; } public Module getModule(String moduleName) { diff --git a/src/main/java/keystrokesmod/module/impl/combat/JumpReset.java b/src/main/java/keystrokesmod/module/impl/combat/JumpReset.java index ffec3a40..5a9fa3fe 100644 --- a/src/main/java/keystrokesmod/module/impl/combat/JumpReset.java +++ b/src/main/java/keystrokesmod/module/impl/combat/JumpReset.java @@ -1,13 +1,11 @@ package keystrokesmod.module.impl.combat; import keystrokesmod.Raven; -import keystrokesmod.event.JumpEvent; -import keystrokesmod.mixins.impl.entity.EntityAccessor; +import keystrokesmod.event.PostVelocityEvent; import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.utility.Utils; -import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.concurrent.TimeUnit; @@ -16,74 +14,44 @@ public class JumpReset extends Module { private final SliderSetting minDelay; private final SliderSetting maxDelay; private final SliderSetting chance; - private final SliderSetting maxFallDistance; - private final ButtonSetting ignoreFire; - private boolean jump; + private final ButtonSetting targetNearbyCheck; + private final ButtonSetting ignoreLiquid; public JumpReset() { super("Jump Reset", category.combat); 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(maxFallDistance = new SliderSetting("Max fall distance", 3, 1, 8, 0.5)); - this.registerSetting(ignoreFire = new ButtonSetting("Ignore fire", true)); - } - - public void onDisable() { - jump = false; + this.registerSetting(targetNearbyCheck = new ButtonSetting("Target nearby check", false)); + this.registerSetting(ignoreLiquid = new ButtonSetting("Ignore liquid", true)); } @SubscribeEvent - public void onLivingUpdate(LivingEvent.LivingUpdateEvent ev) { + public void onVelocity(PostVelocityEvent event) { if (Utils.nullCheck()) { - if (chance.getInput() == 0) { - return; - } - if (mc.thePlayer.maxHurtTime <= 0) { - jump = false; + if (chance.getInput() == 0) return; - } - if (ignoreFire.isToggled() && ((EntityAccessor) mc.thePlayer).getFire() > 0) { - jump = false; + if (mc.thePlayer.maxHurtTime <= 0) return; - } - if (mc.thePlayer.fallDistance > maxFallDistance.getInput()) { - jump = false; + if (ignoreLiquid.isToggled() && Utils.inLiquid()) return; - } - if (mc.thePlayer.hurtTime == mc.thePlayer.maxHurtTime) { - jump = true; - } - if (!jump || mc.thePlayer.hurtTime == 0) { - jump = false; + if (targetNearbyCheck.isToggled() && !Utils.isTargetNearby()) return; - } - if (chance.getInput() != 100.0D) { + + if (chance.getInput() != 100) { double ch = Math.random(); - if (ch >= chance.getInput() / 100.0D) { + if (ch >= chance.getInput() / 100) return; - } } - if (jump) { - long delay = (long) (Math.random() * (maxDelay.getInput() - minDelay.getInput()) + minDelay.getInput()); - if (delay == 0) { + + long delay = (long) (Math.random() * (maxDelay.getInput() - minDelay.getInput()) + minDelay.getInput()); + if (delay == 0) { + if (mc.thePlayer.onGround) mc.thePlayer.jump(); + } else { + Raven.getExecutor().schedule(() -> { if (mc.thePlayer.onGround) mc.thePlayer.jump(); - jump = false; - } else { - Raven.getExecutor().schedule(() -> { - if (mc.thePlayer.onGround) mc.thePlayer.jump(); - jump = false; - }, delay, TimeUnit.MILLISECONDS); - } + }, delay, TimeUnit.MILLISECONDS); } } } - - @SubscribeEvent - public void onJump(JumpEvent e) { - if (!Utils.nullCheck() || !jump) { - return; - } - jump = false; - } } diff --git a/src/main/java/keystrokesmod/module/impl/combat/KillAura.java b/src/main/java/keystrokesmod/module/impl/combat/KillAura.java index 08af86ad..3eabe186 100644 --- a/src/main/java/keystrokesmod/module/impl/combat/KillAura.java +++ b/src/main/java/keystrokesmod/module/impl/combat/KillAura.java @@ -14,6 +14,7 @@ import keystrokesmod.utility.*; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.network.Packet; @@ -478,6 +479,7 @@ private void setTarget(float[] rotations) { .filter(entity -> entity != mc.thePlayer) .filter(entity -> entity instanceof EntityLivingBase) .filter(entity -> { + if (entity instanceof EntityArmorStand) return false; if (entity instanceof EntityPlayer) { if (!targetPlayer.isToggled()) return false; if (Utils.isFriended((EntityPlayer) entity)) { @@ -494,8 +496,6 @@ private void setTarget(float[] rotations) { .filter(entity -> fov.getInput() == 360 || Utils.inFov((float) fov.getInput(), entity)) .map(entity -> new Pair<>(entity, eyePos.distanceTo(entity))) .forEach(pair -> { - if (availableTargets.size() >= targets.getInput()) return; - // need a more accurate distance check as this can ghost on hypixel if (pair.second() <= blockRange.getInput() && autoBlockMode.getInput() > 0) { KeyBinding.setKeyBindState(mc.gameSettings.keyBindUseItem.getKeyCode(), false); @@ -535,7 +535,7 @@ private void setTarget(float[] rotations) { break; } availableTargets.sort(comparator); - if (entityIndex > availableTargets.size() - 1) { + if (entityIndex > (int) targets.getInput() - 1 || entityIndex > availableTargets.size() - 1) { entityIndex = 0; } target = availableTargets.get(entityIndex); @@ -658,13 +658,13 @@ private void releasePackets() { private boolean behindBlocks(float[] rotations) { try { - Vec3 from = new Vec3(mc.thePlayer).add(0, mc.thePlayer.getEyeHeight(), 0); + Vec3 from = Utils.getEyePos(); MovingObjectPosition hitResult = RotationUtils.rayCast( RotationUtils.getNearestPoint(target.getEntityBoundingBox(), from).distanceTo(from), rotations[0], rotations[1] ); if (hitResult != null) { - if (keystrokesmod.module.impl.other.anticheats.utils.world.BlockUtils.isFullBlock(mc.theWorld.getBlockState(hitResult.getBlockPos()))) { + if (mc.theWorld.getBlockState(hitResult.getBlockPos()).getBlock().isFullCube()) { return true; } } diff --git a/src/main/java/keystrokesmod/module/impl/combat/Velocity.java b/src/main/java/keystrokesmod/module/impl/combat/Velocity.java index c851fd80..a0506c49 100644 --- a/src/main/java/keystrokesmod/module/impl/combat/Velocity.java +++ b/src/main/java/keystrokesmod/module/impl/combat/Velocity.java @@ -13,9 +13,12 @@ import keystrokesmod.module.setting.impl.ModeSetting; import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.module.setting.utils.ModeOnly; +import keystrokesmod.utility.BlockUtils; import keystrokesmod.utility.Utils; import net.minecraft.network.play.server.S12PacketEntityVelocity; import net.minecraft.network.play.server.S27PacketExplosion; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.BlockPos; import net.minecraft.util.MovingObjectPosition; import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -29,6 +32,7 @@ public class Velocity extends Module { public static SliderSetting horizontal; public static SliderSetting vertical; private final ButtonSetting cancelExplosion; + private final ButtonSetting cancelAir; private final ButtonSetting damageBoost; private final SliderSetting boostMultiplier; private final SliderSetting boostDelay; @@ -46,6 +50,7 @@ public Velocity() { this.registerSetting(horizontal = new SliderSetting("Horizontal", 0.0, -100.0, 100.0, 1.0, canChangeMode)); this.registerSetting(vertical = new SliderSetting("Vertical", 0.0, 0.0, 100.0, 1.0, canChangeMode)); this.registerSetting(cancelExplosion = new ButtonSetting("Cancel explosion packet", true, canChangeMode)); + this.registerSetting(cancelAir = new ButtonSetting("Cancel air", false, canChangeMode)); this.registerSetting(damageBoost = new ButtonSetting("Damage boost", false)); this.registerSetting(boostMultiplier = new SliderSetting("Boost multiplier", 2.0, 1.0, 8.0, 0.1, damageBoost::isToggled)); this.registerSetting(boostDelay = new SliderSetting("Boost delay", 0, 0, 1000, 5, "ms", damageBoost::isToggled)); @@ -59,12 +64,14 @@ public void onPreUpdate(PreUpdateEvent event) { if (lobbyCheck.isToggled() && isLobby()) { return; } - if (mode.getInput() == 2 && mc.objectMouseOver.typeOfHit.equals(MovingObjectPosition.MovingObjectType.ENTITY) && mc.thePlayer.hurtTime > 0 && attacked) { - mc.thePlayer.motionX *= 0.6D; - mc.thePlayer.motionZ *= 0.6D; - mc.thePlayer.setSprinting(false); - if (debug.isToggled()) Utils.sendMessage("reduced."); - } + + if (mode.getInput() == 2) + if (mc.objectMouseOver.typeOfHit.equals(MovingObjectPosition.MovingObjectType.ENTITY) && mc.thePlayer.hurtTime > 0 && !attacked) { + mc.thePlayer.motionX *= 0.6D; + mc.thePlayer.motionZ *= 0.6D; + mc.thePlayer.setSprinting(false); + if (debug.isToggled()) Utils.sendMessage("reduced."); + } attacked = false; } @@ -74,6 +81,15 @@ public void onAttack(AttackEntityEvent event) { attacked = true; } + private boolean overAir() { + if (mc.thePlayer.onGround) return false; + + final AxisAlignedBB boundingBox = BlockUtils.getCollisionBoundingBox(new BlockPos(mc.thePlayer.posX, mc.thePlayer.posY - 1.0, mc.thePlayer.posZ)); + if (boundingBox == null) return true; + + return boundingBox.maxY != mc.thePlayer.posY; + } + @SubscribeEvent public void onReceivePacket(ReceivePacketEvent e) { if (!Utils.nullCheck() || LongJump.stopModules || e.isCanceled()) { @@ -86,6 +102,12 @@ public void onReceivePacket(ReceivePacketEvent e) { } switch ((int) mode.getInput()) { case 0: + if (cancel()) { + ((S12PacketEntityVelocityAccessor) e.getPacket()).setMotionX(0); + ((S12PacketEntityVelocityAccessor) e.getPacket()).setMotionY(0); + ((S12PacketEntityVelocityAccessor) e.getPacket()).setMotionZ(0); + return; + } ((S12PacketEntityVelocityAccessor) e.getPacket()).setMotionX((int) (((S12PacketEntityVelocity) e.getPacket()).getMotionX() * horizontal.getInput() / 100)); ((S12PacketEntityVelocityAccessor) e.getPacket()).setMotionY((int) (((S12PacketEntityVelocity) e.getPacket()).getMotionY() * vertical.getInput() / 100)); ((S12PacketEntityVelocityAccessor) e.getPacket()).setMotionZ((int) (((S12PacketEntityVelocity) e.getPacket()).getMotionZ() * horizontal.getInput() / 100)); @@ -126,6 +148,10 @@ else if (e.getPacket() instanceof S27PacketExplosion) { } switch ((int) mode.getInput()) { case 0: + if (cancelExplosion.isToggled() || cancel()) { + e.setCanceled(true); + return; + } ((S27PacketExplosionAccessor) e.getPacket()).setMotionX((float) (((S27PacketExplosion) e.getPacket()).func_149149_c() * horizontal.getInput() / 100)); ((S27PacketExplosionAccessor) e.getPacket()).setMotionY((float) (((S27PacketExplosion) e.getPacket()).func_149144_d() * vertical.getInput()) / 100); ((S27PacketExplosionAccessor) e.getPacket()).setMotionZ((float) (((S27PacketExplosion) e.getPacket()).func_149147_e() * horizontal.getInput() / 100)); @@ -162,7 +188,7 @@ private void boost() { } private boolean cancel() { - return (vertical.getInput() == 0 && horizontal.getInput() == 0) || ModuleManager.bedAura.cancelKnockback(); + return (vertical.getInput() == 0 && horizontal.getInput() == 0) || ModuleManager.bedAura.cancelKnockback() || (cancelAir.isToggled() && overAir()); } @Override diff --git a/src/main/java/keystrokesmod/module/impl/movement/InvMove.java b/src/main/java/keystrokesmod/module/impl/movement/InvMove.java index aa167b2b..1ef777f2 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/InvMove.java +++ b/src/main/java/keystrokesmod/module/impl/movement/InvMove.java @@ -1,26 +1,35 @@ package keystrokesmod.module.impl.movement; +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.ModeSetting; +import keystrokesmod.utility.PacketUtils; import keystrokesmod.utility.Utils; import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.gui.inventory.GuiInventory; import net.minecraft.client.settings.KeyBinding; import net.minecraft.inventory.ContainerChest; +import net.minecraft.network.play.client.C0BPacketEntityAction; +import net.minecraft.network.play.client.C0EPacketClickWindow; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import org.lwjgl.input.Keyboard; import static keystrokesmod.module.ModuleManager.*; public class InvMove extends Module { - public static final String[] MODES = {"Normal", "Blink"}; + public static final String[] MODES = {"Normal", "Blink", "LegitInv"}; private final ModeSetting mode; private final ButtonSetting allowSprint; private final ButtonSetting allowSneak; private final ButtonSetting chestNameCheck; private final ButtonSetting targetNearbyCheck; + private boolean blinking = false; + private boolean clicked = false; + public InvMove() { super("InvMove", category.movement); this.registerSetting(new DescriptionSetting("Allow you move in inventory.")); @@ -34,32 +43,86 @@ public InvMove() { @Override public void onUpdate() { if (mc.currentScreen instanceof GuiContainer && nameCheck() && targetNearbyCheck() && !scaffold.isEnabled()) { - if ((int) mode.getInput() == 1) { - if (!blinking) { - blink.enable(); - } - blinking = true; + switch ((int) mode.getInput()) { + case 1: + if (!blinking) { + blink.enable(); + } + blinking = true; + break; + case 2: + if (!(mc.currentScreen instanceof GuiInventory) || clicked) { + noInvMove(); + return; + } + break; } - if (allowSprint.isToggled()) { - KeyBinding.setKeyBindState(mc.gameSettings.keyBindSprint.getKeyCode(), Keyboard.isKeyDown(mc.gameSettings.keyBindSprint.getKeyCode())); + + doInvMove(); + } else { + switch ((int) mode.getInput()) { + case 1: + if (blinking && blink.isEnabled()) { + blink.disable(); + } + blinking = false; + break; + case 2: + noInvMove(); + clicked = false; + break; } - if (allowSneak.isToggled()) { - KeyBinding.setKeyBindState(mc.gameSettings.keyBindSneak.getKeyCode(), Keyboard.isKeyDown(mc.gameSettings.keyBindSneak.getKeyCode())); + } + } + + @SubscribeEvent + public void onSendPacket(SendPacketEvent event) { + if ((int) mode.getInput() != 2) return; + + if (event.getPacket() instanceof C0BPacketEntityAction) { + C0BPacketEntityAction packet = (C0BPacketEntityAction) event.getPacket(); + + if (packet.getAction() == C0BPacketEntityAction.Action.OPEN_INVENTORY) { + clicked = false; + event.setCanceled(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()); - } else if ((int) mode.getInput() == 1) { - if (blinking && blink.isEnabled()) { - blink.disable(); + } else if (event.getPacket() instanceof C0EPacketClickWindow) { + if (!clicked) { + PacketUtils.sendPacketNoEvent(new C0BPacketEntityAction(mc.thePlayer, C0BPacketEntityAction.Action.OPEN_INVENTORY)); } - blinking = false; + clicked = true; } } + private void doInvMove() { + if (allowSprint.isToggled()) { + KeyBinding.setKeyBindState(mc.gameSettings.keyBindSprint.getKeyCode(), Keyboard.isKeyDown(mc.gameSettings.keyBindSprint.getKeyCode())); + } + if (allowSneak.isToggled()) { + KeyBinding.setKeyBindState(mc.gameSettings.keyBindSneak.getKeyCode(), Keyboard.isKeyDown(mc.gameSettings.keyBindSneak.getKeyCode())); + } + 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()); + } + + private void noInvMove() { + if (allowSprint.isToggled()) { + KeyBinding.setKeyBindState(mc.gameSettings.keyBindSprint.getKeyCode(), false); + } + if (allowSneak.isToggled()) { + KeyBinding.setKeyBindState(mc.gameSettings.keyBindSneak.getKeyCode(), false); + } + KeyBinding.setKeyBindState(mc.gameSettings.keyBindForward.getKeyCode(), false); + KeyBinding.setKeyBindState(mc.gameSettings.keyBindBack.getKeyCode(), false); + KeyBinding.setKeyBindState(mc.gameSettings.keyBindRight.getKeyCode(), false); + KeyBinding.setKeyBindState(mc.gameSettings.keyBindLeft.getKeyCode(), false); + KeyBinding.setKeyBindState(mc.gameSettings.keyBindJump.getKeyCode(), false); + } + private boolean nameCheck() { if (!chestNameCheck.isToggled()) return true; if (!(mc.thePlayer.openContainer instanceof ContainerChest)) return true; @@ -79,6 +142,16 @@ public void onDisable() { blink.disable(); } blinking = false; + + if (mc.currentScreen instanceof GuiInventory && !clicked) { + PacketUtils.sendPacketNoEvent(new C0BPacketEntityAction(mc.thePlayer, C0BPacketEntityAction.Action.OPEN_INVENTORY)); + } + clicked = false; + } + + @Override + public void onEnable() { + clicked = mc.currentScreen instanceof GuiInventory; } @Override diff --git a/src/main/java/keystrokesmod/module/impl/movement/LongJump.java b/src/main/java/keystrokesmod/module/impl/movement/LongJump.java index d25f3f4a..cbb94d4c 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/LongJump.java +++ b/src/main/java/keystrokesmod/module/impl/movement/LongJump.java @@ -4,6 +4,7 @@ import keystrokesmod.event.PrePlayerInput; import keystrokesmod.event.PreUpdateEvent; import keystrokesmod.event.ReceivePacketEvent; +import keystrokesmod.mixins.impl.client.KeyBindingAccessor; import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.ModeSetting; @@ -51,7 +52,7 @@ public LongJump() { this.registerSetting(reverseYaw = new ButtonSetting("Reverse yaw", false, mode1)); this.registerSetting(pitch = new SliderSetting("Pitch", 90, 80, 90, 0.5, mode1)); this.registerSetting(aimTicks = new SliderSetting("Aim ticks", 2, 1, 10, 1, mode1)); - this.registerSetting(jumpAtEnd = new ButtonSetting("Jump at end.", false)); + this.registerSetting(jumpAtEnd = new ButtonSetting("Jump at end.", false, new ModeOnly(mode, 0, 1))); this.registerSetting(showBPS = new ButtonSetting("Show BPS", false)); this.registerSetting(stopOnTeleport = new ButtonSetting("Stop on teleport", true)); } @@ -82,11 +83,11 @@ public void onPreMotion(PreMotionEvent event) { } break; case 2: - if (ticks < 40) { + if (ticks < 33) { event.setOnGround(false); mc.thePlayer.motionX = mc.thePlayer.motionZ = 0; - event.setPosZ(mc.thePlayer.lastTickPosZ); - event.setPosX(mc.thePlayer.lastTickPosX); + mc.thePlayer.posX = mc.thePlayer.lastTickPosX; + mc.thePlayer.posZ = mc.thePlayer.lastTickPosZ; } else if (ticks == 50) { event.setOnGround(true); } @@ -165,10 +166,12 @@ public void onPreUpdate(PreUpdateEvent event) { break; case 2: mc.thePlayer.setSprinting(true); - if (ticks < 40) { + if (ticks < 34) { if (mc.thePlayer.onGround) mc.thePlayer.jump(); - } else if (ticks > 40 && mc.thePlayer.onGround && !waitForDamage) { - MoveUtil.strafe(0.6); + } else if (ticks > 34 && mc.thePlayer.onGround && !waitForDamage) { + ((KeyBindingAccessor) mc.gameSettings.keyBindForward).setPressed(true); + mc.thePlayer.moveForward = 1.0F; + MoveUtil.strafe(0.415); mc.thePlayer.motionY = 0.42; waitForDamage = true; } else if (waitForDamage && mc.thePlayer.hurtTime == 5) { @@ -192,6 +195,10 @@ public void onPreInput(PrePlayerInput event) { } public void onDisable() { + if (mode.getInput() == 2) { + ((KeyBindingAccessor) mc.gameSettings.keyBindForward).setPressed(false); + } + start = false; done = false; waitForDamage = false; diff --git a/src/main/java/keystrokesmod/module/impl/movement/Phase.java b/src/main/java/keystrokesmod/module/impl/movement/Phase.java index e87d10c0..02439f0f 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/Phase.java +++ b/src/main/java/keystrokesmod/module/impl/movement/Phase.java @@ -3,6 +3,7 @@ import keystrokesmod.event.BlockAABBEvent; import keystrokesmod.event.PreMotionEvent; import keystrokesmod.event.ReceivePacketEvent; +import keystrokesmod.mixins.impl.client.PlayerControllerMPAccessor; import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.DescriptionSetting; @@ -20,6 +21,7 @@ public class Phase extends Module { private final ModeSetting mode; private final ButtonSetting autoBlink; private final ButtonSetting cancelS08; + private final ButtonSetting waitingBreakBlock; private final SliderSetting autoDisable; private int phaseTime; @@ -27,12 +29,16 @@ public class Phase extends Module { // watchdog auto phase private boolean phase; + private boolean currentHittingBlock; + private boolean lastHittingBlock; + public Phase() { super("Phase", category.movement); this.registerSetting(new DescriptionSetting("Lets you go through solid blocks.")); this.registerSetting(mode = new ModeSetting("Mode", new String[]{"Normal", "Watchdog Auto Phase"}, 0)); this.registerSetting(autoBlink = new ButtonSetting("Blink", true)); this.registerSetting(cancelS08 = new ButtonSetting("Cancel S06", false)); + this.registerSetting(waitingBreakBlock = new ButtonSetting("waiting break block", false)); this.registerSetting(autoDisable = new SliderSetting("Auto disable", 6, 1, 20, 1, "ticks")); } @@ -40,6 +46,7 @@ public Phase() { public void onEnable() { phaseTime = 0; phase = false; + currentHittingBlock = lastHittingBlock = false; } @Override @@ -51,6 +58,12 @@ public void onDisable() { phase = false; } + @Override + public void onUpdate() { + currentHittingBlock = ((PlayerControllerMPAccessor) mc.playerController).isHittingBlock(); + lastHittingBlock = currentHittingBlock; + } + @SubscribeEvent public void onPreMotion(PreMotionEvent event) { if (this.phase) { @@ -59,9 +72,14 @@ public void onPreMotion(PreMotionEvent event) { this.phaseTime = 0; } - if (phaseTime > autoDisable.getInput()) + if (phaseTime > autoDisable.getInput()) { disable(); + return; + } + if (waitingBreakBlock.isToggled() && !(lastHittingBlock && !currentHittingBlock)) { + return; + } switch ((int) mode.getInput()) { case 0: diff --git a/src/main/java/keystrokesmod/module/impl/movement/Speed.java b/src/main/java/keystrokesmod/module/impl/movement/Speed.java index c0eb60af..f1e28a63 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/Speed.java +++ b/src/main/java/keystrokesmod/module/impl/movement/Speed.java @@ -7,12 +7,14 @@ import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.ModeSetting; import keystrokesmod.utility.MoveUtil; +import keystrokesmod.utility.RotationUtils; 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.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.MovingObjectPosition; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import static keystrokesmod.module.ModuleManager.scaffold; @@ -23,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[]{"StrafeTest", "Ground", "Damage", "OldHypixel"}; + private final String[] modes = new String[]{"Strafe (Deprecated)", "Ground", "Damage", "OldHypixel", "LowHopTest", "Strafe B"}; private int offGroundTicks = 0; public static int ticksSinceVelocity = Integer.MAX_VALUE; @@ -34,6 +36,8 @@ public class Speed extends Module { float angle = 0; + int groundYPos = -1; + public Speed() { super("Speed", Module.category.movement); this.registerSetting(mode = new ModeSetting("Mode", modes, 0)); @@ -82,12 +86,12 @@ public void onUpdate() { mc.thePlayer.setSprinting(true); switch (offGroundTicks) { case 0: + groundYPos = (int) Math.floor(mc.thePlayer.posY) - 1; MoveUtil.strafe(0.415); mc.thePlayer.motionY = 0.42; break; case 10: - if (!BlockUtils.isFullBlock(keystrokesmod.utility.BlockUtils.getBlockState(mc.thePlayer.getPosition().down()))) - break; + if (isYAxisChange()) break; MoveUtil.strafe(0.315); mc.thePlayer.motionY = -0.28; @@ -217,9 +221,60 @@ public void onUpdate() { } } break; + case 4: + if (!Utils.jumpDown() && Utils.isMoving() && mc.currentScreen == null) { + mc.thePlayer.setSprinting(true); + switch (offGroundTicks) { + case 0: + groundYPos = (int) Math.floor(mc.thePlayer.posY) - 1; + MoveUtil.strafe(0.415); + mc.thePlayer.motionY = 0.42; + Utils.resetTimer(); + break; + case 9: + if (isYAxisChange()) break; + + mc.thePlayer.motionY = -0.3; + Utils.getTimer().timerSpeed = 1.6f; + break; + case 11: + Utils.resetTimer(); + break; + } + } + break; + case 5: + if (!Utils.jumpDown() && Utils.isMoving() && mc.currentScreen == null && mc.thePlayer.hurtTime == 0) { + mc.thePlayer.setSprinting(true); + switch (offGroundTicks) { + case 0: + groundYPos = (int) Math.floor(mc.thePlayer.posY) - 1; + MoveUtil.strafe(0.45); + mc.thePlayer.motionY = 0.42; + Utils.resetTimer(); + break; + case 9: + MoveUtil.strafe(0.315); + mc.thePlayer.motionY = -0.28; + Utils.getTimer().timerSpeed = 1.8f; + break; + case 10: + MoveUtil.strafe(); + Utils.resetTimer(); + break; + case 11: + MoveUtil.stop(); + } + } + break; } } + private boolean isYAxisChange() { + MovingObjectPosition hitResult = RotationUtils.rayCast(3, 0, 90); + return hitResult == null || hitResult.getBlockPos().getY() != groundYPos; + } + public void onDisable() { if (stopMotion.isToggled()) { MoveUtil.stop(); @@ -227,5 +282,6 @@ public void onDisable() { cooldownTicks = 0; cooldown = false; strafe = false; + Utils.resetTimer(); } } diff --git a/src/main/java/keystrokesmod/module/impl/movement/Sprint.java b/src/main/java/keystrokesmod/module/impl/movement/Sprint.java index b755ec67..49018721 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/Sprint.java +++ b/src/main/java/keystrokesmod/module/impl/movement/Sprint.java @@ -1,20 +1,56 @@ package keystrokesmod.module.impl.movement; +import keystrokesmod.event.PreMotionEvent; +import keystrokesmod.event.PrePlayerInput; +import keystrokesmod.mixins.impl.client.KeyBindingAccessor; import keystrokesmod.module.Module; +import keystrokesmod.module.setting.impl.ModeSetting; +import keystrokesmod.utility.MoveUtil; import keystrokesmod.utility.Utils; import net.minecraft.client.settings.KeyBinding; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent; public class Sprint extends Module { + private final ModeSetting mode = new ModeSetting("Mode", new String[]{"Legit", "Hypixel"}, 0); + public Sprint() { super("Sprint", Module.category.movement, 0); + this.registerSetting(mode); } @SubscribeEvent public void p(PlayerTickEvent e) { - if (Utils.nullCheck() && mc.inGameHasFocus) { + if (Utils.nullCheck() && mode.getInput() == 0 && mc.inGameHasFocus) { KeyBinding.setKeyBindState(mc.gameSettings.keyBindSprint.getKeyCode(), true); } } + + @SubscribeEvent + public void onStrafe(PrePlayerInput event) { + if (mode.getInput() != 1) return; + + ((KeyBindingAccessor) mc.gameSettings.keyBindSprint).setPressed(true); + + if (MoveUtil.isMoving()) { + mc.thePlayer.setSprinting(true); + + float forward = event.getForward(); + float strafe = event.getStrafe(); + if (Math.abs(strafe) == 1) + strafe *= 1.3F; + if (Math.abs(forward) == 1) + forward *= 1.3F; + event.setForward(forward); + event.setStrafe(strafe); + } + } + + @SubscribeEvent + public void onPreMotion(PreMotionEvent event) { + if (mode.getInput() != 1) return; + + if (mc.thePlayer.moveForward <= 0) + event.setSprinting(false); + } } diff --git a/src/main/java/keystrokesmod/module/impl/movement/Step.java b/src/main/java/keystrokesmod/module/impl/movement/Step.java new file mode 100644 index 00000000..710767ae --- /dev/null +++ b/src/main/java/keystrokesmod/module/impl/movement/Step.java @@ -0,0 +1,75 @@ +package keystrokesmod.module.impl.movement; + +import keystrokesmod.event.PreMotionEvent; +import keystrokesmod.event.PreUpdateEvent; +import keystrokesmod.module.Module; +import keystrokesmod.module.setting.impl.ModeSetting; +import keystrokesmod.module.setting.impl.SliderSetting; +import keystrokesmod.utility.MoveUtil; +import keystrokesmod.utility.Utils; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class Step extends Module { + private final ModeSetting mode = new ModeSetting("Mode", new String[]{"HypixelTest"}, 0); + private final SliderSetting delay = new SliderSetting("Delay", 1000, 0, 5000, 250, "ms"); + private final SliderSetting timer = new SliderSetting("Timer", 1, 0.1, 2, 0.1, "x"); + + private int offGroundTicks = -1; + private boolean stepping = false; + private long lastStep = -1; + + public Step() { + super("Step", category.movement); + this.registerSetting(mode, delay); + } + + @Override + public void onDisable() { + offGroundTicks = -1; + stepping = false; + } + + @SubscribeEvent + public void onPreMotion(PreMotionEvent event) { + final long time = System.currentTimeMillis(); + if (mc.thePlayer.onGround && mc.thePlayer.isCollidedHorizontally && MoveUtil.isMoving() && time - lastStep >= delay.getInput()) { + stepping = true; + lastStep = time; + } + } + + @SubscribeEvent + public void onPreUpdate(PreUpdateEvent event) { + if (mc.thePlayer.onGround) { + offGroundTicks = 0; + } else if (offGroundTicks != -1) { + offGroundTicks++; + } + + if (stepping) { + if (timer.getInput() != 1) { + Utils.getTimer().timerSpeed = (float) timer.getInput(); + } + switch (offGroundTicks) { + case 0: + mc.thePlayer.motionY = 0.4196; + break; + case 3: + case 4: + mc.thePlayer.motionY = 0; + break; + case 5: + stepping = false; + if (timer.getInput() != 1) { + Utils.resetTimer(); + } + break; + } + } + } + + @Override + public String getInfo() { + return mode.getOptions()[(int) mode.getInput()]; + } +} diff --git a/src/main/java/keystrokesmod/module/impl/movement/Timer.java b/src/main/java/keystrokesmod/module/impl/movement/Timer.java index df4cabad..658d3729 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/Timer.java +++ b/src/main/java/keystrokesmod/module/impl/movement/Timer.java @@ -6,6 +6,7 @@ import keystrokesmod.module.setting.impl.ModeSetting; import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.module.setting.utils.ModeOnly; +import keystrokesmod.utility.MoveUtil; import keystrokesmod.utility.Utils; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; @@ -13,6 +14,7 @@ public class Timer extends Module { private final ModeSetting mode; public static SliderSetting speed; + private final SliderSetting slowTimer; private final SliderSetting maxBalance; private final SliderSetting costMultiplier; private final ButtonSetting autoDisable; @@ -22,19 +24,48 @@ public class Timer extends Module { private long startTime = -1; private BalanceState balanceState = BalanceState.NONE; + private int enableTicks; + public Timer() { super("Timer", Module.category.movement, 0); - this.registerSetting(mode = new ModeSetting("Mode", new String[]{"Normal", "Balance"}, 0)); + this.registerSetting(mode = new ModeSetting("Mode", new String[]{"Normal", "Balance", "Hypixel"}, 0)); final ModeOnly mode1 = new ModeOnly(mode, 1); - this.registerSetting(speed = new SliderSetting("Speed", 1.00, 0.01, 10.0, 0.01)); - this.registerSetting(maxBalance = new SliderSetting("Max balance", 3000, 0, 10000, 10, "ms", mode1)); + this.registerSetting(speed = new SliderSetting("Speed", 1.00, 0.01, 10.0, 0.01, new ModeOnly(mode, 0, 1))); + this.registerSetting(slowTimer = new SliderSetting("Slow timer", 0, 0, 1, 0.01, "x", mode1)); + this.registerSetting(maxBalance = new SliderSetting("Max balance", 1000, 0, 3000, 10, "ms", mode1)); this.registerSetting(costMultiplier = new SliderSetting("Cost multiplier", 1, 0.5, 5, 0.05, "x", mode1)); this.registerSetting(autoDisable = new ButtonSetting("Auto disable", true, mode1)); this.registerSetting(strafeOnly = new ButtonSetting("Strafe only", false)); } + @Override + public void onUpdate() { + enableTicks++; + + if ((int) mode.getInput() == 2) { + if (mc.thePlayer.onGround) { + switch (enableTicks) { + case 0: + Utils.getTimer().timerSpeed = 0.3f; + MoveUtil.strafe(); + break; + case 1: + Utils.getTimer().timerSpeed = 1.8f; + MoveUtil.strafe(); + break; + } + if (enableTicks >= 4) + enableTicks = 0; + } else { + reset(); + } + } + } + @SubscribeEvent public void onRender(TickEvent.RenderTickEvent event) { + final long curTime = System.currentTimeMillis(); + if (mc.currentScreen instanceof ClickGui) { reset(); } else { @@ -48,31 +79,32 @@ public void onRender(TickEvent.RenderTickEvent event) { Utils.getTimer().timerSpeed = (float) speed.getInput(); break; case 1: - final long currentTime = System.currentTimeMillis(); switch (balanceState) { case NONE: - startTime = currentTime; - Utils.getTimer().timerSpeed = 0; - balanceState = BalanceState.WAITING; + startTime = curTime; + Utils.getTimer().timerSpeed = (float) slowTimer.getInput(); + balanceState = BalanceState.SLOW; break; - case WAITING: + case SLOW: + balance += (long) ((curTime - startTime) * (1 - slowTimer.getInput())); if (balance >= maxBalance.getInput()) { balance = (long) maxBalance.getInput(); balanceState = BalanceState.TIMER; - startTime = currentTime; + startTime = curTime; } else { - balance = currentTime - startTime; - break; + startTime = curTime; + Utils.getTimer().timerSpeed = (float) slowTimer.getInput(); } + break; case TIMER: - balance -= (long) ((currentTime - startTime) * speed.getInput() * costMultiplier.getInput()); + balance -= (long) ((curTime - startTime) * speed.getInput() * costMultiplier.getInput()); if (balance <= 0) { reset(); if (autoDisable.isToggled()) disable(); break; } - startTime = currentTime; + startTime = curTime; Utils.getTimer().timerSpeed = (float) speed.getInput(); break; } @@ -85,6 +117,7 @@ private void reset() { Utils.resetTimer(); balance = 0; balanceState = BalanceState.NONE; + enableTicks = 0; } @Override @@ -106,7 +139,7 @@ public void onDisable() { enum BalanceState { NONE, - WAITING, + SLOW, TIMER } } 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 3c86edc5..342e032c 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 @@ -8,6 +8,6 @@ public class BlockUtils { public static boolean isFullBlock(@NotNull IBlockState blockState) { Block block = blockState.getBlock(); - return block instanceof BlockGlass || block.isFullBlock(); + return block.isFullCube(); } } \ No newline at end of file diff --git a/src/main/java/keystrokesmod/module/impl/player/AntiVoid.java b/src/main/java/keystrokesmod/module/impl/player/AntiVoid.java index 9fd3751c..521a30ad 100644 --- a/src/main/java/keystrokesmod/module/impl/player/AntiVoid.java +++ b/src/main/java/keystrokesmod/module/impl/player/AntiVoid.java @@ -10,6 +10,7 @@ import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.utility.ContainerUtils; import keystrokesmod.utility.PacketUtils; +import keystrokesmod.utility.Utils; import net.minecraft.item.ItemSword; import net.minecraft.network.Packet; import net.minecraft.network.play.client.C03PacketPlayer; @@ -69,7 +70,7 @@ public void onPreUpdate(PreUpdateEvent event) { return; } - boolean overVoid = !mc.thePlayer.onGround && noBlockUnder(); + boolean overVoid = !mc.thePlayer.onGround && Utils.overVoid(); if (overVoid) { overVoidTicks++; diff --git a/src/main/java/keystrokesmod/module/impl/player/Backtrack.java b/src/main/java/keystrokesmod/module/impl/player/Backtrack.java index 3d0c7f82..2aadebdd 100644 --- a/src/main/java/keystrokesmod/module/impl/player/Backtrack.java +++ b/src/main/java/keystrokesmod/module/impl/player/Backtrack.java @@ -88,8 +88,7 @@ public void onPreUpdate(PreUpdateEvent e) { if (distance > maxDistance.getInput() || distance < minDistance.getInput() ) { - target = null; - vec3 = null; + currentLatency = 0; } } catch (NullPointerException ignored) { @@ -122,7 +121,7 @@ public void onRender(RenderWorldLastEvent e) { if (target == null) return; - Blink.drawBox(vec3.toVec3()); + Blink.drawBox(currentLatency > 0 ? vec3.toVec3() : target.getPositionVector()); } @SubscribeEvent @@ -136,6 +135,14 @@ public void onAttack(@NotNull AttackEntityEvent e) { vec3 = new Vec3(e.target.getPositionVector()); } + try { + final double distance = vec3.distanceTo(mc.thePlayer); + if (distance > maxDistance.getInput() || distance < minDistance.getInput()) + return; + + } catch (NullPointerException ignored) { + } + currentLatency = (int) (Math.random() * (maxLatency.getInput() - minLatency.getInput()) + minLatency.getInput()); } diff --git a/src/main/java/keystrokesmod/module/impl/render/Animations.java b/src/main/java/keystrokesmod/module/impl/render/Animations.java new file mode 100644 index 00000000..f7960bdb --- /dev/null +++ b/src/main/java/keystrokesmod/module/impl/render/Animations.java @@ -0,0 +1,128 @@ +package keystrokesmod.module.impl.render; + +import keystrokesmod.event.PreMotionEvent; +import keystrokesmod.event.RenderItemEvent; +import keystrokesmod.event.SwingAnimationEvent; +import keystrokesmod.mixins.impl.render.ItemRendererAccessor; +import keystrokesmod.module.Module; +import keystrokesmod.module.setting.impl.ModeSetting; +import keystrokesmod.module.setting.impl.SliderSetting; +import keystrokesmod.utility.Utils; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemAxe; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemSword; +import net.minecraft.util.MathHelper; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import org.jetbrains.annotations.NotNull; + +public class Animations extends Module { + private final ModeSetting blockAnimation = new ModeSetting("Block animation", new String[]{"None", "1.7", "Smooth"}, 1); + private final ModeSetting swingAnimation = new ModeSetting("Swing animation", new String[]{"None", "1.9+", "Smooth"}, 0); + private final SliderSetting x = new SliderSetting("X", 0, -2, 2, 0.05); + private final SliderSetting y = new SliderSetting("Y", 0, -2, 2, 0.05); + private final SliderSetting z = new SliderSetting("Z", 0, -2, 2, 0.05); + private final SliderSetting swingSpeed = new SliderSetting("Swing speed", 0, -200, 50, 5); + + private int swing; + + public Animations() { + super("Animations", category.render); + this.registerSetting(blockAnimation, swingAnimation, x, y, z, swingSpeed); + } + + @SubscribeEvent + public void onRenderItem(@NotNull RenderItemEvent event) { + if (event.getItemToRender().getItem() instanceof ItemMap) { + return; + } + + final EnumAction itemAction = event.getEnumAction(); + final ItemRendererAccessor itemRenderer = (ItemRendererAccessor) mc.getItemRenderer(); + final float animationProgression = event.getAnimationProgression(); + final float swingProgress = event.getSwingProgress(); + final float convertedProgress = MathHelper.sin(MathHelper.sqrt_float(swingProgress) * (float) Math.PI); + + if (event.isUseItem() && itemAction == EnumAction.BLOCK) { + + GlStateManager.translate(x.getInput(), y.getInput(), z.getInput()); + + + switch ((int) blockAnimation.getInput()) { + case 0: + itemRenderer.transformFirstPersonItem(animationProgression, 0.0F); + itemRenderer.blockTransformation(); + + break; + + case 1: + itemRenderer.transformFirstPersonItem(animationProgression, swingProgress); + itemRenderer.blockTransformation(); + + break; + + case 2: + itemRenderer.transformFirstPersonItem(animationProgression, 0.0F); + final float y = -convertedProgress * 2.0F; + GlStateManager.translate(0.0F, y / 10.0F + 0.1F, 0.0F); + GlStateManager.rotate(y * 10.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(250, 0.2F, 1.0F, -0.6F); + GlStateManager.rotate(-10.0F, 1.0F, 0.5F, 1.0F); + GlStateManager.rotate(-y * 20.0F, 1.0F, 0.5F, 1.0F); + + break; + } + + event.setCanceled(true); + + } else if (!event.isUseItem() && (event.getItemToRender().getItem() instanceof ItemSword || event.getItemToRender().getItem() instanceof ItemAxe)) { + + switch ((int) swingAnimation.getInput()) { + case 0: + func_178105_d(swingProgress); + itemRenderer.transformFirstPersonItem(animationProgression, swingProgress); + break; + + case 1: + func_178105_d(swingProgress); + itemRenderer.transformFirstPersonItem(animationProgression, swingProgress); + GlStateManager.translate(0, -((swing - 1) - + (swing == 0 ? 0 : Utils.getTimer().renderPartialTicks)) / 5f, 0); + break; + + case 2: + itemRenderer.transformFirstPersonItem(animationProgression, swingProgress); + func_178105_d(animationProgression); + break; + } + + event.setCanceled(true); + } + } + + @SubscribeEvent + public void onPreMotion(PreMotionEvent event) { + if (mc.thePlayer.swingProgressInt == 1) { + swing = 9; + } else { + swing = Math.max(0, swing - 1); + } + } + + @SubscribeEvent + public void onSwingAnimation(@NotNull SwingAnimationEvent event) { + event.setAnimationEnd(event.getAnimationEnd() * (int) ((-swingSpeed.getInput() / 100) + 1)); + } + + /** + * LabyMod issue, but I need to compat it. + * @see net.minecraft.client.renderer.ItemRenderer#func_178105_d(float swingProgress) + */ + void func_178105_d(float swingProgress) { + float f = -0.4F * MathHelper.sin(MathHelper.sqrt_float(swingProgress) * 3.1415927F); + float f1 = 0.2F * MathHelper.sin(MathHelper.sqrt_float(swingProgress) * 3.1415927F * 2.0F); + float f2 = -0.2F * MathHelper.sin(swingProgress * 3.1415927F); + GlStateManager.translate(f, f1, f2); + } +} diff --git a/src/main/java/keystrokesmod/module/impl/render/FreeLook.java b/src/main/java/keystrokesmod/module/impl/render/FreeLook.java new file mode 100644 index 00000000..8d39a60b --- /dev/null +++ b/src/main/java/keystrokesmod/module/impl/render/FreeLook.java @@ -0,0 +1,94 @@ +package keystrokesmod.module.impl.render; + +import keystrokesmod.event.JumpEvent; +import keystrokesmod.event.PreMotionEvent; +import keystrokesmod.event.PrePlayerInput; +import keystrokesmod.event.PreUpdateEvent; +import keystrokesmod.module.Module; +import keystrokesmod.module.setting.impl.ButtonSetting; +import keystrokesmod.utility.RotationUtils; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import org.jetbrains.annotations.NotNull; +import org.lwjgl.input.Keyboard; + +import javax.annotation.Nullable; + +public class FreeLook extends Module { + private final ButtonSetting onlyIfPressed = new ButtonSetting("Only if pressed", true); + + private @Nullable ViewData viewData = null; + + public FreeLook() { + super("FreeLook", category.render); + this.registerSetting(onlyIfPressed); + } + + @Override + public void onEnable() { + viewData = new ViewData( + mc.gameSettings.thirdPersonView, + mc.thePlayer.rotationYaw, + mc.thePlayer.rotationPitch + ); + } + + @Override + public void onDisable() { + if (viewData != null) { + mc.gameSettings.thirdPersonView = viewData.thirdPersonView; + mc.thePlayer.rotationYaw = viewData.rotationYaw; + mc.thePlayer.rotationPitch = viewData.rotationPitch; + } + viewData = null; + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + public void onPreUpdate(PreUpdateEvent event) { + mc.gameSettings.thirdPersonView = 1; + if (onlyIfPressed.isToggled() && !Keyboard.isKeyDown(this.getKeycode())) { + disable(); + return; + } + + if (viewData != null) { + mc.objectMouseOver = RotationUtils.rayCast(mc.playerController.getBlockReachDistance(), viewData.rotationYaw, viewData.rotationPitch); + } + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + public void onPreMotion(PreMotionEvent event) { + if (viewData != null){ + if (event.getYaw() == mc.thePlayer.rotationYaw && event.getPitch() == mc.thePlayer.rotationPitch) { + event.setYaw(viewData.rotationYaw); + event.setPitch(viewData.rotationPitch); + } + } + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + public void onPreInput(@NotNull PrePlayerInput event) { + if (viewData != null) { + event.setYaw(viewData.rotationYaw); + } + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + public void onJump(JumpEvent event) { + if (viewData != null) { + event.setYaw(viewData.rotationYaw); + } + } + + private static class ViewData { + private final int thirdPersonView; + private final float rotationYaw; + private final float rotationPitch; + + public ViewData(int thirdPersonView, float rotationYaw, float rotationPitch) { + this.thirdPersonView = thirdPersonView; + this.rotationYaw = rotationYaw; + this.rotationPitch = rotationPitch; + } + } +} diff --git a/src/main/java/keystrokesmod/module/impl/render/HUD.java b/src/main/java/keystrokesmod/module/impl/render/HUD.java index 0842b3e1..d032d9c8 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.7.0"; + public static final String VERSION = "1.8.0"; public static ModeSetting theme; // public static SliderSetting font; // public static SliderSetting fontSize; diff --git a/src/main/java/keystrokesmod/module/impl/world/FastMine.java b/src/main/java/keystrokesmod/module/impl/world/FastMine.java index 40a3e3d5..f0b4c858 100644 --- a/src/main/java/keystrokesmod/module/impl/world/FastMine.java +++ b/src/main/java/keystrokesmod/module/impl/world/FastMine.java @@ -10,23 +10,22 @@ import keystrokesmod.utility.Utils; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; +import org.jetbrains.annotations.NotNull; import org.lwjgl.input.Mouse; public class FastMine extends Module { // from b4 src - private DescriptionSetting description; - private SliderSetting delay; + private final SliderSetting delay; public SliderSetting multiplier; - private ModeSetting mode; - private ButtonSetting creativeDisable; + private final ModeSetting mode; + private final ButtonSetting creativeDisable; private float lastCurBlockDamageMP; - private String[] modes = new String[]{"Pre", "Post", "Increment"}; public FastMine() { super("FastMine", category.world); - this.registerSetting(description = new DescriptionSetting("Default is 5 delay & 1x speed.")); + this.registerSetting(new DescriptionSetting("Default is 5 delay & 1x speed.")); this.registerSetting(delay = new SliderSetting("Break delay ticks", 5.0, 0.0, 5.0, 1.0)); this.registerSetting(multiplier = new SliderSetting("Break speed multiplier", 1.0, 1.0, 2.0, 0.02, "x")); - this.registerSetting(mode = new ModeSetting("Mode", modes, 0)); + this.registerSetting(mode = new ModeSetting("Mode", new String[]{"Pre", "Post", "Increment"}, 0)); this.registerSetting(creativeDisable = new ButtonSetting("Disable in creative", true)); } @@ -36,7 +35,7 @@ public String getInfo() { } @SubscribeEvent - public void a(TickEvent.PlayerTickEvent e) { + public void a(TickEvent.@NotNull PlayerTickEvent e) { if (e.phase != TickEvent.Phase.END || !mc.inGameHasFocus || !Utils.nullCheck()) { return; } @@ -51,8 +50,7 @@ public void a(TickEvent.PlayerTickEvent e) { } else if (Reflection.blockHitDelay.getInt(mc.playerController) > delay) { Reflection.blockHitDelay.set(mc.playerController, delay); } - } catch (IllegalAccessException ex) { - } catch (IndexOutOfBoundsException ex2) { + } catch (IllegalAccessException | IndexOutOfBoundsException ignored) { } } final double c = multiplier.getInput(); @@ -91,7 +89,7 @@ public void a(TickEvent.PlayerTickEvent e) { break; } } - } catch (IllegalAccessException | IndexOutOfBoundsException ex3) { + } catch (IllegalAccessException | IndexOutOfBoundsException | NullPointerException ignored) { } } else if (mode.getInput() == 2) { this.lastCurBlockDamageMP = 0.0f; diff --git a/src/main/java/keystrokesmod/module/impl/world/Tower.java b/src/main/java/keystrokesmod/module/impl/world/Tower.java index c1072de3..b7c7cbe6 100644 --- a/src/main/java/keystrokesmod/module/impl/world/Tower.java +++ b/src/main/java/keystrokesmod/module/impl/world/Tower.java @@ -13,6 +13,7 @@ import keystrokesmod.module.setting.utils.ModeOnly; import keystrokesmod.utility.Reflection; import keystrokesmod.utility.Utils; +import net.minecraft.network.play.client.C03PacketPlayer; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.MovingObjectPosition; @@ -59,7 +60,7 @@ public Tower() { this.registerSetting(hypixelLowHop = new ButtonSetting("Hypixel low hop", false, mode1)); this.registerSetting(hypixelTowerTest = new ButtonSetting("Hypixel tower test", false, mode1)); this.registerSetting(hypixelJumpMotion = new SliderSetting("Hypixel tower motion", 0.4, 0.2, 0.8, 0.01, () -> hypixelTowerTest.isToggled() && mode1.get())); - this.registerSetting(hypixelTowerDelay = new SliderSetting("Hypixel tower delay", 100, 0, 1000, 10, "ms", () -> hypixelTowerTest.isToggled() && mode1.get())); + this.registerSetting(hypixelTowerDelay = new SliderSetting("Hypixel tower delay", 100, 0, 2500, 10, "ms", () -> hypixelTowerTest.isToggled() && mode1.get())); this.registerSetting(disableWhileCollided = new ButtonSetting("Disable while collided", false)); this.registerSetting(disableWhileHurt = new ButtonSetting("Disable while hurt", false)); this.registerSetting(sprintJumpForward = new ButtonSetting("Sprint jump forward", true)); @@ -96,14 +97,16 @@ public void onPreMotion(PreMotionEvent e) throws IllegalAccessException { } if (toweredBlock != null) { Raven.getExecutor().schedule(() -> { + final BlockPos block = toweredBlock; if (scaffold.place(new MovingObjectPosition( - new Vec3(toweredBlock.getX() + 0.1, scaffold.placeBlock.hitVec.yCoord, scaffold.placeBlock.hitVec.zCoord), + new Vec3(block.getX(), block.getY() + 1, block.getZ() + 0.5), EnumFacing.UP, - toweredBlock), true)) { -// e.setOnGround(true); + block), true)) { + mc.thePlayer.motionY = -0.28; + mc.thePlayer.sendQueue.addToSendQueue(new C03PacketPlayer(true)); } }, (long) hypixelTowerDelay.getInput(), TimeUnit.MILLISECONDS); - mc.thePlayer.motionY = hypixelJumpMotion.getInput(); + if (offGroundTicks <= 1) mc.thePlayer.motionY = hypixelJumpMotion.getInput(); } } } else { diff --git a/src/main/java/keystrokesmod/utility/Utils.java b/src/main/java/keystrokesmod/utility/Utils.java index 50db89a5..4047e26a 100644 --- a/src/main/java/keystrokesmod/utility/Utils.java +++ b/src/main/java/keystrokesmod/utility/Utils.java @@ -74,6 +74,10 @@ public static boolean overVoid(double posX, double posY, double posZ) { return true; } + public static boolean overVoid() { + return overVoid(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ); + } + public static List getTablist() { final ArrayList list = new ArrayList<>(mc.getNetHandler().getPlayerInfoMap()); removeDuplicates((ArrayList) list); @@ -825,4 +829,13 @@ public static boolean isTargetNearby() { .filter(target -> target != mc.thePlayer) .anyMatch(target -> new keystrokesmod.script.classes.Vec3(target).distanceTo(mc.thePlayer) < 6); } + + /** + * Checks if the player is in a liquid + * + * @return in liquid + */ + public static boolean inLiquid() { + return mc.thePlayer.isInWater() || mc.thePlayer.isInLava(); + } } diff --git a/src/main/java/keystrokesmod/utility/profile/ProfileManager.java b/src/main/java/keystrokesmod/utility/profile/ProfileManager.java index 17460ad4..1bda2267 100644 --- a/src/main/java/keystrokesmod/utility/profile/ProfileManager.java +++ b/src/main/java/keystrokesmod/utility/profile/ProfileManager.java @@ -27,7 +27,7 @@ public class ProfileManager { public static Minecraft mc = Minecraft.getMinecraft(); public File directory; - public List profiles = new ArrayList<>(); + public final List profiles = new ArrayList<>(); public ProfileManager() { directory = new File(mc.mcDataDir + File.separator + "keystrokes", "profiles"); diff --git a/src/main/resources/assets/keystrokesmod/icon.png b/src/main/resources/assets/keystrokesmod/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a4623e35e0512e07d5505682617f0a0ae278538 GIT binary patch literal 31797 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 P{eapNZKayW)?xn#3t%gm literal 0 HcmV?d00001 diff --git a/src/main/resources/mixins.raven.json b/src/main/resources/mixins.raven.json index dbdeef8f..0e5c22de 100644 --- a/src/main/resources/mixins.raven.json +++ b/src/main/resources/mixins.raven.json @@ -26,9 +26,12 @@ "client.MinecraftAccessor", "client.MixinMinecraft", "client.PlayerControllerMPAccessor", + "network.MixinNetHandlerPlayClient", + "render.ItemRendererAccessor", "render.MixinEntityRenderer", "render.MixinGuiConnecting", "render.MixinGuiContainer", - "render.MixinGuiScreen" + "render.MixinGuiScreen", + "render.MixinItemRenderer" ] } \ No newline at end of file