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

Merge v7.28 into 1.18.2

This commit is contained in:
Alexander01998 2023-06-05 12:22:40 +02:00
parent c031f9c418
commit d4393ae66a
31 changed files with 1067 additions and 154 deletions

View File

@ -1,5 +1,5 @@
plugins {
id 'fabric-loom' version '0.12-SNAPSHOT'
id 'fabric-loom' version '1.0-SNAPSHOT'
id 'maven-publish'
}

View File

@ -5,14 +5,14 @@ org.gradle.jvmargs=-Xmx1G
# check these at https://fabricmc.net/develop/ and
# https://www.curseforge.com/minecraft/mc-mods/fabric-api
minecraft_version=1.18.2
yarn_mappings=1.18.2+build.3
loader_version=0.14.8
yarn_mappings=1.18.2+build.4
loader_version=0.14.21
#Fabric api
fabric_version=0.57.0+1.18.2
fabric_version=0.76.0+1.18.2
# Mod Properties
mod_version = v7.27.3-MC1.18.2
mod_version = v7.28-MC1.18.2
maven_group = net.wurstclient
archives_base_name = Wurst-Client

Binary file not shown.

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStorePath=wrapper/dists

View File

@ -56,7 +56,7 @@ public enum WurstClient
public static final MinecraftClient MC = MinecraftClient.getInstance();
public static final IMinecraftClient IMC = (IMinecraftClient)MC;
public static final String VERSION = "7.27.3";
public static final String VERSION = "7.28";
public static final String MC_VERSION = "1.18.2";
private WurstAnalytics analytics;

View File

@ -119,12 +119,14 @@ public final class HackList implements UpdateListener
public final NameProtectHack nameProtectHack = new NameProtectHack();
public final NameTagsHack nameTagsHack = new NameTagsHack();
public final NavigatorHack navigatorHack = new NavigatorHack();
public final NewChunksHack newChunksHack = new NewChunksHack();
public final NoBackgroundHack noBackgroundHack = new NoBackgroundHack();
public final NoClipHack noClipHack = new NoClipHack();
public final NocomCrashHack nocomCrashHack = new NocomCrashHack();
public final NoFallHack noFallHack = new NoFallHack();
public final NoFireOverlayHack noFireOverlayHack = new NoFireOverlayHack();
public final NoHurtcamHack noHurtcamHack = new NoHurtcamHack();
public final NoLevitationHack noLevitationHack = new NoLevitationHack();
public final NoOverlayHack noOverlayHack = new NoOverlayHack();
public final NoPumpkinHack noPumpkinHack = new NoPumpkinHack();
public final NoSlowdownHack noSlowdownHack = new NoSlowdownHack();

View File

@ -7,19 +7,7 @@
*/
package net.wurstclient.hacks;
import java.awt.Color;
import org.lwjgl.opengl.GL11;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.enchantment.Enchantments;
@ -29,23 +17,17 @@ import net.minecraft.item.FishingRodItem;
import net.minecraft.item.ItemStack;
import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket;
import net.minecraft.sound.SoundEvents;
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.Category;
import net.wurstclient.SearchTags;
import net.wurstclient.events.PacketInputListener;
import net.wurstclient.events.RenderListener;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.Hack;
import net.wurstclient.hacks.autofish.AutoFishDebugDraw;
import net.wurstclient.mixinterface.IFishingBobberEntity;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.ColorSetting;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.settings.SliderSetting.ValueDisplay;
import net.wurstclient.util.ChatUtils;
import net.wurstclient.util.RenderUtils;
@SearchTags({"FishBot", "auto fish", "fish bot", "fishing"})
public final class AutoFishHack extends Hack
@ -56,22 +38,14 @@ public final class AutoFishHack extends Hack
+ "Increase your range if bites are not being detected, decrease it if other people's bites are being detected as yours.",
1.5, 0.25, 8, 0.25, ValueDisplay.DECIMAL);
private CheckboxSetting debugDraw = new CheckboxSetting("Debug draw",
"Shows where bites are occurring and where they will be detected. Useful for optimizing your 'Valid range' setting.",
false);
private final ColorSetting ddColor = new ColorSetting("DD color",
"Color of the debug draw, if enabled.", Color.RED);
private int bestRodValue;
private int bestRodSlot;
private int castRodTimer;
private int reelInTimer;
private int scheduledWindowClick;
private Vec3d lastSoundPos;
private Box validRangeBox;
private final AutoFishDebugDraw debugDraw = new AutoFishDebugDraw();
private boolean wasOpenWater;
@ -81,8 +55,7 @@ public final class AutoFishHack extends Hack
setCategory(Category.OTHER);
addSetting(validRange);
addSetting(debugDraw);
addSetting(ddColor);
debugDraw.getSettings().forEach(this::addSetting);
}
@Override
@ -93,7 +66,7 @@ public final class AutoFishHack extends Hack
castRodTimer = 0;
reelInTimer = -1;
scheduledWindowClick = -1;
lastSoundPos = null;
debugDraw.reset();
wasOpenWater = true;
EVENTS.add(UpdateListener.class, this);
@ -112,7 +85,7 @@ public final class AutoFishHack extends Hack
@Override
public void onUpdate()
{
updateDebugDraw();
debugDraw.updateValidRange(validRange.getValue());
if(reelInTimer > 0)
reelInTimer--;
@ -124,6 +97,7 @@ public final class AutoFishHack extends Hack
{
IMC.getInteractionManager()
.windowClick_PICKUP(scheduledWindowClick);
scheduledWindowClick = -1;
castRodTimer = 15;
return;
}
@ -167,14 +141,6 @@ public final class AutoFishHack extends Hack
}
}
private void updateDebugDraw()
{
if(debugDraw.isChecked())
validRangeBox = new Box(-validRange.getValue(), -1 / 16.0,
-validRange.getValue(), validRange.getValue(), 1 / 16.0,
validRange.getValue());
}
private void updateBestRod()
{
PlayerInventory inventory = MC.player.getInventory();
@ -262,8 +228,7 @@ public final class AutoFishHack extends Hack
if(!SoundEvents.ENTITY_FISHING_BOBBER_SPLASH.equals(sound.getSound()))
return;
if(debugDraw.isChecked())
lastSoundPos = new Vec3d(sound.getX(), sound.getY(), sound.getZ());
debugDraw.updateSoundPos(sound);
// check position
FishingBobberEntity bobber = player.fishHook;
@ -289,6 +254,12 @@ public final class AutoFishHack extends Hack
wasOpenWater = isOpenWater;
}
private boolean isInOpenWater(FishingBobberEntity bobber)
{
return ((IFishingBobberEntity)bobber)
.checkOpenWaterAround(bobber.getBlockPos());
}
private void rightClick()
{
// check held item
@ -303,79 +274,6 @@ public final class AutoFishHack extends Hack
@Override
public void onRender(MatrixStack matrixStack, float partialTicks)
{
if(!debugDraw.isChecked())
return;
// GL settings
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glEnable(GL11.GL_LINE_SMOOTH);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_DEPTH_TEST);
matrixStack.push();
RenderUtils.applyRegionalRenderOffset(matrixStack);
BlockPos camPos = RenderUtils.getCameraBlockPos();
int regionX = (camPos.getX() >> 9) * 512;
int regionZ = (camPos.getZ() >> 9) * 512;
FishingBobberEntity bobber = MC.player.fishHook;
if(bobber != null)
drawValidRange(matrixStack, bobber, regionX, regionZ);
drawLastBite(matrixStack, regionX, regionZ);
matrixStack.pop();
// GL resets
RenderSystem.setShaderColor(1, 1, 1, 1);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDisable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_LINE_SMOOTH);
}
private void drawValidRange(MatrixStack matrixStack,
FishingBobberEntity bobber, int regionX, int regionZ)
{
matrixStack.push();
matrixStack.translate(bobber.getX() - regionX, bobber.getY(),
bobber.getZ() - regionZ);
float[] colorF = ddColor.getColorF();
RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F);
RenderUtils.drawOutlinedBox(validRangeBox, matrixStack);
matrixStack.pop();
}
private void drawLastBite(MatrixStack matrixStack, int regionX, int regionZ)
{
Matrix4f matrix = matrixStack.peek().getPositionMatrix();
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
RenderSystem.setShader(GameRenderer::getPositionShader);
if(lastSoundPos != null)
{
matrixStack.push();
matrixStack.translate(lastSoundPos.x - regionX, lastSoundPos.y,
lastSoundPos.z - regionZ);
float[] colorF = ddColor.getColorF();
RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F);
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
VertexFormats.POSITION);
bufferBuilder.vertex(matrix, (float)-0.125, 0, (float)-0.125)
.next();
bufferBuilder.vertex(matrix, (float)0.125, 0, (float)0.125).next();
bufferBuilder.vertex(matrix, (float)0.125, 0, (float)-0.125).next();
bufferBuilder.vertex(matrix, (float)-0.125, 0, (float)0.125).next();
bufferBuilder.end();
BufferRenderer.draw(bufferBuilder);
matrixStack.pop();
}
}
private boolean isInOpenWater(FishingBobberEntity bobber)
{
return ((IFishingBobberEntity)bobber)
.checkOpenWaterAround(bobber.getBlockPos());
debugDraw.render(matrixStack, partialTicks);
}
}

View File

@ -175,4 +175,6 @@ public final class FullbrightHack extends Hack implements UpdateListener
return name;
}
}
// See ClientPlayerEntityMixin.hasStatusEffect()
}

View File

@ -0,0 +1,259 @@
/*
* 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;
import java.awt.Color;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.fluid.FluidState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.chunk.WorldChunk;
import net.wurstclient.Category;
import net.wurstclient.events.RenderListener;
import net.wurstclient.events.UpdateListener;
import net.wurstclient.hack.Hack;
import net.wurstclient.hacks.newchunks.NewChunksChunkRenderer;
import net.wurstclient.hacks.newchunks.NewChunksReasonsRenderer;
import net.wurstclient.hacks.newchunks.NewChunksRenderer;
import net.wurstclient.hacks.newchunks.NewChunksShowSetting;
import net.wurstclient.hacks.newchunks.NewChunksStyleSetting;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.ColorSetting;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.settings.SliderSetting.ValueDisplay;
import net.wurstclient.util.BlockUtils;
import net.wurstclient.util.RenderUtils;
public final class NewChunksHack extends Hack
implements UpdateListener, RenderListener
{
private final NewChunksStyleSetting style = new NewChunksStyleSetting();
private final NewChunksShowSetting show = new NewChunksShowSetting();
private final CheckboxSetting showReasons = new CheckboxSetting(
"Show reasons",
"Highlights the block that caused each chunk to be marked as new/old.",
false);
private final CheckboxSetting showCounter =
new CheckboxSetting("Show counter",
"Shows the number of new/old chunks found so far.", false);
private final SliderSetting altitude =
new SliderSetting("Altitude", 0, -64, 320, 1, ValueDisplay.INTEGER);
private final SliderSetting drawDistance =
new SliderSetting("Draw distance", 32, 8, 64, 1, ValueDisplay.INTEGER);
private final SliderSetting opacity = new SliderSetting("Opacity", 0.75,
0.1, 1, 0.01, ValueDisplay.PERCENTAGE);
private final ColorSetting newChunksColor =
new ColorSetting("New chunks color", Color.RED);
private final ColorSetting oldChunksColor =
new ColorSetting("Old chunks color", Color.BLUE);
private final CheckboxSetting logChunks = new CheckboxSetting("Log chunks",
"Writes to the log file when a new/old chunk is found.", false);
private final Set<ChunkPos> newChunks =
Collections.synchronizedSet(new HashSet<>());
private final Set<ChunkPos> oldChunks =
Collections.synchronizedSet(new HashSet<>());
private final Set<ChunkPos> dontCheckAgain =
Collections.synchronizedSet(new HashSet<>());
private final Set<BlockPos> newChunkReasons =
Collections.synchronizedSet(new HashSet<>());
private final Set<BlockPos> oldChunkReasons =
Collections.synchronizedSet(new HashSet<>());
private final NewChunksRenderer renderer = new NewChunksRenderer(altitude,
opacity, newChunksColor, oldChunksColor);
private final NewChunksReasonsRenderer reasonsRenderer =
new NewChunksReasonsRenderer(drawDistance);
private ChunkPos lastRegion;
public NewChunksHack()
{
super("NewChunks");
setCategory(Category.RENDER);
addSetting(style);
addSetting(show);
addSetting(showReasons);
addSetting(showCounter);
addSetting(altitude);
addSetting(drawDistance);
addSetting(opacity);
addSetting(newChunksColor);
addSetting(oldChunksColor);
addSetting(logChunks);
}
@Override
protected void onEnable()
{
EVENTS.add(UpdateListener.class, this);
EVENTS.add(RenderListener.class, this);
oldChunks.clear();
newChunks.clear();
dontCheckAgain.clear();
oldChunkReasons.clear();
newChunkReasons.clear();
lastRegion = null;
}
@Override
protected void onDisable()
{
EVENTS.remove(UpdateListener.class, this);
EVENTS.remove(RenderListener.class, this);
renderer.closeBuffers();
}
@Override
public String getRenderName()
{
if(!showCounter.isChecked())
return getName();
return String.format("%s [%d/%d]", getName(), newChunks.size(),
oldChunks.size());
}
@Override
public void onUpdate()
{
renderer.closeBuffers();
NewChunksChunkRenderer chunkRenderer =
style.getSelected().getChunkRenderer();
if(show.getSelected().includesNew())
{
BufferBuilder newChunksBuffer =
chunkRenderer.buildBuffer(newChunks, drawDistance.getValueI());
renderer.updateBuffer(0, newChunksBuffer);
if(showReasons.isChecked())
{
BufferBuilder newReasonsBuffer =
reasonsRenderer.buildBuffer(newChunkReasons);
renderer.updateBuffer(1, newReasonsBuffer);
}
}
if(show.getSelected().includesOld())
{
BufferBuilder oldChunksBuffer =
chunkRenderer.buildBuffer(oldChunks, drawDistance.getValueI());
renderer.updateBuffer(2, oldChunksBuffer);
if(showReasons.isChecked())
{
BufferBuilder oldReasonsBuffer =
reasonsRenderer.buildBuffer(oldChunkReasons);
renderer.updateBuffer(3, oldReasonsBuffer);
}
}
}
public void afterLoadChunk(int x, int z)
{
if(!isEnabled())
return;
WorldChunk chunk = MC.world.getChunk(x, z);
new Thread(() -> checkLoadedChunk(chunk), "NewChunks " + chunk.getPos())
.start();
}
private void checkLoadedChunk(WorldChunk chunk)
{
ChunkPos chunkPos = chunk.getPos();
if(newChunks.contains(chunkPos) || oldChunks.contains(chunkPos)
|| dontCheckAgain.contains(chunkPos))
return;
int minX = chunkPos.getStartX();
int minY = chunk.getBottomY();
int minZ = chunkPos.getStartZ();
int maxX = chunkPos.getEndX();
int maxY = chunk.getHighestNonEmptySectionYOffset() + 16;
int maxZ = chunkPos.getEndZ();
for(int x = minX; x <= maxX; x++)
for(int y = minY; y <= maxY; y++)
for(int z = minZ; z <= maxZ; z++)
{
BlockPos pos = new BlockPos(x, y, z);
FluidState fluidState = chunk.getFluidState(pos);
if(fluidState.isEmpty() || fluidState.isStill())
continue;
// Liquid always generates still, the flowing happens later
// through block updates. Therefore any chunk that contains
// flowing liquids from the start should be an old chunk.
oldChunks.add(chunkPos);
oldChunkReasons.add(pos);
if(logChunks.isChecked())
System.out.println("old chunk at " + chunkPos);
return;
}
// If the whole loop ran through without finding anything, make sure it
// never runs again on that chunk, as that would be a huge waste of CPU
// time.
dontCheckAgain.add(chunkPos);
}
public void afterUpdateBlock(BlockPos pos)
{
if(!isEnabled())
return;
// Liquid starts flowing -> probably a new chunk
FluidState fluidState = BlockUtils.getState(pos).getFluidState();
if(fluidState.isEmpty() || fluidState.isStill())
return;
ChunkPos chunkPos = new ChunkPos(pos);
if(newChunks.contains(chunkPos) || oldChunks.contains(chunkPos))
return;
newChunks.add(chunkPos);
newChunkReasons.add(pos);
if(logChunks.isChecked())
System.out.println("new chunk at " + chunkPos);
}
@Override
public void onRender(MatrixStack matrixStack, float partialTicks)
{
BlockPos camPos = RenderUtils.getCameraBlockPos();
int regionX = (camPos.getX() >> 9) * 512;
int regionZ = (camPos.getZ() >> 9) * 512;
ChunkPos region = new ChunkPos(regionX, regionZ);
if(!region.equals(lastRegion))
{
onUpdate();
lastRegion = region;
}
renderer.render(matrixStack, partialTicks);
}
}

View File

@ -0,0 +1,24 @@
/*
* Copyright (C) 2014 - 2020 | Alexander01998 | All rights reserved.
*
* This source code is subject to the terms of the GNU General Public
* License, version 3. If a copy of the GPL was not distributed with this
* file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt
*/
package net.wurstclient.hacks;
import net.wurstclient.Category;
import net.wurstclient.SearchTags;
import net.wurstclient.hack.Hack;
@SearchTags({"no levitation", "levitation", "levitate"})
public final class NoLevitationHack extends Hack
{
public NoLevitationHack()
{
super("NoLevitation");
setCategory(Category.MOVEMENT);
}
// See ClientPlayerEntityMixin.hasStatusEffect()
}

View File

@ -0,0 +1,144 @@
/*
* 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.autofish;
import java.awt.Color;
import java.util.stream.Stream;
import org.lwjgl.opengl.GL11;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.projectile.FishingBobberEntity;
import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket;
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.WurstClient;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.settings.ColorSetting;
import net.wurstclient.settings.Setting;
import net.wurstclient.util.RenderUtils;
public final class AutoFishDebugDraw
{
private final CheckboxSetting debugDraw = new CheckboxSetting("Debug draw",
"Shows where bites are occurring and where they will be detected. Useful for optimizing your 'Valid range' setting.",
false);
private final ColorSetting ddColor = new ColorSetting("DD color",
"Color of the debug draw, if enabled.", Color.RED);
private Vec3d lastSoundPos;
private Box validRangeBox;
public Stream<Setting> getSettings()
{
return Stream.of(debugDraw, ddColor);
}
public void reset()
{
lastSoundPos = null;
validRangeBox = null;
}
public void updateValidRange(double validRange)
{
validRangeBox = new Box(-validRange, -1 / 16.0, -validRange, validRange,
1 / 16.0, validRange);
}
public void updateSoundPos(PlaySoundS2CPacket sound)
{
lastSoundPos = new Vec3d(sound.getX(), sound.getY(), sound.getZ());
}
public void render(MatrixStack matrixStack, float partialTicks)
{
if(!debugDraw.isChecked())
return;
// GL settings
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glEnable(GL11.GL_LINE_SMOOTH);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_DEPTH_TEST);
matrixStack.push();
RenderUtils.applyRegionalRenderOffset(matrixStack);
FishingBobberEntity bobber = WurstClient.MC.player.fishHook;
BlockPos camPos = RenderUtils.getCameraBlockPos();
int regionX = (camPos.getX() >> 9) * 512;
int regionZ = (camPos.getZ() >> 9) * 512;
if(bobber != null && validRangeBox != null)
drawValidRange(matrixStack, bobber, regionX, regionZ);
if(lastSoundPos != null)
drawLastBite(matrixStack, regionX, regionZ);
matrixStack.pop();
// GL resets
RenderSystem.setShaderColor(1, 1, 1, 1);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDisable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_LINE_SMOOTH);
}
private void drawValidRange(MatrixStack matrixStack,
FishingBobberEntity bobber, int regionX, int regionZ)
{
matrixStack.push();
matrixStack.translate(bobber.getX() - regionX, bobber.getY(),
bobber.getZ() - regionZ);
float[] colorF = ddColor.getColorF();
RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F);
RenderUtils.drawOutlinedBox(validRangeBox, matrixStack);
matrixStack.pop();
}
private void drawLastBite(MatrixStack matrixStack, int regionX, int regionZ)
{
Matrix4f matrix = matrixStack.peek().getPositionMatrix();
Tessellator tessellator = RenderSystem.renderThreadTesselator();
BufferBuilder bufferBuilder = tessellator.getBuffer();
RenderSystem.setShader(GameRenderer::getPositionShader);
matrixStack.push();
matrixStack.translate(lastSoundPos.x - regionX, lastSoundPos.y,
lastSoundPos.z - regionZ);
float[] colorF = ddColor.getColorF();
RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F);
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
VertexFormats.POSITION);
bufferBuilder.vertex(matrix, -0.125F, 0, -0.125F).next();
bufferBuilder.vertex(matrix, 0.125F, 0, 0.125F).next();
bufferBuilder.vertex(matrix, 0.125F, 0, -0.125F).next();
bufferBuilder.vertex(matrix, -0.125F, 0, 0.125F).next();
tessellator.draw();
matrixStack.pop();
}
}

View File

@ -0,0 +1,18 @@
/*
* 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.newchunks;
import java.util.Set;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.util.math.ChunkPos;
public interface NewChunksChunkRenderer
{
public BufferBuilder buildBuffer(Set<ChunkPos> chunks, int drawDistance);
}

View File

@ -0,0 +1,72 @@
/*
* 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.newchunks;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.wurstclient.util.RenderUtils;
public final class NewChunksOutlineRenderer implements NewChunksChunkRenderer
{
@Override
public BufferBuilder buildBuffer(Set<ChunkPos> chunks, int drawDistance)
{
Tessellator tessellator = RenderSystem.renderThreadTesselator();
BufferBuilder bufferBuilder = tessellator.getBuffer();
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
VertexFormats.POSITION);
renderChunks(new ArrayList<>(chunks), drawDistance, bufferBuilder);
bufferBuilder.end();
return bufferBuilder;
}
private void renderChunks(List<ChunkPos> chunks, int drawDistance,
BufferBuilder bufferBuilder)
{
BlockPos camPos = RenderUtils.getCameraBlockPos();
ChunkPos camChunkPos = new ChunkPos(camPos);
int regionX = (camPos.getX() >> 9) * 512;
int regionZ = (camPos.getZ() >> 9) * 512;
for(ChunkPos chunkPos : chunks)
{
if(chunkPos.getChebyshevDistance(camChunkPos) > drawDistance)
continue;
BlockPos blockPos =
chunkPos.getBlockPos(0, 0, 0).add(-regionX, 0, -regionZ);
float x1 = blockPos.getX() + 0.5F;
float x2 = x1 + 15;
float z1 = blockPos.getZ() + 0.5F;
float z2 = z1 + 15;
bufferBuilder.vertex(x1, 0, z1).next();
bufferBuilder.vertex(x2, 0, z1).next();
bufferBuilder.vertex(x2, 0, z1).next();
bufferBuilder.vertex(x2, 0, z2).next();
bufferBuilder.vertex(x2, 0, z2).next();
bufferBuilder.vertex(x1, 0, z2).next();
bufferBuilder.vertex(x1, 0, z2).next();
bufferBuilder.vertex(x1, 0, z1).next();
}
}
}

View File

@ -0,0 +1,101 @@
/*
* 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.newchunks;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.ChunkPos;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.util.RenderUtils;
public final class NewChunksReasonsRenderer
{
private final SliderSetting drawDistance;
public NewChunksReasonsRenderer(SliderSetting drawDistance)
{
this.drawDistance = drawDistance;
}
public BufferBuilder buildBuffer(Set<BlockPos> reasons)
{
Tessellator tessellator = RenderSystem.renderThreadTesselator();
BufferBuilder bufferBuilder = tessellator.getBuffer();
bufferBuilder.begin(VertexFormat.DrawMode.QUADS,
VertexFormats.POSITION);
renderBlocks(new ArrayList<>(reasons), bufferBuilder);
bufferBuilder.end();
return bufferBuilder;
}
private void renderBlocks(List<BlockPos> blocks,
BufferBuilder bufferBuilder)
{
BlockPos camPos = RenderUtils.getCameraBlockPos();
ChunkPos camChunkPos = new ChunkPos(camPos);
int regionX = (camPos.getX() >> 9) * 512;
int regionZ = (camPos.getZ() >> 9) * 512;
int drawDistance = this.drawDistance.getValueI();
for(BlockPos pos : blocks)
{
ChunkPos chunkPos = new ChunkPos(pos);
if(chunkPos.getChebyshevDistance(camChunkPos) > drawDistance)
continue;
Box bb = new Box(pos).offset(-regionX, 0, -regionZ);
float minX = (float)bb.minX;
float minY = (float)bb.minY;
float minZ = (float)bb.minZ;
float maxX = (float)bb.maxX;
float maxY = (float)bb.maxY;
float maxZ = (float)bb.maxZ;
bufferBuilder.vertex(minX, minY, minZ).next();
bufferBuilder.vertex(maxX, minY, minZ).next();
bufferBuilder.vertex(maxX, minY, maxZ).next();
bufferBuilder.vertex(minX, minY, maxZ).next();
bufferBuilder.vertex(minX, maxY, minZ).next();
bufferBuilder.vertex(minX, maxY, maxZ).next();
bufferBuilder.vertex(maxX, maxY, maxZ).next();
bufferBuilder.vertex(maxX, maxY, minZ).next();
bufferBuilder.vertex(minX, minY, minZ).next();
bufferBuilder.vertex(minX, maxY, minZ).next();
bufferBuilder.vertex(maxX, maxY, minZ).next();
bufferBuilder.vertex(maxX, minY, minZ).next();
bufferBuilder.vertex(maxX, minY, minZ).next();
bufferBuilder.vertex(maxX, maxY, minZ).next();
bufferBuilder.vertex(maxX, maxY, maxZ).next();
bufferBuilder.vertex(maxX, minY, maxZ).next();
bufferBuilder.vertex(minX, minY, maxZ).next();
bufferBuilder.vertex(maxX, minY, maxZ).next();
bufferBuilder.vertex(maxX, maxY, maxZ).next();
bufferBuilder.vertex(minX, maxY, maxZ).next();
bufferBuilder.vertex(minX, minY, minZ).next();
bufferBuilder.vertex(minX, minY, maxZ).next();
bufferBuilder.vertex(minX, maxY, maxZ).next();
bufferBuilder.vertex(minX, maxY, minZ).next();
}
}
}

View File

@ -0,0 +1,117 @@
/*
* 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.newchunks;
import org.lwjgl.opengl.GL11;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gl.VertexBuffer;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.Shader;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.Matrix4f;
import net.wurstclient.settings.ColorSetting;
import net.wurstclient.settings.SliderSetting;
import net.wurstclient.util.RenderUtils;
public final class NewChunksRenderer
{
private final VertexBuffer[] vertexBuffers = new VertexBuffer[4];
private final SliderSetting altitude;
private final SliderSetting opacity;
private final ColorSetting newChunksColor;
private final ColorSetting oldChunksColor;
public NewChunksRenderer(SliderSetting altitude, SliderSetting opacity,
ColorSetting newChunksColor, ColorSetting oldChunksColor)
{
this.altitude = altitude;
this.opacity = opacity;
this.newChunksColor = newChunksColor;
this.oldChunksColor = oldChunksColor;
}
public void updateBuffer(int i, BufferBuilder buffer)
{
vertexBuffers[i] = new VertexBuffer();
vertexBuffers[i].bind();
vertexBuffers[i].upload(buffer);
VertexBuffer.unbind();
}
public void closeBuffers()
{
for(int i = 0; i < vertexBuffers.length; i++)
{
if(vertexBuffers[i] == null)
continue;
vertexBuffers[i].close();
vertexBuffers[i] = null;
}
}
public void render(MatrixStack matrixStack, float partialTicks)
{
// GL settings
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glEnable(GL11.GL_LINE_SMOOTH);
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_DEPTH_TEST);
matrixStack.push();
RenderUtils.applyRegionalRenderOffset(matrixStack);
RenderSystem.setShader(GameRenderer::getPositionShader);
Matrix4f projMatrix = RenderSystem.getProjectionMatrix();
Shader shader = RenderSystem.getShader();
float alpha = opacity.getValueF();
float[] newColorF = newChunksColor.getColorF();
float[] oldColorF = oldChunksColor.getColorF();
double altitudeD = altitude.getValue();
for(int i = 0; i < vertexBuffers.length; i++)
{
VertexBuffer buffer = vertexBuffers[i];
if(buffer == null)
continue;
matrixStack.push();
if(i == 0 || i == 2)
matrixStack.translate(0, altitudeD, 0);
if(i < 2)
RenderSystem.setShaderColor(newColorF[0], newColorF[1],
newColorF[2], alpha);
else
RenderSystem.setShaderColor(oldColorF[0], oldColorF[1],
oldColorF[2], alpha);
Matrix4f viewMatrix = matrixStack.peek().getPositionMatrix();
buffer.bind();
buffer.setShader(viewMatrix, projMatrix, shader);
VertexBuffer.unbind();
matrixStack.pop();
}
matrixStack.pop();
// GL resets
RenderSystem.setShaderColor(1, 1, 1, 1);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDisable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_LINE_SMOOTH);
}
}

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.newchunks;
import net.wurstclient.settings.EnumSetting;
public final class NewChunksShowSetting
extends EnumSetting<NewChunksShowSetting.Show>
{
public NewChunksShowSetting()
{
super("Show", Show.values(), Show.NEW_CHUNKS);
}
public static enum Show
{
NEW_CHUNKS("New Chunks", true, false),
OLD_CHUNKS("Old Chunks", false, true),
BOTH("Both", true, true);
private final String name;
private final boolean includeNew;
private final boolean includeOld;
private Show(String name, boolean showNew, boolean showOld)
{
this.name = name;
includeNew = showNew;
includeOld = showOld;
}
@Override
public String toString()
{
return name;
}
public boolean includesNew()
{
return includeNew;
}
public boolean includesOld()
{
return includeOld;
}
}
}

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.hacks.newchunks;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.wurstclient.util.RenderUtils;
public final class NewChunksSquareRenderer implements NewChunksChunkRenderer
{
@Override
public BufferBuilder buildBuffer(Set<ChunkPos> chunks, int drawDistance)
{
Tessellator tessellator = RenderSystem.renderThreadTesselator();
BufferBuilder bufferBuilder = tessellator.getBuffer();
bufferBuilder.begin(VertexFormat.DrawMode.QUADS,
VertexFormats.POSITION);
renderChunks(new ArrayList<>(chunks), drawDistance, bufferBuilder);
bufferBuilder.end();
return bufferBuilder;
}
private void renderChunks(List<ChunkPos> chunks, int drawDistance,
BufferBuilder bufferBuilder)
{
BlockPos camPos = RenderUtils.getCameraBlockPos();
ChunkPos camChunkPos = new ChunkPos(camPos);
int regionX = (camPos.getX() >> 9) * 512;
int regionZ = (camPos.getZ() >> 9) * 512;
for(ChunkPos chunkPos : chunks)
{
if(chunkPos.getChebyshevDistance(camChunkPos) > drawDistance)
continue;
BlockPos blockPos =
chunkPos.getBlockPos(0, 0, 0).add(-regionX, 0, -regionZ);
float x1 = blockPos.getX() + 0.5F;
float x2 = x1 + 15;
float z1 = blockPos.getZ() + 0.5F;
float z2 = z1 + 15;
bufferBuilder.vertex(x1, 0, z1).next();
bufferBuilder.vertex(x2, 0, z1).next();
bufferBuilder.vertex(x2, 0, z2).next();
bufferBuilder.vertex(x1, 0, z2).next();
}
}
}

View File

@ -0,0 +1,45 @@
/*
* 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.newchunks;
import net.wurstclient.settings.EnumSetting;
public final class NewChunksStyleSetting
extends EnumSetting<NewChunksStyleSetting.Style>
{
public NewChunksStyleSetting()
{
super("Style", Style.values(), Style.OUTLINE);
}
public static enum Style
{
OUTLINE("Outline", new NewChunksOutlineRenderer()),
SQUARE("Square", new NewChunksSquareRenderer());
private final String name;
private final NewChunksChunkRenderer chunkRenderer;
private Style(String name, NewChunksChunkRenderer chunkRenderer)
{
this.name = name;
this.chunkRenderer = chunkRenderer;
}
@Override
public String toString()
{
return name;
}
public NewChunksChunkRenderer getChunkRenderer()
{
return chunkRenderer;
}
}
}

View File

@ -15,6 +15,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.Packet;
import net.minecraft.network.listener.ClientPlayPacketListener;
import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket;
import net.minecraft.network.packet.s2c.play.ChunkData;
import net.minecraft.network.packet.s2c.play.ChunkDeltaUpdateS2CPacket;
import net.wurstclient.WurstClient;
import net.wurstclient.event.EventManager;
import net.wurstclient.events.PacketOutputListener.PacketOutputEvent;
@ -22,8 +26,8 @@ import net.wurstclient.events.PacketOutputListener.PacketOutputEvent;
public abstract class ClientPlayNetworkHandlerMixin
implements ClientPlayPacketListener
{
@Inject(at = {@At("HEAD")},
method = {"sendPacket(Lnet/minecraft/network/Packet;)V"},
@Inject(at = @At("HEAD"),
method = "sendPacket(Lnet/minecraft/network/Packet;)V",
cancellable = true)
private void onSendPacket(Packet<?> packet, CallbackInfo ci)
{
@ -33,4 +37,29 @@ public abstract class ClientPlayNetworkHandlerMixin
if(event.isCancelled())
ci.cancel();
}
@Inject(at = @At("TAIL"),
method = "loadChunk(IILnet/minecraft/network/packet/s2c/play/ChunkData;)V")
private void onLoadChunk(int x, int z, ChunkData chunkData, CallbackInfo ci)
{
WurstClient.INSTANCE.getHax().newChunksHack.afterLoadChunk(x, z);
}
@Inject(at = @At("TAIL"),
method = "onBlockUpdate(Lnet/minecraft/network/packet/s2c/play/BlockUpdateS2CPacket;)V")
private void onOnBlockUpdate(BlockUpdateS2CPacket packet, CallbackInfo ci)
{
WurstClient.INSTANCE.getHax().newChunksHack
.afterUpdateBlock(packet.getPos());
}
@Inject(at = @At("TAIL"),
method = "onChunkDeltaUpdate(Lnet/minecraft/network/packet/s2c/play/ChunkDeltaUpdateS2CPacket;)V")
private void onOnChunkDeltaUpdate(ChunkDeltaUpdateS2CPacket packet,
CallbackInfo ci)
{
packet.visitUpdates(
(pos, state) -> WurstClient.INSTANCE.getHax().newChunksHack
.afterUpdateBlock(pos));
}
}

View File

@ -39,7 +39,7 @@ import net.wurstclient.events.PlayerMoveListener.PlayerMoveEvent;
import net.wurstclient.events.PostMotionListener.PostMotionEvent;
import net.wurstclient.events.PreMotionListener.PreMotionEvent;
import net.wurstclient.events.UpdateListener.UpdateEvent;
import net.wurstclient.hacks.FullbrightHack;
import net.wurstclient.hack.HackList;
import net.wurstclient.mixinterface.IClientPlayerEntity;
@Mixin(ClientPlayerEntity.class)
@ -216,13 +216,16 @@ public class ClientPlayerEntityMixin extends AbstractClientPlayerEntity
@Override
public boolean hasStatusEffect(StatusEffect effect)
{
FullbrightHack fullbright =
WurstClient.INSTANCE.getHax().fullbrightHack;
HackList hax = WurstClient.INSTANCE.getHax();
if(effect == StatusEffects.NIGHT_VISION
&& fullbright.isNightVisionActive())
&& hax.fullbrightHack.isNightVisionActive())
return true;
if(effect == StatusEffects.LEVITATION
&& hax.noLevitationHack.isEnabled())
return false;
return super.hasStatusEffect(effect);
}

View File

@ -58,7 +58,7 @@ public abstract class EntityRendererMixin<T extends Entity>
MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider,
int i)
{
double d = this.dispatcher.getSquaredDistanceToCamera(entity);
double d = dispatcher.getSquaredDistanceToCamera(entity);
if(d > 4096)
return;
@ -71,7 +71,7 @@ public abstract class EntityRendererMixin<T extends Entity>
matrixStack.push();
matrixStack.translate(0.0D, f, 0.0D);
matrixStack.multiply(this.dispatcher.getRotation());
matrixStack.multiply(dispatcher.getRotation());
float scale = 0.025F;
if(nameTagsHack.isEnabled())

View File

@ -19,7 +19,7 @@ import net.wurstclient.clickgui.components.ComboBoxComponent;
import net.wurstclient.keybinds.PossibleKeybind;
import net.wurstclient.util.json.JsonUtils;
public final class EnumSetting<T extends Enum<T>> extends Setting
public class EnumSetting<T extends Enum<T>> extends Setting
{
private final T[] values;
private T selected;

View File

@ -84,6 +84,8 @@
"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.killaura": "Greift automatisch Mobs und Spieler um dich herum an.",
"description.wurst.hack.newchunks": "Markiert neu generierte Chunks in deiner Umgebung.",
"description.wurst.hack.nolevitation": "Verhindert den Levitations-Effekt, wenn du von einem Shulker getroffen wirst.\n\n§c§lWARNUNG:§r Wenn du das aktivierst, während der Levitations-Effekt bereits aktiv ist, fällst du runter!",
"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.setting.generic.pause_attack_on_containers": "Greift nicht an wenn ein Behälter (Kiste, Trichter, usw.) geöffnet ist.\nNützlich für Minigame-Server die ein Kisten-ähnliches Inventar als Menü anzeigen.",

View File

@ -101,12 +101,14 @@
"description.wurst.hack.nameprotect": "Hides all player names.",
"description.wurst.hack.nametags": "Changes the scale of the nametags so you can always read them. Also allows you to see the nametags of sneaking players.",
"description.wurst.hack.navigator": "A searchable GUI that learns your preferences over time.",
"description.wurst.hack.newchunks": "Highlights newly generated chunks around you.",
"description.wurst.hack.nobackground": "Removes the dark background behind inventories.",
"description.wurst.hack.noclip": "Allows you to freely move through blocks.\nA block (e.g. sand) must fall on your head to activate it.\n\n§c§lWARNING:§r You will take damage while moving through blocks!",
"description.wurst.hack.nocomcrash": "Lags and crashes servers using the Nocom exploit.\nDoes not work on Paper servers. Tested working on Vanilla, Spigot, and Fabric. Can be disabled by some AntiCheats.",
"description.wurst.hack.nofall": "Protects you from fall damage.",
"description.wurst.hack.nofireoverlay": "Blocks the overlay when you are on fire.\n\n§c§lWARNING:§r This can cause you to burn to death without noticing.",
"description.wurst.hack.nohurtcam": "Disables the shaking effect when you get hurt.",
"description.wurst.hack.nolevitation": "Disables the levitation effect when you get hit by a Shulker.\n\n§c§lWARNING:§r You will fall if you activate this while the levitation effect is already active!",
"description.wurst.hack.nooverlay": "Blocks the overlays of water and lava.",
"description.wurst.hack.nopumpkin": "Blocks the overlay when wearing a pumpkin on your head.",
"description.wurst.hack.noslowdown": "Cancels slowness effects caused by honey, soul sand and using items.",

View File

@ -78,7 +78,7 @@
"description.wurst.hack.headroll": "Sprawia, że cały czas kiwasz głową.\nWidoczne tylko dla innych graczy.",
"description.wurst.hack.healthtags": "Pokazuje punkty życia graczy przy ich nazwach.",
"description.wurst.hack.highjump": "Pozwala skakać wyżej.\n\n§c§lOSTRZERZENIE:§r Odniesiesz obrażenia od upadku, jeśli nie użyjesz NoFall.",
"description.wurst.hack.infinichat": "Usuwa limit 256 znaków z czatu.\nPrzydatne w przypadku długich poleceń modyfikujących dane NBT.\n\n§6§lUWAGA:§r Niepolecane do rozmów z ludźmi. Większość serwerów obcina wiadomości do 256 znaków.",
"description.wurst.hack.infinichat": "Usuwa limit 256 znaków z czatu.\nPrzydatne w przypadku długich poleceń modyfikujących dane NBT.\n\n§6§lUWAGA:§r Nie polecane do rozmów z ludźmi. Większość serwerów obcina wiadomości do 256 znaków.",
"description.wurst.hack.instantbunker": "Buduje wokół ciebie mały bunkier. Wymaga 57 bloków.",
"description.wurst.hack.invwalk": "Pozwala poruszać się z otwartym ekwipunkiem.",
"description.wurst.setting.invwalk.allow_clickgui": "Pozwala poruszać się z otwartym ClickGUI Wursta.",
@ -101,12 +101,14 @@
"description.wurst.hack.nameprotect": "Ukrywa wszystkie nazwy graczy.",
"description.wurst.hack.nametags": "Zmienia skalę nametagów, abyś zawsze mógł je przeczytać. Pozwala również zobaczyć nazwy skradających się graczy.",
"description.wurst.hack.navigator": "Przeszukiwalny interfejs, który z czasem uczy się twoich preferencji.",
"description.wurst.hack.newchunks": "Podświetla nowo wygenerowane chunki wokół ciebie.",
"description.wurst.hack.nobackground": "Usuwa ciemne tło zza ekwipunków.",
"description.wurst.hack.noclip": "Pozwala swobodnie poruszać się przez bloki.\nBlok (np. piasek) musi spaść na twoją głowę, aby to aktywować.\n\n§c§lOSTRZERZENIE:§r Odniesiesz obrażenia podczas poruszania się przez bloki!",
"description.wurst.hack.nocomcrash": "Laguje i crashuje serwery przy pomocy exploita Nocom.\nNie działa na serwerach Paper. Działanie potwierdzone na serwerach Vanilla, Spigot i Fabric. Może zostać wyłączone przez niektóre AntyCheaty.",
"description.wurst.hack.nofall": "Chroni przed obrażeniami od upadku.",
"description.wurst.hack.nofireoverlay": "Blokuje nakładkę, gdy się palisz.\n\n§c§lOSTRZERZENIE:§r Może to spowodować spalenie się na śmierć bez zauważenia.",
"description.wurst.hack.nohurtcam": "Wyłącza efekt trzęsienia, gdy ponosisz obrażenia.",
"description.wurst.hack.nolevitation": "Wyłącza efekt lewitacji po uderzeniu przez Shulkera.\n\n§c§lOSTRZEŻENIE:§r Spadniesz, jeśli aktywujesz to, gdy efekt lewitacji jest już aktywny!",
"description.wurst.hack.nooverlay": "Blokuje nakładki wody i lawy.",
"description.wurst.hack.nopumpkin": "Blokuje nakładkę podczas noszenia dyni na głowie.",
"description.wurst.hack.noslowdown": "Anuluje efekty spowolnienia wywołane przez miód, piasek dusz i używanie przedmiotów.",
@ -169,4 +171,4 @@
"gui.wurst.altmanager.empty.message": "Czy chciałbyś zacząć od dodania kilku losowych altów?",
"gui.wurst.generic.allcaps_blocked": "ZABLOKOWANE",
"gui.wurst.generic.allcaps_allowed": "DOZWOLONE"
}
}

View File

@ -152,6 +152,8 @@
"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.",
"button.wurst.nochatreports.disable_signatures": "Dezactivează semnăturile",
"button.wurst.nochatreports.re-enable_signatures": "Re-activează semnăturile",
"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.",
@ -162,5 +164,16 @@
"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"
}
"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",
"gui.wurst.altmanager.empty.title": "Lista voastră de alt-uri este goala.",
"gui.wurst.altmanager.empty.message": "Ți-ar plăcea niște alt-uri la întâmplare ca sa începi?",
"gui.wurst.nochatreports.unsafe_server.title": "§4§lAVERTIZARE:§r Server nesigur",
"toast.wurst.nochatreports.unsafe_server.title": "Mesajele chat-ului pot fi raportate",
"toast.wurst.nochatreports.unsafe_server.message": "Mesajele trimise pe acest server pot fi raportate către Fratele Mare Mojang si poți lua ban global pe contul tău",
"gui.wurst.nochatreports.ncr_mod_server.title": "Server \"No Chat Reports\"",
"gui.wurst.nochatreports.ncr_mod_server.message": "Acest server folosește mod-ul \"No Chat Reports\".\n\nPoți intra in serverul acesta daca blochezi semnăturile chat-ului si dezactivezi VanillaSpoof.",
"button.wurst.nochatreports.signatures_status": "Semnături: ",
"description.wurst.nochatreports.message_is_reportable": "Acest mesaj are o semnătura valida si prin urmare este vulnerabil la rapoarte de chat.",
"gui.wurst.generic.allcaps_blocked": "BLOCAT",
"gui.wurst.generic.allcaps_allowed": "PERMIS"
}

View File

@ -1,6 +1,6 @@
{
"description.wurst.hack.anchoraura": "Автоматически ставит (если отмечено), заряжает, и взрывает якоря возрождения чтобы убить сущности вокруг.",
"description.wurst.hack.antiafk": "Ходит в случайном направлении чтобы сервер не знал что Вы АФК.\nДля работы необходимо пустое пространство в 3 на 3 блока.",
"description.wurst.hack.antiafk": "Ходит в случайном направлении чтобы сервер не знал что Вы АФК.\nДля работы необходимо пустое пространство хотя бы в 3 на 3 блока.",
"description.wurst.hack.antiblind": "Отключает эффект слепоты.\nНесовместим с OptiFine.",
"description.wurst.hack.anticactus": "Защищает Вас от урона от столкновения с кактусами.",
"description.wurst.hack.antiknockback": "Предотвращает откидывание при получении урона.",
@ -17,8 +17,8 @@
"description.wurst.hack.autoeat": "Автоматически ест когда голоден.",
"description.wurst.setting.autoeat.target_hunger": "Пытается удерживать полосу голода на этом уровне или выше.",
"description.wurst.setting.autoeat.min_hunger": "Всегда держит полосу голода на этом уровне или выше, даже если это тратит впустую некоторые очки голода.\n6.5 - Не допускает отходов при использовании ванильных продуктов.\n10.0 - Полностью игнорирует отходы и просто держит полоску голода заполненной.",
"description.wurst.setting.autoeat.injured_hunger": "Заполняет полоску голода по крайней мере до этого уровня, когда вы ранены, даже если при этом тратится несколько очков голода.\n10.0 - самое быстрое исцеление\n9.0 - самое медленное исцеление\n<9.0 - без исцеления\n<3.5 - без спринт-бега",
"description.wurst.setting.autoeat.injury_threshold": "Предотвращает трату всей еды из-за небольших ранений. AutoEat будет считать вас раненым, только если вы потеряли по крайней мере это количество сердец.",
"description.wurst.setting.autoeat.injured_hunger": "Когда вы ранены, заполняет полоску голода как минимум до этого уровня, даже если при этом теряется несколько очков голода.\n10.0 - самое быстрое исцеление\n9.0 - самое медленное исцеление\n<9.0 - без исцеления\n<3.5 - без спринт-бега",
"description.wurst.setting.autoeat.injury_threshold": "Предотвращает растрату всей еды на небольшие ранения. AutoEat будет считать вас раненым, только если вы потеряли по крайней мере это количество сердец.",
"description.wurst.setting.autoeat.take_items_from": "Где AutoEat должен искать еду.",
"description.wurst.setting.autoeat.eat_while_walking": "Замедляет работу, не рекомендуется.",
"description.wurst.setting.autoeat.allow_hunger": "Гнилая плоть накладывает эффект \"голод\".\nОна безопасна для употребления в пищу и полезна в качестве аварийного питания.",
@ -101,18 +101,20 @@
"description.wurst.hack.nameprotect": "Скрывает ники всех игроков.",
"description.wurst.hack.nametags": "Увеличивает размер ников игроков чтобы их всегда можно было прочесть. Также позволяет видеть ники прячущихся приседанием игроков.",
"description.wurst.hack.navigator": "Меню с поиском которое со временем подстраивается под Вас.",
"description.wurst.hack.newchunks": "Подсвечивает новые чанки вокруг вас.",
"description.wurst.hack.nobackground": "Убирает тёмный фон за инвентарем.",
"description.wurst.hack.noclip": "Позволяет передвигаться сквозь блоки.\nДля активации Вам на голову должен упасть блок (например, песок).\n\n§c§lВНИМАНИЕ:§r При передвижении сквозь блоки Вы будете получать урон!",
"description.wurst.hack.nocomcrash": "Затормаживает и крашит сервера используя эксплойт Nocom.\nНе работает на серверах Paper. Проверено на ванильных серверах, серверах Spigot и Fabric. Может быть отключен некоторыми античитами.",
"description.wurst.hack.nofall": "Отключает урон от падения.",
"description.wurst.hack.nofireoverlay": "Отключает видимость огня когда Вы горите.\n\n§c§lВНИМАНИЕ:§r Вы можете сгореть не заметив.",
"description.wurst.hack.nohurtcam": "Отключает тряску камеры когда Вам наносят урон.",
"description.wurst.hack.nolevitation": "Отключает эффект левитации, когда Шалкер атакует вас.\n\n§c§lВНИМАНИЕ:§r Вы упадете, если активируете это, когда эффект левитации активен!",
"description.wurst.hack.nooverlay": "Отключает оверлей воды и лавы когда Вы внутри.",
"description.wurst.hack.nopumpkin": "Отключает оверлей тыквы когда она у Вас на голове.",
"description.wurst.hack.noslowdown": "Песок душ, мёд и использование чего-либо больше не будут вас замедлять.",
"description.wurst.hack.noweather": "Позволяет устанавливать погоду, время дня и фазу луны. §rТолько на Вашей стороне, на сервере ничего не изменится.",
"description.wurst.hack.noweb": "Паутина больше не будет Вас замедлять.",
"description.wurst.hack.nuker": "Автоматически ломает блоки вокруг.",
"description.wurst.hack.nocomcrash": "Затормаживает и крашит сервера используя эксплойт Nocom.\nНе работает на серверах Paper. Проверено на ванильных серверах, серверах Spigot и Fabric. Может быть отключен некоторыми античитами.",
"description.wurst.hack.nukerlegit": "Более медленная версия Nuker которая обходит любой античит.\nНе нужна на обычных серверах с простым NoCheat+!",
"description.wurst.hack.openwateresp": "Показывает рыбачите ли Вы в 'открытой воде' и рисует вокруг области куб искользуемый для расчета.",
"description.wurst.hack.overlay": "Добавляет анимацию разрушения блока.",
@ -152,6 +154,9 @@
"description.wurst.hack.truesight": "Позволяет видеть невидимые сущности.",
"description.wurst.hack.tunneller": "Автоматически копает туннель.\n\n§c§lВНИМАНИЕ:§r Хоть бот и будет пытаться избегать лаву и другие опасности, нет гарантии что он не умрёт. Посылайте его копать только с вещами которые Вам было бы не жалко потерять.",
"description.wurst.hack.x-ray": "Позволяет видеть руды и другие блоки сквозь стены.",
"description.wurst.other_feature.nochatreports": "Выключает криптографические подписи, которые с версии 1.19 прикрепляются к сообщениям чата.\n\n§c§lВНИМАНИЕ: §cЕсли §cвы §cотправляете §cчат-сообщения §cс §cподписями, §cваш §cаккаунт §cв §cMinecraft §cможет §cбыть §cзаблокирован!§r\n\nДаже если вы пишите в чате только безобидные вещи, ваши подписанные сообщения могут быть использованы для создания фальшивого сообщения в чате, из-за которого ваш аккаунт будет несправедливо забанен.\n\nЕсли вам хочется повторно включить подписи в чате, чтобы присоединиться к серверу, подумайте о том, чтобы вообще не пользоваться чатом на сервере. Или играйте на альт-аккаунте, который не жалко потерять.",
"button.wurst.nochatreports.disable_signatures": "Выключить Подписи",
"button.wurst.nochatreports.re-enable_signatures": "Повторно включить Подписи",
"description.wurst.setting.generic.attack_speed": "Скорость атаки в кликах в секунду.\n0 = динамически регулирует скорость в зависимости от времени куллдауна атаки.",
"description.wurst.setting.generic.pause_attack_on_containers": "Не атакует, пока открыт экран контейнера (сундук, воронка и т.д.).\nПолезно для серверов с мини-играми, которые отображают меню в виде сундука.",
"description.wurst.altmanager.premium": "Этот аккаунт имеет пароль и может присоединяться к любым серверам.",
@ -166,5 +171,15 @@
"gui.wurst.altmanager.folder_error.title": "Не удалось создать папку \".Wurst encryption\"!",
"gui.wurst.altmanager.folder_error.message": "Возможно, вы случайно заблокировали Wurst доступ к этой папке.\nAltManager не может зашифровать или расшифровать ваш альт список без неё.\nВы по-прежнему можете использовать AltManager, но любые созданные вами альт профили не будут сохранены.\n\nПолная ошибка выглядит следующим образом:\n%s",
"gui.wurst.altmanager.empty.title": "Ваш альт список пуст.",
"gui.wurst.altmanager.empty.message": "Хотели бы вы увидеть, случайные альты для начала?"
}
"gui.wurst.altmanager.empty.message": "Хотели бы вы увидеть, случайные альты для начала?",
"gui.wurst.nochatreports.unsafe_server.title": "§4§lВНИМАНИЕ:§r Небезопасный Сервер",
"gui.wurst.nochatreports.unsafe_server.message": "Этот сервер требует включение подписей, что подвергает ваш аккаунт риску с помощью заведомо ложных чат-репортов.\n\nВы можете присоединиться к этому серверу, если включите функцию подписи чата, а затем снова подключитесь. В противном случае подумайте о том, чтобы вообще не пользоваться чатом. Или играйте на альт-аккаунте, который вы не против потерять.\n\nЕсли это ваш сервер, вы можете исправить ситуацию, установив значение 'enforce-secure-profile' на false в файле server.properties. В типичном стиле Mojang эта настройка делает противоположное тому, как звучит.",
"toast.wurst.nochatreports.unsafe_server.title": "На сообщения в чате могут пожаловаться",
"toast.wurst.nochatreports.unsafe_server.message": "Сообщения отправленные на этом сервере, могут быть переданы Mojang, что может привести к глобальной блокировке аккаунта",
"gui.wurst.nochatreports.ncr_mod_server.title": "Сервер с поддержкой \"No Chat Reports\"",
"gui.wurst.nochatreports.ncr_mod_server.message": "Этот сервер использует мод \"No Chat Reports\".\n\nВы можете зайти на этот сервер, если заблокируете подписи чата и выключите VanillaSpoof.",
"button.wurst.nochatreports.signatures_status": "Подписи: ",
"description.wurst.nochatreports.message_is_reportable": "Это сообщение имеет действительную подпись и поэтому уязвимо для заведомо ложных чат-репортов.",
"gui.wurst.generic.allcaps_blocked": "ЗАБЛОКИРОВАНО",
"gui.wurst.generic.allcaps_allowed": "РАЗРЕШЕНО"
}

View File

@ -37,7 +37,7 @@
"description.wurst.hack.autoswim": "Автоматично включає анімацію швидкого плавання.",
"description.wurst.hack.autoswitch": "Весь час перемикає слоти на руці.\n\n§lПІДКАЗКА:§r Можна використовувати це з BuildRandom, коли у вас в хотбарі багато різнокольорової вовни або бетону.",
"description.wurst.hack.autosword": "Автоматичне використання найкращої зброї для атаки.\nПорада: Це гарний додаток до Killaura.",
"description.wurst.hack.autool": "Автоматично екіпірує відповідний інструмент із хотбару, коли ви намагаєтеся зламати блок.",
"description.wurst.hack.autotool": "Автоматично екіпірує відповідний інструмент із хотбару, коли ви намагаєтеся зламати блок.",
"description.wurst.hack.autototem": "Автоматично переміщує тотеми безсмертя у другу руку.",
"description.wurst.hack.autowalk": "Примушує вас постійно йти.",
"description.wurst.hack.basefinder": "Шукає основи гравців за допомогою пошуку рукотворних блоків.\nБлоки, які ця функція знаходить, будуть підсвічені вибраним кольором.\nГарний інструмент для пошуку прихованих баз гільдій.",
@ -103,6 +103,7 @@
"description.wurst.hack.navigator": "Меню з пошуком, яке з часом підлаштовується під вас.",
"description.wurst.hack.nobackground": "Забирає темний фон за інвентарем.",
"description.wurst.hack.noclip": "Дозволяє пересуватися крізь блоки.\nДля активації вам на голову повинен впасти блок (наприклад, пісок).\n\n§c§lУВАГА:§r При пересуванні крізь блоки ви будете отримувати шкоду!",
"description.wurst.hack.nocomcrash": "Змушує сервера лагати й крашить їх за допомогою експлойту Nocom.\nНе працює на серверах Paper. Протестовано на Vanilla, Spigot, та Fabric. Може бути блокований деякими античітами.",
"description.wurst.hack.nofall": "Вимикає урон від падіння.",
"description.wurst.hack.nofireoverlay": "Вимикає видимість вогню, коли ви горите.\n\n§c§lУВАГА:§r Через це ви можете згоріти не помітивши як загорілися.",
"description.wurst.hack.nohurtcam": "Відключає тряску камери коли вам завдають урон.",
@ -134,7 +135,7 @@
"description.wurst.hack.skinderp": "Перемикає видимість шарів скіну у випадковому порядку.",
"description.wurst.hack.sneak": "Примушує вас автоматично присідати.",
"description.wurst.hack.snowshoe": "Дозволяє ходити по пухкому снігу.",
"description.wurst.hack.speedhack": "Дозволяє бігати приблизно в 2,5 рази швидше, ніж біг зі стрибками.\n\n§6§lУВАГА:§r Пропатчено в NoCheat+ з версії 3.13.2 NoCheat+.\nНапишіть §l\/ncp version§r, щоб дізнатися, яка версія античита стоїть на сервері.",
"description.wurst.hack.speedhack": "Дозволяє бігати приблизно в 2,5 рази швидше, ніж біг зі стрибками.\n\n§6§lУВАГА:§r Пропатчено в NoCheat+ з версії 3.13.2 NoCheat+.\nНапишіть §l/ncp version§r, щоб дізнатися, яка версія античита стоїть на сервері.",
"description.wurst.hack.speednuker": "Швидша версія Nuker яка не буде працювати з NoCheat+.",
"description.wurst.hack.spider": "Дозволяє підніматися по стінах як павучок.",
"description.wurst.hack.step": "Дозволяє крокувати на блоки як по сходах.",
@ -150,5 +151,33 @@
"description.wurst.hack.trollpotion": "Створює зілля з безліччю неприємних ефектів. Для роботи потрібний креатив.",
"description.wurst.hack.truesight": "Дозволяє бачити невидимі сутності.",
"description.wurst.hack.tunneller": "Автоматично копає тунель.\n\n§c§lУВАГА:§r Хоч бот і намагатиметься виключити попадання в лаву та інших небезпек, немає впевненості що він не помре. Копайте з речами, які вам було б не шкода втратити.",
"description.wurst.hack.x-ray": "Дозволяє бачити руди та інші корисності через стіни."
}
"description.wurst.hack.x-ray": "Дозволяє бачити руди та інші корисності через стіни.",
"description.wurst.other_feature.nochatreports": "Вимикає криптографічні підписи, які з версії 1.19 прикріплюються до повідомлень чату.\n\n§c§lУВАГА: §cЯкщо §ви §відправляєте §чат-повідомлення §з §підписами, §ваш §саккаунт §в §cMinecraft §може §збути §заблоковано!§r\n\nНавіть якщо ви пишете в чаті тільки необразливі речі, ваші підписані повідомлення можуть бути використані для створення фальшивого повідомлення в чаті, через яке ваш акаунт буде несправедливо забанено.\n\nЯкщо вам хочеться повторно ввімкнути підписи в чаті, щоб приєднатися до сервера, подумайте про те, щоб взагалі не користуватися чатом на сервері. Або грайте на альт-акаунті, який не шкода втратити.",
"button.wurst.nochatreports.disable_signatures": "Вимкнути Підписи",
"button.wurst.nochatreports.re-enable_signatures": "Повторно ввімкнути Підписи",
"description.wurst.setting.generic.attack_speed": "Швидкість атаки в кліках за секунду. \n0 = динамічно регулює швидкість за часом відновлення атаки.",
"description.wurst.setting.generic.pause_attack_on_containers": "Не атакує, поки відкритий екран контейнера (скриня, воронка тощо).\nКорисно для серверів із міні-іграми, які відображають меню у вигляді скрині.",
"description.wurst.altmanager.premium": "Цей альт має пароль і може приєднатися до всіх серверів.",
"description.wurst.altmanager.cracked": "Цей альт не має пароля і працюватиме лише на зламаних серверах.",
"description.wurst.altmanager.failed": "Остання спроба зайти в цей акаунт була невдалою.",
"description.wurst.altmanager.checked": "Пароль працював раніше.",
"description.wurst.altmanager.unchecked": "Ви жодного разу не зайшли в цей акаунт вдало.",
"description.wurst.altmanager.favorite": "Ви позначили цей альт як один зі своїх улюблених.",
"description.wurst.altmanager.window": "Ця кнопка відкриває інше вікно.",
"description.wurst.altmanager.window_freeze": "Може здатися, що гра не відповідає, поки це вікно відкрито.",
"description.wurst.altmanager.fullscreen": "§cВийдіть із повноекранного режиму!",
"gui.wurst.altmanager.folder_error.title": "Не вдалося створити папку \".Wurst encryption\"!",
"gui.wurst.altmanager.folder_error.message": "Можливо, ви випадково заблокували Wurst доступ до цієї папки.\nAltManager не може зашифрувати або розшифрувати ваш альт список без неї.\nВи як і раніше можете використовувати AltManager, але будь-які створені вами альт-профілі не будуть збережені.\n\nПовна помилка має такий вигляд:\n%s",
"gui.wurst.altmanager.empty.title": "Ваш альт-список порожній.",
"gui.wurst.altmanager.empty.message": "Бажаєте згенерувати декілька альтів для початку?",
"gui.wurst.nochatreports.unsafe_server.title": "§4§lУВАГА:§r Небезпечний Сервер",
"gui.wurst.nochatreports.unsafe_server.message": "На цьому сервері потрібно ввімкнути підписи чату, що наражає ваш обліковий запис на ризик отримання шахрайських звітів чату.\n\nВи можете приєднатися до цього сервера, якщо розблокуєте підписи чату, а потім знову підключитесь. Якщо так, подумайте про те, щоб взагалі не використовувати чат. Або грайте на альті, який ви не проти згубити.\n\nЯкщо це ваш сервер, ви можете виправити це, встановивши для 'enforce-secure-profile' значення false у server.properties. У типовому стилі Mojang це налаштування діє протилежно тому, як звучить.",
"toast.wurst.nochatreports.unsafe_server.title": "На повідомленнях у чаті може бути створено репорт",
"toast.wurst.nochatreports.unsafe_server.message": "Репорт про повідомлення на цьому сервері може бути надіслано Великому Брату Mojang, що може призвести до глобального блокування вашого акаунта.",
"gui.wurst.nochatreports.ncr_mod_server.title": "Сервер \"No Chat Reports\"",
"gui.wurst.nochatreports.ncr_mod_server.message": "Цей сервер використовує мод \"No Chat Reports\".\n\nВи можете приєднатися до цього сервера, якщо заблокуєте підписи в чаті та вимкнете VanillaSpoof.",
"button.wurst.nochatreports.signatures_status": "Підписи: ",
"description.wurst.nochatreports.message_is_reportable": "Це повідомлення має дійсний підпис і тому вразливе для шахрайських звітів чату.",
"gui.wurst.generic.allcaps_blocked": "ЗАБЛОКОВАНО",
"gui.wurst.generic.allcaps_allowed": "ДОЗВОЛЕНО"
}

View File

@ -7,7 +7,7 @@
"description.wurst.hack.antispam": "将重复的刷屏改为计数器显示。",
"description.wurst.hack.antiwaterpush": "防止你被水流推动。",
"description.wurst.hack.antiwobble": "关闭由反胃和传送门引起的摇晃效果。",
"description.wurst.hack.arrowdmg": "显著提高箭的伤害,但同时消耗更多的饥饿值以及降低箭的精度。\n\n对弩而言无效并且在Paper服务端似乎已经被修复了。",
"description.wurst.hack.arrowdmg": "大幅增加箭的傷害,但也會消耗大量飢餓值並降低準確性。\n\n不適用於弩並且似乎已在Paper伺服器上進行了修補。",
"description.wurst.setting.arrowdmg.packets": "发送数据包的数量。\n更多的数据包意味着更高的伤害。",
"description.wurst.setting.arrowdmg.trident_yeet_mode": "打开之后,三叉戟将飞得更远。似乎不影响伤害以及“激流”魔咒。\n\n§c§l警告§r打开这个选项之后你很容易弄丢你的三叉戟",
"description.wurst.hack.autoarmor": "自动管理你的盔甲。",

View File

@ -80,6 +80,9 @@
"description.wurst.hack.highjump": "允許你跳的更高。\n\n§c§l警告§r如果你不使用NoFall則可能會摔落致死。",
"description.wurst.hack.infinichat": "移除聊天欄的256字元限制。\n一般用於編輯NBT的指令。\n\n§6§l注意§r不推薦用於和別人聊天。大多數伺服器一般超過256字元就會無法顯示後面的內容。",
"description.wurst.hack.instantbunker": "建造一個小小的火柴盒需要57個方塊。",
"description.wurst.hack.invwalk": "允許您在物品欄打開時四處走動。",
"description.wurst.setting.invwalk.allow_clickgui": "允許您在 Wurst 的 ClickGUI 打開時四處走動。",
"description.wurst.setting.invwalk.allow_other": "允許您在遊戲中打開屏幕(例如箱子、馬、村民交易)時四處移動,除非屏幕有訊息欄。",
"description.wurst.hack.itemesp": "高亮附近的掉落物品。",
"description.wurst.hack.itemgenerator": "生成隨機的物品並將其丟在地上。\n§o僅限創造模式。§r",
"description.wurst.hack.jesus": "允許你走在水面上。\n耶穌曾經用這個功能約~2000年前。",
@ -149,6 +152,11 @@
"description.wurst.hack.truesight": "允許你看到隱身的實體。",
"description.wurst.hack.tunneller": "自動挖一個隧道。\n\n§c§l警告§r儘管這個AI會自動避開岩漿和其他危險的地下這裡沒有守衛確保你不會死亡除非你不介意你的東西全部有一定概率會失去。",
"description.wurst.hack.x-ray": "允許你透視礦物所在的位置(請自行確保服務器內無假礦挿件)。",
"description.wurst.other_feature.nochatreports": "停用自 1.19 以來附加到您的聊天消息的加密簽名。\n\n§c§l警告§cI如果 §c你 §c發送 §c聊天 §c訊息 §c和 §c簽名, §c你 §cMinecraft §c帳號 §c可以§c被 §c檢舉 §c跟 §c全球§c封鎖§c在§c多人遊戲!§r\n\n即使您在聊天中只說無害的話您簽名的消息也可能被濫用以創建虛假的聊天報告從而不公平地封鎖您的帳戶。\n\n如果您必須重新啟用聊天簽名才能加入伺服器請考慮根本不使用他們的聊天。 或者使用您不介意遺失的替代帳戶進行遊戲。",
"button.wurst.nochatreports.disable_signatures": "停用簽名",
"button.wurst.nochatreports.re-enable_signatures": "重新啟用簽名",
"description.wurst.setting.generic.attack_speed": "每秒點擊次數的攻擊速度。\n0 = 動態調整速度以匹配您的攻擊冷卻時間。",
"description.wurst.setting.generic.pause_attack_on_containers": "容器螢幕(箱子、漏斗等)打開時不會攻擊。\n對於顯示類似箱子的畫面的迷你游戲伺服器很有用。",
"description.wurst.altmanager.premium": "這個帳戶擁有密碼,且可以加入所有服務器。",
"description.wurst.altmanager.cracked": "這個帳戶沒有密碼,只能加入盜版服務器。",
"description.wurst.altmanager.failed": "上次你嘗試登入這個,但是它不起作用。",
@ -161,5 +169,15 @@
"gui.wurst.altmanager.folder_error.title": "無法創建 “.Wurst encryption” 文件夾。",
"gui.wurst.altmanager.folder_error.message": "你可能在無意中阻止了 Wurst 訪問這個文件夾。\nAltManager 無法在沒有權限的情況下加密或解密 Alt List。\n你可以繼續使用 AltManager但是你新建的 Alt 都無法被存儲。\n\n完整的錯誤信息如下\n%s",
"gui.wurst.altmanager.empty.title": "你的 Alt List 是空的。",
"gui.wurst.altmanager.empty.message": "你希望 Wurst 生成一些離綫賬戶嗎?"
}
"gui.wurst.altmanager.empty.message": "你希望 Wurst 生成一些離綫賬戶嗎?",
"gui.wurst.nochatreports.unsafe_server.title": "§4§l警告§r不安全的伺服器",
"gui.wurst.nochatreports.unsafe_server.message": "此伺服器需要啟用聊天簽名,這會使您的帳戶面臨欺詐性聊天檢舉的風險。\n\n如果您取消阻止聊天簽名然後重新連接則可以加入此服務器。 如果這樣做,請考慮根本不使用聊天。 或者使用您不介意遺失的替代帳戶進行遊戲。\n\n如果這是您的伺服器您可以通過在 server.properties 中將“enforce-secure-profile”設置為 false 來解決此問題。 在典型的 Mojang 方法中,這種設定與聽起來相反。",
"toast.wurst.nochatreports.unsafe_server.title": "可以檢舉聊天訊息",
"toast.wurst.nochatreports.unsafe_server.message": "在此伺服器上發送的訊息可能會被檢舉給 Mojang 大哥,並且可能會在全球範圍內封鎖您的帳戶",
"gui.wurst.nochatreports.ncr_mod_server.title": "“No Chat Reports”伺服器",
"gui.wurst.nochatreports.ncr_mod_server.message": "該伺服器使用“No Chat Reports”模組。\n\n如果您阻止聊天簽名並禁用 VanillaSpoof則可以加入此伺服器。",
"button.wurst.nochatreports.signatures_status": "簽名: ",
"description.wurst.nochatreports.message_is_reportable": "此訊息具有有效簽名,因此容易受到欺詐性聊天檢舉的攻擊。",
"gui.wurst.generic.allcaps_blocked": "封鎖",
"gui.wurst.generic.allcaps_allowed": "允許"
}

View File

@ -28,13 +28,13 @@
"accessWidener" : "wurst.accesswidener",
"depends": {
"fabricloader": ">=0.12.12",
"fabric": ">=0.51.0",
"minecraft": ">=1.18.2-alpha.22.6.a",
"fabricloader": ">=0.14.9",
"fabric-api": ">=0.59.0",
"minecraft": "~1.18.2-alpha.22.6.a",
"java": ">=17"
},
"suggests": {
"flamingo": "*"
"mo_glass": "*"
},
"breaks": {
"wi_zoom": "*",