From 7f131f6a79e1f382db92881d5f2968d09a797738 Mon Sep 17 00:00:00 2001 From: ThisTestUser Date: Sat, 28 Jan 2023 13:51:59 -0500 Subject: [PATCH 01/48] Fix jitter issues Discontinue use of applyRenderOffset --- .../java/net/wurstclient/ai/PathFinder.java | 13 +++++--- .../java/net/wurstclient/ai/PathRenderer.java | 15 +++++---- .../net/wurstclient/hacks/BowAimbotHack.java | 10 ++++-- .../net/wurstclient/hacks/ExcavatorHack.java | 32 +++++++++++-------- .../net/wurstclient/hacks/FeedAuraHack.java | 10 ++++-- .../net/wurstclient/hacks/FreecamHack.java | 18 +++++++---- .../wurstclient/hacks/InstantBunkerHack.java | 12 +++++-- .../net/wurstclient/hacks/ItemEspHack.java | 14 ++++---- .../net/wurstclient/hacks/OverlayHack.java | 9 ++++-- .../wurstclient/hacks/PlayerFinderHack.java | 15 ++++++--- .../wurstclient/hacks/ProphuntEspHack.java | 10 ++++-- .../net/wurstclient/util/RenderUtils.java | 8 ----- 12 files changed, 103 insertions(+), 63 deletions(-) diff --git a/src/main/java/net/wurstclient/ai/PathFinder.java b/src/main/java/net/wurstclient/ai/PathFinder.java index f8f76b61..5bb84d59 100644 --- a/src/main/java/net/wurstclient/ai/PathFinder.java +++ b/src/main/java/net/wurstclient/ai/PathFinder.java @@ -562,7 +562,11 @@ public class PathFinder GL11.glDepthMask(false); matrixStack.push(); - RenderUtils.applyRenderOffset(matrixStack); + RenderUtils.applyRegionalRenderOffset(matrixStack); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; matrixStack.translate(0.5, 0.5, 0.5); if(debugMode) @@ -576,7 +580,7 @@ public class PathFinder if(renderedThings >= 5000) break; - PathRenderer.renderNode(matrixStack, element); + PathRenderer.renderNode(matrixStack, element, regionX, regionZ); renderedThings++; } @@ -592,7 +596,7 @@ public class PathFinder RenderSystem.setShaderColor(1, 0, 0, 0.75F); PathRenderer.renderArrow(matrixStack, entry.getValue(), - entry.getKey()); + entry.getKey(), regionX, regionZ); renderedThings++; } } @@ -603,7 +607,8 @@ public class PathFinder else RenderSystem.setShaderColor(0, 1, 0, 0.75F); for(int i = 0; i < path.size() - 1; i++) - PathRenderer.renderArrow(matrixStack, path.get(i), path.get(i + 1)); + PathRenderer.renderArrow(matrixStack, path.get(i), path.get(i + 1), + regionX, regionZ); matrixStack.pop(); diff --git a/src/main/java/net/wurstclient/ai/PathRenderer.java b/src/main/java/net/wurstclient/ai/PathRenderer.java index 96dbfc16..8a0ad394 100644 --- a/src/main/java/net/wurstclient/ai/PathRenderer.java +++ b/src/main/java/net/wurstclient/ai/PathRenderer.java @@ -22,20 +22,20 @@ import net.minecraft.util.math.BlockPos; public final class PathRenderer { public static void renderArrow(MatrixStack matrixStack, BlockPos start, - BlockPos end) + BlockPos end, int regionX, int regionZ) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tessellator.getBuffer(); bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); - int startX = start.getX(); + int startX = start.getX() - regionX; int startY = start.getY(); - int startZ = start.getZ(); + int startZ = start.getZ() - regionZ; - int endX = end.getX(); + int endX = end.getX() - regionX; int endY = end.getY(); - int endZ = end.getZ(); + int endZ = end.getZ() - regionZ; matrixStack.push(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); @@ -96,11 +96,12 @@ public final class PathRenderer tessellator.draw(); } - public static void renderNode(MatrixStack matrixStack, BlockPos pos) + public static void renderNode(MatrixStack matrixStack, BlockPos pos, int regionX, int regionZ) { matrixStack.push(); - matrixStack.translate(pos.getX(), pos.getY(), pos.getZ()); + matrixStack.translate(pos.getX() - regionX, pos.getY(), + pos.getZ() - regionZ); matrixStack.scale(0.1F, 0.1F, 0.1F); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); diff --git a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java index f5cbb7ab..f17afc61 100644 --- a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java +++ b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java @@ -34,6 +34,7 @@ import net.minecraft.item.BowItem; import net.minecraft.item.CrossbowItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.wurstclient.Category; import net.wurstclient.SearchTags; @@ -211,10 +212,15 @@ public final class BowAimbotHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRenderOffset(matrixStack); + RenderUtils.applyRegionalRenderOffset(matrixStack); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; // set position - matrixStack.translate(target.getX(), target.getY(), target.getZ()); + matrixStack.translate(target.getX() - regionX, + target.getY(), target.getZ() - regionZ); // set size float boxWidth = target.getWidth() + 0.1F; diff --git a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java index 54ab75fb..fac8c9d7 100644 --- a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java @@ -92,9 +92,7 @@ public final class ExcavatorHack extends Hack public void onEnable() { // disable conflicting hacks - // TODO: - // WURST.getHax().bowAimbotMod.setEnabled(false); - // WURST.getHax().templateToolMod.setEnabled(false); + WURST.getHax().bowAimbotHack.setEnabled(false); WURST.getHax().autoMineHack.setEnabled(false); WURST.getHax().nukerHack.setEnabled(false); WURST.getHax().nukerLegitHack.setEnabled(false); @@ -161,7 +159,11 @@ public final class ExcavatorHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRenderOffset(matrixStack); + RenderUtils.applyRegionalRenderOffset(matrixStack); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; RenderSystem.setShader(GameRenderer::getPositionProgram); @@ -178,7 +180,8 @@ public final class ExcavatorHack extends Hack BlockPos pos = area.blocksList.get(i); matrixStack.push(); - matrixStack.translate(pos.getX(), pos.getY(), pos.getZ()); + matrixStack.translate(pos.getX() - regionX, + pos.getY(), pos.getZ() - regionZ); matrixStack.translate(-0.005, -0.005, -0.005); matrixStack.scale(1.01F, 1.01F, 1.01F); @@ -192,8 +195,8 @@ public final class ExcavatorHack extends Hack } matrixStack.push(); - matrixStack.translate(area.minX + offset, area.minY + offset, - area.minZ + offset); + matrixStack.translate(area.minX + offset - regionX, area.minY + offset, + area.minZ + offset - regionZ); matrixStack.scale(area.sizeX + scale, area.sizeY + scale, area.sizeZ + scale); @@ -230,7 +233,8 @@ public final class ExcavatorHack extends Hack continue; matrixStack.push(); - matrixStack.translate(pos.getX(), pos.getY(), pos.getZ()); + matrixStack.translate(pos.getX() - regionX, pos.getY(), + pos.getZ() - regionZ); matrixStack.translate(offset, offset, offset); matrixStack.scale(scale, scale, scale); @@ -251,8 +255,8 @@ public final class ExcavatorHack extends Hack // area box matrixStack.push(); - matrixStack.translate(preview.minX + offset, preview.minY + offset, - preview.minZ + offset); + matrixStack.translate(preview.minX + offset - regionX, preview.minY + offset, + preview.minZ + offset - regionZ); matrixStack.scale(preview.sizeX + scale, preview.sizeY + scale, preview.sizeZ + scale); RenderSystem.setShaderColor(0F, 0F, 0F, 0.5F); @@ -266,8 +270,8 @@ public final class ExcavatorHack extends Hack if(posLookingAt != null) { matrixStack.push(); - matrixStack.translate(posLookingAt.getX(), posLookingAt.getY(), - posLookingAt.getZ()); + matrixStack.translate(posLookingAt.getX() - regionX, posLookingAt.getY(), + posLookingAt.getZ() - regionZ); matrixStack.translate(offset, offset, offset); matrixStack.scale(scale, scale, scale); @@ -285,8 +289,8 @@ public final class ExcavatorHack extends Hack if(currentBlock != null) { // set position - matrixStack.translate(currentBlock.getX(), currentBlock.getY(), - currentBlock.getZ()); + matrixStack.translate(currentBlock.getX() - regionX, currentBlock.getY(), + currentBlock.getZ() - regionZ); // get progress float progress; diff --git a/src/main/java/net/wurstclient/hacks/FeedAuraHack.java b/src/main/java/net/wurstclient/hacks/FeedAuraHack.java index 62971a36..df7cc16d 100644 --- a/src/main/java/net/wurstclient/hacks/FeedAuraHack.java +++ b/src/main/java/net/wurstclient/hacks/FeedAuraHack.java @@ -167,7 +167,11 @@ public final class FeedAuraHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRenderOffset(matrixStack); + RenderUtils.applyRegionalRenderOffset(matrixStack); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; Box box = new Box(BlockPos.ORIGIN); float p = 1; @@ -178,11 +182,11 @@ public final class FeedAuraHack extends Hack matrixStack.translate( renderTarget.prevX - + (renderTarget.getX() - renderTarget.prevX) * partialTicks, + + (renderTarget.getX() - renderTarget.prevX) * partialTicks - regionX, renderTarget.prevY + (renderTarget.getY() - renderTarget.prevY) * partialTicks, renderTarget.prevZ - + (renderTarget.getZ() - renderTarget.prevZ) * partialTicks); + + (renderTarget.getZ() - renderTarget.prevZ) * partialTicks - regionZ); matrixStack.translate(0, 0.05, 0); matrixStack.scale(renderTarget.getWidth(), renderTarget.getHeight(), renderTarget.getWidth()); diff --git a/src/main/java/net/wurstclient/hacks/FreecamHack.java b/src/main/java/net/wurstclient/hacks/FreecamHack.java index fa7fa1c4..01a273d1 100644 --- a/src/main/java/net/wurstclient/hacks/FreecamHack.java +++ b/src/main/java/net/wurstclient/hacks/FreecamHack.java @@ -24,6 +24,7 @@ import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; import net.wurstclient.Category; @@ -180,15 +181,19 @@ public final class FreecamHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRenderOffset(matrixStack); + RenderUtils.applyRegionalRenderOffset(matrixStack); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; float[] colorF = color.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); // box matrixStack.push(); - matrixStack.translate(fakePlayer.getX(), fakePlayer.getY(), - fakePlayer.getZ()); + matrixStack.translate(fakePlayer.getX() - regionX, fakePlayer.getY(), + fakePlayer.getZ() - regionZ); matrixStack.scale(fakePlayer.getWidth() + 0.1F, fakePlayer.getHeight() + 0.1F, fakePlayer.getWidth() + 0.1F); Box bb = new Box(-0.5, 0, -0.5, 0.5, 1, 0.5); @@ -196,9 +201,10 @@ public final class FreecamHack extends Hack matrixStack.pop(); // line - Vec3d start = - RotationUtils.getClientLookVec().add(RenderUtils.getCameraPos()); - Vec3d end = fakePlayer.getBoundingBox().getCenter(); + Vec3d start = RotationUtils.getClientLookVec(). + add(RenderUtils.getCameraPos()).subtract(regionX, 0, regionZ); + Vec3d end = fakePlayer.getBoundingBox().getCenter() + .subtract(regionX, 0, regionZ); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); diff --git a/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java b/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java index da7f22cf..3412bc49 100644 --- a/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java +++ b/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java @@ -260,7 +260,11 @@ public final class InstantBunkerHack extends Hack GL11.glDisable(GL11.GL_CULL_FACE); matrixStack.push(); - RenderUtils.applyRenderOffset(matrixStack); + RenderUtils.applyRegionalRenderOffset(matrixStack); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; // green box { @@ -269,7 +273,8 @@ public final class InstantBunkerHack extends Hack BlockPos pos = positions.get(blockIndex); matrixStack.push(); - matrixStack.translate(pos.getX(), pos.getY(), pos.getZ()); + matrixStack.translate(pos.getX() - regionX, pos.getY(), + pos.getZ() - regionZ); matrixStack.translate(offset, offset, offset); matrixStack.scale(scale, scale, scale); @@ -286,7 +291,8 @@ public final class InstantBunkerHack extends Hack BlockPos pos = positions.get(i); matrixStack.push(); - matrixStack.translate(pos.getX(), pos.getY(), pos.getZ()); + matrixStack.translate(pos.getX() - regionX, + pos.getY(), pos.getZ() - regionZ); matrixStack.translate(offset, offset, offset); matrixStack.scale(scale, scale, scale); diff --git a/src/main/java/net/wurstclient/hacks/ItemEspHack.java b/src/main/java/net/wurstclient/hacks/ItemEspHack.java index fdd473c3..3c5eb73a 100644 --- a/src/main/java/net/wurstclient/hacks/ItemEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ItemEspHack.java @@ -173,8 +173,8 @@ public final class ItemEspHack extends Hack implements UpdateListener, BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); - Vec3d start = - RotationUtils.getClientLookVec().add(RenderUtils.getCameraPos()); + Vec3d start = RotationUtils.getClientLookVec() + .add(RenderUtils.getCameraPos()).subtract(regionX, 0, regionZ); bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); @@ -183,12 +183,12 @@ public final class ItemEspHack extends Hack implements UpdateListener, Vec3d end = e.getBoundingBox().getCenter() .subtract(new Vec3d(e.getX(), e.getY(), e.getZ()) .subtract(e.prevX, e.prevY, e.prevZ) - .multiply(1 - partialTicks)); + .multiply(1 - partialTicks)).subtract(regionX, 0, regionZ); - bufferBuilder.vertex(matrix, (float)start.x - regionX, - (float)start.y, (float)start.z - regionZ).next(); - bufferBuilder.vertex(matrix, (float)end.x - regionX, (float)end.y, - (float)end.z - regionZ).next(); + bufferBuilder.vertex(matrix, (float)start.x, (float)start.y, + (float)start.z).next(); + bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, + (float)end.z).next(); } tessellator.draw(); } diff --git a/src/main/java/net/wurstclient/hacks/OverlayHack.java b/src/main/java/net/wurstclient/hacks/OverlayHack.java index 7f19c85b..706bdfe2 100644 --- a/src/main/java/net/wurstclient/hacks/OverlayHack.java +++ b/src/main/java/net/wurstclient/hacks/OverlayHack.java @@ -63,10 +63,15 @@ public final class OverlayHack extends Hack implements RenderListener GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRenderOffset(matrixStack); + RenderUtils.applyRegionalRenderOffset(matrixStack); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; // set position - matrixStack.translate(pos.getX(), pos.getY(), pos.getZ()); + matrixStack.translate(pos.getX() - regionX, pos.getY(), + pos.getZ() - regionZ); // get progress float progress = diff --git a/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java b/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java index 2266921d..2c554868 100644 --- a/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java @@ -89,7 +89,11 @@ public final class PlayerFinderHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRenderOffset(matrixStack); + RenderUtils.applyRegionalRenderOffset(matrixStack); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; float[] rainbow = RenderUtils.getRainbowColor(); RenderSystem.setShaderColor(rainbow[0], rainbow[1], rainbow[2], 0.5F); @@ -104,11 +108,11 @@ public final class PlayerFinderHack extends Hack VertexFormats.POSITION); // set start position - Vec3d start = - RotationUtils.getClientLookVec().add(RenderUtils.getCameraPos()); + Vec3d start = RotationUtils.getClientLookVec(). + add(RenderUtils.getCameraPos()).subtract(regionX, 0, regionZ); // set end position - Vec3d end = Vec3d.ofCenter(pos); + Vec3d end = Vec3d.ofCenter(pos).subtract(regionX, 0, regionZ); // draw line bufferBuilder @@ -122,7 +126,8 @@ public final class PlayerFinderHack extends Hack // block box { matrixStack.push(); - matrixStack.translate(pos.getX(), pos.getY(), pos.getZ()); + matrixStack.translate(pos.getX() - regionX, pos.getY(), + pos.getZ() - regionZ); RenderUtils.drawOutlinedBox(matrixStack); diff --git a/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java b/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java index 1896c404..9b42bbbb 100644 --- a/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java @@ -14,6 +14,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; import net.minecraft.entity.mob.MobEntity; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.math.MathHelper; import net.wurstclient.Category; @@ -57,7 +58,11 @@ public final class ProphuntEspHack extends Hack implements RenderListener GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRenderOffset(matrixStack); + RenderUtils.applyRegionalRenderOffset(matrixStack); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; // set color float alpha = 0.5F + 0.25F * MathHelper @@ -77,7 +82,8 @@ public final class ProphuntEspHack extends Hack implements RenderListener continue; matrixStack.push(); - matrixStack.translate(entity.getX(), entity.getY(), entity.getZ()); + matrixStack.translate(entity.getX() - regionX, entity.getY(), + entity.getZ() - regionZ); RenderUtils.drawOutlinedBox(FAKE_BLOCK_BOX, matrixStack); RenderUtils.drawSolidBox(FAKE_BLOCK_BOX, matrixStack); diff --git a/src/main/java/net/wurstclient/util/RenderUtils.java b/src/main/java/net/wurstclient/util/RenderUtils.java index d87fa4d6..47bac6e4 100644 --- a/src/main/java/net/wurstclient/util/RenderUtils.java +++ b/src/main/java/net/wurstclient/util/RenderUtils.java @@ -49,14 +49,6 @@ public enum RenderUtils GL11.glScissor(scissorX, scissorY, scissorWidth, scissorHeight); } - public static void applyRenderOffset(MatrixStack matrixStack) - { - applyCameraRotationOnly(); - Vec3d camPos = getCameraPos(); - - matrixStack.translate(-camPos.x, -camPos.y, -camPos.z); - } - public static void applyRegionalRenderOffset(MatrixStack matrixStack) { applyCameraRotationOnly(); From 0d7ceb4f5588d5d43f8605bc51fe275a267e82fb Mon Sep 17 00:00:00 2001 From: ThisTestUser Date: Sun, 29 Jan 2023 11:17:07 -0500 Subject: [PATCH 02/48] Fix FeedAura using entity health for ESP --- .../net/wurstclient/hacks/FeedAuraHack.java | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/FeedAuraHack.java b/src/main/java/net/wurstclient/hacks/FeedAuraHack.java index df7cc16d..2e7dc09d 100644 --- a/src/main/java/net/wurstclient/hacks/FeedAuraHack.java +++ b/src/main/java/net/wurstclient/hacks/FeedAuraHack.java @@ -174,12 +174,6 @@ public final class FeedAuraHack extends Hack int regionZ = (camPos.getZ() >> 9) * 512; Box box = new Box(BlockPos.ORIGIN); - float p = 1; - LivingEntity le = renderTarget; - p = (le.getMaxHealth() - le.getHealth()) / le.getMaxHealth(); - float red = p * 2F; - float green = 2 - red; - matrixStack.translate( renderTarget.prevX + (renderTarget.getX() - renderTarget.prevX) * partialTicks - regionX, @@ -192,19 +186,12 @@ public final class FeedAuraHack extends Hack renderTarget.getWidth()); matrixStack.translate(-0.5, 0, -0.5); - if(p < 1) - { - matrixStack.translate(0.5, 0.5, 0.5); - matrixStack.scale(p, p, p); - matrixStack.translate(-0.5, -0.5, -0.5); - } - RenderSystem.setShader(GameRenderer::getPositionProgram); - RenderSystem.setShaderColor(red, green, 0, 0.25F); + RenderSystem.setShaderColor(1, 0, 0, 0.25F); RenderUtils.drawSolidBox(box, matrixStack); - RenderSystem.setShaderColor(red, green, 0, 0.5F); + RenderSystem.setShaderColor(1, 0, 0, 0.5F); RenderUtils.drawOutlinedBox(box, matrixStack); matrixStack.pop(); From 88711cf1a5270b5f9c0e9ba2cf9d9148e7b58743 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 5 May 2023 19:37:56 +0200 Subject: [PATCH 03/48] Fix Parkour not working with boats --- src/main/java/net/wurstclient/hacks/ParkourHack.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/ParkourHack.java b/src/main/java/net/wurstclient/hacks/ParkourHack.java index 8be84195..c5cfb792 100644 --- a/src/main/java/net/wurstclient/hacks/ParkourHack.java +++ b/src/main/java/net/wurstclient/hacks/ParkourHack.java @@ -7,10 +7,7 @@ */ package net.wurstclient.hacks; -import java.util.stream.Stream; - import net.minecraft.util.math.Box; -import net.minecraft.util.shape.VoxelShape; import net.wurstclient.Category; import net.wurstclient.events.UpdateListener; import net.wurstclient.hack.Hack; @@ -64,10 +61,7 @@ public final class ParkourHack extends Hack implements UpdateListener Box adjustedBox = box.stretch(0, -minDepth.getValue(), 0) .expand(-edgeDistance.getValue(), 0, -edgeDistance.getValue()); - Stream blockCollisions = - IMC.getWorld().getBlockCollisionsStream(MC.player, adjustedBox); - - if(blockCollisions.findAny().isPresent()) + if(!MC.world.isSpaceEmpty(MC.player, adjustedBox)) return; MC.player.jump(); From 51e8e2d148f03fdc47b1e35bf14ee1dd715380d1 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 5 May 2023 21:43:47 +0200 Subject: [PATCH 04/48] Add edge distance setting to SafeWalk --- .../net/wurstclient/hacks/SafeWalkHack.java | 29 +++++++++++++------ .../mixin/ClientPlayerEntityMixin.java | 7 +++++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/SafeWalkHack.java b/src/main/java/net/wurstclient/hacks/SafeWalkHack.java index a94acccf..745d5965 100644 --- a/src/main/java/net/wurstclient/hacks/SafeWalkHack.java +++ b/src/main/java/net/wurstclient/hacks/SafeWalkHack.java @@ -15,6 +15,8 @@ import net.wurstclient.SearchTags; import net.wurstclient.hack.Hack; import net.wurstclient.mixinterface.IKeyBinding; import net.wurstclient.settings.CheckboxSetting; +import net.wurstclient.settings.SliderSetting; +import net.wurstclient.settings.SliderSetting.ValueDisplay; @SearchTags({"safe walk"}) public final class SafeWalkHack extends Hack @@ -22,6 +24,12 @@ public final class SafeWalkHack extends Hack private final CheckboxSetting sneak = new CheckboxSetting("Sneak at edges", "Visibly sneak at edges.", false); + private final SliderSetting edgeDistance = new SliderSetting( + "Sneak edge distance", + "How close SafeWalk will let you get to the edge before sneaking.\n\n" + + "This setting is only used when \"Sneak at edges\" is enabled.", + 0.05, 0.05, 0.25, 0.001, ValueDisplay.DECIMAL.withSuffix("m")); + private boolean sneaking; public SafeWalkHack() @@ -29,6 +37,7 @@ public final class SafeWalkHack extends Hack super("SafeWalk"); setCategory(Category.MOVEMENT); addSetting(sneak); + addSetting(edgeDistance); } @Override @@ -47,7 +56,9 @@ public final class SafeWalkHack extends Hack public void onClipAtLedge(boolean clipping) { - if(!isEnabled() || !sneak.isChecked() || !MC.player.isOnGround()) + ClientPlayerEntity player = MC.player; + + if(!isEnabled() || !sneak.isChecked() || !player.isOnGround()) { if(sneaking) setSneaking(false); @@ -55,15 +66,13 @@ public final class SafeWalkHack extends Hack return; } - ClientPlayerEntity player = MC.player; - Box bb = player.getBoundingBox(); - float stepHeight = player.stepHeight; + Box box = player.getBoundingBox(); + Box adjustedBox = box.stretch(0, -player.stepHeight, 0) + .expand(-edgeDistance.getValue(), 0, -edgeDistance.getValue()); + + if(MC.world.isSpaceEmpty(player, adjustedBox)) + clipping = true; - for(double x = -0.05; x <= 0.05; x += 0.05) - for(double z = -0.05; z <= 0.05; z += 0.05) - if(MC.world.isSpaceEmpty(player, bb.offset(x, -stepHeight, z))) - clipping = true; - setSneaking(clipping); } @@ -78,4 +87,6 @@ public final class SafeWalkHack extends Hack this.sneaking = sneaking; } + + // See ClientPlayerEntityMixin } diff --git a/src/main/java/net/wurstclient/mixin/ClientPlayerEntityMixin.java b/src/main/java/net/wurstclient/mixin/ClientPlayerEntityMixin.java index b673fc7b..005bde80 100644 --- a/src/main/java/net/wurstclient/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/net/wurstclient/mixin/ClientPlayerEntityMixin.java @@ -201,6 +201,9 @@ public class ClientPlayerEntityMixin extends AbstractClientPlayerEntity .getAdditionalJumpMotion(); } + /** + * This is the part that makes SafeWalk work. + */ @Override protected boolean clipAtLedge() { @@ -208,6 +211,10 @@ public class ClientPlayerEntityMixin extends AbstractClientPlayerEntity || WurstClient.INSTANCE.getHax().safeWalkHack.isEnabled(); } + /** + * This mixin allows SafeWalk to sneak visibly when the player is + * near a ledge. + */ @Override protected Vec3d adjustMovementForSneaking(Vec3d movement, MovementType type) { From d67acaa238bb63dc03239ba3cb271c6ff72eb873 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 5 May 2023 21:57:18 +0200 Subject: [PATCH 05/48] Change version to 7.34 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index fbaa569d..5ef3bc12 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ loader_version=0.14.19 fabric_version=0.80.0+1.19.4 # Mod Properties -mod_version = v7.33-MC1.19.4 +mod_version = v7.34-MC1.19.4 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 2015ea67..443d8650 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -56,7 +56,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.33"; + public static final String VERSION = "7.34"; public static final String MC_VERSION = "1.19.4"; private WurstAnalytics analytics; From 9ab8243b293e0c3e59b2229771847ede0bfc688b Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 7 May 2023 17:47:34 +0200 Subject: [PATCH 06/48] Fix Step legit mode not working below y=-2 --- src/main/java/net/wurstclient/hacks/StepHack.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/hacks/StepHack.java b/src/main/java/net/wurstclient/hacks/StepHack.java index b67f69ce..0a50087c 100644 --- a/src/main/java/net/wurstclient/hacks/StepHack.java +++ b/src/main/java/net/wurstclient/hacks/StepHack.java @@ -87,7 +87,7 @@ public final class StepHack extends Hack implements UpdateListener if(!MC.world.isSpaceEmpty(player, box.offset(0, 1, 0))) return; - double stepHeight = -1; + double stepHeight = Double.NEGATIVE_INFINITY; ArrayList blockCollisions = IMC.getWorld().getBlockCollisionsStream(player, box) From cc6c2cc70103e2fd8c3e3ebb94937fb88ad60d47 Mon Sep 17 00:00:00 2001 From: IUDevman <58370012+IUDevman@users.noreply.github.com> Date: Sun, 7 May 2023 17:47:29 -0500 Subject: [PATCH 07/48] Added AntiEntityPush --- .../VelocityFromEntityCollisionListener.java | 54 +++++++++++++++++++ .../java/net/wurstclient/hack/HackList.java | 1 + .../wurstclient/hacks/AntiEntityPushHack.java | 43 +++++++++++++++ .../net/wurstclient/mixin/EntityMixin.java | 17 ++++++ .../resources/assets/wurst/lang/en_us.json | 3 +- 5 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/wurstclient/events/VelocityFromEntityCollisionListener.java create mode 100644 src/main/java/net/wurstclient/hacks/AntiEntityPushHack.java diff --git a/src/main/java/net/wurstclient/events/VelocityFromEntityCollisionListener.java b/src/main/java/net/wurstclient/events/VelocityFromEntityCollisionListener.java new file mode 100644 index 00000000..876a8fbe --- /dev/null +++ b/src/main/java/net/wurstclient/events/VelocityFromEntityCollisionListener.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2014-2023 Wurst-Imperium and contributors. + * + * This source code is subject to the terms of the GNU General Public + * License, version 3. If a copy of the GPL was not distributed with this + * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt + */ +package net.wurstclient.events; + +import net.minecraft.entity.Entity; +import net.wurstclient.event.CancellableEvent; +import net.wurstclient.event.Listener; + +import java.util.ArrayList; + +public interface VelocityFromEntityCollisionListener extends Listener +{ + + public void onVelocityFromEntityCollision(VelocityFromEntityCollisionEvent event); + + public static class VelocityFromEntityCollisionEvent + extends CancellableEvent + { + private final Entity entity; + + public VelocityFromEntityCollisionEvent(Entity entity) + { + this.entity = entity; + } + + public Entity getEntity() + { + return entity; + } + + @Override + public void fire(ArrayList listeners) + { + for (VelocityFromEntityCollisionListener listener : listeners) + { + listener.onVelocityFromEntityCollision(this); + + if (isCancelled()) + break; + } + } + + @Override + public Class getListenerType() + { + return VelocityFromEntityCollisionListener.class; + } + } +} diff --git a/src/main/java/net/wurstclient/hack/HackList.java b/src/main/java/net/wurstclient/hack/HackList.java index a43ce416..dca3082a 100644 --- a/src/main/java/net/wurstclient/hack/HackList.java +++ b/src/main/java/net/wurstclient/hack/HackList.java @@ -34,6 +34,7 @@ public final class HackList implements UpdateListener public final AntiAfkHack antiAfkHack = new AntiAfkHack(); public final AntiBlindHack antiBlindHack = new AntiBlindHack(); public final AntiCactusHack antiCactusHack = new AntiCactusHack(); + public final AntiEntityPushHack antiEntityPushHack = new AntiEntityPushHack(); public final AntiHungerHack antiHungerHack = new AntiHungerHack(); public final AntiKnockbackHack antiKnockbackHack = new AntiKnockbackHack(); public final AntiSpamHack antiSpamHack = new AntiSpamHack(); diff --git a/src/main/java/net/wurstclient/hacks/AntiEntityPushHack.java b/src/main/java/net/wurstclient/hacks/AntiEntityPushHack.java new file mode 100644 index 00000000..833c5966 --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/AntiEntityPushHack.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014-2023 Wurst-Imperium and contributors. + * + * This source code is subject to the terms of the GNU General Public + * License, version 3. If a copy of the GPL was not distributed with this + * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt + */ +package net.wurstclient.hacks; + +import net.wurstclient.Category; +import net.wurstclient.SearchTags; +import net.wurstclient.events.VelocityFromEntityCollisionListener; +import net.wurstclient.hack.Hack; + +@SearchTags({"anti entity push", "NoEntityPush", "no entity push"}) +public final class AntiEntityPushHack extends Hack implements VelocityFromEntityCollisionListener +{ + + public AntiEntityPushHack() + { + super("AntiEntityPush"); + setCategory(Category.MOVEMENT); + } + + @Override + protected void onEnable() + { + EVENTS.add(VelocityFromEntityCollisionListener.class, this); + } + + @Override + protected void onDisable() + { + EVENTS.remove(VelocityFromEntityCollisionListener.class, this); + } + + @Override + public void onVelocityFromEntityCollision(VelocityFromEntityCollisionEvent event) + { + if (event.getEntity() == MC.player) + event.cancel(); + } +} diff --git a/src/main/java/net/wurstclient/mixin/EntityMixin.java b/src/main/java/net/wurstclient/mixin/EntityMixin.java index c02a15b5..dc8c712d 100644 --- a/src/main/java/net/wurstclient/mixin/EntityMixin.java +++ b/src/main/java/net/wurstclient/mixin/EntityMixin.java @@ -10,6 +10,7 @@ package net.wurstclient.mixin; import org.objectweb.asm.Opcodes; 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.Redirect; import net.minecraft.entity.Entity; @@ -18,6 +19,9 @@ import net.minecraft.util.Nameable; import net.minecraft.util.math.Vec3d; import net.wurstclient.event.EventManager; import net.wurstclient.events.VelocityFromFluidListener.VelocityFromFluidEvent; +import net.wurstclient.events.VelocityFromEntityCollisionListener.VelocityFromEntityCollisionEvent; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Entity.class) public abstract class EntityMixin implements Nameable, CommandOutput @@ -36,4 +40,17 @@ public abstract class EntityMixin implements Nameable, CommandOutput if(!event.isCancelled()) entity.setVelocity(velocity); } + + @Inject(at = @At("HEAD"), + method = "Lnet/minecraft/entity/Entity;pushAwayFrom(Lnet/minecraft/entity/Entity;)V", + cancellable = true) + private void onPushAwayFrom(Entity entity, CallbackInfo ci) + { + VelocityFromEntityCollisionEvent event = + new VelocityFromEntityCollisionEvent((Entity)(Object)this); + EventManager.fire(event); + + if(event.isCancelled()) + ci.cancel(); + } } diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index 3a7c630d..5cdc338a 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -5,8 +5,9 @@ "description.wurst.hack.antiafk": "Walks around randomly to hide you from AFK detectors.\nNeeds at least 3x3 blocks of free space.", "description.wurst.hack.antiblind": "Prevents blindness and darkness effects.\nIncompatible with OptiFine.", "description.wurst.hack.anticactus": "Protects you from cactus damage.", + "description.wurst.hack.antientitypush": "Prevents you from getting pushed by players and mobs.", "description.wurst.hack.antihunger": "Slows down your hunger when you are walking.", - "description.wurst.hack.antiknockback": "Prevents you from getting pushed by players and mobs.", + "description.wurst.hack.antiknockback": "Prevents you from taking knockback from players and mobs.", "description.wurst.hack.antispam": "Blocks chat spam by adding a counter to repeated messages.", "description.wurst.hack.antiwaterpush": "Prevents you from getting pushed by water.", "description.wurst.hack.antiwobble": "Disables the wobble effect caused by nausea and portals.", From 38324034de8ee7a0172ba64c5fde5e8f21fbd55b Mon Sep 17 00:00:00 2001 From: IUDevman <58370012+IUDevman@users.noreply.github.com> Date: Sun, 7 May 2023 17:53:16 -0500 Subject: [PATCH 08/48] Update EntityMixin.java --- src/main/java/net/wurstclient/mixin/EntityMixin.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/net/wurstclient/mixin/EntityMixin.java b/src/main/java/net/wurstclient/mixin/EntityMixin.java index dc8c712d..83152202 100644 --- a/src/main/java/net/wurstclient/mixin/EntityMixin.java +++ b/src/main/java/net/wurstclient/mixin/EntityMixin.java @@ -21,7 +21,6 @@ import net.wurstclient.event.EventManager; import net.wurstclient.events.VelocityFromFluidListener.VelocityFromFluidEvent; import net.wurstclient.events.VelocityFromEntityCollisionListener.VelocityFromEntityCollisionEvent; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Entity.class) public abstract class EntityMixin implements Nameable, CommandOutput From ca85c8ab34f40d98c9adcecfa7de116b1e69292f Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 8 May 2023 20:47:34 +0200 Subject: [PATCH 09/48] Clean up --- .../VelocityFromEntityCollisionListener.java | 77 ++++++++++--------- .../java/net/wurstclient/hack/HackList.java | 3 +- .../wurstclient/hacks/AntiEntityPushHack.java | 53 ++++++------- .../net/wurstclient/mixin/EntityMixin.java | 10 +-- 4 files changed, 73 insertions(+), 70 deletions(-) diff --git a/src/main/java/net/wurstclient/events/VelocityFromEntityCollisionListener.java b/src/main/java/net/wurstclient/events/VelocityFromEntityCollisionListener.java index 876a8fbe..9e08a725 100644 --- a/src/main/java/net/wurstclient/events/VelocityFromEntityCollisionListener.java +++ b/src/main/java/net/wurstclient/events/VelocityFromEntityCollisionListener.java @@ -7,48 +7,49 @@ */ package net.wurstclient.events; +import java.util.ArrayList; + import net.minecraft.entity.Entity; import net.wurstclient.event.CancellableEvent; import net.wurstclient.event.Listener; -import java.util.ArrayList; - public interface VelocityFromEntityCollisionListener extends Listener { - - public void onVelocityFromEntityCollision(VelocityFromEntityCollisionEvent event); - - public static class VelocityFromEntityCollisionEvent - extends CancellableEvent - { - private final Entity entity; - - public VelocityFromEntityCollisionEvent(Entity entity) - { - this.entity = entity; - } - - public Entity getEntity() - { - return entity; - } - - @Override - public void fire(ArrayList listeners) - { - for (VelocityFromEntityCollisionListener listener : listeners) - { - listener.onVelocityFromEntityCollision(this); - - if (isCancelled()) - break; - } - } - - @Override - public Class getListenerType() - { - return VelocityFromEntityCollisionListener.class; - } - } + public void onVelocityFromEntityCollision( + VelocityFromEntityCollisionEvent event); + + public static class VelocityFromEntityCollisionEvent + extends CancellableEvent + { + private final Entity entity; + + public VelocityFromEntityCollisionEvent(Entity entity) + { + this.entity = entity; + } + + public Entity getEntity() + { + return entity; + } + + @Override + public void fire( + ArrayList listeners) + { + for(VelocityFromEntityCollisionListener listener : listeners) + { + listener.onVelocityFromEntityCollision(this); + + if(isCancelled()) + break; + } + } + + @Override + public Class getListenerType() + { + return VelocityFromEntityCollisionListener.class; + } + } } diff --git a/src/main/java/net/wurstclient/hack/HackList.java b/src/main/java/net/wurstclient/hack/HackList.java index dca3082a..97a2c386 100644 --- a/src/main/java/net/wurstclient/hack/HackList.java +++ b/src/main/java/net/wurstclient/hack/HackList.java @@ -34,7 +34,8 @@ public final class HackList implements UpdateListener public final AntiAfkHack antiAfkHack = new AntiAfkHack(); public final AntiBlindHack antiBlindHack = new AntiBlindHack(); public final AntiCactusHack antiCactusHack = new AntiCactusHack(); - public final AntiEntityPushHack antiEntityPushHack = new AntiEntityPushHack(); + public final AntiEntityPushHack antiEntityPushHack = + new AntiEntityPushHack(); public final AntiHungerHack antiHungerHack = new AntiHungerHack(); public final AntiKnockbackHack antiKnockbackHack = new AntiKnockbackHack(); public final AntiSpamHack antiSpamHack = new AntiSpamHack(); diff --git a/src/main/java/net/wurstclient/hacks/AntiEntityPushHack.java b/src/main/java/net/wurstclient/hacks/AntiEntityPushHack.java index 833c5966..cb714383 100644 --- a/src/main/java/net/wurstclient/hacks/AntiEntityPushHack.java +++ b/src/main/java/net/wurstclient/hacks/AntiEntityPushHack.java @@ -13,31 +13,32 @@ import net.wurstclient.events.VelocityFromEntityCollisionListener; import net.wurstclient.hack.Hack; @SearchTags({"anti entity push", "NoEntityPush", "no entity push"}) -public final class AntiEntityPushHack extends Hack implements VelocityFromEntityCollisionListener +public final class AntiEntityPushHack extends Hack + implements VelocityFromEntityCollisionListener { - - public AntiEntityPushHack() - { - super("AntiEntityPush"); - setCategory(Category.MOVEMENT); - } - - @Override - protected void onEnable() - { - EVENTS.add(VelocityFromEntityCollisionListener.class, this); - } - - @Override - protected void onDisable() - { - EVENTS.remove(VelocityFromEntityCollisionListener.class, this); - } - - @Override - public void onVelocityFromEntityCollision(VelocityFromEntityCollisionEvent event) - { - if (event.getEntity() == MC.player) - event.cancel(); - } + public AntiEntityPushHack() + { + super("AntiEntityPush"); + setCategory(Category.MOVEMENT); + } + + @Override + protected void onEnable() + { + EVENTS.add(VelocityFromEntityCollisionListener.class, this); + } + + @Override + protected void onDisable() + { + EVENTS.remove(VelocityFromEntityCollisionListener.class, this); + } + + @Override + public void onVelocityFromEntityCollision( + VelocityFromEntityCollisionEvent event) + { + if(event.getEntity() == MC.player) + event.cancel(); + } } diff --git a/src/main/java/net/wurstclient/mixin/EntityMixin.java b/src/main/java/net/wurstclient/mixin/EntityMixin.java index 83152202..a0de4770 100644 --- a/src/main/java/net/wurstclient/mixin/EntityMixin.java +++ b/src/main/java/net/wurstclient/mixin/EntityMixin.java @@ -12,15 +12,15 @@ 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.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import net.minecraft.entity.Entity; import net.minecraft.server.command.CommandOutput; import net.minecraft.util.Nameable; import net.minecraft.util.math.Vec3d; import net.wurstclient.event.EventManager; -import net.wurstclient.events.VelocityFromFluidListener.VelocityFromFluidEvent; import net.wurstclient.events.VelocityFromEntityCollisionListener.VelocityFromEntityCollisionEvent; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import net.wurstclient.events.VelocityFromFluidListener.VelocityFromFluidEvent; @Mixin(Entity.class) public abstract class EntityMixin implements Nameable, CommandOutput @@ -39,16 +39,16 @@ public abstract class EntityMixin implements Nameable, CommandOutput if(!event.isCancelled()) entity.setVelocity(velocity); } - + @Inject(at = @At("HEAD"), method = "Lnet/minecraft/entity/Entity;pushAwayFrom(Lnet/minecraft/entity/Entity;)V", cancellable = true) private void onPushAwayFrom(Entity entity, CallbackInfo ci) { VelocityFromEntityCollisionEvent event = - new VelocityFromEntityCollisionEvent((Entity)(Object)this); + new VelocityFromEntityCollisionEvent((Entity)(Object)this); EventManager.fire(event); - + if(event.isCancelled()) ci.cancel(); } From aee8e75e79e7a8cdc737201b95a0fa86b37e0c9f Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 8 May 2023 20:52:22 +0200 Subject: [PATCH 10/48] ContainerScreen54 -> GenericContainerScreen --- ...nerScreen54Mixin.java => GenericContainerScreenMixin.java} | 4 ++-- src/main/resources/wurst.mixins.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/main/java/net/wurstclient/mixin/{ContainerScreen54Mixin.java => GenericContainerScreenMixin.java} (96%) diff --git a/src/main/java/net/wurstclient/mixin/ContainerScreen54Mixin.java b/src/main/java/net/wurstclient/mixin/GenericContainerScreenMixin.java similarity index 96% rename from src/main/java/net/wurstclient/mixin/ContainerScreen54Mixin.java rename to src/main/java/net/wurstclient/mixin/GenericContainerScreenMixin.java index 4f29aafb..4ef08b15 100644 --- a/src/main/java/net/wurstclient/mixin/ContainerScreen54Mixin.java +++ b/src/main/java/net/wurstclient/mixin/GenericContainerScreenMixin.java @@ -24,7 +24,7 @@ import net.wurstclient.WurstClient; import net.wurstclient.hacks.AutoStealHack; @Mixin(GenericContainerScreen.class) -public abstract class ContainerScreen54Mixin +public abstract class GenericContainerScreenMixin extends HandledScreen implements ScreenHandlerProvider { @@ -36,7 +36,7 @@ public abstract class ContainerScreen54Mixin WurstClient.INSTANCE.getHax().autoStealHack; private int mode; - public ContainerScreen54Mixin(WurstClient wurst, + public GenericContainerScreenMixin(WurstClient wurst, GenericContainerScreenHandler container, PlayerInventory playerInventory, Text name) { diff --git a/src/main/resources/wurst.mixins.json b/src/main/resources/wurst.mixins.json index 0bdd327d..e8a7224b 100644 --- a/src/main/resources/wurst.mixins.json +++ b/src/main/resources/wurst.mixins.json @@ -23,7 +23,6 @@ "ClientPlayerEntityMixin", "ClientPlayerInteractionManagerMixin", "ClientPlayNetworkHandlerMixin", - "ContainerScreen54Mixin", "CreativeInventoryScreenMixin", "CustomPayloadC2SPacketAccessor", "DeathScreenMixin", @@ -36,6 +35,7 @@ "FluidRendererMixin", "GameMenuScreenMixin", "GameRendererMixin", + "GenericContainerScreenMixin", "IngameHudMixin", "InGameOverlayRendererMixin", "KeyBindingMixin", From b29c38bc26ce83e413a315a09f189a0e1849e8d0 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 10 May 2023 12:27:36 +0200 Subject: [PATCH 11/48] Revert FeedAura change --- .../java/net/wurstclient/hacks/FeedAuraHack.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/FeedAuraHack.java b/src/main/java/net/wurstclient/hacks/FeedAuraHack.java index 9bdc80b9..74173699 100644 --- a/src/main/java/net/wurstclient/hacks/FeedAuraHack.java +++ b/src/main/java/net/wurstclient/hacks/FeedAuraHack.java @@ -20,6 +20,7 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerInteractionManager; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.passive.AbstractHorseEntity; import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.passive.TameableEntity; @@ -198,6 +199,11 @@ public final class FeedAuraHack extends Hack int regionZ = (camPos.getZ() >> 9) * 512; Box box = new Box(BlockPos.ORIGIN); + float p = 1; + LivingEntity le = renderTarget; + p = (le.getMaxHealth() - le.getHealth()) / le.getMaxHealth(); + float green = p * 2F; + float red = 2 - green; matrixStack.translate( MathHelper.lerp(partialTicks, renderTarget.prevX, @@ -212,12 +218,16 @@ public final class FeedAuraHack extends Hack renderTarget.getWidth()); matrixStack.translate(-0.5, 0, -0.5); + matrixStack.translate(0.5, 0.5, 0.5); + matrixStack.scale(p, p, p); + matrixStack.translate(-0.5, -0.5, -0.5); + RenderSystem.setShader(GameRenderer::getPositionProgram); - RenderSystem.setShaderColor(1, 0, 0, 0.25F); + RenderSystem.setShaderColor(red, green, 0, 0.25F); RenderUtils.drawSolidBox(box, matrixStack); - RenderSystem.setShaderColor(1, 0, 0, 0.5F); + RenderSystem.setShaderColor(red, green, 0, 0.5F); RenderUtils.drawOutlinedBox(box, matrixStack); matrixStack.pop(); From f8a6274db34220be1197e47a2d9f8ddaab4cd5bc Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 10 May 2023 12:27:47 +0200 Subject: [PATCH 12/48] Revert RenderUtils --- src/main/java/net/wurstclient/util/RenderUtils.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/net/wurstclient/util/RenderUtils.java b/src/main/java/net/wurstclient/util/RenderUtils.java index 6f8a00d2..06674d97 100644 --- a/src/main/java/net/wurstclient/util/RenderUtils.java +++ b/src/main/java/net/wurstclient/util/RenderUtils.java @@ -53,6 +53,14 @@ public enum RenderUtils GL11.glScissor(scissorX, scissorY, scissorWidth, scissorHeight); } + public static void applyRenderOffset(MatrixStack matrixStack) + { + applyCameraRotationOnly(); + Vec3d camPos = getCameraPos(); + + matrixStack.translate(-camPos.x, -camPos.y, -camPos.z); + } + public static void applyRegionalRenderOffset(MatrixStack matrixStack) { applyCameraRotationOnly(); From 861a16218faae235d0e8109ae5315ea087a1d81f Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 10 May 2023 12:35:24 +0200 Subject: [PATCH 13/48] Clean up --- .../java/net/wurstclient/ai/PathRenderer.java | 3 ++- .../net/wurstclient/hacks/BowAimbotHack.java | 4 ++-- .../net/wurstclient/hacks/ExcavatorHack.java | 20 +++++++++---------- .../net/wurstclient/hacks/FreecamHack.java | 9 +++++---- .../wurstclient/hacks/InstantBunkerHack.java | 5 +++-- .../net/wurstclient/hacks/ItemEspHack.java | 13 +++++++----- .../wurstclient/hacks/PlayerFinderHack.java | 5 +++-- 7 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/wurstclient/ai/PathRenderer.java b/src/main/java/net/wurstclient/ai/PathRenderer.java index a0414b87..909abae0 100644 --- a/src/main/java/net/wurstclient/ai/PathRenderer.java +++ b/src/main/java/net/wurstclient/ai/PathRenderer.java @@ -98,7 +98,8 @@ public final class PathRenderer tessellator.draw(); } - public static void renderNode(MatrixStack matrixStack, BlockPos pos, int regionX, int regionZ) + public static void renderNode(MatrixStack matrixStack, BlockPos pos, + int regionX, int regionZ) { matrixStack.push(); diff --git a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java index 06581ccf..7e014ad3 100644 --- a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java +++ b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java @@ -217,8 +217,8 @@ public final class BowAimbotHack extends Hack int regionZ = (camPos.getZ() >> 9) * 512; // set position - matrixStack.translate(target.getX() - regionX, - target.getY(), target.getZ() - regionZ); + matrixStack.translate(target.getX() - regionX, target.getY(), + target.getZ() - regionZ); // set size float boxWidth = target.getWidth() + 0.1F; diff --git a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java index 1a4752e8..e5367c4f 100644 --- a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java @@ -181,8 +181,8 @@ public final class ExcavatorHack extends Hack BlockPos pos = area.blocksList.get(i); matrixStack.push(); - matrixStack.translate(pos.getX() - regionX, - pos.getY(), pos.getZ() - regionZ); + matrixStack.translate(pos.getX() - regionX, pos.getY(), + pos.getZ() - regionZ); matrixStack.translate(-0.005, -0.005, -0.005); matrixStack.scale(1.01F, 1.01F, 1.01F); @@ -196,8 +196,8 @@ public final class ExcavatorHack extends Hack } matrixStack.push(); - matrixStack.translate(area.minX + offset - regionX, area.minY + offset, - area.minZ + offset - regionZ); + matrixStack.translate(area.minX + offset - regionX, + area.minY + offset, area.minZ + offset - regionZ); matrixStack.scale(area.sizeX + scale, area.sizeY + scale, area.sizeZ + scale); @@ -256,8 +256,8 @@ public final class ExcavatorHack extends Hack // area box matrixStack.push(); - matrixStack.translate(preview.minX + offset - regionX, preview.minY + offset, - preview.minZ + offset - regionZ); + matrixStack.translate(preview.minX + offset - regionX, + preview.minY + offset, preview.minZ + offset - regionZ); matrixStack.scale(preview.sizeX + scale, preview.sizeY + scale, preview.sizeZ + scale); RenderSystem.setShaderColor(0F, 0F, 0F, 0.5F); @@ -271,8 +271,8 @@ public final class ExcavatorHack extends Hack if(posLookingAt != null) { matrixStack.push(); - matrixStack.translate(posLookingAt.getX() - regionX, posLookingAt.getY(), - posLookingAt.getZ() - regionZ); + matrixStack.translate(posLookingAt.getX() - regionX, + posLookingAt.getY(), posLookingAt.getZ() - regionZ); matrixStack.translate(offset, offset, offset); matrixStack.scale(scale, scale, scale); @@ -290,8 +290,8 @@ public final class ExcavatorHack extends Hack if(currentBlock != null) { // set position - matrixStack.translate(currentBlock.getX() - regionX, currentBlock.getY(), - currentBlock.getZ() - regionZ); + matrixStack.translate(currentBlock.getX() - regionX, + currentBlock.getY(), currentBlock.getZ() - regionZ); // get progress float progress; diff --git a/src/main/java/net/wurstclient/hacks/FreecamHack.java b/src/main/java/net/wurstclient/hacks/FreecamHack.java index a9220a1e..a8f2271c 100644 --- a/src/main/java/net/wurstclient/hacks/FreecamHack.java +++ b/src/main/java/net/wurstclient/hacks/FreecamHack.java @@ -208,10 +208,10 @@ public final class FreecamHack extends Hack implements UpdateListener, matrixStack.pop(); // line - Vec3d start = RotationUtils.getClientLookVec(). - add(RenderUtils.getCameraPos()).subtract(regionX, 0, regionZ); - Vec3d end = fakePlayer.getBoundingBox().getCenter() - .subtract(regionX, 0, regionZ); + Vec3d start = RotationUtils.getClientLookVec() + .add(RenderUtils.getCameraPos()).subtract(regionX, 0, regionZ); + Vec3d end = fakePlayer.getBoundingBox().getCenter().subtract(regionX, 0, + regionZ); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); @@ -230,6 +230,7 @@ public final class FreecamHack extends Hack implements UpdateListener, matrixStack.pop(); // GL resets + RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_LINE_SMOOTH); diff --git a/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java b/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java index 1cd38109..8feb68f6 100644 --- a/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java +++ b/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java @@ -291,8 +291,8 @@ public final class InstantBunkerHack extends Hack BlockPos pos = positions.get(i); matrixStack.push(); - matrixStack.translate(pos.getX() - regionX, - pos.getY(), pos.getZ() - regionZ); + matrixStack.translate(pos.getX() - regionX, pos.getY(), + pos.getZ() - regionZ); matrixStack.translate(offset, offset, offset); matrixStack.scale(scale, scale, scale); @@ -304,6 +304,7 @@ public final class InstantBunkerHack extends Hack matrixStack.pop(); // GL resets + RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glDisable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_LINE_SMOOTH); } diff --git a/src/main/java/net/wurstclient/hacks/ItemEspHack.java b/src/main/java/net/wurstclient/hacks/ItemEspHack.java index 0242d375..986816b6 100644 --- a/src/main/java/net/wurstclient/hacks/ItemEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ItemEspHack.java @@ -183,12 +183,15 @@ public final class ItemEspHack extends Hack implements UpdateListener, Vec3d end = e.getBoundingBox().getCenter() .subtract(new Vec3d(e.getX(), e.getY(), e.getZ()) .subtract(e.prevX, e.prevY, e.prevZ) - .multiply(1 - partialTicks)).subtract(regionX, 0, regionZ); + .multiply(1 - partialTicks)) + .subtract(regionX, 0, regionZ); - bufferBuilder.vertex(matrix, (float)start.x, (float)start.y, - (float)start.z).next(); - bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, - (float)end.z).next(); + bufferBuilder + .vertex(matrix, (float)start.x, (float)start.y, (float)start.z) + .next(); + bufferBuilder + .vertex(matrix, (float)end.x, (float)end.y, (float)end.z) + .next(); } tessellator.draw(); } diff --git a/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java b/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java index 55848362..d088b0c2 100644 --- a/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java @@ -108,8 +108,8 @@ public final class PlayerFinderHack extends Hack VertexFormats.POSITION); // set start position - Vec3d start = RotationUtils.getClientLookVec(). - add(RenderUtils.getCameraPos()).subtract(regionX, 0, regionZ); + Vec3d start = RotationUtils.getClientLookVec() + .add(RenderUtils.getCameraPos()).subtract(regionX, 0, regionZ); // set end position Vec3d end = Vec3d.ofCenter(pos).subtract(regionX, 0, regionZ); @@ -141,6 +141,7 @@ public final class PlayerFinderHack extends Hack matrixStack.pop(); // GL resets + RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_LINE_SMOOTH); From 42e130a9f67adb2630deb4dcbd469347b42b60ab Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 10 May 2023 14:03:46 +0200 Subject: [PATCH 14/48] Add region offset method with X & Z params --- src/main/java/net/wurstclient/ai/PathFinder.java | 3 ++- src/main/java/net/wurstclient/hacks/AutoBuildHack.java | 2 +- src/main/java/net/wurstclient/hacks/AutoFarmHack.java | 2 +- .../java/net/wurstclient/hacks/AutoLibrarianHack.java | 2 +- src/main/java/net/wurstclient/hacks/BowAimbotHack.java | 2 +- .../java/net/wurstclient/hacks/BuildRandomHack.java | 2 +- src/main/java/net/wurstclient/hacks/ExcavatorHack.java | 2 +- src/main/java/net/wurstclient/hacks/FeedAuraHack.java | 2 +- src/main/java/net/wurstclient/hacks/FreecamHack.java | 2 +- .../java/net/wurstclient/hacks/InstantBunkerHack.java | 2 +- src/main/java/net/wurstclient/hacks/ItemEspHack.java | 2 +- src/main/java/net/wurstclient/hacks/KillauraHack.java | 2 +- .../java/net/wurstclient/hacks/KillauraLegitHack.java | 2 +- src/main/java/net/wurstclient/hacks/MobEspHack.java | 2 +- src/main/java/net/wurstclient/hacks/NukerHack.java | 2 +- .../java/net/wurstclient/hacks/NukerLegitHack.java | 2 +- src/main/java/net/wurstclient/hacks/OverlayHack.java | 2 +- src/main/java/net/wurstclient/hacks/PlayerEspHack.java | 2 +- .../java/net/wurstclient/hacks/PlayerFinderHack.java | 2 +- .../java/net/wurstclient/hacks/ProphuntEspHack.java | 2 +- src/main/java/net/wurstclient/hacks/TreeBotHack.java | 3 +-- src/main/java/net/wurstclient/hacks/TunnellerHack.java | 10 +++++----- .../wurstclient/hacks/autofish/AutoFishDebugDraw.java | 5 ++--- src/main/java/net/wurstclient/util/RenderUtils.java | 10 ++++++++++ 24 files changed, 39 insertions(+), 30 deletions(-) diff --git a/src/main/java/net/wurstclient/ai/PathFinder.java b/src/main/java/net/wurstclient/ai/PathFinder.java index d88963bb..f39dbbef 100644 --- a/src/main/java/net/wurstclient/ai/PathFinder.java +++ b/src/main/java/net/wurstclient/ai/PathFinder.java @@ -563,11 +563,12 @@ public class PathFinder GL11.glDepthMask(false); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); + matrixStack.translate(0.5, 0.5, 0.5); if(debugMode) diff --git a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java index 8b9d0dcb..6f8d11ad 100644 --- a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java @@ -362,11 +362,11 @@ public final class AutoBuildHack extends Hack RenderSystem.setShaderColor(0F, 0F, 0F, 0.5F); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); int blocksDrawn = 0; RenderSystem.setShader(GameRenderer::getPositionProgram); diff --git a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java index 5b8dc055..5ab5ac8e 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java @@ -198,11 +198,11 @@ public final class AutoFarmHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); RenderSystem.setShader(GameRenderer::getPositionProgram); Matrix4f viewMatrix = matrixStack.peek().getPositionMatrix(); diff --git a/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java b/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java index bef0519a..3b9dd0d4 100644 --- a/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java @@ -525,11 +525,11 @@ public final class AutoLibrarianHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); RenderSystem.setShaderColor(0, 1, 0, 0.75F); diff --git a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java index 7e014ad3..f8f3e3ef 100644 --- a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java +++ b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java @@ -210,11 +210,11 @@ public final class BowAimbotHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); // set position matrixStack.translate(target.getX() - regionX, target.getY(), diff --git a/src/main/java/net/wurstclient/hacks/BuildRandomHack.java b/src/main/java/net/wurstclient/hacks/BuildRandomHack.java index 18c371e1..8ab78e76 100644 --- a/src/main/java/net/wurstclient/hacks/BuildRandomHack.java +++ b/src/main/java/net/wurstclient/hacks/BuildRandomHack.java @@ -140,11 +140,11 @@ public final class BuildRandomHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); // set position matrixStack.translate(lastPos.getX() - regionX, lastPos.getY(), diff --git a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java index e5367c4f..de21456b 100644 --- a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java @@ -160,11 +160,11 @@ public final class ExcavatorHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); RenderSystem.setShader(GameRenderer::getPositionProgram); diff --git a/src/main/java/net/wurstclient/hacks/FeedAuraHack.java b/src/main/java/net/wurstclient/hacks/FeedAuraHack.java index 74173699..66d40727 100644 --- a/src/main/java/net/wurstclient/hacks/FeedAuraHack.java +++ b/src/main/java/net/wurstclient/hacks/FeedAuraHack.java @@ -192,11 +192,11 @@ public final class FeedAuraHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); Box box = new Box(BlockPos.ORIGIN); float p = 1; diff --git a/src/main/java/net/wurstclient/hacks/FreecamHack.java b/src/main/java/net/wurstclient/hacks/FreecamHack.java index a8f2271c..469c110f 100644 --- a/src/main/java/net/wurstclient/hacks/FreecamHack.java +++ b/src/main/java/net/wurstclient/hacks/FreecamHack.java @@ -188,11 +188,11 @@ public final class FreecamHack extends Hack implements UpdateListener, GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); float[] colorF = color.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); diff --git a/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java b/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java index 8feb68f6..346eb176 100644 --- a/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java +++ b/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java @@ -260,11 +260,11 @@ public final class InstantBunkerHack extends Hack GL11.glDisable(GL11.GL_CULL_FACE); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); // green box { diff --git a/src/main/java/net/wurstclient/hacks/ItemEspHack.java b/src/main/java/net/wurstclient/hacks/ItemEspHack.java index 986816b6..08ee4300 100644 --- a/src/main/java/net/wurstclient/hacks/ItemEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ItemEspHack.java @@ -105,11 +105,11 @@ public final class ItemEspHack extends Hack implements UpdateListener, GL11.glEnable(GL11.GL_LINE_SMOOTH); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); renderBoxes(matrixStack, partialTicks, regionX, regionZ); diff --git a/src/main/java/net/wurstclient/hacks/KillauraHack.java b/src/main/java/net/wurstclient/hacks/KillauraHack.java index f0b0b94d..cc675f73 100644 --- a/src/main/java/net/wurstclient/hacks/KillauraHack.java +++ b/src/main/java/net/wurstclient/hacks/KillauraHack.java @@ -204,11 +204,11 @@ public final class KillauraHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); Box box = new Box(BlockPos.ORIGIN); float p = 1; diff --git a/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java b/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java index e5511999..0b34f143 100644 --- a/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java +++ b/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java @@ -219,11 +219,11 @@ public final class KillauraLegitHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); Box box = new Box(BlockPos.ORIGIN); float p = 1; diff --git a/src/main/java/net/wurstclient/hacks/MobEspHack.java b/src/main/java/net/wurstclient/hacks/MobEspHack.java index 1a1f628b..6ec69801 100644 --- a/src/main/java/net/wurstclient/hacks/MobEspHack.java +++ b/src/main/java/net/wurstclient/hacks/MobEspHack.java @@ -125,11 +125,11 @@ public final class MobEspHack extends Hack implements UpdateListener, GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); if(style.getSelected().boxes) renderBoxes(matrixStack, partialTicks, regionX, regionZ); diff --git a/src/main/java/net/wurstclient/hacks/NukerHack.java b/src/main/java/net/wurstclient/hacks/NukerHack.java index be323003..f8caac2c 100644 --- a/src/main/java/net/wurstclient/hacks/NukerHack.java +++ b/src/main/java/net/wurstclient/hacks/NukerHack.java @@ -249,11 +249,11 @@ public final class NukerHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); Box box = new Box(BlockPos.ORIGIN); float p = prevProgress + (progress - prevProgress) * partialTicks; diff --git a/src/main/java/net/wurstclient/hacks/NukerLegitHack.java b/src/main/java/net/wurstclient/hacks/NukerLegitHack.java index 85a1e0a5..bf50b7f9 100644 --- a/src/main/java/net/wurstclient/hacks/NukerLegitHack.java +++ b/src/main/java/net/wurstclient/hacks/NukerLegitHack.java @@ -290,11 +290,11 @@ public final class NukerLegitHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); // set position matrixStack.translate(currentBlock.getX() - regionX, diff --git a/src/main/java/net/wurstclient/hacks/OverlayHack.java b/src/main/java/net/wurstclient/hacks/OverlayHack.java index 7675841d..496cebcb 100644 --- a/src/main/java/net/wurstclient/hacks/OverlayHack.java +++ b/src/main/java/net/wurstclient/hacks/OverlayHack.java @@ -63,11 +63,11 @@ public final class OverlayHack extends Hack implements RenderListener GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); // set position matrixStack.translate(pos.getX() - regionX, pos.getY(), diff --git a/src/main/java/net/wurstclient/hacks/PlayerEspHack.java b/src/main/java/net/wurstclient/hacks/PlayerEspHack.java index 29b2f4e3..9e167106 100644 --- a/src/main/java/net/wurstclient/hacks/PlayerEspHack.java +++ b/src/main/java/net/wurstclient/hacks/PlayerEspHack.java @@ -123,11 +123,11 @@ public final class PlayerEspHack extends Hack implements UpdateListener, GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); // draw boxes if(style.getSelected().boxes) diff --git a/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java b/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java index d088b0c2..ed9a696d 100644 --- a/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java @@ -89,11 +89,11 @@ public final class PlayerFinderHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); float[] rainbow = RenderUtils.getRainbowColor(); RenderSystem.setShaderColor(rainbow[0], rainbow[1], rainbow[2], 0.5F); diff --git a/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java b/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java index 9ab37bef..9e0b5f5c 100644 --- a/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java @@ -58,11 +58,11 @@ public final class ProphuntEspHack extends Hack implements RenderListener GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); // set color float alpha = 0.5F + 0.25F * MathHelper diff --git a/src/main/java/net/wurstclient/hacks/TreeBotHack.java b/src/main/java/net/wurstclient/hacks/TreeBotHack.java index 5810e5c0..db70d964 100644 --- a/src/main/java/net/wurstclient/hacks/TreeBotHack.java +++ b/src/main/java/net/wurstclient/hacks/TreeBotHack.java @@ -334,11 +334,10 @@ public final class TreeBotHack extends Hack { matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); - BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); Box box = new Box(BlockPos.ORIGIN); float p = prevProgress + (progress - prevProgress) * partialTicks; diff --git a/src/main/java/net/wurstclient/hacks/TunnellerHack.java b/src/main/java/net/wurstclient/hacks/TunnellerHack.java index e87c57a6..146a6996 100644 --- a/src/main/java/net/wurstclient/hacks/TunnellerHack.java +++ b/src/main/java/net/wurstclient/hacks/TunnellerHack.java @@ -207,7 +207,11 @@ public final class TunnellerHack extends Hack GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); RenderSystem.setShader(GameRenderer::getPositionProgram); @@ -240,10 +244,6 @@ public final class TunnellerHack extends Hack float red = p * 2F; float green = 2 - red; - BlockPos camPos = RenderUtils.getCameraBlockPos(); - int regionX = (camPos.getX() >> 9) * 512; - int regionZ = (camPos.getZ() >> 9) * 512; - matrixStack.translate(currentBlock.getX() - regionX, currentBlock.getY(), currentBlock.getZ() - regionZ); if(p < 1) diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java index f52fa3d4..7d843536 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java @@ -79,14 +79,13 @@ public final class AutoFishDebugDraw GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); - RenderUtils.applyRegionalRenderOffset(matrixStack); - - FishingBobberEntity bobber = WurstClient.MC.player.fishHook; BlockPos camPos = RenderUtils.getCameraBlockPos(); int regionX = (camPos.getX() >> 9) * 512; int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); + FishingBobberEntity bobber = WurstClient.MC.player.fishHook; if(bobber != null && validRangeBox != null) drawValidRange(matrixStack, bobber, regionX, regionZ); diff --git a/src/main/java/net/wurstclient/util/RenderUtils.java b/src/main/java/net/wurstclient/util/RenderUtils.java index 06674d97..5f6830a7 100644 --- a/src/main/java/net/wurstclient/util/RenderUtils.java +++ b/src/main/java/net/wurstclient/util/RenderUtils.java @@ -75,6 +75,16 @@ public enum RenderUtils regionZ - camPos.z); } + public static void applyRegionalRenderOffset(MatrixStack matrixStack, + int regionX, int regionZ) + { + applyCameraRotationOnly(); + + Vec3d camPos = getCameraPos(); + matrixStack.translate(regionX - camPos.x, -camPos.y, + regionZ - camPos.z); + } + public static void applyRegionalRenderOffset(MatrixStack matrixStack, Chunk chunk) { From 28a7156b39152971ce4b820c1f63c6306460b25c Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 10 May 2023 14:23:37 +0200 Subject: [PATCH 15/48] Remove PlayerFinder It no longer works in modern Minecraft versions and there doesn't seem to be a new way of detecting lightning bolts at a distance. --- .../java/net/wurstclient/hack/HackList.java | 1 - .../wurstclient/hacks/PlayerFinderHack.java | 179 ------------------ 2 files changed, 180 deletions(-) delete mode 100644 src/main/java/net/wurstclient/hacks/PlayerFinderHack.java diff --git a/src/main/java/net/wurstclient/hack/HackList.java b/src/main/java/net/wurstclient/hack/HackList.java index 97a2c386..e55ca896 100644 --- a/src/main/java/net/wurstclient/hack/HackList.java +++ b/src/main/java/net/wurstclient/hack/HackList.java @@ -147,7 +147,6 @@ public final class HackList implements UpdateListener public final PanicHack panicHack = new PanicHack(); public final ParkourHack parkourHack = new ParkourHack(); public final PlayerEspHack playerEspHack = new PlayerEspHack(); - public final PlayerFinderHack playerFinderHack = new PlayerFinderHack(); public final PortalGuiHack portalGuiHack = new PortalGuiHack(); public final PotionSaverHack potionSaverHack = new PotionSaverHack(); public final ProphuntEspHack prophuntEspHack = new ProphuntEspHack(); diff --git a/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java b/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java deleted file mode 100644 index ed9a696d..00000000 --- a/src/main/java/net/wurstclient/hacks/PlayerFinderHack.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright (c) 2014-2023 Wurst-Imperium and contributors. - * - * This source code is subject to the terms of the GNU General Public - * License, version 3. If a copy of the GPL was not distributed with this - * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt - */ -package net.wurstclient.hacks; - -import org.joml.Matrix4f; -import org.lwjgl.opengl.GL11; - -import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.GameRenderer; -import net.minecraft.client.render.Tessellator; -import net.minecraft.client.render.VertexFormat; -import net.minecraft.client.render.VertexFormats; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.wurstclient.Category; -import net.wurstclient.SearchTags; -import net.wurstclient.events.PacketInputListener; -import net.wurstclient.events.RenderListener; -import net.wurstclient.events.UpdateListener; -import net.wurstclient.hack.Hack; -import net.wurstclient.util.ChatUtils; -import net.wurstclient.util.RenderUtils; -import net.wurstclient.util.RotationUtils; - -@SearchTags({"player finder"}) -public final class PlayerFinderHack extends Hack - implements UpdateListener, PacketInputListener, RenderListener -{ - private BlockPos pos; - private BlockPos lastPos; - - public PlayerFinderHack() - { - super("PlayerFinder"); - setCategory(Category.RENDER); - } - - @Override - public void onEnable() - { - pos = null; - lastPos = null; - - EVENTS.add(UpdateListener.class, this); - EVENTS.add(PacketInputListener.class, this); - EVENTS.add(RenderListener.class, this); - } - - @Override - public void onDisable() - { - EVENTS.remove(UpdateListener.class, this); - EVENTS.remove(PacketInputListener.class, this); - EVENTS.remove(RenderListener.class, this); - } - - @Override - public void onUpdate() - { - if(pos == null || pos.equals(lastPos)) - return; - - ChatUtils.message("PlayerFinder has detected a player near " - + pos.toShortString() + "."); - lastPos = pos; - } - - @Override - public void onRender(MatrixStack matrixStack, float partialTicks) - { - if(pos == null) - return; - - // GL settings - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glDisable(GL11.GL_DEPTH_TEST); - - matrixStack.push(); - - BlockPos camPos = RenderUtils.getCameraBlockPos(); - int regionX = (camPos.getX() >> 9) * 512; - int regionZ = (camPos.getZ() >> 9) * 512; - RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); - - float[] rainbow = RenderUtils.getRainbowColor(); - RenderSystem.setShaderColor(rainbow[0], rainbow[1], rainbow[2], 0.5F); - - Matrix4f matrix = matrixStack.peek().getPositionMatrix(); - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - RenderSystem.setShader(GameRenderer::getPositionProgram); - - // tracer line - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - - // set start position - Vec3d start = RotationUtils.getClientLookVec() - .add(RenderUtils.getCameraPos()).subtract(regionX, 0, regionZ); - - // set end position - Vec3d end = Vec3d.ofCenter(pos).subtract(regionX, 0, regionZ); - - // draw line - bufferBuilder - .vertex(matrix, (float)start.x, (float)start.y, (float)start.z) - .next(); - bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, (float)end.z) - .next(); - - tessellator.draw(); - - // block box - { - matrixStack.push(); - matrixStack.translate(pos.getX() - regionX, pos.getY(), - pos.getZ() - regionZ); - - RenderUtils.drawOutlinedBox(matrixStack); - - RenderSystem.setShaderColor(rainbow[0], rainbow[1], rainbow[2], - 0.25F); - RenderUtils.drawSolidBox(matrixStack); - - matrixStack.pop(); - } - - matrixStack.pop(); - - // GL resets - RenderSystem.setShaderColor(1, 1, 1, 1); - GL11.glEnable(GL11.GL_DEPTH_TEST); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); - } - - @Override - public void onReceivedPacket(PacketInputEvent event) - { - if(MC.player == null) - return; - - Packet packet = event.getPacket(); - - // get packet position - BlockPos newPos = null; - // if(packet instanceof SPacketEffect) - // { - // SPacketEffect effect = (SPacketEffect)packet; - // newPos = effect.getSoundPos(); - // - // }else - if(packet instanceof PlaySoundS2CPacket sound) - newPos = - BlockPos.ofFloored(sound.getX(), sound.getY(), sound.getZ()); - - if(newPos == null) - return; - - // check distance to player - BlockPos playerPos = BlockPos.ofFloored(MC.player.getPos()); - if(Math.abs(playerPos.getX() - newPos.getX()) > 256 - || Math.abs(playerPos.getZ() - newPos.getZ()) > 256) - pos = newPos; - } -} From d1ada5dbc89a9316eef4a747c31d015b01464c61 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 10 May 2023 14:42:04 +0200 Subject: [PATCH 16/48] Manage GL_LINE_SMOOTH in RenderListener --- src/main/java/net/wurstclient/ai/PathFinder.java | 2 -- src/main/java/net/wurstclient/events/RenderListener.java | 6 ++++++ src/main/java/net/wurstclient/hacks/AutoBuildHack.java | 2 -- src/main/java/net/wurstclient/hacks/AutoFarmHack.java | 2 -- src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java | 2 -- src/main/java/net/wurstclient/hacks/BowAimbotHack.java | 2 -- src/main/java/net/wurstclient/hacks/BuildRandomHack.java | 2 -- src/main/java/net/wurstclient/hacks/CaveFinderHack.java | 2 -- src/main/java/net/wurstclient/hacks/ChestEspHack.java | 2 -- src/main/java/net/wurstclient/hacks/ExcavatorHack.java | 2 -- src/main/java/net/wurstclient/hacks/FeedAuraHack.java | 2 -- src/main/java/net/wurstclient/hacks/FreecamHack.java | 2 -- src/main/java/net/wurstclient/hacks/InstantBunkerHack.java | 2 -- src/main/java/net/wurstclient/hacks/ItemEspHack.java | 2 -- src/main/java/net/wurstclient/hacks/KillauraHack.java | 2 -- src/main/java/net/wurstclient/hacks/KillauraLegitHack.java | 2 -- src/main/java/net/wurstclient/hacks/MobEspHack.java | 2 -- src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java | 2 -- src/main/java/net/wurstclient/hacks/NukerHack.java | 3 --- src/main/java/net/wurstclient/hacks/NukerLegitHack.java | 2 -- src/main/java/net/wurstclient/hacks/OpenWaterEspHack.java | 2 -- src/main/java/net/wurstclient/hacks/OverlayHack.java | 2 -- src/main/java/net/wurstclient/hacks/PlayerEspHack.java | 2 -- src/main/java/net/wurstclient/hacks/ProphuntEspHack.java | 2 -- src/main/java/net/wurstclient/hacks/SearchHack.java | 2 -- src/main/java/net/wurstclient/hacks/TrajectoriesHack.java | 2 -- src/main/java/net/wurstclient/hacks/TreeBotHack.java | 2 -- src/main/java/net/wurstclient/hacks/TunnellerHack.java | 2 -- .../net/wurstclient/hacks/autofish/AutoFishDebugDraw.java | 2 -- .../net/wurstclient/hacks/newchunks/NewChunksRenderer.java | 2 -- 30 files changed, 6 insertions(+), 59 deletions(-) diff --git a/src/main/java/net/wurstclient/ai/PathFinder.java b/src/main/java/net/wurstclient/ai/PathFinder.java index f39dbbef..f666e124 100644 --- a/src/main/java/net/wurstclient/ai/PathFinder.java +++ b/src/main/java/net/wurstclient/ai/PathFinder.java @@ -557,7 +557,6 @@ public class PathFinder GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_LINE_SMOOTH); if(!depthTest) GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDepthMask(false); @@ -618,7 +617,6 @@ public class PathFinder RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); GL11.glDepthMask(true); } diff --git a/src/main/java/net/wurstclient/events/RenderListener.java b/src/main/java/net/wurstclient/events/RenderListener.java index 805b9c60..49814516 100644 --- a/src/main/java/net/wurstclient/events/RenderListener.java +++ b/src/main/java/net/wurstclient/events/RenderListener.java @@ -9,6 +9,8 @@ package net.wurstclient.events; import java.util.ArrayList; +import org.lwjgl.opengl.GL11; + import net.minecraft.client.util.math.MatrixStack; import net.wurstclient.event.Event; import net.wurstclient.event.Listener; @@ -31,8 +33,12 @@ public interface RenderListener extends Listener @Override public void fire(ArrayList listeners) { + GL11.glEnable(GL11.GL_LINE_SMOOTH); + for(RenderListener listener : listeners) listener.onRender(matrixStack, partialTicks); + + GL11.glDisable(GL11.GL_LINE_SMOOTH); } @Override diff --git a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java index 6f8d11ad..e2a1757f 100644 --- a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java @@ -357,7 +357,6 @@ public final class AutoBuildHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glDisable(GL11.GL_CULL_FACE); RenderSystem.setShaderColor(0F, 0F, 0F, 0.5F); @@ -398,7 +397,6 @@ public final class AutoBuildHack extends Hack // GL resets GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); RenderSystem.setShaderColor(1, 1, 1, 1); } diff --git a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java index 5ab5ac8e..4b1de48b 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java @@ -193,7 +193,6 @@ public final class AutoFarmHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -266,7 +265,6 @@ public final class AutoFarmHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private Stream getBlockStream(BlockPos center, int range) diff --git a/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java b/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java index 3b9dd0d4..33a8610d 100644 --- a/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java @@ -520,7 +520,6 @@ public final class AutoLibrarianHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -584,6 +583,5 @@ public final class AutoLibrarianHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } } diff --git a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java index f8f3e3ef..4b6cf48b 100644 --- a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java +++ b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java @@ -206,7 +206,6 @@ public final class BowAimbotHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); @@ -249,7 +248,6 @@ public final class BowAimbotHack extends Hack // GL resets GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); RenderSystem.setShaderColor(1, 1, 1, 1); } diff --git a/src/main/java/net/wurstclient/hacks/BuildRandomHack.java b/src/main/java/net/wurstclient/hacks/BuildRandomHack.java index 8ab78e76..12145899 100644 --- a/src/main/java/net/wurstclient/hacks/BuildRandomHack.java +++ b/src/main/java/net/wurstclient/hacks/BuildRandomHack.java @@ -135,7 +135,6 @@ public final class BuildRandomHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -166,7 +165,6 @@ public final class BuildRandomHack extends Hack // GL resets GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private boolean tryToPlaceBlock(boolean legitMode, BlockPos pos) diff --git a/src/main/java/net/wurstclient/hacks/CaveFinderHack.java b/src/main/java/net/wurstclient/hacks/CaveFinderHack.java index 700410eb..b5306beb 100644 --- a/src/main/java/net/wurstclient/hacks/CaveFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/CaveFinderHack.java @@ -220,7 +220,6 @@ public final class CaveFinderHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -254,7 +253,6 @@ public final class CaveFinderHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private ChunkPos getPlayerChunkPos(BlockPos eyesPos) diff --git a/src/main/java/net/wurstclient/hacks/ChestEspHack.java b/src/main/java/net/wurstclient/hacks/ChestEspHack.java index c67582a0..d05158d6 100644 --- a/src/main/java/net/wurstclient/hacks/ChestEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ChestEspHack.java @@ -204,7 +204,6 @@ public class ChestEspHack extends Hack implements UpdateListener, // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -236,6 +235,5 @@ public class ChestEspHack extends Hack implements UpdateListener, RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } } diff --git a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java index de21456b..d010a313 100644 --- a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java @@ -155,7 +155,6 @@ public final class ExcavatorHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glDisable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -325,7 +324,6 @@ public final class ExcavatorHack extends Hack // GL resets GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); RenderSystem.setShaderColor(1, 1, 1, 1); } diff --git a/src/main/java/net/wurstclient/hacks/FeedAuraHack.java b/src/main/java/net/wurstclient/hacks/FeedAuraHack.java index 66d40727..5dd51576 100644 --- a/src/main/java/net/wurstclient/hacks/FeedAuraHack.java +++ b/src/main/java/net/wurstclient/hacks/FeedAuraHack.java @@ -187,7 +187,6 @@ public final class FeedAuraHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -236,7 +235,6 @@ public final class FeedAuraHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private boolean isUntamed(AnimalEntity e) diff --git a/src/main/java/net/wurstclient/hacks/FreecamHack.java b/src/main/java/net/wurstclient/hacks/FreecamHack.java index 469c110f..f6685ee8 100644 --- a/src/main/java/net/wurstclient/hacks/FreecamHack.java +++ b/src/main/java/net/wurstclient/hacks/FreecamHack.java @@ -184,7 +184,6 @@ public final class FreecamHack extends Hack implements UpdateListener, // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); @@ -233,6 +232,5 @@ public final class FreecamHack extends Hack implements UpdateListener, RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } } diff --git a/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java b/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java index 346eb176..8b42d98c 100644 --- a/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java +++ b/src/main/java/net/wurstclient/hacks/InstantBunkerHack.java @@ -256,7 +256,6 @@ public final class InstantBunkerHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glDisable(GL11.GL_CULL_FACE); matrixStack.push(); @@ -306,6 +305,5 @@ public final class InstantBunkerHack extends Hack // GL resets RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } } diff --git a/src/main/java/net/wurstclient/hacks/ItemEspHack.java b/src/main/java/net/wurstclient/hacks/ItemEspHack.java index 08ee4300..f464fed1 100644 --- a/src/main/java/net/wurstclient/hacks/ItemEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ItemEspHack.java @@ -102,7 +102,6 @@ public final class ItemEspHack extends Hack implements UpdateListener, { // GL settings GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); matrixStack.push(); @@ -122,7 +121,6 @@ public final class ItemEspHack extends Hack implements UpdateListener, RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private void renderBoxes(MatrixStack matrixStack, double partialTicks, diff --git a/src/main/java/net/wurstclient/hacks/KillauraHack.java b/src/main/java/net/wurstclient/hacks/KillauraHack.java index cc675f73..b4574d3b 100644 --- a/src/main/java/net/wurstclient/hacks/KillauraHack.java +++ b/src/main/java/net/wurstclient/hacks/KillauraHack.java @@ -199,7 +199,6 @@ public final class KillauraHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -257,7 +256,6 @@ public final class KillauraHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private enum Priority diff --git a/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java b/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java index 0b34f143..b634d7f5 100644 --- a/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java +++ b/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java @@ -214,7 +214,6 @@ public final class KillauraLegitHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -269,7 +268,6 @@ public final class KillauraLegitHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private enum Priority diff --git a/src/main/java/net/wurstclient/hacks/MobEspHack.java b/src/main/java/net/wurstclient/hacks/MobEspHack.java index 6ec69801..35984344 100644 --- a/src/main/java/net/wurstclient/hacks/MobEspHack.java +++ b/src/main/java/net/wurstclient/hacks/MobEspHack.java @@ -121,7 +121,6 @@ public final class MobEspHack extends Hack implements UpdateListener, // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); @@ -143,7 +142,6 @@ public final class MobEspHack extends Hack implements UpdateListener, RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private void renderBoxes(MatrixStack matrixStack, double partialTicks, diff --git a/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java b/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java index 6774286e..56f16190 100644 --- a/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java +++ b/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java @@ -229,7 +229,6 @@ public final class MobSpawnEspHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); if(!depthTest) GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glEnable(GL11.GL_CULL_FACE); @@ -260,7 +259,6 @@ public final class MobSpawnEspHack extends Hack if(!depthTest) GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private static class ChunkScanner diff --git a/src/main/java/net/wurstclient/hacks/NukerHack.java b/src/main/java/net/wurstclient/hacks/NukerHack.java index f8caac2c..62ccf6b6 100644 --- a/src/main/java/net/wurstclient/hacks/NukerHack.java +++ b/src/main/java/net/wurstclient/hacks/NukerHack.java @@ -244,7 +244,6 @@ public final class NukerHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -283,8 +282,6 @@ public final class NukerHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); - } private enum Mode diff --git a/src/main/java/net/wurstclient/hacks/NukerLegitHack.java b/src/main/java/net/wurstclient/hacks/NukerLegitHack.java index bf50b7f9..d13bdfa1 100644 --- a/src/main/java/net/wurstclient/hacks/NukerLegitHack.java +++ b/src/main/java/net/wurstclient/hacks/NukerLegitHack.java @@ -285,7 +285,6 @@ public final class NukerLegitHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -334,7 +333,6 @@ public final class NukerLegitHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private enum Mode diff --git a/src/main/java/net/wurstclient/hacks/OpenWaterEspHack.java b/src/main/java/net/wurstclient/hacks/OpenWaterEspHack.java index 1a32fbc9..f689d1b1 100644 --- a/src/main/java/net/wurstclient/hacks/OpenWaterEspHack.java +++ b/src/main/java/net/wurstclient/hacks/OpenWaterEspHack.java @@ -63,7 +63,6 @@ public final class OpenWaterEspHack extends Hack implements RenderListener // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -80,7 +79,6 @@ public final class OpenWaterEspHack extends Hack implements RenderListener RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private void drawOpenWater(MatrixStack matrixStack, diff --git a/src/main/java/net/wurstclient/hacks/OverlayHack.java b/src/main/java/net/wurstclient/hacks/OverlayHack.java index 496cebcb..937594b2 100644 --- a/src/main/java/net/wurstclient/hacks/OverlayHack.java +++ b/src/main/java/net/wurstclient/hacks/OverlayHack.java @@ -58,7 +58,6 @@ public final class OverlayHack extends Hack implements RenderListener // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -98,6 +97,5 @@ public final class OverlayHack extends Hack implements RenderListener // GL resets GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } } diff --git a/src/main/java/net/wurstclient/hacks/PlayerEspHack.java b/src/main/java/net/wurstclient/hacks/PlayerEspHack.java index 9e167106..a956c552 100644 --- a/src/main/java/net/wurstclient/hacks/PlayerEspHack.java +++ b/src/main/java/net/wurstclient/hacks/PlayerEspHack.java @@ -119,7 +119,6 @@ public final class PlayerEspHack extends Hack implements UpdateListener, // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glDisable(GL11.GL_DEPTH_TEST); matrixStack.push(); @@ -142,7 +141,6 @@ public final class PlayerEspHack extends Hack implements UpdateListener, RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private void renderBoxes(MatrixStack matrixStack, double partialTicks, diff --git a/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java b/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java index 9e0b5f5c..34292c9a 100644 --- a/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ProphuntEspHack.java @@ -53,7 +53,6 @@ public final class ProphuntEspHack extends Hack implements RenderListener // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -97,6 +96,5 @@ public final class ProphuntEspHack extends Hack implements RenderListener RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } } diff --git a/src/main/java/net/wurstclient/hacks/SearchHack.java b/src/main/java/net/wurstclient/hacks/SearchHack.java index f6f9d27e..b8a4d474 100644 --- a/src/main/java/net/wurstclient/hacks/SearchHack.java +++ b/src/main/java/net/wurstclient/hacks/SearchHack.java @@ -218,7 +218,6 @@ public final class SearchHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -246,7 +245,6 @@ public final class SearchHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private void addSearchersInRange(ChunkPos center, Block block, diff --git a/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java b/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java index b8efc9e5..b9b821e0 100644 --- a/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java +++ b/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java @@ -87,7 +87,6 @@ public final class TrajectoriesHack extends Hack implements RenderListener GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDepthMask(false); - GL11.glEnable(GL11.GL_LINE_SMOOTH); RenderUtils.applyCameraRotationOnly(); @@ -113,7 +112,6 @@ public final class TrajectoriesHack extends Hack implements RenderListener GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDepthMask(true); - GL11.glDisable(GL11.GL_LINE_SMOOTH); matrixStack.pop(); } diff --git a/src/main/java/net/wurstclient/hacks/TreeBotHack.java b/src/main/java/net/wurstclient/hacks/TreeBotHack.java index db70d964..1fa4d8aa 100644 --- a/src/main/java/net/wurstclient/hacks/TreeBotHack.java +++ b/src/main/java/net/wurstclient/hacks/TreeBotHack.java @@ -294,7 +294,6 @@ public final class TreeBotHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -308,7 +307,6 @@ public final class TreeBotHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private void drawTree(MatrixStack matrixStack) diff --git a/src/main/java/net/wurstclient/hacks/TunnellerHack.java b/src/main/java/net/wurstclient/hacks/TunnellerHack.java index 146a6996..d6f50761 100644 --- a/src/main/java/net/wurstclient/hacks/TunnellerHack.java +++ b/src/main/java/net/wurstclient/hacks/TunnellerHack.java @@ -202,7 +202,6 @@ public final class TunnellerHack extends Hack // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -266,7 +265,6 @@ public final class TunnellerHack extends Hack RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private void updateCyanBuffer() diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java index 7d843536..f34a8a57 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java @@ -74,7 +74,6 @@ public final class AutoFishDebugDraw // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -98,7 +97,6 @@ public final class AutoFishDebugDraw RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } private void drawValidRange(MatrixStack matrixStack, diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java index 25fd7f44..0f8b5b30 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java @@ -64,7 +64,6 @@ public final class NewChunksRenderer // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glDisable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -112,6 +111,5 @@ public final class NewChunksRenderer RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LINE_SMOOTH); } } From 578e0ea99fa8e86f82f97bcb2bd44468dc043765 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 10 May 2023 17:18:19 +0200 Subject: [PATCH 17/48] Move block breaking overlay to a separate OverlayRenderer class --- .../java/net/wurstclient/hacks/NukerHack.java | 79 ++----------- .../net/wurstclient/hacks/NukerLegitHack.java | 76 +++--------- .../net/wurstclient/hacks/OverlayHack.java | 80 ++++--------- .../net/wurstclient/util/OverlayRenderer.java | 109 ++++++++++++++++++ 4 files changed, 156 insertions(+), 188 deletions(-) create mode 100644 src/main/java/net/wurstclient/util/OverlayRenderer.java diff --git a/src/main/java/net/wurstclient/hacks/NukerHack.java b/src/main/java/net/wurstclient/hacks/NukerHack.java index 62ccf6b6..57abf022 100644 --- a/src/main/java/net/wurstclient/hacks/NukerHack.java +++ b/src/main/java/net/wurstclient/hacks/NukerHack.java @@ -19,18 +19,12 @@ import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.lwjgl.opengl.GL11; - -import com.mojang.blaze3d.systems.RenderSystem; - import net.minecraft.block.Blocks; import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; import net.wurstclient.Category; @@ -46,7 +40,7 @@ import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; import net.wurstclient.util.BlockBreaker; import net.wurstclient.util.BlockUtils; -import net.wurstclient.util.RenderUtils; +import net.wurstclient.util.OverlayRenderer; import net.wurstclient.util.RotationUtils; public final class NukerHack extends Hack @@ -86,9 +80,8 @@ public final class NukerHack extends Hack "minecraft:raw_iron_block", "minecraft:redstone_ore"); private final ArrayDeque> prevBlocks = new ArrayDeque<>(); + private final OverlayRenderer renderer = new OverlayRenderer(); private BlockPos currentBlock; - private float progress; - private float prevProgress; public NukerHack() { @@ -136,6 +129,7 @@ public final class NukerHack extends Hack } prevBlocks.clear(); + renderer.resetProgress(); if(!lockId.isChecked()) id.setBlock(Blocks.AIR); @@ -144,13 +138,13 @@ public final class NukerHack extends Hack @Override public void onUpdate() { + currentBlock = null; + // abort if using IDNuker without an ID being set if(mode.getSelected() == Mode.ID && id.getBlock() == Blocks.AIR) return; ClientPlayerEntity player = MC.player; - - currentBlock = null; Vec3d eyesPos = RotationUtils.getEyesPos().subtract(0.5, 0.5, 0.5); BlockPos eyesBlock = BlockPos.ofFloored(RotationUtils.getEyesPos()); double rangeSq = Math.pow(range.getValue(), 2); @@ -186,8 +180,7 @@ public final class NukerHack extends Hack currentBlock = blocks3.get(0); MC.interactionManager.cancelBlockBreaking(); - progress = 1; - prevProgress = 1; + renderer.resetProgress(); BlockBreaker.breakBlocksWithPacketSpam(blocks3); return; } @@ -203,18 +196,9 @@ public final class NukerHack extends Hack MC.interactionManager.cancelBlockBreaking(); if(currentBlock != null && BlockUtils.getHardness(currentBlock) < 1) - { - prevProgress = progress; - progress = IMC.getInteractionManager().getCurrentBreakingProgress(); - - if(progress < prevProgress) - prevProgress = progress; - - }else - { - progress = 1; - prevProgress = 1; - } + renderer.updateProgress(); + else + renderer.resetProgress(); } @Override @@ -238,50 +222,7 @@ public final class NukerHack extends Hack @Override public void onRender(MatrixStack matrixStack, float partialTicks) { - if(currentBlock == null) - return; - - // GL settings - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glDisable(GL11.GL_DEPTH_TEST); - - matrixStack.push(); - - BlockPos camPos = RenderUtils.getCameraBlockPos(); - int regionX = (camPos.getX() >> 9) * 512; - int regionZ = (camPos.getZ() >> 9) * 512; - RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); - - Box box = new Box(BlockPos.ORIGIN); - float p = prevProgress + (progress - prevProgress) * partialTicks; - float red = p * 2F; - float green = 2 - red; - - matrixStack.translate(currentBlock.getX() - regionX, - currentBlock.getY(), currentBlock.getZ() - regionZ); - if(p < 1) - { - matrixStack.translate(0.5, 0.5, 0.5); - matrixStack.scale(p, p, p); - matrixStack.translate(-0.5, -0.5, -0.5); - } - - RenderSystem.setShader(GameRenderer::getPositionProgram); - - RenderSystem.setShaderColor(red, green, 0, 0.25F); - RenderUtils.drawSolidBox(box, matrixStack); - - RenderSystem.setShaderColor(red, green, 0, 0.5F); - RenderUtils.drawOutlinedBox(box, matrixStack); - - matrixStack.pop(); - - // GL resets - RenderSystem.setShaderColor(1, 1, 1, 1); - GL11.glEnable(GL11.GL_DEPTH_TEST); - GL11.glDisable(GL11.GL_BLEND); + renderer.render(matrixStack, partialTicks, currentBlock); } private enum Mode diff --git a/src/main/java/net/wurstclient/hacks/NukerLegitHack.java b/src/main/java/net/wurstclient/hacks/NukerLegitHack.java index d13bdfa1..c1567a15 100644 --- a/src/main/java/net/wurstclient/hacks/NukerLegitHack.java +++ b/src/main/java/net/wurstclient/hacks/NukerLegitHack.java @@ -14,14 +14,9 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; -import org.lwjgl.opengl.GL11; - -import com.mojang.blaze3d.systems.RenderSystem; - import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.Material; -import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -42,7 +37,7 @@ import net.wurstclient.settings.EnumSetting; import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; import net.wurstclient.util.BlockUtils; -import net.wurstclient.util.RenderUtils; +import net.wurstclient.util.OverlayRenderer; import net.wurstclient.util.RotationUtils; @SearchTags({"LegitNuker", "nuker legit", "legit nuker"}) @@ -82,6 +77,7 @@ public final class NukerLegitHack extends Hack "minecraft:raw_copper_block", "minecraft:raw_gold_block", "minecraft:raw_iron_block", "minecraft:redstone_ore"); + private final OverlayRenderer renderer = new OverlayRenderer(); private BlockPos currentBlock; public NukerLegitHack() @@ -128,6 +124,7 @@ public final class NukerLegitHack extends Hack // resets MC.options.attackKey.setPressed(false); + renderer.resetProgress(); currentBlock = null; if(!lockId.isChecked()) id.setBlock(Blocks.AIR); @@ -161,11 +158,14 @@ public final class NukerLegitHack extends Hack @Override public void onUpdate() { + currentBlock = null; + // abort if using IDNuker without an ID being set if(mode.getSelected() == Mode.ID && id.getBlock() == Blocks.AIR) + { + renderer.resetProgress(); return; - - currentBlock = null; + } // get valid blocks Iterable validBlocks = getValidBlocks(range.getValue(), @@ -185,7 +185,12 @@ public final class NukerLegitHack extends Hack // reset if no block was found if(currentBlock == null) + { MC.options.attackKey.setPressed(false); + renderer.resetProgress(); + } + + renderer.updateProgress(); } private ArrayList getValidBlocks(double range, @@ -279,60 +284,7 @@ public final class NukerLegitHack extends Hack @Override public void onRender(MatrixStack matrixStack, float partialTicks) { - if(currentBlock == null) - return; - - // GL settings - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glDisable(GL11.GL_DEPTH_TEST); - - matrixStack.push(); - - BlockPos camPos = RenderUtils.getCameraBlockPos(); - int regionX = (camPos.getX() >> 9) * 512; - int regionZ = (camPos.getZ() >> 9) * 512; - RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); - - // set position - matrixStack.translate(currentBlock.getX() - regionX, - currentBlock.getY(), currentBlock.getZ() - regionZ); - - // get progress - float progress; - if(BlockUtils.getHardness(currentBlock) < 1) - progress = IMC.getInteractionManager().getCurrentBreakingProgress(); - else - progress = 1; - - // set size - if(progress < 1) - { - matrixStack.translate(0.5, 0.5, 0.5); - matrixStack.scale(progress, progress, progress); - matrixStack.translate(-0.5, -0.5, -0.5); - } - - // get color - float red = progress * 2F; - float green = 2 - red; - - // draw box - RenderSystem.setShader(GameRenderer::getPositionProgram); - - RenderSystem.setShaderColor(red, green, 0, 0.25F); - RenderUtils.drawSolidBox(matrixStack); - - RenderSystem.setShaderColor(red, green, 0, 0.5F); - RenderUtils.drawOutlinedBox(matrixStack); - - matrixStack.pop(); - - // GL resets - RenderSystem.setShaderColor(1, 1, 1, 1); - GL11.glEnable(GL11.GL_DEPTH_TEST); - GL11.glDisable(GL11.GL_BLEND); + renderer.render(matrixStack, partialTicks, currentBlock); } private enum Mode diff --git a/src/main/java/net/wurstclient/hacks/OverlayHack.java b/src/main/java/net/wurstclient/hacks/OverlayHack.java index 937594b2..d3b997d5 100644 --- a/src/main/java/net/wurstclient/hacks/OverlayHack.java +++ b/src/main/java/net/wurstclient/hacks/OverlayHack.java @@ -7,22 +7,20 @@ */ package net.wurstclient.hacks; -import org.lwjgl.opengl.GL11; - -import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.BlockPos; import net.wurstclient.Category; import net.wurstclient.events.RenderListener; +import net.wurstclient.events.UpdateListener; import net.wurstclient.hack.Hack; -import net.wurstclient.util.RenderUtils; +import net.wurstclient.util.OverlayRenderer; -public final class OverlayHack extends Hack implements RenderListener +public final class OverlayHack extends Hack + implements UpdateListener, RenderListener { + private final OverlayRenderer renderer = new OverlayRenderer(); + public OverlayHack() { super("Overlay"); @@ -32,70 +30,38 @@ public final class OverlayHack extends Hack implements RenderListener @Override public void onEnable() { + EVENTS.add(UpdateListener.class, this); EVENTS.add(RenderListener.class, this); } @Override public void onDisable() { + EVENTS.remove(UpdateListener.class, this); EVENTS.remove(RenderListener.class, this); + renderer.resetProgress(); + } + + @Override + public void onUpdate() + { + if(MC.interactionManager.isBreakingBlock()) + renderer.updateProgress(); + else + renderer.resetProgress(); } @Override public void onRender(MatrixStack matrixStack, float partialTicks) { - if(MC.crosshairTarget == null - || MC.crosshairTarget.getType() != HitResult.Type.BLOCK) - return; - - BlockHitResult blockHitResult = (BlockHitResult)MC.crosshairTarget; - BlockPos pos = new BlockPos(blockHitResult.getBlockPos()); - - // check if hitting block if(!MC.interactionManager.isBreakingBlock()) return; - // GL settings - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glDisable(GL11.GL_DEPTH_TEST); + if(!(MC.crosshairTarget instanceof BlockHitResult blockHitResult) + || blockHitResult.getType() != HitResult.Type.BLOCK) + return; - matrixStack.push(); - - BlockPos camPos = RenderUtils.getCameraBlockPos(); - int regionX = (camPos.getX() >> 9) * 512; - int regionZ = (camPos.getZ() >> 9) * 512; - RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); - - // set position - matrixStack.translate(pos.getX() - regionX, pos.getY(), - pos.getZ() - regionZ); - - // get progress - float progress = - IMC.getInteractionManager().getCurrentBreakingProgress(); - - // set size - matrixStack.translate(0.5, 0.5, 0.5); - matrixStack.scale(progress, progress, progress); - matrixStack.translate(-0.5, -0.5, -0.5); - - // get color - float red = progress * 2F; - float green = 2 - red; - - // draw box - RenderSystem.setShader(GameRenderer::getPositionProgram); - RenderSystem.setShaderColor(red, green, 0, 0.25F); - RenderUtils.drawSolidBox(matrixStack); - RenderSystem.setShaderColor(red, green, 0, 0.5F); - RenderUtils.drawOutlinedBox(matrixStack); - - matrixStack.pop(); - - // GL resets - GL11.glEnable(GL11.GL_DEPTH_TEST); - GL11.glDisable(GL11.GL_BLEND); + renderer.render(matrixStack, partialTicks, + blockHitResult.getBlockPos()); } } diff --git a/src/main/java/net/wurstclient/util/OverlayRenderer.java b/src/main/java/net/wurstclient/util/OverlayRenderer.java new file mode 100644 index 00000000..a11ab189 --- /dev/null +++ b/src/main/java/net/wurstclient/util/OverlayRenderer.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2014-2023 Wurst-Imperium and contributors. + * + * This source code is subject to the terms of the GNU General Public + * License, version 3. If a copy of the GPL was not distributed with this + * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt + */ +package net.wurstclient.util; + +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.wurstclient.WurstClient; +import net.wurstclient.mixinterface.IMinecraftClient; + +public final class OverlayRenderer +{ + protected static final MinecraftClient MC = WurstClient.MC; + protected static final IMinecraftClient IMC = WurstClient.IMC; + + private float progress; + private float prevProgress; + private BlockPos prevPos; + + public void resetProgress() + { + progress = 0; + prevProgress = 0; + prevPos = null; + } + + public void updateProgress() + { + prevProgress = progress; + progress = IMC.getInteractionManager().getCurrentBreakingProgress(); + + if(progress < prevProgress) + prevProgress = progress; + } + + public void render(MatrixStack matrixStack, float partialTicks, + BlockPos pos) + { + if(pos == null) + return; + + // reset progress if breaking a different block + if(prevPos != null && !pos.equals(prevPos)) + resetProgress(); + + prevPos = pos; + + // GL settings + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + matrixStack.push(); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); + + // set position + matrixStack.translate(pos.getX() - regionX, pos.getY(), + pos.getZ() - regionZ); + + // get interpolated progress + boolean breaksInstantly = (MC.player.getAbilities().creativeMode + || BlockUtils.getHardness(pos) >= 1) + && BlockUtils.canBeClicked(pos); + float p = breaksInstantly ? 1 + : MathHelper.lerp(partialTicks, prevProgress, progress); + + // set size + if(p < 1) + { + matrixStack.translate(0.5, 0.5, 0.5); + matrixStack.scale(p, p, p); + matrixStack.translate(-0.5, -0.5, -0.5); + } + + // get color + float red = p * 2F; + float green = 2 - red; + + // draw box + RenderSystem.setShader(GameRenderer::getPositionProgram); + RenderSystem.setShaderColor(red, green, 0, 0.25F); + RenderUtils.drawSolidBox(matrixStack); + RenderSystem.setShaderColor(red, green, 0, 0.5F); + RenderUtils.drawOutlinedBox(matrixStack); + + matrixStack.pop(); + + // GL resets + RenderSystem.setShaderColor(1, 1, 1, 1); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_BLEND); + } +} From fa668e0efc91b44134f85bd0af925bc7550da324 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 10 May 2023 17:19:18 +0200 Subject: [PATCH 18/48] Make Nuker wait when the user is mining manually --- src/main/java/net/wurstclient/hacks/NukerHack.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/net/wurstclient/hacks/NukerHack.java b/src/main/java/net/wurstclient/hacks/NukerHack.java index 57abf022..ce5a246d 100644 --- a/src/main/java/net/wurstclient/hacks/NukerHack.java +++ b/src/main/java/net/wurstclient/hacks/NukerHack.java @@ -140,6 +140,10 @@ public final class NukerHack extends Hack { currentBlock = null; + // abort if user is mining manually + if(MC.options.attackKey.isPressed()) + return; + // abort if using IDNuker without an ID being set if(mode.getSelected() == Mode.ID && id.getBlock() == Blocks.AIR) return; From 1567a5edee222cc002d83b9a60fddd829d0a064a Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 10 May 2023 17:28:12 +0200 Subject: [PATCH 19/48] Fix lang files still containing PlayerFinder's description --- src/main/resources/assets/wurst/lang/cs_cz.json | 1 - src/main/resources/assets/wurst/lang/en_us.json | 1 - src/main/resources/assets/wurst/lang/fr_fr.json | 1 - src/main/resources/assets/wurst/lang/it_it.json | 1 - src/main/resources/assets/wurst/lang/ja_jp.json | 1 - src/main/resources/assets/wurst/lang/pl_pl.json | 1 - src/main/resources/assets/wurst/lang/ro_ro.json | 1 - src/main/resources/assets/wurst/lang/ru_ru.json | 1 - src/main/resources/assets/wurst/lang/uk_ua.json | 1 - src/main/resources/assets/wurst/lang/zh_cn.json | 1 - src/main/resources/assets/wurst/lang/zh_hk.json | 1 - src/main/resources/assets/wurst/lang/zh_tw.json | 1 - 12 files changed, 12 deletions(-) diff --git a/src/main/resources/assets/wurst/lang/cs_cz.json b/src/main/resources/assets/wurst/lang/cs_cz.json index 8346a662..8040d9ed 100644 --- a/src/main/resources/assets/wurst/lang/cs_cz.json +++ b/src/main/resources/assets/wurst/lang/cs_cz.json @@ -124,7 +124,6 @@ "description.wurst.hack.panic": "Okamžitě vypne všechny povolené hacky.\nS tímhle opatrně!", "description.wurst.hack.parkour": "Při dosažení hrany bloku skáčete automaticky.\nUžitečné pro parkoury a skoko-běhách.", "description.wurst.hack.playeresp": "Zvýrazní okolní hráče.\nESP boxy přátel se zobrazí modře.", - "description.wurst.hack.playerfinder": "Vyhledává vzdálené hráče během bouřek.", "description.wurst.hack.portalgui": "Umožňuje otevření inventářů v portálech.", "description.wurst.hack.potionsaver": "Pozastaví všecny efekty lektvarů, dokud stojíte na místě.", "description.wurst.hack.prophuntesp": "Umožňuje vidět falešné bloky v Prophuntu.\nVyrobeno pro Mineplexí Prophunt. Může však fungovat i na jiných serverech.", diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index 5cdc338a..61a0142a 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -128,7 +128,6 @@ "description.wurst.hack.panic": "Instantly turns off all enabled hacks.\nBe careful with this one!", "description.wurst.hack.parkour": "Makes you jump automatically when reaching the edge of a block.\nUseful for parkours and jump'n'runs.", "description.wurst.hack.playeresp": "Highlights nearby players.\nESP boxes of friends will appear in blue.", - "description.wurst.hack.playerfinder": "Finds far away players during thunderstorms.", "description.wurst.hack.portalgui": "Allows you to open GUIs in portals.", "description.wurst.hack.potionsaver": "Freezes all potion effects while you are standing still.", "description.wurst.hack.prophuntesp": "Allows you to see fake blocks in Prophunt.\nMade for Mineplex Prophunt. Might not work on other servers.", diff --git a/src/main/resources/assets/wurst/lang/fr_fr.json b/src/main/resources/assets/wurst/lang/fr_fr.json index e4f717db..c9cb3691 100644 --- a/src/main/resources/assets/wurst/lang/fr_fr.json +++ b/src/main/resources/assets/wurst/lang/fr_fr.json @@ -121,7 +121,6 @@ "description.wurst.hack.panic": "Désactive instantanément tous les hacks activés.\nSoyez prudent avec celui-ci !", "description.wurst.hack.parkour": "Vous fait sauter automatiquement lorsque vous atteignez le bord d'un bloc.\nUtile pour les parcours.", "description.wurst.hack.playeresp": "Met en évidence les joueurs à proximité.\nLes boîtes ESP des amis apparaîtront en bleu.", - "description.wurst.hack.playerfinder": "Trouve les joueurs éloignés pendant les orages.", "description.wurst.hack.portalgui": "Vous permet d'ouvrir les GUI dans des portails.", "description.wurst.hack.potionsaver": "Gèle tous les effets de potion pendant que vous êtes immobile.", "description.wurst.hack.prophuntesp": "Permet de voir les faux blocs dans le Prophunt.\nConçu pour le Prohunt de Mineplex. Peut ne pas fonctionner sur d'autres serveurs.", diff --git a/src/main/resources/assets/wurst/lang/it_it.json b/src/main/resources/assets/wurst/lang/it_it.json index 41adb13c..1d70da38 100644 --- a/src/main/resources/assets/wurst/lang/it_it.json +++ b/src/main/resources/assets/wurst/lang/it_it.json @@ -124,7 +124,6 @@ "description.wurst.hack.panic": "Disattiva tutte le hack utilizzate.\n Pensa prima di usarlo usi!", "description.wurst.hack.parkour": "Ti fa saltare automaticamente quando arrivi alla fine di un blocco.\nUtile per i parkour e per le jump'n'runs.", "description.wurst.hack.playeresp": "Evidenzia i giocatori vicini.\nI riquadri ESP degli amici saranno in blu.", - "description.wurst.hack.playerfinder": "Trova i giocatori lontani durante le tempeste.", "description.wurst.hack.portalgui": "Ti permette di aprire le GUI nei portali.", "description.wurst.hack.potionsaver": "Blocca tutti gli effetti della pozione mentre sei fermo.", "description.wurst.hack.prophuntesp": "Ti permette di vedere i blocchi falsi in PropHunt.\n Fatto per la PropHunt di Mineplex. Potrebbe non funzionare su altri server.", diff --git a/src/main/resources/assets/wurst/lang/ja_jp.json b/src/main/resources/assets/wurst/lang/ja_jp.json index 8acdf08f..643433c9 100644 --- a/src/main/resources/assets/wurst/lang/ja_jp.json +++ b/src/main/resources/assets/wurst/lang/ja_jp.json @@ -124,7 +124,6 @@ "description.wurst.hack.panic": "使用しているすべてのハックを瞬時にOFFにする。\n誤操作に注意!", "description.wurst.hack.parkour": "ブロックの端に到達した際に自動でジャンプする。\nパルクールなどに有用。", "description.wurst.hack.playeresp": "付近のプレイヤーをハイライト表示する。\nフレンドのESPボックスは青色で表示される。", - "description.wurst.hack.playerfinder": "雷雨時に遠くにいるプレイヤーを見つける。", "description.wurst.hack.portalgui": "ネザーポータルの中にいてもメニューを開けるようになる。", "description.wurst.hack.potionsaver": "静止中にすべてのポーションの効果を停止させる。", "description.wurst.hack.prophuntesp": "Prophuntで偽物のブロックを見破ることができる。\nMineplexサーバーのミニゲーム「Prophunt」用。他サーバーでは動作しない可能性あり。", diff --git a/src/main/resources/assets/wurst/lang/pl_pl.json b/src/main/resources/assets/wurst/lang/pl_pl.json index ce6e904a..e7f6fe2f 100644 --- a/src/main/resources/assets/wurst/lang/pl_pl.json +++ b/src/main/resources/assets/wurst/lang/pl_pl.json @@ -124,7 +124,6 @@ "description.wurst.hack.panic": "Natychmiast wyłącza wszystkie włączone hacki.\nBądź z tym ostrożny!", "description.wurst.hack.parkour": "Sprawia, że skaczesz automatycznie po dotarciu do krawędzi bloku.\nPrzydatne do parkourów i jump'n'runów.", "description.wurst.hack.playeresp": "Podświetla pobliskich graczy.\nKontenery ESP znajomych pojawią się na niebiesko.", - "description.wurst.hack.playerfinder": "Znajduje odległych graczy podczas burzy.", "description.wurst.hack.portalgui": "Umożliwia otwieranie GUI w portalach.", "description.wurst.hack.potionsaver": "Wstrzymuje wszystkie efekty mikstur, gdy stoisz w miejscu.", "description.wurst.hack.prophuntesp": "Pozwala zobaczyć fałszywe bloki w Prophuntcie.\nStworzony dla Prophunta Mineplex'a. Może nie działać na innych serwerach.", diff --git a/src/main/resources/assets/wurst/lang/ro_ro.json b/src/main/resources/assets/wurst/lang/ro_ro.json index 62a6b69c..140edb9c 100644 --- a/src/main/resources/assets/wurst/lang/ro_ro.json +++ b/src/main/resources/assets/wurst/lang/ro_ro.json @@ -120,7 +120,6 @@ "description.wurst.hack.panic": "Opreste instant orice hack pornit.\nAi grija folosing acesta!", "description.wurst.hack.parkour": "Te face sa sari automat cand esti la marginea unui block.\nFolositor pentru parkour.", "description.wurst.hack.playeresp": "Contureaza jucatorii din apropiere.\nHitboxurile prietenilor vor aparea in albastru.", - "description.wurst.hack.playerfinder": "Localizeaza playerii din departare pe timp de furtuna.", "description.wurst.hack.portalgui": "Iti permite sa folosesti GUI-uri in portale.", "description.wurst.hack.potionsaver": "Ingheata efectele potiunilor in timp ce stai pe loc.", "description.wurst.hack.prophuntesp": "Iti permite sa vezi jucatorii ascunsi in prophunt.\nFacut pentru Mineplex Prophunt. Posibil sa nu functioneze pe alte servere.", diff --git a/src/main/resources/assets/wurst/lang/ru_ru.json b/src/main/resources/assets/wurst/lang/ru_ru.json index e38f6602..ab2ff279 100644 --- a/src/main/resources/assets/wurst/lang/ru_ru.json +++ b/src/main/resources/assets/wurst/lang/ru_ru.json @@ -124,7 +124,6 @@ "description.wurst.hack.panic": "Моментально выключает все читы.\nОсторожней с этим!", "description.wurst.hack.parkour": "Заставляет вас автоматически прыгать по достижении края блока.\nПолезно для паркуров и побегов.", "description.wurst.hack.playeresp": "Подсвечивает игроков неподалеку.\nДрузей будет подсвечивать синим.", - "description.wurst.hack.playerfinder": "Находит игроков во время грозы.", "description.wurst.hack.portalgui": "Позволяет открывать инвентарь и чат в порталах.", "description.wurst.hack.potionsaver": "Замораживает время действия всех эффектов пока Вы стоите на месте.", "description.wurst.hack.prophuntesp": "Позволяет отличать ненастоящие блоки в Prophunt.\nСделано для Mineplex Prophunt. Может не работать на других серверах.", diff --git a/src/main/resources/assets/wurst/lang/uk_ua.json b/src/main/resources/assets/wurst/lang/uk_ua.json index 4ac685e0..2622740d 100644 --- a/src/main/resources/assets/wurst/lang/uk_ua.json +++ b/src/main/resources/assets/wurst/lang/uk_ua.json @@ -120,7 +120,6 @@ "description.wurst.hack.panic": "Миттєво вимикає всі чити.\nОбережніше з цим!", "description.wurst.hack.parkour": "Примушує вас автоматично стрибати після досягнення краю блоку.\nКорисно для паркурів та пагонів.", "description.wurst.hack.playeresp": "Підсвічує гравців.\nДрузів буде підсвічувати синім.", - "description.wurst.hack.playerfinder": "Знаходить гравців під час грози.", "description.wurst.hack.portalgui": "Дозволяє відкривати інвентар та чат у порталах.", "description.wurst.hack.potionsaver": "Заморожує дію всіх ефектів, поки ви стоїте на місці.", "description.wurst.hack.prophuntesp": "Дозволяє відрізняти несправжні блоки в Prophunt.\nЗроблено для Mineplex Prophunt. Може працювати на інших серверах.", diff --git a/src/main/resources/assets/wurst/lang/zh_cn.json b/src/main/resources/assets/wurst/lang/zh_cn.json index f4f1ee45..c80adc71 100644 --- a/src/main/resources/assets/wurst/lang/zh_cn.json +++ b/src/main/resources/assets/wurst/lang/zh_cn.json @@ -124,7 +124,6 @@ "description.wurst.hack.panic": "瞬间关闭所有的作弊功能。\n请小心使用!", "description.wurst.hack.parkour": "当你到达方块边缘时自动跳起。\n适用于跑酷或部分需要跑跳的场景。", "description.wurst.hack.playeresp": "高亮透视附近的玩家。\n你的好友会显示蓝色框框。", - "description.wurst.hack.playerfinder": "在雷雨中寻找远处的玩家。", "description.wurst.hack.portalgui": "允许你在传送门内打开 GUI。", "description.wurst.hack.potionsaver": "当你站着不动时冻结所有的药水效果时间。", "description.wurst.hack.prophuntesp": "在躲猫猫小游戏中知道哪些是人扮的方块。\n用于 Mineplex 服务器的 Prophunt(躲猫猫),其他服务器未必奏效。", diff --git a/src/main/resources/assets/wurst/lang/zh_hk.json b/src/main/resources/assets/wurst/lang/zh_hk.json index b0d3cff3..895f9b46 100644 --- a/src/main/resources/assets/wurst/lang/zh_hk.json +++ b/src/main/resources/assets/wurst/lang/zh_hk.json @@ -118,7 +118,6 @@ "description.wurst.hack.panic": "瞬間關閉所有嘅作弊功能。\n請小心使用!", "description.wurst.hack.parkour": "當到方塊邊緣你會自動跳起身。\n適用於跑酷或跳同跑。", "description.wurst.hack.playeresp": "高亮透視附近嘅玩家。\n如果係你嘅好友話會顯示藍色框框。", - "description.wurst.hack.playerfinder": "喺雷雨天中尋找遠處嘅玩家。", "description.wurst.hack.portalgui": "允許你喺傳送門內打開 GUI。", "description.wurst.hack.potionsaver": "當你企住唔郁時凍結所有嘅葯水效果時間。", "description.wurst.hack.prophuntesp": "喺捉依因小游戲中知道邊啲係人扮嘅方塊。\n用於 Mineplex 伺服器嘅 Prophunt(捉依因),其他伺服器未必湊效。", diff --git a/src/main/resources/assets/wurst/lang/zh_tw.json b/src/main/resources/assets/wurst/lang/zh_tw.json index c9470025..d50a5d46 100644 --- a/src/main/resources/assets/wurst/lang/zh_tw.json +++ b/src/main/resources/assets/wurst/lang/zh_tw.json @@ -124,7 +124,6 @@ "description.wurst.hack.panic": "瞬間關閉所有的作弊功能。\n請小心使用!", "description.wurst.hack.parkour": "你會自動跳躍起來,當到方塊的邊緣。\n適用於跑酷或跳和跑。", "description.wurst.hack.playeresp": "高亮透視附近的玩家。\n如果是你的好友的話會顯示藍色框框。", - "description.wurst.hack.playerfinder": "在雷雨中尋找遠處的玩家。", "description.wurst.hack.portalgui": "允許你在傳送門內打開GUI。", "description.wurst.hack.potionsaver": "當你站著不動時凍結所有的藥水效果時間。", "description.wurst.hack.prophuntesp": "在躲猫猫小遊戲中知道哪些是人扮的方塊。\n用於Mineplex服務器的Prophunt(躲猫猫),其他服務器未必凑效。", From ea90a95413fe30d2c22ff14b510db559fede5b4f Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sat, 13 May 2023 20:50:24 +0200 Subject: [PATCH 20/48] Update JSON syntax check --- .github/workflows/jsonsyntax.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/jsonsyntax.yml b/.github/workflows/jsonsyntax.yml index 6d413586..1daceaff 100644 --- a/.github/workflows/jsonsyntax.yml +++ b/.github/workflows/jsonsyntax.yml @@ -1,6 +1,10 @@ name: JSON syntax on: + push: + branches: [ "master" ] + paths: + - '**.json' pull_request: paths: - '**.json' @@ -9,8 +13,8 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: json-syntax-check - uses: limitusus/json-syntax-check@v1.0.3 + uses: limitusus/json-syntax-check@v2 with: pattern: "\\.json$" From f4716a5a0c75849a3c1010044413a197008cf937 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 14 May 2023 21:16:16 +0200 Subject: [PATCH 21/48] Simplify how AutoFish's valid range is rendered --- .../net/wurstclient/hacks/AutoFishHack.java | 5 ++--- .../hacks/autofish/AutoFishDebugDraw.java | 21 ++++++++++--------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFishHack.java b/src/main/java/net/wurstclient/hacks/AutoFishHack.java index e716ecf5..77073b01 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFishHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFishHack.java @@ -39,7 +39,8 @@ public final class AutoFishHack extends Hack private int castRodTimer; private int reelInTimer; - private final AutoFishDebugDraw debugDraw = new AutoFishDebugDraw(); + private final AutoFishDebugDraw debugDraw = + new AutoFishDebugDraw(validRange); private final AutoFishRodSelector rodSelector = new AutoFishRodSelector(); private boolean wasOpenWater; @@ -80,8 +81,6 @@ public final class AutoFishHack extends Hack @Override public void onUpdate() { - debugDraw.updateValidRange(validRange.getValue()); - if(reelInTimer > 0) reelInTimer--; diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java index f34a8a57..eea9ca1d 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java @@ -30,6 +30,7 @@ import net.wurstclient.WurstClient; import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.ColorSetting; import net.wurstclient.settings.Setting; +import net.wurstclient.settings.SliderSetting; import net.wurstclient.util.RenderUtils; public final class AutoFishDebugDraw @@ -41,8 +42,13 @@ public final class AutoFishDebugDraw private final ColorSetting ddColor = new ColorSetting("DD color", "Color of the debug draw, if enabled.", Color.RED); + private final SliderSetting validRange; private Vec3d lastSoundPos; - private Box validRangeBox; + + public AutoFishDebugDraw(SliderSetting validRange) + { + this.validRange = validRange; + } public Stream getSettings() { @@ -52,13 +58,6 @@ public final class AutoFishDebugDraw public void reset() { lastSoundPos = null; - validRangeBox = null; - } - - public void updateValidRange(double validRange) - { - validRangeBox = new Box(-validRange, -1 / 16.0, -validRange, validRange, - 1 / 16.0, validRange); } public void updateSoundPos(PlaySoundS2CPacket sound) @@ -85,7 +84,7 @@ public final class AutoFishDebugDraw RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); FishingBobberEntity bobber = WurstClient.MC.player.fishHook; - if(bobber != null && validRangeBox != null) + if(bobber != null) drawValidRange(matrixStack, bobber, regionX, regionZ); if(lastSoundPos != null) @@ -109,7 +108,9 @@ public final class AutoFishDebugDraw float[] colorF = ddColor.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); - RenderUtils.drawOutlinedBox(validRangeBox, matrixStack); + double vr = validRange.getValue(); + Box vrBox = new Box(-vr, -1 / 16.0, -vr, vr, 1 / 16.0, vr); + RenderUtils.drawOutlinedBox(vrBox, matrixStack); matrixStack.pop(); } From c47f8b6bf803147e373e4f15c44c6c2664e8fd76 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 15 May 2023 12:54:48 +0200 Subject: [PATCH 22/48] Use InventoryUtils in AutoFishRodSelector No more scheduled window clicks! --- .../net/wurstclient/hacks/AutoFishHack.java | 10 +---- .../hacks/autofish/AutoFishRodSelector.java | 44 +------------------ .../net/wurstclient/util/InventoryUtils.java | 18 ++++++-- 3 files changed, 18 insertions(+), 54 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFishHack.java b/src/main/java/net/wurstclient/hacks/AutoFishHack.java index 77073b01..b2c1c209 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFishHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFishHack.java @@ -84,15 +84,6 @@ public final class AutoFishHack extends Hack if(reelInTimer > 0) reelInTimer--; - ClientPlayerEntity player = MC.player; - - if(rodSelector.hasScheduledClick()) - { - rodSelector.doScheduledClick(); - castRodTimer = 15; - return; - } - rodSelector.updateBestRod(); if(!rodSelector.hasARod()) @@ -116,6 +107,7 @@ public final class AutoFishHack extends Hack } // cast rod + ClientPlayerEntity player = MC.player; if(player.fishHook == null || player.fishHook.isRemoved()) { rightClick(); diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java index 5329204e..50b9d436 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java @@ -14,34 +14,19 @@ import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.FishingRodItem; import net.minecraft.item.ItemStack; import net.wurstclient.WurstClient; -import net.wurstclient.mixinterface.IMinecraftClient; +import net.wurstclient.util.InventoryUtils; public final class AutoFishRodSelector { private static final MinecraftClient MC = WurstClient.MC; - private static final IMinecraftClient IMC = WurstClient.IMC; private int bestRodValue; private int bestRodSlot; - private int scheduledWindowClick; - public void reset() { bestRodValue = -1; bestRodSlot = -1; - scheduledWindowClick = -1; - } - - public boolean hasScheduledClick() - { - return scheduledWindowClick != -1; - } - - public void doScheduledClick() - { - IMC.getInteractionManager().windowClick_PICKUP(scheduledWindowClick); - scheduledWindowClick = -1; } public void updateBestRod() @@ -80,32 +65,7 @@ public final class AutoFishRodSelector public void selectBestRod() { - PlayerInventory inventory = MC.player.getInventory(); - - if(bestRodSlot < 9) - { - inventory.selectedSlot = bestRodSlot; - return; - } - - int firstEmptySlot = inventory.getEmptySlot(); - - if(firstEmptySlot != -1) - { - if(firstEmptySlot >= 9) - IMC.getInteractionManager() - .windowClick_QUICK_MOVE(36 + inventory.selectedSlot); - - IMC.getInteractionManager().windowClick_QUICK_MOVE(bestRodSlot); - - }else - { - IMC.getInteractionManager().windowClick_PICKUP(bestRodSlot); - IMC.getInteractionManager() - .windowClick_PICKUP(36 + inventory.selectedSlot); - - scheduledWindowClick = -bestRodSlot; - } + InventoryUtils.selectItem(bestRodSlot); } private int getRodValue(ItemStack stack) diff --git a/src/main/java/net/wurstclient/util/InventoryUtils.java b/src/main/java/net/wurstclient/util/InventoryUtils.java index 1968e625..2a89e566 100644 --- a/src/main/java/net/wurstclient/util/InventoryUtils.java +++ b/src/main/java/net/wurstclient/util/InventoryUtils.java @@ -79,7 +79,6 @@ public enum InventoryUtils int maxInvSlot, boolean takeFromOffhand) { PlayerInventory inventory = MC.player.getInventory(); - IClientPlayerInteractionManager im = IMC.getInteractionManager(); // create a stream of all slots that we want to search IntStream stream = IntStream.range(0, maxInvSlot); @@ -94,6 +93,21 @@ public enum InventoryUtils if(slot == -1) return false; + selectItem(slot); + return true; + } + + /** + * Moves the item in the given slot to {@code inventory.selectedSlot}. + * + * @param slot + * the slot of the item to select + */ + public static void selectItem(int slot) + { + PlayerInventory inventory = MC.player.getInventory(); + IClientPlayerInteractionManager im = IMC.getInteractionManager(); + // if the item is already in the hotbar, just select it if(slot < 9) inventory.selectedSlot = slot; @@ -104,7 +118,5 @@ public enum InventoryUtils // otherwise, swap with the currently selected item else im.windowClick_SWAP(slot, inventory.selectedSlot); - - return false; } } From 7108fa627d608096d93ae7da4d64ebd2592ab0bb Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 15 May 2023 14:03:59 +0200 Subject: [PATCH 23/48] Make selectItem(int) validate the slot number --- .../net/wurstclient/util/InventoryUtils.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/wurstclient/util/InventoryUtils.java b/src/main/java/net/wurstclient/util/InventoryUtils.java index 2a89e566..4c1b6f78 100644 --- a/src/main/java/net/wurstclient/util/InventoryUtils.java +++ b/src/main/java/net/wurstclient/util/InventoryUtils.java @@ -89,25 +89,29 @@ public enum InventoryUtils int slot = stream.filter(i -> predicate.test(inventory.getStack(i))) .findFirst().orElse(-1); - // if no item was found, return false - if(slot == -1) - return false; - - selectItem(slot); - return true; + return selectItem(slot); } /** - * Moves the item in the given slot to {@code inventory.selectedSlot}. + * Moves the item in the given slot to {@code inventory.selectedSlot}. If + * the given slot is negative, this method will do nothing and return + * {@code false}. * * @param slot * the slot of the item to select + * @return {@code true} if the item was moved. This does not necessarily + * mean that the item is now in the selected slot, it could still be + * on its way there. */ - public static void selectItem(int slot) + public static boolean selectItem(int slot) { PlayerInventory inventory = MC.player.getInventory(); IClientPlayerInteractionManager im = IMC.getInteractionManager(); + // if the slot is negative, abort and return false + if(slot < 0) + return false; + // if the item is already in the hotbar, just select it if(slot < 9) inventory.selectedSlot = slot; @@ -118,5 +122,7 @@ public enum InventoryUtils // otherwise, swap with the currently selected item else im.windowClick_SWAP(slot, inventory.selectedSlot); + + return true; } } From 60b14ff7ed5ea3ee652376d6f490b7013183e197 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 15 May 2023 15:25:03 +0200 Subject: [PATCH 24/48] Make AutoFish turning off when it runs out of fishing rods optional --- .../net/wurstclient/hacks/AutoFishHack.java | 25 +++++---- .../hacks/autofish/AutoFishRodSelector.java | 51 ++++++++++++++----- 2 files changed, 53 insertions(+), 23 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFishHack.java b/src/main/java/net/wurstclient/hacks/AutoFishHack.java index b2c1c209..54ec52cf 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFishHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFishHack.java @@ -41,17 +41,28 @@ public final class AutoFishHack extends Hack private final AutoFishDebugDraw debugDraw = new AutoFishDebugDraw(validRange); - private final AutoFishRodSelector rodSelector = new AutoFishRodSelector(); + private final AutoFishRodSelector rodSelector = + new AutoFishRodSelector(this); private boolean wasOpenWater; public AutoFishHack() { super("AutoFish"); - setCategory(Category.OTHER); + addSetting(validRange); debugDraw.getSettings().forEach(this::addSetting); + rodSelector.getSettings().forEach(this::addSetting); + } + + @Override + public String getRenderName() + { + if(!rodSelector.hasARod()) + return getName() + " [out of rods]"; + + return getName(); } @Override @@ -84,15 +95,7 @@ public final class AutoFishHack extends Hack if(reelInTimer > 0) reelInTimer--; - rodSelector.updateBestRod(); - - if(!rodSelector.hasARod()) - { - ChatUtils.message("AutoFish has run out of fishing rods."); - setEnabled(false); - return; - } - + // select fishing rod if(!rodSelector.isBestRodAlreadySelected()) { rodSelector.selectBestRod(); diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java index 50b9d436..a8a8733d 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java @@ -7,6 +7,8 @@ */ package net.wurstclient.hacks.autofish; +import java.util.stream.Stream; + import net.minecraft.client.MinecraftClient; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; @@ -14,28 +16,53 @@ import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.FishingRodItem; import net.minecraft.item.ItemStack; import net.wurstclient.WurstClient; +import net.wurstclient.hacks.AutoFishHack; +import net.wurstclient.settings.CheckboxSetting; +import net.wurstclient.settings.Setting; +import net.wurstclient.util.ChatUtils; import net.wurstclient.util.InventoryUtils; public final class AutoFishRodSelector { private static final MinecraftClient MC = WurstClient.MC; + private final CheckboxSetting stopWhenOutOfRods = new CheckboxSetting( + "Stop when out of rods", + "If enabled, AutoFish will turn itself off when it runs out of fishing rods.", + false); + + private final AutoFishHack autoFish; private int bestRodValue; private int bestRodSlot; + public AutoFishRodSelector(AutoFishHack autoFish) + { + this.autoFish = autoFish; + } + + public Stream getSettings() + { + return Stream.of(stopWhenOutOfRods); + } + public void reset() { bestRodValue = -1; bestRodSlot = -1; } - public void updateBestRod() + public boolean hasARod() + { + return bestRodSlot != -1; + } + + public boolean isBestRodAlreadySelected() { PlayerInventory inventory = MC.player.getInventory(); int selectedSlot = inventory.selectedSlot; ItemStack selectedStack = inventory.getStack(selectedSlot); - // start with selected rod + // evaluate selected rod (or lack thereof) bestRodValue = getRodValue(selectedStack); bestRodSlot = bestRodValue > -1 ? selectedSlot : -1; @@ -51,20 +78,20 @@ public final class AutoFishRodSelector bestRodSlot = slot; } } - } - - public boolean hasARod() - { - return bestRodSlot != -1; - } - - public boolean isBestRodAlreadySelected() - { - return bestRodSlot == MC.player.getInventory().selectedSlot; + + // return true if selected rod is best rod + return bestRodSlot == selectedSlot; } public void selectBestRod() { + if(bestRodSlot == -1 && stopWhenOutOfRods.isChecked()) + { + ChatUtils.message("AutoFish has run out of fishing rods."); + autoFish.setEnabled(false); + return; + } + InventoryUtils.selectItem(bestRodSlot); } From 73e27eabc674b1853d7d41660fd5b3a9ffad113e Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 15 May 2023 16:13:15 +0200 Subject: [PATCH 25/48] Fix InventoryUtils not handling the offhand correctly --- .../net/wurstclient/util/InventoryUtils.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/wurstclient/util/InventoryUtils.java b/src/main/java/net/wurstclient/util/InventoryUtils.java index 4c1b6f78..02a3aad1 100644 --- a/src/main/java/net/wurstclient/util/InventoryUtils.java +++ b/src/main/java/net/wurstclient/util/InventoryUtils.java @@ -118,11 +118,29 @@ public enum InventoryUtils // if there is an empty slot in the hotbar, shift-click the item there // it will be selected in the next tick else if(inventory.getEmptySlot() > -1 && inventory.getEmptySlot() < 9) - im.windowClick_QUICK_MOVE(slot); + im.windowClick_QUICK_MOVE(toNetworkSlot(slot)); // otherwise, swap with the currently selected item else - im.windowClick_SWAP(slot, inventory.selectedSlot); + im.windowClick_SWAP(toNetworkSlot(slot), inventory.selectedSlot); return true; } + + private static int toNetworkSlot(int slot) + { + // hotbar + if(slot >= 0 && slot < 9) + return slot + 36; + + // armor + if(slot >= 36 && slot < 40) + return 44 - slot; + + // offhand + if(slot == 40) + return 45; + + // everything else + return slot; + } } From 15ce5ab8c8d8b4434d8e38631d7cdeb5087ae7e8 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 15 May 2023 16:23:06 +0200 Subject: [PATCH 26/48] Let AutoFishRodSelector see the offhand slot --- .../wurstclient/hacks/autofish/AutoFishRodSelector.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java index a8a8733d..7cd13707 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java @@ -7,6 +7,7 @@ */ package net.wurstclient.hacks.autofish; +import java.util.stream.IntStream; import java.util.stream.Stream; import net.minecraft.client.MinecraftClient; @@ -66,8 +67,12 @@ public final class AutoFishRodSelector bestRodValue = getRodValue(selectedStack); bestRodSlot = bestRodValue > -1 ? selectedSlot : -1; + // create a stream of all slots that we want to search + IntStream stream = IntStream.range(0, 36); + stream = IntStream.concat(stream, IntStream.of(40)); + // search inventory for better rod - for(int slot = 0; slot < 36; slot++) + for(int slot : stream.toArray()) { ItemStack stack = inventory.getStack(slot); int rodValue = getRodValue(stack); From 8daf38af68e87dd0834d6ba7bb39434ea3613ffd Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 15 May 2023 16:58:34 +0200 Subject: [PATCH 27/48] Interpolate AutoFishDebugDraw --- .../wurstclient/hacks/autofish/AutoFishDebugDraw.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java index eea9ca1d..469a0388 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java @@ -31,6 +31,7 @@ import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.ColorSetting; import net.wurstclient.settings.Setting; import net.wurstclient.settings.SliderSetting; +import net.wurstclient.util.EntityUtils; import net.wurstclient.util.RenderUtils; public final class AutoFishDebugDraw @@ -85,7 +86,7 @@ public final class AutoFishDebugDraw FishingBobberEntity bobber = WurstClient.MC.player.fishHook; if(bobber != null) - drawValidRange(matrixStack, bobber, regionX, regionZ); + drawValidRange(matrixStack, partialTicks, bobber, regionX, regionZ); if(lastSoundPos != null) drawLastBite(matrixStack, regionX, regionZ); @@ -98,12 +99,13 @@ public final class AutoFishDebugDraw GL11.glDisable(GL11.GL_BLEND); } - private void drawValidRange(MatrixStack matrixStack, + private void drawValidRange(MatrixStack matrixStack, float partialTicks, FishingBobberEntity bobber, int regionX, int regionZ) { matrixStack.push(); - matrixStack.translate(bobber.getX() - regionX, bobber.getY(), - bobber.getZ() - regionZ); + Vec3d pos = EntityUtils.getLerpedPos(bobber, partialTicks); + matrixStack.translate(pos.getX() - regionX, pos.getY(), + pos.getZ() - regionZ); float[] colorF = ddColor.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); From f0a87b5cd789808d8bb5487c73216595bcba26fa Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 15 May 2023 17:20:15 +0200 Subject: [PATCH 28/48] Fix "Max tokens" description still claiming that stop sequences are broken in oobabooga webui They work fine as of 7eba22f51a3d770e617c9f0c589b830a6c8ed3fb. --- .../net/wurstclient/hacks/autocomplete/ModelSettings.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/autocomplete/ModelSettings.java b/src/main/java/net/wurstclient/hacks/autocomplete/ModelSettings.java index 9e84ef9c..701e51b8 100644 --- a/src/main/java/net/wurstclient/hacks/autocomplete/ModelSettings.java +++ b/src/main/java/net/wurstclient/hacks/autocomplete/ModelSettings.java @@ -66,10 +66,7 @@ public final class ModelSettings "The maximum number of tokens that the model can generate.\n\n" + "Higher values allow the model to predict longer chat messages," + " but also increase the time it takes to generate predictions.\n\n" - + "The default value of 16 is fine for most use cases.\n\n" - + "When using an API that doesn't support stop sequences (like the" - + " oobabooga web UI), higher values will result in a lot of wasted" - + " time and tokens.", + + "The default value of 16 is fine for most use cases.", 16, 1, 100, 1, ValueDisplay.INTEGER); public final SliderSetting temperature = new SliderSetting("Temperature", From a1925741df04db716a68b8755164e0760033697f Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 15 May 2023 18:14:09 +0200 Subject: [PATCH 29/48] Clean up AutoFishHack --- .../net/wurstclient/hacks/AutoFishHack.java | 87 +++++++++---------- 1 file changed, 42 insertions(+), 45 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFishHack.java b/src/main/java/net/wurstclient/hacks/AutoFishHack.java index 54ec52cf..b0dac667 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFishHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFishHack.java @@ -10,8 +10,7 @@ package net.wurstclient.hacks; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.projectile.FishingBobberEntity; -import net.minecraft.item.FishingRodItem; -import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; import net.minecraft.sound.SoundEvents; import net.wurstclient.Category; @@ -27,7 +26,9 @@ import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; import net.wurstclient.util.ChatUtils; -@SearchTags({"FishBot", "auto fish", "fish bot", "fishing"}) +@SearchTags({"AutoFishing", "auto fishing", "AutoFisher", "auto fisher", + "AFKFishBot", "afk fish bot", "AFKFishingBot", "afk fishing bot", + "AFKFisherBot", "afk fisher bot"}) public final class AutoFishHack extends Hack implements UpdateListener, PacketInputListener, RenderListener { @@ -36,14 +37,14 @@ public final class AutoFishHack extends Hack + "Increase your range if bites are not being detected, decrease it if other people's bites are being detected as yours.", 1.5, 0.25, 8, 0.25, ValueDisplay.DECIMAL); - private int castRodTimer; - private int reelInTimer; - private final AutoFishDebugDraw debugDraw = new AutoFishDebugDraw(validRange); private final AutoFishRodSelector rodSelector = new AutoFishRodSelector(this); + private int castRodTimer; + private int reelInTimer; + private boolean wasOpenWater; public AutoFishHack() @@ -92,6 +93,9 @@ public final class AutoFishHack extends Hack @Override public void onUpdate() { + // update timers + if(castRodTimer > 0) + castRodTimer--; if(reelInTimer > 0) reelInTimer--; @@ -102,27 +106,23 @@ public final class AutoFishHack extends Hack return; } - // wait for timer - if(castRodTimer > 0) + // if not fishing, cast rod + if(!isFishing()) { - castRodTimer--; + if(castRodTimer > 0) + return; + + IMC.rightClick(); + castRodTimer = 15; + reelInTimer = 1200; return; } - // cast rod - ClientPlayerEntity player = MC.player; - if(player.fishHook == null || player.fishHook.isRemoved()) - { - rightClick(); - castRodTimer = 15; - reelInTimer = 1200; - } - - // reel in after 60s + // otherwise, reel in when it's time if(reelInTimer == 0) { reelInTimer--; - rightClick(); + IMC.rightClick(); castRodTimer = 15; } } @@ -130,10 +130,7 @@ public final class AutoFishHack extends Hack @Override public void onReceivedPacket(PacketInputEvent event) { - ClientPlayerEntity player = MC.player; - if(player == null || player.fishHook == null) - return; - + // check packet type if(!(event.getPacket() instanceof PlaySoundS2CPacket)) return; @@ -143,16 +140,26 @@ public final class AutoFishHack extends Hack .equals(sound.getSound().value())) return; + // check if player is fishing + if(!isFishing()) + return; + + // check if player is holding a fishing rod + ClientPlayerEntity player = MC.player; + if(!player.getMainHandStack().isOf(Items.FISHING_ROD)) + return; + debugDraw.updateSoundPos(sound); - // check position + // check sound position FishingBobberEntity bobber = player.fishHook; if(Math.abs(sound.getX() - bobber.getX()) > validRange.getValue() || Math.abs(sound.getZ() - bobber.getZ()) > validRange.getValue()) return; // check open water - boolean isOpenWater = isInOpenWater(bobber); + boolean isOpenWater = ((IFishingBobberEntity)bobber) + .checkOpenWaterAround(bobber.getBlockPos()); if(!isOpenWater && wasOpenWater) { ChatUtils.warning("You are currently fishing in shallow water."); @@ -162,28 +169,11 @@ public final class AutoFishHack extends Hack if(!WURST.getHax().openWaterEspHack.isEnabled()) ChatUtils.message("Use OpenWaterESP to find open water."); } + wasOpenWater = isOpenWater; // catch fish - rightClick(); + reelInTimer = 0; castRodTimer = 15; - wasOpenWater = isOpenWater; - } - - private boolean isInOpenWater(FishingBobberEntity bobber) - { - return ((IFishingBobberEntity)bobber) - .checkOpenWaterAround(bobber.getBlockPos()); - } - - private void rightClick() - { - // check held item - ItemStack stack = MC.player.getInventory().getMainHandStack(); - if(stack.isEmpty() || !(stack.getItem() instanceof FishingRodItem)) - return; - - // right click - IMC.rightClick(); } @Override @@ -191,4 +181,11 @@ public final class AutoFishHack extends Hack { debugDraw.render(matrixStack, partialTicks); } + + private boolean isFishing() + { + ClientPlayerEntity player = MC.player; + return player != null && player.fishHook != null + && !player.fishHook.isRemoved(); + } } From dd39d597cee99b510b624a546043ff5c047f1731 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 16 May 2023 12:35:30 +0200 Subject: [PATCH 30/48] Add catchDelay, retryDelay and patience sliders to AutoFish --- .../net/wurstclient/hacks/AutoFishHack.java | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFishHack.java b/src/main/java/net/wurstclient/hacks/AutoFishHack.java index b0dac667..06be48ec 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFishHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFishHack.java @@ -34,9 +34,23 @@ public final class AutoFishHack extends Hack { private final SliderSetting validRange = new SliderSetting("Valid range", "Any bites that occur outside of this range will be ignored.\n\n" - + "Increase your range if bites are not being detected, decrease it if other people's bites are being detected as yours.", + + "Increase your range if bites are not being detected, decrease it" + + " if other people's bites are being detected as yours.", 1.5, 0.25, 8, 0.25, ValueDisplay.DECIMAL); + private final SliderSetting catchDelay = new SliderSetting("Catch delay", + "How long AutoFish will wait after a bite before reeling in.", 0, 0, 60, + 1, ValueDisplay.INTEGER.withSuffix(" ticks")); + + private final SliderSetting retryDelay = new SliderSetting("Retry delay", + "If casting or reeling in the fishing rod fails, this is how long" + + " AutoFish will wait before trying again.", + 15, 0, 100, 1, ValueDisplay.INTEGER.withSuffix(" ticks")); + + private final SliderSetting patience = new SliderSetting("Patience", + "How long AutoFish will wait if it doesn't get a bite before reeling in.", + 60, 10, 120, 1, ValueDisplay.INTEGER.withSuffix("s")); + private final AutoFishDebugDraw debugDraw = new AutoFishDebugDraw(validRange); private final AutoFishRodSelector rodSelector = @@ -53,6 +67,9 @@ public final class AutoFishHack extends Hack setCategory(Category.OTHER); addSetting(validRange); + addSetting(catchDelay); + addSetting(retryDelay); + addSetting(patience); debugDraw.getSettings().forEach(this::addSetting); rodSelector.getSettings().forEach(this::addSetting); } @@ -113,17 +130,17 @@ public final class AutoFishHack extends Hack return; IMC.rightClick(); - castRodTimer = 15; - reelInTimer = 1200; + castRodTimer = retryDelay.getValueI(); + reelInTimer = 20 * patience.getValueI(); return; } // otherwise, reel in when it's time if(reelInTimer == 0) { - reelInTimer--; IMC.rightClick(); - castRodTimer = 15; + reelInTimer = retryDelay.getValueI(); + castRodTimer = retryDelay.getValueI(); } } @@ -172,8 +189,7 @@ public final class AutoFishHack extends Hack wasOpenWater = isOpenWater; // catch fish - reelInTimer = 0; - castRodTimer = 15; + reelInTimer = catchDelay.getValueI(); } @Override From 58250ee900dd7768f4b85e28dca49ea7594b4e9c Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 16 May 2023 17:01:23 +0200 Subject: [PATCH 31/48] Make AutoFish's shallow water warning optional --- .../net/wurstclient/hacks/AutoFishHack.java | 30 +++------- .../autofish/ShallowWaterWarningCheckbox.java | 56 +++++++++++++++++++ 2 files changed, 65 insertions(+), 21 deletions(-) create mode 100644 src/main/java/net/wurstclient/hacks/autofish/ShallowWaterWarningCheckbox.java diff --git a/src/main/java/net/wurstclient/hacks/AutoFishHack.java b/src/main/java/net/wurstclient/hacks/AutoFishHack.java index 06be48ec..1c8113e2 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFishHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFishHack.java @@ -21,10 +21,9 @@ import net.wurstclient.events.UpdateListener; import net.wurstclient.hack.Hack; import net.wurstclient.hacks.autofish.AutoFishDebugDraw; import net.wurstclient.hacks.autofish.AutoFishRodSelector; -import net.wurstclient.mixinterface.IFishingBobberEntity; +import net.wurstclient.hacks.autofish.ShallowWaterWarningCheckbox; import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; -import net.wurstclient.util.ChatUtils; @SearchTags({"AutoFishing", "auto fishing", "AutoFisher", "auto fisher", "AFKFishBot", "afk fish bot", "AFKFishingBot", "afk fishing bot", @@ -51,6 +50,9 @@ public final class AutoFishHack extends Hack "How long AutoFish will wait if it doesn't get a bite before reeling in.", 60, 10, 120, 1, ValueDisplay.INTEGER.withSuffix("s")); + private final ShallowWaterWarningCheckbox shallowWaterWarning = + new ShallowWaterWarningCheckbox(); + private final AutoFishDebugDraw debugDraw = new AutoFishDebugDraw(validRange); private final AutoFishRodSelector rodSelector = @@ -59,8 +61,6 @@ public final class AutoFishHack extends Hack private int castRodTimer; private int reelInTimer; - private boolean wasOpenWater; - public AutoFishHack() { super("AutoFish"); @@ -72,6 +72,7 @@ public final class AutoFishHack extends Hack addSetting(patience); debugDraw.getSettings().forEach(this::addSetting); rodSelector.getSettings().forEach(this::addSetting); + addSetting(shallowWaterWarning); } @Override @@ -89,10 +90,10 @@ public final class AutoFishHack extends Hack WURST.getHax().airPlaceHack.setEnabled(false); castRodTimer = 0; - reelInTimer = -1; + reelInTimer = 0; rodSelector.reset(); debugDraw.reset(); - wasOpenWater = true; + shallowWaterWarning.reset(); EVENTS.add(UpdateListener.class, this); EVENTS.add(PacketInputListener.class, this); @@ -148,11 +149,10 @@ public final class AutoFishHack extends Hack public void onReceivedPacket(PacketInputEvent event) { // check packet type - if(!(event.getPacket() instanceof PlaySoundS2CPacket)) + if(!(event.getPacket() instanceof PlaySoundS2CPacket sound)) return; // check sound type - PlaySoundS2CPacket sound = (PlaySoundS2CPacket)event.getPacket(); if(!SoundEvents.ENTITY_FISHING_BOBBER_SPLASH .equals(sound.getSound().value())) return; @@ -174,19 +174,7 @@ public final class AutoFishHack extends Hack || Math.abs(sound.getZ() - bobber.getZ()) > validRange.getValue()) return; - // check open water - boolean isOpenWater = ((IFishingBobberEntity)bobber) - .checkOpenWaterAround(bobber.getBlockPos()); - if(!isOpenWater && wasOpenWater) - { - ChatUtils.warning("You are currently fishing in shallow water."); - ChatUtils.message( - "You can't get any treasure items while fishing like this."); - - if(!WURST.getHax().openWaterEspHack.isEnabled()) - ChatUtils.message("Use OpenWaterESP to find open water."); - } - wasOpenWater = isOpenWater; + shallowWaterWarning.checkWaterAround(bobber); // catch fish reelInTimer = catchDelay.getValueI(); diff --git a/src/main/java/net/wurstclient/hacks/autofish/ShallowWaterWarningCheckbox.java b/src/main/java/net/wurstclient/hacks/autofish/ShallowWaterWarningCheckbox.java new file mode 100644 index 00000000..849324d5 --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/autofish/ShallowWaterWarningCheckbox.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014-2023 Wurst-Imperium and contributors. + * + * This source code is subject to the terms of the GNU General Public + * License, version 3. If a copy of the GPL was not distributed with this + * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt + */ +package net.wurstclient.hacks.autofish; + +import net.minecraft.entity.projectile.FishingBobberEntity; +import net.wurstclient.WurstClient; +import net.wurstclient.mixinterface.IFishingBobberEntity; +import net.wurstclient.settings.CheckboxSetting; +import net.wurstclient.util.ChatUtils; + +public class ShallowWaterWarningCheckbox extends CheckboxSetting +{ + private boolean hasAlreadyWarned; + + public ShallowWaterWarningCheckbox() + { + super("Shallow water warning", + "Displays a warning message in chat when you are fishing in shallow" + + " water.", + true); + } + + public void reset() + { + hasAlreadyWarned = false; + } + + public void checkWaterAround(FishingBobberEntity bobber) + { + boolean isOpenWater = ((IFishingBobberEntity)bobber) + .checkOpenWaterAround(bobber.getBlockPos()); + + if(isOpenWater) + { + hasAlreadyWarned = false; + return; + } + + if(isChecked() && !hasAlreadyWarned) + { + ChatUtils.warning("You are currently fishing in shallow water."); + ChatUtils.message( + "You can't get any treasure items while fishing like this."); + + if(!WurstClient.INSTANCE.getHax().openWaterEspHack.isEnabled()) + ChatUtils.message("Use OpenWaterESP to find open water."); + + hasAlreadyWarned = true; + } + } +} From 8ec62e72d057865ea7cdc72fb6e24ce120ba157c Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 18 May 2023 22:26:42 +0200 Subject: [PATCH 32/48] Add option to turn off AutoFish when inventory is full --- .../net/wurstclient/hacks/AutoFishHack.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/net/wurstclient/hacks/AutoFishHack.java b/src/main/java/net/wurstclient/hacks/AutoFishHack.java index 1c8113e2..6e4fe102 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFishHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFishHack.java @@ -22,8 +22,10 @@ import net.wurstclient.hack.Hack; import net.wurstclient.hacks.autofish.AutoFishDebugDraw; import net.wurstclient.hacks.autofish.AutoFishRodSelector; import net.wurstclient.hacks.autofish.ShallowWaterWarningCheckbox; +import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; +import net.wurstclient.util.ChatUtils; @SearchTags({"AutoFishing", "auto fishing", "AutoFisher", "auto fisher", "AFKFishBot", "afk fish bot", "AFKFishingBot", "afk fishing bot", @@ -50,6 +52,11 @@ public final class AutoFishHack extends Hack "How long AutoFish will wait if it doesn't get a bite before reeling in.", 60, 10, 120, 1, ValueDisplay.INTEGER.withSuffix("s")); + private final CheckboxSetting stopWhenInvFull = new CheckboxSetting( + "Stop when inv full", + "If enabled, AutoFish will turn itself off when your inventory is full.", + false); + private final ShallowWaterWarningCheckbox shallowWaterWarning = new ShallowWaterWarningCheckbox(); @@ -72,6 +79,7 @@ public final class AutoFishHack extends Hack addSetting(patience); debugDraw.getSettings().forEach(this::addSetting); rodSelector.getSettings().forEach(this::addSetting); + addSetting(stopWhenInvFull); addSetting(shallowWaterWarning); } @@ -117,6 +125,16 @@ public final class AutoFishHack extends Hack if(reelInTimer > 0) reelInTimer--; + // check if inventory is full + if(stopWhenInvFull.isChecked() + && MC.player.getInventory().getEmptySlot() == -1) + { + ChatUtils.message( + "AutoFish has stopped because your inventory is full."); + setEnabled(false); + return; + } + // select fishing rod if(!rodSelector.isBestRodAlreadySelected()) { From bb00afa3ab1ca446dd6c23cd158db3c8b4a327f1 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 18 May 2023 22:38:45 +0200 Subject: [PATCH 33/48] Change version to 7.35 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5ef3bc12..6b47e69f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ loader_version=0.14.19 fabric_version=0.80.0+1.19.4 # Mod Properties -mod_version = v7.34-MC1.19.4 +mod_version = v7.35-MC1.19.4 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 443d8650..fe5abe63 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -56,7 +56,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.34"; + public static final String VERSION = "7.35"; public static final String MC_VERSION = "1.19.4"; private WurstAnalytics analytics; From f0064f433be62be557039ab1b896711f539b8b55 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 19 May 2023 00:45:51 +0200 Subject: [PATCH 34/48] Use OverlayRenderer in AutoLibrarianHack --- .../wurstclient/hacks/AutoLibrarianHack.java | 58 +++---------------- 1 file changed, 7 insertions(+), 51 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java b/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java index 33a8610d..08534e16 100644 --- a/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java @@ -51,15 +51,9 @@ import net.wurstclient.settings.BookOffersSetting; import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; -import net.wurstclient.util.BlockBreaker; +import net.wurstclient.util.*; import net.wurstclient.util.BlockBreaker.BlockBreakingParams; -import net.wurstclient.util.BlockPlacer; import net.wurstclient.util.BlockPlacer.BlockPlacingParams; -import net.wurstclient.util.BlockUtils; -import net.wurstclient.util.ChatUtils; -import net.wurstclient.util.InventoryUtils; -import net.wurstclient.util.RenderUtils; -import net.wurstclient.util.RotationUtils; @SearchTags({"auto librarian", "AutoVillager", "auto villager", "VillagerTrainer", "villager trainer", "LibrarianTrainer", @@ -104,6 +98,7 @@ public final class AutoLibrarianHack extends Hack + "Can be adjusted from 0 (off) to 100.", 1, 0, 100, 1, ValueDisplay.INTEGER.withLabel(0, "off")); + private final OverlayRenderer overlay = new OverlayRenderer(); private final HashSet experiencedVillagers = new HashSet<>(); @@ -112,8 +107,6 @@ public final class AutoLibrarianHack extends Hack private boolean placingJobSite; private boolean breakingJobSite; - private float progress; - private float prevProgress; public AutoLibrarianHack() { @@ -148,8 +141,7 @@ public final class AutoLibrarianHack extends Hack breakingJobSite = false; } - progress = 0; - prevProgress = 0; + overlay.resetProgress(); villager = null; jobSite = null; placingJobSite = false; @@ -290,19 +282,7 @@ public final class AutoLibrarianHack extends Hack swingHand.getSelected().swing(Hand.MAIN_HAND); // update progress - if(MC.player.getAbilities().creativeMode - || BlockUtils.getHardness(jobSite) >= 1) - { - progress = 1; - prevProgress = 1; - return; - } - - prevProgress = progress; - progress = IMC.getInteractionManager().getCurrentBreakingProgress(); - - if(progress < prevProgress) - prevProgress = progress; + overlay.updateProgress(); } private void placeJobSite() @@ -550,38 +530,14 @@ public final class AutoLibrarianHack extends Hack RenderUtils.drawCrossBox(box, matrixStack); } - if(breakingJobSite && jobSite != null) - { - matrixStack.push(); - - Box box = new Box(BlockPos.ORIGIN); - float p = prevProgress + (progress - prevProgress) * partialTicks; - float red = p * 2F; - float green = 2 - red; - - matrixStack.translate(jobSite.getX() - regionX, jobSite.getY(), - jobSite.getZ() - regionZ); - if(p < 1) - { - matrixStack.translate(0.5, 0.5, 0.5); - matrixStack.scale(p, p, p); - matrixStack.translate(-0.5, -0.5, -0.5); - } - - RenderSystem.setShaderColor(red, green, 0, 0.25F); - RenderUtils.drawSolidBox(box, matrixStack); - - RenderSystem.setShaderColor(red, green, 0, 0.5F); - RenderUtils.drawOutlinedBox(box, matrixStack); - - matrixStack.pop(); - } - matrixStack.pop(); // GL resets RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); + + if(breakingJobSite) + overlay.render(matrixStack, partialTicks, jobSite); } } From 4fa783dd6f1956f1b1bcf0a320de68e78f87e3ef Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 19 May 2023 13:40:27 +0200 Subject: [PATCH 35/48] Use square & ceil helpers for AutoFarm range --- src/main/java/net/wurstclient/hacks/AutoFarmHack.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java index 4b1de48b..de28b627 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java @@ -120,8 +120,8 @@ public final class AutoFarmHack extends Hack currentBlock = null; Vec3d eyesVec = RotationUtils.getEyesPos().subtract(0.5, 0.5, 0.5); BlockPos eyesBlock = BlockPos.ofFloored(RotationUtils.getEyesPos()); - double rangeSq = Math.pow(range.getValue(), 2); - int blockRange = (int)Math.ceil(range.getValue()); + double rangeSq = range.getValueSq(); + int blockRange = range.getValueCeil(); List blocks = getBlockStream(eyesBlock, blockRange) .filter(pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) From e370b9e46feaddeaa7ab40b625499bba50d03933 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 19 May 2023 17:08:41 +0200 Subject: [PATCH 36/48] Update Fabric API --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6b47e69f..747a5ca9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.19.4+build.2 loader_version=0.14.19 #Fabric api -fabric_version=0.80.0+1.19.4 +fabric_version=0.81.1+1.19.4 # Mod Properties mod_version = v7.35-MC1.19.4 From 880809f0c39323df926648c1a5f1db66e95b198d Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sat, 20 May 2023 21:16:48 +0200 Subject: [PATCH 37/48] Use OverlayRenderer in AutoFarmHack --- .../net/wurstclient/hacks/AutoFarmHack.java | 70 +++++-------------- .../net/wurstclient/util/OverlayRenderer.java | 5 +- 2 files changed, 18 insertions(+), 57 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java index de28b627..3be8ee1c 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java @@ -49,6 +49,7 @@ import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; import net.wurstclient.util.BlockBreaker; import net.wurstclient.util.BlockUtils; +import net.wurstclient.util.OverlayRenderer; import net.wurstclient.util.RenderUtils; import net.wurstclient.util.RotationUtils; @@ -66,9 +67,8 @@ public final class AutoFarmHack extends Hack private final ArrayDeque> prevBlocks = new ArrayDeque<>(); private BlockPos currentBlock; - private float progress; - private float prevProgress; + private final OverlayRenderer overlay = new OverlayRenderer(); private VertexBuffer greenBuffer; private VertexBuffer cyanBuffer; private VertexBuffer redBuffer; @@ -107,6 +107,7 @@ public final class AutoFarmHack extends Hack } prevBlocks.clear(); + overlay.resetProgress(); busy = false; Stream.of(greenBuffer, cyanBuffer, redBuffer).filter(Objects::nonNull) @@ -187,9 +188,6 @@ public final class AutoFarmHack extends Hack @Override public void onRender(MatrixStack matrixStack, float partialTicks) { - if(WurstClient.MC.getBlockEntityRenderDispatcher().camera == null) - return; - // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); @@ -232,39 +230,14 @@ public final class AutoFarmHack extends Hack VertexBuffer.unbind(); } - if(currentBlock != null) - { - matrixStack.push(); - - Box box = new Box(BlockPos.ORIGIN); - float p = prevProgress + (progress - prevProgress) * partialTicks; - float red = p * 2F; - float green = 2 - red; - - matrixStack.translate(currentBlock.getX() - regionX, - currentBlock.getY(), currentBlock.getZ() - regionZ); - if(p < 1) - { - matrixStack.translate(0.5, 0.5, 0.5); - matrixStack.scale(p, p, p); - matrixStack.translate(-0.5, -0.5, -0.5); - } - - RenderSystem.setShaderColor(red, green, 0, 0.25F); - RenderUtils.drawSolidBox(box, matrixStack); - - RenderSystem.setShaderColor(red, green, 0, 0.5F); - RenderUtils.drawOutlinedBox(box, matrixStack); - - matrixStack.pop(); - } - matrixStack.pop(); // GL resets RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); + + overlay.render(matrixStack, partialTicks, currentBlock); } private Stream getBlockStream(BlockPos center, int range) @@ -467,23 +440,21 @@ public final class AutoFarmHack extends Hack { if(MC.player.getAbilities().creativeMode) { - Stream stream3 = blocksToHarvest.parallelStream(); + Stream stream = blocksToHarvest.parallelStream(); for(Set set : prevBlocks) - stream3 = stream3.filter(pos -> !set.contains(pos)); - List blocksToHarvest2 = - stream3.collect(Collectors.toList()); + stream = stream.filter(pos -> !set.contains(pos)); + List filteredBlocks = stream.collect(Collectors.toList()); - prevBlocks.addLast(new HashSet<>(blocksToHarvest2)); + prevBlocks.addLast(new HashSet<>(filteredBlocks)); while(prevBlocks.size() > 5) prevBlocks.removeFirst(); - if(!blocksToHarvest2.isEmpty()) - currentBlock = blocksToHarvest2.get(0); + if(!filteredBlocks.isEmpty()) + currentBlock = filteredBlocks.get(0); MC.interactionManager.cancelBlockBreaking(); - progress = 1; - prevProgress = 1; - BlockBreaker.breakBlocksWithPacketSpam(blocksToHarvest2); + overlay.resetProgress(); + BlockBreaker.breakBlocksWithPacketSpam(filteredBlocks); return; } @@ -498,18 +469,9 @@ public final class AutoFarmHack extends Hack MC.interactionManager.cancelBlockBreaking(); if(currentBlock != null && BlockUtils.getHardness(currentBlock) < 1) - { - prevProgress = progress; - progress = IMC.getInteractionManager().getCurrentBreakingProgress(); - - if(progress < prevProgress) - prevProgress = progress; - - }else - { - progress = 1; - prevProgress = 1; - } + overlay.updateProgress(); + else + overlay.resetProgress(); } private void updateVertexBuffers(List blocksToHarvest, diff --git a/src/main/java/net/wurstclient/util/OverlayRenderer.java b/src/main/java/net/wurstclient/util/OverlayRenderer.java index a11ab189..74635686 100644 --- a/src/main/java/net/wurstclient/util/OverlayRenderer.java +++ b/src/main/java/net/wurstclient/util/OverlayRenderer.java @@ -74,9 +74,8 @@ public final class OverlayRenderer pos.getZ() - regionZ); // get interpolated progress - boolean breaksInstantly = (MC.player.getAbilities().creativeMode - || BlockUtils.getHardness(pos) >= 1) - && BlockUtils.canBeClicked(pos); + boolean breaksInstantly = MC.player.getAbilities().creativeMode + || BlockUtils.getHardness(pos) >= 1; float p = breaksInstantly ? 1 : MathHelper.lerp(partialTicks, prevProgress, progress); From 68bb8cb95ca561da810386b28478d1964f69ca22 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 May 2023 17:36:21 +0200 Subject: [PATCH 38/48] Refactor NukerLegit to use BlockBreaker --- .../net/wurstclient/hacks/NukerLegitHack.java | 99 +++++-------------- 1 file changed, 25 insertions(+), 74 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/NukerLegitHack.java b/src/main/java/net/wurstclient/hacks/NukerLegitHack.java index c1567a15..cd2a9205 100644 --- a/src/main/java/net/wurstclient/hacks/NukerLegitHack.java +++ b/src/main/java/net/wurstclient/hacks/NukerLegitHack.java @@ -14,16 +14,12 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; -import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.Material; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; -import net.minecraft.util.shape.VoxelShape; import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.LeftClickListener; @@ -36,6 +32,8 @@ import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.EnumSetting; import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; +import net.wurstclient.util.BlockBreaker; +import net.wurstclient.util.BlockBreaker.BlockBreakingParams; import net.wurstclient.util.BlockUtils; import net.wurstclient.util.OverlayRenderer; import net.wurstclient.util.RotationUtils; @@ -168,7 +166,7 @@ public final class NukerLegitHack extends Hack } // get valid blocks - Iterable validBlocks = getValidBlocks(range.getValue(), + Iterable validBlocks = getValidBlocks(range.getValueI(), mode.getSelected().getValidator(this)); // find closest valid block @@ -193,92 +191,45 @@ public final class NukerLegitHack extends Hack renderer.updateProgress(); } - private ArrayList getValidBlocks(double range, + private ArrayList getValidBlocks(int range, Predicate validator) { - Vec3d eyesVec = RotationUtils.getEyesPos().subtract(0.5, 0.5, 0.5); - double rangeSq = Math.pow(range + 0.5, 2); - int rangeI = (int)Math.ceil(range); + Vec3d eyesVec = RotationUtils.getEyesPos(); + BlockPos center = BlockPos.ofFloored(eyesVec); - BlockPos center = BlockPos.ofFloored(RotationUtils.getEyesPos()); - BlockPos min = center.add(-rangeI, -rangeI, -rangeI); - BlockPos max = center.add(rangeI, rangeI, rangeI); - - return BlockUtils.getAllInBox(min, max).stream() - .filter(pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) + return BlockUtils.getAllInBoxStream(center, range) .filter(BlockUtils::canBeClicked).filter(validator) .sorted(Comparator.comparingDouble( - pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)))) + pos -> eyesVec.squaredDistanceTo(Vec3d.ofCenter(pos)))) .collect(Collectors.toCollection(ArrayList::new)); } private boolean breakBlockExtraLegit(BlockPos pos) { - Direction[] sides = Direction.values(); - - BlockState state = BlockUtils.getState(pos); - VoxelShape shape = state.getOutlineShape(MC.world, pos); - if(shape.isEmpty()) + BlockBreakingParams params = BlockBreaker.getBlockBreakingParams(pos); + if(!params.lineOfSight() || params.distanceSq() > range.getValueSq()) return false; - Vec3d eyesPos = RotationUtils.getEyesPos(); - Vec3d relCenter = shape.getBoundingBox().getCenter(); - Vec3d center = Vec3d.of(pos).add(relCenter); + // face block + WURST.getRotationFaker().faceVectorClient(params.hitVec()); - Vec3d[] hitVecs = new Vec3d[sides.length]; - for(int i = 0; i < sides.length; i++) + WURST.getHax().autoToolHack.equipIfEnabled(pos); + + if(!MC.interactionManager.isBreakingBlock()) + MC.interactionManager.attackBlock(pos, params.side()); + + // if attack key is down but nothing happens, + // release it for one tick + if(MC.options.attackKey.isPressed() + && !MC.interactionManager.isBreakingBlock()) { - Vec3i dirVec = sides[i].getVector(); - Vec3d relHitVec = new Vec3d(relCenter.x * dirVec.getX(), - relCenter.y * dirVec.getY(), relCenter.z * dirVec.getZ()); - hitVecs[i] = center.add(relHitVec); - } - - double distanceSqToCenter = eyesPos.squaredDistanceTo(center); - - for(Direction side : sides) - { - Vec3d hitVec = hitVecs[side.ordinal()]; - double distanceSqHitVec = eyesPos.squaredDistanceTo(hitVec); - - // check if hitVec is within range (4.25 blocks) - if(distanceSqHitVec > 18.0625) - continue; - - // check if side is facing towards player - if(distanceSqHitVec >= distanceSqToCenter) - continue; - - // check line of sight - if(MC.world.raycastBlock(eyesPos, hitVec, pos, shape, - state) != null) - continue; - - // face block - WURST.getRotationFaker().faceVectorClient(hitVec); - - if(currentBlock != null) - WURST.getHax().autoToolHack.equipIfEnabled(currentBlock); - - if(!MC.interactionManager.isBreakingBlock()) - MC.interactionManager.attackBlock(pos, side); - - // if attack key is down but nothing happens, - // release it for one tick - if(MC.options.attackKey.isPressed() - && !MC.interactionManager.isBreakingBlock()) - { - MC.options.attackKey.setPressed(false); - return true; - } - - // damage block - MC.options.attackKey.setPressed(true); - + MC.options.attackKey.setPressed(false); return true; } - return false; + // damage block + MC.options.attackKey.setPressed(true); + return true; } @Override From ee57b3027df5b69b9c4551fed20bee41d198f645 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 24 May 2023 12:01:32 +0200 Subject: [PATCH 39/48] Fix relHitVec calculation The previous code assumed that the center of a block is the same as its size divided by two, which works for most blocks but not all of them. For example, an upside down slab has its center on the Y axis at 0.75, but half of its height is only 0.25. Breaking a slab from the top with the old code would place relHitVec's Y coordinate at 0.75+0.75=1.5 (floating half a block above the slab's top surface), with the new code it's 0.75+0.25=1 (exactly on the surface where it should be). --- src/main/java/net/wurstclient/util/BlockBreaker.java | 11 +++++++---- src/main/java/net/wurstclient/util/BlockPlacer.java | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/wurstclient/util/BlockBreaker.java b/src/main/java/net/wurstclient/util/BlockBreaker.java index 2f416792..16398f6f 100644 --- a/src/main/java/net/wurstclient/util/BlockBreaker.java +++ b/src/main/java/net/wurstclient/util/BlockBreaker.java @@ -16,6 +16,7 @@ import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket.Action; import net.minecraft.util.Hand; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; @@ -66,15 +67,17 @@ public enum BlockBreaker return null; Vec3d eyesPos = RotationUtils.getEyesPos(); - Vec3d relCenter = shape.getBoundingBox().getCenter(); - Vec3d center = Vec3d.of(pos).add(relCenter); + Box box = shape.getBoundingBox(); + Vec3d halfSize = new Vec3d(box.maxX - box.minX, box.maxY - box.minY, + box.maxZ - box.minZ).multiply(0.5); + Vec3d center = Vec3d.of(pos).add(box.getCenter()); Vec3d[] hitVecs = new Vec3d[sides.length]; for(int i = 0; i < sides.length; i++) { Vec3i dirVec = sides[i].getVector(); - Vec3d relHitVec = new Vec3d(relCenter.x * dirVec.getX(), - relCenter.y * dirVec.getY(), relCenter.z * dirVec.getZ()); + Vec3d relHitVec = new Vec3d(halfSize.x * dirVec.getX(), + halfSize.y * dirVec.getY(), halfSize.z * dirVec.getZ()); hitVecs[i] = center.add(relHitVec); } diff --git a/src/main/java/net/wurstclient/util/BlockPlacer.java b/src/main/java/net/wurstclient/util/BlockPlacer.java index 91144943..60231d1b 100644 --- a/src/main/java/net/wurstclient/util/BlockPlacer.java +++ b/src/main/java/net/wurstclient/util/BlockPlacer.java @@ -12,6 +12,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; @@ -87,12 +88,14 @@ public enum BlockPlacer if(shape.isEmpty() || state.getMaterial().isReplaceable()) continue; - Vec3d relCenter = shape.getBoundingBox().getCenter(); - Vec3d center = Vec3d.of(neighbor).add(relCenter); + Box box = shape.getBoundingBox(); + Vec3d halfSize = new Vec3d(box.maxX - box.minX, box.maxY - box.minY, + box.maxZ - box.minZ).multiply(0.5); + Vec3d center = Vec3d.of(neighbor).add(box.getCenter()); Vec3i dirVec = sides[i].getOpposite().getVector(); - Vec3d relHitVec = new Vec3d(relCenter.x * dirVec.getX(), - relCenter.y * dirVec.getY(), relCenter.z * dirVec.getZ()); + Vec3d relHitVec = new Vec3d(halfSize.x * dirVec.getX(), + halfSize.y * dirVec.getY(), halfSize.z * dirVec.getZ()); hitVecs[i] = center.add(relHitVec); } From 542d7b23526e355a6a9bf7fc2a3080a3c7d4995d Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 25 May 2023 13:29:57 +0200 Subject: [PATCH 40/48] Remove AutoFarmHack.getBlockStream() --- .../java/net/wurstclient/hacks/AutoFarmHack.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java index 3be8ee1c..58b7a72f 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java @@ -124,7 +124,8 @@ public final class AutoFarmHack extends Hack double rangeSq = range.getValueSq(); int blockRange = range.getValueCeil(); - List blocks = getBlockStream(eyesBlock, blockRange) + List blocks = BlockUtils + .getAllInBoxStream(eyesBlock, blockRange) .filter(pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) .filter(BlockUtils::canBeClicked).collect(Collectors.toList()); @@ -175,7 +176,7 @@ public final class AutoFarmHack extends Hack private List getBlocksToReplant(Vec3d eyesVec, BlockPos eyesBlock, double rangeSq, int blockRange) { - return getBlockStream(eyesBlock, blockRange) + return BlockUtils.getAllInBoxStream(eyesBlock, blockRange) .filter(pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) .filter( pos -> BlockUtils.getState(pos).getMaterial().isReplaceable()) @@ -240,14 +241,6 @@ public final class AutoFarmHack extends Hack overlay.render(matrixStack, partialTicks, currentBlock); } - private Stream getBlockStream(BlockPos center, int range) - { - BlockPos min = center.add(-range, -range, -range); - BlockPos max = center.add(range, range, range); - - return BlockUtils.getAllInBox(min, max).stream(); - } - private boolean shouldBeHarvested(BlockPos pos) { Block block = BlockUtils.getBlock(pos); From d84ef2939ececf41ec4ad3c0d43502b6df0f59a3 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 25 May 2023 17:39:11 +0200 Subject: [PATCH 41/48] Use BlockPlacer in AutoFarmHack --- .../net/wurstclient/hacks/AutoFarmHack.java | 76 +++++-------------- 1 file changed, 18 insertions(+), 58 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java index 58b7a72f..c283d81d 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java @@ -32,12 +32,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.network.packet.c2s.play.HandSwingC2SPacket; import net.minecraft.registry.tag.BlockTags; +import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; -import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; -import net.minecraft.util.shape.VoxelShape; import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.WurstClient; @@ -48,6 +47,8 @@ import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; import net.wurstclient.util.BlockBreaker; +import net.wurstclient.util.BlockPlacer; +import net.wurstclient.util.BlockPlacer.BlockPlacingParams; import net.wurstclient.util.BlockUtils; import net.wurstclient.util.OverlayRenderer; import net.wurstclient.util.RenderUtils; @@ -357,75 +358,34 @@ public final class AutoFarmHack extends Hack private void placeBlockSimple(BlockPos pos) { - Direction side = null; - Direction[] sides = Direction.values(); - - Vec3d eyesPos = RotationUtils.getEyesPos(); - Vec3d posVec = Vec3d.ofCenter(pos); - double distanceSqPosVec = eyesPos.squaredDistanceTo(posVec); - - Vec3d[] hitVecs = new Vec3d[sides.length]; - for(int i = 0; i < sides.length; i++) - hitVecs[i] = - posVec.add(Vec3d.of(sides[i].getVector()).multiply(0.5)); - - for(int i = 0; i < sides.length; i++) - { - // check if neighbor can be right clicked - BlockPos neighbor = pos.offset(sides[i]); - if(!BlockUtils.canBeClicked(neighbor)) - continue; - - // check line of sight - BlockState neighborState = BlockUtils.getState(neighbor); - VoxelShape neighborShape = - neighborState.getOutlineShape(MC.world, neighbor); - if(MC.world.raycastBlock(eyesPos, hitVecs[i], neighbor, - neighborShape, neighborState) != null) - continue; - - side = sides[i]; - break; - } - - if(side == null) - for(int i = 0; i < sides.length; i++) - { - // check if neighbor can be right clicked - if(!BlockUtils.canBeClicked(pos.offset(sides[i]))) - continue; - - // check if side is facing away from player - if(distanceSqPosVec > eyesPos.squaredDistanceTo(hitVecs[i])) - continue; - - side = sides[i]; - break; - } - - if(side == null) + // should never happen, but just in case + if(!BlockUtils.getState(pos).isReplaceable()) return; - Vec3d hitVec = hitVecs[side.ordinal()]; + BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); + if(params == null || params.distanceSq() > range.getValueSq()) + return; // face block - WURST.getRotationFaker().faceVectorPacket(hitVec); - if(RotationUtils.getAngleToLastReportedLookVec(hitVec) > 1) + WURST.getRotationFaker().faceVectorPacket(params.hitVec()); + if(RotationUtils.getAngleToLastReportedLookVec(params.hitVec()) > 1) return; - // check timer + // check cooldown if(IMC.getItemUseCooldown() > 0) return; + Hand hand = Hand.MAIN_HAND; + // place block - IMC.getInteractionManager().rightClickBlock(pos.offset(side), - side.getOpposite(), hitVec); + ActionResult result = MC.interactionManager.interactBlock(MC.player, + hand, params.toHitResult()); // swing arm - MC.player.networkHandler - .sendPacket(new HandSwingC2SPacket(Hand.MAIN_HAND)); + if(result.isAccepted() && result.shouldSwingHand()) + MC.player.networkHandler.sendPacket(new HandSwingC2SPacket(hand)); - // reset timer + // reset cooldown IMC.setItemUseCooldown(4); } From c65f6da123091cfb1427fad98f010d7186ce6988 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 26 May 2023 19:58:23 +0200 Subject: [PATCH 42/48] Move AutoFarm rendering to a separate class --- .../net/wurstclient/hacks/AutoFarmHack.java | 165 ++-------------- .../hacks/autofarm/AutoFarmRenderer.java | 184 ++++++++++++++++++ 2 files changed, 198 insertions(+), 151 deletions(-) create mode 100644 src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java diff --git a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java index c283d81d..fb102e0d 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java @@ -7,25 +7,18 @@ */ package net.wurstclient.hacks; -import java.util.*; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.joml.Matrix4f; -import org.lwjgl.opengl.GL11; - -import com.mojang.blaze3d.systems.RenderSystem; - import net.minecraft.block.*; -import net.minecraft.client.gl.ShaderProgram; -import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; -import net.minecraft.client.render.GameRenderer; -import net.minecraft.client.render.Tessellator; -import net.minecraft.client.render.VertexFormat; -import net.minecraft.client.render.VertexFormats; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -35,14 +28,13 @@ import net.minecraft.registry.tag.BlockTags; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; import net.wurstclient.Category; import net.wurstclient.SearchTags; -import net.wurstclient.WurstClient; import net.wurstclient.events.RenderListener; import net.wurstclient.events.UpdateListener; import net.wurstclient.hack.Hack; +import net.wurstclient.hacks.autofarm.AutoFarmRenderer; import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; @@ -51,7 +43,6 @@ import net.wurstclient.util.BlockPlacer; import net.wurstclient.util.BlockPlacer.BlockPlacingParams; import net.wurstclient.util.BlockUtils; import net.wurstclient.util.OverlayRenderer; -import net.wurstclient.util.RenderUtils; import net.wurstclient.util.RotationUtils; @SearchTags({"auto farm", "AutoHarvest", "auto harvest"}) @@ -65,14 +56,11 @@ public final class AutoFarmHack extends Hack new CheckboxSetting("Replant", true); private final HashMap plants = new HashMap<>(); - private final ArrayDeque> prevBlocks = new ArrayDeque<>(); private BlockPos currentBlock; + private final AutoFarmRenderer renderer = new AutoFarmRenderer(); private final OverlayRenderer overlay = new OverlayRenderer(); - private VertexBuffer greenBuffer; - private VertexBuffer cyanBuffer; - private VertexBuffer redBuffer; private boolean busy; @@ -111,9 +99,7 @@ public final class AutoFarmHack extends Hack overlay.resetProgress(); busy = false; - Stream.of(greenBuffer, cyanBuffer, redBuffer).filter(Objects::nonNull) - .forEach(VertexBuffer::close); - greenBuffer = cyanBuffer = redBuffer = null; + renderer.reset(); } @Override @@ -162,7 +148,9 @@ public final class AutoFarmHack extends Hack harvest(blocksToHarvest); busy = !blocksToHarvest.isEmpty() || !blocksToReplant.isEmpty(); - updateVertexBuffers(blocksToHarvest, blocksToReplant); + + renderer.updateVertexBuffers(blocksToHarvest, plants.keySet(), + blocksToReplant); } private List getBlocksToHarvest(Vec3d eyesVec, @@ -190,55 +178,7 @@ public final class AutoFarmHack extends Hack @Override public void onRender(MatrixStack matrixStack, float partialTicks) { - // GL settings - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glDisable(GL11.GL_DEPTH_TEST); - - matrixStack.push(); - - BlockPos camPos = RenderUtils.getCameraBlockPos(); - int regionX = (camPos.getX() >> 9) * 512; - int regionZ = (camPos.getZ() >> 9) * 512; - RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); - - RenderSystem.setShader(GameRenderer::getPositionProgram); - Matrix4f viewMatrix = matrixStack.peek().getPositionMatrix(); - Matrix4f projMatrix = RenderSystem.getProjectionMatrix(); - ShaderProgram shader = RenderSystem.getShader(); - - if(greenBuffer != null) - { - RenderSystem.setShaderColor(0, 1, 0, 0.5F); - greenBuffer.bind(); - greenBuffer.draw(viewMatrix, projMatrix, shader); - VertexBuffer.unbind(); - } - - if(cyanBuffer != null) - { - RenderSystem.setShaderColor(0, 1, 1, 0.5F); - cyanBuffer.bind(); - cyanBuffer.draw(viewMatrix, projMatrix, shader); - VertexBuffer.unbind(); - } - - if(redBuffer != null) - { - RenderSystem.setShaderColor(1, 0, 0, 0.5F); - redBuffer.bind(); - redBuffer.draw(viewMatrix, projMatrix, shader); - VertexBuffer.unbind(); - } - - matrixStack.pop(); - - // GL resets - RenderSystem.setShaderColor(1, 1, 1, 1); - GL11.glEnable(GL11.GL_DEPTH_TEST); - GL11.glDisable(GL11.GL_BLEND); - + renderer.render(matrixStack); overlay.render(matrixStack, partialTicks, currentBlock); } @@ -427,83 +367,6 @@ public final class AutoFarmHack extends Hack overlay.resetProgress(); } - private void updateVertexBuffers(List blocksToHarvest, - List blocksToReplant) - { - if(WurstClient.MC.getBlockEntityRenderDispatcher().camera == null) - return; - - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - - BlockPos camPos = RenderUtils.getCameraBlockPos(); - int regionX = (camPos.getX() >> 9) * 512; - int regionZ = (camPos.getZ() >> 9) * 512; - - if(greenBuffer != null) - greenBuffer.close(); - - greenBuffer = new VertexBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - - double boxMin = 1 / 16.0; - double boxMax = 15 / 16.0; - Box box = new Box(boxMin, boxMin, boxMin, boxMax, boxMax, boxMax); - - for(BlockPos pos : blocksToHarvest) - { - Box renderBox = box.offset(pos).offset(-regionX, 0, -regionZ); - RenderUtils.drawOutlinedBox(renderBox, bufferBuilder); - } - - BuiltBuffer buffer = bufferBuilder.end(); - greenBuffer.bind(); - greenBuffer.upload(buffer); - VertexBuffer.unbind(); - - if(cyanBuffer != null) - cyanBuffer.close(); - - cyanBuffer = new VertexBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - - Box node = new Box(0.25, 0.25, 0.25, 0.75, 0.75, 0.75); - - for(BlockPos pos : plants.keySet()) - { - Box renderNode = node.offset(pos).offset(-regionX, 0, -regionZ); - RenderUtils.drawNode(renderNode, bufferBuilder); - } - - buffer = bufferBuilder.end(); - cyanBuffer.bind(); - cyanBuffer.upload(buffer); - VertexBuffer.unbind(); - - if(redBuffer != null) - redBuffer.close(); - - redBuffer = new VertexBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - - for(BlockPos pos : blocksToReplant) - { - Box renderBox = box.offset(pos).offset(-regionX, 0, -regionZ); - RenderUtils.drawOutlinedBox(renderBox, bufferBuilder); - } - - buffer = bufferBuilder.end(); - redBuffer.bind(); - redBuffer.upload(buffer); - VertexBuffer.unbind(); - } - /** * Returns true if AutoFarm is currently harvesting or replanting something. */ diff --git a/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java b/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java new file mode 100644 index 00000000..5915f0fe --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2014-2023 Wurst-Imperium and contributors. + * + * This source code is subject to the terms of the GNU General Public + * License, version 3. If a copy of the GPL was not distributed with this + * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt + */ +package net.wurstclient.hacks.autofarm; + +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Stream; + +import org.joml.Matrix4f; +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.gl.ShaderProgram; +import net.minecraft.client.gl.VertexBuffer; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BufferBuilder.BuiltBuffer; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.render.VertexFormat; +import net.minecraft.client.render.VertexFormats; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.Vec3d; +import net.wurstclient.util.RenderUtils; + +public final class AutoFarmRenderer +{ + private VertexBuffer greenBuffer; + private VertexBuffer cyanBuffer; + private VertexBuffer redBuffer; + + public void reset() + { + Stream.of(greenBuffer, cyanBuffer, redBuffer).filter(Objects::nonNull) + .forEach(VertexBuffer::close); + greenBuffer = cyanBuffer = redBuffer = null; + } + + public void render(MatrixStack matrixStack) + { + // GL settings + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + matrixStack.push(); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; + RenderUtils.applyRegionalRenderOffset(matrixStack, regionX, regionZ); + + RenderSystem.setShader(GameRenderer::getPositionProgram); + Matrix4f viewMatrix = matrixStack.peek().getPositionMatrix(); + Matrix4f projMatrix = RenderSystem.getProjectionMatrix(); + ShaderProgram shader = RenderSystem.getShader(); + + if(greenBuffer != null) + { + RenderSystem.setShaderColor(0, 1, 0, 0.5F); + greenBuffer.bind(); + greenBuffer.draw(viewMatrix, projMatrix, shader); + VertexBuffer.unbind(); + } + + if(cyanBuffer != null) + { + RenderSystem.setShaderColor(0, 1, 1, 0.5F); + cyanBuffer.bind(); + cyanBuffer.draw(viewMatrix, projMatrix, shader); + VertexBuffer.unbind(); + } + + if(redBuffer != null) + { + RenderSystem.setShaderColor(1, 0, 0, 0.5F); + redBuffer.bind(); + redBuffer.draw(viewMatrix, projMatrix, shader); + VertexBuffer.unbind(); + } + + matrixStack.pop(); + + // GL resets + RenderSystem.setShaderColor(1, 1, 1, 1); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_BLEND); + } + + public void updateVertexBuffers(List blocksToHarvest, + Set plants, List blocksToReplant) + { + BufferBuilder bufferBuilder = + RenderSystem.renderThreadTesselator().getBuffer(); + + BlockPos camPos = RenderUtils.getCameraBlockPos(); + int regionX = (camPos.getX() >> 9) * 512; + int regionZ = (camPos.getZ() >> 9) * 512; + Vec3d regionOffset = new Vec3d(-regionX, 0, -regionZ); + + double boxMin = 1 / 16.0; + double boxMax = 15 / 16.0; + Box box = new Box(boxMin, boxMin, boxMin, boxMax, boxMax, boxMax); + Box node = new Box(0.25, 0.25, 0.25, 0.75, 0.75, 0.75); + + updateGreenBuffer(blocksToHarvest, bufferBuilder, box, regionOffset); + updateCyanBuffer(plants, bufferBuilder, node, regionOffset); + updateRedBuffer(blocksToReplant, bufferBuilder, box, regionOffset); + } + + private void updateGreenBuffer(List blocksToHarvest, + BufferBuilder bufferBuilder, Box box, Vec3d regionOffset) + { + if(greenBuffer != null) + greenBuffer.close(); + + greenBuffer = new VertexBuffer(); + bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, + VertexFormats.POSITION); + + for(BlockPos pos : blocksToHarvest) + { + Box renderBox = box.offset(pos).offset(regionOffset); + RenderUtils.drawOutlinedBox(renderBox, bufferBuilder); + } + + BuiltBuffer buffer = bufferBuilder.end(); + greenBuffer.bind(); + greenBuffer.upload(buffer); + VertexBuffer.unbind(); + } + + private void updateCyanBuffer(Set plants, + BufferBuilder bufferBuilder, Box node, Vec3d regionOffset) + { + if(cyanBuffer != null) + cyanBuffer.close(); + + cyanBuffer = new VertexBuffer(); + bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, + VertexFormats.POSITION); + + for(BlockPos pos : plants) + { + Box renderNode = node.offset(pos).offset(regionOffset); + RenderUtils.drawNode(renderNode, bufferBuilder); + } + + BuiltBuffer buffer = bufferBuilder.end(); + cyanBuffer.bind(); + cyanBuffer.upload(buffer); + VertexBuffer.unbind(); + } + + private void updateRedBuffer(List blocksToReplant, + BufferBuilder bufferBuilder, Box box, Vec3d regionOffset) + { + if(redBuffer != null) + redBuffer.close(); + + redBuffer = new VertexBuffer(); + bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, + VertexFormats.POSITION); + + for(BlockPos pos : blocksToReplant) + { + Box renderBox = box.offset(pos).offset(regionOffset); + RenderUtils.drawOutlinedBox(renderBox, bufferBuilder); + } + + BuiltBuffer buffer = bufferBuilder.end(); + redBuffer.bind(); + redBuffer.upload(buffer); + VertexBuffer.unbind(); + } +} From 78ab5bdcbda23c7019c203f8bc4ffb6c0b415c22 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sat, 27 May 2023 10:44:45 +0200 Subject: [PATCH 43/48] Re-order AutoFarm's methods --- .../net/wurstclient/hacks/AutoFarmHack.java | 86 +++++++++---------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java index fb102e0d..1d255478 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java @@ -153,6 +153,39 @@ public final class AutoFarmHack extends Hack blocksToReplant); } + @Override + public void onRender(MatrixStack matrixStack, float partialTicks) + { + renderer.render(matrixStack); + overlay.render(matrixStack, partialTicks, currentBlock); + } + + /** + * Returns true if AutoFarm is currently harvesting or replanting something. + */ + public boolean isBusy() + { + return busy; + } + + private void registerPlants(List blocks) + { + HashMap seeds = new HashMap<>(); + seeds.put(Blocks.WHEAT, Items.WHEAT_SEEDS); + seeds.put(Blocks.CARROTS, Items.CARROT); + seeds.put(Blocks.POTATOES, Items.POTATO); + seeds.put(Blocks.BEETROOTS, Items.BEETROOT_SEEDS); + seeds.put(Blocks.PUMPKIN_STEM, Items.PUMPKIN_SEEDS); + seeds.put(Blocks.MELON_STEM, Items.MELON_SEEDS); + seeds.put(Blocks.NETHER_WART, Items.NETHER_WART); + seeds.put(Blocks.COCOA, Items.COCOA_BEANS); + + plants.putAll(blocks.parallelStream() + .filter(pos -> seeds.containsKey(BlockUtils.getBlock(pos))) + .collect(Collectors.toMap(pos -> pos, + pos -> seeds.get(BlockUtils.getBlock(pos))))); + } + private List getBlocksToHarvest(Vec3d eyesVec, List blocks) { @@ -162,26 +195,6 @@ public final class AutoFarmHack extends Hack .collect(Collectors.toList()); } - private List getBlocksToReplant(Vec3d eyesVec, BlockPos eyesBlock, - double rangeSq, int blockRange) - { - return BlockUtils.getAllInBoxStream(eyesBlock, blockRange) - .filter(pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) - .filter( - pos -> BlockUtils.getState(pos).getMaterial().isReplaceable()) - .filter(pos -> plants.containsKey(pos)).filter(this::canBeReplanted) - .sorted(Comparator.comparingDouble( - pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)))) - .collect(Collectors.toList()); - } - - @Override - public void onRender(MatrixStack matrixStack, float partialTicks) - { - renderer.render(matrixStack); - overlay.render(matrixStack, partialTicks, currentBlock); - } - private boolean shouldBeHarvested(BlockPos pos) { Block block = BlockUtils.getBlock(pos); @@ -213,22 +226,17 @@ public final class AutoFarmHack extends Hack return false; } - private void registerPlants(List blocks) + private List getBlocksToReplant(Vec3d eyesVec, BlockPos eyesBlock, + double rangeSq, int blockRange) { - HashMap seeds = new HashMap<>(); - seeds.put(Blocks.WHEAT, Items.WHEAT_SEEDS); - seeds.put(Blocks.CARROTS, Items.CARROT); - seeds.put(Blocks.POTATOES, Items.POTATO); - seeds.put(Blocks.BEETROOTS, Items.BEETROOT_SEEDS); - seeds.put(Blocks.PUMPKIN_STEM, Items.PUMPKIN_SEEDS); - seeds.put(Blocks.MELON_STEM, Items.MELON_SEEDS); - seeds.put(Blocks.NETHER_WART, Items.NETHER_WART); - seeds.put(Blocks.COCOA, Items.COCOA_BEANS); - - plants.putAll(blocks.parallelStream() - .filter(pos -> seeds.containsKey(BlockUtils.getBlock(pos))) - .collect(Collectors.toMap(pos -> pos, - pos -> seeds.get(BlockUtils.getBlock(pos))))); + return BlockUtils.getAllInBoxStream(eyesBlock, blockRange) + .filter(pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) + .filter( + pos -> BlockUtils.getState(pos).getMaterial().isReplaceable()) + .filter(pos -> plants.containsKey(pos)).filter(this::canBeReplanted) + .sorted(Comparator.comparingDouble( + pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)))) + .collect(Collectors.toList()); } private boolean canBeReplanted(BlockPos pos) @@ -366,12 +374,4 @@ public final class AutoFarmHack extends Hack else overlay.resetProgress(); } - - /** - * Returns true if AutoFarm is currently harvesting or replanting something. - */ - public boolean isBusy() - { - return busy; - } } From f3eef8cea2c2ed16ff8fc37fb4735cafd63a00ed Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sat, 27 May 2023 14:26:47 +0200 Subject: [PATCH 44/48] Further clean up AutoFarm --- .../net/wurstclient/hacks/AutoFarmHack.java | 56 +++++++++++-------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java index 1d255478..dc21084e 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java @@ -55,6 +55,18 @@ public final class AutoFarmHack extends Hack private final CheckboxSetting replant = new CheckboxSetting("Replant", true); + private final HashMap seeds = new HashMap<>(); + { + seeds.put(Blocks.WHEAT, Items.WHEAT_SEEDS); + seeds.put(Blocks.CARROTS, Items.CARROT); + seeds.put(Blocks.POTATOES, Items.POTATO); + seeds.put(Blocks.BEETROOTS, Items.BEETROOT_SEEDS); + seeds.put(Blocks.PUMPKIN_STEM, Items.PUMPKIN_SEEDS); + seeds.put(Blocks.MELON_STEM, Items.MELON_SEEDS); + seeds.put(Blocks.NETHER_WART, Items.NETHER_WART); + seeds.put(Blocks.COCOA, Items.COCOA_BEANS); + } + private final HashMap plants = new HashMap<>(); private final ArrayDeque> prevBlocks = new ArrayDeque<>(); private BlockPos currentBlock; @@ -116,7 +128,7 @@ public final class AutoFarmHack extends Hack .filter(pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) .filter(BlockUtils::canBeClicked).collect(Collectors.toList()); - registerPlants(blocks); + updatePlants(blocks); List blocksToHarvest = new ArrayList<>(); List blocksToReplant = new ArrayList<>(); @@ -168,22 +180,16 @@ public final class AutoFarmHack extends Hack return busy; } - private void registerPlants(List blocks) + private void updatePlants(List blocks) { - HashMap seeds = new HashMap<>(); - seeds.put(Blocks.WHEAT, Items.WHEAT_SEEDS); - seeds.put(Blocks.CARROTS, Items.CARROT); - seeds.put(Blocks.POTATOES, Items.POTATO); - seeds.put(Blocks.BEETROOTS, Items.BEETROOT_SEEDS); - seeds.put(Blocks.PUMPKIN_STEM, Items.PUMPKIN_SEEDS); - seeds.put(Blocks.MELON_STEM, Items.MELON_SEEDS); - seeds.put(Blocks.NETHER_WART, Items.NETHER_WART); - seeds.put(Blocks.COCOA, Items.COCOA_BEANS); - - plants.putAll(blocks.parallelStream() - .filter(pos -> seeds.containsKey(BlockUtils.getBlock(pos))) - .collect(Collectors.toMap(pos -> pos, - pos -> seeds.get(BlockUtils.getBlock(pos))))); + for(BlockPos pos : blocks) + { + Item seed = seeds.get(BlockUtils.getBlock(pos)); + if(seed == null) + continue; + + plants.put(pos, seed); + } } private List getBlocksToHarvest(Vec3d eyesVec, @@ -202,26 +208,33 @@ public final class AutoFarmHack extends Hack if(block instanceof CropBlock) return ((CropBlock)block).isMature(state); + + if(block instanceof NetherWartBlock) + return state.get(NetherWartBlock.AGE) >= 3; + + if(block instanceof CocoaBlock) + return state.get(CocoaBlock.AGE) >= 2; + if(block instanceof GourdBlock) return true; + if(block instanceof SugarCaneBlock) return BlockUtils.getBlock(pos.down()) instanceof SugarCaneBlock && !(BlockUtils .getBlock(pos.down(2)) instanceof SugarCaneBlock); + if(block instanceof CactusBlock) return BlockUtils.getBlock(pos.down()) instanceof CactusBlock && !(BlockUtils.getBlock(pos.down(2)) instanceof CactusBlock); + if(block instanceof KelpPlantBlock) return BlockUtils.getBlock(pos.down()) instanceof KelpPlantBlock && !(BlockUtils .getBlock(pos.down(2)) instanceof KelpPlantBlock); - if(block instanceof NetherWartBlock) - return state.get(NetherWartBlock.AGE) >= 3; + if(block instanceof BambooBlock) return BlockUtils.getBlock(pos.down()) instanceof BambooBlock && !(BlockUtils.getBlock(pos.down(2)) instanceof BambooBlock); - if(block instanceof CocoaBlock) - return state.get(CocoaBlock.AGE) >= 2; return false; } @@ -231,8 +244,7 @@ public final class AutoFarmHack extends Hack { return BlockUtils.getAllInBoxStream(eyesBlock, blockRange) .filter(pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) - .filter( - pos -> BlockUtils.getState(pos).getMaterial().isReplaceable()) + .filter(pos -> BlockUtils.getState(pos).isReplaceable()) .filter(pos -> plants.containsKey(pos)).filter(this::canBeReplanted) .sorted(Comparator.comparingDouble( pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)))) From 28448c934ffd9cce63881640a446337dada5b518 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 29 May 2023 13:01:30 +0200 Subject: [PATCH 45/48] Add InventoryUtils.indexOf() methods Not currently used anywhere, but useful to have for debugging, as PlayerInventory.indexOf() and PlayerInventory.getSlotWithStack() don't quite do the same thing. --- .../net/wurstclient/util/InventoryUtils.java | 70 +++++++++++++++---- 1 file changed, 58 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/wurstclient/util/InventoryUtils.java b/src/main/java/net/wurstclient/util/InventoryUtils.java index 02a3aad1..de414746 100644 --- a/src/main/java/net/wurstclient/util/InventoryUtils.java +++ b/src/main/java/net/wurstclient/util/InventoryUtils.java @@ -25,6 +25,63 @@ public enum InventoryUtils private static final MinecraftClient MC = WurstClient.MC; private static final IMinecraftClient IMC = WurstClient.IMC; + public static int indexOf(Item item) + { + return indexOf(stack -> stack.isOf(item), 36, false); + } + + public static int indexOf(Item item, int maxInvSlot) + { + return indexOf(stack -> stack.isOf(item), maxInvSlot, false); + } + + public static int indexOf(Item item, int maxInvSlot, boolean includeOffhand) + { + return indexOf(stack -> stack.isOf(item), maxInvSlot, includeOffhand); + } + + public static int indexOf(Predicate predicate) + { + return indexOf(predicate, 36, false); + } + + public static int indexOf(Predicate predicate, int maxInvSlot) + { + return indexOf(predicate, maxInvSlot, false); + } + + /** + * Searches the player's inventory from slot 0 to {@code maxInvSlot-1} for + * the first item that matches the given predicate and returns its slot, or + * -1 if no such item was found. + * + * @param predicate + * checks if an item is the one you want + * @param maxInvSlot + * the maximum slot to search (exclusive), usually 9 for the + * hotbar or 36 for the whole inventory + * @param includeOffhand + * also search the offhand (slot 40), even if maxInvSlot is lower + * @return + * the slot of the item, or -1 if no such item was found + */ + public static int indexOf(Predicate predicate, int maxInvSlot, + boolean includeOffhand) + { + PlayerInventory inventory = MC.player.getInventory(); + + // create a stream of all slots that we want to search + IntStream stream = IntStream.range(0, maxInvSlot); + if(includeOffhand) + stream = IntStream.concat(stream, IntStream.of(40)); + + // find the slot of the item we want + int slot = stream.filter(i -> predicate.test(inventory.getStack(i))) + .findFirst().orElse(-1); + + return slot; + } + public static boolean selectItem(Item item) { return selectItem(stack -> stack.isOf(item), 36, false); @@ -78,18 +135,7 @@ public enum InventoryUtils public static boolean selectItem(Predicate predicate, int maxInvSlot, boolean takeFromOffhand) { - PlayerInventory inventory = MC.player.getInventory(); - - // create a stream of all slots that we want to search - IntStream stream = IntStream.range(0, maxInvSlot); - if(takeFromOffhand) - stream = IntStream.concat(stream, IntStream.of(40)); - - // find the slot of the item we want - int slot = stream.filter(i -> predicate.test(inventory.getStack(i))) - .findFirst().orElse(-1); - - return selectItem(slot); + return selectItem(indexOf(predicate, maxInvSlot, takeFromOffhand)); } /** From 7a8ce6b70f9ff862219b561c240baf01ffeb43c8 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 29 May 2023 13:05:52 +0200 Subject: [PATCH 46/48] Clean up AutoFarm's replanting logic --- .../net/wurstclient/hacks/AutoFarmHack.java | 202 ++++++++---------- 1 file changed, 92 insertions(+), 110 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java index dc21084e..6de6c021 100644 --- a/src/main/java/net/wurstclient/hacks/AutoFarmHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoFarmHack.java @@ -7,21 +7,13 @@ */ package net.wurstclient.hacks; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; import net.minecraft.block.*; -import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.network.packet.c2s.play.HandSwingC2SPacket; import net.minecraft.registry.tag.BlockTags; @@ -42,6 +34,7 @@ import net.wurstclient.util.BlockBreaker; import net.wurstclient.util.BlockPlacer; import net.wurstclient.util.BlockPlacer.BlockPlacingParams; import net.wurstclient.util.BlockUtils; +import net.wurstclient.util.InventoryUtils; import net.wurstclient.util.OverlayRenderer; import net.wurstclient.util.RotationUtils; @@ -69,7 +62,7 @@ public final class AutoFarmHack extends Hack private final HashMap plants = new HashMap<>(); private final ArrayDeque> prevBlocks = new ArrayDeque<>(); - private BlockPos currentBlock; + private BlockPos currentlyHarvesting; private final AutoFarmRenderer renderer = new AutoFarmRenderer(); private final OverlayRenderer overlay = new OverlayRenderer(); @@ -100,11 +93,11 @@ public final class AutoFarmHack extends Hack EVENTS.remove(UpdateListener.class, this); EVENTS.remove(RenderListener.class, this); - if(currentBlock != null) + if(currentlyHarvesting != null) { IMC.getInteractionManager().setBreakingBlock(true); MC.interactionManager.cancelBlockBreaking(); - currentBlock = null; + currentlyHarvesting = null; } prevBlocks.clear(); @@ -117,50 +110,48 @@ public final class AutoFarmHack extends Hack @Override public void onUpdate() { - currentBlock = null; + currentlyHarvesting = null; Vec3d eyesVec = RotationUtils.getEyesPos().subtract(0.5, 0.5, 0.5); BlockPos eyesBlock = BlockPos.ofFloored(RotationUtils.getEyesPos()); double rangeSq = range.getValueSq(); int blockRange = range.getValueCeil(); - List blocks = BlockUtils + // get nearby, non-empty blocks + ArrayList blocks = BlockUtils .getAllInBoxStream(eyesBlock, blockRange) .filter(pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) - .filter(BlockUtils::canBeClicked).collect(Collectors.toList()); + .filter(BlockUtils::canBeClicked) + .collect(Collectors.toCollection(ArrayList::new)); + // check for any new plants and add them to the map updatePlants(blocks); - List blocksToHarvest = new ArrayList<>(); - List blocksToReplant = new ArrayList<>(); + ArrayList blocksToHarvest = new ArrayList<>(); + ArrayList blocksToReplant = new ArrayList<>(); + // don't place or break any blocks while Freecam is enabled if(!WURST.getHax().freecamHack.isEnabled()) { + // check which of the nearby blocks can be harvested blocksToHarvest = getBlocksToHarvest(eyesVec, blocks); + // do a new search to find empty blocks that can be replanted if(replant.isChecked()) blocksToReplant = getBlocksToReplant(eyesVec, eyesBlock, rangeSq, blockRange); } - boolean replanting = false; - while(!blocksToReplant.isEmpty()) - { - BlockPos pos = blocksToReplant.get(0); - Item neededItem = plants.get(pos); - if(tryToReplant(pos, neededItem)) - { - replanting = true; - break; - } - - blocksToReplant.removeIf(p -> plants.get(p) == neededItem); - } + // first, try to replant + boolean replanting = replant(blocksToReplant); + // if we can't replant, harvest instead if(!replanting) harvest(blocksToHarvest); - busy = !blocksToHarvest.isEmpty() || !blocksToReplant.isEmpty(); + // upate busy state + busy = replanting || currentlyHarvesting != null; + // update renderer renderer.updateVertexBuffers(blocksToHarvest, plants.keySet(), blocksToReplant); } @@ -169,7 +160,7 @@ public final class AutoFarmHack extends Hack public void onRender(MatrixStack matrixStack, float partialTicks) { renderer.render(matrixStack); - overlay.render(matrixStack, partialTicks, currentBlock); + overlay.render(matrixStack, partialTicks, currentlyHarvesting); } /** @@ -192,13 +183,13 @@ public final class AutoFarmHack extends Hack } } - private List getBlocksToHarvest(Vec3d eyesVec, - List blocks) + private ArrayList getBlocksToHarvest(Vec3d eyesVec, + ArrayList blocks) { return blocks.parallelStream().filter(this::shouldBeHarvested) .sorted(Comparator.comparingDouble( pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)))) - .collect(Collectors.toList()); + .collect(Collectors.toCollection(ArrayList::new)); } private boolean shouldBeHarvested(BlockPos pos) @@ -239,8 +230,8 @@ public final class AutoFarmHack extends Hack return false; } - private List getBlocksToReplant(Vec3d eyesVec, BlockPos eyesBlock, - double rangeSq, int blockRange) + private ArrayList getBlocksToReplant(Vec3d eyesVec, + BlockPos eyesBlock, double rangeSq, int blockRange) { return BlockUtils.getAllInBoxStream(eyesBlock, blockRange) .filter(pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) @@ -248,7 +239,7 @@ public final class AutoFarmHack extends Hack .filter(pos -> plants.containsKey(pos)).filter(this::canBeReplanted) .sorted(Comparator.comparingDouble( pos -> eyesVec.squaredDistanceTo(Vec3d.of(pos)))) - .collect(Collectors.toList()); + .collect(Collectors.toCollection(ArrayList::new)); } private boolean canBeReplanted(BlockPos pos) @@ -272,81 +263,71 @@ public final class AutoFarmHack extends Hack return false; } - private boolean tryToReplant(BlockPos pos, Item neededItem) + private boolean replant(List blocksToReplant) { - ClientPlayerEntity player = MC.player; - ItemStack heldItem = player.getMainHandStack(); - - if(!heldItem.isEmpty() && heldItem.getItem() == neededItem) - { - placeBlockSimple(pos); - return IMC.getItemUseCooldown() <= 0; - } - - for(int slot = 0; slot < 36; slot++) - { - if(slot == player.getInventory().selectedSlot) - continue; - - ItemStack stack = player.getInventory().getStack(slot); - if(stack.isEmpty() || stack.getItem() != neededItem) - continue; - - if(slot < 9) - player.getInventory().selectedSlot = slot; - else if(player.getInventory().getEmptySlot() < 9) - IMC.getInteractionManager().windowClick_QUICK_MOVE(slot); - else if(player.getInventory().getEmptySlot() != -1) - { - IMC.getInteractionManager().windowClick_QUICK_MOVE( - player.getInventory().selectedSlot + 36); - IMC.getInteractionManager().windowClick_QUICK_MOVE(slot); - }else - { - IMC.getInteractionManager().windowClick_PICKUP( - player.getInventory().selectedSlot + 36); - IMC.getInteractionManager().windowClick_PICKUP(slot); - IMC.getInteractionManager().windowClick_PICKUP( - player.getInventory().selectedSlot + 36); - } - - return true; - } - - return false; - } - - private void placeBlockSimple(BlockPos pos) - { - // should never happen, but just in case - if(!BlockUtils.getState(pos).isReplaceable()) - return; - - BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); - if(params == null || params.distanceSq() > range.getValueSq()) - return; - - // face block - WURST.getRotationFaker().faceVectorPacket(params.hitVec()); - if(RotationUtils.getAngleToLastReportedLookVec(params.hitVec()) > 1) - return; - // check cooldown if(IMC.getItemUseCooldown() > 0) - return; + return false; - Hand hand = Hand.MAIN_HAND; + // check if already holding one of the seeds needed for blocksToReplant + Optional heldSeed = blocksToReplant.stream().map(plants::get) + .distinct().filter(item -> MC.player.isHolding(item)).findFirst(); - // place block - ActionResult result = MC.interactionManager.interactBlock(MC.player, - hand, params.toHitResult()); + // if so, try to replant the blocks that need that seed + if(heldSeed.isPresent()) + { + // get the seed and the hand that is holding it + Item item = heldSeed.get(); + Hand hand = MC.player.getMainHandStack().isOf(item) ? Hand.MAIN_HAND + : Hand.OFF_HAND; + + // filter out blocks that need a different seed + ArrayList blocksToReplantWithHeldSeed = + blocksToReplant.stream().filter(pos -> plants.get(pos) == item) + .collect(Collectors.toCollection(ArrayList::new)); + + for(BlockPos pos : blocksToReplantWithHeldSeed) + { + // skip over blocks that we can't reach + BlockPlacingParams params = + BlockPlacer.getBlockPlacingParams(pos); + if(params == null || params.distanceSq() > range.getValueSq()) + continue; + + // face block + WURST.getRotationFaker().faceVectorPacket(params.hitVec()); + + // place seed + ActionResult result = MC.interactionManager + .interactBlock(MC.player, hand, params.toHitResult()); + + // swing arm + if(result.isAccepted() && result.shouldSwingHand()) + MC.player.networkHandler + .sendPacket(new HandSwingC2SPacket(hand)); + + // reset cooldown + IMC.setItemUseCooldown(4); + return true; + } + } - // swing arm - if(result.isAccepted() && result.shouldSwingHand()) - MC.player.networkHandler.sendPacket(new HandSwingC2SPacket(hand)); + // otherwise, find a block that we can reach and have seeds for + for(BlockPos pos : blocksToReplant) + { + // skip over blocks that we can't reach + BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); + if(params == null || params.distanceSq() > range.getValueSq()) + continue; + + // try to select the seed (returns false if we don't have it) + Item item = plants.get(pos); + if(InventoryUtils.selectItem(item)) + return true; + } - // reset cooldown - IMC.setItemUseCooldown(4); + // if we couldn't replant anything, return false + return false; } private void harvest(List blocksToHarvest) @@ -363,7 +344,7 @@ public final class AutoFarmHack extends Hack prevBlocks.removeFirst(); if(!filteredBlocks.isEmpty()) - currentBlock = filteredBlocks.get(0); + currentlyHarvesting = filteredBlocks.get(0); MC.interactionManager.cancelBlockBreaking(); overlay.resetProgress(); @@ -374,14 +355,15 @@ public final class AutoFarmHack extends Hack for(BlockPos pos : blocksToHarvest) if(BlockBreaker.breakOneBlock(pos)) { - currentBlock = pos; + currentlyHarvesting = pos; break; } - if(currentBlock == null) + if(currentlyHarvesting == null) MC.interactionManager.cancelBlockBreaking(); - if(currentBlock != null && BlockUtils.getHardness(currentBlock) < 1) + if(currentlyHarvesting != null + && BlockUtils.getHardness(currentlyHarvesting) < 1) overlay.updateProgress(); else overlay.resetProgress(); From ae410456c5bcb15b7574243bfb36f43219cdf82f Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 30 May 2023 11:29:19 +0200 Subject: [PATCH 47/48] Change version to 7.35.1 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 747a5ca9..b13ad16a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ loader_version=0.14.19 fabric_version=0.81.1+1.19.4 # Mod Properties -mod_version = v7.35-MC1.19.4 +mod_version = v7.35.1-MC1.19.4 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index fe5abe63..1282fec5 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -56,7 +56,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.35"; + public static final String VERSION = "7.35.1"; public static final String MC_VERSION = "1.19.4"; private WurstAnalytics analytics; From b0fb08ff710534410d10958c436f523520125517 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 30 May 2023 11:34:31 +0200 Subject: [PATCH 48/48] Update Fabric stuff --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index b13ad16a..d4abd810 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,10 +6,10 @@ org.gradle.jvmargs=-Xmx1G # https://www.curseforge.com/minecraft/mc-mods/fabric-api minecraft_version=1.19.4 yarn_mappings=1.19.4+build.2 -loader_version=0.14.19 +loader_version=0.14.21 #Fabric api -fabric_version=0.81.1+1.19.4 +fabric_version=0.82.0+1.19.4 # Mod Properties mod_version = v7.35.1-MC1.19.4