0
0
mirror of https://github.com/Wurst-Imperium/Wurst7.git synced 2024-09-19 17:02:13 +02:00

Merge tag 'v7.25' into 1.18.1

Conflicts:
	gradle.properties
	src/main/java/net/wurstclient/WurstClient.java
	src/main/java/net/wurstclient/hacks/InvWalkHack.java
	src/main/resources/fabric.mod.json
This commit is contained in:
Alexander01998 2022-05-05 14:05:29 +02:00
commit 917d4b9457
53 changed files with 1091 additions and 480 deletions

View File

@ -12,7 +12,7 @@ loader_version=0.12.12
fabric_version=0.46.2+1.18
# Mod Properties
mod_version = v7.23-MC1.18.1
mod_version = v7.25-MC1.18.1
maven_group = net.wurstclient
archives_base_name = Wurst-Client

View File

@ -55,7 +55,7 @@ public enum WurstClient
public static final MinecraftClient MC = MinecraftClient.getInstance();
public static final IMinecraftClient IMC = (IMinecraftClient)MC;
public static final String VERSION = "7.23";
public static final String VERSION = "7.25";
public static final String MC_VERSION = "1.18.1";
private WurstAnalytics analytics;

View File

@ -394,4 +394,10 @@ public abstract class AltEditorScreen extends Screen
super.render(matrixStack, mouseX, mouseY, partialTicks);
}
@Override
public final void onClose()
{
client.setScreen(prevScreen);
}
}

View File

@ -561,6 +561,12 @@ public final class AltManagerScreen extends Screen
tooltip.add(new LiteralText(line));
}
@Override
public void onClose()
{
client.setScreen(prevScreen);
}
public static final class ListGui extends ListWidget
{
private final List<Alt> list;

View File

@ -268,8 +268,7 @@ public final class SliderComponent extends Component
Matrix4f matrix = matrixStack.peek().getPositionMatrix();
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
double percentage = (setting.getValue() - setting.getMinimum())
/ (setting.getMaximum() - setting.getMinimum());
double percentage = setting.getPercentage();
float xk1 = x1 + (x2 - x1 - 8) * (float)percentage;
float xk2 = xk1 + 8;
float yk1 = y3 + 1.5F;
@ -280,8 +279,8 @@ public final class SliderComponent extends Component
RenderSystem.setShaderColor(0.5F, 0.5F, 0.5F, 0.75F);
else
{
float f = (float)(2 * percentage);
RenderSystem.setShaderColor(f, 2 - f, 0, hSlider ? 1 : 0.75F);
float[] c = setting.getKnobColor();
RenderSystem.setShaderColor(c[0], c[1], c[2], hSlider ? 1 : 0.75F);
}
bufferBuilder.begin(VertexFormat.DrawMode.QUADS,
VertexFormats.POSITION);

View File

@ -50,12 +50,6 @@ public final class EditBlockListScreen extends Screen
this.blockList = blockList;
}
@Override
public boolean shouldPause()
{
return false;
}
@Override
public void init()
{
@ -209,6 +203,18 @@ public final class EditBlockListScreen extends Screen
width / 2 - 164, height - 52, false);
}
@Override
public boolean shouldPause()
{
return false;
}
@Override
public boolean shouldCloseOnEsc()
{
return false;
}
private static class ListGui extends ListWidget
{
private final MinecraftClient mc;

View File

@ -52,12 +52,6 @@ public final class EditItemListScreen extends Screen
this.itemList = itemList;
}
@Override
public boolean shouldPause()
{
return false;
}
@Override
public void init()
{
@ -216,6 +210,18 @@ public final class EditItemListScreen extends Screen
width / 2 - 164, height - 52, false);
}
@Override
public boolean shouldPause()
{
return false;
}
@Override
public boolean shouldCloseOnEsc()
{
return false;
}
private static class ListGui extends ListWidget
{
private final MinecraftClient mc;

View File

@ -40,12 +40,6 @@ public final class SelectFileScreen extends Screen
setting = blockList;
}
@Override
public boolean shouldPause()
{
return false;
}
@Override
public void init()
{
@ -178,6 +172,18 @@ public final class SelectFileScreen extends Screen
mouseX, mouseY);
}
@Override
public boolean shouldPause()
{
return false;
}
@Override
public boolean shouldCloseOnEsc()
{
return false;
}
private static class ListGui extends ListWidget
{
private final MinecraftClient mc;

View File

@ -25,8 +25,7 @@ public final class AutoLeaveHack extends Hack implements UpdateListener
private final SliderSetting health = new SliderSetting("Health",
"Leaves the server when your health\n"
+ "reaches this value or falls below it.",
4, 0.5, 9.5, 0.5,
v -> ValueDisplay.DECIMAL.getValueString(v) + " hearts");
4, 0.5, 9.5, 0.5, ValueDisplay.DECIMAL.withSuffix(" hearts"));
public final EnumSetting<Mode> mode = new EnumSetting<>("Mode",
"\u00a7lQuit\u00a7r mode just quits the game normally.\n"

View File

@ -28,8 +28,7 @@ public final class AutoPotionHack extends Hack implements UpdateListener
private final SliderSetting health = new SliderSetting("Health",
"Throws a potion when your health\n"
+ "reaches this value or falls below it.",
6, 0.5, 9.5, 0.5,
v -> ValueDisplay.DECIMAL.getValueString(v) + " hearts");
6, 0.5, 9.5, 0.5, ValueDisplay.DECIMAL.withSuffix(" hearts"));
private int timer;

View File

@ -12,6 +12,7 @@ import net.wurstclient.SearchTags;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.settings.SliderSetting.ValueDisplay;
@SearchTags({"auto steal", "ChestStealer", "chest stealer",
"steal store buttons", "Steal/Store buttons"})
@ -20,7 +21,7 @@ public final class AutoStealHack extends Hack
private final SliderSetting delay = new SliderSetting("Delay",
"Delay between moving stacks of items.\n"
+ "Should be at least 70ms for NoCheat+ servers.",
100, 0, 500, 10, v -> (int)v + "ms");
100, 0, 500, 10, ValueDisplay.INTEGER.withSuffix("ms"));
private final CheckboxSetting buttons =
new CheckboxSetting("Steal/Store buttons", true);

View File

@ -23,6 +23,7 @@ import net.wurstclient.mixinterface.ISwordItem;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.EnumSetting;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.settings.SliderSetting.ValueDisplay;
@SearchTags({"auto sword"})
public final class AutoSwordHack extends Hack implements UpdateListener
@ -39,7 +40,7 @@ public final class AutoSwordHack extends Hack implements UpdateListener
"Time until AutoSword will switch back from\n"
+ "the weapon to the previously selected slot.\n\n"
+ "Only works when \u00a7lSwitch back\u00a7r is checked.",
10, 1, 200, 1, v -> (int)v + " ticks");
10, 1, 200, 1, ValueDisplay.INTEGER.withSuffix(" ticks"));
private int oldSlot;
private int timer;

View File

@ -17,6 +17,7 @@ import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.DontSaveState;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.settings.SliderSetting.ValueDisplay;
import net.wurstclient.util.FakePlayerEntity;
@DontSaveState
@ -27,7 +28,7 @@ public final class BlinkHack extends Hack
private final SliderSetting limit = new SliderSetting("Limit",
"Automatically restarts Blink once\n" + "the given number of packets\n"
+ "have been suspended.\n\n" + "0 = no limit",
0, 0, 500, 1, v -> v == 0 ? "disabled" : (int)v + "");
0, 0, 500, 1, ValueDisplay.INTEGER.withLabel(0, "disabled"));
private final ArrayDeque<PlayerMoveC2SPacket> packets = new ArrayDeque<>();
private FakePlayerEntity fakePlayer;

View File

@ -39,6 +39,7 @@ public final class BonemealAuraHack extends Hack implements UpdateListener
{
private final SliderSetting range =
new SliderSetting("Range", 4.25, 1, 6, 0.05, ValueDisplay.DECIMAL);
private final EnumSetting<Mode> mode = new EnumSetting<>("Mode",
"\u00a7lFast\u00a7r mode can use bone meal on\n"
+ "multiple blocks at once.\n"

View File

@ -89,8 +89,7 @@ public final class BowAimbotHack extends Hack
new SliderSetting("Filter flying",
"Won't attack players that\n" + "are at least the given\n"
+ "distance above ground.",
0, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
0, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't attack zombies, creepers, etc.", false);

View File

@ -8,7 +8,6 @@
package net.wurstclient.hacks;
import java.awt.Color;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@ -78,16 +77,14 @@ public final class CaveFinderHack extends Hack
private final SliderSetting limit = new SliderSetting("Limit",
"The maximum number of blocks to display.\n"
+ "Higher values require a faster computer.",
5, 3, 6, 1,
v -> new DecimalFormat("##,###,###").format(Math.pow(10, v)));
5, 3, 6, 1, ValueDisplay.LOGARITHMIC);
private final ColorSetting color = new ColorSetting("Color",
"Caves will be highlighted\n" + "in this color.", Color.RED);
private final SliderSetting opacity = new SliderSetting("Opacity",
"How opaque the highlights should be.\n" + "0 = breathing animation", 0,
0, 1, 0.01,
v -> v == 0 ? "Breathing" : ValueDisplay.PERCENTAGE.getValueString(v));
0, 1, 0.01, ValueDisplay.PERCENTAGE.withLabel(0, "breathing"));
private int prevLimit;
private boolean notify;

View File

@ -9,93 +9,118 @@ package net.wurstclient.hacks;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Objects;
import java.util.stream.Stream;
import java.util.Arrays;
import java.util.List;
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.ChestBlock;
import net.minecraft.block.entity.BarrelBlockEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.ChestBlockEntity;
import net.minecraft.block.entity.EnderChestBlockEntity;
import net.minecraft.block.entity.ShulkerBoxBlockEntity;
import net.minecraft.block.entity.TrappedChestBlockEntity;
import net.minecraft.block.enums.ChestType;
import net.minecraft.client.gl.VertexBuffer;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer;
import net.minecraft.block.entity.*;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.Shader;
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.entity.Entity;
import net.minecraft.entity.vehicle.ChestMinecartEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.chunk.BlockEntityTickInvoker;
import net.minecraft.entity.vehicle.HopperMinecartEntity;
import net.wurstclient.Category;
import net.wurstclient.events.CameraTransformViewBobbingListener;
import net.wurstclient.events.RenderListener;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.Hack;
import net.wurstclient.mixinterface.IWorld;
import net.wurstclient.hacks.chestesp.ChestEspBlockGroup;
import net.wurstclient.hacks.chestesp.ChestEspEntityGroup;
import net.wurstclient.hacks.chestesp.ChestEspGroup;
import net.wurstclient.hacks.chestesp.ChestEspRenderer;
import net.wurstclient.hacks.chestesp.ChestEspStyle;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.ColorSetting;
import net.wurstclient.settings.EnumSetting;
import net.wurstclient.util.BlockUtils;
import net.wurstclient.util.ChunkUtils;
import net.wurstclient.util.RenderUtils;
import net.wurstclient.util.RotationUtils;
public class ChestEspHack extends Hack implements UpdateListener,
CameraTransformViewBobbingListener, RenderListener
{
private final ColorSetting basicColor = new ColorSetting("Chest color",
"Normal chests will be\n" + "highlighted in this color.", Color.GREEN);
private final EnumSetting<ChestEspStyle> style =
new EnumSetting<>("Style", ChestEspStyle.values(), ChestEspStyle.BOXES);
private final ColorSetting trapColor = new ColorSetting("Trap color",
"Trapped chests will be\n" + "highlighted in this color.",
new Color(0xFF8000));
private final ChestEspBlockGroup basicChests = new ChestEspBlockGroup(
new ColorSetting("Chest color",
"Normal chests will be highlighted in this color.", Color.GREEN),
null);
private final ColorSetting enderColor = new ColorSetting("Ender color",
"Ender chests will be\n" + "highlighted in this color.", Color.CYAN);
private final ChestEspBlockGroup trapChests = new ChestEspBlockGroup(
new ColorSetting("Trap chest color",
"Trapped chests will be highlighted in this color.",
new Color(0xFF8000)),
new CheckboxSetting("Include trap chests", true));
private final ColorSetting shulkerColor = new ColorSetting("Shulker color",
"Shulker boxes will be\n" + "highlighted in this color.",
Color.MAGENTA);
private final ChestEspBlockGroup enderChests = new ChestEspBlockGroup(
new ColorSetting("Ender color",
"Ender chests will be highlighted in this color.", Color.CYAN),
new CheckboxSetting("Include ender chests", true));
private final ColorSetting cartColor = new ColorSetting("Cart color",
"Minecarts will be\n" + "highlighted in this color.", Color.GREEN);
private final ChestEspEntityGroup chestCarts =
new ChestEspEntityGroup(
new ColorSetting("Chest cart color",
"Minecarts with chests will be highlighted in this color.",
Color.YELLOW),
new CheckboxSetting("Include chest carts", true));
private final EnumSetting<Style> style =
new EnumSetting<>("Style", Style.values(), Style.BOXES);
private final ChestEspBlockGroup barrels = new ChestEspBlockGroup(
new ColorSetting("Barrel color",
"Barrels will be highlighted in this color.", Color.GREEN),
new CheckboxSetting("Include barrels", true));
private final ArrayList<Box> basicChests = new ArrayList<>();
private final ArrayList<Box> trapChests = new ArrayList<>();
private final ArrayList<Box> enderChests = new ArrayList<>();
private final ArrayList<Box> shulkerBoxes = new ArrayList<>();
private final ArrayList<Entity> minecarts = new ArrayList<>();
private final ChestEspBlockGroup shulkerBoxes = new ChestEspBlockGroup(
new ColorSetting("Shulker color",
"Shulker boxes will be highlighted in this color.", Color.MAGENTA),
new CheckboxSetting("Include shulkers", true));
private VertexBuffer solidBox;
private VertexBuffer outlinedBox;
private final ChestEspBlockGroup hoppers = new ChestEspBlockGroup(
new ColorSetting("Hopper color",
"Hoppers will be highlighted in this color.", Color.WHITE),
new CheckboxSetting("Include hoppers", false));
private final ChestEspEntityGroup hopperCarts =
new ChestEspEntityGroup(
new ColorSetting("Hopper cart color",
"Minecarts with hoppers will be highlighted in this color.",
Color.YELLOW),
new CheckboxSetting("Include hopper carts", false));
private final ChestEspBlockGroup droppers = new ChestEspBlockGroup(
new ColorSetting("Dropper color",
"Droppers will be highlighted in this color.", Color.WHITE),
new CheckboxSetting("Include droppers", false));
private final ChestEspBlockGroup dispensers = new ChestEspBlockGroup(
new ColorSetting("Dispenser color",
"Dispensers will be highlighted in this color.",
new Color(0xFF8000)),
new CheckboxSetting("Include dispensers", false));
private final ChestEspBlockGroup furnaces =
new ChestEspBlockGroup(new ColorSetting("Furnace color",
"Furnaces, smokers, and blast furnaces will be highlighted in this color.",
Color.RED), new CheckboxSetting("Include furnaces", false));
private final List<ChestEspGroup> groups =
Arrays.asList(basicChests, trapChests, enderChests, chestCarts, barrels,
shulkerBoxes, hoppers, hopperCarts, droppers, dispensers, furnaces);
private final List<ChestEspEntityGroup> entityGroups =
Arrays.asList(chestCarts, hopperCarts);
public ChestEspHack()
{
super("ChestESP");
setCategory(Category.RENDER);
addSetting(basicColor);
addSetting(trapColor);
addSetting(enderColor);
addSetting(shulkerColor);
addSetting(cartColor);
addSetting(style);
groups.stream().flatMap(ChestEspGroup::getSettings)
.forEach(this::addSetting);
}
@Override
@ -105,15 +130,7 @@ public class ChestEspHack extends Hack implements UpdateListener,
EVENTS.add(CameraTransformViewBobbingListener.class, this);
EVENTS.add(RenderListener.class, this);
Stream.of(solidBox, outlinedBox).filter(Objects::nonNull)
.forEach(VertexBuffer::close);
solidBox = new VertexBuffer();
outlinedBox = new VertexBuffer();
Box box = new Box(BlockPos.ORIGIN);
RenderUtils.drawSolidBox(box, solidBox);
RenderUtils.drawOutlinedBox(box, outlinedBox);
ChestEspRenderer.prepareBuffers();
}
@Override
@ -123,111 +140,51 @@ public class ChestEspHack extends Hack implements UpdateListener,
EVENTS.remove(CameraTransformViewBobbingListener.class, this);
EVENTS.remove(RenderListener.class, this);
Stream.of(solidBox, outlinedBox).filter(Objects::nonNull)
.forEach(VertexBuffer::close);
groups.forEach(ChestEspGroup::clear);
ChestEspRenderer.closeBuffers();
}
@Override
public void onUpdate()
{
basicChests.clear();
trapChests.clear();
enderChests.clear();
shulkerBoxes.clear();
groups.forEach(ChestEspGroup::clear);
for(BlockEntityTickInvoker blockEntityTicker : ((IWorld)MC.world)
.getBlockEntityTickers())
{
BlockEntity blockEntity =
MC.world.getBlockEntity(blockEntityTicker.getPos());
ArrayList<BlockEntity> blockEntities =
ChunkUtils.getLoadedBlockEntities()
.collect(Collectors.toCollection(ArrayList::new));
for(BlockEntity blockEntity : blockEntities)
if(blockEntity instanceof TrappedChestBlockEntity)
{
Box box = getBoxFromChest((ChestBlockEntity)blockEntity);
if(box != null)
trapChests.add(box);
}else if(blockEntity instanceof ChestBlockEntity)
{
Box box = getBoxFromChest((ChestBlockEntity)blockEntity);
if(box != null)
basicChests.add(box);
}else if(blockEntity instanceof EnderChestBlockEntity)
{
BlockPos pos = blockEntity.getPos();
if(!BlockUtils.canBeClicked(pos))
continue;
Box bb = BlockUtils.getBoundingBox(pos);
enderChests.add(bb);
}else if(blockEntity instanceof ShulkerBoxBlockEntity)
{
BlockPos pos = blockEntity.getPos();
if(!BlockUtils.canBeClicked(pos))
continue;
Box bb = BlockUtils.getBoundingBox(pos);
shulkerBoxes.add(bb);
}else if(blockEntity instanceof BarrelBlockEntity)
{
BlockPos pos = blockEntity.getPos();
if(!BlockUtils.canBeClicked(pos))
continue;
Box bb = BlockUtils.getBoundingBox(pos);
basicChests.add(bb);
}
}
minecarts.clear();
trapChests.add(blockEntity);
else if(blockEntity instanceof ChestBlockEntity)
basicChests.add(blockEntity);
else if(blockEntity instanceof EnderChestBlockEntity)
enderChests.add(blockEntity);
else if(blockEntity instanceof ShulkerBoxBlockEntity)
shulkerBoxes.add(blockEntity);
else if(blockEntity instanceof BarrelBlockEntity)
barrels.add(blockEntity);
else if(blockEntity instanceof HopperBlockEntity)
hoppers.add(blockEntity);
else if(blockEntity instanceof DropperBlockEntity)
droppers.add(blockEntity);
else if(blockEntity instanceof DispenserBlockEntity)
dispensers.add(blockEntity);
else if(blockEntity instanceof AbstractFurnaceBlockEntity)
furnaces.add(blockEntity);
for(Entity entity : MC.world.getEntities())
if(entity instanceof ChestMinecartEntity)
minecarts.add(entity);
}
private Box getBoxFromChest(ChestBlockEntity chestBE)
{
BlockState state = chestBE.getCachedState();
if(!state.contains(ChestBlock.CHEST_TYPE))
return null;
ChestType chestType = state.get(ChestBlock.CHEST_TYPE);
// ignore other block in double chest
if(chestType == ChestType.LEFT)
return null;
BlockPos pos = chestBE.getPos();
if(!BlockUtils.canBeClicked(pos))
return null;
Box box = BlockUtils.getBoundingBox(pos);
// larger box for double chest
if(chestType != ChestType.SINGLE)
{
BlockPos pos2 = pos.offset(ChestBlock.getFacing(state));
if(BlockUtils.canBeClicked(pos2))
{
Box box2 = BlockUtils.getBoundingBox(pos2);
box = box.union(box2);
}
}
return box;
chestCarts.add(entity);
else if(entity instanceof HopperMinecartEntity)
hopperCarts.add(entity);
}
@Override
public void onCameraTransformViewBobbing(
CameraTransformViewBobbingEvent event)
{
if(style.getSelected().lines)
if(style.getSelected().hasLines())
event.cancel();
}
@ -244,79 +201,23 @@ public class ChestEspHack extends Hack implements UpdateListener,
matrixStack.push();
RenderUtils.applyRegionalRenderOffset(matrixStack);
ArrayList<Box> minecartBoxes = calculateMinecartBoxes(partialTicks);
entityGroups.stream().filter(ChestEspGroup::isEnabled)
.forEach(g -> g.updateBoxes(partialTicks));
BlockPos camPos = RenderUtils.getCameraBlockPos();
int regionX = (camPos.getX() >> 9) * 512;
int regionZ = (camPos.getZ() >> 9) * 512;
ChestEspRenderer espRenderer = new ChestEspRenderer(matrixStack);
if(style.getSelected().boxes)
if(style.getSelected().hasBoxes())
{
RenderSystem.setShader(GameRenderer::getPositionShader);
renderBoxes(matrixStack, basicChests, basicColor.getColorF(),
regionX, regionZ);
renderBoxes(matrixStack, trapChests, trapColor.getColorF(), regionX,
regionZ);
renderBoxes(matrixStack, enderChests, enderColor.getColorF(),
regionX, regionZ);
renderBoxes(matrixStack, shulkerBoxes, shulkerColor.getColorF(),
regionX, regionZ);
renderBoxes(matrixStack, minecartBoxes, cartColor.getColorF(),
regionX, regionZ);
groups.stream().filter(ChestEspGroup::isEnabled)
.forEach(espRenderer::renderBoxes);
}
if(style.getSelected().lines)
if(style.getSelected().hasLines())
{
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
RenderSystem.setShader(GameRenderer::getPositionShader);
Vec3d start = RotationUtils.getClientLookVec()
.add(RenderUtils.getCameraPos()).subtract(regionX, 0, regionZ);
float[] basicColorF = basicColor.getColorF();
RenderSystem.setShaderColor(basicColorF[0], basicColorF[1],
basicColorF[2], 0.5F);
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
VertexFormats.POSITION);
renderLines(matrixStack, start, basicChests, regionX, regionZ);
bufferBuilder.end();
BufferRenderer.draw(bufferBuilder);
float[] trapColorF = trapColor.getColorF();
RenderSystem.setShaderColor(trapColorF[0], trapColorF[1],
trapColorF[2], 0.5F);
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
VertexFormats.POSITION);
renderLines(matrixStack, start, trapChests, regionX, regionZ);
bufferBuilder.end();
BufferRenderer.draw(bufferBuilder);
float[] enderColorF = enderColor.getColorF();
RenderSystem.setShaderColor(enderColorF[0], enderColorF[1],
enderColorF[2], 0.5F);
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
VertexFormats.POSITION);
renderLines(matrixStack, start, enderChests, regionX, regionZ);
bufferBuilder.end();
BufferRenderer.draw(bufferBuilder);
float[] shulkerColorF = shulkerColor.getColorF();
RenderSystem.setShaderColor(shulkerColorF[0], shulkerColorF[1],
shulkerColorF[2], 0.5F);
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
VertexFormats.POSITION);
renderLines(matrixStack, start, shulkerBoxes, regionX, regionZ);
bufferBuilder.end();
BufferRenderer.draw(bufferBuilder);
float[] cartColorF = cartColor.getColorF();
RenderSystem.setShaderColor(cartColorF[0], cartColorF[1],
cartColorF[2], 0.5F);
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
VertexFormats.POSITION);
renderLines(matrixStack, start, minecartBoxes, regionX, regionZ);
bufferBuilder.end();
BufferRenderer.draw(bufferBuilder);
groups.stream().filter(ChestEspGroup::isEnabled)
.forEach(espRenderer::renderLines);
}
matrixStack.pop();
@ -327,93 +228,4 @@ public class ChestEspHack extends Hack implements UpdateListener,
GL11.glDisable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_LINE_SMOOTH);
}
private ArrayList<Box> calculateMinecartBoxes(float partialTicks)
{
ArrayList<Box> minecartBoxes = new ArrayList<>(minecarts.size());
minecarts.forEach(e -> {
double offsetX = -(e.getX() - e.lastRenderX)
+ (e.getX() - e.lastRenderX) * partialTicks;
double offsetY = -(e.getY() - e.lastRenderY)
+ (e.getY() - e.lastRenderY) * partialTicks;
double offsetZ = -(e.getZ() - e.lastRenderZ)
+ (e.getZ() - e.lastRenderZ) * partialTicks;
minecartBoxes
.add(e.getBoundingBox().offset(offsetX, offsetY, offsetZ));
});
return minecartBoxes;
}
private void renderBoxes(MatrixStack matrixStack, ArrayList<Box> boxes,
float[] colorF, int regionX, int regionZ)
{
for(Box box : boxes)
{
matrixStack.push();
matrixStack.translate(box.minX - regionX, box.minY,
box.minZ - regionZ);
matrixStack.scale((float)(box.maxX - box.minX),
(float)(box.maxY - box.minY), (float)(box.maxZ - box.minZ));
RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.25F);
Matrix4f viewMatrix = matrixStack.peek().getPositionMatrix();
Matrix4f projMatrix = RenderSystem.getProjectionMatrix();
Shader shader = RenderSystem.getShader();
solidBox.setShader(viewMatrix, projMatrix, shader);
RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F);
outlinedBox.setShader(viewMatrix, projMatrix, shader);
matrixStack.pop();
}
}
private void renderLines(MatrixStack matrixStack, Vec3d start,
ArrayList<Box> boxes, int regionX, int regionZ)
{
Matrix4f matrix = matrixStack.peek().getPositionMatrix();
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
for(Box box : boxes)
{
Vec3d end = box.getCenter().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();
}
}
private enum Style
{
BOXES("Boxes only", true, false),
LINES("Lines only", false, true),
LINES_AND_BOXES("Lines and boxes", true, true);
private final String name;
private final boolean boxes;
private final boolean lines;
private Style(String name, boolean boxes, boolean lines)
{
this.name = name;
this.boxes = boxes;
this.lines = lines;
}
@Override
public String toString()
{
return name;
}
}
}

View File

@ -38,6 +38,7 @@ import net.wurstclient.SearchTags;
import net.wurstclient.events.LeftClickListener;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.AttackSpeedSliderSetting;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.EnumSetting;
import net.wurstclient.settings.SliderSetting;
@ -53,6 +54,9 @@ public final class ClickAuraHack extends Hack
private final SliderSetting range =
new SliderSetting("Range", 5, 1, 10, 0.05, ValueDisplay.DECIMAL);
private final AttackSpeedSliderSetting speed =
new AttackSpeedSliderSetting();
private final EnumSetting<Priority> priority = new EnumSetting<>("Priority",
"Determines which entity will be attacked first.\n"
+ "\u00a7lDistance\u00a7r - Attacks the closest entity.\n"
@ -61,7 +65,7 @@ public final class ClickAuraHack extends Hack
+ "\u00a7lHealth\u00a7r - Attacks the weakest entity.",
Priority.values(), Priority.ANGLE);
public final SliderSetting fov =
private final SliderSetting fov =
new SliderSetting("FOV", 360, 30, 360, 10, ValueDisplay.DEGREES);
private final CheckboxSetting filterPlayers = new CheckboxSetting(
@ -72,8 +76,7 @@ public final class ClickAuraHack extends Hack
new SliderSetting("Filter flying",
"Won't attack players that\n" + "are at least the given\n"
+ "distance above ground.",
0, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
0, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't attack zombies, creepers, etc.", false);
@ -115,6 +118,7 @@ public final class ClickAuraHack extends Hack
setCategory(Category.COMBAT);
addSetting(range);
addSetting(speed);
addSetting(priority);
addSetting(fov);
addSetting(filterPlayers);
@ -147,6 +151,7 @@ public final class ClickAuraHack extends Hack
WURST.getHax().triggerBotHack.setEnabled(false);
WURST.getHax().tpAuraHack.setEnabled(false);
speed.resetTimer();
EVENTS.add(UpdateListener.class, this);
EVENTS.add(LeftClickListener.class, this);
}
@ -164,7 +169,8 @@ public final class ClickAuraHack extends Hack
if(!MC.options.keyAttack.isPressed())
return;
if(MC.player.getAttackCooldownProgress(0) < 1)
speed.updateTimer();
if(!speed.isTimeToAttack())
return;
attack();
@ -182,9 +188,6 @@ public final class ClickAuraHack extends Hack
ClientPlayerEntity player = MC.player;
ClientWorld world = MC.world;
if(player.getAttackCooldownProgress(0) < 1)
return;
double rangeSq = Math.pow(range.getValue(), 2);
Stream<Entity> stream =
StreamSupport.stream(MC.world.getEntities().spliterator(), true)
@ -281,6 +284,7 @@ public final class ClickAuraHack extends Hack
WURST.getHax().criticalsHack.doCritical();
MC.interactionManager.attackEntity(player, target);
player.swingHand(Hand.MAIN_HAND);
speed.resetTimer();
}
private enum Priority

View File

@ -46,6 +46,7 @@ import net.wurstclient.events.RenderListener;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.DontSaveState;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.AttackSpeedSliderSetting;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.settings.SliderSetting.ValueDisplay;
@ -59,6 +60,9 @@ public final class FightBotHack extends Hack
private final SliderSetting range = new SliderSetting("Range",
"Attack range (like Killaura)", 4.25, 1, 6, 0.05, ValueDisplay.DECIMAL);
private final AttackSpeedSliderSetting speed =
new AttackSpeedSliderSetting();
private final SliderSetting distance = new SliderSetting("Distance",
"How closely to follow the target.\n"
+ "This should be set to a lower value than Range.",
@ -77,8 +81,7 @@ public final class FightBotHack extends Hack
new SliderSetting("Filter flying",
"Won't attack players that\n" + "are at least the given\n"
+ "distance above ground.",
0, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
0, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't attack zombies, creepers, etc.", false);
@ -128,6 +131,7 @@ public final class FightBotHack extends Hack
setCategory(Category.COMBAT);
addSetting(range);
addSetting(speed);
addSetting(distance);
addSetting(useAi);
@ -164,6 +168,7 @@ public final class FightBotHack extends Hack
pathFinder = new EntityPathFinder(MC.player);
speed.resetTimer();
EVENTS.add(UpdateListener.class, this);
EVENTS.add(RenderListener.class, this);
}
@ -184,6 +189,8 @@ public final class FightBotHack extends Hack
@Override
public void onUpdate()
{
speed.updateTimer();
// set entity
Stream<Entity> stream = StreamSupport
.stream(MC.world.getEntities().spliterator(), true)
@ -329,7 +336,7 @@ public final class FightBotHack extends Hack
}
// check cooldown
if(MC.player.getAttackCooldownProgress(0) < 1)
if(!speed.isTimeToAttack())
return;
// check range
@ -340,6 +347,7 @@ public final class FightBotHack extends Hack
WURST.getHax().criticalsHack.doCritical();
MC.interactionManager.attackEntity(MC.player, entity);
MC.player.swingHand(Hand.MAIN_HAND);
speed.resetTimer();
}
@Override

View File

@ -76,8 +76,7 @@ public final class FollowHack extends Hack
new SliderSetting("Filter flying",
"Won't follow players that\n" + "are at least the given\n"
+ "distance above ground.",
0, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
0, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't follow zombies, creepers, etc.", true);

View File

@ -34,8 +34,7 @@ public final class GlideHack extends Hack implements UpdateListener
private final SliderSetting minHeight = new SliderSetting("Min height",
"Won't glide when you are\n" + "too close to the ground.", 0, 0, 2,
0.01,
v -> v == 0 ? "disabled" : ValueDisplay.DECIMAL.getValueString(v));
0.01, ValueDisplay.DECIMAL.withLabel(0, "disabled"));
public GlideHack()
{

View File

@ -7,6 +7,9 @@
*/
package net.wurstclient.hacks;
import java.util.ArrayList;
import java.util.Arrays;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.AbstractInventoryScreen;
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
@ -34,12 +37,24 @@ public final class InvWalkHack extends Hack implements UpdateListener
new CheckboxSetting("Allow other screens",
"description.wurst.setting.invwalk.allow_other", true);
private final CheckboxSetting allowSneak =
new CheckboxSetting("Allow sneak key", true);
private final CheckboxSetting allowSprint =
new CheckboxSetting("Allow sprint key", true);
private final CheckboxSetting allowJump =
new CheckboxSetting("Allow jump key", true);
public InvWalkHack()
{
super("InvWalk");
setCategory(Category.MOVEMENT);
addSetting(allowClickGUI);
addSetting(allowOther);
addSetting(allowSneak);
addSetting(allowSprint);
addSetting(allowJump);
}
@Override
@ -64,9 +79,18 @@ public final class InvWalkHack extends Hack implements UpdateListener
if(!isAllowedScreen(screen))
return;
KeyBinding[] keys = {MC.options.keyForward, MC.options.keyBack,
MC.options.keyLeft, MC.options.keyRight, MC.options.keyJump,
MC.options.keySprint, MC.options.keySneak};
ArrayList<KeyBinding> keys =
new ArrayList<>(Arrays.asList(MC.options.keyForward,
MC.options.keyBack, MC.options.keyLeft, MC.options.keyRight));
if(allowSneak.isChecked())
keys.add(MC.options.keySneak);
if(allowSprint.isChecked())
keys.add(MC.options.keySprint);
if(allowJump.isChecked())
keys.add(MC.options.keyJump);
for(KeyBinding key : keys)
key.setPressed(((IKeyBinding)key).isActallyPressed());

View File

@ -45,6 +45,7 @@ import net.wurstclient.events.PostMotionListener;
import net.wurstclient.events.RenderListener;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.AttackSpeedSliderSetting;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.EnumSetting;
import net.wurstclient.settings.SliderSetting;
@ -64,6 +65,9 @@ public final class KillauraHack extends Hack
+ "specified value will not be attacked.",
5, 1, 10, 0.05, ValueDisplay.DECIMAL);
private final AttackSpeedSliderSetting speed =
new AttackSpeedSliderSetting();
private final EnumSetting<Priority> priority = new EnumSetting<>("Priority",
"Determines which entity will be attacked first.\n"
+ "\u00a7lDistance\u00a7r - Attacks the closest entity.\n"
@ -72,7 +76,7 @@ public final class KillauraHack extends Hack
+ "\u00a7lHealth\u00a7r - Attacks the weakest entity.",
Priority.values(), Priority.ANGLE);
public final SliderSetting fov =
private final SliderSetting fov =
new SliderSetting("FOV", 360, 30, 360, 10, ValueDisplay.DEGREES);
private final CheckboxSetting damageIndicator = new CheckboxSetting(
@ -91,14 +95,13 @@ public final class KillauraHack extends Hack
+ "look like corpses.",
false);
private final SliderSetting filterFlying = new SliderSetting(
"Filter flying",
"Won't attack players that are at least\n"
+ "the given distance above ground.\n\n"
+ "Useful for servers that place a flying\n"
+ "player behind you to try and detect\n" + "your Killaura.",
0, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
private final SliderSetting filterFlying =
new SliderSetting("Filter flying",
"Won't attack players that are at least\n"
+ "the given distance above ground.\n\n"
+ "Useful for servers that place a flying\n"
+ "player behind you to try and detect\n" + "your Killaura.",
0, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't attack zombies, creepers, etc.", false);
@ -147,6 +150,7 @@ public final class KillauraHack extends Hack
setCategory(Category.COMBAT);
addSetting(range);
addSetting(speed);
addSetting(priority);
addSetting(fov);
addSetting(damageIndicator);
@ -180,6 +184,7 @@ public final class KillauraHack extends Hack
WURST.getHax().triggerBotHack.setEnabled(false);
WURST.getHax().tpAuraHack.setEnabled(false);
speed.resetTimer();
EVENTS.add(UpdateListener.class, this);
EVENTS.add(PostMotionListener.class, this);
EVENTS.add(RenderListener.class, this);
@ -199,12 +204,13 @@ public final class KillauraHack extends Hack
@Override
public void onUpdate()
{
speed.updateTimer();
if(!speed.isTimeToAttack())
return;
ClientPlayerEntity player = MC.player;
ClientWorld world = MC.world;
if(player.getAttackCooldownProgress(0) < 1)
return;
double rangeSq = Math.pow(range.getValue(), 2);
Stream<Entity> stream =
StreamSupport.stream(MC.world.getEntities().spliterator(), true)
@ -305,6 +311,7 @@ public final class KillauraHack extends Hack
player.swingHand(Hand.MAIN_HAND);
target = null;
speed.resetTimer();
}
@Override

View File

@ -45,6 +45,7 @@ import net.wurstclient.Category;
import net.wurstclient.events.RenderListener;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.AttackSpeedSliderSetting;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.EnumSetting;
import net.wurstclient.settings.SliderSetting;
@ -60,6 +61,9 @@ public final class KillauraLegitHack extends Hack
private final SliderSetting range =
new SliderSetting("Range", 4.25, 1, 4.25, 0.05, ValueDisplay.DECIMAL);
private final AttackSpeedSliderSetting speed =
new AttackSpeedSliderSetting();
private final EnumSetting<Priority> priority = new EnumSetting<>("Priority",
"Determines which entity will be attacked first.\n"
+ "\u00a7lDistance\u00a7r - Attacks the closest entity.\n"
@ -68,7 +72,7 @@ public final class KillauraLegitHack extends Hack
+ "\u00a7lHealth\u00a7r - Attacks the weakest entity.",
Priority.values(), Priority.ANGLE);
public final SliderSetting fov =
private final SliderSetting fov =
new SliderSetting("FOV", 360, 30, 360, 10, ValueDisplay.DEGREES);
private final CheckboxSetting damageIndicator = new CheckboxSetting(
@ -84,8 +88,7 @@ public final class KillauraLegitHack extends Hack
new SliderSetting("Filter flying",
"Won't attack players that\n" + "are at least the given\n"
+ "distance above ground.",
0.5, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
0.5, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't attack zombies, creepers, etc.", false);
@ -127,10 +130,13 @@ public final class KillauraLegitHack extends Hack
{
super("KillauraLegit");
setCategory(Category.COMBAT);
addSetting(range);
addSetting(speed);
addSetting(priority);
addSetting(fov);
addSetting(damageIndicator);
addSetting(filterPlayers);
addSetting(filterSleeping);
addSetting(filterFlying);
@ -161,6 +167,7 @@ public final class KillauraLegitHack extends Hack
WURST.getHax().triggerBotHack.setEnabled(false);
WURST.getHax().tpAuraHack.setEnabled(false);
speed.resetTimer();
EVENTS.add(UpdateListener.class, this);
EVENTS.add(RenderListener.class, this);
}
@ -176,12 +183,13 @@ public final class KillauraLegitHack extends Hack
@Override
public void onUpdate()
{
speed.updateTimer();
if(!speed.isTimeToAttack())
return;
ClientPlayerEntity player = MC.player;
ClientWorld world = MC.world;
if(player.getAttackCooldownProgress(0) < 1)
return;
double rangeSq = Math.pow(range.getValue(), 2);
Stream<Entity> stream =
StreamSupport.stream(MC.world.getEntities().spliterator(), true)
@ -273,6 +281,7 @@ public final class KillauraLegitHack extends Hack
WURST.getHax().criticalsHack.doCritical();
MC.interactionManager.attackEntity(player, target);
player.swingHand(Hand.MAIN_HAND);
speed.resetTimer();
}
private boolean faceEntityClient(Entity entity)

View File

@ -45,6 +45,7 @@ import net.wurstclient.hack.Hack;
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.MinPriorityThreadFactory;
import net.wurstclient.util.RenderUtils;
import net.wurstclient.util.RotationUtils;
@ -57,8 +58,8 @@ public final class MobSpawnEspHack extends Hack
private final EnumSetting<DrawDistance> drawDistance = new EnumSetting<>(
"Draw distance", DrawDistance.values(), DrawDistance.D9);
private final SliderSetting loadingSpeed =
new SliderSetting("Loading speed", 1, 1, 5, 1, v -> (int)v + "x");
private final SliderSetting loadingSpeed = new SliderSetting(
"Loading speed", 1, 1, 5, 1, ValueDisplay.INTEGER.withSuffix("x"));
private final CheckboxSetting depthTest =
new CheckboxSetting("Depth test", true);

View File

@ -38,6 +38,7 @@ import net.wurstclient.SearchTags;
import net.wurstclient.WurstClient;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.AttackSpeedSliderSetting;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.settings.SliderSetting.ValueDisplay;
@ -47,21 +48,13 @@ import net.wurstclient.util.RotationUtils;
@SearchTags({"multi aura", "ForceField", "force field"})
public final class MultiAuraHack extends Hack implements UpdateListener
{
private final CheckboxSetting useCooldown = new CheckboxSetting(
"Use cooldown", "Use your weapon's cooldown as the attack speed.\n"
+ "When checked, the 'Speed' slider will be ignored.",
true);
private final SliderSetting speed = new SliderSetting("Speed",
"Attack speed in clicks per second.\n"
+ "This value will be ignored when\n"
+ "'Use cooldown' is checked.",
12, 0.1, 20, 0.1, ValueDisplay.DECIMAL);
private final SliderSetting range =
new SliderSetting("Range", 5, 1, 6, 0.05, ValueDisplay.DECIMAL);
public final SliderSetting fov =
private final AttackSpeedSliderSetting speed =
new AttackSpeedSliderSetting();
private final SliderSetting fov =
new SliderSetting("FOV", 360, 30, 360, 10, ValueDisplay.DEGREES);
private final CheckboxSetting filterPlayers = new CheckboxSetting(
@ -72,8 +65,7 @@ public final class MultiAuraHack extends Hack implements UpdateListener
new SliderSetting("Filter flying",
"Won't attack players that\n" + "are at least the given\n"
+ "distance above ground.",
0, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
0, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't attack zombies, creepers, etc.", false);
@ -109,16 +101,13 @@ public final class MultiAuraHack extends Hack implements UpdateListener
private final CheckboxSetting filterCrystals = new CheckboxSetting(
"Filter end crystals", "Won't attack end crystals.", false);
private int timer;
public MultiAuraHack()
{
super("MultiAura");
setCategory(Category.COMBAT);
addSetting(useCooldown);
addSetting(speed);
addSetting(range);
addSetting(speed);
addSetting(fov);
addSetting(filterPlayers);
@ -151,7 +140,7 @@ public final class MultiAuraHack extends Hack implements UpdateListener
WURST.getHax().tpAuraHack.setEnabled(false);
WURST.getHax().triggerBotHack.setEnabled(false);
timer = 0;
speed.resetTimer();
EVENTS.add(UpdateListener.class, this);
}
@ -164,17 +153,13 @@ public final class MultiAuraHack extends Hack implements UpdateListener
@Override
public void onUpdate()
{
speed.updateTimer();
if(!speed.isTimeToAttack())
return;
ClientPlayerEntity player = MC.player;
ClientWorld world = MC.world;
// update timer
timer += 50;
// check timer / cooldown
if(useCooldown.isChecked() ? player.getAttackCooldownProgress(0) < 1
: timer < 1000 / speed.getValue())
return;
// get entities
double rangeSq = Math.pow(range.getValue(), 2);
Stream<Entity> stream =
@ -275,8 +260,6 @@ public final class MultiAuraHack extends Hack implements UpdateListener
}
player.swingHand(Hand.MAIN_HAND);
// reset timer
timer = 0;
speed.resetTimer();
}
}

View File

@ -42,6 +42,7 @@ import net.wurstclient.events.RenderListener;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.DontSaveState;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.AttackSpeedSliderSetting;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.settings.SliderSetting.ValueDisplay;
@ -51,6 +52,9 @@ import net.wurstclient.util.FakePlayerEntity;
public final class ProtectHack extends Hack
implements UpdateListener, RenderListener
{
private final AttackSpeedSliderSetting speed =
new AttackSpeedSliderSetting();
private final CheckboxSetting useAi =
new CheckboxSetting("Use AI (experimental)", false);
@ -64,8 +68,7 @@ public final class ProtectHack extends Hack
new SliderSetting("Filter flying",
"Won't attack players that\n" + "are at least the given\n"
+ "distance above ground.",
0, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
0, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't attack zombies, creepers, etc.", false);
@ -120,6 +123,7 @@ public final class ProtectHack extends Hack
super("Protect");
setCategory(Category.COMBAT);
addSetting(speed);
addSetting(useAi);
addSetting(filterPlayers);
@ -181,6 +185,7 @@ public final class ProtectHack extends Hack
pathFinder = new EntityPathFinder(friend, distanceF);
speed.resetTimer();
EVENTS.add(UpdateListener.class, this);
EVENTS.add(RenderListener.class, this);
}
@ -208,6 +213,8 @@ public final class ProtectHack extends Hack
@Override
public void onUpdate()
{
speed.updateTimer();
// check if player died, friend died or disappeared
if(friend == null || friend.isRemoved()
|| !(friend instanceof LivingEntity)
@ -372,13 +379,14 @@ public final class ProtectHack extends Hack
WURST.getHax().autoSwordHack.setSlot();
// check cooldown
if(MC.player.getAttackCooldownProgress(0) < 1)
if(!speed.isTimeToAttack())
return;
// attack enemy
WURST.getHax().criticalsHack.doCritical();
MC.interactionManager.attackEntity(MC.player, enemy);
MC.player.swingHand(Hand.MAIN_HAND);
speed.resetTimer();
}
}

View File

@ -56,8 +56,7 @@ public final class RemoteViewHack extends Hack
new SliderSetting("Filter flying",
"Won't view players that\n" + "are at least the given\n"
+ "distance above ground.",
0, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
0, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't view zombies, creepers, etc.", true);

View File

@ -7,7 +7,6 @@
*/
package net.wurstclient.hacks;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@ -55,6 +54,7 @@ import net.wurstclient.hack.Hack;
import net.wurstclient.settings.BlockSetting;
import net.wurstclient.settings.EnumSetting;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.settings.SliderSetting.ValueDisplay;
import net.wurstclient.util.BlockVertexCompiler;
import net.wurstclient.util.ChatUtils;
import net.wurstclient.util.ChunkSearcher;
@ -76,8 +76,7 @@ public final class SearchHack extends Hack
private final SliderSetting limit = new SliderSetting("Limit",
"The maximum number of blocks to display.\n"
+ "Higher values require a faster computer.",
4, 3, 6, 1,
v -> new DecimalFormat("##,###,###").format(Math.pow(10, v)));
4, 3, 6, 1, ValueDisplay.LOGARITHMIC);
private int prevLimit;
private boolean notify;

View File

@ -38,6 +38,7 @@ import net.wurstclient.SearchTags;
import net.wurstclient.WurstClient;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.AttackSpeedSliderSetting;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.EnumSetting;
import net.wurstclient.settings.SliderSetting;
@ -48,11 +49,14 @@ import net.wurstclient.util.RotationUtils;
@SearchTags({"TpAura", "tp aura", "EnderAura", "Ender-Aura", "ender aura"})
public final class TpAuraHack extends Hack implements UpdateListener
{
private Random random = new Random();
private final Random random = new Random();
private final SliderSetting range =
new SliderSetting("Range", 4.25, 1, 6, 0.05, ValueDisplay.DECIMAL);
private final AttackSpeedSliderSetting speed =
new AttackSpeedSliderSetting();
private final EnumSetting<Priority> priority = new EnumSetting<>("Priority",
"Determines which entity will be attacked first.\n"
+ "\u00a7lDistance\u00a7r - Attacks the closest entity.\n"
@ -69,8 +73,7 @@ public final class TpAuraHack extends Hack implements UpdateListener
new SliderSetting("Filter flying",
"Won't attack players that\n" + "are at least the given\n"
+ "distance above ground.",
0, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
0, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't attack zombies, creepers, etc.", false);
@ -112,6 +115,7 @@ public final class TpAuraHack extends Hack implements UpdateListener
setCategory(Category.COMBAT);
addSetting(range);
addSetting(speed);
addSetting(priority);
addSetting(filterPlayers);
@ -144,6 +148,7 @@ public final class TpAuraHack extends Hack implements UpdateListener
WURST.getHax().protectHack.setEnabled(false);
WURST.getHax().triggerBotHack.setEnabled(false);
speed.resetTimer();
EVENTS.add(UpdateListener.class, this);
}
@ -156,6 +161,10 @@ public final class TpAuraHack extends Hack implements UpdateListener
@Override
public void onUpdate()
{
speed.updateTimer();
if(!speed.isTimeToAttack())
return;
ClientPlayerEntity player = MC.player;
// set entity
@ -257,6 +266,7 @@ public final class TpAuraHack extends Hack implements UpdateListener
WURST.getHax().criticalsHack.doCritical();
MC.interactionManager.attackEntity(player, entity);
player.swingHand(Hand.MAIN_HAND);
speed.resetTimer();
}
private enum Priority

View File

@ -34,6 +34,7 @@ import net.wurstclient.Category;
import net.wurstclient.SearchTags;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.AttackSpeedSliderSetting;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.settings.SliderSetting.ValueDisplay;
@ -45,6 +46,9 @@ public final class TriggerBotHack extends Hack implements UpdateListener
private final SliderSetting range =
new SliderSetting("Range", 4.25, 1, 6, 0.05, ValueDisplay.DECIMAL);
private final AttackSpeedSliderSetting speed =
new AttackSpeedSliderSetting();
private final CheckboxSetting filterPlayers = new CheckboxSetting(
"Filter players", "Won't attack other players.", false);
private final CheckboxSetting filterSleeping = new CheckboxSetting(
@ -53,8 +57,7 @@ public final class TriggerBotHack extends Hack implements UpdateListener
new SliderSetting("Filter flying",
"Won't attack players that\n" + "are at least the given\n"
+ "distance above ground.",
0, 0, 2, 0.05,
v -> v == 0 ? "off" : ValueDisplay.DECIMAL.getValueString(v));
0, 0, 2, 0.05, ValueDisplay.DECIMAL.withLabel(0, "off"));
private final CheckboxSetting filterMonsters = new CheckboxSetting(
"Filter monsters", "Won't attack zombies, creepers, etc.", false);
@ -94,7 +97,10 @@ public final class TriggerBotHack extends Hack implements UpdateListener
{
super("TriggerBot");
setCategory(Category.COMBAT);
addSetting(range);
addSetting(speed);
addSetting(filterPlayers);
addSetting(filterSleeping);
addSetting(filterFlying);
@ -125,6 +131,7 @@ public final class TriggerBotHack extends Hack implements UpdateListener
WURST.getHax().protectHack.setEnabled(false);
WURST.getHax().tpAuraHack.setEnabled(false);
speed.resetTimer();
EVENTS.add(UpdateListener.class, this);
}
@ -137,10 +144,12 @@ public final class TriggerBotHack extends Hack implements UpdateListener
@Override
public void onUpdate()
{
ClientPlayerEntity player = MC.player;
if(player.getAttackCooldownProgress(0) < 1)
speed.updateTimer();
if(!speed.isTimeToAttack())
return;
ClientPlayerEntity player = MC.player;
if(MC.crosshairTarget == null
|| !(MC.crosshairTarget instanceof EntityHitResult))
return;
@ -154,6 +163,7 @@ public final class TriggerBotHack extends Hack implements UpdateListener
WURST.getHax().criticalsHack.doCritical();
MC.interactionManager.attackEntity(player, target);
player.swingHand(Hand.MAIN_HAND);
speed.resetTimer();
}
private boolean isCorrectEntity(Entity entity)

View File

@ -56,6 +56,7 @@ import net.wurstclient.hack.HackList;
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.BlockUtils;
import net.wurstclient.util.ChatUtils;
import net.wurstclient.util.RenderUtils;
@ -71,8 +72,8 @@ public final class TunnellerHack extends Hack
private final SliderSetting limit = new SliderSetting("Limit",
"Automatically stops once the tunnel\n"
+ "has reached the given length.\n\n" + "0 = no limit",
0, 0, 1000, 1,
v -> v == 0 ? "disabled" : v == 1 ? "1 block" : (int)v + " blocks");
0, 0, 1000, 1, ValueDisplay.INTEGER.withSuffix(" blocks")
.withLabel(1, "1 block").withLabel(0, "disabled"));
private final CheckboxSetting torches =
new CheckboxSetting(

View File

@ -0,0 +1,80 @@
/*
* Copyright (c) 2014-2022 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.chestesp;
import net.minecraft.block.BlockState;
import net.minecraft.block.ChestBlock;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.ChestBlockEntity;
import net.minecraft.block.enums.ChestType;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.ColorSetting;
import net.wurstclient.util.BlockUtils;
public final class ChestEspBlockGroup extends ChestEspGroup
{
public ChestEspBlockGroup(ColorSetting color, CheckboxSetting enabled)
{
super(color, enabled);
}
public void add(BlockEntity be)
{
Box box = getBox(be);
if(box == null)
return;
boxes.add(box);
}
private Box getBox(BlockEntity be)
{
BlockPos pos = be.getPos();
if(!BlockUtils.canBeClicked(pos))
return null;
if(be instanceof ChestBlockEntity)
return getChestBox((ChestBlockEntity)be);
return BlockUtils.getBoundingBox(pos);
}
private Box getChestBox(ChestBlockEntity chestBE)
{
BlockState state = chestBE.getCachedState();
if(!state.contains(ChestBlock.CHEST_TYPE))
return null;
ChestType chestType = state.get(ChestBlock.CHEST_TYPE);
// ignore other block in double chest
if(chestType == ChestType.LEFT)
return null;
BlockPos pos = chestBE.getPos();
Box box = BlockUtils.getBoundingBox(pos);
// larger box for double chest
if(chestType != ChestType.SINGLE)
{
BlockPos pos2 = pos.offset(ChestBlock.getFacing(state));
if(BlockUtils.canBeClicked(pos2))
{
Box box2 = BlockUtils.getBoundingBox(pos2);
box = box.union(box2);
}
}
return box;
}
}

View File

@ -0,0 +1,53 @@
/*
* Copyright (c) 2014-2022 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.chestesp;
import java.util.ArrayList;
import net.minecraft.entity.Entity;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.ColorSetting;
public final class ChestEspEntityGroup extends ChestEspGroup
{
private final ArrayList<Entity> entities = new ArrayList<>();
public ChestEspEntityGroup(ColorSetting color, CheckboxSetting enabled)
{
super(color, enabled);
}
public void add(Entity e)
{
entities.add(e);
}
@Override
public void clear()
{
entities.clear();
super.clear();
}
public void updateBoxes(float partialTicks)
{
boxes.clear();
for(Entity e : entities)
{
double offsetX = -(e.getX() - e.lastRenderX)
+ (e.getX() - e.lastRenderX) * partialTicks;
double offsetY = -(e.getY() - e.lastRenderY)
+ (e.getY() - e.lastRenderY) * partialTicks;
double offsetZ = -(e.getZ() - e.lastRenderZ)
+ (e.getZ() - e.lastRenderZ) * partialTicks;
boxes.add(e.getBoundingBox().offset(offsetX, offsetY, offsetZ));
}
}
}

View File

@ -0,0 +1,57 @@
/*
* Copyright (c) 2014-2022 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.chestesp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;
import net.minecraft.util.math.Box;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.ColorSetting;
import net.wurstclient.settings.Setting;
public abstract class ChestEspGroup
{
protected final ArrayList<Box> boxes = new ArrayList<>();
private final ColorSetting color;
private final CheckboxSetting enabled;
public ChestEspGroup(ColorSetting color, CheckboxSetting enabled)
{
this.color = Objects.requireNonNull(color);
this.enabled = enabled;
}
public void clear()
{
boxes.clear();
}
public boolean isEnabled()
{
return enabled == null || enabled.isChecked();
}
public Stream<Setting> getSettings()
{
return Stream.of(enabled, color).filter(Objects::nonNull);
}
public float[] getColorF()
{
return color.getColorF();
}
public List<Box> getBoxes()
{
return Collections.unmodifiableList(boxes);
}
}

View File

@ -0,0 +1,124 @@
/*
* Copyright (c) 2014-2022 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.chestesp;
import java.util.Objects;
import java.util.stream.Stream;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gl.VertexBuffer;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer;
import net.minecraft.client.render.Shader;
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.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.math.Vec3d;
import net.wurstclient.util.RenderUtils;
import net.wurstclient.util.RotationUtils;
public final class ChestEspRenderer
{
private static VertexBuffer solidBox;
private static VertexBuffer outlinedBox;
private final MatrixStack matrixStack;
private final int regionX;
private final int regionZ;
private final Vec3d start;
public ChestEspRenderer(MatrixStack matrixStack)
{
this.matrixStack = matrixStack;
BlockPos camPos = RenderUtils.getCameraBlockPos();
regionX = (camPos.getX() >> 9) * 512;
regionZ = (camPos.getZ() >> 9) * 512;
start = RotationUtils.getClientLookVec().add(RenderUtils.getCameraPos())
.subtract(regionX, 0, regionZ);
}
public void renderBoxes(ChestEspGroup group)
{
float[] colorF = group.getColorF();
for(Box box : group.getBoxes())
{
matrixStack.push();
matrixStack.translate(box.minX - regionX, box.minY,
box.minZ - regionZ);
matrixStack.scale((float)(box.maxX - box.minX),
(float)(box.maxY - box.minY), (float)(box.maxZ - box.minZ));
Matrix4f viewMatrix = matrixStack.peek().getPositionMatrix();
Matrix4f projMatrix = RenderSystem.getProjectionMatrix();
Shader shader = RenderSystem.getShader();
RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.25F);
solidBox.setShader(viewMatrix, projMatrix, shader);
RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F);
outlinedBox.setShader(viewMatrix, projMatrix, shader);
matrixStack.pop();
}
}
public void renderLines(ChestEspGroup group)
{
Matrix4f matrix = matrixStack.peek().getPositionMatrix();
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
float[] colorF = group.getColorF();
RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F);
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
VertexFormats.POSITION);
for(Box box : group.getBoxes())
{
Vec3d end = box.getCenter().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.end();
BufferRenderer.draw(bufferBuilder);
}
public static void prepareBuffers()
{
closeBuffers();
solidBox = new VertexBuffer();
outlinedBox = new VertexBuffer();
Box box = new Box(BlockPos.ORIGIN);
RenderUtils.drawSolidBox(box, solidBox);
RenderUtils.drawOutlinedBox(box, outlinedBox);
}
public static void closeBuffers()
{
Stream.of(solidBox, outlinedBox).filter(Objects::nonNull)
.forEach(VertexBuffer::close);
}
}

View File

@ -0,0 +1,42 @@
/*
* Copyright (c) 2014-2022 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.chestesp;
public enum ChestEspStyle
{
BOXES("Boxes only", true, false),
LINES("Lines only", false, true),
LINES_AND_BOXES("Lines and boxes", true, true);
private final String name;
private final boolean boxes;
private final boolean lines;
private ChestEspStyle(String name, boolean boxes, boolean lines)
{
this.name = name;
this.boxes = boxes;
this.lines = lines;
}
public boolean hasBoxes()
{
return boxes;
}
public boolean hasLines()
{
return lines;
}
@Override
public String toString()
{
return name;
}
}

View File

@ -7,6 +7,8 @@
*/
package net.wurstclient.mixin;
import java.util.List;
import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@ -15,6 +17,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.mojang.blaze3d.systems.RenderSystem;
import net.fabricmc.fabric.api.client.screen.v1.Screens;
import net.minecraft.client.gui.screen.GameMenuScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
@ -24,8 +27,9 @@ import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import net.minecraft.util.crash.CrashException;
import net.minecraft.util.crash.CrashReport;
import net.wurstclient.WurstClient;
import net.wurstclient.mixinterface.IScreen;
import net.wurstclient.options.WurstOptionsScreen;
@Mixin(GameMenuScreen.class)
@ -48,16 +52,56 @@ public abstract class GameMenuScreenMixin extends Screen
return;
addWurstOptionsButton();
removeFeedbackAndBugReportButtons();
}
private void addWurstOptionsButton()
{
wurstOptionsButton = new ButtonWidget(width / 2 - 102, height / 4 + 56,
204, 20, new LiteralText(" Options"),
b -> openWurstOptions());
List<ClickableWidget> buttons = Screens.getButtons(this);
addDrawableChild(wurstOptionsButton);
int buttonY = -1;
int buttonI = -1;
for(int i = 0; i < buttons.size(); ++i)
{
ClickableWidget button = buttons.get(i);
// insert Wurst button in place of feedback/report row
if(isFeedbackButton(button))
{
buttonY = button.y;
buttonI = i;
}
// make feedback/report buttons invisible
// (removing them completely would break ModMenu)
if(isFeedbackButton(button) || isBugReportButton(button))
button.visible = false;
}
if(buttonY == -1 || buttonI == -1)
throw new CrashException(
CrashReport.create(new IllegalStateException(),
"Someone deleted the Feedback button!"));
wurstOptionsButton = new ButtonWidget(width / 2 - 102, buttonY, 204, 20,
new LiteralText(" Options"), b -> openWurstOptions());
buttons.add(buttonI, wurstOptionsButton);
}
private boolean isFeedbackButton(ClickableWidget button)
{
return hasTrKey(button, "menu.sendFeedback");
}
private boolean isBugReportButton(ClickableWidget button)
{
return hasTrKey(button, "menu.reportBugs");
}
private boolean hasTrKey(ClickableWidget button, String key)
{
String message = button.getMessage().getString();
return message != null && message.equals(I18n.translate(key));
}
private void openWurstOptions()
@ -65,26 +109,6 @@ public abstract class GameMenuScreenMixin extends Screen
client.setScreen(new WurstOptionsScreen(this));
}
private void removeFeedbackAndBugReportButtons()
{
((IScreen)this).getButtons()
.removeIf(this::isFeedbackOrBugReportButton);
children().removeIf(this::isFeedbackOrBugReportButton);
}
private boolean isFeedbackOrBugReportButton(Object element)
{
if(element == null || !(element instanceof ClickableWidget))
return false;
ClickableWidget button = (ClickableWidget)element;
String message = button.getMessage().getString();
return message != null
&& (message.equals(I18n.translate("menu.sendFeedback"))
|| message.equals(I18n.translate("menu.reportBugs")));
}
@Inject(at = {@At("TAIL")},
method = {"render(Lnet/minecraft/client/util/math/MatrixStack;IIF)V"})
private void onRender(MatrixStack matrixStack, int mouseX, int mouseY,

View File

@ -7,14 +7,11 @@
*/
package net.wurstclient.mixin;
import java.util.List;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@ -24,7 +21,6 @@ import net.minecraft.util.math.Box;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.world.World;
import net.minecraft.world.WorldAccess;
import net.minecraft.world.chunk.BlockEntityTickInvoker;
import net.wurstclient.WurstClient;
import net.wurstclient.hacks.NoWeatherHack;
import net.wurstclient.mixinterface.IWorld;
@ -32,10 +28,6 @@ import net.wurstclient.mixinterface.IWorld;
@Mixin(World.class)
public abstract class WorldMixin implements WorldAccess, AutoCloseable, IWorld
{
@Shadow
@Final
protected List<BlockEntityTickInvoker> blockEntityTickers;
@Inject(at = {@At("HEAD")},
method = {"getRainGradient(F)F"},
cancellable = true)
@ -70,12 +62,6 @@ public abstract class WorldMixin implements WorldAccess, AutoCloseable, IWorld
return getDimension().getMoonPhase(getLunarTime());
}
@Override
public List<BlockEntityTickInvoker> getBlockEntityTickers()
{
return blockEntityTickers;
}
@Override
public Stream<VoxelShape> getBlockCollisionsStream(@Nullable Entity entity,
Box box)

View File

@ -7,7 +7,6 @@
*/
package net.wurstclient.mixinterface;
import java.util.List;
import java.util.stream.Stream;
import org.jetbrains.annotations.Nullable;
@ -15,12 +14,9 @@ import org.jetbrains.annotations.Nullable;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.Box;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.world.chunk.BlockEntityTickInvoker;
public interface IWorld
{
public List<BlockEntityTickInvoker> getBlockEntityTickers();
public Stream<VoxelShape> getBlockCollisionsStream(@Nullable Entity entity,
Box box);
}

View File

@ -111,6 +111,12 @@ public final class KeybindEditorScreen extends Screen
super.render(matrixStack, mouseX, mouseY, partialTicks);
}
@Override
public void onClose()
{
client.setScreen(prevScreen);
}
@Override
public void setKey(String key)
{

View File

@ -183,6 +183,12 @@ public final class KeybindProfilesScreen extends Screen
mouseX, mouseY);
}
@Override
public boolean shouldCloseOnEsc()
{
return false;
}
private static class ListGui extends ListWidget
{
private final MinecraftClient mc;

View File

@ -138,6 +138,12 @@ public class WurstOptionsScreen extends Screen
b -> os.open("https://www.wurstclient.net/donate/"));
}
@Override
public void onClose()
{
client.setScreen(prevScreen);
}
@Override
public void render(MatrixStack matrixStack, int mouseX, int mouseY,
float partialTicks)

View File

@ -80,6 +80,12 @@ public class ZoomManagerScreen extends Screen implements PressAKeyCallback
return on ? "ON" : "OFF";
}
@Override
public void onClose()
{
client.setScreen(prevScreen);
}
@Override
public void render(MatrixStack matrixStack, int mouseX, int mouseY,
float partialTicks)

View File

@ -23,7 +23,7 @@ import net.wurstclient.util.MathUtils;
public final class ZoomOtf extends OtherFeature implements MouseScrollListener
{
private final SliderSetting level = new SliderSetting("Zoom level", 3, 1,
50, 0.1, v -> ValueDisplay.DECIMAL.getValueString(v) + "x");
50, 0.1, ValueDisplay.DECIMAL.withSuffix("x"));
private final CheckboxSetting scroll = new CheckboxSetting(
"Use mouse wheel", "If enabled, you can use the mouse wheel\n"

View File

@ -0,0 +1,53 @@
/*
* Copyright (c) 2014-2022 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.settings;
import net.wurstclient.WurstClient;
public final class AttackSpeedSliderSetting extends SliderSetting
{
private int tickTimer;
public AttackSpeedSliderSetting()
{
this("Speed", "description.wurst.setting.generic.attack_speed");
}
public AttackSpeedSliderSetting(String name, String description)
{
super(name, description, 0, 0, 20, 0.1,
ValueDisplay.DECIMAL.withLabel(0, "auto"));
}
@Override
public float[] getKnobColor()
{
if(getValue() == 0)
return new float[]{0, 0.5F, 1};
return super.getKnobColor();
}
public void resetTimer()
{
tickTimer = 0;
}
public void updateTimer()
{
tickTimer += 50;
}
public boolean isTimeToAttack()
{
if(getValue() > 0)
return tickTimer >= 1000 / getValue();
return WurstClient.MC.player.getAttackCooldownProgress(0) >= 1;
}
}

View File

@ -41,7 +41,7 @@ public abstract class Setting
return WurstClient.INSTANCE.translate(description);
}
public String getWrappedDescription(int width)
public final String getWrappedDescription(int width)
{
List<StringVisitable> lines = WurstClient.MC.textRenderer
.getTextHandler().wrapLines(getDescription(), width, Style.EMPTY);

View File

@ -7,6 +7,7 @@
*/
package net.wurstclient.settings;
import java.text.DecimalFormat;
import java.util.LinkedHashSet;
import com.google.gson.JsonElement;
@ -132,9 +133,20 @@ public class SliderSetting extends Setting implements SliderLock
return increment;
}
public final float getPercentage()
public final double getPercentage()
{
return (float)((getValue() - minimum) / getRange());
return (getValue() - minimum) / getRange();
}
public float[] getKnobColor()
{
float f = (float)(2 * getPercentage());
float red = MathUtils.clamp(f, 0, 1);
float green = MathUtils.clamp(2 - f, 0, 1);
float blue = 0;
return new float[]{red, green, blue};
}
public final boolean isLocked()
@ -252,18 +264,45 @@ public class SliderSetting extends Setting implements SliderLock
public static interface ValueDisplay
{
public static final ValueDisplay INTEGER = v -> (int)v + "";
public static final ValueDisplay DECIMAL =
v -> Math.round(v * 1e6) / 1e6 + "";
public static final ValueDisplay INTEGER = v -> (int)v + "";
public static final ValueDisplay PERCENTAGE =
v -> (int)(Math.round(v * 1e8) / 1e6) + "%";
public static final ValueDisplay DEGREES = v -> (int)v + "\u00b0";
public static final ValueDisplay LOGARITHMIC = new ValueDisplay()
{
private static final DecimalFormat FORMAT =
new DecimalFormat("#,###");
@Override
public String getValueString(double v)
{
return FORMAT.format(Math.pow(10, v));
}
};
public static final ValueDisplay DEGREES = INTEGER.withSuffix("\u00b0");
public static final ValueDisplay NONE = v -> "";
public String getValueString(double value);
public default ValueDisplay withLabel(double value, String label)
{
return v -> v == value ? label : getValueString(v);
}
public default ValueDisplay withPrefix(String prefix)
{
return v -> prefix + getValueString(v);
}
public default ValueDisplay withSuffix(String suffix)
{
return v -> getValueString(v) + suffix;
}
}
}

View File

@ -0,0 +1,65 @@
/*
* Copyright (c) 2014-2022 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 java.util.Objects;
import java.util.stream.Stream;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.chunk.WorldChunk;
import net.wurstclient.WurstClient;
public enum ChunkUtils
{
;
private static final MinecraftClient MC = WurstClient.MC;
public static Stream<BlockEntity> getLoadedBlockEntities()
{
return getLoadedChunks()
.flatMap(chunk -> chunk.getBlockEntities().values().stream());
}
public static Stream<WorldChunk> getLoadedChunks()
{
int radius = Math.max(2, MC.options.getViewDistance()) + 3;
int diameter = radius * 2 + 1;
ChunkPos center = MC.player.getChunkPos();
ChunkPos min = new ChunkPos(center.x - radius, center.z - radius);
ChunkPos max = new ChunkPos(center.x + radius, center.z + radius);
Stream<WorldChunk> stream = Stream.<ChunkPos> iterate(min, pos -> {
int x = pos.x;
int z = pos.z;
x++;
if(x > max.x)
{
x = min.x;
z++;
}
if(z > max.z)
throw new IllegalStateException("Stream limit didn't work.");
return new ChunkPos(x, z);
}).limit(diameter * diameter)
.filter(c -> MC.world.isChunkLoaded(c.x, c.z))
.map(c -> MC.world.getChunk(c.x, c.z)).filter(Objects::nonNull);
return stream;
}
}

View File

@ -51,6 +51,7 @@
"description.wurst.setting.invwalk.allow_clickgui": "Ermöglicht dir, herumzulaufen während Wursts ClickGUI offen ist.",
"description.wurst.setting.invwalk.allow_other": "Ermöglicht dir, herumzulaufen während andere In-Game-Fenster offen sind (z.B. Kisten, Pferde, Dorfbewohner-Handel), es sei denn das Fenster hat ein Textfeld.",
"description.wurst.hack.snowshoe": "Ermöglicht dir, auf Pulverschnee zu laufen.",
"description.wurst.setting.generic.attack_speed": "Angriffsgeschwindigkeit in Klicks pro Sekunde.\n0 = Geschwindigkeit passt sich dynamisch an deine Abklingzeit an.",
"description.wurst.altmanager.premium": "Dieser Alt hat ein Passwort und kann allen Servern beitreten.",
"description.wurst.altmanager.cracked": "Dieser Alt hat kein Passwort und funktioniert nur auf cracked Servern.",
"description.wurst.altmanager.failed": "Als du das letzte Mal versucht hast, dich mit diesem Alt einzuloggen, hat es nicht funktioniert.",

View File

@ -152,6 +152,7 @@
"description.wurst.hack.truesight": "Allows you to see invisible entities.",
"description.wurst.hack.tunneller": "Automatically digs a tunnel.\n\n§c§lWARNING:§r Although this bot will try to avoid lava and other dangers, there is no guarantee that it won't die. Only send it out with gear that you don't mind losing.",
"description.wurst.hack.x-ray": "Allows you to see ores through walls.",
"description.wurst.setting.generic.attack_speed": "Attack speed in clicks per second.\n0 = dynamically adjusts the speed to match your attack cooldown.",
"description.wurst.altmanager.premium": "This alt has a password and can join all servers.",
"description.wurst.altmanager.cracked": "This alt has no password and will only work on cracked servers.",
"description.wurst.altmanager.failed": "Last time you tried to log in with this alt, it didn't work.",

View File

@ -0,0 +1,166 @@
{
"description.wurst.hack.anchoraura": "Plaseaza automat (optional), incarca, si detoneaza respawn anchoruri pentru a ucide entitati din jurul tau.",
"description.wurst.hack.antiafk": "Umbla anapoda pentru a evita pluginuri anti-afk.\nNeceseita un spatiu liber de cel putin 3x3.",
"description.wurst.hack.antiblind": "Previne efectul de orbire.\nIncompatibl cu OptiFine.",
"description.wurst.hack.anticactus": "Esti protejat de damage-ul dat de cactusi.",
"description.wurst.hack.antiknockback": "Te previne din a fi impins de catre playeri sau mobi.",
"description.wurst.hack.antispam": "Opreste chat spam-ul prin adaugarea unui raspuns la mesaje repetate.",
"description.wurst.hack.antiwaterpush": "Te previne din a fi impins de catre apa.",
"description.wurst.hack.antiwobble": "Opreste efectul wobble cauzat de greata si portale.",
"description.wurst.hack.arrowdmg": "O crestere semnificativa de damage cu arcul, dar consuma mult hunger si scade din acuratete.\n\nNu functioneaza cu arbalete si nu pare sa functioneze pe serverele Paper.",
"description.wurst.setting.arrowdmg.packets": "Cantitatea de pachete de retea de trimis.\nMai multe pachete = mai mult damage.",
"description.wurst.setting.arrowdmg.trident_yeet_mode": "Odata activat, tridentele zboara mult mai departe. Nu pare sa afecteze damage-ul sau Riptide-ul.\n\n§c§lATENTIE:§r Poti sa iti pierzi tridentul cu usurinta prin activarea acestei optiuni.",
"description.wurst.hack.autoarmor": "Armura ta este administrata instant.",
"description.wurst.hack.autobuild": "Construieste lucruri automat.\nPlaseaza un singur block pentru a incepe.",
"description.wurst.hack.autodrop": "Arunca automat itemele nedorite.",
"description.wurst.hack.autoleave": "Paraseste automat serverul atunci cand ajungi la viata scazuta.",
"description.wurst.hack.autoeat": "Mananca automat atunci cand este nevoie.",
"description.wurst.setting.autoeat.target_hunger": "Incearca sa iti pastreze hunger bar-ul la nivelul ales sau chiar unul mai ridicat , daca si numai daca prin acest proces nu se consuma din hunger.",
"description.wurst.setting.autoeat.min_hunger": "Pastreaza hunger bar-ul la nivelul ales sau chiar unul mai ridicat, chiar daca consunsuma puncte de hunger.\n6.5 - Nu poate cauza risipa cu.\n10.0 - Ignora complet risipa si umple hunger bar-ul la maxim.",
"description.wurst.setting.autoeat.injured_hunger": "Umple hunger bar-ul cel putin pana la nivelul ales, chiar daca consunsuma puncte de hunger.\n10.0 - cel mai rapid healing\n9.0 - cel mai incet healing\n<9.0 - fara healing\n<3.5 - fara alergare",
"description.wurst.setting.autoeat.injury_threshold": "Previne micile rani din a-ti risipi toata mancarea. AutoEat te va considera ranit numai si numai daca ai pierdut acest numar de inimi.",
"description.wurst.setting.autoeat.take_items_from": "Unde ar trebui sa caute AutoEat-ul mancare.",
"description.wurst.setting.autoeat.eat_while_walking": "Vei fi incetinit, nu este recomandat.",
"description.wurst.setting.autoeat.allow_hunger": "Efectul de hunger al rotten flesh-ului nu se aplica.\nEste bun de mancat si poate servi drept mancare de urgenta.",
"description.wurst.setting.autoeat.allow_poison": "Mancarurile cu otrava isi fac efectul cu timpul.\nNu este recomandat.",
"description.wurst.setting.autoeat.allow_chorus": "Consumarea unui Chorus Fruit de teleporteaza la intamplare.\nNu este recomandat.",
"description.wurst.hack.autofarm": "Recolteaza si planteaza automat.\nFunctioneaza cu grau, morcovi, cartofi, sfecla, dovleci, pepeni, cactusi, trestie de zahar, varec, bambus, nether wart, si boabe de cacao.",
"description.wurst.hack.autofish": "Pescuieste automat folosindu-se de cea mai buna undita a ta. Daca pescuind gaseste o undita mai buna, o va folosi pe aceea.",
"description.wurst.hack.automine": "Strica automat block-ul la care te uiti.",
"description.wurst.hack.autopotion": "Arunca splash potions of instant health atunci cand esti pe putine inimi.",
"description.wurst.hack.autoreconnect": "Reconecteaza-te automat atunci cand esti deconectat de pe server.",
"description.wurst.hack.autorespawn": "Respawneaza-te automat atunci cand mori.",
"description.wurst.hack.autosign": "Scrie instant ce vrei pe fiecare semn pe care il pui. Odata activat, poti scrie normal pe primul semn pentru a specifica ce vrei sa scrii pe toate celelalte.",
"description.wurst.hack.autosoup": "Mananca automat supa atunci cand esti pe putine inimi.\n\n§lNota:§r Acest hack ignora hunger-ul si presupune ca odata cu consumarea supei te vei regenera. Daca serverul pe care esti nu este configurat sa faca asta, foloseste in schimb AutoEat.",
"description.wurst.hack.autosprint": "Alergi automat.",
"description.wurst.hack.autosteal": "Fura automat tot ce se afla in chesturi sau shulkere pe care le deschizi.",
"description.wurst.hack.autoswim": "Activeaza animatia de inot automat la contact cu apa.",
"description.wurst.hack.autoswitch": "Schimba mereu obiectul pe care il ai in mana.\n\n§lProTip:§r Foloseste acest hack impreuna cu BuildRandom in timp ce ai o gramada de lana colorata si alte block-uri colorate in hotbar.",
"description.wurst.hack.autosword": "Foloseste automat cea mai buna arma de la tine din hotbar pentru a ataca entitati.\nTip: Functioneaza cu Killaura.",
"description.wurst.hack.autotool": "Echipeaza automat cea mai buna unealta pentru lucrul pe care incerci sa-l spargi.",
"description.wurst.hack.autototem": "Muta automat totems of undying in off-hand.",
"description.wurst.hack.autowalk": "Mergi automat.",
"description.wurst.hack.basefinder": "Gaseste baze uitandu-se dupa block-uri plasate de playeri.\nBlocurile agsite for fi conturate in culoarea selectata.\nBun de gasit baze pe factions.",
"description.wurst.hack.blink": "Suspenda orice update de miscare atunci cand este activat.",
"description.wurst.hack.boatfly": "Iti permite sa zbori in barci.",
"description.wurst.hack.bonemealaura": "Foloseste automat bone meal pe unele plante.\nBifeaza pentru a specifica plantele.",
"description.wurst.hack.bowaimbot": "Tinteste automat arcul sau arbaleta ta.",
"description.wurst.hack.buildrandom": "Pune block-uri la intamplare in jurul tau.",
"description.wurst.hack.bunnyhop": "Sari automat.",
"description.wurst.hack.cameranoclip": "Permite camerei 3rd person sa vada prin pereti.",
"description.wurst.hack.cavefinder": "Te ajuta sa gasesti pesteri conturandu-le in culoarea aleasa.",
"description.wurst.hack.chattranslator": "Traduce mesajele de pe chat folosind Google Translate.",
"description.wurst.hack.chestesp": "Contureaza chesturile din apropiere.",
"description.wurst.hack.clickaura": "Ataca automat cea mai apropiata entitate atunci cand dai click.\n\n§c§lATENTIE:§r ClickAura este mai suspicios decat Killaura si este mai usor de detectat de catre anumite plugin-uri. Este recomandat in schimb sa folosesti Killaura sau TriggerBot.",
"description.wurst.hack.clickgui": "ClickGUI bazat pe windows.",
"description.wurst.hack.crashchest": "Genereaza un chest care da ban playerilor daca au prea multe copii in inventar. §c§lATENTIE:§r §cLucrul acesta nu poate fi schimbat. Foloseste cu grija!§r\n\nIf copiile sunt plasate intr-un chest, oricine il deschide isi va lua kick de pe server (doar o data).",
"description.wurst.hack.creativeflight": "Iti permite sa zbori ca si in Creativ.\n\n§c§lATENTIE:§r Iti vei lua fall damage daca nu folosesti NoFall.",
"description.wurst.hack.criticals": "Iti schimba toate hit-urile in criticale.",
"description.wurst.hack.crystalaura": "Plaseaza automat (optional) si detoneaza end crystal-uri din jurul tau pentru a ucide entitati.",
"description.wurst.hack.derp": "Iti face capul sa se roteasca in toate partile.\nVizibil numai altor jucatori.",
"description.wurst.hack.dolphin": "Te face sa te ridici mereu la suprafata in apa.\n(ca si un delfin)",
"description.wurst.hack.excavator": "Distruge automat block-urile din zona selectata.",
"description.wurst.hack.extraelytra": "Face Elytra mai usor de utilizat.",
"description.wurst.hack.fancychat": "Scapa de fontul ASCII in mesajele din chat si foloseste un font unicode mai elegant. Poate fi folosit pentru a spune cuvinte cenzurate pe unele servere.\nNu functioneaza pe serverele care blocheaza fontul unicode.",
"description.wurst.hack.fastbreak": "Te ajuta sa strici block-uri mai rapid.\nTip: Functioneaza cu Nuker.",
"description.wurst.hack.fastladder": "Te ajuta sa urci pe ladder mai repede.",
"description.wurst.hack.fastplace": "Te ajuta sa pui block-uri de 5x mai repede.\nTip: Acest hack poate imbunatatii alte hackuri precum AutoBuild.",
"description.wurst.hack.feedaura": "Hraneste automat animalele din jurul tau.",
"description.wurst.hack.fightbot": "Un bot care se plimba si omoara totul.\nBun pentru MobArena.",
"description.wurst.hack.fish": "Dezactiveaza gravitatea din apa si poti inota ca un pestisor.",
"description.wurst.hack.flight": "Iti permite sa zbori.\n\n§c§lATENTIE:§r Iti vei lua fall damage daca nu folosesti NoFall.",
"description.wurst.hack.follow": "Un bot care urmareste cea mai apropiata entitate.\nFoarte enervant.\n\nFoloseste .follow pentru a urmari o entitate anume.",
"description.wurst.hack.forceop": "Sparge parolele de AuthMe.\nPoate fi folosit pentru a face rost de OP.",
"description.wurst.hack.freecam": "Iti permite sa misti camera fara sa iti misti caracterul.",
"description.wurst.hack.fullbright": "Iti permite sa vezi in intuneric.",
"description.wurst.hack.glide": "Te face sa cazi lent.\n\n§c§lATENTIE:§r Iti vei lua fall damage daca nu folosesti NoFall.",
"description.wurst.hack.handnoclip": "Iti permite sa ajungi la anumite block-uri prin pereti.",
"description.wurst.hack.headroll": "Te face sa dai din cap mereu.\nVizibil numai pentru alti playeri.",
"description.wurst.hack.healthtags": "Arata cata viata au playerii./nEste vizibil in nametag.",
"description.wurst.hack.highjump": "Iti permite sa sari mai sus.\n\n§c§lATENTIE:§r Iti vei lua fall damage daca nu folosesti NoFall.",
"description.wurst.hack.infinichat": "Scoate limita de 256 de caractere din chat.\nFolositor pt comenzile lungi care modifica datele NBT.\n\n§6§lNOTICE:§r Nu e recomandat pentru a vorbi cu lumea. Majoritatea serverelor vor taia oricum mesajele mai lungi de 256 de caractere.",
"description.wurst.hack.instantbunker": "Construieste un mic buncar in jurul tau. Necesita 57 de block-uri.",
"description.wurst.hack.invwalk": "Iti permite sa te misti cu inventarul deschis.",
"description.wurst.setting.invwalk.allow_clickgui": "Iti permite sa te misti in timp ce GUI-ul de la Wurst este deschis.",
"description.wurst.setting.invwalk.allow_other": "Iti permite sa te misti in timp ce alte ferestre sunt deschise (ex: chest, cal, trade cu villagerii), mai putin daca fereastra are un text box.",
"description.wurst.hack.itemesp": "Contureaza itemele din apropiere.",
"description.wurst.hack.itemgenerator": "Genereaza iteme la intamplare si le arunca pe jos.\n§oDoar Creativ.§r",
"description.wurst.hack.jesus": "Iti permite sa umblii pe apa.\nIsus Hristos a folosit acest hack acum ~2000 de ani.",
"description.wurst.hack.jetpack": "Iti permite sa zbori de parca ai un jetpack.\n\n§c§lATENTIE:§r Iti vei lua fall damage daca nu folosesti NoFall.",
"description.wurst.hack.kaboom": "Strica block-urile din jurul tau ca si o explozie.\nPoate fi mai rapid decat Nuker daca serverul nu are NoCheat+. Functioneaza cel mai bine cu unelte bune si blockuri slabe.\nNota: Aceasta nu este o explozie adevarata.",
"description.wurst.hack.killauralegit": "Killaura mai incet dar mai greu de detectat.\nNu este necesar pe serverele normale cu NoCheat+!",
"description.wurst.hack.killaura": "Ataca automat entitatile din jurul tau.",
"description.wurst.hack.killpotion": "Genereaza o potiune care poate ucide orice, inclusiv playerii in Creativ. Nu functioneaza pe mortaciuni, fiindca mortaciunile-s deja moarte.\n\nNecesita Creativ.",
"description.wurst.hack.liquids": "Iti permite sa pui block-uri in lichide.",
"description.wurst.hack.lsd": "Cauzeaza halucinatii.",
"description.wurst.hack.masstpa": "Trimite TPA request la toti playerii.\nSe opreste atunci cand cineva accepta.",
"description.wurst.hack.mileycyrus": "Faci twerk.",
"description.wurst.hack.mobesp": "Contureaza mobii din apropiere.",
"description.wurst.hack.mobspawnesp": "Contureaza zonele in care mobii se pot spawna.\n§egalben§r - mobii se pot spawna noaptea\n§crosu§r - mobii se pot spawna mereu",
"description.wurst.hack.multiaura": "Killaura care ataca multiple entitati deodata.",
"description.wurst.hack.nameprotect": "Ascunde toate numele jucatorilor.",
"description.wurst.hack.nametags": "Schimba marimea name tagurilor pentru a le putea vedea de la orice distanta. Poti vedea name tagurile jucatorilor pe crouch.",
"description.wurst.hack.navigator": "Un GUI care iti invata preferintele cu timpul.",
"description.wurst.hack.nobackground": "Scapa de background-ul intunecat din inventar.",
"description.wurst.hack.noclip": "Iti permite sa te misti liber prin block-uri.\nUn block (ex nisip) trebuie sa cada pe capul tau pentru a activa hackul.\n\n§c§lATENTIE:§r Vei primi damage cand te misti prin block-uri!",
"description.wurst.hack.nocomcrash": "Cauzeaza lag si da crash serverele folosind exploitul Nocom.\nNu functioneaza pe serverele Paper. Testat si functional pe Vanilla, Spigot, si Fabric. Poate fi oprit de unele AntiCheaturi.",
"description.wurst.hack.nofall": "Te protejeaza de fall damage.",
"description.wurst.hack.nofireoverlay": "Opreste overlayul focului.\n\n§c§lATENTIE:§r Asta te poate face sa arzi pana mori fara sa iti dai seama.",
"description.wurst.hack.nohurtcam": "Opreste efectul de tremurat atunci cand iti iei damage.",
"description.wurst.hack.nooverlay": "Opreste overlayurile cauzate de apa si lava.",
"description.wurst.hack.nopumpkin": "Opreste overlayul cand porti un dovleac pe cap.",
"description.wurst.hack.noslowdown": "Opreste efectul de incetinire al mierii, soul sandului si al folosirii de iteme.",
"description.wurst.hack.noweather": "Iti permite sa schimbi timpul, vremea si starea lunii.",
"description.wurst.hack.noweb": "Te previne din a te intepeni in panze de paianjen.",
"description.wurst.hack.nuker": "Strica automat blocurile din jurul tau.",
"description.wurst.hack.nukerlegit": "Nuker mai incet care trece de pluginurile AntiCheat.\nNu este necesar pe serverele cu NoCheat+.",
"description.wurst.hack.openwateresp": "Arata daca pescuiesti in 'apa libera' si contureaza o cutie destinata calcularii apei.",
"description.wurst.hack.overlay": "Activeaza animatia Nuker atunci cand e pornit.",
"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.",
"description.wurst.hack.protect": "Un bot care urmareste cea mai apropiata entitate si o protejeaza de alte entitati.\nFoloseste .protect pentru a te referi la o entitate anume si nu cea mai apropiata.",
"description.wurst.hack.radar": "Arata locatia entitatilor din apropiere.\n§crosu§r - jucatori\n§6portocaliu§r - monstrii\n§averde§r - animale\n§7gri§r - altele",
"description.wurst.hack.rainbowui": "§cF§aa§9c§ce §at§9o§ct§au§9l §cc§ao§9l§co§ar§9a§ct§a.",
"description.wurst.hack.reach": "Iti permite sa ajungi mai departe.",
"description.wurst.hack.remoteview": "Iti permite sa vezi lumea drept alta persoana.\nFoloseste comanda .rv pentru a te referi la o entitate anume.",
"description.wurst.hack.safewalk": "Te previne din a cadea de pe margini.",
"description.wurst.hack.scaffoldwalk": "Plaseaza block-uri automat sub tine.",
"description.wurst.hack.search": "Te ajuta sa gasesti block-uri specifice, conturandu-le in culoarea aleasa.",
"description.wurst.hack.servercrasher": "Genereaza un item care poate da crash la serverele de 1.15.x.\n§oFunctioneaza doar in Creativ.§r",
"description.wurst.hack.skinderp": "Porneste si opreste la intamplare parti diferite din skinul tau.",
"description.wurst.hack.sneak": "Te pune automat pe sneak.",
"description.wurst.hack.snowshoe": "Iti permite sa umbli pe powder snow.",
"description.wurst.hack.speedhack": "Iti permite sa fugi de ~2.5x mai repede decat atunci cand fugi si sari.\n\n§6§lATENTIE:§r Si-a luat patch in NoCheat+ versiunea 3.13.2. Va functiona numai in instante mai vechi de NoCheat+.\nScrie §l/ncp version§r pentru a verifica verisunea de NoCheat+ a unui server.",
"description.wurst.hack.speednuker": "Versiune mai rapida de Nuker dar care nu poate NoCheat+.",
"description.wurst.hack.spider": "Iti permite sa te urci pe pereti ca si un paianjen.",
"description.wurst.hack.step": "Iti permite sa calci peste block-uri intregi./n(ca si cum a-i calca pe stairs).",
"description.wurst.hack.throw": "Foloseste un item de multiple ori. Poate fi folosit pentru a arunca bulgari sau oua, spawna mobi, pune minecarturi, etc. in cantitati foarte mari.\n\nLucrul acesta poate cauza mult lag si chiar sa dea crash la un server.",
"description.wurst.hack.tillaura": "Transforma automat dirtul in teren agricol.\nA nu fi confundat cu Killaura.",
"description.wurst.hack.timer": "Schimba viteza la aproape tot.",
"description.wurst.hack.tired": "Te face sa arati ca si Alexander in 2015.\nVizibil numai pentru alti jucatori.",
"description.wurst.hack.toomanyhax": "Blocheaza orice feature nedorit.\nIti permite sa iti alegi hackurile si sa fi precaut pentru a nu-ti lua ban.\nPentru cei care vor \"doar sa se distreze un pic\".\n\nFoloseste §6.toomanyhax§r pentu a alege ce optiuni sa blochezi.\nScrie §6.help toomanyhax§r pentru mai multe informatii.",
"description.wurst.hack.tp-aura": "Ataca automat cea mai apropiata entitate valida, teleportandu-se in jurul ei.",
"description.wurst.hack.trajectories": "Prezice traiectoria sagetilor si a itemelor aruncate.",
"description.wurst.hack.treebot": "Un bot experimental care se plimba si taie copaci.\nMomentan este limitat copacilor de dimensiune mica.",
"description.wurst.hack.triggerbot": "Ataca automat entitatea la care te uiti.",
"description.wurst.hack.trollpotion": "Genereaza o potiune cu multe efecte enervante.",
"description.wurst.hack.truesight": "Iti permite sa vezi entitati invizibile.",
"description.wurst.hack.tunneller": "Sapa automat un tunel.\n\n§c§lATENTIE:§r Desi acest bot va incerca sa nu moara de la fall damage sau lava, nu este garantat ca nu va muri. Foloseste-l numai cu echipament pe care esti dispus sa il pierzi.",
"description.wurst.hack.x-ray": "Iti permite sa vezi minereuri prin pereti.",
"description.wurst.altmanager.premium": "Acest cont alternativ are o parola si poate intra pe servere.",
"description.wurst.altmanager.cracked": "Acest cont alternativ nu are o parola si nu poate intra decat pe servere 'cracked'.",
"description.wurst.altmanager.failed": "Ultima data cand ai incercat sa te loghezi cu acest cont alternativ, nu a functionat.",
"description.wurst.altmanager.checked": "Parola a functionat in trecut.",
"description.wurst.altmanager.unchecked": "Nu ai reusit niciodata sa te logezi cu acest cont alternativ.",
"description.wurst.altmanager.favorite": "Ai marcat acest cont alternativ la favorite.",
"description.wurst.altmanager.window": "Acest buton deschide o alta fereastra.",
"description.wurst.altmanager.window_freeze": "Ar putea sa para de parca jocul nu raspunde atunci cand acea fereastra este deschisa.",
"description.wurst.altmanager.fullscreen": "§cOpreste modul fullscreen!",
"gui.wurst.altmanager.folder_error.title": "Folderul '.Wurst encryption' nu a putut fi creeat!",
"gui.wurst.altmanager.folder_error.message": "Este posibil ca tu sa fi luat accesul instalatiei Wurst de la acest folder.\nAltManager nu poate cripta sau decripta conturi alternative fara acesta.\nInca poti folosi AltManager, dar orice cont alternativ pe care il creezi acum nu va fi salvat.\n\nIntreaga eroare este aceasta:\n%s"
}

View File

@ -28,7 +28,7 @@
"depends": {
"fabricloader": ">=0.12.12",
"fabric": ">=0.42.4",
"fabric": ">=0.42.4 <0.51.0",
"minecraft": "~1.18-beta.2 <1.18.2",
"java": ">=17"
},