From 5d8ea002a5fb99366c5c952c3e1647390bb6d6d4 Mon Sep 17 00:00:00 2001 From: pcm1k Date: Fri, 8 Oct 2021 17:22:55 -0400 Subject: [PATCH 001/109] improve recognition of untranslated text --- src/main/java/net/wurstclient/util/GoogleTranslate.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/util/GoogleTranslate.java b/src/main/java/net/wurstclient/util/GoogleTranslate.java index 7c960b91..1a35969b 100644 --- a/src/main/java/net/wurstclient/util/GoogleTranslate.java +++ b/src/main/java/net/wurstclient/util/GoogleTranslate.java @@ -27,7 +27,8 @@ public class GoogleTranslate String html = getHTML(text, langFrom, langTo); String translated = parseHTML(html); - if(text.equalsIgnoreCase(translated)) + if(text.replaceAll("\\s", "").equalsIgnoreCase( + translated.replaceAll("\\s", ""))) return null; return translated; From 70f6111232bc5e2196a6c88ebb0763a9cac62496 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sat, 4 May 2024 21:33:33 +0200 Subject: [PATCH 002/109] [Wurst-Bot] Update to 24w18a --- gradle.properties | 10 +++++----- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index 0ce4b512..9c0ac3df 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,15 @@ org.gradle.parallel=true # Fabric Properties # check these at https://fabricmc.net/develop/ and # https://www.curseforge.com/minecraft/mc-mods/fabric-api -minecraft_version=1.20.6 -yarn_mappings=1.20.6+build.1 -loader_version=0.15.10 +minecraft_version=24w18a +yarn_mappings=24w18a+build.3 +loader_version=0.15.11 #Fabric api -fabric_version=0.97.8+1.20.6 +fabric_version=0.97.9+1.21 # Mod Properties -mod_version = v7.41.2-MC1.20.6 +mod_version = v7.41.2-MC24w18a maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index c901b895..ff689a8a 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -59,7 +59,7 @@ public enum WurstClient public static IMinecraftClient IMC; public static final String VERSION = "7.41.2"; - public static final String MC_VERSION = "1.20.6"; + public static final String MC_VERSION = "24w18a"; private WurstAnalytics analytics; private EventManager eventManager; From 509fc58fa0cb86c13b6faff33cc6f4ed2d9408d2 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 5 May 2024 19:39:47 +0200 Subject: [PATCH 003/109] Update to 24w18a --- .../clickgui/screens/AddBookOfferScreen.java | 21 ++++-- .../clickgui/screens/EditBookOfferScreen.java | 10 ++- .../screens/EditBookOffersScreen.java | 8 ++- .../net/wurstclient/commands/EnchantCmd.java | 21 ++++-- .../net/wurstclient/hacks/AutoArmorHack.java | 30 ++++++-- .../wurstclient/hacks/AutoLibrarianHack.java | 11 +-- .../net/wurstclient/hacks/AutoSwordHack.java | 10 +-- .../net/wurstclient/hacks/AutoToolHack.java | 24 +++++-- .../hacks/autofish/AutoFishRodSelector.java | 40 ++++++++--- .../hacks/autolibrarian/BookOffer.java | 69 +++++++++++++++---- .../settings/BookOffersSetting.java | 18 +++-- src/main/resources/fabric.mod.json | 4 +- 12 files changed, 197 insertions(+), 69 deletions(-) diff --git a/src/main/java/net/wurstclient/clickgui/screens/AddBookOfferScreen.java b/src/main/java/net/wurstclient/clickgui/screens/AddBookOfferScreen.java index 0322c2d6..ea12819f 100644 --- a/src/main/java/net/wurstclient/clickgui/screens/AddBookOfferScreen.java +++ b/src/main/java/net/wurstclient/clickgui/screens/AddBookOfferScreen.java @@ -24,10 +24,16 @@ import net.minecraft.enchantment.Enchantment; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.tag.EnchantmentTags; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.Util; +import net.wurstclient.WurstClient; import net.wurstclient.hacks.autolibrarian.BookOffer; import net.wurstclient.settings.BookOffersSetting; import net.wurstclient.util.ListWidget; @@ -352,8 +358,11 @@ public final class AddBookOfferScreen extends Screen super(mc, screen.width, screen.height, 32, screen.height - 80, 30); this.mc = mc; this.screen = screen; - list = Registries.ENCHANTMENT.stream().map(BookOffer::create) - .filter(BookOffer::isValid).sorted() + DynamicRegistryManager drm = + WurstClient.MC.world.getRegistryManager(); + Registry registry = drm.get(RegistryKeys.ENCHANTMENT); + list = registry.stream().map(BookOffer::create) + .filter(BookOffer::isFullyValid).sorted() .collect(Collectors.toList()); } @@ -410,16 +419,18 @@ public final class AddBookOfferScreen extends Screen TextRenderer tr = mc.textRenderer; BookOffer bookOffer = list.get(index); - Enchantment enchantment = bookOffer.getEnchantment(); + RegistryEntry enchantment = + bookOffer.getEnchantmentEntry().get(); String name = bookOffer.getEnchantmentName(); - int nameColor = enchantment.isCursed() ? 0xff5555 : 0xf0f0f0; + int nameColor = + enchantment.isIn(EnchantmentTags.CURSE) ? 0xff5555 : 0xf0f0f0; context.drawText(tr, name, x + 28, y, nameColor, false); context.drawText(tr, bookOffer.id(), x + 28, y + 9, 0xa0a0a0, false); - int maxLevel = enchantment.getMaxLevel(); + int maxLevel = enchantment.value().getMaxLevel(); String levels = maxLevel + (maxLevel == 1 ? " level" : " levels"); context.drawText(tr, levels, x + 28, y + 18, 0xa0a0a0, false); } diff --git a/src/main/java/net/wurstclient/clickgui/screens/EditBookOfferScreen.java b/src/main/java/net/wurstclient/clickgui/screens/EditBookOfferScreen.java index 5b33aeb4..efb42685 100644 --- a/src/main/java/net/wurstclient/clickgui/screens/EditBookOfferScreen.java +++ b/src/main/java/net/wurstclient/clickgui/screens/EditBookOfferScreen.java @@ -21,6 +21,8 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.registry.Registries; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.tag.EnchantmentTags; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.wurstclient.hacks.autolibrarian.BookOffer; @@ -126,7 +128,7 @@ public final class EditBookOfferScreen extends Screen addDrawableChild( saveButton = ButtonWidget.builder(Text.literal("Save"), b -> { - if(offerToSave == null || !offerToSave.isValid()) + if(offerToSave == null || !offerToSave.isFullyValid()) return; bookOffers.replace(index, offerToSave); @@ -274,8 +276,10 @@ public final class EditBookOfferScreen extends Screen BookOffer bookOffer = offerToSave; String name = bookOffer.getEnchantmentNameWithLevel(); - Enchantment enchantment = bookOffer.getEnchantment(); - int nameColor = enchantment.isCursed() ? 0xff5555 : 0xffffff; + RegistryEntry enchantment = + bookOffer.getEnchantmentEntry().get(); + int nameColor = + enchantment.isIn(EnchantmentTags.CURSE) ? 0xff5555 : 0xffffff; context.drawTextWithShadow(tr, name, x + 28, y, nameColor); context.drawText(tr, bookOffer.id(), x + 28, y + 9, 0xa0a0a0, false); diff --git a/src/main/java/net/wurstclient/clickgui/screens/EditBookOffersScreen.java b/src/main/java/net/wurstclient/clickgui/screens/EditBookOffersScreen.java index d834e115..a44b7c54 100644 --- a/src/main/java/net/wurstclient/clickgui/screens/EditBookOffersScreen.java +++ b/src/main/java/net/wurstclient/clickgui/screens/EditBookOffersScreen.java @@ -24,6 +24,8 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.registry.Registries; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.tag.EnchantmentTags; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.wurstclient.hacks.autolibrarian.BookOffer; @@ -270,8 +272,10 @@ public final class EditBookOffersScreen extends Screen BookOffer bookOffer = list.get(index); String name = bookOffer.getEnchantmentNameWithLevel(); - Enchantment enchantment = bookOffer.getEnchantment(); - int nameColor = enchantment.isCursed() ? 0xff5555 : 0xf0f0f0; + RegistryEntry enchantment = + bookOffer.getEnchantmentEntry().get(); + int nameColor = + enchantment.isIn(EnchantmentTags.CURSE) ? 0xff5555 : 0xf0f0f0; context.drawText(tr, name, x + 28, y, nameColor, false); context.drawText(tr, bookOffer.id(), x + 28, y + 9, 0xa0a0a0, diff --git a/src/main/java/net/wurstclient/commands/EnchantCmd.java b/src/main/java/net/wurstclient/commands/EnchantCmd.java index 121000ca..d74bc647 100644 --- a/src/main/java/net/wurstclient/commands/EnchantCmd.java +++ b/src/main/java/net/wurstclient/commands/EnchantCmd.java @@ -10,7 +10,11 @@ package net.wurstclient.commands; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.Enchantments; import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registries; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.tag.EnchantmentTags; import net.wurstclient.command.CmdError; import net.wurstclient.command.CmdException; import net.wurstclient.command.CmdSyntaxError; @@ -53,24 +57,27 @@ public final class EnchantCmd extends Command private void enchant(ItemStack stack, int level) { - for(Enchantment enchantment : Registries.ENCHANTMENT) + DynamicRegistryManager drm = MC.world.getRegistryManager(); + Registry registry = drm.get(RegistryKeys.ENCHANTMENT); + + for(RegistryEntry entry : registry.getIndexedEntries()) { // Skip curses - if(enchantment.isCursed()) + if(entry.isIn(EnchantmentTags.CURSE)) continue; // Skip Silk Touch so it doesn't remove Fortune - if(enchantment == Enchantments.SILK_TOUCH) + if(entry.getKey().orElse(null) == Enchantments.SILK_TOUCH) continue; // Limit Quick Charge to level 5 so it doesn't break - if(enchantment == Enchantments.QUICK_CHARGE) + if(entry.getKey().orElse(null) == Enchantments.QUICK_CHARGE) { - stack.addEnchantment(enchantment, Math.min(level, 5)); + stack.addEnchantment(entry, Math.min(level, 5)); continue; } - stack.addEnchantment(enchantment, level); + stack.addEnchantment(entry, level); } } diff --git a/src/main/java/net/wurstclient/hacks/AutoArmorHack.java b/src/main/java/net/wurstclient/hacks/AutoArmorHack.java index d3db46f8..a324be57 100644 --- a/src/main/java/net/wurstclient/hacks/AutoArmorHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoArmorHack.java @@ -10,6 +10,7 @@ package net.wurstclient.hacks; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Optional; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.InventoryScreen; @@ -17,14 +18,18 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ArmorItem; import net.minecraft.item.ArmorItem.Type; import net.minecraft.item.ItemStack; import net.minecraft.network.packet.c2s.play.ClickSlotC2SPacket; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry.Reference; import net.wurstclient.Category; import net.wurstclient.SearchTags; +import net.wurstclient.WurstClient; import net.wurstclient.events.PacketOutputListener; import net.wurstclient.events.UpdateListener; import net.wurstclient.hack.Hack; @@ -180,13 +185,24 @@ public final class AutoArmorHack extends Hack if(useEnchantments.isChecked()) { - Enchantment protection = Enchantments.PROTECTION; - int prtLvl = EnchantmentHelper.getLevel(protection, stack); + DynamicRegistryManager drm = + WurstClient.MC.world.getRegistryManager(); + Registry registry = drm.get(RegistryKeys.ENCHANTMENT); - ClientPlayerEntity player = MC.player; - DamageSource dmgSource = - player.getDamageSources().playerAttack(player); - prtPoints = protection.getProtectionAmount(prtLvl, dmgSource); + Optional> protection = + registry.getEntry(Enchantments.PROTECTION); + int prtLvl = protection + .map(entry -> EnchantmentHelper.getLevel(entry, stack)) + .orElse(0); + + // TODO: Only the server can calculate protection amount as of + // 24w18a. Might change back in later snapshots. + + // ClientPlayerEntity player = MC.player; + // DamageSource dmgSource = + // player.getDamageSources().playerAttack(player); + // prtPoints = protection.getProtectionAmount(prtLvl, dmgSource); + prtPoints = prtLvl; } return armorPoints * 5 + prtPoints * 3 + armorToughness + armorType; diff --git a/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java b/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java index 77836a77..9ea541a1 100644 --- a/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java @@ -74,10 +74,11 @@ public final class AutoLibrarianHack extends Hack + "You can also set a maximum price for each book, in case you" + " already have a villager selling it but you want it for a" + " cheaper price.", - "minecraft:depth_strider", "minecraft:efficiency", - "minecraft:feather_falling", "minecraft:fortune", "minecraft:looting", - "minecraft:mending", "minecraft:protection", "minecraft:respiration", - "minecraft:sharpness", "minecraft:silk_touch", "minecraft:unbreaking"); + "minecraft:depth_strider;3", "minecraft:efficiency;5", + "minecraft:feather_falling;4", "minecraft:fortune;3", + "minecraft:looting;3", "minecraft:mending;1", "minecraft:protection;4", + "minecraft:respiration;3", "minecraft:sharpness;5", + "minecraft:silk_touch;1", "minecraft:unbreaking;3"); private final CheckboxSetting lockInTrade = new CheckboxSetting( "Lock in trade", @@ -433,7 +434,7 @@ public final class AutoLibrarianHack extends Hack int price = tradeOffer.getDisplayedFirstBuyItem().getCount(); BookOffer bookOffer = new BookOffer(enchantment, level, price); - if(!bookOffer.isValid()) + if(!bookOffer.isFullyValid()) { System.out.println("Found invalid enchanted book offer.\n" + "Component data: " + enchantmentLevelMap); diff --git a/src/main/java/net/wurstclient/hacks/AutoSwordHack.java b/src/main/java/net/wurstclient/hacks/AutoSwordHack.java index 49efbf91..402984b6 100644 --- a/src/main/java/net/wurstclient/hacks/AutoSwordHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoSwordHack.java @@ -7,9 +7,7 @@ */ package net.wurstclient.hacks; -import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.item.Item; @@ -156,12 +154,16 @@ public final class AutoSwordHack extends Hack implements UpdateListener .getAttribute(item, EntityAttributes.GENERIC_ATTACK_SPEED) .orElseThrow(); + // TODO: Client-side item-specific attack damage calculation no + // longer exists as of 24w18a. Seems to be a bug, as this would make + // the damage tooltip inaccurate. Check if they add it back in later + // snapshots. case DAMAGE: - EntityType group = entity.getType(); + // EntityType group = entity.getType(); float dmg = (float)ItemUtils .getAttribute(item, EntityAttributes.GENERIC_ATTACK_DAMAGE) .orElseThrow(); - dmg += EnchantmentHelper.getAttackDamage(stack, group); + // dmg += EnchantmentHelper.getAttackDamage(stack, group); return dmg; } diff --git a/src/main/java/net/wurstclient/hacks/AutoToolHack.java b/src/main/java/net/wurstclient/hacks/AutoToolHack.java index f3203071..15481a9f 100644 --- a/src/main/java/net/wurstclient/hacks/AutoToolHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoToolHack.java @@ -7,16 +7,24 @@ */ package net.wurstclient.hacks; +import java.util.Optional; + import net.minecraft.block.BlockState; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry.Reference; import net.minecraft.util.math.BlockPos; import net.wurstclient.Category; import net.wurstclient.SearchTags; +import net.wurstclient.WurstClient; import net.wurstclient.events.BlockBreakingProgressListener; import net.wurstclient.events.UpdateListener; import net.wurstclient.hack.Hack; @@ -180,10 +188,18 @@ public final class AutoToolHack extends Hack if(speed > 1) { - int efficiency = - EnchantmentHelper.getLevel(Enchantments.EFFICIENCY, stack); - if(efficiency > 0 && !stack.isEmpty()) - speed += efficiency * efficiency + 1; + DynamicRegistryManager drm = + WurstClient.MC.world.getRegistryManager(); + Registry registry = drm.get(RegistryKeys.ENCHANTMENT); + + Optional> efficiency = + registry.getEntry(Enchantments.EFFICIENCY); + int effLvl = efficiency + .map(entry -> EnchantmentHelper.getLevel(entry, stack)) + .orElse(0); + + if(effLvl > 0 && !stack.isEmpty()) + speed += effLvl * effLvl + 1; } return speed; diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java index d3544547..05fb6799 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishRodSelector.java @@ -7,15 +7,22 @@ */ package net.wurstclient.hacks.autofish; +import java.util.Optional; import java.util.stream.IntStream; import java.util.stream.Stream; import net.minecraft.client.MinecraftClient; +import net.minecraft.component.EnchantmentEffectComponentTypes; +import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.FishingRodItem; import net.minecraft.item.ItemStack; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry.Reference; import net.wurstclient.WurstClient; import net.wurstclient.hacks.AutoFishHack; import net.wurstclient.settings.CheckboxSetting; @@ -128,14 +135,31 @@ public final class AutoFishRodSelector if(stack.isEmpty() || !(stack.getItem() instanceof FishingRodItem)) return -1; - int luckOTSLvl = - EnchantmentHelper.getLevel(Enchantments.LUCK_OF_THE_SEA, stack); - int lureLvl = EnchantmentHelper.getLevel(Enchantments.LURE, stack); - int unbreakingLvl = - EnchantmentHelper.getLevel(Enchantments.UNBREAKING, stack); - int mendingBonus = - EnchantmentHelper.getLevel(Enchantments.MENDING, stack); - int noVanishBonus = EnchantmentHelper.hasVanishingCurse(stack) ? 0 : 1; + DynamicRegistryManager drm = MC.world.getRegistryManager(); + Registry registry = drm.get(RegistryKeys.ENCHANTMENT); + + Optional> luckOTS = + registry.getEntry(Enchantments.LUCK_OF_THE_SEA); + int luckOTSLvl = luckOTS + .map(entry -> EnchantmentHelper.getLevel(entry, stack)).orElse(0); + + Optional> lure = + registry.getEntry(Enchantments.LURE); + int lureLvl = lure + .map(entry -> EnchantmentHelper.getLevel(entry, stack)).orElse(0); + + Optional> unbreaking = + registry.getEntry(Enchantments.UNBREAKING); + int unbreakingLvl = unbreaking + .map(entry -> EnchantmentHelper.getLevel(entry, stack)).orElse(0); + + Optional> mending = + registry.getEntry(Enchantments.MENDING); + int mendingBonus = mending + .map(entry -> EnchantmentHelper.getLevel(entry, stack)).orElse(0); + + int noVanishBonus = EnchantmentHelper.hasAnyEnchantmentsWith(stack, + EnchantmentEffectComponentTypes.PREVENT_EQUIPMENT_DROP) ? 0 : 1; return luckOTSLvl * 9 + lureLvl * 9 + unbreakingLvl * 2 + mendingBonus + noVanishBonus; diff --git a/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java b/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java index 08507a92..1a03adca 100644 --- a/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java +++ b/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java @@ -8,11 +8,19 @@ package net.wurstclient.hacks.autolibrarian; import java.util.Objects; +import java.util.Optional; import net.minecraft.client.resource.language.TranslationStorage; import net.minecraft.enchantment.Enchantment; -import net.minecraft.registry.Registries; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.tag.EnchantmentTags; +import net.minecraft.text.Text; +import net.minecraft.text.TranslatableTextContent; import net.minecraft.util.Identifier; +import net.wurstclient.WurstClient; import net.wurstclient.mixinterface.ILanguageManager; public record BookOffer(String id, int level, int price) @@ -20,27 +28,50 @@ public record BookOffer(String id, int level, int price) { public static BookOffer create(Enchantment enchantment) { - Identifier id = Registries.ENCHANTMENT.getId(enchantment); + DynamicRegistryManager drm = WurstClient.MC.world.getRegistryManager(); + Registry registry = drm.get(RegistryKeys.ENCHANTMENT); + Identifier id = registry.getId(enchantment); return new BookOffer("" + id, enchantment.getMaxLevel(), 64); } + public Optional> getEnchantmentEntry() + { + if(WurstClient.MC.world == null) + return Optional.empty(); + + DynamicRegistryManager drm = WurstClient.MC.world.getRegistryManager(); + Registry registry = drm.get(RegistryKeys.ENCHANTMENT); + return registry.getEntry(new Identifier(id)); + } + public Enchantment getEnchantment() { - return Registries.ENCHANTMENT.get(new Identifier(id)); + return getEnchantmentEntry().map(RegistryEntry::value).orElse(null); } public String getEnchantmentName() { - TranslationStorage english = ILanguageManager.getEnglish(); - Enchantment enchantment = getEnchantment(); - return english.get(enchantment.getTranslationKey()); + Text description = getEnchantment().description(); + if(description.getContent() instanceof TranslatableTextContent tr) + { + TranslationStorage english = ILanguageManager.getEnglish(); + return english.get(tr.getKey()); + } + + return description.getString(); } public String getEnchantmentNameWithLevel() { TranslationStorage english = ILanguageManager.getEnglish(); Enchantment enchantment = getEnchantment(); - String name = english.get(enchantment.getTranslationKey()); + String name; + + if(enchantment.description() + .getContent() instanceof TranslatableTextContent tr) + name = english.get(tr.getKey()); + else + name = enchantment.description().getString(); if(enchantment.getMaxLevel() > 1) name += " " + english.get("enchantment.level." + level); @@ -53,12 +84,26 @@ public record BookOffer(String id, int level, int price) return price + " emerald" + (price == 1 ? "" : "s"); } - public boolean isValid() + /** + * Fully validates the book offer using the dynamic enchantment registry. + * Will return false if called while the user is not in a world or server. + */ + public boolean isFullyValid() { - Enchantment enchantment = getEnchantment(); - return enchantment != null - && enchantment.isAvailableForEnchantedBookOffer() && level >= 1 - && level <= enchantment.getMaxLevel() && price >= 1 && price <= 64; + return isMostlyValid() && getEnchantmentEntry() + .map(entry -> entry.isIn(EnchantmentTags.TRADEABLE) + && level <= entry.value().getMaxLevel()) + .orElse(false); + } + + /** + * Tries to validate the book offer without using dynamic registries, which + * aren't loaded until the user enters a world or server. + */ + public boolean isMostlyValid() + { + return Identifier.isValid(id) && level >= 1 && price >= 1 + && price <= 64; } @Override diff --git a/src/main/java/net/wurstclient/settings/BookOffersSetting.java b/src/main/java/net/wurstclient/settings/BookOffersSetting.java index 3ff6bb34..c275dfd8 100644 --- a/src/main/java/net/wurstclient/settings/BookOffersSetting.java +++ b/src/main/java/net/wurstclient/settings/BookOffersSetting.java @@ -19,8 +19,6 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; import net.wurstclient.WurstClient; import net.wurstclient.clickgui.Component; import net.wurstclient.clickgui.components.BookOffersEditButton; @@ -41,10 +39,10 @@ public final class BookOffersSetting extends Setting { super(name, description); - Arrays.stream(enchantments) - .map(s -> Registries.ENCHANTMENT.get(new Identifier(s))) - .filter(Objects::nonNull).map(BookOffer::create) - .filter(BookOffer::isValid).distinct().sorted() + Arrays.stream(enchantments).filter(Objects::nonNull).map(s -> { + String[] parts = s.split(";"); + return new BookOffer(parts[0], Integer.parseInt(parts[1]), 64); + }).filter(BookOffer::isMostlyValid).distinct().sorted() .forEach(offers::add); defaultOffers = offers.toArray(new BookOffer[0]); } @@ -79,7 +77,7 @@ public final class BookOffersSetting extends Setting public void add(BookOffer offer) { // check if offer is valid - if(offer == null || !offer.isValid()) + if(offer == null || !offer.isFullyValid()) return; // check if an equal offer is already in the list @@ -112,7 +110,7 @@ public final class BookOffersSetting extends Setting return; // check if new offer is valid - if(offer == null || !offer.isValid()) + if(offer == null || !offer.isFullyValid()) return; // check if new offer is different and already in the list @@ -152,8 +150,8 @@ public final class BookOffersSetting extends Setting offers.clear(); wson.getAllObjects().parallelStream().map(this::loadOffer) - .filter(Objects::nonNull).filter(BookOffer::isValid).distinct() - .sorted().forEachOrdered(offers::add); + .filter(Objects::nonNull).filter(BookOffer::isMostlyValid) + .distinct().sorted().forEachOrdered(offers::add); }catch(JsonException e) { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 69f539f1..f9c3566c 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,8 +30,8 @@ "depends": { "fabricloader": ">=0.15.9", - "fabric-api": ">=0.97.1", - "minecraft": "~1.20.5-alpha.24.13.a", + "fabric-api": ">=0.97.9", + "minecraft": "~1.21-alpha.24.18.a", "java": ">=21" }, "suggests": { From e0971f9fc7adcf588a1891ef5f0f1bc41d749c9b Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 10 May 2024 18:23:51 +0200 Subject: [PATCH 004/109] [Wurst-Bot] Update to 24w19b --- gradle.properties | 8 ++++---- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9c0ac3df..a11270ab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,15 @@ org.gradle.parallel=true # Fabric Properties # check these at https://fabricmc.net/develop/ and # https://www.curseforge.com/minecraft/mc-mods/fabric-api -minecraft_version=24w18a -yarn_mappings=24w18a+build.3 +minecraft_version=24w19b +yarn_mappings=24w19b+build.3 loader_version=0.15.11 #Fabric api -fabric_version=0.97.9+1.21 +fabric_version=0.98.1+1.21 # Mod Properties -mod_version = v7.41.2-MC24w18a +mod_version = v7.41.2-MC24w19b maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index ff689a8a..66ec214d 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -59,7 +59,7 @@ public enum WurstClient public static IMinecraftClient IMC; public static final String VERSION = "7.41.2"; - public static final String MC_VERSION = "24w18a"; + public static final String MC_VERSION = "24w19b"; private WurstAnalytics analytics; private EventManager eventManager; From f067b85a9ae23c9cd532b23a84ddd6994cc059de Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 10 May 2024 19:22:38 +0200 Subject: [PATCH 005/109] Update to 24w19b --- src/main/java/net/wurstclient/hacks/AutoArmorHack.java | 6 +++--- src/main/java/net/wurstclient/hacks/AutoSoupHack.java | 9 +++++++-- src/main/java/net/wurstclient/hacks/AutoSwordHack.java | 6 ++---- src/main/resources/fabric.mod.json | 4 ++-- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoArmorHack.java b/src/main/java/net/wurstclient/hacks/AutoArmorHack.java index a324be57..964b04f3 100644 --- a/src/main/java/net/wurstclient/hacks/AutoArmorHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoArmorHack.java @@ -195,13 +195,13 @@ public final class AutoArmorHack extends Hack .map(entry -> EnchantmentHelper.getLevel(entry, stack)) .orElse(0); - // TODO: Only the server can calculate protection amount as of - // 24w18a. Might change back in later snapshots. - // ClientPlayerEntity player = MC.player; // DamageSource dmgSource = // player.getDamageSources().playerAttack(player); // prtPoints = protection.getProtectionAmount(prtLvl, dmgSource); + + // Only the server can calculate protection amount as of + // 24w18a (1.21). Related bug: MC-196250 prtPoints = prtLvl; } diff --git a/src/main/java/net/wurstclient/hacks/AutoSoupHack.java b/src/main/java/net/wurstclient/hacks/AutoSoupHack.java index d49d10ca..ea09f6a7 100644 --- a/src/main/java/net/wurstclient/hacks/AutoSoupHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoSoupHack.java @@ -7,15 +7,17 @@ */ package net.wurstclient.hacks; +import java.util.List; + import net.minecraft.block.Block; import net.minecraft.block.BlockWithEntity; import net.minecraft.block.CraftingTableBlock; import net.minecraft.entity.Entity; import net.minecraft.entity.passive.TameableEntity; import net.minecraft.entity.passive.VillagerEntity; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.item.StewItem; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.hit.HitResult; @@ -122,11 +124,14 @@ public final class AutoSoupHack extends Hack implements UpdateListener private int findSoup(int startSlot, int endSlot) { + List stews = List.of(Items.MUSHROOM_STEW, Items.RABBIT_STEW, + Items.BEETROOT_SOUP); + for(int i = startSlot; i < endSlot; i++) { ItemStack stack = MC.player.getInventory().getStack(i); - if(stack != null && stack.getItem() instanceof StewItem) + if(stack != null && stews.contains(stack.getItem())) return i; } diff --git a/src/main/java/net/wurstclient/hacks/AutoSwordHack.java b/src/main/java/net/wurstclient/hacks/AutoSwordHack.java index 402984b6..40deb7d3 100644 --- a/src/main/java/net/wurstclient/hacks/AutoSwordHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoSwordHack.java @@ -154,10 +154,8 @@ public final class AutoSwordHack extends Hack implements UpdateListener .getAttribute(item, EntityAttributes.GENERIC_ATTACK_SPEED) .orElseThrow(); - // TODO: Client-side item-specific attack damage calculation no - // longer exists as of 24w18a. Seems to be a bug, as this would make - // the damage tooltip inaccurate. Check if they add it back in later - // snapshots. + // Client-side item-specific attack damage calculation no + // longer exists as of 24w18a (1.21). Related bug: MC-196250 case DAMAGE: // EntityType group = entity.getType(); float dmg = (float)ItemUtils diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f9c3566c..f042079b 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,8 +30,8 @@ "depends": { "fabricloader": ">=0.15.9", - "fabric-api": ">=0.97.9", - "minecraft": "~1.21-alpha.24.18.a", + "fabric-api": ">=0.98.1", + "minecraft": "~1.21-alpha.24.19.a", "java": ">=21" }, "suggests": { From 3a03086e4c6799c7e4f3a0e4266a809edae679bb Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 16 May 2024 21:00:02 +0200 Subject: [PATCH 006/109] [Wurst-Bot] Update to 24w20a --- gradle.properties | 8 ++++---- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index a11270ab..01bfbcca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,15 @@ org.gradle.parallel=true # Fabric Properties # check these at https://fabricmc.net/develop/ and # https://www.curseforge.com/minecraft/mc-mods/fabric-api -minecraft_version=24w19b -yarn_mappings=24w19b+build.3 +minecraft_version=24w20a +yarn_mappings=24w20a+build.3 loader_version=0.15.11 #Fabric api -fabric_version=0.98.1+1.21 +fabric_version=0.98.2+1.21 # Mod Properties -mod_version = v7.41.2-MC24w19b +mod_version = v7.41.2-MC24w20a maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 66ec214d..1ef698e4 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -59,7 +59,7 @@ public enum WurstClient public static IMinecraftClient IMC; public static final String VERSION = "7.41.2"; - public static final String MC_VERSION = "24w19b"; + public static final String MC_VERSION = "24w20a"; private WurstAnalytics analytics; private EventManager eventManager; From 0d188f60db04e8d11076b6729352d6fda0016b71 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 16 May 2024 21:32:20 +0200 Subject: [PATCH 007/109] Update to 24w20a --- .../wurstclient/mixin/GameRendererMixin.java | 17 ++++++++++------- .../net/wurstclient/mixin/IngameHudMixin.java | 8 +++++--- ....java => RenderTickCounterDynamicMixin.java} | 6 +++--- src/main/resources/fabric.mod.json | 4 ++-- src/main/resources/wurst.mixins.json | 2 +- 5 files changed, 21 insertions(+), 16 deletions(-) rename src/main/java/net/wurstclient/mixin/{RenderTickCounterMixin.java => RenderTickCounterDynamicMixin.java} (83%) diff --git a/src/main/java/net/wurstclient/mixin/GameRendererMixin.java b/src/main/java/net/wurstclient/mixin/GameRendererMixin.java index 172024d8..e85194c7 100644 --- a/src/main/java/net/wurstclient/mixin/GameRendererMixin.java +++ b/src/main/java/net/wurstclient/mixin/GameRendererMixin.java @@ -21,6 +21,7 @@ import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.client.render.Camera; import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.render.RenderTickCounter; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -42,8 +43,9 @@ public abstract class GameRendererMixin implements AutoCloseable */ @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/GameRenderer;bobView(Lnet/minecraft/client/util/math/MatrixStack;F)V", - ordinal = 0), method = "renderWorld(FJ)V") - private void onRenderWorldViewBobbing(float tickDelta, long limitTime, + ordinal = 0), + method = "renderWorld(Lnet/minecraft/client/render/RenderTickCounter;)V") + private void onRenderWorldViewBobbing(RenderTickCounter tickCounter, CallbackInfo ci) { CameraTransformViewBobbingEvent event = @@ -89,9 +91,10 @@ public abstract class GameRendererMixin implements AutoCloseable target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z", opcode = Opcodes.GETFIELD, ordinal = 0), - method = "renderWorld(FJ)V") - private void onRenderWorld(float tickDelta, long limitTime, CallbackInfo ci, - @Local(ordinal = 1) Matrix4f matrix4f2) + method = "renderWorld(Lnet/minecraft/client/render/RenderTickCounter;)V") + private void onRenderWorldHandRendering(RenderTickCounter tickCounter, + CallbackInfo ci, @Local(ordinal = 1) Matrix4f matrix4f2, + @Local(ordinal = 1) float tickDelta) { MatrixStack matrixStack = new MatrixStack(); matrixStack.multiplyPositionMatrix(matrix4f2); @@ -130,8 +133,8 @@ public abstract class GameRendererMixin implements AutoCloseable at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;lerp(FFF)F", ordinal = 0), - method = "renderWorld(FJ)V") - private float wurstNauseaLerp(float delta, float start, float end, + method = "renderWorld(Lnet/minecraft/client/render/RenderTickCounter;)V") + private float onRenderWorldNauseaLerp(float delta, float start, float end, Operation original) { if(!WurstClient.INSTANCE.getHax().antiWobbleHack.isEnabled()) diff --git a/src/main/java/net/wurstclient/mixin/IngameHudMixin.java b/src/main/java/net/wurstclient/mixin/IngameHudMixin.java index 395b7830..53aaa08e 100644 --- a/src/main/java/net/wurstclient/mixin/IngameHudMixin.java +++ b/src/main/java/net/wurstclient/mixin/IngameHudMixin.java @@ -17,6 +17,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.DebugHud; import net.minecraft.client.gui.hud.InGameHud; +import net.minecraft.client.render.RenderTickCounter; import net.minecraft.util.Identifier; import net.wurstclient.WurstClient; import net.wurstclient.event.EventManager; @@ -32,13 +33,14 @@ public class IngameHudMixin // runs after renderScoreboardSidebar() // and before playerListHud.setVisible() @Inject(at = @At("HEAD"), - method = "renderPlayerList(Lnet/minecraft/client/gui/DrawContext;F)V") - private void onRenderPlayerList(DrawContext context, float tickDelta, - CallbackInfo ci) + method = "renderPlayerList(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/client/render/RenderTickCounter;)V") + private void onRenderPlayerList(DrawContext context, + RenderTickCounter tickCounter, CallbackInfo ci) { if(debugHud.shouldShowDebugHud()) return; + float tickDelta = tickCounter.getTickDelta(true); EventManager.fire(new GUIRenderEvent(context, tickDelta)); } diff --git a/src/main/java/net/wurstclient/mixin/RenderTickCounterMixin.java b/src/main/java/net/wurstclient/mixin/RenderTickCounterDynamicMixin.java similarity index 83% rename from src/main/java/net/wurstclient/mixin/RenderTickCounterMixin.java rename to src/main/java/net/wurstclient/mixin/RenderTickCounterDynamicMixin.java index adbd84dc..ab83a599 100644 --- a/src/main/java/net/wurstclient/mixin/RenderTickCounterMixin.java +++ b/src/main/java/net/wurstclient/mixin/RenderTickCounterDynamicMixin.java @@ -17,14 +17,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.minecraft.client.render.RenderTickCounter; import net.wurstclient.WurstClient; -@Mixin(RenderTickCounter.class) -public abstract class RenderTickCounterMixin +@Mixin(RenderTickCounter.Dynamic.class) +public abstract class RenderTickCounterDynamicMixin { @Shadow public float lastFrameDuration; @Inject(at = @At(value = "FIELD", - target = "Lnet/minecraft/client/render/RenderTickCounter;prevTimeMillis:J", + target = "Lnet/minecraft/client/render/RenderTickCounter$Dynamic;prevTimeMillis:J", opcode = Opcodes.PUTFIELD, ordinal = 0), method = "beginRenderTick(J)I") public void onBeginRenderTick(long timeMillis, diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f042079b..e17259ce 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,8 +30,8 @@ "depends": { "fabricloader": ">=0.15.9", - "fabric-api": ">=0.98.1", - "minecraft": "~1.21-alpha.24.19.a", + "fabric-api": ">=0.98.2", + "minecraft": "~1.21-alpha.24.20.a", "java": ">=21" }, "suggests": { diff --git a/src/main/resources/wurst.mixins.json b/src/main/resources/wurst.mixins.json index dcd42d45..f08363ff 100644 --- a/src/main/resources/wurst.mixins.json +++ b/src/main/resources/wurst.mixins.json @@ -53,7 +53,7 @@ "PlayerInventoryMixin", "PlayerSkinProviderMixin", "PowderSnowBlockMixin", - "RenderTickCounterMixin", + "RenderTickCounterDynamicMixin", "ScreenMixin", "ShulkerBoxScreenMixin", "SimpleOptionMixin", From 88a7760e90d9fd55bdee6c178bd43f986be42863 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 23 May 2024 13:40:33 +0200 Subject: [PATCH 008/109] [Wurst-Bot] Update to 24w21b --- gradle.properties | 8 ++++---- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 27618b3d..62883df9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,15 @@ org.gradle.parallel=true # Fabric Properties # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions -minecraft_version=24w20a -yarn_mappings=24w20a+build.3 +minecraft_version=24w21b +yarn_mappings=24w21b+build.3 loader_version=0.15.11 # Fabric API -fabric_version=0.98.2+1.21 +fabric_version=0.99.1+1.21 # Mod Properties -mod_version = v7.42-MC24w20a +mod_version = v7.42-MC24w21b maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 4aa894ff..82ac0f29 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -59,7 +59,7 @@ public enum WurstClient public static IMinecraftClient IMC; public static final String VERSION = "7.42"; - public static final String MC_VERSION = "24w20a"; + public static final String MC_VERSION = "24w21b"; private WurstAnalytics analytics; private EventManager eventManager; From fc3489ff7ce102a3bffcd47b78d5311e5428afd6 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 23 May 2024 17:11:57 +0200 Subject: [PATCH 009/109] Update to 24w21b --- .../java/net/wurstclient/ai/PathRenderer.java | 107 ++- .../wurstclient/altmanager/AltRenderer.java | 20 +- .../altmanager/screens/AltEditorScreen.java | 16 +- .../altmanager/screens/AltManagerScreen.java | 32 +- .../net/wurstclient/clickgui/ClickGui.java | 492 +++++------ .../wurstclient/clickgui/ComboBoxPopup.java | 33 +- .../components/AbstractListEditButton.java | 44 +- .../clickgui/components/BlockComponent.java | 16 +- .../components/CheckboxComponent.java | 90 +- .../clickgui/components/ColorComponent.java | 47 +- .../components/ComboBoxComponent.java | 85 +- .../clickgui/components/FeatureButton.java | 86 +- .../clickgui/components/FileComponent.java | 44 +- .../clickgui/components/RadarComponent.java | 56 +- .../clickgui/components/SliderComponent.java | 122 ++- .../components/TextFieldEditButton.java | 44 +- .../clickgui/screens/AddBookOfferScreen.java | 2 +- .../clickgui/screens/EditBookOfferScreen.java | 2 +- .../screens/EditBookOffersScreen.java | 2 +- .../clickgui/screens/EditColorScreen.java | 2 +- .../clickgui/screens/EditItemListScreen.java | 2 +- .../wurstclient/commands/BlockListCmd.java | 2 +- .../net/wurstclient/commands/GiveCmd.java | 2 +- .../net/wurstclient/commands/PotionCmd.java | 2 +- .../net/wurstclient/commands/SetBlockCmd.java | 2 +- .../net/wurstclient/commands/TacoCmd.java | 8 +- .../net/wurstclient/hacks/BaseFinderHack.java | 11 +- .../net/wurstclient/hacks/BowAimbotHack.java | 16 +- .../wurstclient/hacks/CameraDistanceHack.java | 2 +- .../net/wurstclient/hacks/CaveFinderHack.java | 11 +- .../net/wurstclient/hacks/ExcavatorHack.java | 16 +- .../net/wurstclient/hacks/FreecamHack.java | 16 +- .../net/wurstclient/hacks/ItemEspHack.java | 18 +- .../java/net/wurstclient/hacks/LsdHack.java | 2 +- .../net/wurstclient/hacks/MobEspHack.java | 12 +- .../wurstclient/hacks/MobSpawnEspHack.java | 43 +- .../net/wurstclient/hacks/PlayerEspHack.java | 15 +- .../net/wurstclient/hacks/SearchHack.java | 11 +- .../wurstclient/hacks/TrajectoriesHack.java | 17 +- .../net/wurstclient/hacks/TunnellerHack.java | 30 +- .../hacks/autofarm/AutoFarmRenderer.java | 39 +- .../hacks/autofish/AutoFishDebugDraw.java | 16 +- .../hacks/autolibrarian/BookOffer.java | 2 +- .../hacks/chestesp/ChestEspRenderer.java | 18 +- .../newchunks/NewChunksChunkRenderer.java | 4 +- .../newchunks/NewChunksOutlineRenderer.java | 28 +- .../newchunks/NewChunksReasonsRenderer.java | 60 +- .../hacks/newchunks/NewChunksRenderer.java | 4 +- .../newchunks/NewChunksSquareRenderer.java | 20 +- .../hacks/portalesp/PortalEspRenderer.java | 18 +- .../net/wurstclient/hacks/treebot/Tree.java | 9 +- src/main/java/net/wurstclient/hud/TabGui.java | 84 +- .../java/net/wurstclient/hud/WurstLogo.java | 18 +- .../net/wurstclient/mixin/CameraMixin.java | 10 +- .../mixin/ClientPlayerEntityMixin.java | 8 +- .../mixin/DisconnectedScreenMixin.java | 4 +- .../mixin/GameMenuScreenMixin.java | 2 +- .../navigator/NavigatorFeatureScreen.java | 46 +- .../navigator/NavigatorMainScreen.java | 69 +- .../navigator/NavigatorScreen.java | 112 ++- .../settings/BlockListSetting.java | 4 +- .../wurstclient/settings/ItemListSetting.java | 4 +- .../java/net/wurstclient/util/BlockUtils.java | 4 +- .../java/net/wurstclient/util/ItemUtils.java | 2 +- .../java/net/wurstclient/util/ListWidget.java | 252 +++--- .../net/wurstclient/util/RenderUtils.java | 790 +++++++----------- src/main/resources/fabric.mod.json | 4 +- 67 files changed, 1516 insertions(+), 1695 deletions(-) diff --git a/src/main/java/net/wurstclient/ai/PathRenderer.java b/src/main/java/net/wurstclient/ai/PathRenderer.java index d29b1a4c..09a179da 100644 --- a/src/main/java/net/wurstclient/ai/PathRenderer.java +++ b/src/main/java/net/wurstclient/ai/PathRenderer.java @@ -13,6 +13,7 @@ import org.joml.Vector3f; import com.mojang.blaze3d.systems.RenderSystem; 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; @@ -27,10 +28,9 @@ public final class PathRenderer BlockPos end, RegionPos region) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); int startX = start.getX() - region.x(); int startY = start.getY(); @@ -44,8 +44,8 @@ public final class PathRenderer Matrix4f matrix = matrixStack.peek().getPositionMatrix(); // main line - bufferBuilder.vertex(matrix, startX, startY, startZ).next(); - bufferBuilder.vertex(matrix, endX, endY, endZ).next(); + bufferBuilder.vertex(matrix, startX, startY, startZ); + bufferBuilder.vertex(matrix, endX, endY, endZ); matrixStack.translate(endX, endY, endZ); @@ -64,39 +64,39 @@ public final class PathRenderer matrix.rotate(zAngle, new Vector3f(0, 0, 1)); // arrow head - bufferBuilder.vertex(matrix, 0, 2, 1).next(); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 2, 1); + bufferBuilder.vertex(matrix, -1, 2, 0); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); + bufferBuilder.vertex(matrix, -1, 2, 0); + bufferBuilder.vertex(matrix, 0, 2, -1); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 2, -1); + bufferBuilder.vertex(matrix, 1, 2, 0); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); + bufferBuilder.vertex(matrix, 1, 2, 0); + bufferBuilder.vertex(matrix, 0, 2, 1); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); + bufferBuilder.vertex(matrix, 1, 2, 0); + bufferBuilder.vertex(matrix, -1, 2, 0); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); + bufferBuilder.vertex(matrix, 0, 2, 1); + bufferBuilder.vertex(matrix, 0, 2, -1); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, 1, 2, 0); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, -1, 2, 0); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, 0, 2, -1); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, 0, 2, 1); matrixStack.pop(); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public static void renderNode(MatrixStack matrixStack, BlockPos pos, @@ -110,52 +110,51 @@ public final class PathRenderer Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); // middle part - bufferBuilder.vertex(matrix, 0, 0, 1).next(); - bufferBuilder.vertex(matrix, -1, 0, 0).next(); + bufferBuilder.vertex(matrix, 0, 0, 1); + bufferBuilder.vertex(matrix, -1, 0, 0); - bufferBuilder.vertex(matrix, -1, 0, 0).next(); - bufferBuilder.vertex(matrix, 0, 0, -1).next(); + bufferBuilder.vertex(matrix, -1, 0, 0); + bufferBuilder.vertex(matrix, 0, 0, -1); - bufferBuilder.vertex(matrix, 0, 0, -1).next(); - bufferBuilder.vertex(matrix, 1, 0, 0).next(); + bufferBuilder.vertex(matrix, 0, 0, -1); + bufferBuilder.vertex(matrix, 1, 0, 0); - bufferBuilder.vertex(matrix, 1, 0, 0).next(); - bufferBuilder.vertex(matrix, 0, 0, 1).next(); + bufferBuilder.vertex(matrix, 1, 0, 0); + bufferBuilder.vertex(matrix, 0, 0, 1); // top part - bufferBuilder.vertex(matrix, 0, 1, 0).next(); - bufferBuilder.vertex(matrix, 1, 0, 0).next(); + bufferBuilder.vertex(matrix, 0, 1, 0); + bufferBuilder.vertex(matrix, 1, 0, 0); - bufferBuilder.vertex(matrix, 0, 1, 0).next(); - bufferBuilder.vertex(matrix, -1, 0, 0).next(); + bufferBuilder.vertex(matrix, 0, 1, 0); + bufferBuilder.vertex(matrix, -1, 0, 0); - bufferBuilder.vertex(matrix, 0, 1, 0).next(); - bufferBuilder.vertex(matrix, 0, 0, -1).next(); + bufferBuilder.vertex(matrix, 0, 1, 0); + bufferBuilder.vertex(matrix, 0, 0, -1); - bufferBuilder.vertex(matrix, 0, 1, 0).next(); - bufferBuilder.vertex(matrix, 0, 0, 1).next(); + bufferBuilder.vertex(matrix, 0, 1, 0); + bufferBuilder.vertex(matrix, 0, 0, 1); // bottom part - bufferBuilder.vertex(matrix, 0, -1, 0).next(); - bufferBuilder.vertex(matrix, 1, 0, 0).next(); + bufferBuilder.vertex(matrix, 0, -1, 0); + bufferBuilder.vertex(matrix, 1, 0, 0); - bufferBuilder.vertex(matrix, 0, -1, 0).next(); - bufferBuilder.vertex(matrix, -1, 0, 0).next(); + bufferBuilder.vertex(matrix, 0, -1, 0); + bufferBuilder.vertex(matrix, -1, 0, 0); - bufferBuilder.vertex(matrix, 0, -1, 0).next(); - bufferBuilder.vertex(matrix, 0, 0, -1).next(); + bufferBuilder.vertex(matrix, 0, -1, 0); + bufferBuilder.vertex(matrix, 0, 0, -1); - bufferBuilder.vertex(matrix, 0, -1, 0).next(); - bufferBuilder.vertex(matrix, 0, 0, 1).next(); + bufferBuilder.vertex(matrix, 0, -1, 0); + bufferBuilder.vertex(matrix, 0, 0, 1); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); matrixStack.pop(); } diff --git a/src/main/java/net/wurstclient/altmanager/AltRenderer.java b/src/main/java/net/wurstclient/altmanager/AltRenderer.java index 57f26c11..2231bef6 100644 --- a/src/main/java/net/wurstclient/altmanager/AltRenderer.java +++ b/src/main/java/net/wurstclient/altmanager/AltRenderer.java @@ -67,18 +67,14 @@ public final class AltRenderer RenderSystem.setShader(GameRenderer::getPositionTexProgram); MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix4f = matrixStack.peek().getPositionMatrix(); - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_TEXTURE); - bufferBuilder.vertex(matrix4f, x, y, z).texture(uOverFw, vOverFh) - .next(); - bufferBuilder.vertex(matrix4f, x, y2, z).texture(uOverFw, vPlusHOverFh) - .next(); - bufferBuilder.vertex(matrix4f, x2, y2, z) - .texture(uPlusWOverFw, vPlusHOverFh).next(); - bufferBuilder.vertex(matrix4f, x2, y, z).texture(uPlusWOverFw, vOverFh) - .next(); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); + BufferBuilder bufferBuilder = Tessellator.getInstance().method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE); + bufferBuilder.vertex(matrix4f, x, y, z).texture(uOverFw, vOverFh); + bufferBuilder.vertex(matrix4f, x, y2, z).texture(uOverFw, vPlusHOverFh); + bufferBuilder.vertex(matrix4f, x2, y2, z).texture(uPlusWOverFw, + vPlusHOverFh); + bufferBuilder.vertex(matrix4f, x2, y, z).texture(uPlusWOverFw, vOverFh); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public static void drawAltFace(DrawContext context, String name, int x, diff --git a/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java b/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java index 531a9b97..7d666aac 100644 --- a/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java +++ b/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java @@ -34,6 +34,7 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TextFieldWidget; 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; @@ -349,7 +350,6 @@ public abstract class AltEditorScreen extends Screen MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // skin preview @@ -384,13 +384,13 @@ public abstract class AltEditorScreen extends Screen RenderSystem.setShaderColor(1, 0, 0, errorTimer / 16F); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, width, 0, 0).next(); - bufferBuilder.vertex(matrix, width, height, 0).next(); - bufferBuilder.vertex(matrix, 0, height, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, width, 0, 0); + bufferBuilder.vertex(matrix, width, height, 0); + bufferBuilder.vertex(matrix, 0, height, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_BLEND); diff --git a/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java b/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java index 3b47a383..b7578c87 100644 --- a/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java +++ b/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java @@ -38,6 +38,7 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ClickableWidget; 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; @@ -422,7 +423,6 @@ public final class AltManagerScreen extends Screen MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // skin preview @@ -459,13 +459,13 @@ public final class AltManagerScreen extends Screen RenderSystem.setShaderColor(1, 0, 0, errorTimer / 16F); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, width, 0, 0).next(); - bufferBuilder.vertex(matrix, width, height, 0).next(); - bufferBuilder.vertex(matrix, 0, height, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, width, 0, 0); + bufferBuilder.vertex(matrix, width, height, 0); + bufferBuilder.vertex(matrix, 0, height, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_BLEND); @@ -646,7 +646,6 @@ public final class AltManagerScreen extends Screen MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // green glow when logged in @@ -661,13 +660,14 @@ public final class AltManagerScreen extends Screen RenderSystem.setShaderColor(0, 1, 0, opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x - 2, y - 2, 0).next(); - bufferBuilder.vertex(matrix, x - 2 + 220, y - 2, 0).next(); - bufferBuilder.vertex(matrix, x - 2 + 220, y - 2 + 30, 0).next(); - bufferBuilder.vertex(matrix, x - 2, y - 2 + 30, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x - 2, y - 2, 0); + bufferBuilder.vertex(matrix, x - 2 + 220, y - 2, 0); + bufferBuilder.vertex(matrix, x - 2 + 220, y - 2 + 30, 0); + bufferBuilder.vertex(matrix, x - 2, y - 2 + 30, 0); + BufferRenderer + .drawWithGlobalProgram(bufferBuilder.method_60800()); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_BLEND); diff --git a/src/main/java/net/wurstclient/clickgui/ClickGui.java b/src/main/java/net/wurstclient/clickgui/ClickGui.java index 15460f04..7b2fde2c 100644 --- a/src/main/java/net/wurstclient/clickgui/ClickGui.java +++ b/src/main/java/net/wurstclient/clickgui/ClickGui.java @@ -30,6 +30,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -531,7 +532,6 @@ public final class ClickGui { MatrixStack matrixStack = context.getMatrices(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); if(tooltip.isEmpty()) return; @@ -564,24 +564,24 @@ public final class ClickGui // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], ttOpacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xt1, yt1, 0).next(); - bufferBuilder.vertex(matrix, xt1, yt2, 0).next(); - bufferBuilder.vertex(matrix, xt2, yt2, 0).next(); - bufferBuilder.vertex(matrix, xt2, yt1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xt1, yt1, 0); + bufferBuilder.vertex(matrix, xt1, yt2, 0); + bufferBuilder.vertex(matrix, xt2, yt2, 0); + bufferBuilder.vertex(matrix, xt2, yt1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xt1, yt1, 0).next(); - bufferBuilder.vertex(matrix, xt1, yt2, 0).next(); - bufferBuilder.vertex(matrix, xt2, yt2, 0).next(); - bufferBuilder.vertex(matrix, xt2, yt1, 0).next(); - bufferBuilder.vertex(matrix, xt1, yt1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xt1, yt1, 0); + bufferBuilder.vertex(matrix, xt1, yt2, 0); + bufferBuilder.vertex(matrix, xt2, yt2, 0); + bufferBuilder.vertex(matrix, xt2, yt1, 0); + bufferBuilder.vertex(matrix, xt1, yt1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // text RenderSystem.setShaderColor(1, 1, 1, 1); @@ -638,7 +638,6 @@ public final class ClickGui MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); if(window.isMinimized()) @@ -677,21 +676,22 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xs2, ys1, 0).next(); - bufferBuilder.vertex(matrix, xs2, ys2, 0).next(); - bufferBuilder.vertex(matrix, xs3, ys2, 0).next(); - bufferBuilder.vertex(matrix, xs3, ys1, 0).next(); - bufferBuilder.vertex(matrix, xs1, ys1, 0).next(); - bufferBuilder.vertex(matrix, xs1, ys3, 0).next(); - bufferBuilder.vertex(matrix, xs2, ys3, 0).next(); - bufferBuilder.vertex(matrix, xs2, ys1, 0).next(); - bufferBuilder.vertex(matrix, xs1, ys4, 0).next(); - bufferBuilder.vertex(matrix, xs1, ys2, 0).next(); - bufferBuilder.vertex(matrix, xs2, ys2, 0).next(); - bufferBuilder.vertex(matrix, xs2, ys4, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xs2, ys1, 0); + bufferBuilder.vertex(matrix, xs2, ys2, 0); + bufferBuilder.vertex(matrix, xs3, ys2, 0); + bufferBuilder.vertex(matrix, xs3, ys1, 0); + bufferBuilder.vertex(matrix, xs1, ys1, 0); + bufferBuilder.vertex(matrix, xs1, ys3, 0); + bufferBuilder.vertex(matrix, xs2, ys3, 0); + bufferBuilder.vertex(matrix, xs2, ys1, 0); + bufferBuilder.vertex(matrix, xs1, ys4, 0); + bufferBuilder.vertex(matrix, xs1, ys2, 0); + bufferBuilder.vertex(matrix, xs2, ys2, 0); + bufferBuilder.vertex(matrix, xs2, ys4, 0); + BufferRenderer + .drawWithGlobalProgram(bufferBuilder.method_60800()); boolean hovering = mouseX >= xs1 && mouseY >= ys3 && mouseX < xs2 && mouseY < ys4; @@ -700,26 +700,29 @@ public final class ClickGui RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], hovering ? opacity * 1.5F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xs1, ys3, 0).next(); - bufferBuilder.vertex(matrix, xs1, ys4, 0).next(); - bufferBuilder.vertex(matrix, xs2, ys4, 0).next(); - bufferBuilder.vertex(matrix, xs2, ys3, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xs1, ys3, 0); + bufferBuilder.vertex(matrix, xs1, ys4, 0); + bufferBuilder.vertex(matrix, xs2, ys4, 0); + bufferBuilder.vertex(matrix, xs2, ys3, 0); + BufferRenderer + .drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xs1, ys3, 0).next(); - bufferBuilder.vertex(matrix, xs1, ys4, 0).next(); - bufferBuilder.vertex(matrix, xs2, ys4, 0).next(); - bufferBuilder.vertex(matrix, xs2, ys3, 0).next(); - bufferBuilder.vertex(matrix, xs1, ys3, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, xs1, ys3, 0); + bufferBuilder.vertex(matrix, xs1, ys4, 0); + bufferBuilder.vertex(matrix, xs2, ys4, 0); + bufferBuilder.vertex(matrix, xs2, ys3, 0); + bufferBuilder.vertex(matrix, xs1, ys3, 0); + BufferRenderer + .drawWithGlobalProgram(bufferBuilder.method_60800()); } int x3 = x1 + 2; @@ -732,17 +735,17 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y3, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y3, 0).next(); - bufferBuilder.vertex(matrix, x5, y3, 0).next(); - bufferBuilder.vertex(matrix, x5, y2, 0).next(); - bufferBuilder.vertex(matrix, x4, y2, 0).next(); - bufferBuilder.vertex(matrix, x4, y3, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y3, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x3, y3, 0); + bufferBuilder.vertex(matrix, x5, y3, 0); + bufferBuilder.vertex(matrix, x5, y2, 0); + bufferBuilder.vertex(matrix, x4, y2, 0); + bufferBuilder.vertex(matrix, x4, y3, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); net.minecraft.client.util.Window sr = MC.getWindow(); int sf = (int)sr.getScaleFactor(); @@ -756,8 +759,8 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); // window background // between children @@ -767,10 +770,10 @@ public final class ClickGui { int yc1 = window.getChild(i).getY(); int yc2 = yc1 - 2; - bufferBuilder.vertex(matrix, xc1, yc2, 0).next(); - bufferBuilder.vertex(matrix, xc1, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc2, 0).next(); + bufferBuilder.vertex(matrix, xc1, yc2, 0); + bufferBuilder.vertex(matrix, xc1, yc1, 0); + bufferBuilder.vertex(matrix, xc2, yc1, 0); + bufferBuilder.vertex(matrix, xc2, yc2, 0); } // window background @@ -785,12 +788,12 @@ public final class ClickGui yc1 = lastChild.getY() + lastChild.getHeight(); } int yc2 = yc1 + 2; - bufferBuilder.vertex(matrix, xc1, yc2, 0).next(); - bufferBuilder.vertex(matrix, xc1, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc2, 0).next(); + bufferBuilder.vertex(matrix, xc1, yc2, 0); + bufferBuilder.vertex(matrix, xc1, yc1, 0); + bufferBuilder.vertex(matrix, xc2, yc1, 0); + bufferBuilder.vertex(matrix, xc2, yc2, 0); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // render children int cMouseX = mouseX - x1; @@ -810,23 +813,23 @@ public final class ClickGui // window outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x1, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); if(!window.isMinimized()) { // title bar outline - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y3, 0).next(); - bufferBuilder.vertex(matrix, x2, y3, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y3, 0); + bufferBuilder.vertex(matrix, x2, y3, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } // title bar buttons @@ -865,27 +868,27 @@ public final class ClickGui RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y4, 0).next(); - bufferBuilder.vertex(matrix, x2, y4, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y5, 0).next(); - bufferBuilder.vertex(matrix, x3, y3, 0).next(); - bufferBuilder.vertex(matrix, x2, y3, 0).next(); - bufferBuilder.vertex(matrix, x2, y5, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, x3, y1, 0); + bufferBuilder.vertex(matrix, x3, y4, 0); + bufferBuilder.vertex(matrix, x2, y4, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x3, y5, 0); + bufferBuilder.vertex(matrix, x3, y3, 0); + bufferBuilder.vertex(matrix, x2, y3, 0); + bufferBuilder.vertex(matrix, x2, y5, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // title bar background // behind title - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y3, 0).next(); - bufferBuilder.vertex(matrix, x3, y3, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y3, 0); + bufferBuilder.vertex(matrix, x3, y3, 0); + bufferBuilder.vertex(matrix, x3, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // window title RenderSystem.setShaderColor(1, 1, 1, 1); @@ -903,41 +906,40 @@ public final class ClickGui Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // button background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hovering ? opacity * 1.5F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // background between buttons RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x3, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // button outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x1, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void renderMinimizeButton(MatrixStack matrixStack, int x1, int y1, @@ -947,7 +949,6 @@ public final class ClickGui Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); float xa1 = x1 + 1; float xa2 = (x1 + x2) / 2.0F; @@ -969,22 +970,22 @@ public final class ClickGui } // arrow - bufferBuilder.begin(VertexFormat.DrawMode.TRIANGLES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa3, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa2, ya2, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + bufferBuilder.vertex(matrix, xa3, ya1, 0); + bufferBuilder.vertex(matrix, xa2, ya2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa3, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa2, ya2, 0).next(); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + bufferBuilder.vertex(matrix, xa3, ya1, 0); + bufferBuilder.vertex(matrix, xa2, ya2, 0); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void renderPinButton(MatrixStack matrixStack, int x1, int y1, @@ -995,7 +996,6 @@ public final class ClickGui Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); if(pinned) { @@ -1009,17 +1009,17 @@ public final class ClickGui // knob RenderSystem.setShaderColor(h, 0, 0, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xk1, yk1, 0).next(); - bufferBuilder.vertex(matrix, xk2, yk1, 0).next(); - bufferBuilder.vertex(matrix, xk2, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk1, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk3, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk4, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk4, yk3, 0).next(); - bufferBuilder.vertex(matrix, xk3, yk3, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xk1, yk1, 0); + bufferBuilder.vertex(matrix, xk2, yk1, 0); + bufferBuilder.vertex(matrix, xk2, yk2, 0); + bufferBuilder.vertex(matrix, xk1, yk2, 0); + bufferBuilder.vertex(matrix, xk3, yk2, 0); + bufferBuilder.vertex(matrix, xk4, yk2, 0); + bufferBuilder.vertex(matrix, xk4, yk3, 0); + bufferBuilder.vertex(matrix, xk3, yk3, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); float xn1 = x1 + 3.5F; float xn2 = x2 - 3.5F; @@ -1028,39 +1028,40 @@ public final class ClickGui // needle RenderSystem.setShaderColor(h, h, h, 1); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xn1, yn1, 0).next(); - bufferBuilder.vertex(matrix, xn2, yn1, 0).next(); - bufferBuilder.vertex(matrix, xn2, yn2, 0).next(); - bufferBuilder.vertex(matrix, xn1, yn2, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xn1, yn1, 0); + bufferBuilder.vertex(matrix, xn2, yn1, 0); + bufferBuilder.vertex(matrix, xn2, yn2, 0); + bufferBuilder.vertex(matrix, xn1, yn2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outlines RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xk1, yk1, 0).next(); - bufferBuilder.vertex(matrix, xk2, yk1, 0).next(); - bufferBuilder.vertex(matrix, xk2, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk1, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk1, yk1, 0).next(); - tessellator.draw(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xk3, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk4, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk4, yk3, 0).next(); - bufferBuilder.vertex(matrix, xk3, yk3, 0).next(); - bufferBuilder.vertex(matrix, xk3, yk2, 0).next(); - tessellator.draw(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xn1, yn1, 0).next(); - bufferBuilder.vertex(matrix, xn2, yn1, 0).next(); - bufferBuilder.vertex(matrix, xn2, yn2, 0).next(); - bufferBuilder.vertex(matrix, xn1, yn2, 0).next(); - bufferBuilder.vertex(matrix, xn1, yn1, 0).next(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xk1, yk1, 0); + bufferBuilder.vertex(matrix, xk2, yk1, 0); + bufferBuilder.vertex(matrix, xk2, yk2, 0); + bufferBuilder.vertex(matrix, xk1, yk2, 0); + bufferBuilder.vertex(matrix, xk1, yk1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xk3, yk2, 0); + bufferBuilder.vertex(matrix, xk4, yk2, 0); + bufferBuilder.vertex(matrix, xk4, yk3, 0); + bufferBuilder.vertex(matrix, xk3, yk3, 0); + bufferBuilder.vertex(matrix, xk3, yk2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xn1, yn1, 0); + bufferBuilder.vertex(matrix, xn2, yn1, 0); + bufferBuilder.vertex(matrix, xn2, yn2, 0); + bufferBuilder.vertex(matrix, xn1, yn2, 0); + bufferBuilder.vertex(matrix, xn1, yn1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); }else { @@ -1081,17 +1082,17 @@ public final class ClickGui // knob RenderSystem.setShaderColor(0, h, 0, 1); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xk1, yk1, 0).next(); - bufferBuilder.vertex(matrix, xk2, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk3, yk3, 0).next(); - bufferBuilder.vertex(matrix, xk4, yk4, 0).next(); - bufferBuilder.vertex(matrix, xk5, yk5, 0).next(); - bufferBuilder.vertex(matrix, xk6, yk6, 0).next(); - bufferBuilder.vertex(matrix, xk3, yk7, 0).next(); - bufferBuilder.vertex(matrix, xk7, yk4, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xk1, yk1, 0); + bufferBuilder.vertex(matrix, xk2, yk2, 0); + bufferBuilder.vertex(matrix, xk3, yk3, 0); + bufferBuilder.vertex(matrix, xk4, yk4, 0); + bufferBuilder.vertex(matrix, xk5, yk5, 0); + bufferBuilder.vertex(matrix, xk6, yk6, 0); + bufferBuilder.vertex(matrix, xk3, yk7, 0); + bufferBuilder.vertex(matrix, xk7, yk4, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); float xn1 = x1 + 3; float xn2 = x1 + 4; @@ -1102,39 +1103,39 @@ public final class ClickGui // needle RenderSystem.setShaderColor(h, h, h, 1); - bufferBuilder.begin(VertexFormat.DrawMode.TRIANGLES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xn1, yn1, 0).next(); - bufferBuilder.vertex(matrix, xn2, yn2, 0).next(); - bufferBuilder.vertex(matrix, xn3, yn3, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xn1, yn1, 0); + bufferBuilder.vertex(matrix, xn2, yn2, 0); + bufferBuilder.vertex(matrix, xn3, yn3, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outlines RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xk1, yk1, 0).next(); - bufferBuilder.vertex(matrix, xk2, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk3, yk3, 0).next(); - bufferBuilder.vertex(matrix, xk4, yk4, 0).next(); - bufferBuilder.vertex(matrix, xk1, yk1, 0).next(); - tessellator.draw(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xk5, yk5, 0).next(); - bufferBuilder.vertex(matrix, xk6, yk6, 0).next(); - bufferBuilder.vertex(matrix, xk3, yk7, 0).next(); - bufferBuilder.vertex(matrix, xk7, yk4, 0).next(); - bufferBuilder.vertex(matrix, xk5, yk5, 0).next(); - tessellator.draw(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xn1, yn1, 0).next(); - bufferBuilder.vertex(matrix, xn2, yn2, 0).next(); - bufferBuilder.vertex(matrix, xn3, yn3, 0).next(); - bufferBuilder.vertex(matrix, xn1, yn1, 0).next(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xk1, yk1, 0); + bufferBuilder.vertex(matrix, xk2, yk2, 0); + bufferBuilder.vertex(matrix, xk3, yk3, 0); + bufferBuilder.vertex(matrix, xk4, yk4, 0); + bufferBuilder.vertex(matrix, xk1, yk1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xk5, yk5, 0); + bufferBuilder.vertex(matrix, xk6, yk6, 0); + bufferBuilder.vertex(matrix, xk3, yk7, 0); + bufferBuilder.vertex(matrix, xk7, yk4, 0); + bufferBuilder.vertex(matrix, xk5, yk5, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xn1, yn1, 0); + bufferBuilder.vertex(matrix, xn2, yn2, 0); + bufferBuilder.vertex(matrix, xn3, yn3, 0); + bufferBuilder.vertex(matrix, xn1, yn1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } - tessellator.draw(); } private void renderCloseButton(MatrixStack matrixStack, int x1, int y1, @@ -1144,7 +1145,6 @@ public final class ClickGui Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); float xc1 = x1 + 2; float xc2 = x1 + 3; @@ -1163,39 +1163,39 @@ public final class ClickGui // cross RenderSystem.setShaderColor(hovering ? 1 : 0.85F, 0, 0, 1); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xc1, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc2, 0).next(); - bufferBuilder.vertex(matrix, xc3, yc3, 0).next(); - bufferBuilder.vertex(matrix, xc4, yc4, 0).next(); - bufferBuilder.vertex(matrix, xc3, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc4, yc2, 0).next(); - bufferBuilder.vertex(matrix, xc6, yc5, 0).next(); - bufferBuilder.vertex(matrix, xc7, yc6, 0).next(); - bufferBuilder.vertex(matrix, xc6, yc7, 0).next(); - bufferBuilder.vertex(matrix, xc5, yc6, 0).next(); - bufferBuilder.vertex(matrix, xc1, yc3, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc4, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xc1, yc1, 0); + bufferBuilder.vertex(matrix, xc2, yc2, 0); + bufferBuilder.vertex(matrix, xc3, yc3, 0); + bufferBuilder.vertex(matrix, xc4, yc4, 0); + bufferBuilder.vertex(matrix, xc3, yc1, 0); + bufferBuilder.vertex(matrix, xc4, yc2, 0); + bufferBuilder.vertex(matrix, xc6, yc5, 0); + bufferBuilder.vertex(matrix, xc7, yc6, 0); + bufferBuilder.vertex(matrix, xc6, yc7, 0); + bufferBuilder.vertex(matrix, xc5, yc6, 0); + bufferBuilder.vertex(matrix, xc1, yc3, 0); + bufferBuilder.vertex(matrix, xc2, yc4, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xc1, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc2, 0).next(); - bufferBuilder.vertex(matrix, xc6, yc5, 0).next(); - bufferBuilder.vertex(matrix, xc4, yc2, 0).next(); - bufferBuilder.vertex(matrix, xc3, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc7, yc6, 0).next(); - bufferBuilder.vertex(matrix, xc3, yc3, 0).next(); - bufferBuilder.vertex(matrix, xc4, yc4, 0).next(); - bufferBuilder.vertex(matrix, xc6, yc7, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc4, 0).next(); - bufferBuilder.vertex(matrix, xc1, yc3, 0).next(); - bufferBuilder.vertex(matrix, xc5, yc6, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xc1, yc1, 0); + bufferBuilder.vertex(matrix, xc2, yc2, 0); + bufferBuilder.vertex(matrix, xc6, yc5, 0); + bufferBuilder.vertex(matrix, xc4, yc2, 0); + bufferBuilder.vertex(matrix, xc3, yc1, 0); + bufferBuilder.vertex(matrix, xc7, yc6, 0); + bufferBuilder.vertex(matrix, xc3, yc3, 0); + bufferBuilder.vertex(matrix, xc4, yc4, 0); + bufferBuilder.vertex(matrix, xc6, yc7, 0); + bufferBuilder.vertex(matrix, xc2, yc4, 0); + bufferBuilder.vertex(matrix, xc1, yc3, 0); + bufferBuilder.vertex(matrix, xc5, yc6, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public float[] getBgColor() diff --git a/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java b/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java index ff94b860..3af9a372 100644 --- a/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java +++ b/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java @@ -15,6 +15,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -114,19 +115,18 @@ public final class ComboBoxPopup> extends Popup { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); float[] acColor = gui.getAcColor(); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x1, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawValueBackground(MatrixStack matrixStack, int x1, int x2, @@ -137,17 +137,16 @@ public final class ComboBoxPopup> extends Popup Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], alpha); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, yi1, 0).next(); - bufferBuilder.vertex(matrix, x1, yi2, 0).next(); - bufferBuilder.vertex(matrix, x2, yi2, 0).next(); - bufferBuilder.vertex(matrix, x2, yi1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, yi1, 0); + bufferBuilder.vertex(matrix, x1, yi2, 0); + bufferBuilder.vertex(matrix, x2, yi2, 0); + bufferBuilder.vertex(matrix, x2, yi1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawValueName(DrawContext context, int x1, int yi1, diff --git a/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java b/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java index 3cf86df6..02b4cc01 100644 --- a/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java @@ -16,6 +16,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -83,7 +84,6 @@ public abstract class AbstractListEditButton extends Component MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // tooltip @@ -93,33 +93,33 @@ public abstract class AbstractListEditButton extends Component // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x3, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // box RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hBox ? opacity * 1.5F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, x3, y1, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x3, y1, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x3, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // setting name RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java b/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java index e6f69f8b..4e75989a 100644 --- a/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java @@ -17,6 +17,7 @@ import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; 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; @@ -88,7 +89,6 @@ public final class BlockComponent extends Component MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // tooltip @@ -108,13 +108,13 @@ public final class BlockComponent extends Component // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // setting name RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java b/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java index 7406ba97..036b8228 100644 --- a/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java @@ -15,6 +15,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; 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; @@ -117,17 +118,16 @@ public final class CheckboxComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x3, y1, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawBox(MatrixStack matrixStack, int x1, int x3, int y1, @@ -139,27 +139,26 @@ public final class CheckboxComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hovering ? opacity * 1.5F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x3, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x3, y1, 0); + bufferBuilder.vertex(matrix, x1, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawCheck(MatrixStack matrixStack, int x1, int y1, @@ -167,7 +166,6 @@ public final class CheckboxComponent extends Component { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); float xc1 = x1 + 2.5F; float xc2 = x1 + 3.5F; @@ -185,30 +183,30 @@ public final class CheckboxComponent extends Component RenderSystem.setShaderColor(0.5F, 0.5F, 0.5F, 0.75F); else RenderSystem.setShaderColor(0, hovering ? 1 : 0.85F, 0, 1); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xc2, yc3, 0).next(); - bufferBuilder.vertex(matrix, xc3, yc4, 0).next(); - bufferBuilder.vertex(matrix, xc3, yc5, 0).next(); - bufferBuilder.vertex(matrix, xc1, yc4, 0).next(); - bufferBuilder.vertex(matrix, xc4, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc5, yc2, 0).next(); - bufferBuilder.vertex(matrix, xc3, yc5, 0).next(); - bufferBuilder.vertex(matrix, xc3, yc4, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xc2, yc3, 0); + bufferBuilder.vertex(matrix, xc3, yc4, 0); + bufferBuilder.vertex(matrix, xc3, yc5, 0); + bufferBuilder.vertex(matrix, xc1, yc4, 0); + bufferBuilder.vertex(matrix, xc4, yc1, 0); + bufferBuilder.vertex(matrix, xc5, yc2, 0); + bufferBuilder.vertex(matrix, xc3, yc5, 0); + bufferBuilder.vertex(matrix, xc3, yc4, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xc2, yc3, 0).next(); - bufferBuilder.vertex(matrix, xc3, yc4, 0).next(); - bufferBuilder.vertex(matrix, xc4, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc5, yc2, 0).next(); - bufferBuilder.vertex(matrix, xc3, yc5, 0).next(); - bufferBuilder.vertex(matrix, xc1, yc4, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc3, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xc2, yc3, 0); + bufferBuilder.vertex(matrix, xc3, yc4, 0); + bufferBuilder.vertex(matrix, xc4, yc1, 0); + bufferBuilder.vertex(matrix, xc5, yc2, 0); + bufferBuilder.vertex(matrix, xc3, yc5, 0); + bufferBuilder.vertex(matrix, xc1, yc4, 0); + bufferBuilder.vertex(matrix, xc2, yc3, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawName(DrawContext context, int x3, int y1) diff --git a/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java b/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java index b9fa8188..0abe1fc2 100644 --- a/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java @@ -16,6 +16,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -108,19 +109,18 @@ public final class ColorComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x1, y1, 0); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawBox(MatrixStack matrixStack, int x1, int x2, int y2, @@ -132,29 +132,28 @@ public final class ColorComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShaderColor(color[0], color[1], color[2], hovering ? 1F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x1, y3, 0).next(); - bufferBuilder.vertex(matrix, x2, y3, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x1, y3, 0); + bufferBuilder.vertex(matrix, x2, y3, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x1, y3, 0).next(); - bufferBuilder.vertex(matrix, x2, y3, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x1, y3, 0); + bufferBuilder.vertex(matrix, x2, y3, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawNameAndValue(DrawContext context, int x1, int x2, int y1) diff --git a/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java b/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java index d5ed6c3e..776407b2 100644 --- a/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java @@ -19,6 +19,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -152,18 +153,17 @@ public final class ComboBoxComponent> extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x4, y2, 0).next(); - bufferBuilder.vertex(matrix, x4, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x4, y2, 0); + bufferBuilder.vertex(matrix, x4, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawBox(MatrixStack matrixStack, int x2, int x4, int y1, @@ -175,43 +175,41 @@ public final class ComboBoxComponent> extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); // background float bgAlpha = hBox ? opacity * 1.5F : opacity; RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], bgAlpha); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x4, y1, 0).next(); - bufferBuilder.vertex(matrix, x4, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x4, y1, 0); + bufferBuilder.vertex(matrix, x4, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x4, y1, 0).next(); - bufferBuilder.vertex(matrix, x4, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x4, y1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x4, y1, 0); + bufferBuilder.vertex(matrix, x4, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x4, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawSeparator(MatrixStack matrixStack, int x3, int y1, int y2) { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x3, y1, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawArrow(MatrixStack matrixStack, int x2, int x3, int y1, @@ -219,7 +217,6 @@ public final class ComboBoxComponent> extends Component { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); float xa1 = x3 + 1; float xa2 = (x3 + x2) / 2.0F; @@ -241,22 +238,22 @@ public final class ComboBoxComponent> extends Component } // arrow - bufferBuilder.begin(VertexFormat.DrawMode.TRIANGLES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa3, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa2, ya2, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + bufferBuilder.vertex(matrix, xa3, ya1, 0); + bufferBuilder.vertex(matrix, xa2, ya2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa3, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa2, ya2, 0).next(); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + bufferBuilder.vertex(matrix, xa3, ya1, 0); + bufferBuilder.vertex(matrix, xa2, ya2, 0); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawNameAndValue(DrawContext context, int x1, int x4, int y1) diff --git a/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java b/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java index c7723510..199e664e 100644 --- a/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java @@ -18,6 +18,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -167,10 +168,9 @@ public final class FeatureButton extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); if(feature.isEnabled()) // if(feature.isBlocked()) @@ -182,12 +182,12 @@ public final class FeatureButton extends Component RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hHack ? opacity * 1.5F : opacity); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x3, y1, 0); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawSettingsBackground(MatrixStack matrixStack, int x2, int x3, @@ -198,17 +198,16 @@ public final class FeatureButton extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hSettings ? opacity * 1.5F : opacity); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, x3, y1, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawOutline(MatrixStack matrixStack, int x1, int x2, int y1, @@ -218,31 +217,29 @@ public final class FeatureButton extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x1, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawSeparator(MatrixStack matrixStack, int x3, int y1, int y2) { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); // separator - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x3, y1, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawSettingsArrow(MatrixStack matrixStack, int x2, int x3, @@ -256,7 +253,6 @@ public final class FeatureButton extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); if(isSettingsWindowOpen()) { @@ -272,22 +268,22 @@ public final class FeatureButton extends Component } // arrow - bufferBuilder.begin(VertexFormat.DrawMode.TRIANGLES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa3, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa2, ya2, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + bufferBuilder.vertex(matrix, xa3, ya1, 0); + bufferBuilder.vertex(matrix, xa2, ya2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa3, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa2, ya2, 0).next(); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + bufferBuilder.vertex(matrix, xa3, ya1, 0); + bufferBuilder.vertex(matrix, xa2, ya2, 0); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawName(DrawContext context, int x1, int x3, int y1) diff --git a/src/main/java/net/wurstclient/clickgui/components/FileComponent.java b/src/main/java/net/wurstclient/clickgui/components/FileComponent.java index a84b4d58..1aa1dfec 100644 --- a/src/main/java/net/wurstclient/clickgui/components/FileComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/FileComponent.java @@ -15,6 +15,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -84,7 +85,6 @@ public final class FileComponent extends Component MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // tooltip @@ -99,33 +99,33 @@ public final class FileComponent extends Component // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x3, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // box RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hBox ? opacity * 1.5F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, x3, y1, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x3, y1, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x3, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // setting name RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java b/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java index 2b2af5ed..b9f9b011 100644 --- a/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java @@ -15,6 +15,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.DrawContext; 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; @@ -68,7 +69,6 @@ public final class RadarComponent extends Component MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // tooltip @@ -78,13 +78,13 @@ public final class RadarComponent extends Component // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); float middleX = (x1 + x2) / 2.0F; float middleY = (y1 + y2) / 2.0F; @@ -108,24 +108,24 @@ public final class RadarComponent extends Component // arrow RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa2, ya2, 0).next(); - bufferBuilder.vertex(matrix, xa1, ya3, 0).next(); - bufferBuilder.vertex(matrix, xa3, ya2, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + bufferBuilder.vertex(matrix, xa2, ya2, 0); + bufferBuilder.vertex(matrix, xa1, ya3, 0); + bufferBuilder.vertex(matrix, xa3, ya2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - bufferBuilder.vertex(matrix, xa2, ya2, 0).next(); - bufferBuilder.vertex(matrix, xa1, ya3, 0).next(); - bufferBuilder.vertex(matrix, xa3, ya2, 0).next(); - bufferBuilder.vertex(matrix, xa1, ya1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + bufferBuilder.vertex(matrix, xa2, ya2, 0); + bufferBuilder.vertex(matrix, xa1, ya3, 0); + bufferBuilder.vertex(matrix, xa3, ya2, 0); + bufferBuilder.vertex(matrix, xa1, ya1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); matrixStack.pop(); matrix = matrixStack.peek().getPositionMatrix(); @@ -134,7 +134,7 @@ public final class RadarComponent extends Component // points RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.setShaderColor(1, 1, 1, 1); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); for(Entity e : hack.getEntities()) { @@ -176,21 +176,21 @@ public final class RadarComponent extends Component bufferBuilder .vertex(matrix, middleX + (float)renderX - 0.5F, middleY + (float)renderY - 0.5F, 0) - .color(red, green, blue, alpha).next(); + .color(red, green, blue, alpha); bufferBuilder .vertex(matrix, middleX + (float)renderX + 0.5F, middleY + (float)renderY - 0.5F, 0) - .color(red, green, blue, alpha).next(); + .color(red, green, blue, alpha); bufferBuilder .vertex(matrix, middleX + (float)renderX + 0.5F, middleY + (float)renderY + 0.5F, 0) - .color(red, green, blue, alpha).next(); + .color(red, green, blue, alpha); bufferBuilder .vertex(matrix, middleX + (float)renderX - 0.5F, middleY + (float)renderY + 0.5F, 0) - .color(red, green, blue, alpha).next(); + .color(red, green, blue, alpha); } - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } @Override diff --git a/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java b/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java index 53bc5523..61a4f303 100644 --- a/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java @@ -17,6 +17,7 @@ import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; 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; @@ -173,34 +174,33 @@ public final class SliderComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y4, 0).next(); - bufferBuilder.vertex(matrix, x2, y4, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y4, 0); + bufferBuilder.vertex(matrix, x2, y4, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); - bufferBuilder.vertex(matrix, x1, y5, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y5, 0).next(); + bufferBuilder.vertex(matrix, x1, y5, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y5, 0); - bufferBuilder.vertex(matrix, x1, y4, 0).next(); - bufferBuilder.vertex(matrix, x1, y5, 0).next(); - bufferBuilder.vertex(matrix, x3, y5, 0).next(); - bufferBuilder.vertex(matrix, x3, y4, 0).next(); + bufferBuilder.vertex(matrix, x1, y4, 0); + bufferBuilder.vertex(matrix, x1, y5, 0); + bufferBuilder.vertex(matrix, x3, y5, 0); + bufferBuilder.vertex(matrix, x3, y4, 0); - bufferBuilder.vertex(matrix, x4, y4, 0).next(); - bufferBuilder.vertex(matrix, x4, y5, 0).next(); - bufferBuilder.vertex(matrix, x2, y5, 0).next(); - bufferBuilder.vertex(matrix, x2, y4, 0).next(); + bufferBuilder.vertex(matrix, x4, y4, 0); + bufferBuilder.vertex(matrix, x4, y5, 0); + bufferBuilder.vertex(matrix, x2, y5, 0); + bufferBuilder.vertex(matrix, x2, y4, 0); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawRail(MatrixStack matrixStack, int x3, int x4, int y4, @@ -212,7 +212,6 @@ public final class SliderComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); float xl1 = x3; float xl2 = x4; @@ -226,39 +225,39 @@ public final class SliderComponent extends Component // limit RenderSystem.setShaderColor(1, 0, 0, hSlider ? opacity * 1.5F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y4, 0).next(); - bufferBuilder.vertex(matrix, x3, y5, 0).next(); - bufferBuilder.vertex(matrix, xl1, y5, 0).next(); - bufferBuilder.vertex(matrix, xl1, y4, 0).next(); - bufferBuilder.vertex(matrix, xl2, y4, 0).next(); - bufferBuilder.vertex(matrix, xl2, y5, 0).next(); - bufferBuilder.vertex(matrix, x4, y5, 0).next(); - bufferBuilder.vertex(matrix, x4, y4, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x3, y4, 0); + bufferBuilder.vertex(matrix, x3, y5, 0); + bufferBuilder.vertex(matrix, xl1, y5, 0); + bufferBuilder.vertex(matrix, xl1, y4, 0); + bufferBuilder.vertex(matrix, xl2, y4, 0); + bufferBuilder.vertex(matrix, xl2, y5, 0); + bufferBuilder.vertex(matrix, x4, y5, 0); + bufferBuilder.vertex(matrix, x4, y4, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hSlider ? opacity * 1.5F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xl1, y4, 0).next(); - bufferBuilder.vertex(matrix, xl1, y5, 0).next(); - bufferBuilder.vertex(matrix, xl2, y5, 0).next(); - bufferBuilder.vertex(matrix, xl2, y4, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, xl1, y4, 0); + bufferBuilder.vertex(matrix, xl1, y5, 0); + bufferBuilder.vertex(matrix, xl2, y5, 0); + bufferBuilder.vertex(matrix, xl2, y4, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y4, 0).next(); - bufferBuilder.vertex(matrix, x3, y5, 0).next(); - bufferBuilder.vertex(matrix, x4, y5, 0).next(); - bufferBuilder.vertex(matrix, x4, y4, 0).next(); - bufferBuilder.vertex(matrix, x3, y4, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x3, y4, 0); + bufferBuilder.vertex(matrix, x3, y5, 0); + bufferBuilder.vertex(matrix, x4, y5, 0); + bufferBuilder.vertex(matrix, x4, y4, 0); + bufferBuilder.vertex(matrix, x3, y4, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawKnob(MatrixStack matrixStack, int x1, int x2, int y2, @@ -266,7 +265,6 @@ public final class SliderComponent extends Component { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); double percentage = setting.getPercentage(); float xk1 = x1 + (x2 - x1 - 8) * (float)percentage; @@ -282,24 +280,24 @@ public final class SliderComponent extends Component float[] c = setting.getKnobColor(); RenderSystem.setShaderColor(c[0], c[1], c[2], hSlider ? 1 : 0.75F); } - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xk1, yk1, 0).next(); - bufferBuilder.vertex(matrix, xk1, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk2, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk2, yk1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xk1, yk1, 0); + bufferBuilder.vertex(matrix, xk1, yk2, 0); + bufferBuilder.vertex(matrix, xk2, yk2, 0); + bufferBuilder.vertex(matrix, xk2, yk1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xk1, yk1, 0).next(); - bufferBuilder.vertex(matrix, xk1, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk2, yk2, 0).next(); - bufferBuilder.vertex(matrix, xk2, yk1, 0).next(); - bufferBuilder.vertex(matrix, xk1, yk1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xk1, yk1, 0); + bufferBuilder.vertex(matrix, xk1, yk2, 0); + bufferBuilder.vertex(matrix, xk2, yk2, 0); + bufferBuilder.vertex(matrix, xk2, yk1, 0); + bufferBuilder.vertex(matrix, xk1, yk1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawNameAndValue(DrawContext context, int x1, int x2, int y1, diff --git a/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java b/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java index c2e6d030..79a61789 100644 --- a/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java @@ -18,6 +18,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -89,7 +90,6 @@ public final class TextFieldEditButton extends Component MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // tooltip @@ -101,33 +101,33 @@ public final class TextFieldEditButton extends Component // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // box RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hBox ? opacity * 1.5F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y3, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y3, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, x1, y3, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y3, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y3, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y3, 0).next(); - bufferBuilder.vertex(matrix, x1, y3, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y3, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y3, 0); + bufferBuilder.vertex(matrix, x1, y3, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); int maxLength = tr.getTextHandler().getLimitedStringLength( setting.getValue(), getWidth() - 8, Style.EMPTY); diff --git a/src/main/java/net/wurstclient/clickgui/screens/AddBookOfferScreen.java b/src/main/java/net/wurstclient/clickgui/screens/AddBookOfferScreen.java index ea12819f..ae0f6b76 100644 --- a/src/main/java/net/wurstclient/clickgui/screens/AddBookOfferScreen.java +++ b/src/main/java/net/wurstclient/clickgui/screens/AddBookOfferScreen.java @@ -413,7 +413,7 @@ public final class AddBookOfferScreen extends Screen if(isSelectedItem(index)) drawSelectionOutline(matrixStack, x, y); - Item item = Registries.ITEM.get(new Identifier("enchanted_book")); + Item item = Registries.ITEM.get(Identifier.of("enchanted_book")); ItemStack stack = new ItemStack(item); RenderUtils.drawItem(context, stack, x + 1, y + 1, true); diff --git a/src/main/java/net/wurstclient/clickgui/screens/EditBookOfferScreen.java b/src/main/java/net/wurstclient/clickgui/screens/EditBookOfferScreen.java index efb42685..18f3a886 100644 --- a/src/main/java/net/wurstclient/clickgui/screens/EditBookOfferScreen.java +++ b/src/main/java/net/wurstclient/clickgui/screens/EditBookOfferScreen.java @@ -269,7 +269,7 @@ public final class EditBookOfferScreen extends Screen int x = width / 2 - 100; int y = 64; - Item item = Registries.ITEM.get(new Identifier("enchanted_book")); + Item item = Registries.ITEM.get(Identifier.of("enchanted_book")); ItemStack stack = new ItemStack(item); RenderUtils.drawItem(context, stack, x + 1, y + 1, true); diff --git a/src/main/java/net/wurstclient/clickgui/screens/EditBookOffersScreen.java b/src/main/java/net/wurstclient/clickgui/screens/EditBookOffersScreen.java index a44b7c54..b2f150fb 100644 --- a/src/main/java/net/wurstclient/clickgui/screens/EditBookOffersScreen.java +++ b/src/main/java/net/wurstclient/clickgui/screens/EditBookOffersScreen.java @@ -264,7 +264,7 @@ public final class EditBookOffersScreen extends Screen if(isSelectedItem(index)) drawSelectionOutline(matrixStack, x, y); - Item item = Registries.ITEM.get(new Identifier("enchanted_book")); + Item item = Registries.ITEM.get(Identifier.of("enchanted_book")); ItemStack stack = new ItemStack(item); RenderUtils.drawItem(context, stack, x + 1, y + 1, true); diff --git a/src/main/java/net/wurstclient/clickgui/screens/EditColorScreen.java b/src/main/java/net/wurstclient/clickgui/screens/EditColorScreen.java index 4a7371fa..abb8ecf3 100644 --- a/src/main/java/net/wurstclient/clickgui/screens/EditColorScreen.java +++ b/src/main/java/net/wurstclient/clickgui/screens/EditColorScreen.java @@ -42,7 +42,7 @@ public final class EditColorScreen extends Screen private ButtonWidget doneButton; private final Identifier paletteIdentifier = - new Identifier("wurst", "colorpalette.png"); + Identifier.of("wurst", "colorpalette.png"); private BufferedImage paletteAsBufferedImage; private int paletteX = 0; diff --git a/src/main/java/net/wurstclient/clickgui/screens/EditItemListScreen.java b/src/main/java/net/wurstclient/clickgui/screens/EditItemListScreen.java index a1a21b0e..d4304e13 100644 --- a/src/main/java/net/wurstclient/clickgui/screens/EditItemListScreen.java +++ b/src/main/java/net/wurstclient/clickgui/screens/EditItemListScreen.java @@ -276,7 +276,7 @@ public final class EditItemListScreen extends Screen int var4, int var5, int var6, float partialTicks) { String name = list.get(index); - Item item = Registries.ITEM.get(new Identifier(name)); + Item item = Registries.ITEM.get(Identifier.of(name)); ItemStack stack = new ItemStack(item); TextRenderer tr = mc.textRenderer; diff --git a/src/main/java/net/wurstclient/commands/BlockListCmd.java b/src/main/java/net/wurstclient/commands/BlockListCmd.java index e2c66b0a..f4ef45a4 100644 --- a/src/main/java/net/wurstclient/commands/BlockListCmd.java +++ b/src/main/java/net/wurstclient/commands/BlockListCmd.java @@ -182,7 +182,7 @@ public final class BlockListCmd extends Command try { - return Registries.BLOCK.getOrEmpty(new Identifier(nameOrId)) + return Registries.BLOCK.getOrEmpty(Identifier.of(nameOrId)) .orElse(null); }catch(InvalidIdentifierException e) diff --git a/src/main/java/net/wurstclient/commands/GiveCmd.java b/src/main/java/net/wurstclient/commands/GiveCmd.java index 8cfc07ec..536b76ec 100644 --- a/src/main/java/net/wurstclient/commands/GiveCmd.java +++ b/src/main/java/net/wurstclient/commands/GiveCmd.java @@ -103,7 +103,7 @@ public final class GiveCmd extends Command { try { - return Registries.ITEM.get(new Identifier(id)); + return Registries.ITEM.get(Identifier.of(id)); }catch(InvalidIdentifierException e) { diff --git a/src/main/java/net/wurstclient/commands/PotionCmd.java b/src/main/java/net/wurstclient/commands/PotionCmd.java index 9f559868..54f690f9 100644 --- a/src/main/java/net/wurstclient/commands/PotionCmd.java +++ b/src/main/java/net/wurstclient/commands/PotionCmd.java @@ -143,7 +143,7 @@ public final class PotionCmd extends Command else try { - Identifier identifier = new Identifier(input); + Identifier identifier = Identifier.of(input); effect = Registries.STATUS_EFFECT.get(identifier); }catch(InvalidIdentifierException e) diff --git a/src/main/java/net/wurstclient/commands/SetBlockCmd.java b/src/main/java/net/wurstclient/commands/SetBlockCmd.java index f1f857b9..644e9455 100644 --- a/src/main/java/net/wurstclient/commands/SetBlockCmd.java +++ b/src/main/java/net/wurstclient/commands/SetBlockCmd.java @@ -87,7 +87,7 @@ public final class SetBlockCmd extends Command try { - return Registries.BLOCK.getOrEmpty(new Identifier(nameOrId)) + return Registries.BLOCK.getOrEmpty(Identifier.of(nameOrId)) .orElse(null); }catch(InvalidIdentifierException e) diff --git a/src/main/java/net/wurstclient/commands/TacoCmd.java b/src/main/java/net/wurstclient/commands/TacoCmd.java index 19f83651..27f795b9 100644 --- a/src/main/java/net/wurstclient/commands/TacoCmd.java +++ b/src/main/java/net/wurstclient/commands/TacoCmd.java @@ -25,10 +25,10 @@ public final class TacoCmd extends Command implements GUIRenderListener, UpdateListener { private final Identifier[] tacos = - {new Identifier("wurst", "dancingtaco1.png"), - new Identifier("wurst", "dancingtaco2.png"), - new Identifier("wurst", "dancingtaco3.png"), - new Identifier("wurst", "dancingtaco4.png")}; + {Identifier.of("wurst", "dancingtaco1.png"), + Identifier.of("wurst", "dancingtaco2.png"), + Identifier.of("wurst", "dancingtaco3.png"), + Identifier.of("wurst", "dancingtaco4.png")}; private boolean enabled; private int ticks = 0; diff --git a/src/main/java/net/wurstclient/hacks/BaseFinderHack.java b/src/main/java/net/wurstclient/hacks/BaseFinderHack.java index 1ccfad96..1b9f6a1e 100644 --- a/src/main/java/net/wurstclient/hacks/BaseFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/BaseFinderHack.java @@ -17,10 +17,10 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -206,15 +206,14 @@ public final class BaseFinderHack extends Hack vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); for(int[] vertex : vertices) bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], - vertex[2] - region.z()).next(); + vertex[2] - region.z()); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffer.bind(); vertexBuffer.upload(buffer); diff --git a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java index 8d4ea370..9cf9985a 100644 --- a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java +++ b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java @@ -22,6 +22,7 @@ import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -266,7 +267,6 @@ public final class BowAimbotHack extends Hack Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); String message; if(velocity < 1) @@ -285,13 +285,13 @@ public final class BowAimbotHack extends Hack // background RenderSystem.setShader(GameRenderer::getPositionProgram); RenderSystem.setShaderColor(0, 0, 0, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, msgWidth + 3, 0, 0).next(); - bufferBuilder.vertex(matrix, msgWidth + 3, 10, 0).next(); - bufferBuilder.vertex(matrix, 0, 10, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, msgWidth + 3, 0, 0); + bufferBuilder.vertex(matrix, msgWidth + 3, 10, 0); + bufferBuilder.vertex(matrix, 0, 10, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // text RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/hacks/CameraDistanceHack.java b/src/main/java/net/wurstclient/hacks/CameraDistanceHack.java index 875adf16..f9d6d0c8 100644 --- a/src/main/java/net/wurstclient/hacks/CameraDistanceHack.java +++ b/src/main/java/net/wurstclient/hacks/CameraDistanceHack.java @@ -26,7 +26,7 @@ public final class CameraDistanceHack extends Hack addSetting(distance); } - public double getDistance() + public float getDistance() { return distance.getValueF(); } diff --git a/src/main/java/net/wurstclient/hacks/CaveFinderHack.java b/src/main/java/net/wurstclient/hacks/CaveFinderHack.java index 4a35d74b..41752f9a 100644 --- a/src/main/java/net/wurstclient/hacks/CaveFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/CaveFinderHack.java @@ -20,11 +20,11 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.block.Blocks; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -255,16 +255,15 @@ public final class CaveFinderHack extends Hack private void setBufferFromTask() { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); RegionPos region = RenderUtils.getCameraRegion(); for(int[] vertex : compileVerticesTask.join()) bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], - vertex[2] - region.z()).next(); + vertex[2] - region.z()); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); if(vertexBuffer != null) vertexBuffer.close(); diff --git a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java index 752428cf..28ac6eb0 100644 --- a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java @@ -23,6 +23,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -339,7 +340,6 @@ public final class ExcavatorHack extends Hack Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); String message; if(step.selectPos && step.pos != null) @@ -358,13 +358,13 @@ public final class ExcavatorHack extends Hack // background RenderSystem.setShader(GameRenderer::getPositionProgram); RenderSystem.setShaderColor(0, 0, 0, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, msgWidth + 2, 0, 0).next(); - bufferBuilder.vertex(matrix, msgWidth + 2, 10, 0).next(); - bufferBuilder.vertex(matrix, 0, 10, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, msgWidth + 2, 0, 0); + bufferBuilder.vertex(matrix, msgWidth + 2, 10, 0); + bufferBuilder.vertex(matrix, 0, 10, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // text RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/hacks/FreecamHack.java b/src/main/java/net/wurstclient/hacks/FreecamHack.java index dd86ee48..5dafb9e3 100644 --- a/src/main/java/net/wurstclient/hacks/FreecamHack.java +++ b/src/main/java/net/wurstclient/hacks/FreecamHack.java @@ -18,6 +18,7 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.option.GameOptions; import net.minecraft.client.option.KeyBinding; 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; @@ -212,17 +213,14 @@ public final class FreecamHack extends Hack implements UpdateListener, Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - bufferBuilder - .vertex(matrix, (float)start.x, (float)start.y, (float)start.z) - .next(); - bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, (float)end.z) - .next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, (float)start.x, (float)start.y, + (float)start.z); + bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, (float)end.z); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); matrixStack.pop(); diff --git a/src/main/java/net/wurstclient/hacks/ItemEspHack.java b/src/main/java/net/wurstclient/hacks/ItemEspHack.java index c18fe37a..314d07c8 100644 --- a/src/main/java/net/wurstclient/hacks/ItemEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ItemEspHack.java @@ -16,6 +16,7 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; 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; @@ -165,27 +166,24 @@ public final class ItemEspHack extends Hack implements UpdateListener, Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); Vec3d regionVec = region.toVec3d(); Vec3d start = RotationUtils.getClientLookVec(partialTicks) .add(RenderUtils.getCameraPos()).subtract(regionVec); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(ItemEntity e : items) { Vec3d end = EntityUtils.getLerpedBox(e, partialTicks).getCenter() .subtract(regionVec); - bufferBuilder - .vertex(matrix, (float)start.x, (float)start.y, (float)start.z) - .next(); - bufferBuilder - .vertex(matrix, (float)end.x, (float)end.y, (float)end.z) - .next(); + bufferBuilder.vertex(matrix, (float)start.x, (float)start.y, + (float)start.z); + bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, + (float)end.z); } - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } } diff --git a/src/main/java/net/wurstclient/hacks/LsdHack.java b/src/main/java/net/wurstclient/hacks/LsdHack.java index 8f33242b..edf4d755 100644 --- a/src/main/java/net/wurstclient/hacks/LsdHack.java +++ b/src/main/java/net/wurstclient/hacks/LsdHack.java @@ -35,7 +35,7 @@ public final class LsdHack extends Hack MC.gameRenderer.disablePostProcessor(); MC.gameRenderer - .loadPostProcessor(new Identifier("shaders/post/lsd.json")); + .loadPostProcessor(Identifier.of("shaders/post/lsd.json")); } @Override diff --git a/src/main/java/net/wurstclient/hacks/MobEspHack.java b/src/main/java/net/wurstclient/hacks/MobEspHack.java index 5fafbe62..16402baa 100644 --- a/src/main/java/net/wurstclient/hacks/MobEspHack.java +++ b/src/main/java/net/wurstclient/hacks/MobEspHack.java @@ -20,6 +20,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BufferRenderer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -205,9 +206,8 @@ public final class MobEspHack extends Hack implements UpdateListener, Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION_COLOR); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR); Vec3d regionVec = region.toVec3d(); Vec3d start = RotationUtils.getClientLookVec(partialTicks) @@ -224,13 +224,13 @@ public final class MobEspHack extends Hack implements UpdateListener, bufferBuilder .vertex(matrix, (float)start.x, (float)start.y, (float)start.z) - .color(r, g, 0, 0.5F).next(); + .color(r, g, 0, 0.5F); bufferBuilder .vertex(matrix, (float)end.x, (float)end.y, (float)end.z) - .color(r, g, 0, 0.5F).next(); + .color(r, g, 0, 0.5F); } - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } } diff --git a/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java b/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java index f4dba282..601f8132 100644 --- a/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java +++ b/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java @@ -17,11 +17,11 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.block.BlockState; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -299,26 +299,25 @@ public final class MobSpawnEspHack extends Hack vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION_COLOR); + BufferBuilder bufferBuilder = + tessellator.method_60827(VertexFormat.DrawMode.DEBUG_LINES, + VertexFormats.POSITION_COLOR); new ArrayList<>(red).stream().filter(Objects::nonNull) .map(pos -> new BlockPos(pos.getX() - region.x(), pos.getY(), pos.getZ() - region.z())) .forEach(pos -> { bufferBuilder - .vertex(pos.getX(), pos.getY() + 0.01, pos.getZ()) - .color(1, 0, 0, 0.5F).next(); - bufferBuilder.vertex(pos.getX() + 1, pos.getY() + 0.01, - pos.getZ() + 1).color(1, 0, 0, 0.5F).next(); + .vertex(pos.getX(), pos.getY() + 0.01F, pos.getZ()) + .color(1, 0, 0, 0.5F); + bufferBuilder.vertex(pos.getX() + 1, pos.getY() + 0.01F, + pos.getZ() + 1).color(1, 0, 0, 0.5F); bufferBuilder - .vertex(pos.getX() + 1, pos.getY() + 0.01, pos.getZ()) - .color(1, 0, 0, 0.5F).next(); + .vertex(pos.getX() + 1, pos.getY() + 0.01F, pos.getZ()) + .color(1, 0, 0, 0.5F); bufferBuilder - .vertex(pos.getX(), pos.getY() + 0.01, pos.getZ() + 1) - .color(1, 0, 0, 0.5F).next(); + .vertex(pos.getX(), pos.getY() + 0.01F, pos.getZ() + 1) + .color(1, 0, 0, 0.5F); }); new ArrayList<>(yellow).stream().filter(Objects::nonNull) @@ -326,19 +325,19 @@ public final class MobSpawnEspHack extends Hack pos.getZ() - region.z())) .forEach(pos -> { bufferBuilder - .vertex(pos.getX(), pos.getY() + 0.01, pos.getZ()) - .color(1, 1, 0, 0.5F).next(); - bufferBuilder.vertex(pos.getX() + 1, pos.getY() + 0.01, - pos.getZ() + 1).color(1, 1, 0, 0.5F).next(); + .vertex(pos.getX(), pos.getY() + 0.01F, pos.getZ()) + .color(1, 1, 0, 0.5F); + bufferBuilder.vertex(pos.getX() + 1, pos.getY() + 0.01F, + pos.getZ() + 1).color(1, 1, 0, 0.5F); bufferBuilder - .vertex(pos.getX() + 1, pos.getY() + 0.01, pos.getZ()) - .color(1, 1, 0, 0.5F).next(); + .vertex(pos.getX() + 1, pos.getY() + 0.01F, pos.getZ()) + .color(1, 1, 0, 0.5F); bufferBuilder - .vertex(pos.getX(), pos.getY() + 0.01, pos.getZ() + 1) - .color(1, 1, 0, 0.5F).next(); + .vertex(pos.getX(), pos.getY() + 0.01F, pos.getZ() + 1) + .color(1, 1, 0, 0.5F); }); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffer.bind(); vertexBuffer.upload(buffer); VertexBuffer.unbind(); diff --git a/src/main/java/net/wurstclient/hacks/PlayerEspHack.java b/src/main/java/net/wurstclient/hacks/PlayerEspHack.java index e6fed982..ffcc5f8e 100644 --- a/src/main/java/net/wurstclient/hacks/PlayerEspHack.java +++ b/src/main/java/net/wurstclient/hacks/PlayerEspHack.java @@ -18,6 +18,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.network.AbstractClientPlayerEntity; 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; @@ -178,15 +179,17 @@ public final class PlayerEspHack extends Hack implements UpdateListener, private void renderTracers(MatrixStack matrixStack, float partialTicks, RegionPos region) { + if(players.isEmpty()) + return; + RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.setShaderColor(1, 1, 1, 1); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION_COLOR); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR); Vec3d regionVec = region.toVec3d(); Vec3d start = RotationUtils.getClientLookVec(partialTicks) @@ -215,13 +218,13 @@ public final class PlayerEspHack extends Hack implements UpdateListener, bufferBuilder .vertex(matrix, (float)start.x, (float)start.y, (float)start.z) - .color(r, g, b, 0.5F).next(); + .color(r, g, b, 0.5F); bufferBuilder .vertex(matrix, (float)end.x, (float)end.y, (float)end.z) - .color(r, g, b, 0.5F).next(); + .color(r, g, b, 0.5F); } - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } } diff --git a/src/main/java/net/wurstclient/hacks/SearchHack.java b/src/main/java/net/wurstclient/hacks/SearchHack.java index 91bef2f6..213dac7c 100644 --- a/src/main/java/net/wurstclient/hacks/SearchHack.java +++ b/src/main/java/net/wurstclient/hacks/SearchHack.java @@ -19,11 +19,11 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.block.Block; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -258,16 +258,15 @@ public final class SearchHack extends Hack private void setBufferFromTask() { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); RegionPos region = RenderUtils.getCameraRegion(); for(int[] vertex : compileVerticesTask.join()) bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], - vertex[2] - region.z()).next(); + vertex[2] - region.z()); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); if(vertexBuffer != null) vertexBuffer.close(); diff --git a/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java b/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java index 32d7a075..fea32f78 100644 --- a/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java +++ b/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java @@ -18,6 +18,7 @@ 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; @@ -119,24 +120,24 @@ public final class TrajectoriesHack extends Hack implements RenderListener private void drawLine(MatrixStack matrixStack, ArrayList path, ColorSetting color) { + if(path.isEmpty()) + return; + Vec3d camPos = RenderUtils.getCameraPos(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); float[] colorF = color.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.75F); for(Vec3d point : path) - bufferBuilder - .vertex(matrix, (float)(point.x - camPos.x), - (float)(point.y - camPos.y), (float)(point.z - camPos.z)) - .next(); + bufferBuilder.vertex(matrix, (float)(point.x - camPos.x), + (float)(point.y - camPos.y), (float)(point.z - camPos.z)); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private void drawEndOfLine(MatrixStack matrixStack, Vec3d end, diff --git a/src/main/java/net/wurstclient/hacks/TunnellerHack.java b/src/main/java/net/wurstclient/hacks/TunnellerHack.java index 81c6078e..55ce73e9 100644 --- a/src/main/java/net/wurstclient/hacks/TunnellerHack.java +++ b/src/main/java/net/wurstclient/hacks/TunnellerHack.java @@ -17,6 +17,7 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -28,7 +29,6 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.option.GameOptions; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -272,9 +272,8 @@ public final class TunnellerHack extends Hack vertexBuffers[0] = new VertexBuffer(VertexBuffer.Usage.STATIC); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); RegionPos region = RenderUtils.getCameraRegion(); Vec3d offset = Vec3d.ofCenter(start).subtract(region.toVec3d()); @@ -289,7 +288,7 @@ public final class TunnellerHack extends Hack .multiply(Math.max(0.5, length)).add(offset); RenderUtils.drawArrow(arrowStart, arrowEnd, bufferBuilder); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffers[0].bind(); vertexBuffers[0].upload(buffer); VertexBuffer.unbind(); @@ -394,9 +393,8 @@ public final class TunnellerHack extends Hack .offset(region.negate().toVec3d()); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); currentBlock = null; for(BlockPos pos : blocks) @@ -414,7 +412,7 @@ public final class TunnellerHack extends Hack RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); } - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffers[1].bind(); vertexBuffers[1].upload(buffer); VertexBuffer.unbind(); @@ -505,14 +503,13 @@ public final class TunnellerHack extends Hack .offset(region.negate().toVec3d()); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : blocks) RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffers[2].bind(); vertexBuffers[2].upload(buffer); VertexBuffer.unbind(); @@ -647,14 +644,13 @@ public final class TunnellerHack extends Hack .offset(region.negate().toVec3d()); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : liquids) RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffers[3].bind(); vertexBuffers[3].upload(buffer); diff --git a/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java b/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java index f6af0559..eabd13b5 100644 --- a/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java +++ b/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java @@ -17,11 +17,12 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; import net.minecraft.client.util.math.MatrixStack; @@ -95,9 +96,7 @@ public final class AutoFarmRenderer public void updateVertexBuffers(List blocksToHarvest, Set plants, List blocksToReplant) { - BufferBuilder bufferBuilder = - RenderSystem.renderThreadTesselator().getBuffer(); - + Tessellator tessellator = RenderSystem.renderThreadTesselator(); Vec3d regionOffset = RenderUtils.getCameraRegion().negate().toVec3d(); double boxMin = 1 / 16.0; @@ -105,20 +104,20 @@ public final class AutoFarmRenderer Box box = new Box(boxMin, boxMin, boxMin, boxMax, boxMax, boxMax); Box node = new Box(0.25, 0.25, 0.25, 0.75, 0.75, 0.75); - updateGreenBuffer(blocksToHarvest, bufferBuilder, box, regionOffset); - updateCyanBuffer(plants, bufferBuilder, node, regionOffset); - updateRedBuffer(blocksToReplant, bufferBuilder, box, regionOffset); + updateGreenBuffer(blocksToHarvest, tessellator, box, regionOffset); + updateCyanBuffer(plants, tessellator, node, regionOffset); + updateRedBuffer(blocksToReplant, tessellator, box, regionOffset); } private void updateGreenBuffer(List blocksToHarvest, - BufferBuilder bufferBuilder, Box box, Vec3d regionOffset) + Tessellator tessellator, Box box, Vec3d regionOffset) { if(greenBuffer != null) greenBuffer.close(); greenBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : blocksToHarvest) { @@ -126,21 +125,21 @@ public final class AutoFarmRenderer RenderUtils.drawOutlinedBox(renderBox, bufferBuilder); } - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); greenBuffer.bind(); greenBuffer.upload(buffer); VertexBuffer.unbind(); } - private void updateCyanBuffer(Set plants, - BufferBuilder bufferBuilder, Box node, Vec3d regionOffset) + private void updateCyanBuffer(Set plants, Tessellator tessellator, + Box node, Vec3d regionOffset) { if(cyanBuffer != null) cyanBuffer.close(); cyanBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : plants) { @@ -148,21 +147,21 @@ public final class AutoFarmRenderer RenderUtils.drawNode(renderNode, bufferBuilder); } - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); cyanBuffer.bind(); cyanBuffer.upload(buffer); VertexBuffer.unbind(); } private void updateRedBuffer(List blocksToReplant, - BufferBuilder bufferBuilder, Box box, Vec3d regionOffset) + Tessellator tessellator, Box box, Vec3d regionOffset) { if(redBuffer != null) redBuffer.close(); redBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : blocksToReplant) { @@ -170,7 +169,7 @@ public final class AutoFarmRenderer RenderUtils.drawOutlinedBox(renderBox, bufferBuilder); } - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); redBuffer.bind(); redBuffer.upload(buffer); VertexBuffer.unbind(); diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java index 9c0fe415..3952f7b4 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java @@ -16,6 +16,7 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; 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; @@ -131,7 +132,6 @@ public final class AutoFishDebugDraw { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); matrixStack.push(); @@ -141,13 +141,13 @@ public final class AutoFishDebugDraw 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(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, -0.125F, 0, -0.125F); + bufferBuilder.vertex(matrix, 0.125F, 0, 0.125F); + bufferBuilder.vertex(matrix, 0.125F, 0, -0.125F); + bufferBuilder.vertex(matrix, -0.125F, 0, 0.125F); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); matrixStack.pop(); } diff --git a/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java b/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java index 1a03adca..095c067f 100644 --- a/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java +++ b/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java @@ -41,7 +41,7 @@ public record BookOffer(String id, int level, int price) DynamicRegistryManager drm = WurstClient.MC.world.getRegistryManager(); Registry registry = drm.get(RegistryKeys.ENCHANTMENT); - return registry.getEntry(new Identifier(id)); + return registry.getEntry(Identifier.of(id)); } public Enchantment getEnchantment() diff --git a/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java b/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java index 10fcad97..97cf1355 100644 --- a/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java +++ b/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java @@ -17,6 +17,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BufferRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; @@ -81,28 +82,25 @@ public final class ChestEspRenderer { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); float[] colorF = group.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(Box box : group.getBoxes()) { Vec3d end = box.getCenter().subtract(region.toVec3d()); - bufferBuilder - .vertex(matrix, (float)start.x, (float)start.y, (float)start.z) - .next(); + bufferBuilder.vertex(matrix, (float)start.x, (float)start.y, + (float)start.z); - bufferBuilder - .vertex(matrix, (float)end.x, (float)end.y, (float)end.z) - .next(); + bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, + (float)end.z); } - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public static void prepareBuffers() diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java index a8017391..10365369 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java @@ -9,10 +9,10 @@ package net.wurstclient.hacks.newchunks; import java.util.Set; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; +import net.minecraft.class_9801; import net.minecraft.util.math.ChunkPos; public interface NewChunksChunkRenderer { - public BuiltBuffer buildBuffer(Set chunks, int drawDistance); + public class_9801 buildBuffer(Set chunks, int drawDistance); } diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java index e4d82fd5..0640b5c2 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java @@ -13,8 +13,8 @@ import java.util.Set; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; @@ -26,15 +26,13 @@ import net.wurstclient.util.RenderUtils; public final class NewChunksOutlineRenderer implements NewChunksChunkRenderer { @Override - public BuiltBuffer buildBuffer(Set chunks, int drawDistance) + public class_9801 buildBuffer(Set chunks, int drawDistance) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); renderChunks(new ArrayList<>(chunks), drawDistance, bufferBuilder); - return bufferBuilder.end(); + return bufferBuilder.method_60800(); } private void renderChunks(List chunks, int drawDistance, @@ -55,17 +53,17 @@ public final class NewChunksOutlineRenderer implements NewChunksChunkRenderer float z1 = blockPos.getZ() + 0.5F; float z2 = z1 + 15; - bufferBuilder.vertex(x1, 0, z1).next(); - bufferBuilder.vertex(x2, 0, z1).next(); + bufferBuilder.vertex(x1, 0, z1); + bufferBuilder.vertex(x2, 0, z1); - bufferBuilder.vertex(x2, 0, z1).next(); - bufferBuilder.vertex(x2, 0, z2).next(); + bufferBuilder.vertex(x2, 0, z1); + bufferBuilder.vertex(x2, 0, z2); - bufferBuilder.vertex(x2, 0, z2).next(); - bufferBuilder.vertex(x1, 0, z2).next(); + bufferBuilder.vertex(x2, 0, z2); + bufferBuilder.vertex(x1, 0, z2); - bufferBuilder.vertex(x1, 0, z2).next(); - bufferBuilder.vertex(x1, 0, z1).next(); + bufferBuilder.vertex(x1, 0, z2); + bufferBuilder.vertex(x1, 0, z1); } } } diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java index 9702033e..210d4631 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java @@ -13,8 +13,8 @@ import java.util.Set; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; @@ -34,15 +34,13 @@ public final class NewChunksReasonsRenderer this.drawDistance = drawDistance; } - public BuiltBuffer buildBuffer(Set reasons) + public class_9801 buildBuffer(Set reasons) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); renderBlocks(new ArrayList<>(reasons), bufferBuilder); - return bufferBuilder.end(); + return bufferBuilder.method_60800(); } private void renderBlocks(List blocks, @@ -66,35 +64,35 @@ public final class NewChunksReasonsRenderer 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, minY, minZ); + bufferBuilder.vertex(maxX, minY, minZ); + bufferBuilder.vertex(maxX, minY, maxZ); + bufferBuilder.vertex(minX, minY, maxZ); - 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, maxY, minZ); + bufferBuilder.vertex(minX, maxY, maxZ); + bufferBuilder.vertex(maxX, maxY, maxZ); + bufferBuilder.vertex(maxX, maxY, minZ); - 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(minX, minY, minZ); + bufferBuilder.vertex(minX, maxY, minZ); + bufferBuilder.vertex(maxX, maxY, minZ); + bufferBuilder.vertex(maxX, minY, minZ); - 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(maxX, minY, minZ); + bufferBuilder.vertex(maxX, maxY, minZ); + bufferBuilder.vertex(maxX, maxY, maxZ); + bufferBuilder.vertex(maxX, minY, maxZ); - 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, maxZ); + bufferBuilder.vertex(maxX, minY, maxZ); + bufferBuilder.vertex(maxX, maxY, maxZ); + bufferBuilder.vertex(minX, maxY, maxZ); - bufferBuilder.vertex(minX, minY, minZ).next(); - bufferBuilder.vertex(minX, minY, maxZ).next(); - bufferBuilder.vertex(minX, maxY, maxZ).next(); - bufferBuilder.vertex(minX, maxY, minZ).next(); + bufferBuilder.vertex(minX, minY, minZ); + bufferBuilder.vertex(minX, minY, maxZ); + bufferBuilder.vertex(minX, maxY, maxZ); + bufferBuilder.vertex(minX, maxY, minZ); } } } diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java index 3f86b084..b5e0f57c 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java @@ -12,9 +12,9 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.wurstclient.settings.ColorSetting; @@ -39,7 +39,7 @@ public final class NewChunksRenderer this.oldChunksColor = oldChunksColor; } - public void updateBuffer(int i, BuiltBuffer buffer) + public void updateBuffer(int i, class_9801 buffer) { vertexBuffers[i] = new VertexBuffer(VertexBuffer.Usage.STATIC); vertexBuffers[i].bind(); diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java index 2a2ecd51..d15e6d94 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java @@ -13,8 +13,8 @@ import java.util.Set; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; @@ -26,15 +26,13 @@ import net.wurstclient.util.RenderUtils; public final class NewChunksSquareRenderer implements NewChunksChunkRenderer { @Override - public BuiltBuffer buildBuffer(Set chunks, int drawDistance) + public class_9801 buildBuffer(Set chunks, int drawDistance) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); renderChunks(new ArrayList<>(chunks), drawDistance, bufferBuilder); - return bufferBuilder.end(); + return bufferBuilder.method_60800(); } private void renderChunks(List chunks, int drawDistance, @@ -55,10 +53,10 @@ public final class NewChunksSquareRenderer implements NewChunksChunkRenderer 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(); + bufferBuilder.vertex(x1, 0, z1); + bufferBuilder.vertex(x2, 0, z1); + bufferBuilder.vertex(x2, 0, z2); + bufferBuilder.vertex(x1, 0, z2); } } } diff --git a/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java b/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java index 34d0696e..2aa4a2e2 100644 --- a/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java +++ b/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java @@ -17,6 +17,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BufferRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; @@ -81,28 +82,25 @@ public final class PortalEspRenderer { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); float[] colorF = group.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(Box box : group.getBoxes()) { Vec3d end = box.getCenter().subtract(region.toVec3d()); - bufferBuilder - .vertex(matrix, (float)start.x, (float)start.y, (float)start.z) - .next(); + bufferBuilder.vertex(matrix, (float)start.x, (float)start.y, + (float)start.z); - bufferBuilder - .vertex(matrix, (float)end.x, (float)end.y, (float)end.z) - .next(); + bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, + (float)end.z); } - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public static void prepareBuffers() diff --git a/src/main/java/net/wurstclient/hacks/treebot/Tree.java b/src/main/java/net/wurstclient/hacks/treebot/Tree.java index de6093f3..a77b6b92 100644 --- a/src/main/java/net/wurstclient/hacks/treebot/Tree.java +++ b/src/main/java/net/wurstclient/hacks/treebot/Tree.java @@ -14,10 +14,10 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; @@ -55,16 +55,15 @@ public class Tree implements AutoCloseable .offset(regionOffset); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); RenderUtils.drawCrossBox(box.offset(stump), bufferBuilder); for(BlockPos log : logs) RenderUtils.drawOutlinedBox(box.offset(log), bufferBuilder); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffer.bind(); vertexBuffer.upload(buffer); VertexBuffer.unbind(); diff --git a/src/main/java/net/wurstclient/hud/TabGui.java b/src/main/java/net/wurstclient/hud/TabGui.java index e8398431..13431e64 100644 --- a/src/main/java/net/wurstclient/hud/TabGui.java +++ b/src/main/java/net/wurstclient/hud/TabGui.java @@ -18,6 +18,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.DrawContext; 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; @@ -217,7 +218,6 @@ public final class TabGui implements KeyPressListener Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // color @@ -225,15 +225,15 @@ public final class TabGui implements KeyPressListener opacity); // box - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); { - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); } - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline positions float xi1 = x1 - 0.1F; @@ -244,16 +244,16 @@ public final class TabGui implements KeyPressListener // outline GL11.glLineWidth(1); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); { - bufferBuilder.vertex(matrix, xi1, yi1, 0).next(); - bufferBuilder.vertex(matrix, xi2, yi1, 0).next(); - bufferBuilder.vertex(matrix, xi2, yi2, 0).next(); - bufferBuilder.vertex(matrix, xi1, yi2, 0).next(); - bufferBuilder.vertex(matrix, xi1, yi1, 0).next(); + bufferBuilder.vertex(matrix, xi1, yi1, 0); + bufferBuilder.vertex(matrix, xi2, yi1, 0); + bufferBuilder.vertex(matrix, xi2, yi2, 0); + bufferBuilder.vertex(matrix, xi1, yi2, 0); + bufferBuilder.vertex(matrix, xi1, yi1, 0); } - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // shadow positions xi1 -= 0.9; @@ -265,42 +265,42 @@ public final class TabGui implements KeyPressListener RenderSystem.setShaderColor(1, 1, 1, 1); // top left - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); // top - bufferBuilder.vertex(matrix, x1, y1, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, x2, y1, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, xi2, yi1, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, xi1, yi1, 0).color(0, 0, 0, 0).next(); + bufferBuilder.vertex(matrix, x1, y1, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, x2, y1, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, xi2, yi1, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, xi1, yi1, 0).color(0, 0, 0, 0); // left - bufferBuilder.vertex(matrix, xi1, yi1, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, xi1, yi2, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, x1, y1, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); + bufferBuilder.vertex(matrix, xi1, yi1, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, xi1, yi2, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, x1, y2, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, x1, y1, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); // right - bufferBuilder.vertex(matrix, x2, y2, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, x2, y1, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, xi2, yi1, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, xi2, yi2, 0).color(0, 0, 0, 0).next(); + bufferBuilder.vertex(matrix, x2, y2, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, x2, y1, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, xi2, yi1, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, xi2, yi2, 0).color(0, 0, 0, 0); // bottom - bufferBuilder.vertex(matrix, xi2, yi2, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, xi1, yi2, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, x2, y2, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); + bufferBuilder.vertex(matrix, xi2, yi2, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, xi1, yi2, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, x1, y2, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, x2, y2, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } private static final class Tab diff --git a/src/main/java/net/wurstclient/hud/WurstLogo.java b/src/main/java/net/wurstclient/hud/WurstLogo.java index 1875d939..4ee3eb4e 100644 --- a/src/main/java/net/wurstclient/hud/WurstLogo.java +++ b/src/main/java/net/wurstclient/hud/WurstLogo.java @@ -15,6 +15,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; 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; @@ -27,7 +28,7 @@ import net.wurstclient.other_features.WurstLogoOtf; public final class WurstLogo { private static final Identifier texture = - new Identifier("wurst", "wurst_128.png"); + Identifier.of("wurst", "wurst_128.png"); public void render(DrawContext context) { @@ -81,13 +82,12 @@ public final class WurstLogo RenderSystem.setShader(GameRenderer::getPositionColorProgram); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_COLOR); - bufferBuilder.vertex(matrix, x1, y2, 0.0F).color(r, g, b, a).next(); - bufferBuilder.vertex(matrix, x2, y2, 0.0F).color(r, g, b, a).next(); - bufferBuilder.vertex(matrix, x2, y1, 0.0F).color(r, g, b, a).next(); - bufferBuilder.vertex(matrix, x1, y1, 0.0F).color(r, g, b, a).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + bufferBuilder.vertex(matrix, x1, y2, 0.0F).color(r, g, b, a); + bufferBuilder.vertex(matrix, x2, y2, 0.0F).color(r, g, b, a); + bufferBuilder.vertex(matrix, x2, y1, 0.0F).color(r, g, b, a); + bufferBuilder.vertex(matrix, x1, y1, 0.0F).color(r, g, b, a); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } } diff --git a/src/main/java/net/wurstclient/mixin/CameraMixin.java b/src/main/java/net/wurstclient/mixin/CameraMixin.java index d28d7515..5b0ad170 100644 --- a/src/main/java/net/wurstclient/mixin/CameraMixin.java +++ b/src/main/java/net/wurstclient/mixin/CameraMixin.java @@ -22,9 +22,9 @@ import net.wurstclient.hacks.CameraDistanceHack; public abstract class CameraMixin { @ModifyVariable(at = @At("HEAD"), - method = "clipToSpace(D)D", + method = "clipToSpace(F)F", argsOnly = true) - private double changeClipToSpaceDistance(double desiredCameraDistance) + private float changeClipToSpaceDistance(float desiredCameraDistance) { CameraDistanceHack cameraDistance = WurstClient.INSTANCE.getHax().cameraDistanceHack; @@ -34,9 +34,9 @@ public abstract class CameraMixin return desiredCameraDistance; } - @Inject(at = @At("HEAD"), method = "clipToSpace(D)D", cancellable = true) - private void onClipToSpace(double desiredCameraDistance, - CallbackInfoReturnable cir) + @Inject(at = @At("HEAD"), method = "clipToSpace(F)F", cancellable = true) + private void onClipToSpace(float desiredCameraDistance, + CallbackInfoReturnable cir) { if(WurstClient.INSTANCE.getHax().cameraNoClipHack.isEnabled()) cir.setReturnValue(desiredCameraDistance); diff --git a/src/main/java/net/wurstclient/mixin/ClientPlayerEntityMixin.java b/src/main/java/net/wurstclient/mixin/ClientPlayerEntityMixin.java index 8ea4175b..5800c942 100644 --- a/src/main/java/net/wurstclient/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/net/wurstclient/mixin/ClientPlayerEntityMixin.java @@ -163,8 +163,8 @@ public class ClientPlayerEntityMixin extends AbstractClientPlayerEntity @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", opcode = Opcodes.GETFIELD, - ordinal = 0), method = "updateNausea()V") - private void beforeUpdateNausea(CallbackInfo ci) + ordinal = 0), method = "tickNausea(Z)V") + private void beforeTickNausea(boolean fromPortalEffect, CallbackInfo ci) { if(!WurstClient.INSTANCE.getHax().portalGuiHack.isEnabled()) return; @@ -180,8 +180,8 @@ public class ClientPlayerEntityMixin extends AbstractClientPlayerEntity @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/network/ClientPlayerEntity;nauseaIntensity:F", opcode = Opcodes.GETFIELD, - ordinal = 1), method = "updateNausea()V") - private void afterUpdateNausea(CallbackInfo ci) + ordinal = 1), method = "tickNausea(Z)V") + private void afterTickNausea(boolean fromPortalEffect, CallbackInfo ci) { if(tempCurrentScreen == null) return; diff --git a/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java b/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java index 705738e1..0c47703f 100644 --- a/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java +++ b/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java @@ -16,6 +16,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import net.minecraft.class_9812; import net.minecraft.client.gui.screen.DisconnectedScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; @@ -35,7 +36,7 @@ public class DisconnectedScreenMixin extends Screen @Shadow @Final - private Text reason; + private class_9812 field_52131;// reason container thing @Shadow @Final private Screen parent; @@ -54,6 +55,7 @@ public class DisconnectedScreenMixin extends Screen if(!WurstClient.INSTANCE.isEnabled()) return; + Text reason = field_52131.reason(); System.out.println("Disconnected: " + reason); if(ForcedChatReportsScreen.isCausedByNoChatReports(reason)) diff --git a/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java b/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java index d7e72da5..c21da6bf 100644 --- a/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java +++ b/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java @@ -35,7 +35,7 @@ import net.wurstclient.options.WurstOptionsScreen; public abstract class GameMenuScreenMixin extends Screen { private static final Identifier WURST_TEXTURE = - new Identifier("wurst", "wurst_128.png"); + Identifier.of("wurst", "wurst_128.png"); private ButtonWidget wurstOptionsButton; diff --git a/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java index dff77e61..729da573 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java @@ -26,6 +26,7 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ClickableWidget; 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; @@ -374,27 +375,26 @@ public final class NavigatorFeatureScreen extends NavigatorScreen Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // window background // left & right setColorToBackground(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y3, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y3, 0).next(); - bufferBuilder.vertex(matrix, x5, y3, 0).next(); - bufferBuilder.vertex(matrix, x5, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y3, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y3, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + bufferBuilder.vertex(matrix, x3, y2, 0); + bufferBuilder.vertex(matrix, x3, y3, 0); + bufferBuilder.vertex(matrix, x5, y3, 0); + bufferBuilder.vertex(matrix, x5, y2, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x2, y3, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); setColorToBackground(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); // window background // between children @@ -409,10 +409,10 @@ public final class NavigatorFeatureScreen extends NavigatorScreen if(yc2 > bgy3 - windowY1) break; - bufferBuilder.vertex(matrix, xc1, yc2, 0).next(); - bufferBuilder.vertex(matrix, xc1, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc2, 0).next(); + bufferBuilder.vertex(matrix, xc1, yc2, 0); + bufferBuilder.vertex(matrix, xc1, yc1, 0); + bufferBuilder.vertex(matrix, xc2, yc1, 0); + bufferBuilder.vertex(matrix, xc2, yc2, 0); } // window background @@ -427,12 +427,12 @@ public final class NavigatorFeatureScreen extends NavigatorScreen yc1 = lastChild.getY() + lastChild.getHeight(); } int yc2 = yc1 + 2; - bufferBuilder.vertex(matrix, xc1, yc2, 0).next(); - bufferBuilder.vertex(matrix, xc1, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc1, 0).next(); - bufferBuilder.vertex(matrix, xc2, yc2, 0).next(); + bufferBuilder.vertex(matrix, xc1, yc2, 0); + bufferBuilder.vertex(matrix, xc1, yc1, 0); + bufferBuilder.vertex(matrix, xc2, yc1, 0); + bufferBuilder.vertex(matrix, xc2, yc2, 0); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } for(int i = 0; i < window.countChildren(); i++) diff --git a/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java index 94cdd7c8..648b5cc9 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java @@ -21,6 +21,7 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.TextFieldWidget; 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; @@ -297,31 +298,30 @@ public final class NavigatorMainScreen extends NavigatorScreen Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], 0.75F); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xt1, yt1, 0).next(); - bufferBuilder.vertex(matrix, xt1, yt2, 0).next(); - bufferBuilder.vertex(matrix, xt2, yt2, 0).next(); - bufferBuilder.vertex(matrix, xt2, yt1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xt1, yt1, 0); + bufferBuilder.vertex(matrix, xt1, yt2, 0); + bufferBuilder.vertex(matrix, xt2, yt2, 0); + bufferBuilder.vertex(matrix, xt2, yt1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xt1, yt1, 0).next(); - bufferBuilder.vertex(matrix, xt1, yt2, 0).next(); - bufferBuilder.vertex(matrix, xt2, yt2, 0).next(); - bufferBuilder.vertex(matrix, xt2, yt1, 0).next(); - bufferBuilder.vertex(matrix, xt1, yt1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xt1, yt1, 0); + bufferBuilder.vertex(matrix, xt1, yt2, 0); + bufferBuilder.vertex(matrix, xt2, yt2, 0); + bufferBuilder.vertex(matrix, xt2, yt1, 0); + bufferBuilder.vertex(matrix, xt1, yt1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); RenderSystem.setShaderColor(1, 1, 1, 1); @@ -420,7 +420,6 @@ public final class NavigatorMainScreen extends NavigatorScreen Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // separator @@ -429,11 +428,11 @@ public final class NavigatorMainScreen extends NavigatorScreen int by2 = by1 + area.height - 4; float[] acColor = WurstClient.INSTANCE.getGui().getAcColor(); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, bx1, by1, 0).next(); - bufferBuilder.vertex(matrix, bx1, by2, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, bx1, by1, 0); + bufferBuilder.vertex(matrix, bx1, by2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // hovering if(hovering) @@ -450,22 +449,22 @@ public final class NavigatorMainScreen extends NavigatorScreen // arrow RenderSystem.setShaderColor(0, hovering ? 1 : 0.85F, 0, 1); - bufferBuilder.begin(VertexFormat.DrawMode.TRIANGLES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, ax1, ay1, 0).next(); - bufferBuilder.vertex(matrix, ax2, ay1, 0).next(); - bufferBuilder.vertex(matrix, ax3, ay2, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, ax1, ay1, 0); + bufferBuilder.vertex(matrix, ax2, ay1, 0); + bufferBuilder.vertex(matrix, ax3, ay2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // arrow shadow RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, ax1, ay1, 0).next(); - bufferBuilder.vertex(matrix, ax2, ay1, 0).next(); - bufferBuilder.vertex(matrix, ax3, ay2, 0).next(); - bufferBuilder.vertex(matrix, ax1, ay1, 0).next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, ax1, ay1, 0); + bufferBuilder.vertex(matrix, ax2, ay1, 0); + bufferBuilder.vertex(matrix, ax3, ay2, 0); + bufferBuilder.vertex(matrix, ax1, ay1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // text if(!clickTimerRunning) diff --git a/src/main/java/net/wurstclient/navigator/NavigatorScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorScreen.java index 99009686..a6744d6f 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorScreen.java @@ -17,6 +17,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; 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; @@ -242,16 +243,15 @@ public abstract class NavigatorScreen extends Screen { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0); + bufferBuilder.vertex(matrix, x2, y1, 0); + bufferBuilder.vertex(matrix, x2, y2, 0); + bufferBuilder.vertex(matrix, x1, y2, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } protected final void drawBoxShadow(MatrixStack matrixStack, int x1, int y1, @@ -268,19 +268,18 @@ public abstract class NavigatorScreen extends Screen Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xi1, yi1, 0).next(); - bufferBuilder.vertex(matrix, xi2, yi1, 0).next(); - bufferBuilder.vertex(matrix, xi2, yi2, 0).next(); - bufferBuilder.vertex(matrix, xi1, yi2, 0).next(); - bufferBuilder.vertex(matrix, xi1, yi1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, xi1, yi1, 0); + bufferBuilder.vertex(matrix, xi2, yi1, 0); + bufferBuilder.vertex(matrix, xi2, yi2, 0); + bufferBuilder.vertex(matrix, xi1, yi2, 0); + bufferBuilder.vertex(matrix, xi1, yi1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // shadow positions xi1 -= 0.9; @@ -291,42 +290,42 @@ public abstract class NavigatorScreen extends Screen RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.setShaderColor(1, 1, 1, 1); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); // top - bufferBuilder.vertex(matrix, x1, y1, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, x2, y1, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, xi2, yi1, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, xi1, yi1, 0).color(0, 0, 0, 0).next(); + bufferBuilder.vertex(matrix, x1, y1, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, x2, y1, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, xi2, yi1, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, xi1, yi1, 0).color(0, 0, 0, 0); // left - bufferBuilder.vertex(matrix, xi1, yi1, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, xi1, yi2, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, x1, y1, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); + bufferBuilder.vertex(matrix, xi1, yi1, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, xi1, yi2, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, x1, y2, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, x1, y1, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); // right - bufferBuilder.vertex(matrix, x2, y2, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, x2, y1, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, xi2, yi1, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, xi2, yi2, 0).color(0, 0, 0, 0).next(); + bufferBuilder.vertex(matrix, x2, y2, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, x2, y1, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, xi2, yi1, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, xi2, yi2, 0).color(0, 0, 0, 0); // bottom - bufferBuilder.vertex(matrix, xi2, yi2, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, xi1, yi2, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, x2, y2, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); + bufferBuilder.vertex(matrix, xi2, yi2, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, xi1, yi2, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, x1, y2, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, x2, y2, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } protected final void drawDownShadow(MatrixStack matrixStack, int x1, int y1, @@ -337,30 +336,29 @@ public abstract class NavigatorScreen extends Screen Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); // outline float yi1 = y1 + 0.1F; RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, yi1, 0).next(); - bufferBuilder.vertex(matrix, x2, yi1, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, yi1, 0); + bufferBuilder.vertex(matrix, x2, yi1, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); // shadow RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.setShaderColor(1, 1, 1, 1); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); - bufferBuilder.vertex(matrix, x1, y1, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, x2, y1, 0) - .color(acColor[0], acColor[1], acColor[2], 0.75F).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).color(0, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).color(0, 0, 0, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, x1, y1, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, x2, y1, 0).color(acColor[0], acColor[1], + acColor[2], 0.75F); + bufferBuilder.vertex(matrix, x2, y2, 0).color(0, 0, 0, 0); + bufferBuilder.vertex(matrix, x1, y2, 0).color(0, 0, 0, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } protected final void drawBox(MatrixStack matrixStack, int x1, int y1, diff --git a/src/main/java/net/wurstclient/settings/BlockListSetting.java b/src/main/java/net/wurstclient/settings/BlockListSetting.java index ca50e67b..597200ea 100644 --- a/src/main/java/net/wurstclient/settings/BlockListSetting.java +++ b/src/main/java/net/wurstclient/settings/BlockListSetting.java @@ -41,7 +41,7 @@ public final class BlockListSetting extends Setting super(name, description); Arrays.stream(blocks).parallel() - .map(s -> Registries.BLOCK.get(new Identifier(s))) + .map(s -> Registries.BLOCK.get(Identifier.of(s))) .filter(Objects::nonNull).map(BlockUtils::getName).distinct() .sorted().forEachOrdered(s -> blockNames.add(s)); defaultNames = blockNames.toArray(new String[0]); @@ -101,7 +101,7 @@ public final class BlockListSetting extends Setting // otherwise, load the blocks in the JSON array JsonUtils.getAsArray(json).getAllStrings().parallelStream() - .map(s -> Registries.BLOCK.get(new Identifier(s))) + .map(s -> Registries.BLOCK.get(Identifier.of(s))) .filter(Objects::nonNull).map(BlockUtils::getName).distinct() .sorted().forEachOrdered(s -> blockNames.add(s)); diff --git a/src/main/java/net/wurstclient/settings/ItemListSetting.java b/src/main/java/net/wurstclient/settings/ItemListSetting.java index d75c6cd3..87221b49 100644 --- a/src/main/java/net/wurstclient/settings/ItemListSetting.java +++ b/src/main/java/net/wurstclient/settings/ItemListSetting.java @@ -40,7 +40,7 @@ public final class ItemListSetting extends Setting super(name, description); Arrays.stream(items).parallel() - .map(s -> Registries.ITEM.get(new Identifier(s))) + .map(s -> Registries.ITEM.get(Identifier.of(s))) .filter(Objects::nonNull) .map(i -> Registries.ITEM.getId(i).toString()).distinct().sorted() .forEachOrdered(s -> itemNames.add(s)); @@ -101,7 +101,7 @@ public final class ItemListSetting extends Setting // otherwise, load the items in the JSON array JsonUtils.getAsArray(json).getAllStrings().parallelStream() - .map(s -> Registries.ITEM.get(new Identifier(s))) + .map(s -> Registries.ITEM.get(Identifier.of(s))) .filter(Objects::nonNull) .map(i -> Registries.ITEM.getId(i).toString()).distinct() .sorted().forEachOrdered(s -> itemNames.add(s)); diff --git a/src/main/java/net/wurstclient/util/BlockUtils.java b/src/main/java/net/wurstclient/util/BlockUtils.java index 7c96963d..41f8ca74 100644 --- a/src/main/java/net/wurstclient/util/BlockUtils.java +++ b/src/main/java/net/wurstclient/util/BlockUtils.java @@ -71,7 +71,7 @@ public enum BlockUtils { try { - return Registries.BLOCK.get(new Identifier(name)); + return Registries.BLOCK.get(Identifier.of(name)); }catch(InvalidIdentifierException e) { @@ -98,7 +98,7 @@ public enum BlockUtils try { - return Registries.BLOCK.getOrEmpty(new Identifier(nameOrId)) + return Registries.BLOCK.getOrEmpty(Identifier.of(nameOrId)) .orElse(null); }catch(InvalidIdentifierException e) diff --git a/src/main/java/net/wurstclient/util/ItemUtils.java b/src/main/java/net/wurstclient/util/ItemUtils.java index 4150aacc..892e2e86 100644 --- a/src/main/java/net/wurstclient/util/ItemUtils.java +++ b/src/main/java/net/wurstclient/util/ItemUtils.java @@ -48,7 +48,7 @@ public enum ItemUtils try { - return Registries.ITEM.getOrEmpty(new Identifier(nameOrId)) + return Registries.ITEM.getOrEmpty(Identifier.of(nameOrId)) .orElse(null); }catch(InvalidIdentifierException e) diff --git a/src/main/java/net/wurstclient/util/ListWidget.java b/src/main/java/net/wurstclient/util/ListWidget.java index 83060fdd..f0569cb4 100644 --- a/src/main/java/net/wurstclient/util/ListWidget.java +++ b/src/main/java/net/wurstclient/util/ListWidget.java @@ -22,6 +22,7 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; 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; @@ -34,7 +35,7 @@ public abstract class ListWidget extends AbstractParentElement implements Drawable { private static final Identifier MENU_LIST_BACKGROUND_TEXTURE = - new Identifier("textures/gui/menu_list_background.png"); + Identifier.of("textures/gui/menu_list_background.png"); protected final MinecraftClient client; protected int width; @@ -122,7 +123,7 @@ public abstract class ListWidget extends AbstractParentElement protected void capYPosition() { - scrollAmount = MathHelper.clamp(scrollAmount, 0.0D, getMaxScroll()); + scrollAmount = MathHelper.clamp(scrollAmount, 0, getMaxScroll()); } public int getMaxScroll() @@ -146,26 +147,30 @@ public abstract class ListWidget extends AbstractParentElement int j = i + 6; capYPosition(); Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.enableBlend(); RenderSystem.setShaderTexture(0, MENU_LIST_BACKGROUND_TEXTURE); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShader(GameRenderer::getPositionTexColorProgram); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_TEXTURE_COLOR); - bufferBuilder.vertex(left, bottom, 0.0D) - .texture(left / 32.0F, (bottom + (int)scrollAmount) / 32.0F) - .color(32, 32, 32, 255).next(); - bufferBuilder.vertex(right, bottom, 0.0D) - .texture(right / 32.0F, (bottom + (int)scrollAmount) / 32.0F) - .color(32, 32, 32, 255).next(); - bufferBuilder.vertex(right, top, 0.0D) - .texture(right / 32.0F, (top + (int)scrollAmount) / 32.0F) - .color(32, 32, 32, 255).next(); - bufferBuilder.vertex(left, top, 0.0D) - .texture(left / 32.0F, (top + (int)scrollAmount) / 32.0F) - .color(32, 32, 32, 255).next(); - tessellator.draw(); + + BufferBuilder bufferBuilder = + tessellator.method_60827(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION_TEXTURE_COLOR); + + bufferBuilder.vertex(left, bottom, 0) + .texture(left / 32, (bottom + (int)scrollAmount) / 32) + .color(32, 32, 32, 255); + bufferBuilder.vertex(right, bottom, 0) + .texture(right / 32, (bottom + (int)scrollAmount) / 32) + .color(32, 32, 32, 255); + bufferBuilder.vertex(right, top, 0) + .texture(right / 32, (top + (int)scrollAmount) / 32) + .color(32, 32, 32, 255); + bufferBuilder.vertex(left, top, 0) + .texture(left / 32, (top + (int)scrollAmount) / 32) + .color(32, 32, 32, 255); + + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + int k = left + width / 2 - getRowWidth() / 2 + 2; int l = top + 4 - (int)scrollAmount; if(renderHeader) @@ -181,29 +186,31 @@ public abstract class ListWidget extends AbstractParentElement RenderSystem.blendFuncSeparate(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SrcFactor.ZERO, GlStateManager.DstFactor.ONE); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_TEXTURE_COLOR); - bufferBuilder.vertex(left, top + 4, 0.0D).texture(0.0F, 1.0F) - .color(0, 0, 0, 0).next(); - bufferBuilder.vertex(right, top + 4, 0.0D).texture(1.0F, 1.0F) - .color(0, 0, 0, 0).next(); - bufferBuilder.vertex(right, top, 0.0D).texture(1.0F, 0.0F) - .color(0, 0, 0, 255).next(); - bufferBuilder.vertex(left, top, 0.0D).texture(0.0F, 0.0F) - .color(0, 0, 0, 255).next(); - tessellator.draw(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_TEXTURE_COLOR); - bufferBuilder.vertex(left, bottom, 0.0D).texture(0.0F, 1.0F) - .color(0, 0, 0, 255).next(); - bufferBuilder.vertex(right, bottom, 0.0D).texture(1.0F, 1.0F) - .color(0, 0, 0, 255).next(); - bufferBuilder.vertex(right, bottom - 4, 0.0D).texture(1.0F, 0.0F) - .color(0, 0, 0, 0).next(); - bufferBuilder.vertex(left, bottom - 4, 0.0D).texture(0.0F, 0.0F) - .color(0, 0, 0, 0).next(); - tessellator.draw(); + RenderSystem.setShaderColor(1, 1, 1, 1); + bufferBuilder = + tessellator.method_60827(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION_TEXTURE_COLOR); + bufferBuilder.vertex(left, top + 4, 0).texture(0, 1).color(0, 0, 0, + 0); + bufferBuilder.vertex(right, top + 4, 0).texture(1, 1).color(0, 0, 0, + 0); + bufferBuilder.vertex(right, top, 0).texture(1, 0).color(0, 0, 0, + 255); + bufferBuilder.vertex(left, top, 0).texture(0, 0).color(0, 0, 0, + 255); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + bufferBuilder = + tessellator.method_60827(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION_TEXTURE_COLOR); + bufferBuilder.vertex(left, bottom, 0).texture(0, 1).color(0, 0, 0, + 255); + bufferBuilder.vertex(right, bottom, 0).texture(1, 1).color(0, 0, 0, + 255); + bufferBuilder.vertex(right, bottom - 4, 0).texture(1, 0).color(0, 0, + 0, 0); + bufferBuilder.vertex(left, bottom - 4, 0).texture(0, 0).color(0, 0, + 0, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); int n = getMaxScroll(); if(n > 0) { @@ -215,37 +222,31 @@ public abstract class ListWidget extends AbstractParentElement p = top; RenderSystem.setShader(GameRenderer::getPositionColorProgram); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_COLOR); - bufferBuilder.vertex(i, bottom, 0.0D).color(0, 0, 0, 255) - .next(); - bufferBuilder.vertex(j, bottom, 0.0D).color(0, 0, 0, 255) - .next(); - bufferBuilder.vertex(j, top, 0.0D).color(0, 0, 0, 255).next(); - bufferBuilder.vertex(i, top, 0.0D).color(0, 0, 0, 255).next(); - tessellator.draw(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_COLOR); - bufferBuilder.vertex(i, p + o, 0.0D).color(128, 128, 128, 255) - .next(); - bufferBuilder.vertex(j, p + o, 0.0D).color(128, 128, 128, 255) - .next(); - bufferBuilder.vertex(j, p, 0.0D).color(128, 128, 128, 255) - .next(); - bufferBuilder.vertex(i, p, 0.0D).color(128, 128, 128, 255) - .next(); - tessellator.draw(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_COLOR); - bufferBuilder.vertex(i, p + o - 1, 0.0D) - .color(192, 192, 192, 255).next(); - bufferBuilder.vertex(j - 1, p + o - 1, 0.0D) - .color(192, 192, 192, 255).next(); - bufferBuilder.vertex(j - 1, p, 0.0D).color(192, 192, 192, 255) - .next(); - bufferBuilder.vertex(i, p, 0.0D).color(192, 192, 192, 255) - .next(); - tessellator.draw(); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + bufferBuilder.vertex(i, bottom, 0).color(0, 0, 0, 255); + bufferBuilder.vertex(j, bottom, 0).color(0, 0, 0, 255); + bufferBuilder.vertex(j, top, 0).color(0, 0, 0, 255); + bufferBuilder.vertex(i, top, 0).color(0, 0, 0, 255); + BufferRenderer + .drawWithGlobalProgram(bufferBuilder.method_60800()); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + bufferBuilder.vertex(i, p + o, 0).color(128, 128, 128, 255); + bufferBuilder.vertex(j, p + o, 0).color(128, 128, 128, 255); + bufferBuilder.vertex(j, p, 0).color(128, 128, 128, 255); + bufferBuilder.vertex(i, p, 0).color(128, 128, 128, 255); + BufferRenderer + .drawWithGlobalProgram(bufferBuilder.method_60800()); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + bufferBuilder.vertex(i, p + o - 1, 0).color(192, 192, 192, 255); + bufferBuilder.vertex(j - 1, p + o - 1, 0).color(192, 192, 192, + 255); + bufferBuilder.vertex(j - 1, p, 0).color(192, 192, 192, 255); + bufferBuilder.vertex(i, p, 0).color(192, 192, 192, 255); + BufferRenderer + .drawWithGlobalProgram(bufferBuilder.method_60800()); } renderDecorations(mouseX, mouseY); @@ -301,21 +302,21 @@ public abstract class ListWidget extends AbstractParentElement if(!isVisible() || button != 0 || !scrolling) return false; if(mouseY < top) - scrollAmount = 0.0D; + scrollAmount = 0.0; else if(mouseY > bottom) scrollAmount = getMaxScroll(); else { double d = getMaxScroll(); - if(d < 1.0D) - d = 1.0D; + if(d < 1.0) + d = 1.0; int i = (int)((float)((bottom - top) * (bottom - top)) / (float)getMaxPosition()); i = MathHelper.clamp(i, 32, bottom - top - 8); double e = d / (bottom - top - i); - if(e < 1.0D) - e = 1.0D; + if(e < 1.0) + e = 1.0; scrollAmount += deltaY * e; capYPosition(); @@ -330,7 +331,7 @@ public abstract class ListWidget extends AbstractParentElement { if(!isVisible()) return false; - scrollAmount -= verticalAmount * itemHeight / 2.0D; + scrollAmount -= verticalAmount * itemHeight / 2.0; return true; } @@ -379,7 +380,6 @@ public abstract class ListWidget extends AbstractParentElement { int m = getItemCount(); Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); for(int n = 0; n < m; ++n) { @@ -392,23 +392,25 @@ public abstract class ListWidget extends AbstractParentElement { int q = left + width / 2 - getRowWidth() / 2; int r = left + width / 2 + getRowWidth() / 2; - float g = isFocused() ? 1.0F : 0.5F; - RenderSystem.setShaderColor(g, g, g, 1.0F); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(q, o + p + 2, 0.0D).next(); - bufferBuilder.vertex(r, o + p + 2, 0.0D).next(); - bufferBuilder.vertex(r, o - 2, 0.0D).next(); - bufferBuilder.vertex(q, o - 2, 0.0D).next(); - tessellator.draw(); - RenderSystem.setShaderColor(0.0F, 0.0F, 0.0F, 1.0F); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(q + 1, o + p + 1, 0.0D).next(); - bufferBuilder.vertex(r - 1, o + p + 1, 0.0D).next(); - bufferBuilder.vertex(r - 1, o - 1, 0.0D).next(); - bufferBuilder.vertex(q + 1, o - 1, 0.0D).next(); - tessellator.draw(); + float g = isFocused() ? 1 : 0.5F; + RenderSystem.setShaderColor(g, g, g, 1); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(q, o + p + 2, 0); + bufferBuilder.vertex(r, o + p + 2, 0); + bufferBuilder.vertex(r, o - 2, 0); + bufferBuilder.vertex(q, o - 2, 0); + BufferRenderer + .drawWithGlobalProgram(bufferBuilder.method_60800()); + RenderSystem.setShaderColor(0, 0, 0, 1); + bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(q + 1, o + p + 1, 0); + bufferBuilder.vertex(r - 1, o + p + 1, 0); + bufferBuilder.vertex(r - 1, o - 1, 0); + bufferBuilder.vertex(q + 1, o - 1, 0); + BufferRenderer + .drawWithGlobalProgram(bufferBuilder.method_60800()); } RenderSystem.setShaderColor(1, 1, 1, 1); @@ -432,24 +434,23 @@ public abstract class ListWidget extends AbstractParentElement int bottomAlpha) { Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.enableBlend(); RenderSystem.setShaderTexture(0, MENU_LIST_BACKGROUND_TEXTURE); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShader(GameRenderer::getPositionTexColorProgram); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_TEXTURE_COLOR); - bufferBuilder.vertex(left, bottom, 0.0D).texture(0.0F, bottom / 32.0F) - .color(64, 64, 64, bottomAlpha).next(); - bufferBuilder.vertex(left + width, bottom, 0.0D) - .texture(width / 32.0F, bottom / 32.0F) - .color(64, 64, 64, bottomAlpha).next(); - bufferBuilder.vertex(left + width, top, 0.0D) - .texture(width / 32.0F, top / 32.0F).color(64, 64, 64, topAlpha) - .next(); - bufferBuilder.vertex(left, top, 0.0D).texture(0.0F, top / 32.0F) - .color(64, 64, 64, topAlpha).next(); - tessellator.draw(); + + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR); + bufferBuilder.vertex(left, bottom, 0).texture(0, bottom / 32).color(64, + 64, 64, bottomAlpha); + bufferBuilder.vertex(left + width, bottom, 0) + .texture(width / 32, bottom / 32).color(64, 64, 64, bottomAlpha); + bufferBuilder.vertex(left + width, top, 0).texture(width / 32, top / 32) + .color(64, 64, 64, topAlpha); + bufferBuilder.vertex(left, top, 0).texture(0, top / 32).color(64, 64, + 64, topAlpha); + + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public double getScrollAmount() @@ -464,26 +465,25 @@ public abstract class ListWidget extends AbstractParentElement Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); RenderSystem.setShaderColor(0.5F, 0.5F, 0.5F, 1); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x - 2, y - 2, 0).next(); - bufferBuilder.vertex(matrix, x + 218, y - 2, 0).next(); - bufferBuilder.vertex(matrix, x + 218, y + 28, 0).next(); - bufferBuilder.vertex(matrix, x - 2, y + 28, 0).next(); - tessellator.draw(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x - 2, y - 2, 0); + bufferBuilder.vertex(matrix, x + 218, y - 2, 0); + bufferBuilder.vertex(matrix, x + 218, y + 28, 0); + bufferBuilder.vertex(matrix, x - 2, y + 28, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); RenderSystem.setShaderColor(0, 0, 0, 1); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x - 1, y - 1, 0).next(); - bufferBuilder.vertex(matrix, x + 217, y - 1, 0).next(); - bufferBuilder.vertex(matrix, x + 217, y + 27, 0).next(); - bufferBuilder.vertex(matrix, x - 1, y + 27, 0).next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, x - 1, y - 1, 0); + bufferBuilder.vertex(matrix, x + 217, y - 1, 0); + bufferBuilder.vertex(matrix, x + 217, y + 27, 0); + bufferBuilder.vertex(matrix, x - 1, y + 27, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_CULL_FACE); diff --git a/src/main/java/net/wurstclient/util/RenderUtils.java b/src/main/java/net/wurstclient/util/RenderUtils.java index efe5e64c..5c25e117 100644 --- a/src/main/java/net/wurstclient/util/RenderUtils.java +++ b/src/main/java/net/wurstclient/util/RenderUtils.java @@ -13,18 +13,12 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.class_9801; import net.minecraft.block.Blocks; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferBuilder.BuiltBuffer; -import net.minecraft.client.render.Camera; -import net.minecraft.client.render.DiffuseLighting; -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.render.*; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; @@ -131,102 +125,59 @@ public enum RenderUtils public static void drawSolidBox(Box bb, MatrixStack matrixStack) { + 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; + Matrix4f matrix = matrixStack.peek().getPositionMatrix(); - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, minX, minY, minZ); + bufferBuilder.vertex(matrix, maxX, minY, minZ); + bufferBuilder.vertex(matrix, maxX, minY, maxZ); + bufferBuilder.vertex(matrix, minX, minY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, minX, maxY, minZ); + bufferBuilder.vertex(matrix, minX, maxY, maxZ); + bufferBuilder.vertex(matrix, maxX, maxY, maxZ); + bufferBuilder.vertex(matrix, maxX, maxY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, minX, minY, minZ); + bufferBuilder.vertex(matrix, minX, maxY, minZ); + bufferBuilder.vertex(matrix, maxX, maxY, minZ); + bufferBuilder.vertex(matrix, maxX, minY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, maxX, minY, minZ); + bufferBuilder.vertex(matrix, maxX, maxY, minZ); + bufferBuilder.vertex(matrix, maxX, maxY, maxZ); + bufferBuilder.vertex(matrix, maxX, minY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, minX, minY, maxZ); + bufferBuilder.vertex(matrix, maxX, minY, maxZ); + bufferBuilder.vertex(matrix, maxX, maxY, maxZ); + bufferBuilder.vertex(matrix, minX, maxY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.minZ) - .next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, minX, minY, minZ); + bufferBuilder.vertex(matrix, minX, minY, maxZ); + bufferBuilder.vertex(matrix, minX, maxY, maxZ); + bufferBuilder.vertex(matrix, minX, maxY, minZ); + + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public static void drawSolidBox(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); drawSolidBox(bb, bufferBuilder); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffer.bind(); vertexBuffer.upload(buffer); @@ -235,35 +186,42 @@ public enum RenderUtils public static void drawSolidBox(Box bb, BufferBuilder bufferBuilder) { - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); + 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(bb.minX, bb.maxY, bb.minZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); + bufferBuilder.vertex(minX, minY, minZ); + bufferBuilder.vertex(maxX, minY, minZ); + bufferBuilder.vertex(maxX, minY, maxZ); + bufferBuilder.vertex(minX, minY, maxZ); - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next(); + bufferBuilder.vertex(minX, maxY, minZ); + bufferBuilder.vertex(minX, maxY, maxZ); + bufferBuilder.vertex(maxX, maxY, maxZ); + bufferBuilder.vertex(maxX, maxY, minZ); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); + bufferBuilder.vertex(minX, minY, minZ); + bufferBuilder.vertex(minX, maxY, minZ); + bufferBuilder.vertex(maxX, maxY, minZ); + bufferBuilder.vertex(maxX, minY, minZ); - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(maxX, minY, minZ); + bufferBuilder.vertex(maxX, maxY, minZ); + bufferBuilder.vertex(maxX, maxY, maxZ); + bufferBuilder.vertex(maxX, minY, maxZ); - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); + bufferBuilder.vertex(minX, minY, maxZ); + bufferBuilder.vertex(maxX, minY, maxZ); + bufferBuilder.vertex(maxX, maxY, maxZ); + bufferBuilder.vertex(minX, maxY, maxZ); + + bufferBuilder.vertex(minX, minY, minZ); + bufferBuilder.vertex(minX, minY, maxZ); + bufferBuilder.vertex(minX, maxY, maxZ); + bufferBuilder.vertex(minX, maxY, minZ); } public static void drawOutlinedBox(MatrixStack matrixStack) @@ -275,106 +233,63 @@ public enum RenderUtils { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.minZ) - .next(); + 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(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, minX, minY, minZ); + bufferBuilder.vertex(matrix, maxX, minY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, maxX, minY, minZ); + bufferBuilder.vertex(matrix, maxX, minY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, maxX, minY, maxZ); + bufferBuilder.vertex(matrix, minX, minY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, minX, minY, maxZ); + bufferBuilder.vertex(matrix, minX, minY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, minX, minY, minZ); + bufferBuilder.vertex(matrix, minX, maxY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, maxX, minY, minZ); + bufferBuilder.vertex(matrix, maxX, maxY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, maxX, minY, maxZ); + bufferBuilder.vertex(matrix, maxX, maxY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, minX, minY, maxZ); + bufferBuilder.vertex(matrix, minX, maxY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, minX, maxY, minZ); + bufferBuilder.vertex(matrix, maxX, maxY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, maxX, maxY, minZ); + bufferBuilder.vertex(matrix, maxX, maxY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.minZ) - .next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, maxX, maxY, maxZ); + bufferBuilder.vertex(matrix, minX, maxY, maxZ); + + bufferBuilder.vertex(matrix, minX, maxY, maxZ); + bufferBuilder.vertex(matrix, minX, maxY, minZ); + + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public static void drawOutlinedBox(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawOutlinedBox(bb, bufferBuilder); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffer.bind(); vertexBuffer.upload(buffer); @@ -383,146 +298,110 @@ public enum RenderUtils public static void drawOutlinedBox(Box bb, BufferBuilder bufferBuilder) { - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next(); + 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(bb.maxX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); + bufferBuilder.vertex(minX, minY, minZ); + bufferBuilder.vertex(maxX, minY, minZ); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); + bufferBuilder.vertex(maxX, minY, minZ); + bufferBuilder.vertex(maxX, minY, maxZ); - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); + bufferBuilder.vertex(maxX, minY, maxZ); + bufferBuilder.vertex(minX, minY, maxZ); - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); + bufferBuilder.vertex(minX, minY, maxZ); + bufferBuilder.vertex(minX, minY, minZ); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); + bufferBuilder.vertex(minX, minY, minZ); + bufferBuilder.vertex(minX, maxY, minZ); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(maxX, minY, minZ); + bufferBuilder.vertex(maxX, maxY, minZ); - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(maxX, minY, maxZ); + bufferBuilder.vertex(maxX, maxY, maxZ); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); + bufferBuilder.vertex(minX, minY, maxZ); + bufferBuilder.vertex(minX, maxY, maxZ); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(minX, maxY, minZ); + bufferBuilder.vertex(maxX, maxY, minZ); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(maxX, maxY, minZ); + bufferBuilder.vertex(maxX, maxY, maxZ); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); + bufferBuilder.vertex(maxX, maxY, maxZ); + bufferBuilder.vertex(minX, maxY, maxZ); + + bufferBuilder.vertex(minX, maxY, maxZ); + bufferBuilder.vertex(minX, maxY, minZ); } public static void drawCrossBox(Box bb, MatrixStack matrixStack) { + 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; + Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, minX, minY, minZ); + bufferBuilder.vertex(matrix, maxX, maxY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, maxX, minY, minZ); + bufferBuilder.vertex(matrix, maxX, maxY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, maxX, minY, maxZ); + bufferBuilder.vertex(matrix, minX, maxY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, minX, minY, maxZ); + bufferBuilder.vertex(matrix, minX, maxY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, maxX, minY, minZ); + bufferBuilder.vertex(matrix, minX, maxY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, maxX, minY, maxZ); + bufferBuilder.vertex(matrix, maxX, maxY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, minX, maxY, maxZ); + bufferBuilder.vertex(matrix, maxX, maxY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, minX, minY, minZ); + bufferBuilder.vertex(matrix, minX, maxY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, minX, maxY, minZ); + bufferBuilder.vertex(matrix, maxX, maxY, minZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.maxY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.maxY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, minX, maxY, maxZ); + bufferBuilder.vertex(matrix, maxX, maxY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.minZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, maxX, minY, minZ); + bufferBuilder.vertex(matrix, minX, minY, maxZ); - bufferBuilder - .vertex(matrix, (float)bb.maxX, (float)bb.minY, (float)bb.maxZ) - .next(); - bufferBuilder - .vertex(matrix, (float)bb.minX, (float)bb.minY, (float)bb.minZ) - .next(); - tessellator.draw(); + bufferBuilder.vertex(matrix, maxX, minY, maxZ); + bufferBuilder.vertex(matrix, maxX, minY, minZ); + + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public static void drawCrossBox(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawCrossBox(bb, bufferBuilder); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffer.bind(); vertexBuffer.upload(buffer); @@ -531,129 +410,109 @@ public enum RenderUtils public static void drawCrossBox(Box bb, BufferBuilder bufferBuilder) { - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); + 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(bb.maxX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(minX, minY, minZ); + bufferBuilder.vertex(maxX, maxY, minZ); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(maxX, minY, minZ); + bufferBuilder.vertex(maxX, maxY, maxZ); - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); + bufferBuilder.vertex(maxX, minY, maxZ); + bufferBuilder.vertex(minX, maxY, maxZ); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); + bufferBuilder.vertex(minX, minY, maxZ); + bufferBuilder.vertex(minX, maxY, minZ); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); + bufferBuilder.vertex(maxX, minY, minZ); + bufferBuilder.vertex(minX, maxY, minZ); - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(maxX, minY, maxZ); + bufferBuilder.vertex(maxX, maxY, minZ); - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(minX, minY, maxZ); + bufferBuilder.vertex(maxX, maxY, maxZ); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(minX, minY, minZ); + bufferBuilder.vertex(minX, maxY, maxZ); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); + bufferBuilder.vertex(minX, maxY, minZ); + bufferBuilder.vertex(maxX, maxY, maxZ); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); + bufferBuilder.vertex(maxX, maxY, minZ); + bufferBuilder.vertex(minX, maxY, maxZ); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); + bufferBuilder.vertex(maxX, minY, minZ); + bufferBuilder.vertex(minX, minY, maxZ); + + bufferBuilder.vertex(maxX, minY, maxZ); + bufferBuilder.vertex(minX, minY, minZ); } public static void drawNode(Box bb, MatrixStack matrixStack) { Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); RenderSystem.setShader(GameRenderer::getPositionProgram); double midX = (bb.minX + bb.maxX) / 2; double midY = (bb.minY + bb.maxY) / 2; double midZ = (bb.minZ + bb.maxZ) / 2; - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ) - .next(); - bufferBuilder.vertex(matrix, (float)bb.minX, (float)midY, (float)midZ) - .next(); + bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ); + bufferBuilder.vertex(matrix, (float)bb.minX, (float)midY, (float)midZ); - bufferBuilder.vertex(matrix, (float)bb.minX, (float)midY, (float)midZ) - .next(); - bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, (float)bb.minX, (float)midY, (float)midZ); + bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.minZ); - bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.minZ) - .next(); - bufferBuilder.vertex(matrix, (float)bb.maxX, (float)midY, (float)midZ) - .next(); + bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.minZ); + bufferBuilder.vertex(matrix, (float)bb.maxX, (float)midY, (float)midZ); - bufferBuilder.vertex(matrix, (float)bb.maxX, (float)midY, (float)midZ) - .next(); - bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, (float)bb.maxX, (float)midY, (float)midZ); + bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ); - bufferBuilder.vertex(matrix, (float)midX, (float)bb.maxY, (float)midZ) - .next(); - bufferBuilder.vertex(matrix, (float)bb.maxX, (float)midY, (float)midZ) - .next(); + bufferBuilder.vertex(matrix, (float)midX, (float)bb.maxY, (float)midZ); + bufferBuilder.vertex(matrix, (float)bb.maxX, (float)midY, (float)midZ); - bufferBuilder.vertex(matrix, (float)midX, (float)bb.maxY, (float)midZ) - .next(); - bufferBuilder.vertex(matrix, (float)bb.minX, (float)midY, (float)midZ) - .next(); + bufferBuilder.vertex(matrix, (float)midX, (float)bb.maxY, (float)midZ); + bufferBuilder.vertex(matrix, (float)bb.minX, (float)midY, (float)midZ); - bufferBuilder.vertex(matrix, (float)midX, (float)bb.maxY, (float)midZ) - .next(); - bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, (float)midX, (float)bb.maxY, (float)midZ); + bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.minZ); - bufferBuilder.vertex(matrix, (float)midX, (float)bb.maxY, (float)midZ) - .next(); - bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, (float)midX, (float)bb.maxY, (float)midZ); + bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ); - bufferBuilder.vertex(matrix, (float)midX, (float)bb.minY, (float)midZ) - .next(); - bufferBuilder.vertex(matrix, (float)bb.maxX, (float)midY, (float)midZ) - .next(); + bufferBuilder.vertex(matrix, (float)midX, (float)bb.minY, (float)midZ); + bufferBuilder.vertex(matrix, (float)bb.maxX, (float)midY, (float)midZ); - bufferBuilder.vertex(matrix, (float)midX, (float)bb.minY, (float)midZ) - .next(); - bufferBuilder.vertex(matrix, (float)bb.minX, (float)midY, (float)midZ) - .next(); + bufferBuilder.vertex(matrix, (float)midX, (float)bb.minY, (float)midZ); + bufferBuilder.vertex(matrix, (float)bb.minX, (float)midY, (float)midZ); - bufferBuilder.vertex(matrix, (float)midX, (float)bb.minY, (float)midZ) - .next(); - bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.minZ) - .next(); + bufferBuilder.vertex(matrix, (float)midX, (float)bb.minY, (float)midZ); + bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.minZ); - bufferBuilder.vertex(matrix, (float)midX, (float)bb.minY, (float)midZ) - .next(); - bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ) - .next(); + bufferBuilder.vertex(matrix, (float)midX, (float)bb.minY, (float)midZ); + bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public static void drawNode(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawNode(bb, bufferBuilder); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffer.bind(); vertexBuffer.upload(buffer); @@ -662,45 +521,51 @@ public enum RenderUtils public static void drawNode(Box bb, BufferBuilder bufferBuilder) { - double midX = (bb.minX + bb.maxX) / 2; - double midY = (bb.minY + bb.maxY) / 2; - double midZ = (bb.minZ + bb.maxZ) / 2; + 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; + float midX = (minX + maxX) / 2F; + float midY = (minY + maxY) / 2F; + float midZ = (minZ + maxZ) / 2F; - bufferBuilder.vertex(midX, midY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, midY, midZ).next(); + bufferBuilder.vertex(midX, midY, maxZ); + bufferBuilder.vertex(minX, midY, midZ); - bufferBuilder.vertex(bb.minX, midY, midZ).next(); - bufferBuilder.vertex(midX, midY, bb.minZ).next(); + bufferBuilder.vertex(minX, midY, midZ); + bufferBuilder.vertex(midX, midY, minZ); - bufferBuilder.vertex(midX, midY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, midY, midZ).next(); + bufferBuilder.vertex(midX, midY, minZ); + bufferBuilder.vertex(maxX, midY, midZ); - bufferBuilder.vertex(bb.maxX, midY, midZ).next(); - bufferBuilder.vertex(midX, midY, bb.maxZ).next(); + bufferBuilder.vertex(maxX, midY, midZ); + bufferBuilder.vertex(midX, midY, maxZ); - bufferBuilder.vertex(midX, bb.maxY, midZ).next(); - bufferBuilder.vertex(bb.maxX, midY, midZ).next(); + bufferBuilder.vertex(midX, maxY, midZ); + bufferBuilder.vertex(maxX, midY, midZ); - bufferBuilder.vertex(midX, bb.maxY, midZ).next(); - bufferBuilder.vertex(bb.minX, midY, midZ).next(); + bufferBuilder.vertex(midX, maxY, midZ); + bufferBuilder.vertex(minX, midY, midZ); - bufferBuilder.vertex(midX, bb.maxY, midZ).next(); - bufferBuilder.vertex(midX, midY, bb.minZ).next(); + bufferBuilder.vertex(midX, maxY, midZ); + bufferBuilder.vertex(midX, midY, minZ); - bufferBuilder.vertex(midX, bb.maxY, midZ).next(); - bufferBuilder.vertex(midX, midY, bb.maxZ).next(); + bufferBuilder.vertex(midX, maxY, midZ); + bufferBuilder.vertex(midX, midY, maxZ); - bufferBuilder.vertex(midX, bb.minY, midZ).next(); - bufferBuilder.vertex(bb.maxX, midY, midZ).next(); + bufferBuilder.vertex(midX, minY, midZ); + bufferBuilder.vertex(maxX, midY, midZ); - bufferBuilder.vertex(midX, bb.minY, midZ).next(); - bufferBuilder.vertex(bb.minX, midY, midZ).next(); + bufferBuilder.vertex(midX, minY, midZ); + bufferBuilder.vertex(minX, midY, midZ); - bufferBuilder.vertex(midX, bb.minY, midZ).next(); - bufferBuilder.vertex(midX, midY, bb.minZ).next(); + bufferBuilder.vertex(midX, minY, midZ); + bufferBuilder.vertex(midX, midY, minZ); - bufferBuilder.vertex(midX, bb.minY, midZ).next(); - bufferBuilder.vertex(midX, midY, bb.maxZ).next(); + bufferBuilder.vertex(midX, minY, midZ); + bufferBuilder.vertex(midX, midY, maxZ); } public static void drawArrow(Vec3d from, Vec3d to, MatrixStack matrixStack) @@ -708,9 +573,8 @@ public enum RenderUtils RenderSystem.setShader(GameRenderer::getPositionProgram); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); double startX = from.x; double startY = from.y; @@ -723,10 +587,9 @@ public enum RenderUtils matrixStack.push(); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); - bufferBuilder - .vertex(matrix, (float)startX, (float)startY, (float)startZ).next(); - bufferBuilder.vertex(matrix, (float)endX, (float)endY, (float)endZ) - .next(); + bufferBuilder.vertex(matrix, (float)startX, (float)startY, + (float)startZ); + bufferBuilder.vertex(matrix, (float)endX, (float)endY, (float)endZ); matrixStack.translate(endX, endY, endZ); matrixStack.scale(0.1F, 0.1F, 0.1F); @@ -742,51 +605,49 @@ public enum RenderUtils float zAngle = (float)Math.atan2(xDiff, yzDiff); matrix.rotate(zAngle, new Vector3f(0, 0, 1)); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 2, 1); + bufferBuilder.vertex(matrix, -1, 2, 0); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); + bufferBuilder.vertex(matrix, -1, 2, 0); + bufferBuilder.vertex(matrix, 0, 2, -1); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 2, -1); + bufferBuilder.vertex(matrix, 1, 2, 0); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); + bufferBuilder.vertex(matrix, 1, 2, 0); + bufferBuilder.vertex(matrix, 0, 2, 1); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); + bufferBuilder.vertex(matrix, 1, 2, 0); + bufferBuilder.vertex(matrix, -1, 2, 0); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); + bufferBuilder.vertex(matrix, 0, 2, 1); + bufferBuilder.vertex(matrix, 0, 2, -1); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, 1, 2, 0); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, -1, 2, 0); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, 0, 2, -1); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, 0, 2, 1); matrixStack.pop(); - tessellator.draw(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); } public static void drawArrow(Vec3d from, Vec3d to, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator.method_60827( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawArrow(from, to, bufferBuilder); - BuiltBuffer buffer = bufferBuilder.end(); + class_9801 buffer = bufferBuilder.method_60800(); vertexBuffer.bind(); vertexBuffer.upload(buffer); @@ -807,10 +668,9 @@ public enum RenderUtils Matrix4f matrix = new Matrix4f(); matrix.identity(); - bufferBuilder - .vertex(matrix, (float)startX, (float)startY, (float)startZ).next(); - bufferBuilder.vertex(matrix, (float)endX, (float)endY, (float)endZ) - .next(); + bufferBuilder.vertex(matrix, (float)startX, (float)startY, + (float)startZ); + bufferBuilder.vertex(matrix, (float)endX, (float)endY, (float)endZ); matrix.translate((float)endX, (float)endY, (float)endZ); matrix.scale(0.1F, 0.1F, 0.1F); @@ -826,35 +686,35 @@ public enum RenderUtils float zAngle = (float)Math.atan2(xDiff, yzDiff); matrix.rotate(zAngle, new Vector3f(0, 0, 1)); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 2, 1); + bufferBuilder.vertex(matrix, -1, 2, 0); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); + bufferBuilder.vertex(matrix, -1, 2, 0); + bufferBuilder.vertex(matrix, 0, 2, -1); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 2, -1); + bufferBuilder.vertex(matrix, 1, 2, 0); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); + bufferBuilder.vertex(matrix, 1, 2, 0); + bufferBuilder.vertex(matrix, 0, 2, 1); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); + bufferBuilder.vertex(matrix, 1, 2, 0); + bufferBuilder.vertex(matrix, -1, 2, 0); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); + bufferBuilder.vertex(matrix, 0, 2, 1); + bufferBuilder.vertex(matrix, 0, 2, -1); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, 1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, 1, 2, 0); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, -1, 2, 0).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, -1, 2, 0); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, -1).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, 0, 2, -1); - bufferBuilder.vertex(matrix, 0, 0, 0).next(); - bufferBuilder.vertex(matrix, 0, 2, 1).next(); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, 0, 2, 1); } public static void drawItem(DrawContext context, ItemStack stack, int x, diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index e17259ce..66dac03e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,8 +30,8 @@ "depends": { "fabricloader": ">=0.15.9", - "fabric-api": ">=0.98.2", - "minecraft": "~1.21-alpha.24.20.a", + "fabric-api": ">=0.99.1", + "minecraft": "~1.21-alpha.24.21.a", "java": ">=21" }, "suggests": { From fbe7940898fa37ef3cd4a6efe483b43a7ddc93b0 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 29 May 2024 18:29:07 +0200 Subject: [PATCH 010/109] [Wurst-Bot] Update to 1.21-pre1 --- gradle.properties | 8 +- .../java/net/wurstclient/WurstClient.java | 2 +- .../java/net/wurstclient/ai/PathRenderer.java | 8 +- .../wurstclient/altmanager/AltRenderer.java | 4 +- .../altmanager/screens/AltEditorScreen.java | 4 +- .../altmanager/screens/AltManagerScreen.java | 8 +- .../net/wurstclient/clickgui/ClickGui.java | 112 +++++++++--------- .../wurstclient/clickgui/ComboBoxPopup.java | 8 +- .../components/AbstractListEditButton.java | 12 +- .../clickgui/components/BlockComponent.java | 4 +- .../components/CheckboxComponent.java | 20 ++-- .../clickgui/components/ColorComponent.java | 12 +- .../components/ComboBoxComponent.java | 24 ++-- .../clickgui/components/FeatureButton.java | 24 ++-- .../clickgui/components/FileComponent.java | 12 +- .../clickgui/components/RadarComponent.java | 16 +-- .../clickgui/components/SliderComponent.java | 24 ++-- .../components/TextFieldEditButton.java | 12 +- .../net/wurstclient/hacks/BaseFinderHack.java | 7 +- .../net/wurstclient/hacks/BowAimbotHack.java | 4 +- .../net/wurstclient/hacks/CaveFinderHack.java | 7 +- .../net/wurstclient/hacks/ExcavatorHack.java | 4 +- .../net/wurstclient/hacks/FreecamHack.java | 4 +- .../net/wurstclient/hacks/ItemEspHack.java | 4 +- .../net/wurstclient/hacks/MobEspHack.java | 4 +- .../wurstclient/hacks/MobSpawnEspHack.java | 7 +- .../net/wurstclient/hacks/PlayerEspHack.java | 4 +- .../net/wurstclient/hacks/SearchHack.java | 7 +- .../net/wurstclient/hacks/SkinDerpHack.java | 3 +- .../wurstclient/hacks/TrajectoriesHack.java | 4 +- .../net/wurstclient/hacks/TunnellerHack.java | 19 ++- .../hacks/autofarm/AutoFarmRenderer.java | 15 ++- .../hacks/autofish/AutoFishDebugDraw.java | 4 +- .../hacks/chestesp/ChestEspRenderer.java | 4 +- .../newchunks/NewChunksChunkRenderer.java | 5 +- .../newchunks/NewChunksOutlineRenderer.java | 9 +- .../newchunks/NewChunksReasonsRenderer.java | 9 +- .../hacks/newchunks/NewChunksRenderer.java | 5 +- .../newchunks/NewChunksSquareRenderer.java | 9 +- .../hacks/portalesp/PortalEspRenderer.java | 4 +- .../net/wurstclient/hacks/treebot/Tree.java | 7 +- src/main/java/net/wurstclient/hud/TabGui.java | 12 +- .../java/net/wurstclient/hud/WurstLogo.java | 4 +- .../mixin/BackgroundRendererMixin.java | 3 +- .../net/wurstclient/mixin/CameraMixin.java | 3 +- .../mixin/DisconnectedScreenMixin.java | 5 +- .../navigator/NavigatorFeatureScreen.java | 8 +- .../navigator/NavigatorMainScreen.java | 20 ++-- .../navigator/NavigatorScreen.java | 20 ++-- .../java/net/wurstclient/util/ListWidget.java | 44 +++---- .../net/wurstclient/util/RenderUtils.java | 42 ++++--- 51 files changed, 303 insertions(+), 321 deletions(-) diff --git a/gradle.properties b/gradle.properties index 62883df9..0763f0db 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,15 @@ org.gradle.parallel=true # Fabric Properties # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions -minecraft_version=24w21b -yarn_mappings=24w21b+build.3 +minecraft_version=1.21-pre1 +yarn_mappings=1.21-pre1+build.2 loader_version=0.15.11 # Fabric API -fabric_version=0.99.1+1.21 +fabric_version=0.99.2+1.21 # Mod Properties -mod_version = v7.42-MC24w21b +mod_version = v7.42-MC1.21-pre1 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 82ac0f29..2bca7d27 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -59,7 +59,7 @@ public enum WurstClient public static IMinecraftClient IMC; public static final String VERSION = "7.42"; - public static final String MC_VERSION = "24w21b"; + public static final String MC_VERSION = "1.21-pre1"; private WurstAnalytics analytics; private EventManager eventManager; diff --git a/src/main/java/net/wurstclient/ai/PathRenderer.java b/src/main/java/net/wurstclient/ai/PathRenderer.java index 09a179da..edb8570f 100644 --- a/src/main/java/net/wurstclient/ai/PathRenderer.java +++ b/src/main/java/net/wurstclient/ai/PathRenderer.java @@ -29,7 +29,7 @@ public final class PathRenderer { Tessellator tessellator = RenderSystem.renderThreadTesselator(); RenderSystem.setShader(GameRenderer::getPositionProgram); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); int startX = start.getX() - region.x(); @@ -96,7 +96,7 @@ public final class PathRenderer matrixStack.pop(); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public static void renderNode(MatrixStack matrixStack, BlockPos pos, @@ -112,7 +112,7 @@ public final class PathRenderer Tessellator tessellator = RenderSystem.renderThreadTesselator(); RenderSystem.setShader(GameRenderer::getPositionProgram); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); // middle part @@ -154,7 +154,7 @@ public final class PathRenderer bufferBuilder.vertex(matrix, 0, -1, 0); bufferBuilder.vertex(matrix, 0, 0, 1); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); matrixStack.pop(); } diff --git a/src/main/java/net/wurstclient/altmanager/AltRenderer.java b/src/main/java/net/wurstclient/altmanager/AltRenderer.java index 2231bef6..1d984414 100644 --- a/src/main/java/net/wurstclient/altmanager/AltRenderer.java +++ b/src/main/java/net/wurstclient/altmanager/AltRenderer.java @@ -67,14 +67,14 @@ public final class AltRenderer RenderSystem.setShader(GameRenderer::getPositionTexProgram); MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix4f = matrixStack.peek().getPositionMatrix(); - BufferBuilder bufferBuilder = Tessellator.getInstance().method_60827( + BufferBuilder bufferBuilder = Tessellator.getInstance().begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE); bufferBuilder.vertex(matrix4f, x, y, z).texture(uOverFw, vOverFh); bufferBuilder.vertex(matrix4f, x, y2, z).texture(uOverFw, vPlusHOverFh); bufferBuilder.vertex(matrix4f, x2, y2, z).texture(uPlusWOverFw, vPlusHOverFh); bufferBuilder.vertex(matrix4f, x2, y, z).texture(uPlusWOverFw, vOverFh); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public static void drawAltFace(DrawContext context, String name, int x, diff --git a/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java b/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java index 7d666aac..7b2ad6d0 100644 --- a/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java +++ b/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java @@ -384,13 +384,13 @@ public abstract class AltEditorScreen extends Screen RenderSystem.setShaderColor(1, 0, 0, errorTimer / 16F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, 0, 0, 0); bufferBuilder.vertex(matrix, width, 0, 0); bufferBuilder.vertex(matrix, width, height, 0); bufferBuilder.vertex(matrix, 0, height, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_BLEND); diff --git a/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java b/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java index b7578c87..a72ccb90 100644 --- a/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java +++ b/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java @@ -459,13 +459,13 @@ public final class AltManagerScreen extends Screen RenderSystem.setShaderColor(1, 0, 0, errorTimer / 16F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, 0, 0, 0); bufferBuilder.vertex(matrix, width, 0, 0); bufferBuilder.vertex(matrix, width, height, 0); bufferBuilder.vertex(matrix, 0, height, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_BLEND); @@ -660,14 +660,14 @@ public final class AltManagerScreen extends Screen RenderSystem.setShaderColor(0, 1, 0, opacity); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x - 2, y - 2, 0); bufferBuilder.vertex(matrix, x - 2 + 220, y - 2, 0); bufferBuilder.vertex(matrix, x - 2 + 220, y - 2 + 30, 0); bufferBuilder.vertex(matrix, x - 2, y - 2 + 30, 0); BufferRenderer - .drawWithGlobalProgram(bufferBuilder.method_60800()); + .drawWithGlobalProgram(bufferBuilder.end()); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_BLEND); diff --git a/src/main/java/net/wurstclient/clickgui/ClickGui.java b/src/main/java/net/wurstclient/clickgui/ClickGui.java index 7b2fde2c..78336b26 100644 --- a/src/main/java/net/wurstclient/clickgui/ClickGui.java +++ b/src/main/java/net/wurstclient/clickgui/ClickGui.java @@ -565,23 +565,23 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], ttOpacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xt1, yt1, 0); bufferBuilder.vertex(matrix, xt1, yt2, 0); bufferBuilder.vertex(matrix, xt2, yt2, 0); bufferBuilder.vertex(matrix, xt2, yt1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xt1, yt1, 0); bufferBuilder.vertex(matrix, xt1, yt2, 0); bufferBuilder.vertex(matrix, xt2, yt2, 0); bufferBuilder.vertex(matrix, xt2, yt1, 0); bufferBuilder.vertex(matrix, xt1, yt1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // text RenderSystem.setShaderColor(1, 1, 1, 1); @@ -676,7 +676,7 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xs2, ys1, 0); bufferBuilder.vertex(matrix, xs2, ys2, 0); @@ -691,7 +691,7 @@ public final class ClickGui bufferBuilder.vertex(matrix, xs2, ys2, 0); bufferBuilder.vertex(matrix, xs2, ys4, 0); BufferRenderer - .drawWithGlobalProgram(bufferBuilder.method_60800()); + .drawWithGlobalProgram(bufferBuilder.end()); boolean hovering = mouseX >= xs1 && mouseY >= ys3 && mouseX < xs2 && mouseY < ys4; @@ -700,20 +700,20 @@ public final class ClickGui RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], hovering ? opacity * 1.5F : opacity); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xs1, ys3, 0); bufferBuilder.vertex(matrix, xs1, ys4, 0); bufferBuilder.vertex(matrix, xs2, ys4, 0); bufferBuilder.vertex(matrix, xs2, ys3, 0); BufferRenderer - .drawWithGlobalProgram(bufferBuilder.method_60800()); + .drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xs1, ys3, 0); @@ -722,7 +722,7 @@ public final class ClickGui bufferBuilder.vertex(matrix, xs2, ys3, 0); bufferBuilder.vertex(matrix, xs1, ys3, 0); BufferRenderer - .drawWithGlobalProgram(bufferBuilder.method_60800()); + .drawWithGlobalProgram(bufferBuilder.end()); } int x3 = x1 + 2; @@ -735,7 +735,7 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x1, y2, 0); @@ -745,7 +745,7 @@ public final class ClickGui bufferBuilder.vertex(matrix, x5, y2, 0); bufferBuilder.vertex(matrix, x4, y2, 0); bufferBuilder.vertex(matrix, x4, y3, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); net.minecraft.client.util.Window sr = MC.getWindow(); int sf = (int)sr.getScaleFactor(); @@ -759,7 +759,7 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); // window background @@ -793,7 +793,7 @@ public final class ClickGui bufferBuilder.vertex(matrix, xc2, yc1, 0); bufferBuilder.vertex(matrix, xc2, yc2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // render children int cMouseX = mouseX - x1; @@ -813,23 +813,23 @@ public final class ClickGui // window outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x1, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); if(!window.isMinimized()) { // title bar outline - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x2, y3, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } // title bar buttons @@ -868,7 +868,7 @@ public final class ClickGui RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], opacity); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y4, 0); @@ -878,17 +878,17 @@ public final class ClickGui bufferBuilder.vertex(matrix, x3, y3, 0); bufferBuilder.vertex(matrix, x2, y3, 0); bufferBuilder.vertex(matrix, x2, y5, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // title bar background // behind title - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x3, y3, 0); bufferBuilder.vertex(matrix, x3, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // window title RenderSystem.setShaderColor(1, 1, 1, 1); @@ -912,34 +912,34 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hovering ? opacity * 1.5F : opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // background between buttons RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], opacity); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x3, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // button outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x1, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void renderMinimizeButton(MatrixStack matrixStack, int x1, int y1, @@ -970,22 +970,22 @@ public final class ClickGui } // arrow - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa3, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa3, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); bufferBuilder.vertex(matrix, xa1, ya1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void renderPinButton(MatrixStack matrixStack, int x1, int y1, @@ -1009,7 +1009,7 @@ public final class ClickGui // knob RenderSystem.setShaderColor(h, 0, 0, 0.5F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk1, yk1, 0); bufferBuilder.vertex(matrix, xk2, yk1, 0); @@ -1019,7 +1019,7 @@ public final class ClickGui bufferBuilder.vertex(matrix, xk4, yk2, 0); bufferBuilder.vertex(matrix, xk4, yk3, 0); bufferBuilder.vertex(matrix, xk3, yk3, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); float xn1 = x1 + 3.5F; float xn2 = x2 - 3.5F; @@ -1028,40 +1028,40 @@ public final class ClickGui // needle RenderSystem.setShaderColor(h, h, h, 1); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xn1, yn1, 0); bufferBuilder.vertex(matrix, xn2, yn1, 0); bufferBuilder.vertex(matrix, xn2, yn2, 0); bufferBuilder.vertex(matrix, xn1, yn2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outlines RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk1, yk1, 0); bufferBuilder.vertex(matrix, xk2, yk1, 0); bufferBuilder.vertex(matrix, xk2, yk2, 0); bufferBuilder.vertex(matrix, xk1, yk2, 0); bufferBuilder.vertex(matrix, xk1, yk1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); - bufferBuilder = tessellator.method_60827( + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk3, yk2, 0); bufferBuilder.vertex(matrix, xk4, yk2, 0); bufferBuilder.vertex(matrix, xk4, yk3, 0); bufferBuilder.vertex(matrix, xk3, yk3, 0); bufferBuilder.vertex(matrix, xk3, yk2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); - bufferBuilder = tessellator.method_60827( + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xn1, yn1, 0); bufferBuilder.vertex(matrix, xn2, yn1, 0); bufferBuilder.vertex(matrix, xn2, yn2, 0); bufferBuilder.vertex(matrix, xn1, yn2, 0); bufferBuilder.vertex(matrix, xn1, yn1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); }else { @@ -1082,7 +1082,7 @@ public final class ClickGui // knob RenderSystem.setShaderColor(0, h, 0, 1); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk1, yk1, 0); bufferBuilder.vertex(matrix, xk2, yk2, 0); @@ -1092,7 +1092,7 @@ public final class ClickGui bufferBuilder.vertex(matrix, xk6, yk6, 0); bufferBuilder.vertex(matrix, xk3, yk7, 0); bufferBuilder.vertex(matrix, xk7, yk4, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); float xn1 = x1 + 3; float xn2 = x1 + 4; @@ -1103,38 +1103,38 @@ public final class ClickGui // needle RenderSystem.setShaderColor(h, h, h, 1); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xn1, yn1, 0); bufferBuilder.vertex(matrix, xn2, yn2, 0); bufferBuilder.vertex(matrix, xn3, yn3, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outlines RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk1, yk1, 0); bufferBuilder.vertex(matrix, xk2, yk2, 0); bufferBuilder.vertex(matrix, xk3, yk3, 0); bufferBuilder.vertex(matrix, xk4, yk4, 0); bufferBuilder.vertex(matrix, xk1, yk1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); - bufferBuilder = tessellator.method_60827( + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk5, yk5, 0); bufferBuilder.vertex(matrix, xk6, yk6, 0); bufferBuilder.vertex(matrix, xk3, yk7, 0); bufferBuilder.vertex(matrix, xk7, yk4, 0); bufferBuilder.vertex(matrix, xk5, yk5, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); - bufferBuilder = tessellator.method_60827( + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xn1, yn1, 0); bufferBuilder.vertex(matrix, xn2, yn2, 0); bufferBuilder.vertex(matrix, xn3, yn3, 0); bufferBuilder.vertex(matrix, xn1, yn1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } } @@ -1164,7 +1164,7 @@ public final class ClickGui // cross RenderSystem.setShaderColor(hovering ? 1 : 0.85F, 0, 0, 1); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xc1, yc1, 0); bufferBuilder.vertex(matrix, xc2, yc2, 0); bufferBuilder.vertex(matrix, xc3, yc3, 0); @@ -1177,11 +1177,11 @@ public final class ClickGui bufferBuilder.vertex(matrix, xc5, yc6, 0); bufferBuilder.vertex(matrix, xc1, yc3, 0); bufferBuilder.vertex(matrix, xc2, yc4, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xc1, yc1, 0); bufferBuilder.vertex(matrix, xc2, yc2, 0); @@ -1195,7 +1195,7 @@ public final class ClickGui bufferBuilder.vertex(matrix, xc2, yc4, 0); bufferBuilder.vertex(matrix, xc1, yc3, 0); bufferBuilder.vertex(matrix, xc5, yc6, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public float[] getBgColor() diff --git a/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java b/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java index 3af9a372..978e2148 100644 --- a/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java +++ b/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java @@ -119,14 +119,14 @@ public final class ComboBoxPopup> extends Popup float[] acColor = gui.getAcColor(); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x1, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawValueBackground(MatrixStack matrixStack, int x1, int x2, @@ -141,12 +141,12 @@ public final class ComboBoxPopup> extends Popup RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], alpha); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, yi1, 0); bufferBuilder.vertex(matrix, x1, yi2, 0); bufferBuilder.vertex(matrix, x2, yi2, 0); bufferBuilder.vertex(matrix, x2, yi1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawValueName(DrawContext context, int x1, int yi1, diff --git a/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java b/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java index 02b4cc01..bb786165 100644 --- a/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java @@ -94,32 +94,32 @@ public abstract class AbstractListEditButton extends Component RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x3, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // box RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hBox ? opacity * 1.5F : opacity); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x3, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // setting name RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java b/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java index 4e75989a..74f38a79 100644 --- a/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java @@ -109,12 +109,12 @@ public final class BlockComponent extends Component RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // setting name RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java b/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java index 036b8228..318794d5 100644 --- a/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java @@ -122,12 +122,12 @@ public final class CheckboxComponent extends Component RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawBox(MatrixStack matrixStack, int x1, int x3, int y1, @@ -143,22 +143,22 @@ public final class CheckboxComponent extends Component RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hovering ? opacity * 1.5F : opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x3, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x1, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawCheck(MatrixStack matrixStack, int x1, int y1, @@ -184,7 +184,7 @@ public final class CheckboxComponent extends Component else RenderSystem.setShaderColor(0, hovering ? 1 : 0.85F, 0, 1); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xc2, yc3, 0); bufferBuilder.vertex(matrix, xc3, yc4, 0); bufferBuilder.vertex(matrix, xc3, yc5, 0); @@ -193,11 +193,11 @@ public final class CheckboxComponent extends Component bufferBuilder.vertex(matrix, xc5, yc2, 0); bufferBuilder.vertex(matrix, xc3, yc5, 0); bufferBuilder.vertex(matrix, xc3, yc4, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xc2, yc3, 0); bufferBuilder.vertex(matrix, xc3, yc4, 0); @@ -206,7 +206,7 @@ public final class CheckboxComponent extends Component bufferBuilder.vertex(matrix, xc3, yc5, 0); bufferBuilder.vertex(matrix, xc1, yc4, 0); bufferBuilder.vertex(matrix, xc2, yc3, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawName(DrawContext context, int x3, int y1) diff --git a/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java b/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java index 0abe1fc2..cf0321df 100644 --- a/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java @@ -114,13 +114,13 @@ public final class ColorComponent extends Component opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x1, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawBox(MatrixStack matrixStack, int x1, int x2, int y2, @@ -137,23 +137,23 @@ public final class ColorComponent extends Component hovering ? 1F : opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x2, y3, 0); bufferBuilder.vertex(matrix, x2, y2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x2, y3, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x1, y2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawNameAndValue(DrawContext context, int x1, int x2, int y1) diff --git a/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java b/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java index 776407b2..d6c4a23f 100644 --- a/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java @@ -158,12 +158,12 @@ public final class ComboBoxComponent> extends Component opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x4, y2, 0); bufferBuilder.vertex(matrix, x4, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawBox(MatrixStack matrixStack, int x2, int x4, int y1, @@ -181,23 +181,23 @@ public final class ComboBoxComponent> extends Component RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], bgAlpha); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x4, y1, 0); bufferBuilder.vertex(matrix, x4, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x4, y1, 0); bufferBuilder.vertex(matrix, x4, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x4, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawSeparator(MatrixStack matrixStack, int x3, int y1, int y2) @@ -205,11 +205,11 @@ public final class ComboBoxComponent> extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawArrow(MatrixStack matrixStack, int x2, int x3, int y1, @@ -238,22 +238,22 @@ public final class ComboBoxComponent> extends Component } // arrow - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa3, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa3, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); bufferBuilder.vertex(matrix, xa1, ya1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawNameAndValue(DrawContext context, int x1, int x4, int y1) diff --git a/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java b/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java index 199e664e..634a6312 100644 --- a/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java @@ -170,7 +170,7 @@ public final class FeatureButton extends Component Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); if(feature.isEnabled()) // if(feature.isBlocked()) @@ -187,7 +187,7 @@ public final class FeatureButton extends Component bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x3, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawSettingsBackground(MatrixStack matrixStack, int x2, int x3, @@ -200,14 +200,14 @@ public final class FeatureButton extends Component Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hSettings ? opacity * 1.5F : opacity); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawOutline(MatrixStack matrixStack, int x1, int x2, int y1, @@ -218,7 +218,7 @@ public final class FeatureButton extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); bufferBuilder.vertex(matrix, x1, y1, 0); @@ -226,7 +226,7 @@ public final class FeatureButton extends Component bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x1, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawSeparator(MatrixStack matrixStack, int x3, int y1, int y2) @@ -235,11 +235,11 @@ public final class FeatureButton extends Component Tessellator tessellator = RenderSystem.renderThreadTesselator(); // separator - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawSettingsArrow(MatrixStack matrixStack, int x2, int x3, @@ -268,22 +268,22 @@ public final class FeatureButton extends Component } // arrow - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa3, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa3, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); bufferBuilder.vertex(matrix, xa1, ya1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawName(DrawContext context, int x1, int x3, int y1) diff --git a/src/main/java/net/wurstclient/clickgui/components/FileComponent.java b/src/main/java/net/wurstclient/clickgui/components/FileComponent.java index 1aa1dfec..66080764 100644 --- a/src/main/java/net/wurstclient/clickgui/components/FileComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/FileComponent.java @@ -100,32 +100,32 @@ public final class FileComponent extends Component RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x3, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // box RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hBox ? opacity * 1.5F : opacity); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x3, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // setting name RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java b/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java index b9f9b011..1d5ccd1b 100644 --- a/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java @@ -79,12 +79,12 @@ public final class RadarComponent extends Component RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); float middleX = (x1 + x2) / 2.0F; float middleY = (y1 + y2) / 2.0F; @@ -108,24 +108,24 @@ public final class RadarComponent extends Component // arrow RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], opacity); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); bufferBuilder.vertex(matrix, xa1, ya3, 0); bufferBuilder.vertex(matrix, xa3, ya2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); bufferBuilder.vertex(matrix, xa1, ya3, 0); bufferBuilder.vertex(matrix, xa3, ya2, 0); bufferBuilder.vertex(matrix, xa1, ya1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); matrixStack.pop(); matrix = matrixStack.peek().getPositionMatrix(); @@ -134,7 +134,7 @@ public final class RadarComponent extends Component // points RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.setShaderColor(1, 1, 1, 1); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); for(Entity e : hack.getEntities()) { @@ -190,7 +190,7 @@ public final class RadarComponent extends Component middleY + (float)renderY + 0.5F, 0) .color(red, green, blue, alpha); } - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } @Override diff --git a/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java b/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java index 61a4f303..5c0c8315 100644 --- a/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java @@ -178,7 +178,7 @@ public final class SliderComponent extends Component RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y4, 0); @@ -200,7 +200,7 @@ public final class SliderComponent extends Component bufferBuilder.vertex(matrix, x2, y5, 0); bufferBuilder.vertex(matrix, x2, y4, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawRail(MatrixStack matrixStack, int x3, int x4, int y4, @@ -226,7 +226,7 @@ public final class SliderComponent extends Component RenderSystem.setShaderColor(1, 0, 0, hSlider ? opacity * 1.5F : opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y4, 0); bufferBuilder.vertex(matrix, x3, y5, 0); bufferBuilder.vertex(matrix, xl1, y5, 0); @@ -235,29 +235,29 @@ public final class SliderComponent extends Component bufferBuilder.vertex(matrix, xl2, y5, 0); bufferBuilder.vertex(matrix, x4, y5, 0); bufferBuilder.vertex(matrix, x4, y4, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hSlider ? opacity * 1.5F : opacity); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xl1, y4, 0); bufferBuilder.vertex(matrix, xl1, y5, 0); bufferBuilder.vertex(matrix, xl2, y5, 0); bufferBuilder.vertex(matrix, xl2, y4, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y4, 0); bufferBuilder.vertex(matrix, x3, y5, 0); bufferBuilder.vertex(matrix, x4, y5, 0); bufferBuilder.vertex(matrix, x4, y4, 0); bufferBuilder.vertex(matrix, x3, y4, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawKnob(MatrixStack matrixStack, int x1, int x2, int y2, @@ -281,23 +281,23 @@ public final class SliderComponent extends Component RenderSystem.setShaderColor(c[0], c[1], c[2], hSlider ? 1 : 0.75F); } BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk1, yk1, 0); bufferBuilder.vertex(matrix, xk1, yk2, 0); bufferBuilder.vertex(matrix, xk2, yk2, 0); bufferBuilder.vertex(matrix, xk2, yk1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk1, yk1, 0); bufferBuilder.vertex(matrix, xk1, yk2, 0); bufferBuilder.vertex(matrix, xk2, yk2, 0); bufferBuilder.vertex(matrix, xk2, yk1, 0); bufferBuilder.vertex(matrix, xk1, yk1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawNameAndValue(DrawContext context, int x1, int x2, int y1, diff --git a/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java b/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java index 79a61789..7c185a28 100644 --- a/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java @@ -102,32 +102,32 @@ public final class TextFieldEditButton extends Component RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // box RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], hBox ? opacity * 1.5F : opacity); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y3, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y3, 0); bufferBuilder.vertex(matrix, x1, y3, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); int maxLength = tr.getTextHandler().getLimitedStringLength( setting.getValue(), getWidth() - 8, Style.EMPTY); diff --git a/src/main/java/net/wurstclient/hacks/BaseFinderHack.java b/src/main/java/net/wurstclient/hacks/BaseFinderHack.java index 1b9f6a1e..b07835a3 100644 --- a/src/main/java/net/wurstclient/hacks/BaseFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/BaseFinderHack.java @@ -16,11 +16,10 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -206,14 +205,14 @@ public final class BaseFinderHack extends Hack vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); for(int[] vertex : vertices) bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], vertex[2] - region.z()); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffer.bind(); vertexBuffer.upload(buffer); diff --git a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java index 9cf9985a..37714eb7 100644 --- a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java +++ b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java @@ -286,12 +286,12 @@ public final class BowAimbotHack extends Hack RenderSystem.setShader(GameRenderer::getPositionProgram); RenderSystem.setShaderColor(0, 0, 0, 0.5F); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, 0, 0, 0); bufferBuilder.vertex(matrix, msgWidth + 3, 0, 0); bufferBuilder.vertex(matrix, msgWidth + 3, 10, 0); bufferBuilder.vertex(matrix, 0, 10, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // text RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/hacks/CaveFinderHack.java b/src/main/java/net/wurstclient/hacks/CaveFinderHack.java index 41752f9a..143c72f8 100644 --- a/src/main/java/net/wurstclient/hacks/CaveFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/CaveFinderHack.java @@ -19,12 +19,11 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.block.Blocks; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -256,14 +255,14 @@ public final class CaveFinderHack extends Hack { Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); RegionPos region = RenderUtils.getCameraRegion(); for(int[] vertex : compileVerticesTask.join()) bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], vertex[2] - region.z()); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); if(vertexBuffer != null) vertexBuffer.close(); diff --git a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java index 28ac6eb0..bcf60d80 100644 --- a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java @@ -359,12 +359,12 @@ public final class ExcavatorHack extends Hack RenderSystem.setShader(GameRenderer::getPositionProgram); RenderSystem.setShaderColor(0, 0, 0, 0.5F); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, 0, 0, 0); bufferBuilder.vertex(matrix, msgWidth + 2, 0, 0); bufferBuilder.vertex(matrix, msgWidth + 2, 10, 0); bufferBuilder.vertex(matrix, 0, 10, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // text RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/hacks/FreecamHack.java b/src/main/java/net/wurstclient/hacks/FreecamHack.java index 5dafb9e3..023387f1 100644 --- a/src/main/java/net/wurstclient/hacks/FreecamHack.java +++ b/src/main/java/net/wurstclient/hacks/FreecamHack.java @@ -215,12 +215,12 @@ public final class FreecamHack extends Hack implements UpdateListener, Tessellator tessellator = RenderSystem.renderThreadTesselator(); RenderSystem.setShader(GameRenderer::getPositionProgram); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, (float)start.x, (float)start.y, (float)start.z); bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, (float)end.z); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); matrixStack.pop(); diff --git a/src/main/java/net/wurstclient/hacks/ItemEspHack.java b/src/main/java/net/wurstclient/hacks/ItemEspHack.java index 314d07c8..138a6912 100644 --- a/src/main/java/net/wurstclient/hacks/ItemEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ItemEspHack.java @@ -172,7 +172,7 @@ public final class ItemEspHack extends Hack implements UpdateListener, Vec3d start = RotationUtils.getClientLookVec(partialTicks) .add(RenderUtils.getCameraPos()).subtract(regionVec); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(ItemEntity e : items) { @@ -184,6 +184,6 @@ public final class ItemEspHack extends Hack implements UpdateListener, bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, (float)end.z); } - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } } diff --git a/src/main/java/net/wurstclient/hacks/MobEspHack.java b/src/main/java/net/wurstclient/hacks/MobEspHack.java index 16402baa..a2c58304 100644 --- a/src/main/java/net/wurstclient/hacks/MobEspHack.java +++ b/src/main/java/net/wurstclient/hacks/MobEspHack.java @@ -206,7 +206,7 @@ public final class MobEspHack extends Hack implements UpdateListener, Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR); Vec3d regionVec = region.toVec3d(); @@ -231,6 +231,6 @@ public final class MobEspHack extends Hack implements UpdateListener, .color(r, g, 0, 0.5F); } - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } } diff --git a/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java b/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java index 601f8132..a7dc3d9c 100644 --- a/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java +++ b/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java @@ -16,12 +16,11 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.block.BlockState; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -300,7 +299,7 @@ public final class MobSpawnEspHack extends Hack vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = - tessellator.method_60827(VertexFormat.DrawMode.DEBUG_LINES, + tessellator.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR); new ArrayList<>(red).stream().filter(Objects::nonNull) @@ -337,7 +336,7 @@ public final class MobSpawnEspHack extends Hack .color(1, 1, 0, 0.5F); }); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffer.bind(); vertexBuffer.upload(buffer); VertexBuffer.unbind(); diff --git a/src/main/java/net/wurstclient/hacks/PlayerEspHack.java b/src/main/java/net/wurstclient/hacks/PlayerEspHack.java index ffcc5f8e..dcd883fd 100644 --- a/src/main/java/net/wurstclient/hacks/PlayerEspHack.java +++ b/src/main/java/net/wurstclient/hacks/PlayerEspHack.java @@ -188,7 +188,7 @@ public final class PlayerEspHack extends Hack implements UpdateListener, Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR); Vec3d regionVec = region.toVec3d(); @@ -225,6 +225,6 @@ public final class PlayerEspHack extends Hack implements UpdateListener, .color(r, g, b, 0.5F); } - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } } diff --git a/src/main/java/net/wurstclient/hacks/SearchHack.java b/src/main/java/net/wurstclient/hacks/SearchHack.java index 213dac7c..4855577b 100644 --- a/src/main/java/net/wurstclient/hacks/SearchHack.java +++ b/src/main/java/net/wurstclient/hacks/SearchHack.java @@ -18,12 +18,11 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.block.Block; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -259,14 +258,14 @@ public final class SearchHack extends Hack { Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); RegionPos region = RenderUtils.getCameraRegion(); for(int[] vertex : compileVerticesTask.join()) bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], vertex[2] - region.z()); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); if(vertexBuffer != null) vertexBuffer.close(); diff --git a/src/main/java/net/wurstclient/hacks/SkinDerpHack.java b/src/main/java/net/wurstclient/hacks/SkinDerpHack.java index 6f80362c..618a8338 100644 --- a/src/main/java/net/wurstclient/hacks/SkinDerpHack.java +++ b/src/main/java/net/wurstclient/hacks/SkinDerpHack.java @@ -8,8 +8,7 @@ package net.wurstclient.hacks; import java.util.Random; - -import net.minecraft.client.render.entity.PlayerModelPart; +import net.minecraft.entity.player.PlayerModelPart; import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.UpdateListener; diff --git a/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java b/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java index fea32f78..056f1cb5 100644 --- a/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java +++ b/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java @@ -128,7 +128,7 @@ public final class TrajectoriesHack extends Hack implements RenderListener Tessellator tessellator = RenderSystem.renderThreadTesselator(); RenderSystem.setShader(GameRenderer::getPositionProgram); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); float[] colorF = color.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.75F); @@ -137,7 +137,7 @@ public final class TrajectoriesHack extends Hack implements RenderListener bufferBuilder.vertex(matrix, (float)(point.x - camPos.x), (float)(point.y - camPos.y), (float)(point.z - camPos.z)); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private void drawEndOfLine(MatrixStack matrixStack, Vec3d end, diff --git a/src/main/java/net/wurstclient/hacks/TunnellerHack.java b/src/main/java/net/wurstclient/hacks/TunnellerHack.java index 55ce73e9..6f201fe4 100644 --- a/src/main/java/net/wurstclient/hacks/TunnellerHack.java +++ b/src/main/java/net/wurstclient/hacks/TunnellerHack.java @@ -16,8 +16,6 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -29,6 +27,7 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.option.GameOptions; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -272,7 +271,7 @@ public final class TunnellerHack extends Hack vertexBuffers[0] = new VertexBuffer(VertexBuffer.Usage.STATIC); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); RegionPos region = RenderUtils.getCameraRegion(); @@ -288,7 +287,7 @@ public final class TunnellerHack extends Hack .multiply(Math.max(0.5, length)).add(offset); RenderUtils.drawArrow(arrowStart, arrowEnd, bufferBuilder); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffers[0].bind(); vertexBuffers[0].upload(buffer); VertexBuffer.unbind(); @@ -393,7 +392,7 @@ public final class TunnellerHack extends Hack .offset(region.negate().toVec3d()); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); currentBlock = null; @@ -412,7 +411,7 @@ public final class TunnellerHack extends Hack RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); } - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffers[1].bind(); vertexBuffers[1].upload(buffer); VertexBuffer.unbind(); @@ -503,13 +502,13 @@ public final class TunnellerHack extends Hack .offset(region.negate().toVec3d()); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : blocks) RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffers[2].bind(); vertexBuffers[2].upload(buffer); VertexBuffer.unbind(); @@ -644,13 +643,13 @@ public final class TunnellerHack extends Hack .offset(region.negate().toVec3d()); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : liquids) RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffers[3].bind(); vertexBuffers[3].upload(buffer); diff --git a/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java b/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java index eabd13b5..298f392e 100644 --- a/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java +++ b/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java @@ -16,11 +16,10 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -116,7 +115,7 @@ public final class AutoFarmRenderer greenBuffer.close(); greenBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : blocksToHarvest) @@ -125,7 +124,7 @@ public final class AutoFarmRenderer RenderUtils.drawOutlinedBox(renderBox, bufferBuilder); } - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); greenBuffer.bind(); greenBuffer.upload(buffer); VertexBuffer.unbind(); @@ -138,7 +137,7 @@ public final class AutoFarmRenderer cyanBuffer.close(); cyanBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : plants) @@ -147,7 +146,7 @@ public final class AutoFarmRenderer RenderUtils.drawNode(renderNode, bufferBuilder); } - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); cyanBuffer.bind(); cyanBuffer.upload(buffer); VertexBuffer.unbind(); @@ -160,7 +159,7 @@ public final class AutoFarmRenderer redBuffer.close(); redBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : blocksToReplant) @@ -169,7 +168,7 @@ public final class AutoFarmRenderer RenderUtils.drawOutlinedBox(renderBox, bufferBuilder); } - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); redBuffer.bind(); redBuffer.upload(buffer); VertexBuffer.unbind(); diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java index 3952f7b4..079119bc 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java @@ -141,13 +141,13 @@ public final class AutoFishDebugDraw float[] colorF = ddColor.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, -0.125F, 0, -0.125F); bufferBuilder.vertex(matrix, 0.125F, 0, 0.125F); bufferBuilder.vertex(matrix, 0.125F, 0, -0.125F); bufferBuilder.vertex(matrix, -0.125F, 0, 0.125F); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); matrixStack.pop(); } diff --git a/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java b/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java index 97cf1355..0c659216 100644 --- a/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java +++ b/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java @@ -86,7 +86,7 @@ public final class ChestEspRenderer float[] colorF = group.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(Box box : group.getBoxes()) @@ -100,7 +100,7 @@ public final class ChestEspRenderer (float)end.z); } - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public static void prepareBuffers() diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java index 10365369..bc40c0ac 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java @@ -8,11 +8,10 @@ package net.wurstclient.hacks.newchunks; import java.util.Set; - -import net.minecraft.class_9801; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.util.math.ChunkPos; public interface NewChunksChunkRenderer { - public class_9801 buildBuffer(Set chunks, int drawDistance); + public BuiltBuffer buildBuffer(Set chunks, int drawDistance); } diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java index 0640b5c2..b1dab13e 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java @@ -12,9 +12,8 @@ import java.util.List; import java.util.Set; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; @@ -26,13 +25,13 @@ import net.wurstclient.util.RenderUtils; public final class NewChunksOutlineRenderer implements NewChunksChunkRenderer { @Override - public class_9801 buildBuffer(Set chunks, int drawDistance) + public BuiltBuffer buildBuffer(Set chunks, int drawDistance) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); renderChunks(new ArrayList<>(chunks), drawDistance, bufferBuilder); - return bufferBuilder.method_60800(); + return bufferBuilder.end(); } private void renderChunks(List chunks, int drawDistance, diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java index 210d4631..40f26d76 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java @@ -12,9 +12,8 @@ import java.util.List; import java.util.Set; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; @@ -34,13 +33,13 @@ public final class NewChunksReasonsRenderer this.drawDistance = drawDistance; } - public class_9801 buildBuffer(Set reasons) + public BuiltBuffer buildBuffer(Set reasons) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); renderBlocks(new ArrayList<>(reasons), bufferBuilder); - return bufferBuilder.method_60800(); + return bufferBuilder.end(); } private void renderBlocks(List blocks, diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java index b5e0f57c..2f7a09d5 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java @@ -11,10 +11,9 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.wurstclient.settings.ColorSetting; @@ -39,7 +38,7 @@ public final class NewChunksRenderer this.oldChunksColor = oldChunksColor; } - public void updateBuffer(int i, class_9801 buffer) + public void updateBuffer(int i, BuiltBuffer buffer) { vertexBuffers[i] = new VertexBuffer(VertexBuffer.Usage.STATIC); vertexBuffers[i].bind(); diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java index d15e6d94..87083e5b 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java @@ -12,9 +12,8 @@ import java.util.List; import java.util.Set; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; @@ -26,13 +25,13 @@ import net.wurstclient.util.RenderUtils; public final class NewChunksSquareRenderer implements NewChunksChunkRenderer { @Override - public class_9801 buildBuffer(Set chunks, int drawDistance) + public BuiltBuffer buildBuffer(Set chunks, int drawDistance) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); renderChunks(new ArrayList<>(chunks), drawDistance, bufferBuilder); - return bufferBuilder.method_60800(); + return bufferBuilder.end(); } private void renderChunks(List chunks, int drawDistance, diff --git a/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java b/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java index 2aa4a2e2..d579d9be 100644 --- a/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java +++ b/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java @@ -86,7 +86,7 @@ public final class PortalEspRenderer float[] colorF = group.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(Box box : group.getBoxes()) @@ -100,7 +100,7 @@ public final class PortalEspRenderer (float)end.z); } - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public static void prepareBuffers() diff --git a/src/main/java/net/wurstclient/hacks/treebot/Tree.java b/src/main/java/net/wurstclient/hacks/treebot/Tree.java index a77b6b92..e9b6b88e 100644 --- a/src/main/java/net/wurstclient/hacks/treebot/Tree.java +++ b/src/main/java/net/wurstclient/hacks/treebot/Tree.java @@ -13,11 +13,10 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; @@ -55,7 +54,7 @@ public class Tree implements AutoCloseable .offset(regionOffset); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); RenderUtils.drawCrossBox(box.offset(stump), bufferBuilder); @@ -63,7 +62,7 @@ public class Tree implements AutoCloseable for(BlockPos log : logs) RenderUtils.drawOutlinedBox(box.offset(log), bufferBuilder); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffer.bind(); vertexBuffer.upload(buffer); VertexBuffer.unbind(); diff --git a/src/main/java/net/wurstclient/hud/TabGui.java b/src/main/java/net/wurstclient/hud/TabGui.java index 13431e64..4adbecdd 100644 --- a/src/main/java/net/wurstclient/hud/TabGui.java +++ b/src/main/java/net/wurstclient/hud/TabGui.java @@ -226,14 +226,14 @@ public final class TabGui implements KeyPressListener // box BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); { bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x1, y2, 0); } - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline positions float xi1 = x1 - 0.1F; @@ -244,7 +244,7 @@ public final class TabGui implements KeyPressListener // outline GL11.glLineWidth(1); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); { bufferBuilder.vertex(matrix, xi1, yi1, 0); @@ -253,7 +253,7 @@ public final class TabGui implements KeyPressListener bufferBuilder.vertex(matrix, xi1, yi2, 0); bufferBuilder.vertex(matrix, xi1, yi1, 0); } - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // shadow positions xi1 -= 0.9; @@ -265,7 +265,7 @@ public final class TabGui implements KeyPressListener RenderSystem.setShaderColor(1, 1, 1, 1); // top left - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); // top @@ -300,7 +300,7 @@ public final class TabGui implements KeyPressListener bufferBuilder.vertex(matrix, x2, y2, 0).color(acColor[0], acColor[1], acColor[2], 0.75F); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } private static final class Tab diff --git a/src/main/java/net/wurstclient/hud/WurstLogo.java b/src/main/java/net/wurstclient/hud/WurstLogo.java index 4ee3eb4e..1246d024 100644 --- a/src/main/java/net/wurstclient/hud/WurstLogo.java +++ b/src/main/java/net/wurstclient/hud/WurstLogo.java @@ -82,12 +82,12 @@ public final class WurstLogo RenderSystem.setShader(GameRenderer::getPositionColorProgram); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); bufferBuilder.vertex(matrix, x1, y2, 0.0F).color(r, g, b, a); bufferBuilder.vertex(matrix, x2, y2, 0.0F).color(r, g, b, a); bufferBuilder.vertex(matrix, x2, y1, 0.0F).color(r, g, b, a); bufferBuilder.vertex(matrix, x1, y1, 0.0F).color(r, g, b, a); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } } diff --git a/src/main/java/net/wurstclient/mixin/BackgroundRendererMixin.java b/src/main/java/net/wurstclient/mixin/BackgroundRendererMixin.java index 4fe47fe9..5e00da47 100644 --- a/src/main/java/net/wurstclient/mixin/BackgroundRendererMixin.java +++ b/src/main/java/net/wurstclient/mixin/BackgroundRendererMixin.java @@ -14,11 +14,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import com.mojang.blaze3d.systems.RenderSystem; - +import net.minecraft.block.enums.CameraSubmersionType; import net.minecraft.client.render.BackgroundRenderer; import net.minecraft.client.render.BackgroundRenderer.StatusEffectFogModifier; import net.minecraft.client.render.Camera; -import net.minecraft.client.render.CameraSubmersionType; import net.minecraft.entity.Entity; import net.wurstclient.WurstClient; diff --git a/src/main/java/net/wurstclient/mixin/CameraMixin.java b/src/main/java/net/wurstclient/mixin/CameraMixin.java index 5b0ad170..880675f9 100644 --- a/src/main/java/net/wurstclient/mixin/CameraMixin.java +++ b/src/main/java/net/wurstclient/mixin/CameraMixin.java @@ -12,9 +12,8 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - +import net.minecraft.block.enums.CameraSubmersionType; import net.minecraft.client.render.Camera; -import net.minecraft.client.render.CameraSubmersionType; import net.wurstclient.WurstClient; import net.wurstclient.hacks.CameraDistanceHack; diff --git a/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java b/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java index 0c47703f..229bf6ca 100644 --- a/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java +++ b/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java @@ -15,12 +15,11 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import net.minecraft.class_9812; import net.minecraft.client.gui.screen.DisconnectedScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.DirectionalLayoutWidget; +import net.minecraft.network.DisconnectionInfo; import net.minecraft.text.Text; import net.wurstclient.WurstClient; import net.wurstclient.hacks.AutoReconnectHack; @@ -36,7 +35,7 @@ public class DisconnectedScreenMixin extends Screen @Shadow @Final - private class_9812 field_52131;// reason container thing + private DisconnectionInfo field_52131;// reason container thing @Shadow @Final private Screen parent; diff --git a/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java index 729da573..d4abb4f6 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java @@ -380,7 +380,7 @@ public final class NavigatorFeatureScreen extends NavigatorScreen // window background // left & right setColorToBackground(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x1, y2, 0); @@ -390,10 +390,10 @@ public final class NavigatorFeatureScreen extends NavigatorScreen bufferBuilder.vertex(matrix, x5, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y3, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); setColorToBackground(); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); // window background @@ -432,7 +432,7 @@ public final class NavigatorFeatureScreen extends NavigatorScreen bufferBuilder.vertex(matrix, xc2, yc1, 0); bufferBuilder.vertex(matrix, xc2, yc2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } for(int i = 0; i < window.countChildren(); i++) diff --git a/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java index 648b5cc9..b91c62b1 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java @@ -303,25 +303,25 @@ public final class NavigatorMainScreen extends NavigatorScreen // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], 0.75F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xt1, yt1, 0); bufferBuilder.vertex(matrix, xt1, yt2, 0); bufferBuilder.vertex(matrix, xt2, yt2, 0); bufferBuilder.vertex(matrix, xt2, yt1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xt1, yt1, 0); bufferBuilder.vertex(matrix, xt1, yt2, 0); bufferBuilder.vertex(matrix, xt2, yt2, 0); bufferBuilder.vertex(matrix, xt2, yt1, 0); bufferBuilder.vertex(matrix, xt1, yt1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.setShaderColor(1, 1, 1, 1); @@ -428,11 +428,11 @@ public final class NavigatorMainScreen extends NavigatorScreen int by2 = by1 + area.height - 4; float[] acColor = WurstClient.INSTANCE.getGui().getAcColor(); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, bx1, by1, 0); bufferBuilder.vertex(matrix, bx1, by2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // hovering if(hovering) @@ -449,22 +449,22 @@ public final class NavigatorMainScreen extends NavigatorScreen // arrow RenderSystem.setShaderColor(0, hovering ? 1 : 0.85F, 0, 1); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, ax1, ay1, 0); bufferBuilder.vertex(matrix, ax2, ay1, 0); bufferBuilder.vertex(matrix, ax3, ay2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // arrow shadow RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, ax1, ay1, 0); bufferBuilder.vertex(matrix, ax2, ay1, 0); bufferBuilder.vertex(matrix, ax3, ay2, 0); bufferBuilder.vertex(matrix, ax1, ay1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // text if(!clickTimerRunning) diff --git a/src/main/java/net/wurstclient/navigator/NavigatorScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorScreen.java index a6744d6f..b5d85910 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorScreen.java @@ -246,12 +246,12 @@ public abstract class NavigatorScreen extends Screen RenderSystem.setShader(GameRenderer::getPositionProgram); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x2, y1, 0); bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x1, y2, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } protected final void drawBoxShadow(MatrixStack matrixStack, int x1, int y1, @@ -272,14 +272,14 @@ public abstract class NavigatorScreen extends Screen // outline RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xi1, yi1, 0); bufferBuilder.vertex(matrix, xi2, yi1, 0); bufferBuilder.vertex(matrix, xi2, yi2, 0); bufferBuilder.vertex(matrix, xi1, yi2, 0); bufferBuilder.vertex(matrix, xi1, yi1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // shadow positions xi1 -= 0.9; @@ -290,7 +290,7 @@ public abstract class NavigatorScreen extends Screen RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.setShaderColor(1, 1, 1, 1); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); // top @@ -325,7 +325,7 @@ public abstract class NavigatorScreen extends Screen bufferBuilder.vertex(matrix, x2, y2, 0).color(acColor[0], acColor[1], acColor[2], 0.75F); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } protected final void drawDownShadow(MatrixStack matrixStack, int x1, int y1, @@ -341,16 +341,16 @@ public abstract class NavigatorScreen extends Screen // outline float yi1 = y1 + 0.1F; RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, yi1, 0); bufferBuilder.vertex(matrix, x2, yi1, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // shadow RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.setShaderColor(1, 1, 1, 1); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); bufferBuilder.vertex(matrix, x1, y1, 0).color(acColor[0], acColor[1], acColor[2], 0.75F); @@ -358,7 +358,7 @@ public abstract class NavigatorScreen extends Screen acColor[2], 0.75F); bufferBuilder.vertex(matrix, x2, y2, 0).color(0, 0, 0, 0); bufferBuilder.vertex(matrix, x1, y2, 0).color(0, 0, 0, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } protected final void drawBox(MatrixStack matrixStack, int x1, int y1, diff --git a/src/main/java/net/wurstclient/util/ListWidget.java b/src/main/java/net/wurstclient/util/ListWidget.java index f0569cb4..289b69a0 100644 --- a/src/main/java/net/wurstclient/util/ListWidget.java +++ b/src/main/java/net/wurstclient/util/ListWidget.java @@ -153,7 +153,7 @@ public abstract class ListWidget extends AbstractParentElement RenderSystem.setShader(GameRenderer::getPositionTexColorProgram); BufferBuilder bufferBuilder = - tessellator.method_60827(VertexFormat.DrawMode.QUADS, + tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR); bufferBuilder.vertex(left, bottom, 0) @@ -169,7 +169,7 @@ public abstract class ListWidget extends AbstractParentElement .texture(left / 32, (top + (int)scrollAmount) / 32) .color(32, 32, 32, 255); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); int k = left + width / 2 - getRowWidth() / 2 + 2; int l = top + 4 - (int)scrollAmount; @@ -188,7 +188,7 @@ public abstract class ListWidget extends AbstractParentElement GlStateManager.SrcFactor.ZERO, GlStateManager.DstFactor.ONE); RenderSystem.setShaderColor(1, 1, 1, 1); bufferBuilder = - tessellator.method_60827(VertexFormat.DrawMode.QUADS, + tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR); bufferBuilder.vertex(left, top + 4, 0).texture(0, 1).color(0, 0, 0, 0); @@ -198,9 +198,9 @@ public abstract class ListWidget extends AbstractParentElement 255); bufferBuilder.vertex(left, top, 0).texture(0, 0).color(0, 0, 0, 255); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); bufferBuilder = - tessellator.method_60827(VertexFormat.DrawMode.QUADS, + tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR); bufferBuilder.vertex(left, bottom, 0).texture(0, 1).color(0, 0, 0, 255); @@ -210,7 +210,7 @@ public abstract class ListWidget extends AbstractParentElement 0, 0); bufferBuilder.vertex(left, bottom - 4, 0).texture(0, 0).color(0, 0, 0, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); int n = getMaxScroll(); if(n > 0) { @@ -222,23 +222,23 @@ public abstract class ListWidget extends AbstractParentElement p = top; RenderSystem.setShader(GameRenderer::getPositionColorProgram); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); bufferBuilder.vertex(i, bottom, 0).color(0, 0, 0, 255); bufferBuilder.vertex(j, bottom, 0).color(0, 0, 0, 255); bufferBuilder.vertex(j, top, 0).color(0, 0, 0, 255); bufferBuilder.vertex(i, top, 0).color(0, 0, 0, 255); BufferRenderer - .drawWithGlobalProgram(bufferBuilder.method_60800()); - bufferBuilder = tessellator.method_60827( + .drawWithGlobalProgram(bufferBuilder.end()); + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); bufferBuilder.vertex(i, p + o, 0).color(128, 128, 128, 255); bufferBuilder.vertex(j, p + o, 0).color(128, 128, 128, 255); bufferBuilder.vertex(j, p, 0).color(128, 128, 128, 255); bufferBuilder.vertex(i, p, 0).color(128, 128, 128, 255); BufferRenderer - .drawWithGlobalProgram(bufferBuilder.method_60800()); - bufferBuilder = tessellator.method_60827( + .drawWithGlobalProgram(bufferBuilder.end()); + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); bufferBuilder.vertex(i, p + o - 1, 0).color(192, 192, 192, 255); bufferBuilder.vertex(j - 1, p + o - 1, 0).color(192, 192, 192, @@ -246,7 +246,7 @@ public abstract class ListWidget extends AbstractParentElement bufferBuilder.vertex(j - 1, p, 0).color(192, 192, 192, 255); bufferBuilder.vertex(i, p, 0).color(192, 192, 192, 255); BufferRenderer - .drawWithGlobalProgram(bufferBuilder.method_60800()); + .drawWithGlobalProgram(bufferBuilder.end()); } renderDecorations(mouseX, mouseY); @@ -394,23 +394,23 @@ public abstract class ListWidget extends AbstractParentElement int r = left + width / 2 + getRowWidth() / 2; float g = isFocused() ? 1 : 0.5F; RenderSystem.setShaderColor(g, g, g, 1); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(q, o + p + 2, 0); bufferBuilder.vertex(r, o + p + 2, 0); bufferBuilder.vertex(r, o - 2, 0); bufferBuilder.vertex(q, o - 2, 0); BufferRenderer - .drawWithGlobalProgram(bufferBuilder.method_60800()); + .drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.setShaderColor(0, 0, 0, 1); - bufferBuilder = tessellator.method_60827( + bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(q + 1, o + p + 1, 0); bufferBuilder.vertex(r - 1, o + p + 1, 0); bufferBuilder.vertex(r - 1, o - 1, 0); bufferBuilder.vertex(q + 1, o - 1, 0); BufferRenderer - .drawWithGlobalProgram(bufferBuilder.method_60800()); + .drawWithGlobalProgram(bufferBuilder.end()); } RenderSystem.setShaderColor(1, 1, 1, 1); @@ -439,7 +439,7 @@ public abstract class ListWidget extends AbstractParentElement RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShader(GameRenderer::getPositionTexColorProgram); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR); bufferBuilder.vertex(left, bottom, 0).texture(0, bottom / 32).color(64, 64, 64, bottomAlpha); @@ -450,7 +450,7 @@ public abstract class ListWidget extends AbstractParentElement bufferBuilder.vertex(left, top, 0).texture(0, top / 32).color(64, 64, 64, topAlpha); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public double getScrollAmount() @@ -469,21 +469,21 @@ public abstract class ListWidget extends AbstractParentElement RenderSystem.setShaderColor(0.5F, 0.5F, 0.5F, 1); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x - 2, y - 2, 0); bufferBuilder.vertex(matrix, x + 218, y - 2, 0); bufferBuilder.vertex(matrix, x + 218, y + 28, 0); bufferBuilder.vertex(matrix, x - 2, y + 28, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.setShaderColor(0, 0, 0, 1); - bufferBuilder = tessellator.method_60827(VertexFormat.DrawMode.QUADS, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x - 1, y - 1, 0); bufferBuilder.vertex(matrix, x + 217, y - 1, 0); bufferBuilder.vertex(matrix, x + 217, y + 27, 0); bufferBuilder.vertex(matrix, x - 1, y + 27, 0); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.setShaderColor(1, 1, 1, 1); GL11.glEnable(GL11.GL_CULL_FACE); diff --git a/src/main/java/net/wurstclient/util/RenderUtils.java b/src/main/java/net/wurstclient/util/RenderUtils.java index 5c25e117..48b5874c 100644 --- a/src/main/java/net/wurstclient/util/RenderUtils.java +++ b/src/main/java/net/wurstclient/util/RenderUtils.java @@ -12,8 +12,6 @@ import org.joml.Vector3f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.class_9801; import net.minecraft.block.Blocks; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gl.VertexBuffer; @@ -136,7 +134,7 @@ public enum RenderUtils RenderSystem.setShader(GameRenderer::getPositionProgram); Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, minX, minY, minZ); bufferBuilder.vertex(matrix, maxX, minY, minZ); @@ -168,16 +166,16 @@ public enum RenderUtils bufferBuilder.vertex(matrix, minX, maxY, maxZ); bufferBuilder.vertex(matrix, minX, maxY, minZ); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public static void drawSolidBox(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tessellator - .method_60827(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); drawSolidBox(bb, bufferBuilder); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffer.bind(); vertexBuffer.upload(buffer); @@ -234,7 +232,7 @@ public enum RenderUtils Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); RenderSystem.setShader(GameRenderer::getPositionProgram); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); float minX = (float)bb.minX; @@ -280,16 +278,16 @@ public enum RenderUtils bufferBuilder.vertex(matrix, minX, maxY, maxZ); bufferBuilder.vertex(matrix, minX, maxY, minZ); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public static void drawOutlinedBox(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawOutlinedBox(bb, bufferBuilder); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffer.bind(); vertexBuffer.upload(buffer); @@ -353,7 +351,7 @@ public enum RenderUtils Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, minX, minY, minZ); @@ -392,16 +390,16 @@ public enum RenderUtils bufferBuilder.vertex(matrix, maxX, minY, maxZ); bufferBuilder.vertex(matrix, maxX, minY, minZ); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public static void drawCrossBox(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawCrossBox(bb, bufferBuilder); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffer.bind(); vertexBuffer.upload(buffer); @@ -464,7 +462,7 @@ public enum RenderUtils double midY = (bb.minY + bb.maxY) / 2; double midZ = (bb.minZ + bb.maxZ) / 2; - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ); @@ -503,16 +501,16 @@ public enum RenderUtils bufferBuilder.vertex(matrix, (float)midX, (float)bb.minY, (float)midZ); bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public static void drawNode(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawNode(bb, bufferBuilder); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffer.bind(); vertexBuffer.upload(buffer); @@ -573,7 +571,7 @@ public enum RenderUtils RenderSystem.setShader(GameRenderer::getPositionProgram); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); double startX = from.x; @@ -637,17 +635,17 @@ public enum RenderUtils matrixStack.pop(); - BufferRenderer.drawWithGlobalProgram(bufferBuilder.method_60800()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } public static void drawArrow(Vec3d from, Vec3d to, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.method_60827( + BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawArrow(from, to, bufferBuilder); - class_9801 buffer = bufferBuilder.method_60800(); + BuiltBuffer buffer = bufferBuilder.end(); vertexBuffer.bind(); vertexBuffer.upload(buffer); From ffa13bd95189b4f63f06de7a1b4a53a3a851a4f6 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 29 May 2024 20:46:12 +0200 Subject: [PATCH 011/109] Update to 1.21-pre1 --- .../java/net/wurstclient/ai/PathRenderer.java | 8 +- .../wurstclient/altmanager/AltRenderer.java | 4 +- .../altmanager/screens/AltEditorScreen.java | 4 +- .../altmanager/screens/AltManagerScreen.java | 11 +- .../net/wurstclient/clickgui/ClickGui.java | 75 ++++++----- .../components/ComboBoxComponent.java | 8 +- .../clickgui/components/FeatureButton.java | 8 +- .../clickgui/components/RadarComponent.java | 5 +- .../net/wurstclient/hacks/BaseFinderHack.java | 36 +++--- .../net/wurstclient/hacks/CaveFinderHack.java | 36 ++++-- .../net/wurstclient/hacks/FreecamHack.java | 4 +- .../net/wurstclient/hacks/ItemEspHack.java | 4 +- .../wurstclient/hacks/MobSpawnEspHack.java | 29 +++-- .../net/wurstclient/hacks/SearchHack.java | 36 ++++-- .../net/wurstclient/hacks/SkinDerpHack.java | 1 + .../net/wurstclient/hacks/TunnellerHack.java | 120 ++++++++++-------- .../hacks/autofarm/AutoFarmRenderer.java | 31 ++++- .../hacks/autofish/AutoFishDebugDraw.java | 4 +- .../hacks/autolibrarian/BookOffer.java | 2 +- .../hacks/chestesp/ChestEspRenderer.java | 4 +- .../newchunks/NewChunksChunkRenderer.java | 1 + .../newchunks/NewChunksOutlineRenderer.java | 5 +- .../newchunks/NewChunksReasonsRenderer.java | 1 + .../hacks/newchunks/NewChunksRenderer.java | 7 + .../newchunks/NewChunksSquareRenderer.java | 3 +- .../hacks/portalesp/PortalEspRenderer.java | 4 +- .../net/wurstclient/hacks/treebot/Tree.java | 5 +- .../java/net/wurstclient/hud/WurstLogo.java | 4 +- .../mixin/BackgroundRendererMixin.java | 1 + .../net/wurstclient/mixin/CameraMixin.java | 3 +- .../mixin/DisconnectedScreenMixin.java | 5 +- .../navigator/NavigatorFeatureScreen.java | 8 +- .../navigator/NavigatorMainScreen.java | 12 +- .../navigator/NavigatorScreen.java | 4 +- .../java/net/wurstclient/util/ListWidget.java | 45 +++---- .../net/wurstclient/util/RenderUtils.java | 33 ++--- src/main/resources/fabric.mod.json | 6 +- 37 files changed, 327 insertions(+), 250 deletions(-) diff --git a/src/main/java/net/wurstclient/ai/PathRenderer.java b/src/main/java/net/wurstclient/ai/PathRenderer.java index edb8570f..626e7eba 100644 --- a/src/main/java/net/wurstclient/ai/PathRenderer.java +++ b/src/main/java/net/wurstclient/ai/PathRenderer.java @@ -29,8 +29,8 @@ public final class PathRenderer { Tessellator tessellator = RenderSystem.renderThreadTesselator(); RenderSystem.setShader(GameRenderer::getPositionProgram); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); int startX = start.getX() - region.x(); int startY = start.getY(); @@ -112,8 +112,8 @@ public final class PathRenderer Tessellator tessellator = RenderSystem.renderThreadTesselator(); RenderSystem.setShader(GameRenderer::getPositionProgram); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); // middle part bufferBuilder.vertex(matrix, 0, 0, 1); diff --git a/src/main/java/net/wurstclient/altmanager/AltRenderer.java b/src/main/java/net/wurstclient/altmanager/AltRenderer.java index 1d984414..4c85d301 100644 --- a/src/main/java/net/wurstclient/altmanager/AltRenderer.java +++ b/src/main/java/net/wurstclient/altmanager/AltRenderer.java @@ -67,8 +67,8 @@ public final class AltRenderer RenderSystem.setShader(GameRenderer::getPositionTexProgram); MatrixStack matrixStack = context.getMatrices(); Matrix4f matrix4f = matrixStack.peek().getPositionMatrix(); - BufferBuilder bufferBuilder = Tessellator.getInstance().begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE); + BufferBuilder bufferBuilder = Tessellator.getInstance() + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE); bufferBuilder.vertex(matrix4f, x, y, z).texture(uOverFw, vOverFh); bufferBuilder.vertex(matrix4f, x, y2, z).texture(uOverFw, vPlusHOverFh); bufferBuilder.vertex(matrix4f, x2, y2, z).texture(uPlusWOverFw, diff --git a/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java b/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java index 7b2ad6d0..4c54f111 100644 --- a/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java +++ b/src/main/java/net/wurstclient/altmanager/screens/AltEditorScreen.java @@ -384,8 +384,8 @@ public abstract class AltEditorScreen extends Screen RenderSystem.setShaderColor(1, 0, 0, errorTimer / 16F); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, 0, 0, 0); bufferBuilder.vertex(matrix, width, 0, 0); bufferBuilder.vertex(matrix, width, height, 0); diff --git a/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java b/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java index a72ccb90..5d97b2cb 100644 --- a/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java +++ b/src/main/java/net/wurstclient/altmanager/screens/AltManagerScreen.java @@ -459,8 +459,8 @@ public final class AltManagerScreen extends Screen RenderSystem.setShaderColor(1, 0, 0, errorTimer / 16F); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, 0, 0, 0); bufferBuilder.vertex(matrix, width, 0, 0); bufferBuilder.vertex(matrix, width, height, 0); @@ -660,14 +660,13 @@ public final class AltManagerScreen extends Screen RenderSystem.setShaderColor(0, 1, 0, opacity); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x - 2, y - 2, 0); bufferBuilder.vertex(matrix, x - 2 + 220, y - 2, 0); bufferBuilder.vertex(matrix, x - 2 + 220, y - 2 + 30, 0); bufferBuilder.vertex(matrix, x - 2, y - 2 + 30, 0); - BufferRenderer - .drawWithGlobalProgram(bufferBuilder.end()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_BLEND); diff --git a/src/main/java/net/wurstclient/clickgui/ClickGui.java b/src/main/java/net/wurstclient/clickgui/ClickGui.java index 78336b26..e17d1ae4 100644 --- a/src/main/java/net/wurstclient/clickgui/ClickGui.java +++ b/src/main/java/net/wurstclient/clickgui/ClickGui.java @@ -676,8 +676,8 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xs2, ys1, 0); bufferBuilder.vertex(matrix, xs2, ys2, 0); bufferBuilder.vertex(matrix, xs3, ys2, 0); @@ -690,8 +690,7 @@ public final class ClickGui bufferBuilder.vertex(matrix, xs1, ys2, 0); bufferBuilder.vertex(matrix, xs2, ys2, 0); bufferBuilder.vertex(matrix, xs2, ys4, 0); - BufferRenderer - .drawWithGlobalProgram(bufferBuilder.end()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); boolean hovering = mouseX >= xs1 && mouseY >= ys3 && mouseX < xs2 && mouseY < ys4; @@ -700,29 +699,27 @@ public final class ClickGui RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], hovering ? opacity * 1.5F : opacity); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - bufferBuilder.vertex(matrix, xs1, ys3, 0); - bufferBuilder.vertex(matrix, xs1, ys4, 0); - bufferBuilder.vertex(matrix, xs2, ys4, 0); - bufferBuilder.vertex(matrix, xs2, ys3, 0); - BufferRenderer - .drawWithGlobalProgram(bufferBuilder.end()); - - // outline - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], - 0.5F); - - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINE_STRIP, + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xs1, ys3, 0); bufferBuilder.vertex(matrix, xs1, ys4, 0); bufferBuilder.vertex(matrix, xs2, ys4, 0); bufferBuilder.vertex(matrix, xs2, ys3, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); + + // outline + RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], + 0.5F); + + bufferBuilder = + tessellator.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, + VertexFormats.POSITION); bufferBuilder.vertex(matrix, xs1, ys3, 0); - BufferRenderer - .drawWithGlobalProgram(bufferBuilder.end()); + bufferBuilder.vertex(matrix, xs1, ys4, 0); + bufferBuilder.vertex(matrix, xs2, ys4, 0); + bufferBuilder.vertex(matrix, xs2, ys3, 0); + bufferBuilder.vertex(matrix, xs1, ys3, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } int x3 = x1 + 2; @@ -735,8 +732,8 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x3, y2, 0); @@ -759,8 +756,8 @@ public final class ClickGui RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], opacity); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION); // window background // between children @@ -825,8 +822,8 @@ public final class ClickGui if(!window.isMinimized()) { // title bar outline - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.DEBUG_LINES, + VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x2, y3, 0); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); @@ -970,8 +967,8 @@ public final class ClickGui } // arrow - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa3, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); @@ -1009,8 +1006,8 @@ public final class ClickGui // knob RenderSystem.setShaderColor(h, 0, 0, 0.5F); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk1, yk1, 0); bufferBuilder.vertex(matrix, xk2, yk1, 0); bufferBuilder.vertex(matrix, xk2, yk2, 0); @@ -1028,8 +1025,8 @@ public final class ClickGui // needle RenderSystem.setShaderColor(h, h, h, 1); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION); bufferBuilder.vertex(matrix, xn1, yn1, 0); bufferBuilder.vertex(matrix, xn2, yn1, 0); bufferBuilder.vertex(matrix, xn2, yn2, 0); @@ -1082,8 +1079,8 @@ public final class ClickGui // knob RenderSystem.setShaderColor(0, h, 0, 1); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk1, yk1, 0); bufferBuilder.vertex(matrix, xk2, yk2, 0); bufferBuilder.vertex(matrix, xk3, yk3, 0); @@ -1103,8 +1100,8 @@ public final class ClickGui // needle RenderSystem.setShaderColor(h, h, h, 1); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.TRIANGLES, + VertexFormats.POSITION); bufferBuilder.vertex(matrix, xn1, yn1, 0); bufferBuilder.vertex(matrix, xn2, yn2, 0); bufferBuilder.vertex(matrix, xn3, yn3, 0); @@ -1181,8 +1178,8 @@ public final class ClickGui // outline RenderSystem.setShaderColor(0.0625F, 0.0625F, 0.0625F, 0.5F); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.DEBUG_LINES, + VertexFormats.POSITION); bufferBuilder.vertex(matrix, xc1, yc1, 0); bufferBuilder.vertex(matrix, xc2, yc2, 0); bufferBuilder.vertex(matrix, xc6, yc5, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java b/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java index d6c4a23f..6ba454e7 100644 --- a/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java @@ -205,8 +205,8 @@ public final class ComboBoxComponent> extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); @@ -238,8 +238,8 @@ public final class ComboBoxComponent> extends Component } // arrow - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa3, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java b/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java index 634a6312..3f2989df 100644 --- a/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java @@ -235,8 +235,8 @@ public final class FeatureButton extends Component Tessellator tessellator = RenderSystem.renderThreadTesselator(); // separator - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); @@ -268,8 +268,8 @@ public final class FeatureButton extends Component } // arrow - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); bufferBuilder.vertex(matrix, xa3, ya1, 0); bufferBuilder.vertex(matrix, xa2, ya2, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java b/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java index 1d5ccd1b..6f5b795f 100644 --- a/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java @@ -16,6 +16,7 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.render.BufferBuilder; import net.minecraft.client.render.BufferRenderer; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; @@ -190,7 +191,9 @@ public final class RadarComponent extends Component middleY + (float)renderY + 0.5F, 0) .color(red, green, blue, alpha); } - BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); + BuiltBuffer buffer = bufferBuilder.endNullable(); + if(buffer != null) + BufferRenderer.drawWithGlobalProgram(buffer); } @Override diff --git a/src/main/java/net/wurstclient/hacks/BaseFinderHack.java b/src/main/java/net/wurstclient/hacks/BaseFinderHack.java index b07835a3..b3d5bb24 100644 --- a/src/main/java/net/wurstclient/hacks/BaseFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/BaseFinderHack.java @@ -16,6 +16,7 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; + import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; @@ -200,23 +201,28 @@ public final class BaseFinderHack extends Hack if(modulo == 0 || !region.equals(lastRegion)) { if(vertexBuffer != null) + { vertexBuffer.close(); + vertexBuffer = null; + } - vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - - for(int[] vertex : vertices) - bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], - vertex[2] - region.z()); - - BuiltBuffer buffer = bufferBuilder.end(); - - vertexBuffer.bind(); - vertexBuffer.upload(buffer); - VertexBuffer.unbind(); + if(!vertices.isEmpty()) + { + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + + for(int[] vertex : vertices) + bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], + vertex[2] - region.z()); + + BuiltBuffer buffer = bufferBuilder.end(); + + vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); + vertexBuffer.bind(); + vertexBuffer.upload(buffer); + VertexBuffer.unbind(); + } lastRegion = region; } diff --git a/src/main/java/net/wurstclient/hacks/CaveFinderHack.java b/src/main/java/net/wurstclient/hacks/CaveFinderHack.java index 143c72f8..1f6cdb6a 100644 --- a/src/main/java/net/wurstclient/hacks/CaveFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/CaveFinderHack.java @@ -19,6 +19,7 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; + import net.minecraft.block.Blocks; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; @@ -253,24 +254,31 @@ public final class CaveFinderHack extends Hack private void setBufferFromTask() { - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator - .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - + ArrayList vertices = compileVerticesTask.join(); RegionPos region = RenderUtils.getCameraRegion(); - for(int[] vertex : compileVerticesTask.join()) - bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], - vertex[2] - region.z()); - - BuiltBuffer buffer = bufferBuilder.end(); - if(vertexBuffer != null) + { vertexBuffer.close(); + vertexBuffer = null; + } - vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - vertexBuffer.bind(); - vertexBuffer.upload(buffer); - VertexBuffer.unbind(); + if(!vertices.isEmpty()) + { + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + + for(int[] vertex : vertices) + bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], + vertex[2] - region.z()); + + BuiltBuffer buffer = bufferBuilder.end(); + + vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); + vertexBuffer.bind(); + vertexBuffer.upload(buffer); + VertexBuffer.unbind(); + } bufferUpToDate = true; bufferRegion = region; diff --git a/src/main/java/net/wurstclient/hacks/FreecamHack.java b/src/main/java/net/wurstclient/hacks/FreecamHack.java index 023387f1..40378213 100644 --- a/src/main/java/net/wurstclient/hacks/FreecamHack.java +++ b/src/main/java/net/wurstclient/hacks/FreecamHack.java @@ -215,8 +215,8 @@ public final class FreecamHack extends Hack implements UpdateListener, Tessellator tessellator = RenderSystem.renderThreadTesselator(); RenderSystem.setShader(GameRenderer::getPositionProgram); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, (float)start.x, (float)start.y, (float)start.z); bufferBuilder.vertex(matrix, (float)end.x, (float)end.y, (float)end.z); diff --git a/src/main/java/net/wurstclient/hacks/ItemEspHack.java b/src/main/java/net/wurstclient/hacks/ItemEspHack.java index 138a6912..fbe4f4e3 100644 --- a/src/main/java/net/wurstclient/hacks/ItemEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ItemEspHack.java @@ -172,8 +172,8 @@ public final class ItemEspHack extends Hack implements UpdateListener, Vec3d start = RotationUtils.getClientLookVec(partialTicks) .add(RenderUtils.getCameraPos()).subtract(regionVec); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(ItemEntity e : items) { Vec3d end = EntityUtils.getLerpedBox(e, partialTicks).getCenter() diff --git a/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java b/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java index a7dc3d9c..bc10af12 100644 --- a/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java +++ b/src/main/java/net/wurstclient/hacks/MobSpawnEspHack.java @@ -7,7 +7,13 @@ */ package net.wurstclient.hacks; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.ConcurrentModificationException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.stream.Collectors; @@ -16,6 +22,7 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; + import net.minecraft.block.BlockState; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; @@ -294,15 +301,17 @@ public final class MobSpawnEspHack extends Hack RegionPos region = RegionPos.of(chunk.getPos()); if(vertexBuffer != null) + { vertexBuffer.close(); + vertexBuffer = null; + } - vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tessellator.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR); - new ArrayList<>(red).stream().filter(Objects::nonNull) + new ArrayList<>(red).stream() .map(pos -> new BlockPos(pos.getX() - region.x(), pos.getY(), pos.getZ() - region.z())) .forEach(pos -> { @@ -319,7 +328,7 @@ public final class MobSpawnEspHack extends Hack .color(1, 0, 0, 0.5F); }); - new ArrayList<>(yellow).stream().filter(Objects::nonNull) + new ArrayList<>(yellow).stream() .map(pos -> new BlockPos(pos.getX() - region.x(), pos.getY(), pos.getZ() - region.z())) .forEach(pos -> { @@ -336,10 +345,14 @@ public final class MobSpawnEspHack extends Hack .color(1, 1, 0, 0.5F); }); - BuiltBuffer buffer = bufferBuilder.end(); - vertexBuffer.bind(); - vertexBuffer.upload(buffer); - VertexBuffer.unbind(); + BuiltBuffer buffer = bufferBuilder.endNullable(); + if(buffer != null) + { + vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); + vertexBuffer.bind(); + vertexBuffer.upload(buffer); + VertexBuffer.unbind(); + } doneCompiling = true; } diff --git a/src/main/java/net/wurstclient/hacks/SearchHack.java b/src/main/java/net/wurstclient/hacks/SearchHack.java index 4855577b..87a445a7 100644 --- a/src/main/java/net/wurstclient/hacks/SearchHack.java +++ b/src/main/java/net/wurstclient/hacks/SearchHack.java @@ -18,6 +18,7 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; + import net.minecraft.block.Block; import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; @@ -256,24 +257,31 @@ public final class SearchHack extends Hack private void setBufferFromTask() { - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator - .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - + ArrayList vertices = compileVerticesTask.join(); RegionPos region = RenderUtils.getCameraRegion(); - for(int[] vertex : compileVerticesTask.join()) - bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], - vertex[2] - region.z()); - - BuiltBuffer buffer = bufferBuilder.end(); - if(vertexBuffer != null) + { vertexBuffer.close(); + vertexBuffer = null; + } - vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - vertexBuffer.bind(); - vertexBuffer.upload(buffer); - VertexBuffer.unbind(); + if(!vertices.isEmpty()) + { + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + + for(int[] vertex : vertices) + bufferBuilder.vertex(vertex[0] - region.x(), vertex[1], + vertex[2] - region.z()); + + BuiltBuffer buffer = bufferBuilder.endNullable(); + + vertexBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); + vertexBuffer.bind(); + vertexBuffer.upload(buffer); + VertexBuffer.unbind(); + } bufferUpToDate = true; bufferRegion = region; diff --git a/src/main/java/net/wurstclient/hacks/SkinDerpHack.java b/src/main/java/net/wurstclient/hacks/SkinDerpHack.java index 618a8338..9a8f3366 100644 --- a/src/main/java/net/wurstclient/hacks/SkinDerpHack.java +++ b/src/main/java/net/wurstclient/hacks/SkinDerpHack.java @@ -8,6 +8,7 @@ package net.wurstclient.hacks; import java.util.Random; + import net.minecraft.entity.player.PlayerModelPart; import net.wurstclient.Category; import net.wurstclient.SearchTags; diff --git a/src/main/java/net/wurstclient/hacks/TunnellerHack.java b/src/main/java/net/wurstclient/hacks/TunnellerHack.java index 6f201fe4..f3e05f88 100644 --- a/src/main/java/net/wurstclient/hacks/TunnellerHack.java +++ b/src/main/java/net/wurstclient/hacks/TunnellerHack.java @@ -16,6 +16,7 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -271,8 +272,8 @@ public final class TunnellerHack extends Hack vertexBuffers[0] = new VertexBuffer(VertexBuffer.Usage.STATIC); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); RegionPos region = RenderUtils.getCameraRegion(); Vec3d offset = Vec3d.ofCenter(start).subtract(region.toVec3d()); @@ -383,9 +384,10 @@ public final class TunnellerHack extends Hack getAllInBox(from, to).forEach(blocks::add); if(vertexBuffers[1] != null) + { vertexBuffers[1].close(); - - vertexBuffers[1] = new VertexBuffer(VertexBuffer.Usage.STATIC); + vertexBuffers[1] = null; + } RegionPos region = RenderUtils.getCameraRegion(); Box box = new Box(0.1, 0.1, 0.1, 0.9, 0.9, 0.9) @@ -411,10 +413,14 @@ public final class TunnellerHack extends Hack RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); } - BuiltBuffer buffer = bufferBuilder.end(); - vertexBuffers[1].bind(); - vertexBuffers[1].upload(buffer); - VertexBuffer.unbind(); + BuiltBuffer buffer = bufferBuilder.endNullable(); + if(buffer != null) + { + vertexBuffers[1] = new VertexBuffer(VertexBuffer.Usage.STATIC); + vertexBuffers[1].bind(); + vertexBuffers[1].upload(buffer); + VertexBuffer.unbind(); + } if(currentBlock == null) { @@ -493,27 +499,32 @@ public final class TunnellerHack extends Hack blocks.add(pos); if(vertexBuffers[2] != null) + { vertexBuffers[2].close(); + vertexBuffers[2] = null; + } - vertexBuffers[2] = new VertexBuffer(VertexBuffer.Usage.STATIC); + if(!blocks.isEmpty()) + { + RegionPos region = RenderUtils.getCameraRegion(); + Box box = new Box(0.1, 0.1, 0.1, 0.9, 0.9, 0.9) + .offset(region.negate().toVec3d()); + + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder bufferBuilder = tessellator.begin( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + + for(BlockPos pos : blocks) + RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); + + vertexBuffers[2] = new VertexBuffer(VertexBuffer.Usage.STATIC); + vertexBuffers[2].bind(); + vertexBuffers[2].upload(bufferBuilder.end()); + VertexBuffer.unbind(); + return true; + } - RegionPos region = RenderUtils.getCameraRegion(); - Box box = new Box(0.1, 0.1, 0.1, 0.9, 0.9, 0.9) - .offset(region.negate().toVec3d()); - - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); - - for(BlockPos pos : blocks) - RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); - - BuiltBuffer buffer = bufferBuilder.end(); - vertexBuffers[2].bind(); - vertexBuffers[2].upload(buffer); - VertexBuffer.unbind(); - - return !blocks.isEmpty(); + return false; } private BlockPos offsetFloor(BlockPos pos, Vec3i vec) @@ -634,26 +645,32 @@ public final class TunnellerHack extends Hack ChatUtils.error("The tunnel is flooded, cannot continue."); if(vertexBuffers[3] != null) + { vertexBuffers[3].close(); + vertexBuffers[3] = null; + } - vertexBuffers[3] = new VertexBuffer(VertexBuffer.Usage.STATIC); + if(!liquids.isEmpty()) + { + RegionPos region = RenderUtils.getCameraRegion(); + Box box = new Box(0.1, 0.1, 0.1, 0.9, 0.9, 0.9) + .offset(region.negate().toVec3d()); + + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder bufferBuilder = tessellator.begin( + VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + + for(BlockPos pos : liquids) + RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); + + BuiltBuffer buffer = bufferBuilder.end(); + + vertexBuffers[3] = new VertexBuffer(VertexBuffer.Usage.STATIC); + vertexBuffers[3].bind(); + vertexBuffers[3].upload(buffer); + VertexBuffer.unbind(); + } - RegionPos region = RenderUtils.getCameraRegion(); - Box box = new Box(0.1, 0.1, 0.1, 0.9, 0.9, 0.9) - .offset(region.negate().toVec3d()); - - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); - - for(BlockPos pos : liquids) - RenderUtils.drawOutlinedBox(box.offset(pos), bufferBuilder); - - BuiltBuffer buffer = bufferBuilder.end(); - - vertexBuffers[3].bind(); - vertexBuffers[3].upload(buffer); - VertexBuffer.unbind(); return true; } @@ -711,15 +728,16 @@ public final class TunnellerHack extends Hack @Override public boolean canRun() { + if(vertexBuffers[4] != null) + { + vertexBuffers[4].close(); + vertexBuffers[4] = null; + } + if(!torches.isChecked()) { lastTorch = null; nextTorch = BlockPos.ofFloored(MC.player.getPos()); - if(vertexBuffers[4] != null) - { - vertexBuffers[4].close(); - vertexBuffers[4] = null; - } return false; } @@ -730,15 +748,11 @@ public final class TunnellerHack extends Hack nextTorch = lastTorch.offset(direction, size.getSelected().torchDistance); - if(vertexBuffers[4] != null) - vertexBuffers[4].close(); - - vertexBuffers[4] = new VertexBuffer(VertexBuffer.Usage.STATIC); - RegionPos region = RenderUtils.getCameraRegion(); Vec3d torchVec = Vec3d.ofBottomCenter(nextTorch).subtract(region.toVec3d()); + vertexBuffers[4] = new VertexBuffer(VertexBuffer.Usage.STATIC); RenderUtils.drawArrow(torchVec, torchVec.add(0, 0.5, 0), vertexBuffers[4]); diff --git a/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java b/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java index 298f392e..22a25946 100644 --- a/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java +++ b/src/main/java/net/wurstclient/hacks/autofarm/AutoFarmRenderer.java @@ -16,6 +16,7 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; + import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; @@ -112,11 +113,17 @@ public final class AutoFarmRenderer Tessellator tessellator, Box box, Vec3d regionOffset) { if(greenBuffer != null) + { greenBuffer.close(); + greenBuffer = null; + } + + if(blocksToHarvest.isEmpty()) + return; greenBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : blocksToHarvest) { @@ -134,11 +141,17 @@ public final class AutoFarmRenderer Box node, Vec3d regionOffset) { if(cyanBuffer != null) + { cyanBuffer.close(); + cyanBuffer = null; + } + + if(plants.isEmpty()) + return; cyanBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : plants) { @@ -156,11 +169,17 @@ public final class AutoFarmRenderer Tessellator tessellator, Box box, Vec3d regionOffset) { if(redBuffer != null) + { redBuffer.close(); + redBuffer = null; + } + + if(blocksToReplant.isEmpty()) + return; redBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(BlockPos pos : blocksToReplant) { diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java index 079119bc..820e098c 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java @@ -141,8 +141,8 @@ public final class AutoFishDebugDraw float[] colorF = ddColor.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, -0.125F, 0, -0.125F); bufferBuilder.vertex(matrix, 0.125F, 0, 0.125F); bufferBuilder.vertex(matrix, 0.125F, 0, -0.125F); diff --git a/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java b/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java index 095c067f..e0b62145 100644 --- a/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java +++ b/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java @@ -102,7 +102,7 @@ public record BookOffer(String id, int level, int price) */ public boolean isMostlyValid() { - return Identifier.isValid(id) && level >= 1 && price >= 1 + return Identifier.tryParse(id) != null && level >= 1 && price >= 1 && price <= 64; } diff --git a/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java b/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java index 0c659216..e49263da 100644 --- a/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java +++ b/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java @@ -86,8 +86,8 @@ public final class ChestEspRenderer float[] colorF = group.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(Box box : group.getBoxes()) { diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java index bc40c0ac..880d5c22 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksChunkRenderer.java @@ -8,6 +8,7 @@ package net.wurstclient.hacks.newchunks; import java.util.Set; + import net.minecraft.client.render.BuiltBuffer; import net.minecraft.util.math.ChunkPos; diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java index b1dab13e..54a3533b 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java @@ -12,6 +12,7 @@ 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.BuiltBuffer; import net.minecraft.client.render.Tessellator; @@ -28,8 +29,8 @@ public final class NewChunksOutlineRenderer implements NewChunksChunkRenderer public BuiltBuffer buildBuffer(Set chunks, int drawDistance) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); renderChunks(new ArrayList<>(chunks), drawDistance, bufferBuilder); return bufferBuilder.end(); } diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java index 40f26d76..beaa1674 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java @@ -12,6 +12,7 @@ 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.BuiltBuffer; import net.minecraft.client.render.Tessellator; diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java index 2f7a09d5..3e5ea828 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java @@ -11,6 +11,7 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; + import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BuiltBuffer; @@ -40,6 +41,12 @@ public final class NewChunksRenderer public void updateBuffer(int i, BuiltBuffer buffer) { + if(buffer == null) + { + vertexBuffers[i] = null; + return; + } + vertexBuffers[i] = new VertexBuffer(VertexBuffer.Usage.STATIC); vertexBuffers[i].bind(); vertexBuffers[i].upload(buffer); diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java index 87083e5b..1e531af9 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksSquareRenderer.java @@ -12,6 +12,7 @@ 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.BuiltBuffer; import net.minecraft.client.render.Tessellator; @@ -31,7 +32,7 @@ public final class NewChunksSquareRenderer implements NewChunksChunkRenderer BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); renderChunks(new ArrayList<>(chunks), drawDistance, bufferBuilder); - return bufferBuilder.end(); + return bufferBuilder.endNullable(); } private void renderChunks(List chunks, int drawDistance, diff --git a/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java b/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java index d579d9be..e56b08db 100644 --- a/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java +++ b/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java @@ -86,8 +86,8 @@ public final class PortalEspRenderer float[] colorF = group.getColorF(); RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); for(Box box : group.getBoxes()) { diff --git a/src/main/java/net/wurstclient/hacks/treebot/Tree.java b/src/main/java/net/wurstclient/hacks/treebot/Tree.java index e9b6b88e..7b0202ed 100644 --- a/src/main/java/net/wurstclient/hacks/treebot/Tree.java +++ b/src/main/java/net/wurstclient/hacks/treebot/Tree.java @@ -13,6 +13,7 @@ import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; + import net.minecraft.client.gl.ShaderProgram; import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.render.BufferBuilder; @@ -54,8 +55,8 @@ public class Tree implements AutoCloseable .offset(regionOffset); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); RenderUtils.drawCrossBox(box.offset(stump), bufferBuilder); diff --git a/src/main/java/net/wurstclient/hud/WurstLogo.java b/src/main/java/net/wurstclient/hud/WurstLogo.java index 1246d024..29889940 100644 --- a/src/main/java/net/wurstclient/hud/WurstLogo.java +++ b/src/main/java/net/wurstclient/hud/WurstLogo.java @@ -82,8 +82,8 @@ public final class WurstLogo RenderSystem.setShader(GameRenderer::getPositionColorProgram); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); bufferBuilder.vertex(matrix, x1, y2, 0.0F).color(r, g, b, a); bufferBuilder.vertex(matrix, x2, y2, 0.0F).color(r, g, b, a); bufferBuilder.vertex(matrix, x2, y1, 0.0F).color(r, g, b, a); diff --git a/src/main/java/net/wurstclient/mixin/BackgroundRendererMixin.java b/src/main/java/net/wurstclient/mixin/BackgroundRendererMixin.java index 5e00da47..552fcd1a 100644 --- a/src/main/java/net/wurstclient/mixin/BackgroundRendererMixin.java +++ b/src/main/java/net/wurstclient/mixin/BackgroundRendererMixin.java @@ -14,6 +14,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import com.mojang.blaze3d.systems.RenderSystem; + import net.minecraft.block.enums.CameraSubmersionType; import net.minecraft.client.render.BackgroundRenderer; import net.minecraft.client.render.BackgroundRenderer.StatusEffectFogModifier; diff --git a/src/main/java/net/wurstclient/mixin/CameraMixin.java b/src/main/java/net/wurstclient/mixin/CameraMixin.java index 880675f9..f82efa7a 100644 --- a/src/main/java/net/wurstclient/mixin/CameraMixin.java +++ b/src/main/java/net/wurstclient/mixin/CameraMixin.java @@ -12,6 +12,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + import net.minecraft.block.enums.CameraSubmersionType; import net.minecraft.client.render.Camera; import net.wurstclient.WurstClient; @@ -42,7 +43,7 @@ public abstract class CameraMixin } @Inject(at = @At("HEAD"), - method = "getSubmersionType()Lnet/minecraft/client/render/CameraSubmersionType;", + method = "getSubmersionType()Lnet/minecraft/block/enums/CameraSubmersionType;", cancellable = true) private void onGetSubmersionType( CallbackInfoReturnable cir) diff --git a/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java b/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java index 229bf6ca..c166585c 100644 --- a/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java +++ b/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java @@ -15,6 +15,7 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + import net.minecraft.client.gui.screen.DisconnectedScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; @@ -35,7 +36,7 @@ public class DisconnectedScreenMixin extends Screen @Shadow @Final - private DisconnectionInfo field_52131;// reason container thing + private DisconnectionInfo info; @Shadow @Final private Screen parent; @@ -54,7 +55,7 @@ public class DisconnectedScreenMixin extends Screen if(!WurstClient.INSTANCE.isEnabled()) return; - Text reason = field_52131.reason(); + Text reason = info.reason(); System.out.println("Disconnected: " + reason); if(ForcedChatReportsScreen.isCausedByNoChatReports(reason)) diff --git a/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java index d4abb4f6..418f62d2 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java @@ -380,8 +380,8 @@ public final class NavigatorFeatureScreen extends NavigatorScreen // window background // left & right setColorToBackground(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y3, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x3, y2, 0); @@ -393,8 +393,8 @@ public final class NavigatorFeatureScreen extends NavigatorScreen BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); setColorToBackground(); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION); // window background // between children diff --git a/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java index b91c62b1..d60232f1 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java @@ -303,8 +303,8 @@ public final class NavigatorMainScreen extends NavigatorScreen // background RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], 0.75F); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xt1, yt1, 0); bufferBuilder.vertex(matrix, xt1, yt2, 0); bufferBuilder.vertex(matrix, xt2, yt2, 0); @@ -428,8 +428,8 @@ public final class NavigatorMainScreen extends NavigatorScreen int by2 = by1 + area.height - 4; float[] acColor = WurstClient.INSTANCE.getGui().getAcColor(); RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, bx1, by1, 0); bufferBuilder.vertex(matrix, bx1, by2, 0); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); @@ -449,8 +449,8 @@ public final class NavigatorMainScreen extends NavigatorScreen // arrow RenderSystem.setShaderColor(0, hovering ? 1 : 0.85F, 0, 1); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.TRIANGLES, + VertexFormats.POSITION); bufferBuilder.vertex(matrix, ax1, ay1, 0); bufferBuilder.vertex(matrix, ax2, ay1, 0); bufferBuilder.vertex(matrix, ax3, ay2, 0); diff --git a/src/main/java/net/wurstclient/navigator/NavigatorScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorScreen.java index b5d85910..1f4351dc 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorScreen.java @@ -341,8 +341,8 @@ public abstract class NavigatorScreen extends Screen // outline float yi1 = y1 + 0.1F; RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, yi1, 0); bufferBuilder.vertex(matrix, x2, yi1, 0); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); diff --git a/src/main/java/net/wurstclient/util/ListWidget.java b/src/main/java/net/wurstclient/util/ListWidget.java index 289b69a0..a6b43229 100644 --- a/src/main/java/net/wurstclient/util/ListWidget.java +++ b/src/main/java/net/wurstclient/util/ListWidget.java @@ -187,9 +187,8 @@ public abstract class ListWidget extends AbstractParentElement GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SrcFactor.ZERO, GlStateManager.DstFactor.ONE); RenderSystem.setShaderColor(1, 1, 1, 1); - bufferBuilder = - tessellator.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_TEXTURE_COLOR); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION_TEXTURE_COLOR); bufferBuilder.vertex(left, top + 4, 0).texture(0, 1).color(0, 0, 0, 0); bufferBuilder.vertex(right, top + 4, 0).texture(1, 1).color(0, 0, 0, @@ -199,9 +198,8 @@ public abstract class ListWidget extends AbstractParentElement bufferBuilder.vertex(left, top, 0).texture(0, 0).color(0, 0, 0, 255); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); - bufferBuilder = - tessellator.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION_TEXTURE_COLOR); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION_TEXTURE_COLOR); bufferBuilder.vertex(left, bottom, 0).texture(0, 1).color(0, 0, 0, 255); bufferBuilder.vertex(right, bottom, 0).texture(1, 1).color(0, 0, 0, @@ -222,31 +220,28 @@ public abstract class ListWidget extends AbstractParentElement p = top; RenderSystem.setShader(GameRenderer::getPositionColorProgram); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION_COLOR); bufferBuilder.vertex(i, bottom, 0).color(0, 0, 0, 255); bufferBuilder.vertex(j, bottom, 0).color(0, 0, 0, 255); bufferBuilder.vertex(j, top, 0).color(0, 0, 0, 255); bufferBuilder.vertex(i, top, 0).color(0, 0, 0, 255); - BufferRenderer - .drawWithGlobalProgram(bufferBuilder.end()); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION_COLOR); bufferBuilder.vertex(i, p + o, 0).color(128, 128, 128, 255); bufferBuilder.vertex(j, p + o, 0).color(128, 128, 128, 255); bufferBuilder.vertex(j, p, 0).color(128, 128, 128, 255); bufferBuilder.vertex(i, p, 0).color(128, 128, 128, 255); - BufferRenderer - .drawWithGlobalProgram(bufferBuilder.end()); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION_COLOR); bufferBuilder.vertex(i, p + o - 1, 0).color(192, 192, 192, 255); bufferBuilder.vertex(j - 1, p + o - 1, 0).color(192, 192, 192, 255); bufferBuilder.vertex(j - 1, p, 0).color(192, 192, 192, 255); bufferBuilder.vertex(i, p, 0).color(192, 192, 192, 255); - BufferRenderer - .drawWithGlobalProgram(bufferBuilder.end()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } renderDecorations(mouseX, mouseY); @@ -394,23 +389,21 @@ public abstract class ListWidget extends AbstractParentElement int r = left + width / 2 + getRowWidth() / 2; float g = isFocused() ? 1 : 0.5F; RenderSystem.setShaderColor(g, g, g, 1); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(q, o + p + 2, 0); bufferBuilder.vertex(r, o + p + 2, 0); bufferBuilder.vertex(r, o - 2, 0); bufferBuilder.vertex(q, o - 2, 0); - BufferRenderer - .drawWithGlobalProgram(bufferBuilder.end()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.setShaderColor(0, 0, 0, 1); - bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION); bufferBuilder.vertex(q + 1, o + p + 1, 0); bufferBuilder.vertex(r - 1, o + p + 1, 0); bufferBuilder.vertex(r - 1, o - 1, 0); bufferBuilder.vertex(q + 1, o - 1, 0); - BufferRenderer - .drawWithGlobalProgram(bufferBuilder.end()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); } RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/util/RenderUtils.java b/src/main/java/net/wurstclient/util/RenderUtils.java index 48b5874c..4c36c4ea 100644 --- a/src/main/java/net/wurstclient/util/RenderUtils.java +++ b/src/main/java/net/wurstclient/util/RenderUtils.java @@ -12,6 +12,7 @@ import org.joml.Vector3f; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; + import net.minecraft.block.Blocks; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gl.VertexBuffer; @@ -232,8 +233,8 @@ public enum RenderUtils Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); RenderSystem.setShader(GameRenderer::getPositionProgram); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); float minX = (float)bb.minX; float minY = (float)bb.minY; @@ -284,8 +285,8 @@ public enum RenderUtils public static void drawOutlinedBox(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawOutlinedBox(bb, bufferBuilder); BuiltBuffer buffer = bufferBuilder.end(); @@ -351,8 +352,8 @@ public enum RenderUtils Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, minX, minY, minZ); bufferBuilder.vertex(matrix, maxX, maxY, minZ); @@ -396,8 +397,8 @@ public enum RenderUtils public static void drawCrossBox(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawCrossBox(bb, bufferBuilder); BuiltBuffer buffer = bufferBuilder.end(); @@ -462,8 +463,8 @@ public enum RenderUtils double midY = (bb.minY + bb.maxY) / 2; double midZ = (bb.minZ + bb.maxZ) / 2; - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, (float)midX, (float)midY, (float)bb.maxZ); bufferBuilder.vertex(matrix, (float)bb.minX, (float)midY, (float)midZ); @@ -507,8 +508,8 @@ public enum RenderUtils public static void drawNode(Box bb, VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawNode(bb, bufferBuilder); BuiltBuffer buffer = bufferBuilder.end(); @@ -571,8 +572,8 @@ public enum RenderUtils RenderSystem.setShader(GameRenderer::getPositionProgram); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); double startX = from.x; double startY = from.y; @@ -642,8 +643,8 @@ public enum RenderUtils VertexBuffer vertexBuffer) { Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.begin( - VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); drawArrow(from, to, bufferBuilder); BuiltBuffer buffer = bufferBuilder.end(); diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 66dac03e..61729aab 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -29,9 +29,9 @@ "accessWidener" : "wurst.accesswidener", "depends": { - "fabricloader": ">=0.15.9", - "fabric-api": ">=0.99.1", - "minecraft": "~1.21-alpha.24.21.a", + "fabricloader": ">=0.15.10", + "fabric-api": ">=0.99.2", + "minecraft": "~1.21-beta.1", "java": ">=21" }, "suggests": { From cc72c8d737b453de5081f60046b63eda1c1c4d5c Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 31 May 2024 16:40:52 +0200 Subject: [PATCH 012/109] [Wurst-Bot] Update to 1.21-pre2 --- gradle.properties | 8 ++++---- src/main/java/net/wurstclient/WurstClient.java | 2 +- .../java/net/wurstclient/hacks/AutoLibrarianHack.java | 3 ++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index 0763f0db..1fcb369c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,15 @@ org.gradle.parallel=true # Fabric Properties # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions -minecraft_version=1.21-pre1 -yarn_mappings=1.21-pre1+build.2 +minecraft_version=1.21-pre2 +yarn_mappings=1.21-pre2+build.1 loader_version=0.15.11 # Fabric API -fabric_version=0.99.2+1.21 +fabric_version=0.99.4+1.21 # Mod Properties -mod_version = v7.42-MC1.21-pre1 +mod_version = v7.42-MC1.21-pre2 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 2bca7d27..9bac1286 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -59,7 +59,7 @@ public enum WurstClient public static IMinecraftClient IMC; public static final String VERSION = "7.42"; - public static final String MC_VERSION = "1.21-pre1"; + public static final String MC_VERSION = "1.21-pre2"; private WurstAnalytics analytics; private EventManager eventManager; diff --git a/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java b/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java index 7a097ca7..1914c680 100644 --- a/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoLibrarianHack.java @@ -423,7 +423,8 @@ public final class AutoLibrarianHack extends Hack continue; Set>> enchantmentLevelMap = - EnchantmentHelper.getEnchantments(stack).getEnchantmentsMap(); + EnchantmentHelper.getEnchantments(stack) + .getEnchantmentEntries(); if(enchantmentLevelMap.isEmpty()) continue; From 9248ad5453f9b6b6547929e93a6042e985ccb529 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 5 Jun 2024 19:18:15 +0200 Subject: [PATCH 013/109] [Wurst-Bot] Update to 1.21-pre3 --- gradle.properties | 8 ++++---- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 1fcb369c..f036c7a1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,15 @@ org.gradle.parallel=true # Fabric Properties # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions -minecraft_version=1.21-pre2 -yarn_mappings=1.21-pre2+build.1 +minecraft_version=1.21-pre3 +yarn_mappings=1.21-pre3+build.1 loader_version=0.15.11 # Fabric API -fabric_version=0.99.4+1.21 +fabric_version=0.99.5+1.21 # Mod Properties -mod_version = v7.42-MC1.21-pre2 +mod_version = v7.42-MC1.21-pre3 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 9bac1286..3cd56ec8 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -59,7 +59,7 @@ public enum WurstClient public static IMinecraftClient IMC; public static final String VERSION = "7.42"; - public static final String MC_VERSION = "1.21-pre2"; + public static final String MC_VERSION = "1.21-pre3"; private WurstAnalytics analytics; private EventManager eventManager; From 3c664b5be24504c3b03d4ffd1de20d786974c95e Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 5 Jun 2024 19:22:24 +0200 Subject: [PATCH 014/109] Update to 1.21-pre3 --- src/main/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 61729aab..ac972418 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,7 +30,7 @@ "depends": { "fabricloader": ">=0.15.10", - "fabric-api": ">=0.99.2", + "fabric-api": ">=0.99.5", "minecraft": "~1.21-beta.1", "java": ">=21" }, From 0ef830b9911476d6ab4dee0ecc74177ae7b46412 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 7 Jun 2024 19:07:55 +0200 Subject: [PATCH 015/109] [Wurst-Bot] Update to 1.21-pre4 --- gradle.properties | 6 +++--- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index f036c7a1..164aceb8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,15 @@ org.gradle.parallel=true # Fabric Properties # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions -minecraft_version=1.21-pre3 -yarn_mappings=1.21-pre3+build.1 +minecraft_version=1.21-pre4 +yarn_mappings=1.21-pre4+build.2 loader_version=0.15.11 # Fabric API fabric_version=0.99.5+1.21 # Mod Properties -mod_version = v7.42-MC1.21-pre3 +mod_version = v7.42-MC1.21-pre4 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 3cd56ec8..1ee30869 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -59,7 +59,7 @@ public enum WurstClient public static IMinecraftClient IMC; public static final String VERSION = "7.42"; - public static final String MC_VERSION = "1.21-pre3"; + public static final String MC_VERSION = "1.21-pre4"; private WurstAnalytics analytics; private EventManager eventManager; From fdd2e2670c0daf0cf25ddf0e659e5ba3fc34f4e1 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 10 Jun 2024 17:35:13 +0200 Subject: [PATCH 016/109] [Wurst-Bot] Update to 1.21-rc1 --- gradle.properties | 8 ++++---- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 164aceb8..5a0ac211 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,15 @@ org.gradle.parallel=true # Fabric Properties # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions -minecraft_version=1.21-pre4 -yarn_mappings=1.21-pre4+build.2 +minecraft_version=1.21-rc1 +yarn_mappings=1.21-rc1+build.1 loader_version=0.15.11 # Fabric API -fabric_version=0.99.5+1.21 +fabric_version=0.100.0+1.21 # Mod Properties -mod_version = v7.42-MC1.21-pre4 +mod_version = v7.42-MC1.21-rc1 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 1ee30869..5571c4a6 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -59,7 +59,7 @@ public enum WurstClient public static IMinecraftClient IMC; public static final String VERSION = "7.42"; - public static final String MC_VERSION = "1.21-pre4"; + public static final String MC_VERSION = "1.21-rc1"; private WurstAnalytics analytics; private EventManager eventManager; From 0e4114633ae4a9dcc24a0b19521f825a590f0366 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 11 Jun 2024 07:07:07 +0200 Subject: [PATCH 017/109] Fix NewChunks crash Fixes https://wurstforum.net/d/581 --- .../wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java index 54a3533b..8d356840 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksOutlineRenderer.java @@ -32,7 +32,7 @@ public final class NewChunksOutlineRenderer implements NewChunksChunkRenderer BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); renderChunks(new ArrayList<>(chunks), drawDistance, bufferBuilder); - return bufferBuilder.end(); + return bufferBuilder.endNullable(); } private void renderChunks(List chunks, int drawDistance, From 9a5803988cd1368279f924578786b445bd20a7d9 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 13 Jun 2024 17:15:29 +0200 Subject: [PATCH 018/109] [Wurst-Bot] Update to 1.21 --- gradle.properties | 8 ++++---- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5a0ac211..6a05cb69 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,15 @@ org.gradle.parallel=true # Fabric Properties # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions -minecraft_version=1.21-rc1 -yarn_mappings=1.21-rc1+build.1 +minecraft_version=1.21 +yarn_mappings=1.21+build.1 loader_version=0.15.11 # Fabric API -fabric_version=0.100.0+1.21 +fabric_version=0.100.1+1.21 # Mod Properties -mod_version = v7.42-MC1.21-rc1 +mod_version = v7.42-MC1.21 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 5571c4a6..68f980a2 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -59,7 +59,7 @@ public enum WurstClient public static IMinecraftClient IMC; public static final String VERSION = "7.42"; - public static final String MC_VERSION = "1.21-rc1"; + public static final String MC_VERSION = "1.21"; private WurstAnalytics analytics; private EventManager eventManager; From 9e0a967debfe46aebd2f77dd52f96815c1e51245 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 13 Jun 2024 21:45:57 +0200 Subject: [PATCH 019/109] Fix ESP line crashes in 1.21 Fixes https://wurstforum.net/d/587 --- src/main/java/net/wurstclient/hacks/ItemEspHack.java | 3 +++ src/main/java/net/wurstclient/hacks/MobEspHack.java | 3 +++ .../java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java | 3 +++ .../net/wurstclient/hacks/portalesp/PortalEspRenderer.java | 3 +++ 4 files changed, 12 insertions(+) diff --git a/src/main/java/net/wurstclient/hacks/ItemEspHack.java b/src/main/java/net/wurstclient/hacks/ItemEspHack.java index fbe4f4e3..37f7f6a8 100644 --- a/src/main/java/net/wurstclient/hacks/ItemEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ItemEspHack.java @@ -159,6 +159,9 @@ public final class ItemEspHack extends Hack implements UpdateListener, private void renderTracers(MatrixStack matrixStack, float partialTicks, RegionPos region) { + if(items.isEmpty()) + return; + GL11.glEnable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_DEPTH_TEST); float[] colorF = color.getColorF(); diff --git a/src/main/java/net/wurstclient/hacks/MobEspHack.java b/src/main/java/net/wurstclient/hacks/MobEspHack.java index a2c58304..a573809e 100644 --- a/src/main/java/net/wurstclient/hacks/MobEspHack.java +++ b/src/main/java/net/wurstclient/hacks/MobEspHack.java @@ -200,6 +200,9 @@ public final class MobEspHack extends Hack implements UpdateListener, private void renderTracers(MatrixStack matrixStack, float partialTicks, RegionPos region) { + if(mobs.isEmpty()) + return; + RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.setShaderColor(1, 1, 1, 1); diff --git a/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java b/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java index e49263da..9f1918cf 100644 --- a/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java +++ b/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java @@ -80,6 +80,9 @@ public final class ChestEspRenderer public void renderLines(ChestEspGroup group) { + if(group.getBoxes().isEmpty()) + return; + Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); diff --git a/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java b/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java index e56b08db..d9a03ea5 100644 --- a/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java +++ b/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java @@ -80,6 +80,9 @@ public final class PortalEspRenderer public void renderLines(PortalEspBlockGroup group) { + if(group.getBoxes().isEmpty()) + return; + Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); From ebd73ad0ec3479db9d6b96f3b38f8cdc3c4dea7b Mon Sep 17 00:00:00 2001 From: CureSaba <94890302+CureSaba@users.noreply.github.com> Date: Sun, 16 Jun 2024 00:12:04 +0900 Subject: [PATCH 020/109] Update ja_jp.json --- src/main/resources/assets/wurst/lang/ja_jp.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/wurst/lang/ja_jp.json b/src/main/resources/assets/wurst/lang/ja_jp.json index 334cb3b1..e6f257fa 100644 --- a/src/main/resources/assets/wurst/lang/ja_jp.json +++ b/src/main/resources/assets/wurst/lang/ja_jp.json @@ -46,6 +46,7 @@ "description.wurst.hack.autotool": "ブロックを破壊する際、自動でホットバー内の適したツールの中で最速のツールに切り替える。", "description.wurst.hack.autototem": "不死のトーテムを自動で利き手と逆の手に移動させる。", "description.wurst.hack.autowalk": "自動で歩く。", + "description.wurst.hack.barrieresp": "近くのバリアブロックを表示します。", "description.wurst.hack.basefinder": "人工的なブロックを検知し、プレイヤーの拠点を捜索する。\n検知したブロックは選択された色でハイライト表示する。\nグループの拠点などの発見に有用。", "description.wurst.hack.blink": "有効化されている間、モーションの更新をすべて停止する。", "description.wurst.hack.boatfly": "ボートや他の車両で飛行することができます。\nスプリントキー(走る)を押すと、より速く降下することができます。", @@ -114,10 +115,12 @@ "description.wurst.hack.nocomcrash": "「Nocom」と呼ばれる脆弱性を利用しサーバーにラグを発生させ、クラッシュさせる。\nPaperサーバーでは使用不可。バニラ、Spigot、Fabricサーバーでは動作確認済み。一部のAntiCheatでは対策されている可能性あり。", "description.wurst.hack.nofall": "落下ダメージを無効化する。", "description.wurst.hack.nofireoverlay": "燃えている時の画面上のエフェクトを無効化する。\n\n§c§l注意: §r燃えていることに気づかずに焼死する可能性あり。", + "description.wurst.hack.nofog": "ワールドから距離フォグを取り除く。", "description.wurst.hack.nohurtcam": "ダメージを受けた時の画面の揺れを無効化する。", "description.wurst.hack.nolevitation": "シュルカーの弾に当たったときの浮遊効果を無効にします。\n\n§c§l注意:§r 浮遊効果が既にアクティブになっているときにこれを有効にすると落下します!", "description.wurst.hack.nooverlay": "水と溶岩のオーバーレイを無効化する。", "description.wurst.hack.nopumpkin": "カボチャを頭に装着している時のオーバーレイを無効化する。", + "description.wurst.hack.noshieldoverlay": "盾を下げ、画面を覆う面積を減らす。", "description.wurst.hack.noslowdown": "はちみつやソウルサンド、そしてアイテムの使用時に発生する移動速度低下を無効化する。", "description.wurst.hack.noweather": "自分視点での天気、時間や月の形の変更ができる。", "description.wurst.hack.noweb": "クモの巣による移動速度低下を無効化する。", @@ -128,6 +131,7 @@ "description.wurst.hack.panic": "使用しているすべてのハックを瞬時にOFFにする。\n誤操作に注意!", "description.wurst.hack.parkour": "ブロックの端に到達した際に自動でジャンプする。\nパルクールなどに有用。", "description.wurst.hack.playeresp": "付近のプレイヤーをハイライト表示する。\nフレンドのESPボックスは青色で表示される。", + "description.wurst.hack.portalesp": "近くのポータルをハイライトする。", "description.wurst.hack.portalgui": "ネザーポータルの中にいてもメニューを開けるようになる。", "description.wurst.hack.potionsaver": "静止中にすべてのポーションの効果を停止させる。", "description.wurst.hack.prophuntesp": "Prophuntで偽物のブロックを見破ることができる。\nMineplexサーバーのミニゲーム「Prophunt」用。他サーバーでは動作しない可能性あり。", @@ -187,5 +191,6 @@ "button.wurst.nochatreports.signatures_status": "署名: ", "description.wurst.nochatreports.message_is_reportable": "このメッセージには有効な署名があるため、不正なチャット レポートに対して脆弱です。", "gui.wurst.generic.allcaps_blocked": "ブロックされました", - "gui.wurst.generic.allcaps_allowed": "許可された" -} + "gui.wurst.generic.allcaps_allowed": "許可された", + "key.wurst.zoom": "拡大" +} \ No newline at end of file From d5d5693d434801ce8e8d5a81a4a2b99ab06ef8fa Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 16 Jun 2024 16:58:04 +0200 Subject: [PATCH 021/109] Add translation keys for simple filter descriptions Does not include descriptions that are assembled from multiple strings, as translating those wouldn't work with the current translation code. --- .../filterlists/FollowFilterList.java | 60 ++++++++--------- .../filterlists/RemoteViewFilterList.java | 49 +++++++------- .../settings/filters/FilterAllaysSetting.java | 6 +- .../filters/FilterArmorStandsSetting.java | 6 +- .../settings/filters/FilterBatsSetting.java | 8 +-- .../filters/FilterCrystalsSetting.java | 4 +- .../filters/FilterEndermenSetting.java | 19 ++---- .../settings/filters/FilterFlyingSetting.java | 4 +- .../settings/filters/FilterGolemsSetting.java | 4 +- .../filters/FilterInvisibleSetting.java | 6 +- .../settings/filters/FilterNamedSetting.java | 8 +-- .../filters/FilterNeutralSetting.java | 20 ++---- .../settings/filters/FilterPetsSetting.java | 4 +- .../filters/FilterPlayersSetting.java | 6 +- .../filters/FilterShulkerBulletSetting.java | 3 +- .../filters/FilterShulkersSetting.java | 8 ++- .../filters/FilterSleepingSetting.java | 9 +-- .../filters/FilterVillagersSetting.java | 6 +- .../filters/FilterZombiePiglinsSetting.java | 20 ++---- .../filters/FilterZombieVillagersSetting.java | 6 +- .../resources/assets/wurst/lang/en_us.json | 64 +++++++++++++++++++ 21 files changed, 192 insertions(+), 128 deletions(-) diff --git a/src/main/java/net/wurstclient/settings/filterlists/FollowFilterList.java b/src/main/java/net/wurstclient/settings/filterlists/FollowFilterList.java index 02618d1a..c27c0750 100644 --- a/src/main/java/net/wurstclient/settings/filterlists/FollowFilterList.java +++ b/src/main/java/net/wurstclient/settings/filterlists/FollowFilterList.java @@ -23,70 +23,72 @@ public final class FollowFilterList extends EntityFilterList { ArrayList builder = new ArrayList<>(); - builder.add( - new FilterPlayersSetting("Won't follow other players.", false)); + builder.add(new FilterPlayersSetting( + "description.wurst.setting.follow.filter_players", false)); - builder.add( - new FilterSleepingSetting("Won't follow sleeping players.", false)); + builder.add(new FilterSleepingSetting( + "description.wurst.setting.follow.filter_sleeping", false)); builder.add(new FilterFlyingSetting( - "Won't follow players that are at least the given distance above ground.", - 0)); + "description.wurst.setting.follow.filter_flying", 0)); builder.add(new FilterHostileSetting( "Won't follow hostile mobs like zombies and creepers.", true)); builder.add(FilterNeutralSetting.onOffOnly( - "Won't follow neutral mobs like endermen and wolves.", true)); + "description.wurst.setting.follow.filter_neutral", true)); - builder.add(new FilterPassiveSetting("Won't follow animals like pigs" - + " and cows, ambient mobs like bats, and water mobs like" - + " fish, squid and dolphins.", true)); + builder.add(new FilterPassiveSetting( + "Won't follow animals like pigs and cows, ambient mobs like bats, and water mobs like fish, squid and dolphins.", + true)); - builder.add(new FilterPassiveWaterSetting("Won't follow passive water" - + " mobs like fish, squid, dolphins and axolotls.", true)); + builder.add(new FilterPassiveWaterSetting( + "Won't follow passive water mobs like fish, squid, dolphins and axolotls.", + true)); builder.add(new FilterBabiesSetting( "Won't follow baby pigs, baby villagers, etc.", true)); - builder.add(new FilterBatsSetting("Won't follow bats and any other" - + " \"ambient\" mobs that might be added by mods.", true)); + builder.add(new FilterBatsSetting( + "description.wurst.setting.follow.filter_bats", true)); builder.add(new FilterSlimesSetting("Won't follow slimes.", true)); builder.add(new FilterPetsSetting( - "Won't follow tamed wolves, tamed horses, etc.", true)); + "description.wurst.setting.follow.filter_pets", true)); builder.add(new FilterVillagersSetting( - "Won't follow villagers and wandering traders.", true)); + "description.wurst.setting.follow.filter_villagers", true)); builder.add(new FilterZombieVillagersSetting( - "Won't follow zombified villagers.", true)); + "description.wurst.setting.follow.filter_zombie_villagers", true)); builder.add(new FilterGolemsSetting( - "Won't follow iron golems and snow golems.", true)); + "description.wurst.setting.follow.filter_golems", true)); builder .add(FilterPiglinsSetting.onOffOnly("Won't follow piglins.", true)); - builder.add(FilterZombiePiglinsSetting - .onOffOnly("Won't follow zombified piglins.", true)); + builder.add(FilterZombiePiglinsSetting.onOffOnly( + "description.wurst.setting.follow.filter_zombie_piglins", true)); - builder.add( - FilterEndermenSetting.onOffOnly("Won't follow endermen.", true)); + builder.add(FilterEndermenSetting.onOffOnly( + "description.wurst.setting.follow.filter_endermen", true)); - builder.add(new FilterShulkersSetting("Won't follow shulkers.", true)); + builder.add(new FilterShulkersSetting( + "description.wurst.setting.follow.filter_shulkers", true)); - builder.add(new FilterAllaysSetting("Won't follow allays.", true)); + builder.add(new FilterAllaysSetting( + "description.wurst.setting.follow.filter_allays", true)); builder.add(new FilterInvisibleSetting( - "Won't follow invisible entities.", false)); + "description.wurst.setting.follow.filter_invisible", false)); - builder.add( - new FilterArmorStandsSetting("Won't follow armor stands.", true)); + builder.add(new FilterArmorStandsSetting( + "description.wurst.setting.follow.filter_armor_stands", true)); - builder - .add(new FilterMinecartsSetting("Won't follow minecarts.", true)); + builder.add(new FilterMinecartsSetting( + "description.wurst.setting.follow.filter_minecarts", true)); return new FollowFilterList(builder); } diff --git a/src/main/java/net/wurstclient/settings/filterlists/RemoteViewFilterList.java b/src/main/java/net/wurstclient/settings/filterlists/RemoteViewFilterList.java index e56fd603..372b0b92 100644 --- a/src/main/java/net/wurstclient/settings/filterlists/RemoteViewFilterList.java +++ b/src/main/java/net/wurstclient/settings/filterlists/RemoteViewFilterList.java @@ -23,21 +23,20 @@ public final class RemoteViewFilterList extends EntityFilterList { ArrayList builder = new ArrayList<>(); - builder - .add(new FilterPlayersSetting("Won't view other players.", false)); + builder.add(new FilterPlayersSetting( + "description.wurst.setting.remoteview.filter_players", false)); - builder.add( - new FilterSleepingSetting("Won't view sleeping players.", false)); + builder.add(new FilterSleepingSetting( + "description.wurst.setting.remoteview.filter_sleeping", false)); builder.add(new FilterFlyingSetting( - "Won't view players that are at least the given distance above ground.", - 0)); + "description.wurst.setting.remoteview.filter_flying", 0)); builder.add(new FilterHostileSetting( "Won't view hostile mobs like zombies and creepers.", true)); builder.add(FilterNeutralSetting.onOffOnly( - "Won't view neutral mobs like endermen and wolves.", true)); + "description.wurst.setting.remoteview.filter_neutral", true)); builder.add(new FilterPassiveSetting("Won't view animals like pigs and" + " cows, ambient mobs like bats, and water mobs like fish, squid" @@ -49,41 +48,45 @@ public final class RemoteViewFilterList extends EntityFilterList builder.add(new FilterBabiesSetting( "Won't view baby pigs, baby villagers, etc.", true)); - builder.add(new FilterBatsSetting("Won't view bats and any other" - + " \"ambient\" mobs that might be added by mods.", true)); + builder.add(new FilterBatsSetting( + "description.wurst.setting.remoteview.filter_bats", true)); builder.add(new FilterSlimesSetting("Won't view slimes.", true)); builder.add(new FilterPetsSetting( - "Won't view tamed wolves, tamed horses, etc.", true)); + "description.wurst.setting.remoteview.filter_pets", true)); builder.add(new FilterVillagersSetting( - "Won't view villagers and wandering traders.", true)); + "description.wurst.setting.remoteview.filter_villagers", true)); builder.add(new FilterZombieVillagersSetting( - "Won't view zombified villagers.", true)); + "description.wurst.setting.remoteview.filter_zombie_villagers", + true)); builder.add(new FilterGolemsSetting( - "Won't view iron golems and snow golems.", true)); + "description.wurst.setting.remoteview.filter_golems", true)); builder .add(FilterPiglinsSetting.onOffOnly("Won't view piglins.", true)); - builder.add(FilterZombiePiglinsSetting - .onOffOnly("Won't view zombified piglins.", true)); + builder.add(FilterZombiePiglinsSetting.onOffOnly( + "description.wurst.setting.remoteview.filter_zombie_piglins", + true)); - builder - .add(FilterEndermenSetting.onOffOnly("Won't view endermen.", true)); + builder.add(FilterEndermenSetting.onOffOnly( + "description.wurst.setting.remoteview.filter_endermen", true)); - builder.add(new FilterShulkersSetting("Won't view shulkers.", true)); + builder.add(new FilterShulkersSetting( + "description.wurst.setting.remoteview.filter_shulkers", true)); - builder.add(new FilterAllaysSetting("Won't view allays.", true)); + builder.add(new FilterAllaysSetting( + "description.wurst.setting.remoteview.filter_allays", true)); - builder.add(new FilterInvisibleSetting("Won't view invisible entities.", - false)); + builder.add(new FilterInvisibleSetting( + "description.wurst.setting.remoteview.filter_invisible", false)); - builder.add( - new FilterArmorStandsSetting("Won't view armor stands.", true)); + builder.add(new FilterArmorStandsSetting( + "description.wurst.setting.remoteview.filter_armor_stands", true)); return new RemoteViewFilterList(builder); } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterAllaysSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterAllaysSetting.java index b4e92262..2ac46738 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterAllaysSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterAllaysSetting.java @@ -25,11 +25,13 @@ public final class FilterAllaysSetting extends EntityFilterCheckbox public static FilterAllaysSetting genericCombat(boolean checked) { - return new FilterAllaysSetting("Won't attack allays.", checked); + return new FilterAllaysSetting( + "description.wurst.setting.generic.filter_allays_combat", checked); } public static FilterAllaysSetting genericVision(boolean checked) { - return new FilterAllaysSetting("Won't show allays.", checked); + return new FilterAllaysSetting( + "description.wurst.setting.generic.filter_allays_vision", checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterArmorStandsSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterArmorStandsSetting.java index 2808853b..dddad3ad 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterArmorStandsSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterArmorStandsSetting.java @@ -25,13 +25,15 @@ public final class FilterArmorStandsSetting extends EntityFilterCheckbox public static FilterArmorStandsSetting genericCombat(boolean checked) { - return new FilterArmorStandsSetting("Won't attack armor stands.", + return new FilterArmorStandsSetting( + "description.wurst.setting.generic.filter_armor_stands_combat", checked); } public static FilterArmorStandsSetting genericVision(boolean checked) { - return new FilterArmorStandsSetting("Won't show armor stands.", + return new FilterArmorStandsSetting( + "description.wurst.setting.generic.filter_armor_stands_vision", checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterBatsSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterBatsSetting.java index af859875..c3de7ba1 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterBatsSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterBatsSetting.java @@ -25,13 +25,13 @@ public final class FilterBatsSetting extends EntityFilterCheckbox public static FilterBatsSetting genericCombat(boolean checked) { - return new FilterBatsSetting("Won't attack bats and any other" - + " \"ambient\" mobs that might be added by mods.", checked); + return new FilterBatsSetting( + "description.wurst.setting.generic.filter_bats_combat", checked); } public static FilterBatsSetting genericVision(boolean checked) { - return new FilterBatsSetting("Won't show bats and any other" - + " \"ambient\" mobs that might be added by mods.", checked); + return new FilterBatsSetting( + "description.wurst.setting.generic.filter_bats_vision", checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterCrystalsSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterCrystalsSetting.java index d6a16a9a..201a3d39 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterCrystalsSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterCrystalsSetting.java @@ -25,6 +25,8 @@ public final class FilterCrystalsSetting extends EntityFilterCheckbox public static FilterCrystalsSetting genericCombat(boolean checked) { - return new FilterCrystalsSetting("Won't attack end crystals.", checked); + return new FilterCrystalsSetting( + "description.wurst.setting.generic.filter_crystals_combat", + checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterEndermenSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterEndermenSetting.java index 48ce3fbb..eb21f057 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterEndermenSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterEndermenSetting.java @@ -37,23 +37,16 @@ public final class FilterEndermenSetting extends AttackDetectingEntityFilter public static FilterEndermenSetting genericCombat(Mode selected) { - return new FilterEndermenSetting("When set to \u00a7lOn\u00a7r," - + " endermen won't be attacked at all.\n\n" - + "When set to \u00a7lIf calm\u00a7r, endermen won't be attacked" - + " until they attack first. Be warned that this filter cannot" - + " detect if the endermen are attacking you or someone else.\n\n" - + "When set to \u00a7lOff\u00a7r, this filter does nothing and" - + " endermen can be attacked.", selected); + return new FilterEndermenSetting( + "description.wurst.setting.generic.filter_endermen_combat", + selected); } public static FilterEndermenSetting genericVision(Mode selected) { - return new FilterEndermenSetting("When set to \u00a7lOn\u00a7r," - + " endermen won't be shown at all.\n\n" - + "When set to \u00a7lIf calm\u00a7r, endermen won't be shown" - + " until they attack something.\n\n" - + "When set to \u00a7lOff\u00a7r, this filter does nothing and" - + " endermen can be shown.", selected); + return new FilterEndermenSetting( + "description.wurst.setting.generic.filter_endermen_vision", + selected); } public static FilterEndermenSetting onOffOnly(String description, diff --git a/src/main/java/net/wurstclient/settings/filters/FilterFlyingSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterFlyingSetting.java index 08ccca0b..48f9ea5f 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterFlyingSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterFlyingSetting.java @@ -50,8 +50,6 @@ public final class FilterFlyingSetting extends SliderSetting public static FilterFlyingSetting genericCombat(double value) { return new FilterFlyingSetting( - "Won't attack players that are at least the given distance above ground.\n\n" - + "Useful for servers that try to detect your hacks by placing a flying bot near you.", - value); + "description.wurst.setting.generic.filter_flying_combat", value); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterGolemsSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterGolemsSetting.java index b39ae2c1..1244dba2 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterGolemsSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterGolemsSetting.java @@ -27,12 +27,12 @@ public final class FilterGolemsSetting extends EntityFilterCheckbox public static FilterGolemsSetting genericCombat(boolean checked) { return new FilterGolemsSetting( - "Won't attack iron golems and snow golems.", checked); + "description.wurst.setting.generic.filter_golems_combat", checked); } public static FilterGolemsSetting genericVision(boolean checked) { return new FilterGolemsSetting( - "Won't show iron golems and snow golems.", checked); + "description.wurst.setting.generic.filter_golems_vision", checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterInvisibleSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterInvisibleSetting.java index 3bd52373..71b738a5 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterInvisibleSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterInvisibleSetting.java @@ -24,13 +24,15 @@ public final class FilterInvisibleSetting extends EntityFilterCheckbox public static FilterInvisibleSetting genericCombat(boolean checked) { - return new FilterInvisibleSetting("Won't attack invisible entities.", + return new FilterInvisibleSetting( + "description.wurst.setting.generic.filter_invisible_combat", checked); } public static FilterInvisibleSetting genericVision(boolean checked) { - return new FilterInvisibleSetting("Won't show invisible entities.", + return new FilterInvisibleSetting( + "description.wurst.setting.generic.filter_invisible_vision", checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterNamedSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterNamedSetting.java index 616ff961..23244320 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterNamedSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterNamedSetting.java @@ -24,13 +24,13 @@ public final class FilterNamedSetting extends EntityFilterCheckbox public static FilterNamedSetting genericCombat(boolean checked) { - return new FilterNamedSetting("Won't attack name-tagged entities.", - checked); + return new FilterNamedSetting( + "description.wurst.setting.generic.filter_named_combat", checked); } public static FilterNamedSetting genericVision(boolean checked) { - return new FilterNamedSetting("Won't show name-tagged entities.", - checked); + return new FilterNamedSetting( + "description.wurst.setting.generic.filter_named_vision", checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterNeutralSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterNeutralSetting.java index 58626d06..3e3a6cc0 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterNeutralSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterNeutralSetting.java @@ -49,24 +49,16 @@ public final class FilterNeutralSetting extends AttackDetectingEntityFilter public static FilterNeutralSetting genericCombat(Mode selected) { - return new FilterNeutralSetting("When set to \u00a7lOn\u00a7r," - + " neutral mobs won't be attacked at all.\n\n" - + "When set to \u00a7lIf calm\u00a7r, neutral mobs won't be" - + " attacked until they attack first. Be warned that this filter" - + " cannot detect if the neutral mobs are attacking you or someone" - + " else.\n\n" - + "When set to \u00a7lOff\u00a7r, this filter does nothing and" - + " neutral mobs can be attacked.", selected); + return new FilterNeutralSetting( + "description.wurst.setting.generic.filter_neutral_combat", + selected); } public static FilterNeutralSetting genericVision(Mode selected) { - return new FilterNeutralSetting("When set to \u00a7lOn\u00a7r," - + " neutral mobs won't be shown at all.\n\n" - + "When set to \u00a7lIf calm\u00a7r, neutral mobs won't be shown" - + " until they attack something.\n\n" - + "When set to \u00a7lOff\u00a7r, this filter does nothing and" - + " neutral mobs can be shown.", selected); + return new FilterNeutralSetting( + "description.wurst.setting.generic.filter_neutral_vision", + selected); } public static FilterNeutralSetting onOffOnly(String description, diff --git a/src/main/java/net/wurstclient/settings/filters/FilterPetsSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterPetsSetting.java index 84617917..2614b88f 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterPetsSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterPetsSetting.java @@ -29,12 +29,12 @@ public final class FilterPetsSetting extends EntityFilterCheckbox public static FilterPetsSetting genericCombat(boolean checked) { return new FilterPetsSetting( - "Won't attack tamed wolves, tamed horses, etc.", checked); + "description.wurst.setting.generic.filter_pets_combat", checked); } public static FilterPetsSetting genericVision(boolean checked) { return new FilterPetsSetting( - "Won't show tamed wolves, tamed horses, etc.", checked); + "description.wurst.setting.generic.filter_pets_vision", checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterPlayersSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterPlayersSetting.java index 1f7795d2..c356fe2a 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterPlayersSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterPlayersSetting.java @@ -25,11 +25,13 @@ public final class FilterPlayersSetting extends EntityFilterCheckbox public static FilterPlayersSetting genericCombat(boolean checked) { - return new FilterPlayersSetting("Won't attack other players.", checked); + return new FilterPlayersSetting( + "description.wurst.setting.generic.filter_players_combat", checked); } public static FilterPlayersSetting genericVision(boolean checked) { - return new FilterPlayersSetting("Won't show other players.", checked); + return new FilterPlayersSetting( + "description.wurst.setting.generic.filter_players_vision", checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterShulkerBulletSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterShulkerBulletSetting.java index 1aa6c45f..23c8202d 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterShulkerBulletSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterShulkerBulletSetting.java @@ -25,7 +25,8 @@ public final class FilterShulkerBulletSetting extends EntityFilterCheckbox public static FilterShulkerBulletSetting genericCombat(boolean checked) { - return new FilterShulkerBulletSetting("Won't attack shulker bullets.", + return new FilterShulkerBulletSetting( + "description.wurst.setting.generic.filter_shulker_bullets_combat", checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterShulkersSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterShulkersSetting.java index 7e97cc5d..5d118ddc 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterShulkersSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterShulkersSetting.java @@ -25,11 +25,15 @@ public final class FilterShulkersSetting extends EntityFilterCheckbox public static FilterShulkersSetting genericCombat(boolean checked) { - return new FilterShulkersSetting("Won't attack shulkers.", checked); + return new FilterShulkersSetting( + "description.wurst.setting.generic.filter_shulkers_combat", + checked); } public static FilterShulkersSetting genericVision(boolean checked) { - return new FilterShulkersSetting("Won't show shulkers.", checked); + return new FilterShulkersSetting( + "description.wurst.setting.generic.filter_shulkers_vision", + checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterSleepingSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterSleepingSetting.java index b4cf1926..9bee64f6 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterSleepingSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterSleepingSetting.java @@ -29,14 +29,15 @@ public final class FilterSleepingSetting extends EntityFilterCheckbox public static FilterSleepingSetting genericCombat(boolean checked) { - return new FilterSleepingSetting("Won't attack sleeping players.\n\n" - + "Useful for servers like Mineplex that place sleeping players on" - + " the ground to make them look like corpses.", checked); + return new FilterSleepingSetting( + "description.wurst.setting.generic.filter_sleeping_combat", + checked); } public static FilterSleepingSetting genericVision(boolean checked) { - return new FilterSleepingSetting("Won't show sleeping players.", + return new FilterSleepingSetting( + "description.wurst.setting.generic.filter_sleeping_vision", checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterVillagersSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterVillagersSetting.java index 3df46ee3..96f7d454 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterVillagersSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterVillagersSetting.java @@ -26,12 +26,14 @@ public final class FilterVillagersSetting extends EntityFilterCheckbox public static FilterVillagersSetting genericCombat(boolean checked) { return new FilterVillagersSetting( - "Won't attack villagers and wandering traders.", checked); + "description.wurst.setting.generic.filter_villagers_combat", + checked); } public static FilterVillagersSetting genericVision(boolean checked) { return new FilterVillagersSetting( - "Won't show villagers and wandering traders.", checked); + "description.wurst.setting.generic.filter_villagers_vision", + checked); } } diff --git a/src/main/java/net/wurstclient/settings/filters/FilterZombiePiglinsSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterZombiePiglinsSetting.java index 80ec7dfe..eb0f4f25 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterZombiePiglinsSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterZombiePiglinsSetting.java @@ -38,24 +38,16 @@ public final class FilterZombiePiglinsSetting public static FilterZombiePiglinsSetting genericCombat(Mode selected) { - return new FilterZombiePiglinsSetting("When set to \u00a7lOn\u00a7r," - + " zombified piglins won't be attacked at all.\n\n" - + "When set to \u00a7lIf calm\u00a7r, zombified piglins won't be" - + " attacked until they attack first. Be warned that this filter" - + " cannot detect if the zombified piglins are attacking you or" - + " someone else.\n\n" - + "When set to \u00a7lOff\u00a7r, this filter does nothing and" - + " zombified piglins can be attacked.", selected); + return new FilterZombiePiglinsSetting( + "description.wurst.setting.generic.filter_zombie_piglins_combat", + selected); } public static FilterZombiePiglinsSetting genericVision(Mode selected) { - return new FilterZombiePiglinsSetting("When set to \u00a7lOn\u00a7r," - + " zombified piglins won't be shown at all.\n\n" - + "When set to \u00a7lIf calm\u00a7r, zombified piglins won't be" - + " shown until they attack something.\n\n" - + "When set to \u00a7lOff\u00a7r, this filter does nothing and" - + " zombified piglins can be shown.", selected); + return new FilterZombiePiglinsSetting( + "description.wurst.setting.generic.filter_zombie_piglins_vision", + selected); } public static FilterZombiePiglinsSetting onOffOnly(String description, diff --git a/src/main/java/net/wurstclient/settings/filters/FilterZombieVillagersSetting.java b/src/main/java/net/wurstclient/settings/filters/FilterZombieVillagersSetting.java index 493bc8a5..1332d6de 100644 --- a/src/main/java/net/wurstclient/settings/filters/FilterZombieVillagersSetting.java +++ b/src/main/java/net/wurstclient/settings/filters/FilterZombieVillagersSetting.java @@ -26,12 +26,14 @@ public final class FilterZombieVillagersSetting extends EntityFilterCheckbox public static FilterZombieVillagersSetting genericCombat(boolean checked) { return new FilterZombieVillagersSetting( - "Won't attack zombified villagers.", checked); + "description.wurst.setting.generic.filter_zombie_villagers_combat", + checked); } public static FilterZombieVillagersSetting genericVision(boolean checked) { return new FilterZombieVillagersSetting( - "Won't show zombified villagers.", checked); + "description.wurst.setting.generic.filter_zombie_villagers_vision", + checked); } } diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index 62e86971..a06ccb54 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -78,6 +78,22 @@ "description.wurst.hack.fish": "Disables underwater gravity so you can swim like a fish.", "description.wurst.hack.flight": "Allows you to fly.\n\n§c§lWARNING:§r You will take fall damage if you don't use NoFall.", "description.wurst.hack.follow": "A bot that follows the closest entity.\nVery annoying.\n\nUse .follow to follow a specific entity.", + "description.wurst.setting.follow.filter_players": "Won't follow other players.", + "description.wurst.setting.follow.filter_sleeping": "Won't follow sleeping players.", + "description.wurst.setting.follow.filter_flying": "Won't follow players that are at least the given distance above ground.", + "description.wurst.setting.follow.filter_neutral": "Won't follow neutral mobs like endermen and wolves.", + "description.wurst.setting.follow.filter_bats": "Won't follow bats and any other \"ambient\" mobs that might be added by mods.", + "description.wurst.setting.follow.filter_pets": "Won't follow tamed wolves, tamed horses, etc.", + "description.wurst.setting.follow.filter_villagers": "Won't follow villagers and wandering traders.", + "description.wurst.setting.follow.filter_zombie_villagers": "Won't follow zombified villagers.", + "description.wurst.setting.follow.filter_golems": "Won't follow iron golems and snow golems.", + "description.wurst.setting.follow.filter_zombie_piglins": "Won't follow zombified piglins.", + "description.wurst.setting.follow.filter_endermen": "Won't follow endermen.", + "description.wurst.setting.follow.filter_shulkers": "Won't follow shulkers.", + "description.wurst.setting.follow.filter_allays": "Won't follow allays.", + "description.wurst.setting.follow.filter_invisible": "Won't follow invisible entities.", + "description.wurst.setting.follow.filter_armor_stands": "Won't follow armor stands.", + "description.wurst.setting.follow.filter_minecarts": "Won't follow minecarts.", "description.wurst.hack.forceop": "Cracks AuthMe passwords.\nCan be used to get OP.", "description.wurst.hack.freecam": "Allows you to move the camera without moving your character.", "description.wurst.hack.fullbright": "Allows you to see in the dark.", @@ -140,6 +156,21 @@ "description.wurst.hack.rainbowui": "§cM§aa§9k§ce§as §9e§cv§ae§9r§cy§at§9h§ci§an§9g §cc§ao§9l§co§ar§9f§cu§al§9.", "description.wurst.hack.reach": "Allows you to reach further.", "description.wurst.hack.remoteview": "Allows you to see the world as someone else.\nUse the .rv command to make it target a specific entity.", + "description.wurst.setting.remoteview.filter_players": "Won't view other players.", + "description.wurst.setting.remoteview.filter_sleeping": "Won't view sleeping players.", + "description.wurst.setting.remoteview.filter_flying": "Won't view players that are at least the given distance above ground.", + "description.wurst.setting.remoteview.filter_neutral": "Won't view neutral mobs like endermen and wolves.", + "description.wurst.setting.remoteview.filter_bats": "Won't view bats and any other \"ambient\" mobs that might be added by mods.", + "description.wurst.setting.remoteview.filter_pets": "Won't view tamed wolves, tamed horses, etc.", + "description.wurst.setting.remoteview.filter_villagers": "Won't view villagers and wandering traders.", + "description.wurst.setting.remoteview.filter_zombie_villagers": "Won't view zombified villagers.", + "description.wurst.setting.remoteview.filter_golems": "Won't view iron golems and snow golems.", + "description.wurst.setting.remoteview.filter_zombie_piglins": "Won't view zombified piglins.", + "description.wurst.setting.remoteview.filter_endermen": "Won't view endermen.", + "description.wurst.setting.remoteview.filter_shulkers": "Won't view shulkers.", + "description.wurst.setting.remoteview.filter_allays": "Won't view allays.", + "description.wurst.setting.remoteview.filter_invisible": "Won't view invisible entities.", + "description.wurst.setting.remoteview.filter_armor_stands": "Won't view armor stands.", "description.wurst.hack.restock": "Automatically restocks your hand with the selected items from your inventory. Works better with FastPlace.", "description.wurst.hack.safewalk": "Prevents you from falling off edges.", "description.wurst.hack.scaffoldwalk": "Automatically places blocks below your feet.", @@ -168,6 +199,39 @@ "button.wurst.nochatreports.disable_signatures": "Disable Signatures", "button.wurst.nochatreports.re-enable_signatures": "Re-enable Signatures", "description.wurst.setting.generic.attack_speed": "Attack speed in clicks per second.\n0 = dynamically adjusts the speed to match your attack cooldown.", + "description.wurst.setting.generic.filter_allays_combat": "Won't attack allays.", + "description.wurst.setting.generic.filter_allays_vision": "Won't show allays.", + "description.wurst.setting.generic.filter_armor_stands_combat": "Won't attack armor stands.", + "description.wurst.setting.generic.filter_armor_stands_vision": "Won't show armor stands.", + "description.wurst.setting.generic.filter_bats_combat": "Won't attack bats and any other \"ambient\" mobs that might be added by mods.", + "description.wurst.setting.generic.filter_bats_vision": "Won't show bats and any other \"ambient\" mobs that might be added by mods.", + "description.wurst.setting.generic.filter_crystals_combat": "Won't attack end crystals.", + "description.wurst.setting.generic.filter_endermen_combat": "When set to §lOn§r, endermen won't be attacked at all.\n\nWhen set to §lIf calm§r, endermen won't be attacked until they attack first. Be warned that this filter cannot detect if the endermen are attacking you or someone else.\n\nWhen set to §lOff§r, this filter does nothing and endermen can be attacked.", + "description.wurst.setting.generic.filter_endermen_vision": "When set to §lOn§r, endermen won't be shown at all.\n\nWhen set to §lIf calm§r, endermen won't be shown until they attack something.\n\nWhen set to §lOff§r, this filter does nothing and endermen can be shown.", + "description.wurst.setting.generic.filter_flying_combat": "Won't attack players that are at least the given distance above ground.\n\nUseful for servers that try to detect your hacks by placing a flying bot near you.", + "description.wurst.setting.generic.filter_golems_combat": "Won't attack iron golems and snow golems.", + "description.wurst.setting.generic.filter_golems_vision": "Won't show iron golems and snow golems.", + "description.wurst.setting.generic.filter_invisible_combat": "Won't attack invisible entities.", + "description.wurst.setting.generic.filter_invisible_vision": "Won't show invisible entities.", + "description.wurst.setting.generic.filter_named_combat": "Won't attack name-tagged entities.", + "description.wurst.setting.generic.filter_named_vision": "Won't show name-tagged entities.", + "description.wurst.setting.generic.filter_neutral_combat": "When set to §lOn§r, neutral mobs won't be attacked at all.\n\nWhen set to §lIf calm§r, neutral mobs won't be attacked until they attack first. Be warned that this filter cannot detect if the neutral mobs are attacking you or someone else.\n\nWhen set to §lOff§r, this filter does nothing and neutral mobs can be attacked.", + "description.wurst.setting.generic.filter_neutral_vision": "When set to §lOn§r, neutral mobs won't be shown at all.\n\nWhen set to §lIf calm§r, neutral mobs won't be shown until they attack something.\n\nWhen set to §lOff§r, this filter does nothing and neutral mobs can be shown.", + "description.wurst.setting.generic.filter_pets_combat": "Won't attack tamed wolves, tamed horses, etc.", + "description.wurst.setting.generic.filter_pets_vision": "Won't show tamed wolves, tamed horses, etc.", + "description.wurst.setting.generic.filter_players_combat": "Won't attack other players.", + "description.wurst.setting.generic.filter_players_vision": "Won't show other players.", + "description.wurst.setting.generic.filter_shulker_bullets_combat": "Won't attack shulker bullets.", + "description.wurst.setting.generic.filter_shulkers_combat": "Won't attack shulkers.", + "description.wurst.setting.generic.filter_shulkers_vision": "Won't show shulkers.", + "description.wurst.setting.generic.filter_sleeping_combat": "Won't attack sleeping players.\n\nUseful for servers like Mineplex that place sleeping players on the ground to make them look like corpses.", + "description.wurst.setting.generic.filter_sleeping_vision": "Won't show sleeping players.", + "description.wurst.setting.generic.filter_villagers_combat": "Won't attack villagers and wandering traders.", + "description.wurst.setting.generic.filter_villagers_vision": "Won't show villagers and wandering traders.", + "description.wurst.setting.generic.filter_zombie_piglins_combat": "When set to §lOn§r, zombified piglins won't be attacked at all.\n\nWhen set to §lIf calm§r, zombified piglins won't be attacked until they attack first. Be warned that this filter cannot detect if the zombified piglins are attacking you or someone else.\n\nWhen set to §lOff§r, this filter does nothing and zombified piglins can be attacked.", + "description.wurst.setting.generic.filter_zombie_piglins_vision": "When set to §lOn§r, zombified piglins won't be shown at all.\n\nWhen set to §lIf calm§r, zombified piglins won't be shown until they attack something.\n\nWhen set to §lOff§r, this filter does nothing and zombified piglins can be shown.", + "description.wurst.setting.generic.filter_zombie_villagers_combat": "Won't attack zombified villagers.", + "description.wurst.setting.generic.filter_zombie_villagers_vision": "Won't show zombified villagers.", "description.wurst.setting.generic.pause_attack_on_containers": "Won't attack while a container screen (chest, hopper, etc.) is open.\nUseful for minigame servers that display chest-like menus.", "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.", From 17983ac9dd2e89b1a745887602fbd4ca06db263d Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 16 Jun 2024 17:42:51 +0200 Subject: [PATCH 022/109] Fix player nametags not rendering correctly in 1.21 Fixes #1009 --- .../net/wurstclient/mixin/EntityRendererMixin.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/wurstclient/mixin/EntityRendererMixin.java b/src/main/java/net/wurstclient/mixin/EntityRendererMixin.java index 3b6e050e..a87533d6 100644 --- a/src/main/java/net/wurstclient/mixin/EntityRendererMixin.java +++ b/src/main/java/net/wurstclient/mixin/EntityRendererMixin.java @@ -22,8 +22,10 @@ import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAttachmentType; import net.minecraft.entity.LivingEntity; import net.minecraft.text.Text; +import net.minecraft.util.math.Vec3d; import net.wurstclient.WurstClient; import net.wurstclient.hacks.NameTagsHack; @@ -67,14 +69,19 @@ public abstract class EntityRendererMixin if(distanceSq > 4096 && !nameTags.isUnlimitedRange()) return; + // get attachment point + Vec3d attVec = entity.getAttachments().getPointNullable( + EntityAttachmentType.NAME_TAG, 0, entity.getYaw(tickDelta)); + if(attVec == null) + return; + // disable sneaking changes if NameTags is enabled boolean notSneaky = !entity.isSneaky() || nameTags.isEnabled(); - float matrixY = entity.getHeight() + 0.5F; int labelY = "deadmau5".equals(text.getString()) ? -10 : 0; matrices.push(); - matrices.translate(0, matrixY, 0); + matrices.translate(attVec.x, attVec.y + 0.5, attVec.z); matrices.multiply(dispatcher.getRotation()); // adjust scale if NameTags is enabled @@ -85,7 +92,7 @@ public abstract class EntityRendererMixin if(distance > 10) scale *= distance / 10; } - matrices.scale(-scale, -scale, scale); + matrices.scale(scale, -scale, scale); Matrix4f matrix = matrices.peek().getPositionMatrix(); float bgOpacity = From 3dc98dd34b971a8afbfbba2c9b116c019934c283 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 16 Jun 2024 17:43:21 +0200 Subject: [PATCH 023/109] Change version to 7.43.1 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 112e029f..49f8a5c7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version=0.15.11 fabric_version=0.100.1+1.21 # Mod Properties -mod_version = v7.43-MC1.21 +mod_version = v7.43.1-MC1.21 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 1a313fec..721f660f 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -58,7 +58,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.43"; + public static final String VERSION = "7.43.1"; public static final String MC_VERSION = "1.21"; private WurstAnalytics analytics; From 287077512b04d01cb5f26acf32fa7763b568165f Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 16 Jun 2024 17:44:23 +0200 Subject: [PATCH 024/109] Change version to 7.44pre1 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 49f8a5c7..8156c726 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version=0.15.11 fabric_version=0.100.1+1.21 # Mod Properties -mod_version = v7.43.1-MC1.21 +mod_version = v7.44pre1-MC1.21 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 721f660f..7f8264a5 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -58,7 +58,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.43.1"; + public static final String VERSION = "7.44pre1"; public static final String MC_VERSION = "1.21"; private WurstAnalytics analytics; From 251f53a83d9d8f0a771969facb8715d6cb94f487 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 16 Jun 2024 21:04:39 +0200 Subject: [PATCH 025/109] Fix crash when pressing escape on a server that uses server links --- .../java/net/wurstclient/mixin/GameMenuScreenMixin.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java b/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java index c21da6bf..864850be 100644 --- a/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java +++ b/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java @@ -124,12 +124,14 @@ public abstract class GameMenuScreenMixin extends Screen private boolean isFeedbackButton(ClickableWidget button) { - return hasTrKey(button, "menu.sendFeedback"); + return hasTrKey(button, "menu.sendFeedback") + || hasTrKey(button, "menu.feedback"); } private boolean isBugReportButton(ClickableWidget button) { - return hasTrKey(button, "menu.reportBugs"); + return hasTrKey(button, "menu.reportBugs") + || hasTrKey(button, "menu.server_links"); } private boolean hasTrKey(ClickableWidget button, String key) From d145bc1c150d2de20c720063061a74f4a6729f00 Mon Sep 17 00:00:00 2001 From: CureSaba <94890302+CureSaba@users.noreply.github.com> Date: Mon, 17 Jun 2024 08:54:18 +0900 Subject: [PATCH 026/109] Update ja_jp.json --- src/main/resources/assets/wurst/lang/ja_jp.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/resources/assets/wurst/lang/ja_jp.json b/src/main/resources/assets/wurst/lang/ja_jp.json index e6f257fa..209485d9 100644 --- a/src/main/resources/assets/wurst/lang/ja_jp.json +++ b/src/main/resources/assets/wurst/lang/ja_jp.json @@ -78,6 +78,22 @@ "description.wurst.hack.fish": "水中の重力を無効化し、魚のように泳ぐことができる。", "description.wurst.hack.flight": "飛行が可能になる。\n\n§c§l注意: §rNoFallと併用しない場合、落下ダメージが発生する。", "description.wurst.hack.follow": "自動で最も近いエンティティを追跡し続ける。\n非常に迷惑。\n\n.follow で特定のエンティティの追跡が可能。", + "description.wurst.setting.follow.filter_players": "他のプレイヤーをフォローしない。", + "description.wurst.setting.follow.filter_sleeping": "寝ているプレイヤーをフォローしない。", + "description.wurst.setting.follow.filter_flying": "地上から指定距離以上離れているプレイヤーをフォローしない。", + "description.wurst.setting.follow.filter_neutral": "エンダーマンや狼のような中立のモブをフォローしない。", + "description.wurst.setting.follow.filter_bats": "MODで追加されるかもしれない\"コウモリ\"や他のモブをフォローしない。", + "description.wurst.setting.follow.filter_pets": "飼いならされたオオカミや飼いならされた馬などをフォローしない。", + "description.wurst.setting.follow.filter_villagers": "村人や行商人などをフォローしない。", + "description.wurst.setting.follow.filter_zombie_villagers": "村人ゾンビをフォローしない。", + "description.wurst.setting.follow.filter_golems": "アイアンゴーレムとスノーゴーレムをフォローしない。", + "description.wurst.setting.follow.filter_zombie_piglins": "ゾンビピグリンをフォローしない。", + "description.wurst.setting.follow.filter_endermen": "エンダーマンをフォローしない。", + "description.wurst.setting.follow.filter_shulkers": "シュルカーをフォローしない。", + "description.wurst.setting.follow.filter_allays": "アレイをフォローしない。", + "description.wurst.setting.follow.filter_invisible": "見えないエンティティをフォローしない。", + "description.wurst.setting.follow.filter_armor_stands": "防具立てをフォローしない。", + "description.wurst.setting.follow.filter_minecarts": "トロッコをフォローしない。", "description.wurst.hack.forceop": "AuthMeと呼ばれるPluginにおいて、パスワードの総当たりを行うことができる。\nOP権限を取得するために使用できる。", "description.wurst.hack.freecam": "キャラクターを動かすことなくカメラを動かすことができる。", "description.wurst.hack.fullbright": "暗い場所での視認性を高める。", From c03cf8ef28e839b2eb22e02e1e79b85a7b7549ac Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 17 Jun 2024 12:55:30 +0200 Subject: [PATCH 027/109] Fix another NewChunks crash --- .../wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java index beaa1674..9b3bb446 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksReasonsRenderer.java @@ -40,7 +40,7 @@ public final class NewChunksReasonsRenderer BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); renderBlocks(new ArrayList<>(reasons), bufferBuilder); - return bufferBuilder.end(); + return bufferBuilder.endNullable(); } private void renderBlocks(List blocks, From c3d4bbf4a238ee1cd481370f4b2ec9fe65540d46 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 17 Jun 2024 15:06:19 +0200 Subject: [PATCH 028/109] Update build.gradle --- build.gradle | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 0b10ef1a..6e7e5077 100644 --- a/build.gradle +++ b/build.gradle @@ -11,13 +11,13 @@ plugins { def ENV = System.getenv() -sourceCompatibility = JavaVersion.VERSION_21 -targetCompatibility = JavaVersion.VERSION_21 - -archivesBaseName = project.archives_base_name version = project.mod_version group = project.maven_group +base { + archivesName = project.archives_base_name +} + repositories { // Add repositories to retrieve artifacts from in here. // You should only use this when depending on other mods because @@ -31,7 +31,7 @@ dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - + // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" @@ -66,11 +66,14 @@ java { // if it is present. // If you remove this line, sources will not be generated. withSourcesJar() + + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } jar { from("LICENSE") { - rename { "${it}_${project.archivesBaseName}"} + rename { "${it}_${project.base.archivesName.get()}"} } } @@ -86,8 +89,9 @@ spotless { task moveDevLibs(dependsOn: [remapJar, remapSourcesJar]) { doLast { - ant.move(file:"${project.buildDir}/devlibs/${archivesBaseName}-${version}-dev.jar", tofile:"${project.buildDir}/libs/${archivesBaseName}-${version}-dev.jar") - ant.move(file:"${project.buildDir}/devlibs/${archivesBaseName}-${version}-sources.jar", tofile:"${project.buildDir}/libs/${archivesBaseName}-${version}-sources-dev.jar") + def archivesName = project.base.archivesName.get() as String + ant.move(file:"${project.buildDir}/devlibs/${archivesName}-${version}-dev.jar", tofile:"${project.buildDir}/libs/${archivesName}-${version}-dev.jar") + ant.move(file:"${project.buildDir}/devlibs/${archivesName}-${version}-sources.jar", tofile:"${project.buildDir}/libs/${archivesName}-${version}-sources-dev.jar") } } @@ -98,11 +102,12 @@ task github(dependsOn: moveDevLibs) { onlyIf { ENV.GITHUB_TOKEN } - + doLast { def github = GitHub.connectUsingOAuth(ENV.GITHUB_TOKEN as String) def repository = github.getRepository("Wurst-Imperium/Wurst-MCX2") def ghVersion = version.substring(0, version.indexOf("-")) + def archivesName = project.base.archivesName.get() as String def ghRelease = repository.getReleaseByTagName(ghVersion as String) if(ghRelease == null) { @@ -113,7 +118,7 @@ task github(dependsOn: moveDevLibs) { ghRelease.uploadAsset(remapJar.archiveFile.get().getAsFile(), "application/java-archive") ghRelease.uploadAsset(remapSourcesJar.archiveFile.get().getAsFile(), "application/java-archive") - ghRelease.uploadAsset(new File("${project.buildDir}/libs/${archivesBaseName}-${version}-dev.jar"), "application/java-archive") - ghRelease.uploadAsset(new File("${project.buildDir}/libs/${archivesBaseName}-${version}-sources-dev.jar"), "application/java-archive") + ghRelease.uploadAsset(new File("${project.buildDir}/libs/${archivesName}-${version}-dev.jar"), "application/java-archive") + ghRelease.uploadAsset(new File("${project.buildDir}/libs/${archivesName}-${version}-sources-dev.jar"), "application/java-archive") } } From 84126d146ae431110aee5f3bea1106254eb9eca2 Mon Sep 17 00:00:00 2001 From: CureSaba <94890302+CureSaba@users.noreply.github.com> Date: Tue, 18 Jun 2024 00:46:03 +0900 Subject: [PATCH 029/109] Update ja_jp.json --- .../resources/assets/wurst/lang/ja_jp.json | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/wurst/lang/ja_jp.json b/src/main/resources/assets/wurst/lang/ja_jp.json index 209485d9..6cd4ca47 100644 --- a/src/main/resources/assets/wurst/lang/ja_jp.json +++ b/src/main/resources/assets/wurst/lang/ja_jp.json @@ -82,7 +82,7 @@ "description.wurst.setting.follow.filter_sleeping": "寝ているプレイヤーをフォローしない。", "description.wurst.setting.follow.filter_flying": "地上から指定距離以上離れているプレイヤーをフォローしない。", "description.wurst.setting.follow.filter_neutral": "エンダーマンや狼のような中立のモブをフォローしない。", - "description.wurst.setting.follow.filter_bats": "MODで追加されるかもしれない\"コウモリ\"や他のモブをフォローしない。", + "description.wurst.setting.follow.filter_bats": "コウモリや、MOD によって追加される可能性のあるその他の\"環境\"モブをフォローしない。", "description.wurst.setting.follow.filter_pets": "飼いならされたオオカミや飼いならされた馬などをフォローしない。", "description.wurst.setting.follow.filter_villagers": "村人や行商人などをフォローしない。", "description.wurst.setting.follow.filter_zombie_villagers": "村人ゾンビをフォローしない。", @@ -156,6 +156,21 @@ "description.wurst.hack.rainbowui": "§cす§aべ§9て§cを§aカ§9ラ§cフ§aル§9に§cす§aる§9。", "description.wurst.hack.reach": "より遠くに手が届くようになる。", "description.wurst.hack.remoteview": "他人の視点でワールドを見ることができるようになる。\n.rv で特定のエンティティを対象として指定可能。", + "description.wurst.setting.remoteview.filter_players": "他のプレイヤーとして表示しない。", + "description.wurst.setting.remoteview.filter_sleeping": "寝ているプレイヤーとして表示しない。", + "description.wurst.setting.remoteview.filter_flying": "地面から指定された距離以上離れたプレイヤーとして表示しない。", + "description.wurst.setting.remoteview.filter_neutral": "エンダーマンやオオカミのような中立モブとして表示しない。", + "description.wurst.setting.remoteview.filter_bats": "コウモリや、MOD によって追加される可能性のあるその他の\"環境\"モブとして表示しない。", + "description.wurst.setting.remoteview.filter_pets": "飼いならされたオオカミ、飼いならされた馬などとして表示しない。", + "description.wurst.setting.remoteview.filter_villagers": "村人と行商人として表示しない。", + "description.wurst.setting.remoteview.filter_zombie_villagers": "村人ゾンビとして表示しない。", + "description.wurst.setting.remoteview.filter_golems": "アイアンゴーレムとスノーゴーレムとして表示しない。", + "description.wurst.setting.remoteview.filter_zombie_piglins": "ゾンビピグリンとして表示しない。", + "description.wurst.setting.remoteview.filter_endermen": "エンダーマンとして表示しない。", + "description.wurst.setting.remoteview.filter_shulkers": "シュルカーとして表示しない。", + "description.wurst.setting.remoteview.filter_allays": "アレイとして表示しない。", + "description.wurst.setting.remoteview.filter_invisible": "目に見えないエンティティとして表示しない。", + "description.wurst.setting.remoteview.filter_armor_stands": "アーマースタンドとして表示しない。", "description.wurst.hack.restock": "インベントリから選択したアイテムを自動的に手に補充します。 FastPlace と併用するとより効果的です。", "description.wurst.hack.safewalk": "ブロックの端からの落下を防ぐ。", "description.wurst.hack.scaffoldwalk": "足元に自動でブロックを設置する。", @@ -184,6 +199,39 @@ "button.wurst.nochatreports.disable_signatures": "署名の無効化", "button.wurst.nochatreports.re-enable_signatures": "署名の再有効化", "description.wurst.setting.generic.attack_speed": "攻撃速度(クリック数/秒)。\n0 = は、攻撃のクールダウンに合わせて速度を自動的に調整します。", + "description.wurst.setting.generic.filter_allays_combat": "アレイを攻撃しない。", + "description.wurst.setting.generic.filter_allays_vision": "アレイを表示しない。", + "description.wurst.setting.generic.filter_armor_stands_combat": "防具立てを攻撃しない。", + "description.wurst.setting.generic.filter_armor_stands_vision": "防具立てを表示しない", + "description.wurst.setting.generic.filter_bats_combat": "コウモリや、MOD によって追加される可能性のあるその他の\"環境\"モブを攻撃しない。", + "description.wurst.setting.generic.filter_bats_vision": "コウモリや、MOD によって追加される可能性のあるその他の\"環境\"モブを表示しない。", + "description.wurst.setting.generic.filter_crystals_combat": "エンドクリスタルを攻撃しない。", + "description.wurst.setting.generic.filter_endermen_combat": "§lOn§r に設定すると、エンダーマンをまったく攻撃しない。\n\n§lIf calm§r に設定すると、エンダーマンが最初に攻撃するまで攻撃しない。このフィルターは、エンダーマンがあなたを攻撃しているのか、他の人を攻撃しているのかを検出できないことに注意してください。\n\n§lOff§r に設定すると、このフィルターは何も実行せず、エンダーマンを攻撃できます。", + "description.wurst.setting.generic.filter_endermen_vision": "§lOn§r に設定すると、エンダーマンをまったく表示しない。\n\n§lIf calm§r に設定すると、エンダーマンが何かを攻撃するまで表示しない。\n\n§lOff§r に設定すると、このフィルターは何も実行せず、エンダーマンが表示される。", + "description.wurst.setting.generic.filter_flying_combat": "地面から指定された距離以上離れたプレイヤーを攻撃しない。\n\n飛行ボットをあなたの近くに配置してハッキングを検出しようとするサーバーに役立ちます。", + "description.wurst.setting.generic.filter_golems_combat": "アイアンゴーレムとスノーゴーレムを攻撃しない。", + "description.wurst.setting.generic.filter_golems_vision": "アイアンゴーレムとスノーゴーレムを表示しない。", + "description.wurst.setting.generic.filter_invisible_combat": "目に見えないエンティティを攻撃しない。", + "description.wurst.setting.generic.filter_invisible_vision": "目に見えないエンティティを表示しない。", + "description.wurst.setting.generic.filter_named_combat": "タグ付けされたエンティティを攻撃しない。", + "description.wurst.setting.generic.filter_named_vision": "タグ付けされたエンティティを表示しない。", + "description.wurst.setting.generic.filter_neutral_combat": "§lOn§r に設定すると、中立モブはまったく攻撃されなくなります。\n\n§lIf calm§r に設定すると、中立モブが最初に攻撃するまで攻撃しない。このフィルターは、中立モブがあなたを攻撃しているのか、他の人を攻撃しているのかを検出できないことに注意してください。\n\n§lOff§r に設定すると、このフィルターは何も実行せず、中立モブを攻撃できます。", + "description.wurst.setting.generic.filter_neutral_vision": "§lOn§r に設定すると、中立モブはまったく表示されなくなります。\n\n§lIf calm§r に設定すると、中立モブが何かを攻撃するまで表示しない。\n\n§lOff§r に設定すると、このフィルターは何も実行せず、中立モブが表示される。", + "description.wurst.setting.generic.filter_pets_combat": "飼いならされたオオカミ、飼いならされた馬などを攻撃しない。", + "description.wurst.setting.generic.filter_pets_vision": "飼いならされたオオカミ、飼いならされた馬などを表示しない。", + "description.wurst.setting.generic.filter_players_combat": "他のプレイヤーを攻撃しない", + "description.wurst.setting.generic.filter_players_vision": "他のプレイヤーを表示しない。", + "description.wurst.setting.generic.filter_shulker_bullets_combat": "シュルカーの弾を攻撃しない。", + "description.wurst.setting.generic.filter_shulkers_combat": "シュルカーを攻撃しない。", + "description.wurst.setting.generic.filter_shulkers_vision": "シュルカーを表示しない。", + "description.wurst.setting.generic.filter_sleeping_combat": "寝ているプレイヤーを攻撃しない。\n\n眠っているプレイヤーを地面に置いて死体のように見せる Mineplex などのサーバーで役立ちます。", + "description.wurst.setting.generic.filter_sleeping_vision": "寝ているプレイヤーを表示しない。", + "description.wurst.setting.generic.filter_villagers_combat": "村人と行商人を攻撃しない。", + "description.wurst.setting.generic.filter_villagers_vision": "村人と行商人を表示しない。", + "description.wurst.setting.generic.filter_zombie_piglins_combat": "§lOn§r に設定すると、ゾンビピグリンをまったく攻撃しない。\n\n§lIf calm§r に設定すると、ゾンビピグリンが最初に攻撃するまで攻撃しない。このフィルターは、ゾンビピグリンがあなたを攻撃しているのか、他の人を攻撃しているのかを検出できないことに注意してください。\n\n§lOff§r に設定すると、このフィルターは何も実行せず、ゾンビピグリンを攻撃できます。", + "description.wurst.setting.generic.filter_zombie_piglins_vision": "§lOn§r に設定すると、ゾンビピグリンをまったく表示しない.\n\n§lIf calm§r に設定すると、ゾンビピグリンが何かを攻撃するまで表示しない。\n\n§lOff§r に設定すると、このフィルターは何も実行せず、ゾンビピグリンが表示される。", + "description.wurst.setting.generic.filter_zombie_villagers_combat": "村人ゾンビを攻撃しない。", + "description.wurst.setting.generic.filter_zombie_villagers_vision": "村人ゾンビを表示しない。", "description.wurst.setting.generic.pause_attack_on_containers": "コンテナ画面(チェスト、ホッパーなど)が開いている間は攻撃をしません。\nチェストのようなメニューを表示するミニゲーム サーバーに役立ちます。", "description.wurst.altmanager.premium": "このAltにはパスワードがあり、すべてのサーバーに参加可能です。", "description.wurst.altmanager.cracked": "このAltにはパスワードがなく、非正規アカウントが参加可能なサーバーでのみ使用可能です。", From cf0e3da26ae4079dc5508f3132b151d6f50e64ea Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 18 Jun 2024 09:23:51 +0200 Subject: [PATCH 030/109] Update ArrowDMG to work in Minecraft 1.21 Fixes #1010 --- .../net/wurstclient/hacks/ArrowDmgHack.java | 21 +++++++++---------- .../resources/assets/wurst/lang/cs_cz.json | 1 - .../resources/assets/wurst/lang/de_de.json | 2 +- .../resources/assets/wurst/lang/en_us.json | 2 +- .../resources/assets/wurst/lang/fr_fr.json | 1 - .../resources/assets/wurst/lang/it_it.json | 1 - .../resources/assets/wurst/lang/ja_jp.json | 1 - .../resources/assets/wurst/lang/ko_kr.json | 1 - .../resources/assets/wurst/lang/pl_pl.json | 1 - .../resources/assets/wurst/lang/ro_ro.json | 1 - .../resources/assets/wurst/lang/ru_ru.json | 1 - .../resources/assets/wurst/lang/uk_ua.json | 1 - .../resources/assets/wurst/lang/zh_cn.json | 1 - .../resources/assets/wurst/lang/zh_hk.json | 1 - .../resources/assets/wurst/lang/zh_tw.json | 1 - 15 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/ArrowDmgHack.java b/src/main/java/net/wurstclient/hacks/ArrowDmgHack.java index d94f72ce..e45b525b 100644 --- a/src/main/java/net/wurstclient/hacks/ArrowDmgHack.java +++ b/src/main/java/net/wurstclient/hacks/ArrowDmgHack.java @@ -14,6 +14,7 @@ import net.minecraft.item.Items; import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket; import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket.Mode; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; +import net.minecraft.util.math.Vec3d; import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.StopUsingItemListener; @@ -25,9 +26,9 @@ import net.wurstclient.settings.SliderSetting.ValueDisplay; @SearchTags({"arrow dmg", "ArrowDamage", "arrow damage"}) public final class ArrowDmgHack extends Hack implements StopUsingItemListener { - private final SliderSetting packets = new SliderSetting("Packets", - "description.wurst.setting.arrowdmg.packets", 200, 2, 7000, 20, - ValueDisplay.INTEGER); + private final SliderSetting strength = new SliderSetting("Strength", + "description.wurst.setting.arrowdmg.strength", 10, 0.1, 10, 0.1, + ValueDisplay.DECIMAL); private final CheckboxSetting yeetTridents = new CheckboxSetting("Trident yeet mode", @@ -37,7 +38,7 @@ public final class ArrowDmgHack extends Hack implements StopUsingItemListener { super("ArrowDMG"); setCategory(Category.COMBAT); - addSetting(packets); + addSetting(strength); addSetting(yeetTridents); } @@ -65,17 +66,15 @@ public final class ArrowDmgHack extends Hack implements StopUsingItemListener netHandler.sendPacket( new ClientCommandC2SPacket(player, Mode.START_SPRINTING)); + Vec3d lookVec = player.getRotationVec(1).multiply(strength.getValue()); double x = player.getX(); double y = player.getY(); double z = player.getZ(); - for(int i = 0; i < packets.getValueI() / 2; i++) - { - netHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(x, - y - 1e-10, z, true)); - netHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(x, - y + 1e-10, z, false)); - } + netHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround( + x - lookVec.x, y - 1e-10, z - lookVec.z, true)); + netHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(x, + y + 1e-10, z, false)); } private boolean isValidItem(Item item) diff --git a/src/main/resources/assets/wurst/lang/cs_cz.json b/src/main/resources/assets/wurst/lang/cs_cz.json index b23863c5..cd095cc3 100644 --- a/src/main/resources/assets/wurst/lang/cs_cz.json +++ b/src/main/resources/assets/wurst/lang/cs_cz.json @@ -10,7 +10,6 @@ "description.wurst.hack.antiwaterpush": "Zabraňuje posouvání vodou.", "description.wurst.hack.antiwobble": "Zabraňuje viklavému efektu způsobenému nevolností a portály.", "description.wurst.hack.arrowdmg": "Masivně zvyšuje poškození šípem, ale také spotřebovává hodně hladu a snižuje přesnost.\n\nNefunguje s kušemi a zdá se nefunkční na Paper serverech.", - "description.wurst.setting.arrowdmg.packets": "Množství odeslaných paketů.\nVíce paketů = větší poškození.", "description.wurst.setting.arrowdmg.trident_yeet_mode": "Povolením, trojzubce létají mnohem dál. Nezdá se, že by to mělo vliv na poškození nebo Mocný záběr.\n\n§c§lUPOZORNĚNÍ:§r Povolením této možnosti můžete snadno přijít o trojzubec!", "description.wurst.hack.autoarmor": "Automaticky přehazuje vaše brnění.", "description.wurst.hack.autobuild": "Automaticky staví.\nUmístěte blok k započatí stavby.", diff --git a/src/main/resources/assets/wurst/lang/de_de.json b/src/main/resources/assets/wurst/lang/de_de.json index e44674f3..7762f504 100644 --- a/src/main/resources/assets/wurst/lang/de_de.json +++ b/src/main/resources/assets/wurst/lang/de_de.json @@ -11,7 +11,7 @@ "description.wurst.hack.antiwaterpush": "Verhindert dass du von fließendem Wasser weggeschubst wirst.", "description.wurst.hack.antiwobble": "Entfernt den Wabbel-Effekt von Übelkeit und Netherportalen.", "description.wurst.hack.arrowdmg": "Erhöht massiv den Schaden von Pfeilen, verbraucht aber auch jede Menge Hunger und reduziert die Zielgenauigkeit.\n\nFunktioniert nicht mit Armbrüsten und scheint auf Paper-Servern gepatcht zu sein.", - "description.wurst.setting.arrowdmg.packets": "Menge der Packets, die gesendet werden.\nMehr Packets = mehr Schaden.", + "description.wurst.setting.arrowdmg.strength": "Intensität des Effekts. 10 ist seit Minecraft 1.21 der höchstmögliche Wert.", "description.wurst.setting.arrowdmg.trident_yeet_mode": "Wenn aktiviert, fliegen Dreizacke viel weiter. Scheint den Schaden und die Sog/Riptide-Verzauberung nicht zu beeinflussen.\n\n§c§lWARNUNG:§r Du kannst durch diese Option sehr einfach deinen Dreizack verlieren!", "description.wurst.hack.autoarmor": "Zieht automatisch deine beste Rüstung an.", "description.wurst.hack.autobuild": "Baut die ausgewählte Vorlage (Template) automatisch.\nPlatziere manuell einen Block, um Bauprozess zu starten.", diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index a06ccb54..21ed9c4a 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -12,7 +12,7 @@ "description.wurst.hack.antiwaterpush": "Prevents you from getting pushed by water.", "description.wurst.hack.antiwobble": "Disables the wobble effect caused by nausea and portals.", "description.wurst.hack.arrowdmg": "Massively increases arrow damage, but also consumes a lot of hunger and reduces accuracy.\n\nDoes not work with crossbows and seems to be patched on Paper servers.", - "description.wurst.setting.arrowdmg.packets": "Amount of packets to send.\nMore packets = higher damage.", + "description.wurst.setting.arrowdmg.strength": "Strength of the effect. 10 is the highest possible as of Minecraft 1.21.", "description.wurst.setting.arrowdmg.trident_yeet_mode": "When enabled, tridents fly much further. Doesn't seem to affect damage or Riptide.\n\n§c§lWARNING:§r You can easily lose your trident by enabling this option!", "description.wurst.hack.autoarmor": "Manages your armor automatically.", "description.wurst.hack.autobuild": "Builds things automatically.\nPlace a single block to start building.", diff --git a/src/main/resources/assets/wurst/lang/fr_fr.json b/src/main/resources/assets/wurst/lang/fr_fr.json index df6fd550..8805efd6 100644 --- a/src/main/resources/assets/wurst/lang/fr_fr.json +++ b/src/main/resources/assets/wurst/lang/fr_fr.json @@ -8,7 +8,6 @@ "description.wurst.hack.antiwaterpush": "Vous empêche d'être poussé par l'eau.", "description.wurst.hack.antiwobble": "Désactive l'effet d'oscillation causé par la nausée et les portails.", "description.wurst.hack.arrowdmg": "Augmente massivement les dégâts des flèches, mais consomme également beaucoup de faim et réduit la précision. \n\nNe fonctionne pas avec les arbalètes et semble être corrigé sur les serveurs Paper.", - "description.wurst.setting.arrowdmg.packets": "Quantité de paquets à envoyer.\nPlus de paquets = plus de dégâts.", "description.wurst.setting.arrowdmg.trident_yeet_mode": "Lorsqu'il est activé, les tridents volent beaucoup plus loin. Ne semble pas affecter les dégâts ou l'impulsion.\n\n§c§lATTENTION:§r Vous pouvez facilement perdre votre trident en activant cette option !", "description.wurst.hack.autoarmor": "Gère votre armure automatiquement.", "description.wurst.hack.autobuild": "Construit les choses automatiquement.\nPlacez un seul bloc pour commencer à construire.", diff --git a/src/main/resources/assets/wurst/lang/it_it.json b/src/main/resources/assets/wurst/lang/it_it.json index 55675eb0..84e211cc 100644 --- a/src/main/resources/assets/wurst/lang/it_it.json +++ b/src/main/resources/assets/wurst/lang/it_it.json @@ -10,7 +10,6 @@ "description.wurst.hack.antiwaterpush": "Non permette all'acqua di spingerti.", "description.wurst.hack.antiwobble": "Disattiva l'effetto oscillante causato dalla nausea e dai portali.", "description.wurst.hack.arrowdmg": "Aumenta significativamente il danno da frecce, ma consuma anche un sacco di fame e riduce la mira.\n\nNon funziona con le balestre e sembra essere cionco nei server con il Paper.", - "description.wurst.setting.arrowdmg.packets": "Numero di pacchetti da inviare.\nPiù pacchetti = più danno.", "description.wurst.setting.arrowdmg.trident_yeet_mode": "Quando abilitato, i tridenti volano molto più lontano. Non sembra influire sul danno o sullo Risacca.\n\n§c§lATTENZIONE:§r Puoi facilmente perdere il tuo tridente abilitando questa opzione!", "description.wurst.hack.autoarmor": "Gestisce la tua armatura automaticamente.", "description.wurst.hack.autobuild": "Costruisce cose automaticamente.\nPiazza un blocco per cominciare a costruire.", diff --git a/src/main/resources/assets/wurst/lang/ja_jp.json b/src/main/resources/assets/wurst/lang/ja_jp.json index 6cd4ca47..d920e099 100644 --- a/src/main/resources/assets/wurst/lang/ja_jp.json +++ b/src/main/resources/assets/wurst/lang/ja_jp.json @@ -12,7 +12,6 @@ "description.wurst.hack.antiwaterpush": "水に流されるのを防ぐ。", "description.wurst.hack.antiwobble": "吐き気やポータルによって引き起こされる視界のゆがみを無効化する。", "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": "防具を自動で管理する。", "description.wurst.hack.autobuild": "自動で建築を行う。\nブロックを一つ設置することで建築が開始される。", diff --git a/src/main/resources/assets/wurst/lang/ko_kr.json b/src/main/resources/assets/wurst/lang/ko_kr.json index ff372f78..6e83ef6a 100644 --- a/src/main/resources/assets/wurst/lang/ko_kr.json +++ b/src/main/resources/assets/wurst/lang/ko_kr.json @@ -9,7 +9,6 @@ "description.wurst.hack.antiknockback": "플레이어나 몹으로부터 넉백을 받지 않도록 합니다.", "description.wurst.hack.antispam": "반복된 메시지에 카운터를 추가하여 채팅 스팸을 차단합니다.", "description.wurst.hack.antiwaterpush": "물에 밀리는 것을 방지합니다.", - "description.wurst.setting.arrowdmg.packets": "전송할 패킷 수.\n패킷이 많을수록 공격력이 높아집니다.", "description.wurst.hack.autoarmor": "자동으로 방어구를 관리합니다.", "description.wurst.hack.autobuild": "자동으로 건물을 건설합니다.\n한 개의 블록을 놓으면 건설을 시작합니다.", "description.wurst.hack.autocomplete": "대형 언어 모델을 사용하여 채팅 메시지를 자동 완성합니다. OpenAI 계정 API 접근 권한 또는 OpenAI와 호환되는 다른 언어 모델 API가 필요합니다.", diff --git a/src/main/resources/assets/wurst/lang/pl_pl.json b/src/main/resources/assets/wurst/lang/pl_pl.json index 2469c190..c320f8e4 100644 --- a/src/main/resources/assets/wurst/lang/pl_pl.json +++ b/src/main/resources/assets/wurst/lang/pl_pl.json @@ -10,7 +10,6 @@ "description.wurst.hack.antiwaterpush": "Zapobiega popychaniu cię przez wodę.", "description.wurst.hack.antiwobble": "Wyłącza efekt chwiania wywołany przez mdłości i portale.", "description.wurst.hack.arrowdmg": "Znacznie zwiększa obrażenia zadawane przez strzały, jednak jednocześnie pochłania mnóstwo głodu i zmniejsza celność.\n\nNie działa z kuszami i wygląda na to, że jest spatchowany na serwerach Paper.", - "description.wurst.setting.arrowdmg.packets": "Ilość wysłanych pakietów.\nWięcej pakietów = więcej obrażeń.", "description.wurst.setting.arrowdmg.trident_yeet_mode": "Po aktywacji, trójzęby lecą znacznie dalej. Wygląda na to, że nie wpływa to na obrażenia i zaklęcie Torpeda/Riptide.\n\n§c§lOSTRZEŻENIE:§r Przez tą opcję możesz łatwo zgubić trójząb!", "description.wurst.hack.autoarmor": "Automatycznie zarządza twoją zbroją.", "description.wurst.hack.autobuild": "Automatycznie buduje rzeczy.\nUmieść pojedynczy blok, aby rozpocząć budowanie.", diff --git a/src/main/resources/assets/wurst/lang/ro_ro.json b/src/main/resources/assets/wurst/lang/ro_ro.json index 0431d4b4..e4531a35 100644 --- a/src/main/resources/assets/wurst/lang/ro_ro.json +++ b/src/main/resources/assets/wurst/lang/ro_ro.json @@ -8,7 +8,6 @@ "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.", diff --git a/src/main/resources/assets/wurst/lang/ru_ru.json b/src/main/resources/assets/wurst/lang/ru_ru.json index eddb8ba0..7db40e63 100644 --- a/src/main/resources/assets/wurst/lang/ru_ru.json +++ b/src/main/resources/assets/wurst/lang/ru_ru.json @@ -10,7 +10,6 @@ "description.wurst.hack.antiwaterpush": "Убирает снос течением воды.", "description.wurst.hack.antiwobble": "Отключает покачивание экрана от портала и эффекта тошноты.", "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": "Автоматически экипирует наилучшую броню.", "description.wurst.hack.autobuild": "Автоматически строит объекты.\nПоставьте блок, чтобы начать строительство.", diff --git a/src/main/resources/assets/wurst/lang/uk_ua.json b/src/main/resources/assets/wurst/lang/uk_ua.json index 1870bd5a..93439183 100644 --- a/src/main/resources/assets/wurst/lang/uk_ua.json +++ b/src/main/resources/assets/wurst/lang/uk_ua.json @@ -8,7 +8,6 @@ "description.wurst.hack.antiwaterpush": "Вас більше не зносить течією води.", "description.wurst.hack.antiwobble": "Вимикає похитування екрана від порталу та ефекту нудоти.", "description.wurst.hack.arrowdmg": "Суттєво збільшує ушкодження від стріл, але також споживає багато голоду та знижує точність.\n\nНе працює з арбалетами і, здається, виправлено на серверах Paper.", - "description.wurst.setting.arrowdmg.packets": "Кількість пакетів для відправки.\nБільше пакетів = більша шкода.", "description.wurst.setting.arrowdmg.trident_yeet_mode": "Коли ввімкнено, тризуби летять набагато далі. Здається, не впливає на пошкодження чи Riptide.\n\n§c§lПОПЕРЕДЖЕННЯ:§r Ви можете легко втратити свій тризуб, увімкнувши цю опцію!", "description.wurst.hack.autoarmor": "Автоматично екіпірує найкращу броню.", "description.wurst.hack.autobuild": "Автоматично будує об'єкти.\nПоставте блок, щоб почати будівництво.", diff --git a/src/main/resources/assets/wurst/lang/zh_cn.json b/src/main/resources/assets/wurst/lang/zh_cn.json index c887ebeb..ba7db49d 100644 --- a/src/main/resources/assets/wurst/lang/zh_cn.json +++ b/src/main/resources/assets/wurst/lang/zh_cn.json @@ -12,7 +12,6 @@ "description.wurst.hack.antiwaterpush": "防止你被水流推动。", "description.wurst.hack.antiwobble": "禁用由反胃和传送门动画引起的视觉扭曲。", "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": "自动管理你的盔甲。", "description.wurst.hack.autobuild": "自动建筑东西。\n放一个方块就开始自动建造。", diff --git a/src/main/resources/assets/wurst/lang/zh_hk.json b/src/main/resources/assets/wurst/lang/zh_hk.json index 5f7c8971..1ce6031f 100644 --- a/src/main/resources/assets/wurst/lang/zh_hk.json +++ b/src/main/resources/assets/wurst/lang/zh_hk.json @@ -8,7 +8,6 @@ "description.wurst.hack.antiwaterpush": "防止你被水流推動。", "description.wurst.hack.antiwobble": "關閉因反胃同埋傳送門引起嘅搖晃效果。", "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": "自動管理你嘅盔甲。", "description.wurst.hack.autobuild": "自動建築嘅功能。\n放一個方塊就開始自己自動建造。", diff --git a/src/main/resources/assets/wurst/lang/zh_tw.json b/src/main/resources/assets/wurst/lang/zh_tw.json index 543c298c..02cd7205 100644 --- a/src/main/resources/assets/wurst/lang/zh_tw.json +++ b/src/main/resources/assets/wurst/lang/zh_tw.json @@ -10,7 +10,6 @@ "description.wurst.hack.antiwaterpush": "防止你被水流推動。", "description.wurst.hack.antiwobble": "關閉因反胃和傳送門引起的搖晃效果。", "description.wurst.hack.arrowdmg": "大幅增加箭的傷害,但也會消耗大量飢餓值並降低準確性。\n\n不適用於弩,並且似乎已在紙質服務器上進行了修補。", - "description.wurst.setting.arrowdmg.packets": "要發送的數據包數量。\n更多數據包 = 更高的傷害。", "description.wurst.setting.arrowdmg.trident_yeet_mode": "啟用後,三叉戟飛得更遠。 似乎不會影響傷害或激流。\n\n§c§l警告:§r 啟用此選項很容易丟失三叉戟!", "description.wurst.hack.autoarmor": "自動管理你的盔甲。", "description.wurst.hack.autobuild": "自動建築東西。\n放一個方塊就開始自動建造。", From b68610923f801744f3e0de733f93f62498ac8dbd Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 18 Jun 2024 10:33:58 +0200 Subject: [PATCH 031/109] Update to Loom 1.7 --- build.gradle | 2 +- gradle.properties | 4 ++-- gradle/wrapper/gradle-wrapper.jar | Bin 63721 -> 43453 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew.bat | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 6e7e5077..69091fff 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } plugins { - id "fabric-loom" version "1.6-SNAPSHOT" + id "fabric-loom" version "1.7-SNAPSHOT" id "com.diffplug.spotless" version "6.25.0" } diff --git a/gradle.properties b/gradle.properties index 49f8a5c7..2cf07512 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,11 +6,11 @@ org.gradle.parallel=true # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions minecraft_version=1.21 -yarn_mappings=1.21+build.1 +yarn_mappings=1.21+build.2 loader_version=0.15.11 # Fabric API -fabric_version=0.100.1+1.21 +fabric_version=0.100.3+1.21 # Mod Properties mod_version = v7.43.1-MC1.21 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135c49b765f8051ef9d0a6055ff8e46073d8..e6441136f3d4ba8a0da8d277868979cfbc8ad796 100644 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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
NnX)EH+Nua)3Y(c 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鯊%1Et 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⁢ zv5o9#E7!G0XmdzfsS{efPNi`1b44~SZ4Z8fuX!I}#8g+(wxzQwUT#Xb2(tbY1+EUhGKoT@KEU9Ktl>_0 z%bjDJg;#*gtJZv!-Zs`?^}v5eKmnbjqlvnSzE@_SP|LG_PJ6CYU+6zY6>92%E+ z=j@TZf-iW4(%U{lnYxQA;7Q!b;^brF8n0D>)`q5>|WDDXLrqYU_tKN2>=#@~OE7grMnNh?UOz-O~6 z6%rHy{#h9K0AT+lDC7q4{hw^|q6*Ry;;L%Q@)Ga}$60_q%D)rv(CtS$CQbpq9|y1e zRSrN4;$Jyl{m5bZw`$8TGvb}(LpY{-cQ)fcyJv7l3S52TLXVDsphtv&aPuDk1OzCA z4A^QtC(!11`IsNx_HnSy?>EKpHJWT^wmS~hc^p^zIIh@9f6U@I2 zC=Mve{j2^)mS#U$e{@Q?SO6%LDsXz@SY+=cK_QMmXBIU)j!$ajc-zLx3V60EXJ!qC zi<%2x8Q24YN+&8U@CIlN zrZkcT9yh%LrlGS9`G)KdP(@9Eo-AQz@8GEFWcb7U=a0H^ZVbLmz{+&M7W(nXJ4sN8 zJLR7eeK(K8`2-}j(T7JsO`L!+CvbueT%izanm-^A1Dn{`1Nw`9P?cq;7no+XfC`K(GO9?O^5zNIt4M+M8LM0=7Gz8UA@Z0N+lg+cX)NfazRu z5D)~HA^(u%w^cz+@2@_#S|u>GpB+j4KzQ^&Wcl9f z&hG#bCA(Yk0D&t&aJE^xME^&E-&xGHhXn%}psEIj641H+Nl-}boj;)Zt*t(4wZ5DN z@GXF$bL=&pBq-#vkTkh>7hl%K5|3 z{`Vn9b$iR-SoGENp}bn4;fR3>9sA%X2@1L3aE9yTra;Wb#_`xWwLSLdfu+PAu+o3| zGVnpzPr=ch{uuoHjtw7+_!L_2;knQ!DuDl0R`|%jr+}jFzXtrHIKc323?JO{l&;VF z*L1+}JU7%QJOg|5|Tc|D8fN zJORAg=_vsy{ak|o);@)Yh8Lkcg@$FG3k@ep36BRa^>~UmnRPziS>Z=`Jb2x*Q#`%A zU*i3&Vg?TluO@X0O;r2Jl6LKLUOVhSqg1*qOt^|8*c7 zo(298@+r$k_wQNGHv{|$tW(T8L+4_`FQ{kEW5Jgg{yf7ey4ss_(SNKfz(N9lx&a;< je(UuV8hP?p&}TPdm1I$XmG#(RzlD&B2izSj9sl%y5~4qc diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b82aa23a..a4413138 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew.bat b/gradlew.bat index 13ba5d3c..7101f8e4 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -89,4 +89,4 @@ exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal -:omega \ No newline at end of file +:omega From 992fc8e8813b37564484e7129b64ee0b282c3c34 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 18 Jun 2024 10:39:09 +0200 Subject: [PATCH 032/109] Update Gradle CI --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 2dc27260..6fd9a896 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -53,7 +53,7 @@ jobs: run: ./gradlew spotlessCheck - name: Execute Gradle build - run: ./gradlew build + run: ./gradlew build --stacktrace --warning-mode=fail - name: VirusTotal scan if: ${{ github.event_name == 'push' }} From a2e2ee1bde7377a27a1a9194fc59961b0bc444df Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 19 Jun 2024 10:17:33 +0200 Subject: [PATCH 033/109] Fix ModMenu breaking everything again Fixes #1018 --- .../mixin/GameMenuScreenMixin.java | 86 ++++++++++++------- 1 file changed, 56 insertions(+), 30 deletions(-) diff --git a/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java b/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java index 864850be..599ea55e 100644 --- a/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java +++ b/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java @@ -11,6 +11,7 @@ import java.util.List; import org.lwjgl.opengl.GL11; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -18,12 +19,14 @@ 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.fabricmc.loader.api.FabricLoader; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.GameMenuScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.resource.language.I18n; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.crash.CrashException; @@ -34,9 +37,11 @@ import net.wurstclient.options.WurstOptionsScreen; @Mixin(GameMenuScreen.class) public abstract class GameMenuScreenMixin extends Screen { + @Unique private static final Identifier WURST_TEXTURE = Identifier.of("wurst", "wurst_128.png"); + @Unique private ButtonWidget wurstOptionsButton; private GameMenuScreenMixin(WurstClient wurst, Text title) @@ -81,62 +86,83 @@ public abstract class GameMenuScreenMixin extends Screen GL11.glDisable(GL11.GL_BLEND); } + @Unique private void addWurstOptionsButton() { List buttons = Screens.getButtons(this); + int buttonX = width / 2 - 102; int buttonY = -1; - int buttonI = -1; + int buttonWidth = 204; + int buttonHeight = 20; - for(int i = 0; i < buttons.size(); i++) + // Find the first row containing a feedback or ModMenu button + for(ClickableWidget button : buttons) { - ClickableWidget button = buttons.get(i); + if(!isFeedbackButton(button)) + continue; - // insert Wurst button in place of feedback/report row - if(isFeedbackButton(button)) - { - buttonY = button.getY(); - buttonI = i; - } - - // make feedback/report buttons invisible - // (removing them completely would break ModMenu) - if(isFeedbackButton(button) || isBugReportButton(button)) - button.visible = false; + buttonY = button.getY(); + break; } - if(buttonY == -1 || buttonI == -1) - throw new CrashException( - CrashReport.create(new IllegalStateException(), - "Someone deleted the Feedback button!")); + // Crash if ModMenu can't behave itself again + if(buttonY == -1) + throw new CrashException(CrashReport.create( + new IllegalStateException( + "Someone deleted the Feedback button."), + "I bet ModMenu is breaking stuff again!")); + + // Make any conflicting feedback/report/ModMenu buttons invisible + // We don't remove them completely, because unlike ModMenu, we care + // about compatibility with other mods here + for(ClickableWidget button : buttons) + { + if(button.getRight() < buttonX + || button.getX() > buttonX + buttonWidth + || button.getBottom() < buttonY + || button.getY() > buttonY + buttonHeight) + continue; + + button.visible = false; + } + // Add the Wurst Options button + MutableText buttonText = Text.literal(" Options"); wurstOptionsButton = ButtonWidget - .builder(Text.literal(" Options"), - b -> openWurstOptions()) - .dimensions(width / 2 - 102, buttonY, 204, 20).build(); + .builder(buttonText, b -> openWurstOptions()) + .dimensions(buttonX, buttonY, buttonWidth, buttonHeight).build(); buttons.add(wurstOptionsButton); } + @Unique private void openWurstOptions() { client.setScreen(new WurstOptionsScreen(this)); } + @Unique private boolean isFeedbackButton(ClickableWidget button) { - return hasTrKey(button, "menu.sendFeedback") - || hasTrKey(button, "menu.feedback"); + if(FabricLoader.getInstance().isModLoaded("modmenu") + && containsTrKey(button, "modmenu.title")) + return true; + + return isTrKey(button, "menu.sendFeedback") + || isTrKey(button, "menu.feedback"); } - private boolean isBugReportButton(ClickableWidget button) - { - return hasTrKey(button, "menu.reportBugs") - || hasTrKey(button, "menu.server_links"); - } - - private boolean hasTrKey(ClickableWidget button, String key) + @Unique + private boolean isTrKey(ClickableWidget button, String key) { String message = button.getMessage().getString(); return message != null && message.equals(I18n.translate(key)); } + + @Unique + private boolean containsTrKey(ClickableWidget button, String key) + { + String message = button.getMessage().getString(); + return message != null && message.contains(I18n.translate(key)); + } } From 26affb3373da9d1d0981fd2fc94c1a9cc673d257 Mon Sep 17 00:00:00 2001 From: ssyo <47333239+yutaoz@users.noreply.github.com> Date: Tue, 18 Jun 2024 01:14:37 -0400 Subject: [PATCH 034/109] Added option for guide boxes to show where airplace will place blocks --- .../net/wurstclient/hacks/AirPlaceHack.java | 93 ++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/hacks/AirPlaceHack.java b/src/main/java/net/wurstclient/hacks/AirPlaceHack.java index a737559b..a0ea9131 100644 --- a/src/main/java/net/wurstclient/hacks/AirPlaceHack.java +++ b/src/main/java/net/wurstclient/hacks/AirPlaceHack.java @@ -7,38 +7,69 @@ */ package net.wurstclient.hacks; +import java.awt.Color; + +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; import net.wurstclient.Category; import net.wurstclient.SearchTags; +import net.wurstclient.events.RenderListener; import net.wurstclient.events.RightClickListener; +import net.wurstclient.events.UpdateListener; import net.wurstclient.hack.Hack; +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.InteractionSimulator; +import net.wurstclient.util.RegionPos; +import net.wurstclient.util.RenderUtils; + @SearchTags({"air place"}) -public final class AirPlaceHack extends Hack implements RightClickListener +public final class AirPlaceHack extends Hack implements RightClickListener, + UpdateListener, RenderListener { private final SliderSetting range = new SliderSetting("Range", 5, 1, 6, 0.05, ValueDisplay.DECIMAL); + private final ColorSetting color = new ColorSetting("Color", + "Block placing guide will be highlighted in this color.", Color.RED); + + private final CheckboxSetting guide = new CheckboxSetting("Guide", + "Shows a guide for where blocks will place", true); + + private BlockPos bp; + public AirPlaceHack() { super("AirPlace"); setCategory(Category.BLOCKS); addSetting(range); + addSetting(color); + addSetting(guide); } @Override protected void onEnable() { + EVENTS.add(UpdateListener.class, this); + EVENTS.add(RenderListener.class, this); EVENTS.add(RightClickListener.class, this); } @Override protected void onDisable() { + EVENTS.remove(UpdateListener.class, this); + EVENTS.remove(RenderListener.class, this); EVENTS.remove(RightClickListener.class, this); } @@ -59,4 +90,64 @@ public final class AirPlaceHack extends Hack implements RightClickListener InteractionSimulator.rightClickBlock(blockHitResult); event.cancel(); } + + @Override + public void onRender(MatrixStack matrixStack, float partialTicks) + { + if (guide.isChecked() && bp != null) { + // GL settings + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + matrixStack.push(); + + RegionPos region = RenderUtils.getCameraRegion(); + RenderUtils.applyRegionalRenderOffset(matrixStack, region); + + renderBoxes(matrixStack, partialTicks, region); + + matrixStack.pop(); + + // GL resets + RenderSystem.setShaderColor(1, 1, 1, 1); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_BLEND); + } + } + + private void renderBoxes(MatrixStack matrixStack, float partialTicks, + RegionPos region) + { + matrixStack.push(); + + float[] colorF = color.getColorF(); + matrixStack.translate(bp.getX(), bp.getY(), bp.getZ()); + + RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.2F); + + Box bb = new Box(0, 0, 0, 1, 1, 1); + + RenderUtils.drawSolidBox(bb, matrixStack); + RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 1F); + RenderUtils.drawOutlinedBox(bb, matrixStack); + + matrixStack.pop(); + } + + @Override + public void onUpdate() + { + HitResult hitResult = MC.player.raycast(range.getValue(), 0, false); + if(hitResult.getType() != HitResult.Type.MISS) { + bp = null; // dont draw if looking at non-airplace location like ground + return; + } + + if(!(hitResult instanceof BlockHitResult blockHitResult)) + return; + + bp = blockHitResult.getBlockPos(); + } } From 1b4ea0be7626616d749bd0088bb12f5efd858c70 Mon Sep 17 00:00:00 2001 From: ssyo <47333239+yutaoz@users.noreply.github.com> Date: Tue, 18 Jun 2024 01:31:25 -0400 Subject: [PATCH 035/109] Spotless style fixes --- .../net/wurstclient/hacks/AirPlaceHack.java | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AirPlaceHack.java b/src/main/java/net/wurstclient/hacks/AirPlaceHack.java index a0ea9131..211007ef 100644 --- a/src/main/java/net/wurstclient/hacks/AirPlaceHack.java +++ b/src/main/java/net/wurstclient/hacks/AirPlaceHack.java @@ -32,10 +32,9 @@ import net.wurstclient.util.InteractionSimulator; import net.wurstclient.util.RegionPos; import net.wurstclient.util.RenderUtils; - @SearchTags({"air place"}) -public final class AirPlaceHack extends Hack implements RightClickListener, - UpdateListener, RenderListener +public final class AirPlaceHack extends Hack + implements RightClickListener, UpdateListener, RenderListener { private final SliderSetting range = new SliderSetting("Range", 5, 1, 6, 0.05, ValueDisplay.DECIMAL); @@ -94,7 +93,8 @@ public final class AirPlaceHack extends Hack implements RightClickListener, @Override public void onRender(MatrixStack matrixStack, float partialTicks) { - if (guide.isChecked() && bp != null) { + if(guide.isChecked() && bp != null) + { // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); @@ -121,27 +121,29 @@ public final class AirPlaceHack extends Hack implements RightClickListener, RegionPos region) { matrixStack.push(); - + float[] colorF = color.getColorF(); matrixStack.translate(bp.getX(), bp.getY(), bp.getZ()); - - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.2F); - - Box bb = new Box(0, 0, 0, 1, 1, 1); - - RenderUtils.drawSolidBox(bb, matrixStack); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 1F); - RenderUtils.drawOutlinedBox(bb, matrixStack); - - matrixStack.pop(); + + RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.2F); + + Box bb = new Box(0, 0, 0, 1, 1, 1); + + RenderUtils.drawSolidBox(bb, matrixStack); + RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 1F); + RenderUtils.drawOutlinedBox(bb, matrixStack); + + matrixStack.pop(); } @Override public void onUpdate() { HitResult hitResult = MC.player.raycast(range.getValue(), 0, false); - if(hitResult.getType() != HitResult.Type.MISS) { - bp = null; // dont draw if looking at non-airplace location like ground + if(hitResult.getType() != HitResult.Type.MISS) + { + bp = null; // dont draw if looking at non-airplace location like + // ground return; } From 4052ddffe5a7ebd5e5ea69b7c7624add27469655 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 19 Jun 2024 12:18:31 +0200 Subject: [PATCH 036/109] Clean up AirPlaceHack --- .../net/wurstclient/hacks/AirPlaceHack.java | 130 +++++++++--------- 1 file changed, 66 insertions(+), 64 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AirPlaceHack.java b/src/main/java/net/wurstclient/hacks/AirPlaceHack.java index 211007ef..384afd4f 100644 --- a/src/main/java/net/wurstclient/hacks/AirPlaceHack.java +++ b/src/main/java/net/wurstclient/hacks/AirPlaceHack.java @@ -13,6 +13,7 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; @@ -39,21 +40,21 @@ public final class AirPlaceHack extends Hack private final SliderSetting range = new SliderSetting("Range", 5, 1, 6, 0.05, ValueDisplay.DECIMAL); - private final ColorSetting color = new ColorSetting("Color", - "Block placing guide will be highlighted in this color.", Color.RED); - private final CheckboxSetting guide = new CheckboxSetting("Guide", - "Shows a guide for where blocks will place", true); + "Shows a guide for where blocks will be placed.", true); - private BlockPos bp; + private final ColorSetting guideColor = new ColorSetting("Guide color", + "Color of the block placing guide, if enabled.", Color.RED); + + private BlockPos renderPos; public AirPlaceHack() { super("AirPlace"); setCategory(Category.BLOCKS); addSetting(range); - addSetting(color); addSetting(guide); + addSetting(guideColor); } @Override @@ -62,6 +63,7 @@ public final class AirPlaceHack extends Hack EVENTS.add(UpdateListener.class, this); EVENTS.add(RenderListener.class, this); EVENTS.add(RightClickListener.class, this); + renderPos = null; } @Override @@ -75,81 +77,81 @@ public final class AirPlaceHack extends Hack @Override public void onRightClick(RightClickEvent event) { - HitResult hitResult = MC.player.raycast(range.getValue(), 0, false); - if(hitResult.getType() != HitResult.Type.MISS) - return; - - if(!(hitResult instanceof BlockHitResult blockHitResult)) + BlockHitResult hitResult = getHitResultIfMissed(); + if(hitResult == null) return; MC.itemUseCooldown = 4; if(MC.player.isRiding()) return; - InteractionSimulator.rightClickBlock(blockHitResult); + InteractionSimulator.rightClickBlock(hitResult); event.cancel(); } - @Override - public void onRender(MatrixStack matrixStack, float partialTicks) - { - if(guide.isChecked() && bp != null) - { - // GL settings - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glDisable(GL11.GL_DEPTH_TEST); - - matrixStack.push(); - - RegionPos region = RenderUtils.getCameraRegion(); - RenderUtils.applyRegionalRenderOffset(matrixStack, region); - - renderBoxes(matrixStack, partialTicks, region); - - matrixStack.pop(); - - // GL resets - RenderSystem.setShaderColor(1, 1, 1, 1); - GL11.glEnable(GL11.GL_DEPTH_TEST); - GL11.glDisable(GL11.GL_BLEND); - } - } - - private void renderBoxes(MatrixStack matrixStack, float partialTicks, - RegionPos region) - { - matrixStack.push(); - - float[] colorF = color.getColorF(); - matrixStack.translate(bp.getX(), bp.getY(), bp.getZ()); - - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.2F); - - Box bb = new Box(0, 0, 0, 1, 1, 1); - - RenderUtils.drawSolidBox(bb, matrixStack); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 1F); - RenderUtils.drawOutlinedBox(bb, matrixStack); - - matrixStack.pop(); - } - @Override public void onUpdate() + { + renderPos = null; + + if(!guide.isChecked()) + return; + + if(MC.player.getMainHandStack().isEmpty() + && MC.player.getOffHandStack().isEmpty()) + return; + + if(MC.player.isRiding()) + return; + + BlockHitResult hitResult = getHitResultIfMissed(); + if(hitResult != null) + renderPos = hitResult.getBlockPos(); + } + + private BlockHitResult getHitResultIfMissed() { HitResult hitResult = MC.player.raycast(range.getValue(), 0, false); if(hitResult.getType() != HitResult.Type.MISS) - { - bp = null; // dont draw if looking at non-airplace location like - // ground - return; - } + return null; if(!(hitResult instanceof BlockHitResult blockHitResult)) + return null; + + return blockHitResult; + } + + @Override + public void onRender(MatrixStack matrixStack, float partialTicks) + { + if(renderPos == null) return; - bp = blockHitResult.getBlockPos(); + // GL settings + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + matrixStack.push(); + + RegionPos region = RenderUtils.getCameraRegion(); + RenderUtils.applyRegionalRenderOffset(matrixStack); + + Box box = new Box(renderPos.subtract(region.toBlockPos())); + float[] colorF = guideColor.getColorF(); + + RenderSystem.setShader(GameRenderer::getPositionProgram); + RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.1F); + RenderUtils.drawSolidBox(box, matrixStack); + RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.75F); + RenderUtils.drawOutlinedBox(box, matrixStack); + + matrixStack.pop(); + + // GL resets + RenderSystem.setShaderColor(1, 1, 1, 1); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_BLEND); } } From d7db91a2a00950c00c66d85266c3fda60b55d627 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 19 Jun 2024 13:05:48 +0200 Subject: [PATCH 037/109] Add translation keys for AirPlace settings --- src/main/java/net/wurstclient/hacks/AirPlaceHack.java | 4 ++-- src/main/resources/assets/wurst/lang/en_us.json | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AirPlaceHack.java b/src/main/java/net/wurstclient/hacks/AirPlaceHack.java index 384afd4f..44639682 100644 --- a/src/main/java/net/wurstclient/hacks/AirPlaceHack.java +++ b/src/main/java/net/wurstclient/hacks/AirPlaceHack.java @@ -41,10 +41,10 @@ public final class AirPlaceHack extends Hack new SliderSetting("Range", 5, 1, 6, 0.05, ValueDisplay.DECIMAL); private final CheckboxSetting guide = new CheckboxSetting("Guide", - "Shows a guide for where blocks will be placed.", true); + "description.wurst.setting.airplace.guide", true); private final ColorSetting guideColor = new ColorSetting("Guide color", - "Color of the block placing guide, if enabled.", Color.RED); + "description.wurst.setting.airplace.guide_color", Color.RED); private BlockPos renderPos; diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index 62e86971..aec2342c 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -1,6 +1,8 @@ { "description.wurst.hack.aimassist": "Helps you aim at nearby entities.", "description.wurst.hack.airplace": "Allows you to place blocks in mid-air.", + "description.wurst.setting.airplace.guide": "Shows a guide for where blocks will be placed.", + "description.wurst.setting.airplace.guide_color": "Color of the block placing guide, if enabled.", "description.wurst.hack.anchoraura": "Automatically places (optional), charges, and detonates respawn anchors to kill entities around you.", "description.wurst.hack.antiafk": "Walks around randomly to hide you from AFK detectors.", "description.wurst.hack.antiblind": "Prevents blindness and darkness effects.\nIncompatible with OptiFine.", From b1c7523921d7ab37edc16f84958251cb81b0a84a Mon Sep 17 00:00:00 2001 From: Clexus <62130504+Clexus@users.noreply.github.com> Date: Fri, 14 Jun 2024 20:40:43 +0800 Subject: [PATCH 038/109] Update zh_cn.json --- .../resources/assets/wurst/lang/zh_cn.json | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/resources/assets/wurst/lang/zh_cn.json b/src/main/resources/assets/wurst/lang/zh_cn.json index c887ebeb..ea180165 100644 --- a/src/main/resources/assets/wurst/lang/zh_cn.json +++ b/src/main/resources/assets/wurst/lang/zh_cn.json @@ -1,6 +1,6 @@ { - "description.wurst.hack.aimassist": "帮助您瞄准附近的实体。", - "description.wurst.hack.airplace": "允许您在空中放置方块。", + "description.wurst.hack.aimassist": "帮助你瞄准附近的实体。", + "description.wurst.hack.airplace": "允许你在空中放置方块。", "description.wurst.hack.anchoraura": "自动放置(可选),充能,引爆重生锚并击杀你附近的实体。", "description.wurst.hack.antiafk": "随机走动,用于避免服务器挂机检测。", "description.wurst.hack.antiblind": "防止失明和黑暗效果。\n与 OptiFine 不兼容。", @@ -16,10 +16,10 @@ "description.wurst.setting.arrowdmg.trident_yeet_mode": "打开之后,三叉戟将飞得更远。似乎不影响伤害以及“激流”魔咒。\n\n§c§l警告:§r打开这个选项之后你很容易弄丢你的三叉戟!", "description.wurst.hack.autoarmor": "自动管理你的盔甲。", "description.wurst.hack.autobuild": "自动建筑东西。\n放一个方块就开始自动建造。", - "description.wurst.hack.autocomplete": "使用大型语言模型自动完成您的聊天消息。 需要具有 API 访问权限的 OpenAI 帐户或与 OpenAI 兼容的任何其他语言模型 API。", + "description.wurst.hack.autocomplete": "使用大型语言模型自动完成你的聊天消息。 需要具有 API 访问权限的 OpenAI 帐户或与 OpenAI 兼容的任何其他语言模型 API。", "description.wurst.hack.autodrop": "自动丢弃你不想要的物品(可以预设)。", "description.wurst.hack.autoleave": "血量过低时自动离开服务器。", - "description.wurst.hack.autolibrarian": "自动训练村民成为图书管理员,出售特定的附魔书。 通过这个技术,您可以立即建立一个完整的村民交易所。", + "description.wurst.hack.autolibrarian": "自动训练村民成为图书管理员,出售特定的附魔书。 通过这个技术,你可以立即建立一个完整的村民交易所。", "description.wurst.hack.autoeat": "当必要的时候将会自动进食(可以预设)。", "description.wurst.setting.autoeat.target_hunger": "在不浪费任何饥饿值的前提下,尝试将饥饿条保持在此水准之上。", "description.wurst.setting.autoeat.min_hunger": "即便浪费一些补充的饥饿值,也总是将饥饿条保持在此水准之上。\n6.5 - 不会导致任何原版食物所补充饥饿值的浪费。\n10.0 - 完全忽视饥饿值的浪费,总是将饥饿条补满。", @@ -54,7 +54,7 @@ "description.wurst.hack.bowaimbot": "当你使用弓或弩时自动瞄准所设定的实体。", "description.wurst.hack.buildrandom": "在你的附近随机放置方块。", "description.wurst.hack.bunnyhop": "让你自动跳跃,但不能做到像 CSGO 一样。", - "description.wurst.hack.cameradistance": "允许您更改第三人的相机距离。", + "description.wurst.hack.cameradistance": "允许你更改第三人称的相机距离。", "description.wurst.hack.cameranoclip": "在第三人称下,可以忽视墙体碰撞而直接把视角穿过去。", "description.wurst.hack.cavefinder": "帮助你找到洞穴并以所选的颜色将他们高亮。", "description.wurst.hack.chattranslator": "利用 Google 翻译翻译聊天框内的信息(在中国大陆内不起效,除非你懂得如何重新起效)。", @@ -69,7 +69,7 @@ "description.wurst.hack.dolphin": "让你在水中漂浮。\n(就像海豚一样)", "description.wurst.hack.excavator": "自动破坏所选区域内的所有方块。", "description.wurst.hack.extraelytra": "让你的鞘翅更加容易使用。", - "description.wurst.hack.fancychat": "在发送消息时,用更好的 Unicode 字符替换 ASCII 字符。这个功能可以用于绕过在一些服务器上对于英文字符的限制。\n但对于那些禁用 Unicode 字符的服务器不起作用。", + "description.wurst.hack.fancychat": "在发送消息时,用更炫酷的 Unicode 字符替换 ASCII 字符。这个功能可以用于绕过在一些服务器上对于英文字符的限制。\n但对于那些禁用 Unicode 字符的服务器不起作用。", "description.wurst.hack.fastbreak": "使你更快地破坏方块。\n提示:可以和 Nuker 功能配合利用。", "description.wurst.hack.fastladder": "加快你攀爬梯子的速度。", "description.wurst.hack.fastplace": "使你放置方块的速度达到原本的5倍或以上。\n提示:这个能增加 AutoBuild 功能的速度。", @@ -98,7 +98,7 @@ "description.wurst.hack.kaboom": "像爆炸一样破坏你附近的方块。\n如果服务器没有反作弊的话,这个可能比 Nuker 功能破坏得更快,使用适合的工具和破坏脆弱的方块可以事半功倍。\n注意:这并不是真正的爆炸。", "description.wurst.hack.killauralegit": "KillauraLegit 更难被反作弊检测。\n在正常的 NoCheat+(NCP)服务器上不需要!", "description.wurst.hack.killaura": "自动攻击你附近的实体。", - "description.wurst.hack.killpotion": "生成一个能杀死绝大多数生物(包括创造模式的玩家)的药水,但对那些不死的生物或者已死生物无效。\n\n需要在创造模式下。", + "description.wurst.hack.killpotion": "生成一个能杀死绝大多数生物(包括创造模式的玩家)的药水,但对那些亡灵生物或者已死生物无效。\n\n需要在创造模式下。", "description.wurst.hack.liquids": "取消无法把方块直接放置在水中的限制,允许你直接在水方块中放置方块。", "description.wurst.hack.lsd": "让你像吃了云南蘑菇一样。", "description.wurst.hack.masstpa": "给每个人发送 TPA 请求。\n\n§c§l警告:§r当在国内服务器使用会因为 Wurst 无法判断中文返回消息而导致 TPA 请求继续。", @@ -108,8 +108,8 @@ "description.wurst.hack.multiaura": "比 Killaura 更高级,能同时攻击多个实体。", "description.wurst.hack.nameprotect": "隐藏所有玩家的名字。", "description.wurst.hack.nametags": "改变名字大小使你更容易看到他们,同时也能让你看到那些潜行玩家的名字。", - "description.wurst.hack.navigator": "一个可以搜索功能的 GUI,会随着时间的推移了解您的偏好。", - "description.wurst.hack.newchunks": "高亮显示您周围新生成的区块。", + "description.wurst.hack.navigator": "一个可以搜索功能的 GUI,会随着时间的推移了解你的偏好。", + "description.wurst.hack.newchunks": "高亮显示你周围新生成的区块。", "description.wurst.hack.nobackground": "移除 GUI 后的暗色背景。", "description.wurst.hack.noclip": "允许你自由地穿过方块。\n一个可以掉落的方块(例如:沙子)掉在你的头顶才能激活。\n\n§c§l警告:§r 你会在你穿墙时受到伤害!", "description.wurst.hack.nocomcrash": "利用 Nocom 漏洞使服务器卡顿或崩溃。\n经测试可在 Vanilla、Spigot 和 Fabric 上工作,Paper 和一些拥有特定反作弊的服务器无法使用。", @@ -117,7 +117,7 @@ "description.wurst.hack.nofireoverlay": "关闭第一人称视角下着火时的火焰贴图。\n\n§c§l警告:§r这可能会导致你因不知道身上有火而烧伤致死。", "description.wurst.hack.nofog": "移除世界天边交界处的迷雾。", "description.wurst.hack.nohurtcam": "关闭因受伤而产生视野摇晃效果。", - "description.wurst.hack.nolevitation": "禁用被潜影贝击中时获得的漂浮效果。\n\n§c§l警告:§r 如果您已经处于漂浮状态下,启用此功能将会使您从高空坠落!", + "description.wurst.hack.nolevitation": "禁用被潜影贝击中时获得的漂浮效果。\n\n§c§l警告:§r 如果你已经处于漂浮状态下,启用此功能将会使你从高空坠落!", "description.wurst.hack.nooverlay": "关闭因在水或岩浆中的视野阻挡。", "description.wurst.hack.nopumpkin": "关闭南瓜头的视野阻挡。", "description.wurst.hack.noshieldoverlay": "降低盾牌使其覆盖更少的屏幕。", @@ -164,7 +164,7 @@ "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警告:§c如果 §c你 §c发送 §c聊天 §c讯息 §c和 §c签名, §c你 §cMinecraft §c帐号 §c可以§c被 §c举报 §c跟 §c全球§c封禁§c在§c多人游戏!§r\n\n即使您在聊天中只说无害的话,您签名的消息也可能被滥用以创建虚假的聊天报告,从而不公平地禁止您的帐户。\n\n如果您必须重新启用聊天签名才能加入伺服器,请考虑根本不使用他们的聊天。或者使用您不介意丢失的替代帐户进行游戏。", + "description.wurst.other_feature.nochatreports": "禁用自 1.19 以来附加到你的聊天消息的加密签名。\n\n§c§l警告:§c如果你发送聊天消息并附加签名, §c你的Minecraft帐号将可以被举报,从而被禁止访问多人游戏!§r\n\n即使你在聊天中说的话并无恶意,你的消息也可能被批量举报从而导致你的账户被封禁。\n\n如果你必须重新启用聊天签名才能加入服务器,请考虑不在此服务器发言。或者使用你不介意被封禁的小号进行游戏。", "button.wurst.nochatreports.disable_signatures": "禁用签名", "button.wurst.nochatreports.re-enable_signatures": "重新启用签名", "description.wurst.setting.generic.attack_speed": "以每秒点击次数计算的攻击速度。\n0 = 根据你的攻击冷却时间动态调整攻击速度。", @@ -183,13 +183,13 @@ "gui.wurst.altmanager.empty.title": "你的备用账户列表为空。", "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 方法中,这种设置与听起来相反。", + "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,您的帐户可能会在全球被封禁", + "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,您可以加入此服务器。", + "gui.wurst.nochatreports.ncr_mod_server.message": "此服务器使用\"No Chat Reports\"模组。\n\n如果你屏蔽了聊天签名并禁用了 VanillaSpoof,你可以加入此服务器。", "button.wurst.nochatreports.signatures_status": "签名: ", - "description.wurst.nochatreports.message_is_reportable": "此消息有一个有效的签名,因此容易受到欺诈性聊天报告的伤害。", + "description.wurst.nochatreports.message_is_reportable": "此消息附加了有效的签名,因此容易受到批量举报的威胁。", "gui.wurst.generic.allcaps_blocked": "黑名单", "gui.wurst.generic.allcaps_allowed": "已允许", "key.wurst.zoom": "缩放" From 211ba7ffd9e54660e1c4f71d67e2466698f4f2ea Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 21 Jun 2024 15:00:34 +0200 Subject: [PATCH 039/109] Make more setting descriptions translatable --- .../net/wurstclient/hacks/AimAssistHack.java | 19 +++++------ .../net/wurstclient/hacks/AnchorAuraHack.java | 34 ++++++++----------- .../net/wurstclient/hacks/AntiAfkHack.java | 32 +++++++---------- .../resources/assets/wurst/lang/en_us.json | 14 ++++++++ 4 files changed, 50 insertions(+), 49 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AimAssistHack.java b/src/main/java/net/wurstclient/hacks/AimAssistHack.java index 8de1d135..4b883b4c 100644 --- a/src/main/java/net/wurstclient/hacks/AimAssistHack.java +++ b/src/main/java/net/wurstclient/hacks/AimAssistHack.java @@ -38,21 +38,20 @@ public final class AimAssistHack extends Hack new SliderSetting("Rotation Speed", 600, 10, 3600, 10, ValueDisplay.DEGREES.withSuffix("/s")); - private final SliderSetting fov = new SliderSetting("FOV", - "Field Of View - how far away from your crosshair an entity can be before it's ignored.\n" - + "360\u00b0 = aims at entities all around you.", - 120, 30, 360, 10, ValueDisplay.DEGREES); + private final SliderSetting fov = + new SliderSetting("FOV", "description.wurst.setting.aimassist.fov", 120, + 30, 360, 10, ValueDisplay.DEGREES); private final AimAtSetting aimAt = new AimAtSetting( "What point in the target's hitbox AimAssist should aim at."); - private final CheckboxSetting checkLOS = new CheckboxSetting( - "Check line of sight", "Won't aim at entities behind blocks.", true); + private final CheckboxSetting checkLOS = + new CheckboxSetting("Check line of sight", + "description.wurst.setting.aimassist.check_line_of_sight", true); - private final CheckboxSetting aimWhileBlocking = new CheckboxSetting( - "Aim while blocking", "Keeps aiming at entities while you're blocking" - + " with a shield or using items.", - false); + private final CheckboxSetting aimWhileBlocking = + new CheckboxSetting("Aim while blocking", + "description.wurst.setting.aimassist.aim_while_blocking", false); private final EntityFilterList entityFilters = new EntityFilterList(FilterPlayersSetting.genericCombat(false), diff --git a/src/main/java/net/wurstclient/hacks/AnchorAuraHack.java b/src/main/java/net/wurstclient/hacks/AnchorAuraHack.java index f4b2c685..2e5b3d88 100644 --- a/src/main/java/net/wurstclient/hacks/AnchorAuraHack.java +++ b/src/main/java/net/wurstclient/hacks/AnchorAuraHack.java @@ -48,37 +48,31 @@ import net.wurstclient.util.RotationUtils; @SearchTags({"anchor aura", "CrystalAura", "crystal aura"}) public final class AnchorAuraHack extends Hack implements UpdateListener { - private final SliderSetting range = new SliderSetting("Range", - "Determines how far AnchorAura will reach to place, charge and detonate anchors.", - 6, 1, 6, 0.05, ValueDisplay.DECIMAL); + private final SliderSetting range = + new SliderSetting("Range", "description.wurst.setting.anchoraura.range", + 6, 1, 6, 0.05, ValueDisplay.DECIMAL); - private final CheckboxSetting autoPlace = new CheckboxSetting( - "Auto-place anchors", - "When enabled, AnchorAura will automatically place anchors near valid entities.\n" - + "When disabled, AnchorAura will only charge and detonate manually placed anchors.", - true); + private final CheckboxSetting autoPlace = + new CheckboxSetting("Auto-place anchors", + "description.wurst.setting.anchoraura.auto-place_anchors", true); private final FacingSetting faceBlocks = FacingSetting.withPacketSpam("Face anchors", - "Whether or not AnchorAura should face the correct direction when" - + " placing and right-clicking respawn anchors.\n\n" - + "Slower but can help with anti-cheat plugins.", - Facing.OFF); + "description.wurst.setting.anchoraura.face_anchors", Facing.OFF); - private final CheckboxSetting checkLOS = new CheckboxSetting( - "Check line of sight", - "Ensures that you don't reach through blocks when placing or right-clicking respawn anchors.\n\n" - + "Slower but can help with anti-cheat plugins.", - false); + private final CheckboxSetting checkLOS = + new CheckboxSetting("Check line of sight", + "description.wurst.setting.anchoraura.check_line_of_sight", false); private final SwingHandSetting swingHand = new SwingHandSetting( "How AnchorAura should swing your hand when placing, charging and" + " detonating respawn anchors.", SwingHand.CLIENT); - private final EnumSetting takeItemsFrom = new EnumSetting<>( - "Take items from", "Where to look for respawn anchors and glowstone.", - TakeItemsFrom.values(), TakeItemsFrom.INVENTORY); + private final EnumSetting takeItemsFrom = + new EnumSetting<>("Take items from", + "description.wurst.setting.anchoraura.take_items_from", + TakeItemsFrom.values(), TakeItemsFrom.INVENTORY); private final EntityFilterList entityFilters = AnchorAuraFilterList.create(); diff --git a/src/main/java/net/wurstclient/hacks/AntiAfkHack.java b/src/main/java/net/wurstclient/hacks/AntiAfkHack.java index 14c21332..c081fef2 100644 --- a/src/main/java/net/wurstclient/hacks/AntiAfkHack.java +++ b/src/main/java/net/wurstclient/hacks/AntiAfkHack.java @@ -36,34 +36,28 @@ public final class AntiAfkHack extends Hack implements UpdateListener, RenderListener { private final CheckboxSetting useAi = new CheckboxSetting("Use AI", - "Uses a pathfinding AI to move around naturally and avoid hazards.\n" - + "Can sometimes get stuck.", - true); + "description.wurst.setting.antiafk.use_ai", true); private final SliderSetting aiRange = new SliderSetting("AI range", - "The area in which AntiAFK can move when Use AI is turned on.", 16, 1, - 64, 1, ValueDisplay.AREA_FROM_RADIUS); + "description.wurst.setting.antiafk.ai_range", 16, 1, 64, 1, + ValueDisplay.AREA_FROM_RADIUS); private final SliderSetting nonAiRange = new SliderSetting("Non-AI range", - "The area in which AntiAFK can move when Use AI is turned off.\n\n" - + "\u00a7c\u00a7lWARNING:\u00a7r This area must be completely" - + " unobstructed and free of hazards.", - 1, 1, 64, 1, ValueDisplay.AREA_FROM_RADIUS); + "description.wurst.setting.antiafk.non-ai_range", 1, 1, 64, 1, + ValueDisplay.AREA_FROM_RADIUS); - private final SliderSetting waitTime = - new SliderSetting("Wait time", "Time between movements in seconds.", - 2.5, 0, 60, 0.05, ValueDisplay.DECIMAL.withSuffix("s")); + private final SliderSetting waitTime = new SliderSetting("Wait time", + "description.wurst.setting.antiafk.wait_time", 2.5, 0, 60, 0.05, + ValueDisplay.DECIMAL.withSuffix("s")); - private final SliderSetting waitTimeRand = - new SliderSetting("Wait time randomization", - "How much time can be randomly added or subtracted from the wait" - + " time, in seconds.", - 0.5, 0, 60, 0.05, - ValueDisplay.DECIMAL.withPrefix("\u00b1").withSuffix("s")); + private final SliderSetting waitTimeRand = new SliderSetting( + "Wait time randomization", + "description.wurst.setting.antiafk.wait_time_randomization", 0.5, 0, 60, + 0.05, ValueDisplay.DECIMAL.withPrefix("\u00b1").withSuffix("s")); private final CheckboxSetting showWaitTime = new CheckboxSetting("Show wait time", - "Displays the remaining wait time in the HackList.", true); + "description.wurst.setting.antiafk.show_wait_time", true); private int timer; private Random random = Random.createLocal(); diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index 3eb76eaa..220b1615 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -1,10 +1,24 @@ { "description.wurst.hack.aimassist": "Helps you aim at nearby entities.", + "description.wurst.setting.aimassist.fov": "Field Of View - how far away from your crosshair an entity can be before it's ignored.\n360° = aims at entities all around you.", + "description.wurst.setting.aimassist.check_line_of_sight": "Won't aim at entities behind blocks.", + "description.wurst.setting.aimassist.aim_while_blocking": "Keeps aiming at entities while you're blocking with a shield or using items.", "description.wurst.hack.airplace": "Allows you to place blocks in mid-air.", "description.wurst.setting.airplace.guide": "Shows a guide for where blocks will be placed.", "description.wurst.setting.airplace.guide_color": "Color of the block placing guide, if enabled.", "description.wurst.hack.anchoraura": "Automatically places (optional), charges, and detonates respawn anchors to kill entities around you.", + "description.wurst.setting.anchoraura.range": "Determines how far AnchorAura will reach to place, charge and detonate anchors.", + "description.wurst.setting.anchoraura.auto-place_anchors": "When enabled, AnchorAura will automatically place anchors near valid entities.\nWhen disabled, AnchorAura will only charge and detonate manually placed anchors.", + "description.wurst.setting.anchoraura.face_anchors": "Whether or not AnchorAura should face the correct direction when placing and right-clicking respawn anchors.\n\nSlower but can help with anti-cheat plugins.", + "description.wurst.setting.anchoraura.check_line_of_sight": "Ensures that you don't reach through blocks when placing or right-clicking respawn anchors.\n\nSlower but can help with anti-cheat plugins.", + "description.wurst.setting.anchoraura.take_items_from": "Where to look for respawn anchors and glowstone.", "description.wurst.hack.antiafk": "Walks around randomly to hide you from AFK detectors.", + "description.wurst.setting.antiafk.use_ai": "Uses a pathfinding AI to move around naturally and avoid hazards.\nCan sometimes get stuck.", + "description.wurst.setting.antiafk.ai_range": "The area in which AntiAFK can move when Use AI is turned on.", + "description.wurst.setting.antiafk.non-ai_range": "The area in which AntiAFK can move when Use AI is turned off.\n\n§c§lWARNING:§r This area must be completely unobstructed and free of hazards.", + "description.wurst.setting.antiafk.wait_time": "Time between movements in seconds.", + "description.wurst.setting.antiafk.wait_time_randomization": "How much time can be randomly added or subtracted from the wait time, in seconds.", + "description.wurst.setting.antiafk.show_wait_time": "Displays the remaining wait time in the HackList.", "description.wurst.hack.antiblind": "Prevents blindness and darkness effects.\nIncompatible with OptiFine.", "description.wurst.hack.anticactus": "Protects you from cactus damage.", "description.wurst.hack.antientitypush": "Prevents you from getting pushed by players and mobs.", From 41210c3f78492c4b2f1076e492f1094ecb2e974b Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 21 Jun 2024 15:18:18 +0200 Subject: [PATCH 040/109] Update org.kohsuke:github-api to 1.322 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 69091fff..ef378ac2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ buildscript { dependencies { - classpath "org.kohsuke:github-api:1.321" + classpath "org.kohsuke:github-api:1.322" } } From cbb3765648cdd7f51c7a66dd103f038e12a4cfc0 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 23 Jun 2024 10:09:43 +0200 Subject: [PATCH 041/109] Add spotless check for JSON files --- .github/workflows/gradle.yml | 2 ++ build.gradle | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 6fd9a896..d0906b28 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -4,11 +4,13 @@ on: push: paths: - '**.java' + - '**.json' - 'gradle**' - 'build.gradle' pull_request: paths: - '**.java' + - '**.json' - 'gradle**' - 'build.gradle' # Makes it possible to run this workflow manually from the Actions tab diff --git a/build.gradle b/build.gradle index ef378ac2..79eee2df 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ dependencies { // // In other words, Wurst won't compile without this library, // even though it's Minecraft that actually uses it. - modImplementation 'com.google.code.findbugs:jsr305:3.0.2' + modImplementation "com.google.code.findbugs:jsr305:3.0.2" } loom { @@ -73,17 +73,21 @@ java { jar { from("LICENSE") { - rename { "${it}_${project.base.archivesName.get()}"} + rename {"${it}_${project.base.archivesName.get()}"} } } spotless { + lineEndings("WINDOWS") java { removeUnusedImports() indentWithTabs() trimTrailingWhitespace() eclipse().configFile(file("codestyle/formatter.xml")) - lineEndings('WINDOWS') + } + json { + target "src/**/*.json" + gson().indentWithSpaces(2).version("2.10.1") } } From 96786bbce9ac3a2b5a8294ee2079ead6acfd271f Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 23 Jun 2024 10:10:22 +0200 Subject: [PATCH 042/109] Fix style issues in JSON files --- .../resources/assets/wurst/lang/cs_cz.json | 366 ++++++++--------- .../resources/assets/wurst/lang/de_de.json | 2 +- .../resources/assets/wurst/lang/en_us.json | 2 +- .../resources/assets/wurst/lang/fr_fr.json | 368 ++++++++--------- .../resources/assets/wurst/lang/it_it.json | 372 ++++++++--------- .../resources/assets/wurst/lang/ko_kr.json | 308 +++++++-------- .../resources/assets/wurst/lang/pl_pl.json | 2 +- .../resources/assets/wurst/lang/ro_ro.json | 356 ++++++++--------- .../resources/assets/wurst/lang/ru_ru.json | 374 +++++++++--------- .../resources/assets/wurst/lang/uk_ua.json | 364 ++++++++--------- .../resources/assets/wurst/lang/zh_cn.json | 2 +- .../resources/assets/wurst/lang/zh_hk.json | 2 +- .../resources/assets/wurst/lang/zh_tw.json | 374 +++++++++--------- src/main/resources/fabric.mod.json | 104 +++-- src/main/resources/wurst.mixins.json | 147 ++++--- 15 files changed, 1569 insertions(+), 1574 deletions(-) diff --git a/src/main/resources/assets/wurst/lang/cs_cz.json b/src/main/resources/assets/wurst/lang/cs_cz.json index b23863c5..ca6f549d 100644 --- a/src/main/resources/assets/wurst/lang/cs_cz.json +++ b/src/main/resources/assets/wurst/lang/cs_cz.json @@ -1,183 +1,183 @@ -{ - "description.wurst.hack.airplace": "Umožňuje umístit bloky do prázdného prostoru.", - "description.wurst.hack.anchoraura": "Automaticky umísťí (volitelně), nabije a odpalí kotvy oživení k zabití entit kolem vás.", - "description.wurst.hack.antiafk": "Prochází se náhodně, aby vás skryl před AFK detektory.", - "description.wurst.hack.antiblind": "Zabraňuje blindness a efekty tmy.\nNekompatibilní s OptiFinem.", - "description.wurst.hack.anticactus": "Chrání vás před poškozením kaktusem.", - "description.wurst.hack.antihunger": "Zpomalí váš hlad, když chodíte.", - "description.wurst.hack.antiknockback": "Zabraní strkání hráči a moby.", - "description.wurst.hack.antispam": "Blokuje spam chatu přidáním čítače k opakovaným zprávám.", - "description.wurst.hack.antiwaterpush": "Zabraňuje posouvání vodou.", - "description.wurst.hack.antiwobble": "Zabraňuje viklavému efektu způsobenému nevolností a portály.", - "description.wurst.hack.arrowdmg": "Masivně zvyšuje poškození šípem, ale také spotřebovává hodně hladu a snižuje přesnost.\n\nNefunguje s kušemi a zdá se nefunkční na Paper serverech.", - "description.wurst.setting.arrowdmg.packets": "Množství odeslaných paketů.\nVíce paketů = větší poškození.", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "Povolením, trojzubce létají mnohem dál. Nezdá se, že by to mělo vliv na poškození nebo Mocný záběr.\n\n§c§lUPOZORNĚNÍ:§r Povolením této možnosti můžete snadno přijít o trojzubec!", - "description.wurst.hack.autoarmor": "Automaticky přehazuje vaše brnění.", - "description.wurst.hack.autobuild": "Automaticky staví.\nUmístěte blok k započatí stavby.", - "description.wurst.hack.autodrop": "Automaticky vyhazuje nechtěné předměty.", - "description.wurst.hack.autoleave": "Automaticky opustí server, když jsou vaše životy nízké.", - "description.wurst.hack.autoeat": "Automaticky jí jídlo, když je potřeba.", - "description.wurst.setting.autoeat.target_hunger": "Snaží se držet laťku hladu na této úrovni nebo nad ní, ale jen v případě, že nepromrhá žádné body hladu.", - "description.wurst.setting.autoeat.min_hunger": "Vždy udržuje laťku hladu na této úrovni nebo nad ní, i když promrhá některé body hladu.\n6.5 - Nepusobí plýtvání s vanilovými potravinami.\n10.0 - Zcela ignoruje plýtvání a jen udržuje hlad plný.", - "description.wurst.setting.autoeat.injured_hunger": "Naplňuje laťku hladu alespoň na tuto úroveň, když jste zraněni, i když to plýtvá některé body hladu.\n10,0 - nejrychlejší hojení\n9,0 - nejpomalejší hojení\n<9,0 - bez hojení <3,5 - bez sprintu", - "description.wurst.setting.autoeat.injury_threshold": "Zabrání drobným úrazům v plýtvání jídlem. AutoEat vás bude považovat za zraněného pouze v případě, že jste ztratil alespoň tento počet srdcí.", - "description.wurst.setting.autoeat.take_items_from": "Kde by měl AutoEat hledat jídlo.", - "description.wurst.setting.autoeat.eat_while_walking": "Zpomaluje, nedoporučuje se.", - "description.wurst.setting.autoeat.allow_hunger": "Shnilé maso má neškodný \"hladový\" efekt.\nJe bezpečné a užitečné jako nouzové jídlo.", - "description.wurst.setting.autoeat.allow_poison": "Jedovatá potrava časem působí poškození.\n Nedoporučuje se.", - "description.wurst.setting.autoeat.allow_chorus": "Ovoce chorusovníku vás teleportuje na náhodné místo.\nNedoporučuje se.", - "description.wurst.hack.autofarm": "Automaticky sklízí a přesazuje plodiny.\nPracuje s pšenicí, mrkví, bramborami, řepou, dýněmi, melouny, kaktusy, cukrovou třtinou, chaluhou, bambusem, bradavičníkem a kakaovými boby.", - "description.wurst.hack.autofish": "Automaticky chytá ryby pomocí vašeho nejlepšího rybářského prutu. Pokud najde lepší prut při rybaření, automaticky na něj přepne.", - "description.wurst.hack.automine": "Automaticky vytěží jakýkoli blok, na který se podíváte.", - "description.wurst.hack.autopotion": "Automaticky hází lektvary okamžitého zdraví, když je vaše zdraví nízké.", - "description.wurst.hack.autoreconnect": "Automaticky se znovu připojí, když vás vyhodí ze serveru.", - "description.wurst.hack.autorespawn": "Automaticky vás oživí, když zemřete.", - "description.wurst.hack.autosign": "Okamžitě napíše jakýkoliv text, který chcete, na každou ceduli, kterou umístíte. Po aktivaci můžete normálně psát na první ceduli a vytvořit tak šablonu pro všechny ostatní cedule.", - "description.wurst.hack.autosoup": "Automaticky jí polévku, když jsou vaše životy nízké.\n\n§lPoznámka:§r Tento hack ignoruje hlad a předpokládá, že konzumace polévky přímo doplňuje vaše zdraví. Pokud server, na kterém hrajete, není takto nastaven, použijte radši AutoEat.", - "description.wurst.hack.autosprint": "Neustálý sprint.", - "description.wurst.hack.autosteal": "Automaticky ukradne vše ze všech truhel a shulkerových schránek, které otevřete.", - "description.wurst.hack.autoswim": "Automaticky spustí animaci plavání.", - "description.wurst.hack.autoswitch": "Neustále přepíná předmět ve vaší ruce.\n\n§lProRada:§r Použijte to v kombinaci s BuildRandom, zatímco máte ve svém hotbaru spoustu různobarevných vlněných nebo betonových bloků.", - "description.wurst.hack.autosword": "Automaticky použije nejlepší zbraň ve vašem hotbaru k útoku na entity.\nRada: Funguje s Killaurou.", - "description.wurst.hack.autotool": "Automaticky vybaví nejrychlejším použitelným nástroj v hotbaru k rozbití bloku.", - "description.wurst.hack.autototem": "Automaticky přesune totemy nesmrtelnosti do vaší druhé ruky.", - "description.wurst.hack.autowalk": "Neustálá chůze.", - "description.wurst.hack.basefinder": "Vyhledá hráčské základny vyhledáváním uměle vytvořených bloků.\nBloky, které vyhledá, budou zvýrazněny vybranou barvou.\nDobré pro vyhledání frakčních základen.", - "description.wurst.hack.blink": "Pozastaví všechny možnosti pohybu při povolení.", - "description.wurst.hack.boatfly": "Umožňuje vám létat s loďkami a jinými vozidly.\nStiskněte Sprint pro rychlejší klesání.", - "description.wurst.hack.bonemealaura": "Automaticky používá kostní moučku na určité druhy rostlin.\nPomocí zaškrtávacích políček určujete tyto druhy rostlin.", - "description.wurst.hack.bowaimbot": "Automaticky zaměří luk nebo kuši.", - "description.wurst.hack.buildrandom": "Náhodně umísťuje bloky kolem vás.", - "description.wurst.hack.bunnyhop": "Neustálé skákání.", - "description.wurst.hack.cameradistance": "Umožňuje změnit vzdálenost kamery ve 3. osobě.", - "description.wurst.hack.cameranoclip": "Umožňuje kameře ve třetí osobě procházet zdmi.", - "description.wurst.hack.cavefinder": "Pomáhá najít jeskyně tím, že je zvýrazní vybranou barvou.", - "description.wurst.hack.chattranslator": "Překládá příchozí zprávy v chatu pomocí Google Translate.", - "description.wurst.hack.chestesp": "Zvýrazní okolní truhly.", - "description.wurst.hack.clickaura": "S každým kliknutím automaticky zaútočí na nejbližší platnou entitu.\n\n§c§lWAROVÁNÍ:§r ClickAury sjou obecně podezřelejší než Killaury a jsou i snadněji rozpoznatelné pro pluginy. Doporučuje se namísto nich používat buďto Killauru, či TriggerBota.", - "description.wurst.hack.clickgui": "Okenní rozhraní ClickGUI.", - "description.wurst.hack.crashchest": "Generuje truhlu, která lidem v podstatě zakáže přístup k serveru pokud jich mají v inventáři příliš mnoho. §c§lVAROVÁNÍ:§r §cToto nelze vzít zpět. Používejte s opatrností!§r\n\nPokud se místo toho vloží kopie do truhly, každý, kdo truhlu otevře, bude ze serveru jen odpojen (může se znovupřipojit).", - "description.wurst.hack.creativeflight": "Umožňuje létat jako v kreativním režimu.\n\n§c§lVAROVÁNÍ:§r Pokud nepoužíváte NoFall, dojde k zranění pádem.", - "description.wurst.hack.criticals": "Změní všechny vaše údery na kritické.", - "description.wurst.hack.crystalaura": "Automaticky umístí (volitelně) a odpálí endové krystaly, k zabití entit kolem vás.", - "description.wurst.hack.derp": "Šibuje s hlavou do všech stran.\nViditelné jen ostatním hráčům.", - "description.wurst.hack.dolphin": "Neustálé nadskakování ve vodě.\n(úplně jako delfín)", - "description.wurst.hack.excavator": "Automaticky ztěží všechny bloky ve vybrané oblasti.", - "description.wurst.hack.extraelytra": "Usnadňuje používání Elytry.", - "description.wurst.hack.fancychat": "Nahradí ASCII znaky ve vašich zprávách hezčími unicode znaky. Lze využít k obcházení filtru sprostých slov na některých serverech.\nNefunguje na serverech, které blokují znaky unicode.", - "description.wurst.hack.fastbreak": "Umožňuje rozbíjet bloky rychleji.\nTip: Funguje s Nukerem.", - "description.wurst.hack.fastladder": "Umožňuje rychlejší šplhání po žebřících.", - "description.wurst.hack.fastplace": "Umožňuje umístit bloky 5x rychleji.\nRada: Může urychlit další hacky jako AutoBuild.", - "description.wurst.hack.feedaura": "Automaticky krmí zvířata kolem vás.", - "description.wurst.hack.fightbot": "Bot, který automaticky pochoduje kolem a všechno zabíjí.\nDobré pro MobArenu.", - "description.wurst.hack.fish": "Deaktivuje podvodní gravitaci, takže můžete plavat jako ryba.", - "description.wurst.hack.flight": "Umožňuje létat.\n\n§c§lUPOZORNĚNÍ:§r Budete poškozeni pádem, pokud nepoužijete NoFall.", - "description.wurst.hack.follow": "Bot, který následuje nejbližší entitu.\nVelice otravné.\n\nPoužijte .follow pro sledování konkrétní entity.", - "description.wurst.hack.forceop": "Prolomuje AuthMe hesla.\nLze použít k získání OP.", - "description.wurst.hack.freecam": "Umožňuje pohybovat kamerou, aniž byste pohnuli postavou.", - "description.wurst.hack.fullbright": "Umožňuje vidět ve tmě.", - "description.wurst.hack.glide": "Při pádu padáte dolů pomalu.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužíváte NoFall, zraníte se pádem.", - "description.wurst.hack.handnoclip": "Umožňuje dosáhnout určitých bloků skrz zdi.", - "description.wurst.hack.headroll": "Neustále přikyvujete.\nViditelné jen ostatními.", - "description.wurst.hack.healthtags": "Ukazuje zdraví hráčů v jejich jmenovkách.", - "description.wurst.hack.highjump": "Umožňuje skákat výš.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužIJETE NoFall, zraníte se pádem.", - "description.wurst.hack.infinichat": "Odstraňuje limit 256 znaků z chatu.\nUžitečné pro dlouhé příkazy, které upravují data NBT.\n\n§6§lPOZNÁMKA:§r Nedoporučuje se pro komunikaci s ostatníma. Většina serverů na svém konci zkrátí zprávy na 256 znaků.", - "description.wurst.hack.instantbunker": "Postaví kolem vás malý bunkr. Potřebuje 57 bloků.", - "description.wurst.hack.invwalk": "Umožňuje pohyb s otevřeným inventářem.", - "description.wurst.setting.invwalk.allow_clickgui": "Umožňuje pohyb s otevřeným Wurstským ClickGUI.", - "description.wurst.setting.invwalk.allow_other": "Umožňuje pohybovat se s dalšími překrytími (např. truhly, koně, obchodu s vesničany...), pokud obrazovka neobsahuje textové pole (např. cedule).", - "description.wurst.hack.itemesp": "Zvýrazní blízké položky.", - "description.wurst.hack.itemgenerator": "Vytváří náhodné položky a odhazuje je na zem.\n§oPouze v kreativním režiu.§r", - "description.wurst.hack.jesus": "Umožňuje chodit po vodě.\nJežíš použil tento hack asi tak před 2000 lety.", - "description.wurst.hack.jetpack": "Umožňuje létat, jako byste měli jetpack.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužijete NoFall, zraníte se pádem.", - "description.wurst.hack.kaboom": "Rozbíjí bloky kolem vás polo-explozí.\nMůže být mnohem rychlejší než Nuker, pokud server nemá NoCheat+. Nejlépe to funguje s rychlými nástroji a slabými bloky.\nPoznámka: Nejedná se o skutečnou explozi.", - "description.wurst.hack.killauralegit": "Pomalejší, hůře detekovatelná Killaura.\nZbytečné na obyčejných NoCheat+ serverech!", - "description.wurst.hack.killaura": "Automaticky útočí na entity kolem vás.", - "description.wurst.hack.killpotion": "Vytvoří lektvar, který může zabít téměř cokoliv, včetně hráčů v kreativním režimu. Nefunguje na nemrtvé, protože jsou již mrtví.\n\nVyžaduje kreativní režim.", - "description.wurst.hack.liquids": "Umožňuje umístit bloky do kapalin.", - "description.wurst.hack.lsd": "Způsobuje halucinace.", - "description.wurst.hack.masstpa": "Odešle požadavek na TPA všem hráčům.", - "description.wurst.hack.mileycyrus": "Neustálé twerkování.", - "description.wurst.hack.mobesp": "Zvýrazní moby v okolí.", - "description.wurst.hack.mobspawnesp": "Zvýrazní oblasti, kde se mohou mobové objevovat.\n§ežlutá§r - mobové se mohou oběvovat v noci\n§cred§r - mobové se mohou oběvovat vždy", - "description.wurst.hack.multiaura": "Rychlejší Killaura, která útočí na více entit najednou.", - "description.wurst.hack.nameprotect": "Skryje jména všech hráčů.", - "description.wurst.hack.nametags": "Změní měřítko jmenovek tak, abyste je mohli vždy číst. Také vám umožní vidět jmenovky krčících se hráčů.", - "description.wurst.hack.navigator": "Prohledávatelné GUI, které se časem naučí vaše preference.", - "description.wurst.hack.newchunks": "Zvýrazní nově generované chunky kolem vás.", - "description.wurst.hack.nobackground": "Odstraní tmavé pozadí za inventářem.", - "description.wurst.hack.noclip": "Umožňuje volný pohyb mezi bloky.\nBlok (např. písek) musí spadnout na vaši hlavu k aktivovaci.\n\n§c§lUPOZORNĚNÍ:§r Při pohybu mezi bloky se budete zraňovat!", - "description.wurst.hack.nocomcrash": "Laguje a shazuje servery Nocom exploitem.\nNefunguje na Paper serverech. Testováno na Vanile, Spigotu a Fabricu. Některé AntiCheaty mohou znemožňovat jeho použití.", - "description.wurst.hack.nofall": "Chrání vás před poškozením pádem.", - "description.wurst.hack.nofireoverlay": "Blokuje překrytí ohně.\n\n§c§lUPOZORNĚNÍ:§r Může způsobit uhoření bez povšimnutí.", - "description.wurst.hack.nohurtcam": "Zakáže třes obrazovky při zranění.", - "description.wurst.hack.nolevitation": "Odstraní efekt levitace, když vás zasáhne Shulker.\n\n§c§lVAROVÁNÍ:§r Pokud toto zapnete během levitace, spadnete!", - "description.wurst.hack.nooverlay": "Blokuje překrytí vody a lávy.", - "description.wurst.hack.nopumpkin": "Blokuje překrytí dýně na hlavě.", - "description.wurst.hack.noslowdown": "Zruší zpomalení medem, písekm duší i používáním itemů.", - "description.wurst.hack.noweather": "Umožňuje změnit počasí, čas a fázi měsíce na straně klienta.", - "description.wurst.hack.noweb": "Zabraňuje zpomalení pavučinami.", - "description.wurst.hack.nuker": "Automaticky ničí bloky kolem vás.", - "description.wurst.hack.nukerlegit": "Pomalejší Nuker, který obchází všechny moduly AntiCheat.\nNení vyžadován na běžných serverech s NoCheat+!", - "description.wurst.hack.openwateresp": "Zobrazí, zda rybaříte na otevřené vodě, nebo ne, a nakreslí ohraničení kolem oblasti, která se považuje za otevřenou vodu.", - "description.wurst.hack.overlay": "Vykreslí Nukerovu animaci, kdykoli vytěžíte blok.", - "description.wurst.hack.panic": "Okamžitě vypne všechny povolené hacky.\nS tímhle opatrně!", - "description.wurst.hack.parkour": "Při dosažení hrany bloku skáčete automaticky.\nUžitečné pro parkoury a skoko-běhách.", - "description.wurst.hack.playeresp": "Zvýrazní okolní hráče.\nESP boxy přátel se zobrazí modře.", - "description.wurst.hack.portalgui": "Umožňuje otevření inventářů v portálech.", - "description.wurst.hack.potionsaver": "Pozastaví všecny efekty lektvarů, dokud stojíte na místě.", - "description.wurst.hack.prophuntesp": "Umožňuje vidět falešné bloky v Prophuntu.\nVyrobeno pro Mineplexí Prophunt. Může však fungovat i na jiných serverech.", - "description.wurst.hack.protect": "Bot, který sleduje nejbližší entitu a chrání ji před ostatními entitami.\nPoužijte .protect k ochraně konkrétní entity místo té nejbližší.", - "description.wurst.hack.radar": "Zobrazí polohu blízkých entit.\n§cčerveně§r - hráči\n§6oranžově§r - monstra\n§azeleně§r - zvířata\n§7šedě§r - ostatní", - "description.wurst.hack.rainbowui": "§cD§aě§9l§cá §av§9š§ce§ac§9h§cn§ao §9k§cr§aá§9s§cn§aě §9b§ca§ar§9e§cv§an§9é§c.", - "description.wurst.hack.reach": "Umožňuje dosáhnout dále.", - "description.wurst.hack.remoteview": "Umožňuje vidět svět pohledem někoho jiného.\nPoužijte příkaz .rv k použití na konkrétní entitu.", - "description.wurst.hack.safewalk": "Zabraňuje pádu z hran.", - "description.wurst.hack.scaffoldwalk": "Automaticky umísťuje bloky pod nohy.", - "description.wurst.hack.search": "Pomáhá najít konkrétní bloky zvýrazněním jich barevně.", - "description.wurst.hack.skinderp": "Náhodně přepíná části postavy.", - "description.wurst.hack.sneak": "Neustálé plížení.", - "description.wurst.hack.snowshoe": "Umožňuje chůzi po prašanu.", - "description.wurst.hack.speedhack": "Umožní vám běžet ~2.5x rychleji, než byste běželi sprintem se skokem.\n\n§6§lVAROVÁNÍ:§r Opraveno v NoCheat+ verzi 3.13.2. Obchází pouze starší verze NoCheat+.\nNapište §l/ncp version§r pro kontrolu verze NoCheat+ na serveru.", - "description.wurst.hack.speednuker": "Rychlejší verze nukeru, která nemůže obejít NoCheat+.", - "description.wurst.hack.spider": "Umožňuje šplhat po zdech jako pavouk.", - "description.wurst.hack.step": "Samovýstup celých bloků jako u schodů.", - "description.wurst.hack.throw": "Použije položku vícekrát. Lze použít k vrhání sněhových koulí a vajec, vyvolání mobů, umisťování vozíků, atd. ve velmi velkém množství.\n\nTo může způsobit velké zpomalení a dokonce i pád serveru.", - "description.wurst.hack.tillaura": "Automaticky zorá hlínu, trávu, atd. na zemědělskou půdu.\nNezaměňovat s Killaurou.", - "description.wurst.hack.timer": "Mění rychlost téměř všeho.", - "description.wurst.hack.tired": "Vypadáte jako Alexander v dubnu 2015.\nViditelný jen ostatními hráči.", - "description.wurst.hack.toomanyhax": "Blokuje všechny funkce, které nechcete.\nUmožňuje vám ujistit se, že omylem nepovolíte špatný hack a nedostanete za to ban.\nPro ty, kteří chtějí 'hackovat jen trochu'.\n\nPoužijte příkaz §6.toomanyhax§r pro výběr, které funkce budou zablokovány.\nNapište §6.help toomanyhax§r pro více informací.", - "description.wurst.hack.tp-aura": "Automaticky útočí na nejbližší platnou entitu, zatímco se teleportuje kolem ní.", - "description.wurst.hack.trajectories": "Předvídá dráhu letu šipek a hoditelných předmětů.", - "description.wurst.hack.treebot": "Experimentální bot, který automaticky chodí kolem a kácí stromy.\nProzatím omezeno na malé stromy.", - "description.wurst.hack.triggerbot": "Automaticky zaútočí na entitu, na kterou se díváte.", - "description.wurst.hack.trollpotion": "Vytvoří lektvar s mnoha otravnými účinky.", - "description.wurst.hack.truesight": "Umožňuje vidět neviditelné entity.", - "description.wurst.hack.tunneller": "Automaticky kope tunel.\n\n§c§lUPOZORNĚNÍ:§r I když se tento bot pokusí vyhnout lávě a dalším nebezpečím, není zaručeno, že nezemře. Vyšlete ho jen s výstrojí, o kterou vám nevadí přijít.", - "description.wurst.hack.x-ray": "Zobrazuje rudy skrz bloky.", - "button.wurst.nochatreports.disable_signatures": "Vypnout podpisy", - "button.wurst.nochatreports.re-enable_signatures": "Znovu povolit podpisy", - "description.wurst.setting.generic.attack_speed": "Rychlost útoku v klikách za sekundu.\n0 = dynamicky upravuje rychlost tak, aby odpovídala zpomalení útoku.", - "description.wurst.setting.generic.pause_attack_on_containers": "Nebude útočit, pokud je otevřený inventář (truhly, dávkovače, atd.)\nUžitečné pro minihry, které mají menu, které vypadá jako truhla.", - "description.wurst.altmanager.premium": "Tento alt má heslo a může se připojit ke všem serverům.", - "description.wurst.altmanager.cracked": "Tento alt nemá heslo a bude fungovat pouze na cracknutých serverech.", - "description.wurst.altmanager.failed": "Posledně, když jste se pokoušeli přihlásit s tímhle altem, nefungovalo to.", - "description.wurst.altmanager.checked": "Heslo v minulosti fungovalo.", - "description.wurst.altmanager.unchecked": "S tímto altem jste se nikdy úspěšně nepřihlásili.", - "description.wurst.altmanager.favorite": "Označili jste tento alt jako jeden z vašich oblíbených.", - "description.wurst.altmanager.window": "Toto tlačítko otevře jiné okno.", - "description.wurst.altmanager.window_freeze": "Může to vypadat, že hra neodpovídá, dokud je toto okno otevřené.", - "description.wurst.altmanager.fullscreen": "§cVypnout režim celé obrazovky!", - "gui.wurst.altmanager.folder_error.title": "Nelze vytvořit složku '.Wurst encryption'!", - "gui.wurst.altmanager.folder_error.message": "Možná jste omylem zablokovali Wurstu přístup k této složce.\nAltManager bez ní nemůže šifrovat nebo dešifrovat váš seznam altů.\nStále můžete používat AltManager, ale žádné alty, které nyní vytvoříte, nebudou uloženy.\n\nCelá chyba zní následovně:\n%s", - "gui.wurst.altmanager.empty.title": "Váš seznam altů je prázdný.", - "gui.wurst.altmanager.empty.message": "Chcete na začátek nějaké náhodné alty?", - "gui.wurst.nochatreports.unsafe_server.title": "§4§lVAROVÁNÍ:§r Nebezpečný server", - "toast.wurst.nochatreports.unsafe_server.title": "Zprávy v chatu mohou být nahlášeny", - "toast.wurst.nochatreports.unsafe_server.message": "Zprávy odeslané na tomto serveru mohou být nahlášené do Mojangu, který vás může globálně zabanovat", - "gui.wurst.nochatreports.ncr_mod_server.title": "Server \"No Chat Reports\"", - "button.wurst.nochatreports.signatures_status": "Podpisy: ", - "description.wurst.nochatreports.message_is_reportable": "Tato zpráva má platný podpis, a proto je zranitelná vůči podvodným nahlášením v chatu.", - "gui.wurst.generic.allcaps_blocked": "BLOKOVÁNO", - "gui.wurst.generic.allcaps_allowed": "POVOLENO" -} \ No newline at end of file +{ + "description.wurst.hack.airplace": "Umožňuje umístit bloky do prázdného prostoru.", + "description.wurst.hack.anchoraura": "Automaticky umísťí (volitelně), nabije a odpalí kotvy oživení k zabití entit kolem vás.", + "description.wurst.hack.antiafk": "Prochází se náhodně, aby vás skryl před AFK detektory.", + "description.wurst.hack.antiblind": "Zabraňuje blindness a efekty tmy.\nNekompatibilní s OptiFinem.", + "description.wurst.hack.anticactus": "Chrání vás před poškozením kaktusem.", + "description.wurst.hack.antihunger": "Zpomalí váš hlad, když chodíte.", + "description.wurst.hack.antiknockback": "Zabraní strkání hráči a moby.", + "description.wurst.hack.antispam": "Blokuje spam chatu přidáním čítače k opakovaným zprávám.", + "description.wurst.hack.antiwaterpush": "Zabraňuje posouvání vodou.", + "description.wurst.hack.antiwobble": "Zabraňuje viklavému efektu způsobenému nevolností a portály.", + "description.wurst.hack.arrowdmg": "Masivně zvyšuje poškození šípem, ale také spotřebovává hodně hladu a snižuje přesnost.\n\nNefunguje s kušemi a zdá se nefunkční na Paper serverech.", + "description.wurst.setting.arrowdmg.packets": "Množství odeslaných paketů.\nVíce paketů = větší poškození.", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "Povolením, trojzubce létají mnohem dál. Nezdá se, že by to mělo vliv na poškození nebo Mocný záběr.\n\n§c§lUPOZORNĚNÍ:§r Povolením této možnosti můžete snadno přijít o trojzubec!", + "description.wurst.hack.autoarmor": "Automaticky přehazuje vaše brnění.", + "description.wurst.hack.autobuild": "Automaticky staví.\nUmístěte blok k započatí stavby.", + "description.wurst.hack.autodrop": "Automaticky vyhazuje nechtěné předměty.", + "description.wurst.hack.autoleave": "Automaticky opustí server, když jsou vaše životy nízké.", + "description.wurst.hack.autoeat": "Automaticky jí jídlo, když je potřeba.", + "description.wurst.setting.autoeat.target_hunger": "Snaží se držet laťku hladu na této úrovni nebo nad ní, ale jen v případě, že nepromrhá žádné body hladu.", + "description.wurst.setting.autoeat.min_hunger": "Vždy udržuje laťku hladu na této úrovni nebo nad ní, i když promrhá některé body hladu.\n6.5 - Nepusobí plýtvání s vanilovými potravinami.\n10.0 - Zcela ignoruje plýtvání a jen udržuje hlad plný.", + "description.wurst.setting.autoeat.injured_hunger": "Naplňuje laťku hladu alespoň na tuto úroveň, když jste zraněni, i když to plýtvá některé body hladu.\n10,0 - nejrychlejší hojení\n9,0 - nejpomalejší hojení\n<9,0 - bez hojení <3,5 - bez sprintu", + "description.wurst.setting.autoeat.injury_threshold": "Zabrání drobným úrazům v plýtvání jídlem. AutoEat vás bude považovat za zraněného pouze v případě, že jste ztratil alespoň tento počet srdcí.", + "description.wurst.setting.autoeat.take_items_from": "Kde by měl AutoEat hledat jídlo.", + "description.wurst.setting.autoeat.eat_while_walking": "Zpomaluje, nedoporučuje se.", + "description.wurst.setting.autoeat.allow_hunger": "Shnilé maso má neškodný \"hladový\" efekt.\nJe bezpečné a užitečné jako nouzové jídlo.", + "description.wurst.setting.autoeat.allow_poison": "Jedovatá potrava časem působí poškození.\n Nedoporučuje se.", + "description.wurst.setting.autoeat.allow_chorus": "Ovoce chorusovníku vás teleportuje na náhodné místo.\nNedoporučuje se.", + "description.wurst.hack.autofarm": "Automaticky sklízí a přesazuje plodiny.\nPracuje s pšenicí, mrkví, bramborami, řepou, dýněmi, melouny, kaktusy, cukrovou třtinou, chaluhou, bambusem, bradavičníkem a kakaovými boby.", + "description.wurst.hack.autofish": "Automaticky chytá ryby pomocí vašeho nejlepšího rybářského prutu. Pokud najde lepší prut při rybaření, automaticky na něj přepne.", + "description.wurst.hack.automine": "Automaticky vytěží jakýkoli blok, na který se podíváte.", + "description.wurst.hack.autopotion": "Automaticky hází lektvary okamžitého zdraví, když je vaše zdraví nízké.", + "description.wurst.hack.autoreconnect": "Automaticky se znovu připojí, když vás vyhodí ze serveru.", + "description.wurst.hack.autorespawn": "Automaticky vás oživí, když zemřete.", + "description.wurst.hack.autosign": "Okamžitě napíše jakýkoliv text, který chcete, na každou ceduli, kterou umístíte. Po aktivaci můžete normálně psát na první ceduli a vytvořit tak šablonu pro všechny ostatní cedule.", + "description.wurst.hack.autosoup": "Automaticky jí polévku, když jsou vaše životy nízké.\n\n§lPoznámka:§r Tento hack ignoruje hlad a předpokládá, že konzumace polévky přímo doplňuje vaše zdraví. Pokud server, na kterém hrajete, není takto nastaven, použijte radši AutoEat.", + "description.wurst.hack.autosprint": "Neustálý sprint.", + "description.wurst.hack.autosteal": "Automaticky ukradne vše ze všech truhel a shulkerových schránek, které otevřete.", + "description.wurst.hack.autoswim": "Automaticky spustí animaci plavání.", + "description.wurst.hack.autoswitch": "Neustále přepíná předmět ve vaší ruce.\n\n§lProRada:§r Použijte to v kombinaci s BuildRandom, zatímco máte ve svém hotbaru spoustu různobarevných vlněných nebo betonových bloků.", + "description.wurst.hack.autosword": "Automaticky použije nejlepší zbraň ve vašem hotbaru k útoku na entity.\nRada: Funguje s Killaurou.", + "description.wurst.hack.autotool": "Automaticky vybaví nejrychlejším použitelným nástroj v hotbaru k rozbití bloku.", + "description.wurst.hack.autototem": "Automaticky přesune totemy nesmrtelnosti do vaší druhé ruky.", + "description.wurst.hack.autowalk": "Neustálá chůze.", + "description.wurst.hack.basefinder": "Vyhledá hráčské základny vyhledáváním uměle vytvořených bloků.\nBloky, které vyhledá, budou zvýrazněny vybranou barvou.\nDobré pro vyhledání frakčních základen.", + "description.wurst.hack.blink": "Pozastaví všechny možnosti pohybu při povolení.", + "description.wurst.hack.boatfly": "Umožňuje vám létat s loďkami a jinými vozidly.\nStiskněte Sprint pro rychlejší klesání.", + "description.wurst.hack.bonemealaura": "Automaticky používá kostní moučku na určité druhy rostlin.\nPomocí zaškrtávacích políček určujete tyto druhy rostlin.", + "description.wurst.hack.bowaimbot": "Automaticky zaměří luk nebo kuši.", + "description.wurst.hack.buildrandom": "Náhodně umísťuje bloky kolem vás.", + "description.wurst.hack.bunnyhop": "Neustálé skákání.", + "description.wurst.hack.cameradistance": "Umožňuje změnit vzdálenost kamery ve 3. osobě.", + "description.wurst.hack.cameranoclip": "Umožňuje kameře ve třetí osobě procházet zdmi.", + "description.wurst.hack.cavefinder": "Pomáhá najít jeskyně tím, že je zvýrazní vybranou barvou.", + "description.wurst.hack.chattranslator": "Překládá příchozí zprávy v chatu pomocí Google Translate.", + "description.wurst.hack.chestesp": "Zvýrazní okolní truhly.", + "description.wurst.hack.clickaura": "S každým kliknutím automaticky zaútočí na nejbližší platnou entitu.\n\n§c§lWAROVÁNÍ:§r ClickAury sjou obecně podezřelejší než Killaury a jsou i snadněji rozpoznatelné pro pluginy. Doporučuje se namísto nich používat buďto Killauru, či TriggerBota.", + "description.wurst.hack.clickgui": "Okenní rozhraní ClickGUI.", + "description.wurst.hack.crashchest": "Generuje truhlu, která lidem v podstatě zakáže přístup k serveru pokud jich mají v inventáři příliš mnoho. §c§lVAROVÁNÍ:§r §cToto nelze vzít zpět. Používejte s opatrností!§r\n\nPokud se místo toho vloží kopie do truhly, každý, kdo truhlu otevře, bude ze serveru jen odpojen (může se znovupřipojit).", + "description.wurst.hack.creativeflight": "Umožňuje létat jako v kreativním režimu.\n\n§c§lVAROVÁNÍ:§r Pokud nepoužíváte NoFall, dojde k zranění pádem.", + "description.wurst.hack.criticals": "Změní všechny vaše údery na kritické.", + "description.wurst.hack.crystalaura": "Automaticky umístí (volitelně) a odpálí endové krystaly, k zabití entit kolem vás.", + "description.wurst.hack.derp": "Šibuje s hlavou do všech stran.\nViditelné jen ostatním hráčům.", + "description.wurst.hack.dolphin": "Neustálé nadskakování ve vodě.\n(úplně jako delfín)", + "description.wurst.hack.excavator": "Automaticky ztěží všechny bloky ve vybrané oblasti.", + "description.wurst.hack.extraelytra": "Usnadňuje používání Elytry.", + "description.wurst.hack.fancychat": "Nahradí ASCII znaky ve vašich zprávách hezčími unicode znaky. Lze využít k obcházení filtru sprostých slov na některých serverech.\nNefunguje na serverech, které blokují znaky unicode.", + "description.wurst.hack.fastbreak": "Umožňuje rozbíjet bloky rychleji.\nTip: Funguje s Nukerem.", + "description.wurst.hack.fastladder": "Umožňuje rychlejší šplhání po žebřících.", + "description.wurst.hack.fastplace": "Umožňuje umístit bloky 5x rychleji.\nRada: Může urychlit další hacky jako AutoBuild.", + "description.wurst.hack.feedaura": "Automaticky krmí zvířata kolem vás.", + "description.wurst.hack.fightbot": "Bot, který automaticky pochoduje kolem a všechno zabíjí.\nDobré pro MobArenu.", + "description.wurst.hack.fish": "Deaktivuje podvodní gravitaci, takže můžete plavat jako ryba.", + "description.wurst.hack.flight": "Umožňuje létat.\n\n§c§lUPOZORNĚNÍ:§r Budete poškozeni pádem, pokud nepoužijete NoFall.", + "description.wurst.hack.follow": "Bot, který následuje nejbližší entitu.\nVelice otravné.\n\nPoužijte .follow pro sledování konkrétní entity.", + "description.wurst.hack.forceop": "Prolomuje AuthMe hesla.\nLze použít k získání OP.", + "description.wurst.hack.freecam": "Umožňuje pohybovat kamerou, aniž byste pohnuli postavou.", + "description.wurst.hack.fullbright": "Umožňuje vidět ve tmě.", + "description.wurst.hack.glide": "Při pádu padáte dolů pomalu.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužíváte NoFall, zraníte se pádem.", + "description.wurst.hack.handnoclip": "Umožňuje dosáhnout určitých bloků skrz zdi.", + "description.wurst.hack.headroll": "Neustále přikyvujete.\nViditelné jen ostatními.", + "description.wurst.hack.healthtags": "Ukazuje zdraví hráčů v jejich jmenovkách.", + "description.wurst.hack.highjump": "Umožňuje skákat výš.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužIJETE NoFall, zraníte se pádem.", + "description.wurst.hack.infinichat": "Odstraňuje limit 256 znaků z chatu.\nUžitečné pro dlouhé příkazy, které upravují data NBT.\n\n§6§lPOZNÁMKA:§r Nedoporučuje se pro komunikaci s ostatníma. Většina serverů na svém konci zkrátí zprávy na 256 znaků.", + "description.wurst.hack.instantbunker": "Postaví kolem vás malý bunkr. Potřebuje 57 bloků.", + "description.wurst.hack.invwalk": "Umožňuje pohyb s otevřeným inventářem.", + "description.wurst.setting.invwalk.allow_clickgui": "Umožňuje pohyb s otevřeným Wurstským ClickGUI.", + "description.wurst.setting.invwalk.allow_other": "Umožňuje pohybovat se s dalšími překrytími (např. truhly, koně, obchodu s vesničany...), pokud obrazovka neobsahuje textové pole (např. cedule).", + "description.wurst.hack.itemesp": "Zvýrazní blízké položky.", + "description.wurst.hack.itemgenerator": "Vytváří náhodné položky a odhazuje je na zem.\n§oPouze v kreativním režiu.§r", + "description.wurst.hack.jesus": "Umožňuje chodit po vodě.\nJežíš použil tento hack asi tak před 2000 lety.", + "description.wurst.hack.jetpack": "Umožňuje létat, jako byste měli jetpack.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužijete NoFall, zraníte se pádem.", + "description.wurst.hack.kaboom": "Rozbíjí bloky kolem vás polo-explozí.\nMůže být mnohem rychlejší než Nuker, pokud server nemá NoCheat+. Nejlépe to funguje s rychlými nástroji a slabými bloky.\nPoznámka: Nejedná se o skutečnou explozi.", + "description.wurst.hack.killauralegit": "Pomalejší, hůře detekovatelná Killaura.\nZbytečné na obyčejných NoCheat+ serverech!", + "description.wurst.hack.killaura": "Automaticky útočí na entity kolem vás.", + "description.wurst.hack.killpotion": "Vytvoří lektvar, který může zabít téměř cokoliv, včetně hráčů v kreativním režimu. Nefunguje na nemrtvé, protože jsou již mrtví.\n\nVyžaduje kreativní režim.", + "description.wurst.hack.liquids": "Umožňuje umístit bloky do kapalin.", + "description.wurst.hack.lsd": "Způsobuje halucinace.", + "description.wurst.hack.masstpa": "Odešle požadavek na TPA všem hráčům.", + "description.wurst.hack.mileycyrus": "Neustálé twerkování.", + "description.wurst.hack.mobesp": "Zvýrazní moby v okolí.", + "description.wurst.hack.mobspawnesp": "Zvýrazní oblasti, kde se mohou mobové objevovat.\n§ežlutá§r - mobové se mohou oběvovat v noci\n§cred§r - mobové se mohou oběvovat vždy", + "description.wurst.hack.multiaura": "Rychlejší Killaura, která útočí na více entit najednou.", + "description.wurst.hack.nameprotect": "Skryje jména všech hráčů.", + "description.wurst.hack.nametags": "Změní měřítko jmenovek tak, abyste je mohli vždy číst. Také vám umožní vidět jmenovky krčících se hráčů.", + "description.wurst.hack.navigator": "Prohledávatelné GUI, které se časem naučí vaše preference.", + "description.wurst.hack.newchunks": "Zvýrazní nově generované chunky kolem vás.", + "description.wurst.hack.nobackground": "Odstraní tmavé pozadí za inventářem.", + "description.wurst.hack.noclip": "Umožňuje volný pohyb mezi bloky.\nBlok (např. písek) musí spadnout na vaši hlavu k aktivovaci.\n\n§c§lUPOZORNĚNÍ:§r Při pohybu mezi bloky se budete zraňovat!", + "description.wurst.hack.nocomcrash": "Laguje a shazuje servery Nocom exploitem.\nNefunguje na Paper serverech. Testováno na Vanile, Spigotu a Fabricu. Některé AntiCheaty mohou znemožňovat jeho použití.", + "description.wurst.hack.nofall": "Chrání vás před poškozením pádem.", + "description.wurst.hack.nofireoverlay": "Blokuje překrytí ohně.\n\n§c§lUPOZORNĚNÍ:§r Může způsobit uhoření bez povšimnutí.", + "description.wurst.hack.nohurtcam": "Zakáže třes obrazovky při zranění.", + "description.wurst.hack.nolevitation": "Odstraní efekt levitace, když vás zasáhne Shulker.\n\n§c§lVAROVÁNÍ:§r Pokud toto zapnete během levitace, spadnete!", + "description.wurst.hack.nooverlay": "Blokuje překrytí vody a lávy.", + "description.wurst.hack.nopumpkin": "Blokuje překrytí dýně na hlavě.", + "description.wurst.hack.noslowdown": "Zruší zpomalení medem, písekm duší i používáním itemů.", + "description.wurst.hack.noweather": "Umožňuje změnit počasí, čas a fázi měsíce na straně klienta.", + "description.wurst.hack.noweb": "Zabraňuje zpomalení pavučinami.", + "description.wurst.hack.nuker": "Automaticky ničí bloky kolem vás.", + "description.wurst.hack.nukerlegit": "Pomalejší Nuker, který obchází všechny moduly AntiCheat.\nNení vyžadován na běžných serverech s NoCheat+!", + "description.wurst.hack.openwateresp": "Zobrazí, zda rybaříte na otevřené vodě, nebo ne, a nakreslí ohraničení kolem oblasti, která se považuje za otevřenou vodu.", + "description.wurst.hack.overlay": "Vykreslí Nukerovu animaci, kdykoli vytěžíte blok.", + "description.wurst.hack.panic": "Okamžitě vypne všechny povolené hacky.\nS tímhle opatrně!", + "description.wurst.hack.parkour": "Při dosažení hrany bloku skáčete automaticky.\nUžitečné pro parkoury a skoko-běhách.", + "description.wurst.hack.playeresp": "Zvýrazní okolní hráče.\nESP boxy přátel se zobrazí modře.", + "description.wurst.hack.portalgui": "Umožňuje otevření inventářů v portálech.", + "description.wurst.hack.potionsaver": "Pozastaví všecny efekty lektvarů, dokud stojíte na místě.", + "description.wurst.hack.prophuntesp": "Umožňuje vidět falešné bloky v Prophuntu.\nVyrobeno pro Mineplexí Prophunt. Může však fungovat i na jiných serverech.", + "description.wurst.hack.protect": "Bot, který sleduje nejbližší entitu a chrání ji před ostatními entitami.\nPoužijte .protect k ochraně konkrétní entity místo té nejbližší.", + "description.wurst.hack.radar": "Zobrazí polohu blízkých entit.\n§cčerveně§r - hráči\n§6oranžově§r - monstra\n§azeleně§r - zvířata\n§7šedě§r - ostatní", + "description.wurst.hack.rainbowui": "§cD§aě§9l§cá §av§9š§ce§ac§9h§cn§ao §9k§cr§aá§9s§cn§aě §9b§ca§ar§9e§cv§an§9é§c.", + "description.wurst.hack.reach": "Umožňuje dosáhnout dále.", + "description.wurst.hack.remoteview": "Umožňuje vidět svět pohledem někoho jiného.\nPoužijte příkaz .rv k použití na konkrétní entitu.", + "description.wurst.hack.safewalk": "Zabraňuje pádu z hran.", + "description.wurst.hack.scaffoldwalk": "Automaticky umísťuje bloky pod nohy.", + "description.wurst.hack.search": "Pomáhá najít konkrétní bloky zvýrazněním jich barevně.", + "description.wurst.hack.skinderp": "Náhodně přepíná části postavy.", + "description.wurst.hack.sneak": "Neustálé plížení.", + "description.wurst.hack.snowshoe": "Umožňuje chůzi po prašanu.", + "description.wurst.hack.speedhack": "Umožní vám běžet ~2.5x rychleji, než byste běželi sprintem se skokem.\n\n§6§lVAROVÁNÍ:§r Opraveno v NoCheat+ verzi 3.13.2. Obchází pouze starší verze NoCheat+.\nNapište §l/ncp version§r pro kontrolu verze NoCheat+ na serveru.", + "description.wurst.hack.speednuker": "Rychlejší verze nukeru, která nemůže obejít NoCheat+.", + "description.wurst.hack.spider": "Umožňuje šplhat po zdech jako pavouk.", + "description.wurst.hack.step": "Samovýstup celých bloků jako u schodů.", + "description.wurst.hack.throw": "Použije položku vícekrát. Lze použít k vrhání sněhových koulí a vajec, vyvolání mobů, umisťování vozíků, atd. ve velmi velkém množství.\n\nTo může způsobit velké zpomalení a dokonce i pád serveru.", + "description.wurst.hack.tillaura": "Automaticky zorá hlínu, trávu, atd. na zemědělskou půdu.\nNezaměňovat s Killaurou.", + "description.wurst.hack.timer": "Mění rychlost téměř všeho.", + "description.wurst.hack.tired": "Vypadáte jako Alexander v dubnu 2015.\nViditelný jen ostatními hráči.", + "description.wurst.hack.toomanyhax": "Blokuje všechny funkce, které nechcete.\nUmožňuje vám ujistit se, že omylem nepovolíte špatný hack a nedostanete za to ban.\nPro ty, kteří chtějí 'hackovat jen trochu'.\n\nPoužijte příkaz §6.toomanyhax§r pro výběr, které funkce budou zablokovány.\nNapište §6.help toomanyhax§r pro více informací.", + "description.wurst.hack.tp-aura": "Automaticky útočí na nejbližší platnou entitu, zatímco se teleportuje kolem ní.", + "description.wurst.hack.trajectories": "Předvídá dráhu letu šipek a hoditelných předmětů.", + "description.wurst.hack.treebot": "Experimentální bot, který automaticky chodí kolem a kácí stromy.\nProzatím omezeno na malé stromy.", + "description.wurst.hack.triggerbot": "Automaticky zaútočí na entitu, na kterou se díváte.", + "description.wurst.hack.trollpotion": "Vytvoří lektvar s mnoha otravnými účinky.", + "description.wurst.hack.truesight": "Umožňuje vidět neviditelné entity.", + "description.wurst.hack.tunneller": "Automaticky kope tunel.\n\n§c§lUPOZORNĚNÍ:§r I když se tento bot pokusí vyhnout lávě a dalším nebezpečím, není zaručeno, že nezemře. Vyšlete ho jen s výstrojí, o kterou vám nevadí přijít.", + "description.wurst.hack.x-ray": "Zobrazuje rudy skrz bloky.", + "button.wurst.nochatreports.disable_signatures": "Vypnout podpisy", + "button.wurst.nochatreports.re-enable_signatures": "Znovu povolit podpisy", + "description.wurst.setting.generic.attack_speed": "Rychlost útoku v klikách za sekundu.\n0 = dynamicky upravuje rychlost tak, aby odpovídala zpomalení útoku.", + "description.wurst.setting.generic.pause_attack_on_containers": "Nebude útočit, pokud je otevřený inventář (truhly, dávkovače, atd.)\nUžitečné pro minihry, které mají menu, které vypadá jako truhla.", + "description.wurst.altmanager.premium": "Tento alt má heslo a může se připojit ke všem serverům.", + "description.wurst.altmanager.cracked": "Tento alt nemá heslo a bude fungovat pouze na cracknutých serverech.", + "description.wurst.altmanager.failed": "Posledně, když jste se pokoušeli přihlásit s tímhle altem, nefungovalo to.", + "description.wurst.altmanager.checked": "Heslo v minulosti fungovalo.", + "description.wurst.altmanager.unchecked": "S tímto altem jste se nikdy úspěšně nepřihlásili.", + "description.wurst.altmanager.favorite": "Označili jste tento alt jako jeden z vašich oblíbených.", + "description.wurst.altmanager.window": "Toto tlačítko otevře jiné okno.", + "description.wurst.altmanager.window_freeze": "Může to vypadat, že hra neodpovídá, dokud je toto okno otevřené.", + "description.wurst.altmanager.fullscreen": "§cVypnout režim celé obrazovky!", + "gui.wurst.altmanager.folder_error.title": "Nelze vytvořit složku '.Wurst encryption'!", + "gui.wurst.altmanager.folder_error.message": "Možná jste omylem zablokovali Wurstu přístup k této složce.\nAltManager bez ní nemůže šifrovat nebo dešifrovat váš seznam altů.\nStále můžete používat AltManager, ale žádné alty, které nyní vytvoříte, nebudou uloženy.\n\nCelá chyba zní následovně:\n%s", + "gui.wurst.altmanager.empty.title": "Váš seznam altů je prázdný.", + "gui.wurst.altmanager.empty.message": "Chcete na začátek nějaké náhodné alty?", + "gui.wurst.nochatreports.unsafe_server.title": "§4§lVAROVÁNÍ:§r Nebezpečný server", + "toast.wurst.nochatreports.unsafe_server.title": "Zprávy v chatu mohou být nahlášeny", + "toast.wurst.nochatreports.unsafe_server.message": "Zprávy odeslané na tomto serveru mohou být nahlášené do Mojangu, který vás může globálně zabanovat", + "gui.wurst.nochatreports.ncr_mod_server.title": "Server \"No Chat Reports\"", + "button.wurst.nochatreports.signatures_status": "Podpisy: ", + "description.wurst.nochatreports.message_is_reportable": "Tato zpráva má platný podpis, a proto je zranitelná vůči podvodným nahlášením v chatu.", + "gui.wurst.generic.allcaps_blocked": "BLOKOVÁNO", + "gui.wurst.generic.allcaps_allowed": "POVOLENO" +} diff --git a/src/main/resources/assets/wurst/lang/de_de.json b/src/main/resources/assets/wurst/lang/de_de.json index e44674f3..fe822133 100644 --- a/src/main/resources/assets/wurst/lang/de_de.json +++ b/src/main/resources/assets/wurst/lang/de_de.json @@ -138,4 +138,4 @@ "gui.wurst.generic.allcaps_blocked": "BLOCKIERT", "gui.wurst.generic.allcaps_allowed": "ERLAUBT", "key.wurst.zoom": "Zoom" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index 62e86971..c48b2db0 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -193,4 +193,4 @@ "gui.wurst.generic.allcaps_blocked": "BLOCKED", "gui.wurst.generic.allcaps_allowed": "ALLOWED", "key.wurst.zoom": "Zoom" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/wurst/lang/fr_fr.json b/src/main/resources/assets/wurst/lang/fr_fr.json index df6fd550..09450517 100644 --- a/src/main/resources/assets/wurst/lang/fr_fr.json +++ b/src/main/resources/assets/wurst/lang/fr_fr.json @@ -1,184 +1,184 @@ -{ - "description.wurst.hack.anchoraura": "Place automatiquement (optionnel), charge et fait exploser les ancres de réapparition pour tuer les entités autour de vous.", - "description.wurst.hack.antiafk": "Marche au hasard pour vous cacher des détecteurs d'AFK.", - "description.wurst.hack.antiblind": "Empêche l'effet cécité et d'obscurité.\nIncompatible avec OptiFine.", - "description.wurst.hack.anticactus": "Vous protège des dommages causés par les cactus.", - "description.wurst.hack.antiknockback": "Vous empêche d'être poussé par les joueurs et les mobs.", - "description.wurst.hack.antispam": "Bloque les spams de chat en ajoutant un compteur aux messages répétés.", - "description.wurst.hack.antiwaterpush": "Vous empêche d'être poussé par l'eau.", - "description.wurst.hack.antiwobble": "Désactive l'effet d'oscillation causé par la nausée et les portails.", - "description.wurst.hack.arrowdmg": "Augmente massivement les dégâts des flèches, mais consomme également beaucoup de faim et réduit la précision. \n\nNe fonctionne pas avec les arbalètes et semble être corrigé sur les serveurs Paper.", - "description.wurst.setting.arrowdmg.packets": "Quantité de paquets à envoyer.\nPlus de paquets = plus de dégâts.", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "Lorsqu'il est activé, les tridents volent beaucoup plus loin. Ne semble pas affecter les dégâts ou l'impulsion.\n\n§c§lATTENTION:§r Vous pouvez facilement perdre votre trident en activant cette option !", - "description.wurst.hack.autoarmor": "Gère votre armure automatiquement.", - "description.wurst.hack.autobuild": "Construit les choses automatiquement.\nPlacez un seul bloc pour commencer à construire.", - "description.wurst.hack.autodrop": "Supprime automatiquement les objets indésirables.", - "description.wurst.hack.autoleave": "Quitte automatiquement le serveur lorsque votre santé est faible.", - "description.wurst.hack.autoeat": "Mange automatiquement de la nourriture si nécessaire.", - "description.wurst.setting.autoeat.target_hunger": "Essaie de maintenir la barre de faim à ce niveau ou au-dessus, mais seulement si elle ne gaspille aucun point de faim.", - "description.wurst.setting.autoeat.min_hunger": "Maintient toujours la barre de faim à ce niveau ou au-dessus, même si cela gaspille des points de faim.\n6.5 - Ne peut pas causer de gaspillage avec de la nourriture vanilla.\n10.0 - Ignore complètement le gaspillage et garde juste la barre de la faim pleine.", - "description.wurst.setting.autoeat.injured_hunger": "Remplit la barre de faim au moins à ce niveau lorsque vous êtes blessé, même si cela gaspille des points de faim.\n10.0 - guérison la plus rapide\n9.0 - guérison la plus lente\n<9.0 - pas de guérison\n<3.5 - pas de sprint", - "description.wurst.setting.autoeat.injury_threshold": "Empêche les petites blessures de gaspiller toute votre nourriture. L'AutoEat ne vous considérera comme blessé que si vous avez perdu au moins ce nombre de cœurs.", - "description.wurst.setting.autoeat.take_items_from": "Où l'AutoEat devrait chercher de la nourriture.", - "description.wurst.setting.autoeat.eat_while_walking": "Vous ralentit, non recommandé.", - "description.wurst.setting.autoeat.allow_hunger": "La chair putréfiée applique un effet de \"faim\" inoffensif.\nElle est sûre à manger et utile comme nourriture d'urgence.", - "description.wurst.setting.autoeat.allow_poison": "La nourriture empoisonnée applique des dégâts au fil du temps.\nNon recommandé.", - "description.wurst.setting.autoeat.allow_chorus": "Manger des fruits de chorus vous téléporte à un endroit aléatoire.\nNon recommandé.", - "description.wurst.hack.autofarm": "Récolte et replante les cultures automatiquement.\nFonctionne avec le blé, les carottes, les pommes de terre, les betteraves, les citrouilles, les melons, les cactus, les cannes à sucre, les algues, le bambou, les verrues du nether et les fèves de cacao.", - "description.wurst.hack.autofish": "Attrape automatiquement les poissons en utilisant votre meilleure canne à pêche. S'il trouve une meilleure canne pendant la pêche, il passera automatiquement à celle-ci.", - "description.wurst.hack.automine": "Mine automatiquement n'importe quel bloc que vous regardez.", - "description.wurst.hack.autopotion": "Lance automatiquement des potions jetables de soin instantanée lorsque votre santé est faible.", - "description.wurst.hack.autoreconnect": "Se reconnecte automatiquement lorsque vous êtes expulsé du serveur.", - "description.wurst.hack.autorespawn": "Vous réapparaît automatiquement chaque fois que vous mourez.", - "description.wurst.hack.autosign": "Écrit instantanément le texte que vous voulez sur chaque panneau que vous placez. Une fois activé, vous pouvez écrire normalement sur le premier panneau pour spécifier le texte de tous les autres panneaux.", - "description.wurst.hack.autosoup": "Mange automatiquement de la soupe lorsque votre santé est faible.\n\n§lNote:§r Ce hack ignore la faim et suppose que manger de la soupe recharge directement votre santé. Si le serveur sur lequel vous jouez n'est pas configuré pour cela, utilisez plutôt AutoEat.", - "description.wurst.hack.autosprint": "Vous fait sprinter automatiquement.", - "description.wurst.hack.autosteal": "Vole automatiquement tout dans tous les coffres et boîtes de shulker que vous ouvrez.", - "description.wurst.hack.autoswim": "Déclenche automatiquement l'animation de nage.", - "description.wurst.hack.autoswitch": "Change l'objet dans votre main tout le temps.\n\n§lConseil de Pro:§r Utilisez-le en combinaison avec BuildRandom tout en ayant beaucoup de blocs de laine ou de béton de différentes couleurs dans votre barre de raccourcis.", - "description.wurst.hack.autosword": "Utilise automatiquement la meilleure arme de votre barre de raccourcis pour attaquer les entités.\nConseil: Cela fonctionne avec le Killaura.", - "description.wurst.hack.autotool": "Équipe automatiquement l'outil adéquat le plus rapide dans votre barre de raccourci lorsque vous essayez de casser un bloc.", - "description.wurst.hack.autototem": "Déplace automatiquement les totems d'immortalité vers votre main secondaire.", - "description.wurst.hack.autowalk": "Vous fait marcher automatiquement.", - "description.wurst.hack.basefinder": "Trouve les bases de joueurs en recherchant des blocs artificiels.\nLes blocs qu'il trouve seront mis en surbrillance dans la couleur sélectionnée.\nBon pour trouver des bases de faction.", - "description.wurst.hack.blink": "Suspend toutes les mises à jour de mouvement lorsqu'elles sont activées.", - "description.wurst.hack.boatfly": "Vous permet de voler grâce à un bateau ou à un autre véhicule.\nAppuyez sur la touche de sprint pour descendre plus vite.", - "description.wurst.hack.bonemealaura": "Utilise automatiquement la poudre d'os sur des types de plantes spécifiques.\nCocher des cases pour spécifier les types de plantes.", - "description.wurst.hack.bowaimbot": "Vise automatiquement avec votre arc ou votre arbalète.", - "description.wurst.hack.buildrandom": "Place aléatoirement des blocs autour de vous.", - "description.wurst.hack.bunnyhop": "Vous fait sauter automatiquement.", - "description.wurst.hack.cameranoclip": "Permet à la caméra à la 3ème personne de traverser les murs.", - "description.wurst.hack.cavefinder": "Vous aide à trouver des grottes en les mettant en surbrillance dans la couleur sélectionnée.", - "description.wurst.hack.chattranslator": "Traduit les messages de chat entrants à l'aide de Google Traduction.", - "description.wurst.hack.chestesp": "Met en évidence les coffres à proximité.", - "description.wurst.hack.clickaura": "Attaque automatiquement l'entité valide la plus proche chaque fois que vous cliquez.\n\n§c§lATTENTION:§r ClickAuras semble généralement plus suspect que Killauras et est plus facile à détecter pour les plugins. Il est recommandé d'utiliser Killaura ou TriggerBot à la place.", - "description.wurst.hack.clickgui": "ClickGUI basé sur une fenêtre.", - "description.wurst.hack.crashchest": "Génère un coffre qui bannit essentiellement les gens du serveur s'ils en ont trop de copies dans leur inventaire. §c§lATTENTION:§r §cCela ne peut pas être annulé. Utiliser avec précaution !§r\n\nSi des copies sont plutôt placées dans un coffre, quiconque ouvre le coffre sera expulsé du serveur (une seule fois).", - "description.wurst.hack.creativeflight": "Vous permet de voler comme en mode Créatif.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", - "description.wurst.hack.criticals": "Change tous vos coups en coups critiques.", - "description.wurst.hack.crystalaura": "Place automatiquement (optionel) et fait exploser les cristaux de l'end pour tuer les entités autour de vous.", - "description.wurst.hack.derp": "Bouge la tête au hasard.\nUniquement visible par les autres joueurs.", - "description.wurst.hack.dolphin": "Vous fait sauter dans l'eau automatiquement.\n(juste comme un dophin)", - "description.wurst.hack.excavator": "Casse automatiquement tous les blocs de la zone sélectionnée.", - "description.wurst.hack.extraelytra": "Rend l'Elytre plus facile à utiliser.", - "description.wurst.hack.fancychat": "Remplace les caractères ASCII dans les messages de chat envoyés par des caractères Unicode plus sophistiqués. Peut être utilisé pour contourner les filtres de mots maudits sur certains serveurs.\nNe fonctionne pas sur les serveurs qui bloquent les caractères unicode.", - "description.wurst.hack.fastbreak": "Vous permet de casser des blocs plus rapidement.\nConseil: Cela fonctionne avec le Nuker.", - "description.wurst.hack.fastladder": "Permet de grimper plus rapidement aux échelles.", - "description.wurst.hack.fastplace": "Vous permet de placer des blocs 5 fois plus rapidement.\nConseil: Cela peut accélérer d'autres hacks comme l'AutoBuild.", - "description.wurst.hack.feedaura": "Nourrit automatiquement les animaux autour de vous.", - "description.wurst.hack.fightbot": "Un bot qui se promène automatiquement et tue tout.\nBon pour les MobArena.", - "description.wurst.hack.fish": "Désactive la gravité sous-marine pour que vous puissiez nager comme un poisson.", - "description.wurst.hack.flight": "Permet de voler.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", - "description.wurst.hack.follow": "Un bot qui suit l'entité la plus proche.\nTrès ennuyant.\n\nUtilisez .follow pour suivre une entité spécifique.", - "description.wurst.hack.forceop": "Cracke les mots de passe AuthMe.\nPeut être utilisé pour devenir OP.", - "description.wurst.hack.freecam": "Permet de déplacer la caméra sans déplacer votre personnage.", - "description.wurst.hack.fullbright": "Permet de voir dans le noir.", - "description.wurst.hack.glide": "Vous fait glisser lentement en tombant.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", - "description.wurst.hack.handnoclip": "Vous permet d'atteindre des blocs spécifiques à travers les murs.", - "description.wurst.hack.headroll": "Vous fait hocher la tête tout le temps.\nUniquement visible par les autres joueurs.", - "description.wurst.hack.healthtags": "Affiche la santé des joueurs dans leurs nametags.", - "description.wurst.hack.highjump": "Permet de sauter plus haut.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", - "description.wurst.hack.infinichat": "Supprime la limite de 256 caractères du chat.\nUtile pour les commandes longues qui modifient les données NBT.\n\n§6§lREMARQUE:§r Pas recommandé pour parler aux gens. La plupart des serveurs réduiront les messages à 256 caractères de leur côté.", - "description.wurst.hack.instantbunker": "Construit un petit bunker autour de vous. Nécessite 57 blocs.", - "description.wurst.hack.invwalk": "Permet de se déplacer pendant que l'inventaire est ouvert.", - "description.wurst.setting.invwalk.allow_clickgui": "Vous permet de vous déplacer pendant que le ClickGUI de Wurst est ouvert.", - "description.wurst.setting.invwalk.allow_other": "Vous permet de vous déplacer pendant que d'autres écrans du jeu sont ouverts (par ex: coffre, cheval, vente avec un villageois), à moins que l'écran ne comporte une zone de texte.", - "description.wurst.hack.itemesp": "Met en évidence les objets à proximité.", - "description.wurst.hack.itemgenerator": "Génère des objets aléatoires et les laisse tomber sur le sol.\n§oMode Créatif uniquement.§r", - "description.wurst.hack.jesus": "Permet de marcher sur l'eau.\nJésus a utilisé ce hack il y a environ 2000 ans.", - "description.wurst.hack.jetpack": "Permet de voler comme si vous aviez un jetpack.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", - "description.wurst.hack.kaboom": "Brise les blocs autour de vous comme une explosion.\nCela peut être beaucoup plus rapide que le Nuker si le serveur n'a pas NoCheat+. Cela fonctionne mieux avec des outils rapides et des blocs faibles.\nNote: Ceci n'est pas une véritable explosion.", - "description.wurst.hack.killauralegit": "Killaura plus lent qui est plus difficile à détecter.\nNon requis sur les serveurs NoCheat+ normaux !", - "description.wurst.hack.killaura": "Attaque automatiquement les entités autour de vous.", - "description.wurst.hack.killpotion": "Génère une potion qui peut presque tout tuer, y compris les joueurs en mode Créatif. Ne fonctionne pas sur les monstres morts-vivants, car ils sont déjà morts.\n\nNécessite le mode Créatif.", - "description.wurst.hack.liquids": "Permet de placer des blocs dans des liquides.", - "description.wurst.hack.lsd": "Provoque des hallucinations.", - "description.wurst.hack.masstpa": "Envoie une requête TPA à tous les joueurs.", - "description.wurst.hack.mileycyrus": "Vous fait twerker.", - "description.wurst.hack.mobesp": "Met en évidence les monstres à proximité.", - "description.wurst.hack.mobspawnesp": "Met en évidence les zones où les monstres peuvent apparaître.\n§ejaune§r - les monstres peuvent apparaître la nuit\n§crouge§r - les monstres peuvent toujours apparaître", - "description.wurst.hack.multiaura": "Killaura plus rapide qui attaque plusieurs entités à la fois.", - "description.wurst.hack.nameprotect": "Masque tous les noms de joueurs.", - "description.wurst.hack.nametags": "Modifie l'échelle des nametags de nom afin que vous puissiez toujours les lire. Vous permet également de voir les nametags des joueurs accroupis.", - "description.wurst.hack.navigator": "Une interface graphique consultable qui apprend vos préférences au fil du temps.", - "description.wurst.hack.newchunks": "Surligne les tronçons qui viennent de se générer autour de vous.", - "description.wurst.hack.nobackground": "Supprime le fond sombre derrière les inventaires.", - "description.wurst.hack.noclip": "Vous permet de vous déplacer librement à travers les blocs.\nUn bloc (par exemple du sable) doit tomber sur votre tête pour l'activer.\n\n§c§lATTENTION:§r Vous subirez des dégâts en vous déplaçant à travers les blocs !", - "description.wurst.hack.nocomcrash": "Lags et plantages des serveurs en utilisant l'exploit Nocom.\nNe fonctionne pas sur les serveurs Paper. Testé en Vanilla, Spigot et Fabric. Peut être désactivé par certains AntiCheats.", - "description.wurst.hack.nofall": "Vous protège des dommages causés par les chutes.", - "description.wurst.hack.nofireoverlay": "Bloque l'overlay lorsque vous êtes en feu.\n\n§c§lATTENTION:§r Cela peut vous faire brûler jusqu'à la mort sans que vous vous en apercevez.", - "description.wurst.hack.nohurtcam": "Désactive l'effet de tremblement lorsque vous vous blessez.", - "description.wurst.hack.nolevitation": "Désactive l'effet de lévitation quand vous êtes touché par un Shulker.\n\n§c§lATTENTION:§r Vous tomberez si vous activez ceci alors que l'effet de lévitation est déjà actif!", - "description.wurst.hack.nooverlay": "Bloque les overlays d'eau et de lave.", - "description.wurst.hack.nopumpkin": "Bloque l'overlay lorsque vous portez une citrouille sur la tête.", - "description.wurst.hack.noslowdown": "Annule les effets de lenteur causés par le miel, le sable des âmes et l'utilisation d'objets.", - "description.wurst.hack.noweather": "Vous permet de modifier la météo, l'heure et la phase de lune côté client.", - "description.wurst.hack.noweb": "Vous évite d'être ralenti par les toiles d'araignées.", - "description.wurst.hack.nuker": "Brise automatiquement les blocs autour de vous.", - "description.wurst.hack.nukerlegit": "Nuker plus lent qui contourne tous les plugins AntiCheat.\nNon requis sur les serveurs NoCheat+ normaux !", - "description.wurst.hack.openwateresp": "Indique si vous pêchez ou non dans l'eau libre et dessine un cadre autour de la zone utilisée pour le calcul de l'eau libre.", - "description.wurst.hack.overlay": "Rend l'animation du Nuker chaque fois que vous cassez un bloc.", - "description.wurst.hack.panic": "Désactive instantanément tous les hacks activés.\nSoyez prudent avec celui-ci !", - "description.wurst.hack.parkour": "Vous fait sauter automatiquement lorsque vous atteignez le bord d'un bloc.\nUtile pour les parcours.", - "description.wurst.hack.playeresp": "Met en évidence les joueurs à proximité.\nLes boîtes ESP des amis apparaîtront en bleu.", - "description.wurst.hack.portalgui": "Vous permet d'ouvrir les GUI dans des portails.", - "description.wurst.hack.potionsaver": "Gèle tous les effets de potion pendant que vous êtes immobile.", - "description.wurst.hack.prophuntesp": "Permet de voir les faux blocs dans le Prophunt.\nConçu pour le Prohunt de Mineplex. Peut ne pas fonctionner sur d'autres serveurs.", - "description.wurst.hack.protect": "Un bot qui suit l'entité la plus proche et la protège des autres entités.\nUtilisez .protect pour protéger une entité spécifique au lieu de la plus proche.", - "description.wurst.hack.radar": "Affiche l'emplacement des entités à proximité.\n§crouge§r - joueurs\n§6orange§r - monstres\n§avert§r - animaux\n§7gris§r - autres", - "description.wurst.hack.rainbowui": "§cR§ae§9n§cd §at§9o§cu§at §9c§co§al§9o§cr§aé.", - "description.wurst.hack.reach": "Permet d'atteindre plus loin.", - "description.wurst.hack.remoteview": "Permet de voir le monde comme quelqu'un d'autre.\nUtilisez la commande .rv pour qu'il cible une entité spécifique.", - "description.wurst.hack.safewalk": "Vous empêche de tomber des bords.", - "description.wurst.hack.scaffoldwalk": "Place automatiquement des blocs sous vos pieds.", - "description.wurst.hack.search": "Vous aide à trouver des blocs spécifiques en les mettant en évidence en couleur arc-en-ciel.", - "description.wurst.hack.skinderp": "Bascule aléatoirement des parties de votre skin.", - "description.wurst.hack.sneak": "Vous fait vous s'accroupir automatiquement.", - "description.wurst.hack.snowshoe": "Permet de marcher sur de la poudreuse.", - "description.wurst.hack.speedhack": "Permet de courir ~2.5x plus vite que vous ne le feriez en sprintant et en sautant.\n\n§6§lATTENTION:§r Corrigé avec NoCheat+ version 3.13.2. Ne contournera que les anciennes versions de NoCheat+.\nTapez §l/ncp version§r pour vérifier la version NoCheat+ d'un serveur.", - "description.wurst.hack.speednuker": "Version plus rapide de Nuker qui ne peut pas contourner NoCheat+.", - "description.wurst.hack.spider": "Permet de grimper aux murs comme une araignée.", - "description.wurst.hack.step": "Vous permet d'intensifier les blocs complets.", - "description.wurst.hack.throw": "Utilise un objet plusieurs fois. Peut être utilisé pour lancer des boules de neige et des oeufs, faire apparaître des mobs, placer des minecarts, etc. en très grande quantité.\n\nCela peut causer beaucoup de lag et même planter un serveur.", - "description.wurst.hack.tillaura": "Transforme automatiquement la terre, l'herbe, etc. en terres labourés. À ne pas confondre avec le Killaura.", - "description.wurst.hack.timer": "Change la vitesse de presque tout.", - "description.wurst.hack.tired": "Vous fait ressembler à Alexander en avril 2015.\nUniquement visible par les autres joueurs.", - "description.wurst.hack.toomanyhax": "Bloque toutes les fonctionnalités dont vous ne voulez pas.\nVous permet de vous assurer que vous n'activez pas accidentellement le mauvais hack et que vous n'êtes pas banni pour cela.\nPour ceux qui veulent \"seulement cheat un peu\".\n\nUtilisez la commande §6.toomanyhax§r pour choisir les fonctionnalités à bloquer.\nFaites §6.help toomanyhax§r pour plus d'infos.", - "description.wurst.hack.tp-aura": "Attaque automatiquement l'entité valide la plus proche tout en se téléportant autour d'elle.", - "description.wurst.hack.trajectories": "Prédit la trajectoire de vol des flèches et des objets jetables.", - "description.wurst.hack.treebot": "Un bot expérimental qui se promène et coupe automatiquement les arbres.\nLimité aux petits arbres pour l'instant.", - "description.wurst.hack.triggerbot": "Attaque automatiquement l'entité que vous regardez.", - "description.wurst.hack.trollpotion": "Génère une potion avec de nombreux effets ennuyeux.", - "description.wurst.hack.truesight": "Permet de voir les entités invisibles.", - "description.wurst.hack.tunneller": "Creuse automatiquement un tunnel.\n\n§c§lATTENTION:§r Bien que ce bot essaie d'éviter la lave et d'autres dangers, il n'y a aucune garantie qu'il ne mourra pas. N'envoyez-le qu'avec du matériel que vous ne craignez pas de perdre.", - "description.wurst.hack.x-ray": "Permet de voir les minerais à travers les murs.", - "description.wurst.other_feature.nochatreports": "Désactive les signatures cryptographiques qui depuis la 1.19 sont attachées à vos messages de chat.\n\n§c§lATTENTION: §cSi §cvous §cenvoyez §cun §cmessage §cdans §cle §cchat §cavec §csignature, §cvotre §ccompte §cMinecraft §cpeut §cêtre §csignalé §cet §cêtre §cbanni §cglobalement §cdu §cmultijoueur !§r\n\nMême si vous ne dites que des choses inoffensives dans le chat, vos messages signés peuvent être abusés pour créer un faux signalement de chat qui banni injustement votre compte.\n\nSi vous devez réactiver les signatures de chat pour rejoindre un serveur, envisagez de ne pas utiliser leur chat du tout. Ou jouez sur un compte secondaire que cela ne vous dérange pas de perdre.", - "button.wurst.nochatreports.disable_signatures": "Désactiver les Signatures", - "button.wurst.nochatreports.re-enable_signatures": "Réactiver les Signatures", - "description.wurst.setting.generic.attack_speed": "Vitesse d'attaque en clics par seconde.\n0 = ajuste dynamiquement la vitesse pour correspondre à votre temps de recharge d'attaque.", - "description.wurst.setting.generic.pause_attack_on_containers": "N'attaque pas lorsqu'un écran de conteneur (coffre, entonnoir, etc.) est ouvert.\nUtile pour les serveurs de mini-jeux qui affichent des menus sous forme de coffre.", - "description.wurst.altmanager.premium": "Cet alt a un mot de passe et peut rejoindre tous les serveurs.", - "description.wurst.altmanager.cracked": "Cet alt n'a pas de mot de passe et ne fonctionnera que sur les serveurs cracks.", - "description.wurst.altmanager.failed": "La dernière fois que vous avez essayé de vous connecter avec cet alt, cela n'a pas fonctionné.", - "description.wurst.altmanager.checked": "Le mot de passe a fonctionné dans le passé.", - "description.wurst.altmanager.unchecked": "Vous ne vous êtes jamais connecté avec succès avec cet alt.", - "description.wurst.altmanager.favorite": "Vous avez marqué cet alt comme l'un de vos favoris.", - "description.wurst.altmanager.window": "Ce bouton ouvre une autre fenêtre.", - "description.wurst.altmanager.window_freeze": "Il peut sembler que le jeu ne répond pas lorsque cette fenêtre est ouverte.", - "description.wurst.altmanager.fullscreen": "§cDésactiver le mode plein écran !", - "gui.wurst.altmanager.folder_error.title": "Impossible de créer le dossier '.Wurst encryption' !", - "gui.wurst.altmanager.folder_error.message": "Vous avez peut-être accidentellement bloqué l'accès de Wurst à ce dossier.\nL'AltManager ne peut pas chiffrer ou déchiffrer votre liste d'alt sans lui.\nVous pouvez toujours utiliser l'AltManager, mais les alts que vous créez maintenant ne seront pas enregistrés.\n\nL'erreur complète est la suivante :\n%s", - "gui.wurst.altmanager.empty.title": "Votre liste d'alt est vide.", - "gui.wurst.altmanager.empty.message": "Aimeriez-vous quelques alts aléatoires pour commencer ?", - "gui.wurst.nochatreports.unsafe_server.title": "§4§lATTENTION :§r Serveur non protégé", - "gui.wurst.nochatreports.unsafe_server.message": "Ce serveur nécessite l'activation des signatures de chat, ce qui expose votre compte au risque de signalements de chat frauduleux.\n\nVous pouvez rejoindre ce serveur si vous débloquez les signatures de chat, puis vous reconnectez. Si vous le faites, envisagez de ne pas utiliser le chat du tout. Ou jouez sur un compte secondaire que cela ne vous dérange pas de perdre.\n\nS'il s'agit de votre serveur, vous pouvez résoudre ce problème en définissant 'enforce-secure-profile' sur false dans server.properties. À la manière typique de Mojang, ce paramètre fait le contraire de ce à quoi il ressemble.", - "toast.wurst.nochatreports.unsafe_server.title": "Les messages de chat peuvent être signalés", - "toast.wurst.nochatreports.unsafe_server.message": "Les messages envoyés sur ce serveur peuvent être signalés à Mojang Big Brother et votre compte peut être banni à l'échelle mondiale", - "gui.wurst.nochatreports.ncr_mod_server.title": "Serveur \"No Chat Reports\"", - "gui.wurst.nochatreports.ncr_mod_server.message": "Ce serveur utilise le mod \"No Chat Reports\".\n\nVous pouvez rejoindre ce serveur si vous bloquez les signatures de chat et désactivez le VanillaSpoof.", - "button.wurst.nochatreports.signatures_status": "Signatures: ", - "description.wurst.nochatreports.message_is_reportable": "Ce message a une signature valide et est donc vulnérable aux signalements de chat frauduleux.", - "gui.wurst.generic.allcaps_blocked": "BLOQUÉ", - "gui.wurst.generic.allcaps_allowed": "AUTORISÉ", - "key.wurst.zoom": "Zoom" -} \ No newline at end of file +{ + "description.wurst.hack.anchoraura": "Place automatiquement (optionnel), charge et fait exploser les ancres de réapparition pour tuer les entités autour de vous.", + "description.wurst.hack.antiafk": "Marche au hasard pour vous cacher des détecteurs d'AFK.", + "description.wurst.hack.antiblind": "Empêche l'effet cécité et d'obscurité.\nIncompatible avec OptiFine.", + "description.wurst.hack.anticactus": "Vous protège des dommages causés par les cactus.", + "description.wurst.hack.antiknockback": "Vous empêche d'être poussé par les joueurs et les mobs.", + "description.wurst.hack.antispam": "Bloque les spams de chat en ajoutant un compteur aux messages répétés.", + "description.wurst.hack.antiwaterpush": "Vous empêche d'être poussé par l'eau.", + "description.wurst.hack.antiwobble": "Désactive l'effet d'oscillation causé par la nausée et les portails.", + "description.wurst.hack.arrowdmg": "Augmente massivement les dégâts des flèches, mais consomme également beaucoup de faim et réduit la précision. \n\nNe fonctionne pas avec les arbalètes et semble être corrigé sur les serveurs Paper.", + "description.wurst.setting.arrowdmg.packets": "Quantité de paquets à envoyer.\nPlus de paquets = plus de dégâts.", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "Lorsqu'il est activé, les tridents volent beaucoup plus loin. Ne semble pas affecter les dégâts ou l'impulsion.\n\n§c§lATTENTION:§r Vous pouvez facilement perdre votre trident en activant cette option !", + "description.wurst.hack.autoarmor": "Gère votre armure automatiquement.", + "description.wurst.hack.autobuild": "Construit les choses automatiquement.\nPlacez un seul bloc pour commencer à construire.", + "description.wurst.hack.autodrop": "Supprime automatiquement les objets indésirables.", + "description.wurst.hack.autoleave": "Quitte automatiquement le serveur lorsque votre santé est faible.", + "description.wurst.hack.autoeat": "Mange automatiquement de la nourriture si nécessaire.", + "description.wurst.setting.autoeat.target_hunger": "Essaie de maintenir la barre de faim à ce niveau ou au-dessus, mais seulement si elle ne gaspille aucun point de faim.", + "description.wurst.setting.autoeat.min_hunger": "Maintient toujours la barre de faim à ce niveau ou au-dessus, même si cela gaspille des points de faim.\n6.5 - Ne peut pas causer de gaspillage avec de la nourriture vanilla.\n10.0 - Ignore complètement le gaspillage et garde juste la barre de la faim pleine.", + "description.wurst.setting.autoeat.injured_hunger": "Remplit la barre de faim au moins à ce niveau lorsque vous êtes blessé, même si cela gaspille des points de faim.\n10.0 - guérison la plus rapide\n9.0 - guérison la plus lente\n<9.0 - pas de guérison\n<3.5 - pas de sprint", + "description.wurst.setting.autoeat.injury_threshold": "Empêche les petites blessures de gaspiller toute votre nourriture. L'AutoEat ne vous considérera comme blessé que si vous avez perdu au moins ce nombre de cœurs.", + "description.wurst.setting.autoeat.take_items_from": "Où l'AutoEat devrait chercher de la nourriture.", + "description.wurst.setting.autoeat.eat_while_walking": "Vous ralentit, non recommandé.", + "description.wurst.setting.autoeat.allow_hunger": "La chair putréfiée applique un effet de \"faim\" inoffensif.\nElle est sûre à manger et utile comme nourriture d'urgence.", + "description.wurst.setting.autoeat.allow_poison": "La nourriture empoisonnée applique des dégâts au fil du temps.\nNon recommandé.", + "description.wurst.setting.autoeat.allow_chorus": "Manger des fruits de chorus vous téléporte à un endroit aléatoire.\nNon recommandé.", + "description.wurst.hack.autofarm": "Récolte et replante les cultures automatiquement.\nFonctionne avec le blé, les carottes, les pommes de terre, les betteraves, les citrouilles, les melons, les cactus, les cannes à sucre, les algues, le bambou, les verrues du nether et les fèves de cacao.", + "description.wurst.hack.autofish": "Attrape automatiquement les poissons en utilisant votre meilleure canne à pêche. S'il trouve une meilleure canne pendant la pêche, il passera automatiquement à celle-ci.", + "description.wurst.hack.automine": "Mine automatiquement n'importe quel bloc que vous regardez.", + "description.wurst.hack.autopotion": "Lance automatiquement des potions jetables de soin instantanée lorsque votre santé est faible.", + "description.wurst.hack.autoreconnect": "Se reconnecte automatiquement lorsque vous êtes expulsé du serveur.", + "description.wurst.hack.autorespawn": "Vous réapparaît automatiquement chaque fois que vous mourez.", + "description.wurst.hack.autosign": "Écrit instantanément le texte que vous voulez sur chaque panneau que vous placez. Une fois activé, vous pouvez écrire normalement sur le premier panneau pour spécifier le texte de tous les autres panneaux.", + "description.wurst.hack.autosoup": "Mange automatiquement de la soupe lorsque votre santé est faible.\n\n§lNote:§r Ce hack ignore la faim et suppose que manger de la soupe recharge directement votre santé. Si le serveur sur lequel vous jouez n'est pas configuré pour cela, utilisez plutôt AutoEat.", + "description.wurst.hack.autosprint": "Vous fait sprinter automatiquement.", + "description.wurst.hack.autosteal": "Vole automatiquement tout dans tous les coffres et boîtes de shulker que vous ouvrez.", + "description.wurst.hack.autoswim": "Déclenche automatiquement l'animation de nage.", + "description.wurst.hack.autoswitch": "Change l'objet dans votre main tout le temps.\n\n§lConseil de Pro:§r Utilisez-le en combinaison avec BuildRandom tout en ayant beaucoup de blocs de laine ou de béton de différentes couleurs dans votre barre de raccourcis.", + "description.wurst.hack.autosword": "Utilise automatiquement la meilleure arme de votre barre de raccourcis pour attaquer les entités.\nConseil: Cela fonctionne avec le Killaura.", + "description.wurst.hack.autotool": "Équipe automatiquement l'outil adéquat le plus rapide dans votre barre de raccourci lorsque vous essayez de casser un bloc.", + "description.wurst.hack.autototem": "Déplace automatiquement les totems d'immortalité vers votre main secondaire.", + "description.wurst.hack.autowalk": "Vous fait marcher automatiquement.", + "description.wurst.hack.basefinder": "Trouve les bases de joueurs en recherchant des blocs artificiels.\nLes blocs qu'il trouve seront mis en surbrillance dans la couleur sélectionnée.\nBon pour trouver des bases de faction.", + "description.wurst.hack.blink": "Suspend toutes les mises à jour de mouvement lorsqu'elles sont activées.", + "description.wurst.hack.boatfly": "Vous permet de voler grâce à un bateau ou à un autre véhicule.\nAppuyez sur la touche de sprint pour descendre plus vite.", + "description.wurst.hack.bonemealaura": "Utilise automatiquement la poudre d'os sur des types de plantes spécifiques.\nCocher des cases pour spécifier les types de plantes.", + "description.wurst.hack.bowaimbot": "Vise automatiquement avec votre arc ou votre arbalète.", + "description.wurst.hack.buildrandom": "Place aléatoirement des blocs autour de vous.", + "description.wurst.hack.bunnyhop": "Vous fait sauter automatiquement.", + "description.wurst.hack.cameranoclip": "Permet à la caméra à la 3ème personne de traverser les murs.", + "description.wurst.hack.cavefinder": "Vous aide à trouver des grottes en les mettant en surbrillance dans la couleur sélectionnée.", + "description.wurst.hack.chattranslator": "Traduit les messages de chat entrants à l'aide de Google Traduction.", + "description.wurst.hack.chestesp": "Met en évidence les coffres à proximité.", + "description.wurst.hack.clickaura": "Attaque automatiquement l'entité valide la plus proche chaque fois que vous cliquez.\n\n§c§lATTENTION:§r ClickAuras semble généralement plus suspect que Killauras et est plus facile à détecter pour les plugins. Il est recommandé d'utiliser Killaura ou TriggerBot à la place.", + "description.wurst.hack.clickgui": "ClickGUI basé sur une fenêtre.", + "description.wurst.hack.crashchest": "Génère un coffre qui bannit essentiellement les gens du serveur s'ils en ont trop de copies dans leur inventaire. §c§lATTENTION:§r §cCela ne peut pas être annulé. Utiliser avec précaution !§r\n\nSi des copies sont plutôt placées dans un coffre, quiconque ouvre le coffre sera expulsé du serveur (une seule fois).", + "description.wurst.hack.creativeflight": "Vous permet de voler comme en mode Créatif.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", + "description.wurst.hack.criticals": "Change tous vos coups en coups critiques.", + "description.wurst.hack.crystalaura": "Place automatiquement (optionel) et fait exploser les cristaux de l'end pour tuer les entités autour de vous.", + "description.wurst.hack.derp": "Bouge la tête au hasard.\nUniquement visible par les autres joueurs.", + "description.wurst.hack.dolphin": "Vous fait sauter dans l'eau automatiquement.\n(juste comme un dophin)", + "description.wurst.hack.excavator": "Casse automatiquement tous les blocs de la zone sélectionnée.", + "description.wurst.hack.extraelytra": "Rend l'Elytre plus facile à utiliser.", + "description.wurst.hack.fancychat": "Remplace les caractères ASCII dans les messages de chat envoyés par des caractères Unicode plus sophistiqués. Peut être utilisé pour contourner les filtres de mots maudits sur certains serveurs.\nNe fonctionne pas sur les serveurs qui bloquent les caractères unicode.", + "description.wurst.hack.fastbreak": "Vous permet de casser des blocs plus rapidement.\nConseil: Cela fonctionne avec le Nuker.", + "description.wurst.hack.fastladder": "Permet de grimper plus rapidement aux échelles.", + "description.wurst.hack.fastplace": "Vous permet de placer des blocs 5 fois plus rapidement.\nConseil: Cela peut accélérer d'autres hacks comme l'AutoBuild.", + "description.wurst.hack.feedaura": "Nourrit automatiquement les animaux autour de vous.", + "description.wurst.hack.fightbot": "Un bot qui se promène automatiquement et tue tout.\nBon pour les MobArena.", + "description.wurst.hack.fish": "Désactive la gravité sous-marine pour que vous puissiez nager comme un poisson.", + "description.wurst.hack.flight": "Permet de voler.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", + "description.wurst.hack.follow": "Un bot qui suit l'entité la plus proche.\nTrès ennuyant.\n\nUtilisez .follow pour suivre une entité spécifique.", + "description.wurst.hack.forceop": "Cracke les mots de passe AuthMe.\nPeut être utilisé pour devenir OP.", + "description.wurst.hack.freecam": "Permet de déplacer la caméra sans déplacer votre personnage.", + "description.wurst.hack.fullbright": "Permet de voir dans le noir.", + "description.wurst.hack.glide": "Vous fait glisser lentement en tombant.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", + "description.wurst.hack.handnoclip": "Vous permet d'atteindre des blocs spécifiques à travers les murs.", + "description.wurst.hack.headroll": "Vous fait hocher la tête tout le temps.\nUniquement visible par les autres joueurs.", + "description.wurst.hack.healthtags": "Affiche la santé des joueurs dans leurs nametags.", + "description.wurst.hack.highjump": "Permet de sauter plus haut.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", + "description.wurst.hack.infinichat": "Supprime la limite de 256 caractères du chat.\nUtile pour les commandes longues qui modifient les données NBT.\n\n§6§lREMARQUE:§r Pas recommandé pour parler aux gens. La plupart des serveurs réduiront les messages à 256 caractères de leur côté.", + "description.wurst.hack.instantbunker": "Construit un petit bunker autour de vous. Nécessite 57 blocs.", + "description.wurst.hack.invwalk": "Permet de se déplacer pendant que l'inventaire est ouvert.", + "description.wurst.setting.invwalk.allow_clickgui": "Vous permet de vous déplacer pendant que le ClickGUI de Wurst est ouvert.", + "description.wurst.setting.invwalk.allow_other": "Vous permet de vous déplacer pendant que d'autres écrans du jeu sont ouverts (par ex: coffre, cheval, vente avec un villageois), à moins que l'écran ne comporte une zone de texte.", + "description.wurst.hack.itemesp": "Met en évidence les objets à proximité.", + "description.wurst.hack.itemgenerator": "Génère des objets aléatoires et les laisse tomber sur le sol.\n§oMode Créatif uniquement.§r", + "description.wurst.hack.jesus": "Permet de marcher sur l'eau.\nJésus a utilisé ce hack il y a environ 2000 ans.", + "description.wurst.hack.jetpack": "Permet de voler comme si vous aviez un jetpack.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", + "description.wurst.hack.kaboom": "Brise les blocs autour de vous comme une explosion.\nCela peut être beaucoup plus rapide que le Nuker si le serveur n'a pas NoCheat+. Cela fonctionne mieux avec des outils rapides et des blocs faibles.\nNote: Ceci n'est pas une véritable explosion.", + "description.wurst.hack.killauralegit": "Killaura plus lent qui est plus difficile à détecter.\nNon requis sur les serveurs NoCheat+ normaux !", + "description.wurst.hack.killaura": "Attaque automatiquement les entités autour de vous.", + "description.wurst.hack.killpotion": "Génère une potion qui peut presque tout tuer, y compris les joueurs en mode Créatif. Ne fonctionne pas sur les monstres morts-vivants, car ils sont déjà morts.\n\nNécessite le mode Créatif.", + "description.wurst.hack.liquids": "Permet de placer des blocs dans des liquides.", + "description.wurst.hack.lsd": "Provoque des hallucinations.", + "description.wurst.hack.masstpa": "Envoie une requête TPA à tous les joueurs.", + "description.wurst.hack.mileycyrus": "Vous fait twerker.", + "description.wurst.hack.mobesp": "Met en évidence les monstres à proximité.", + "description.wurst.hack.mobspawnesp": "Met en évidence les zones où les monstres peuvent apparaître.\n§ejaune§r - les monstres peuvent apparaître la nuit\n§crouge§r - les monstres peuvent toujours apparaître", + "description.wurst.hack.multiaura": "Killaura plus rapide qui attaque plusieurs entités à la fois.", + "description.wurst.hack.nameprotect": "Masque tous les noms de joueurs.", + "description.wurst.hack.nametags": "Modifie l'échelle des nametags de nom afin que vous puissiez toujours les lire. Vous permet également de voir les nametags des joueurs accroupis.", + "description.wurst.hack.navigator": "Une interface graphique consultable qui apprend vos préférences au fil du temps.", + "description.wurst.hack.newchunks": "Surligne les tronçons qui viennent de se générer autour de vous.", + "description.wurst.hack.nobackground": "Supprime le fond sombre derrière les inventaires.", + "description.wurst.hack.noclip": "Vous permet de vous déplacer librement à travers les blocs.\nUn bloc (par exemple du sable) doit tomber sur votre tête pour l'activer.\n\n§c§lATTENTION:§r Vous subirez des dégâts en vous déplaçant à travers les blocs !", + "description.wurst.hack.nocomcrash": "Lags et plantages des serveurs en utilisant l'exploit Nocom.\nNe fonctionne pas sur les serveurs Paper. Testé en Vanilla, Spigot et Fabric. Peut être désactivé par certains AntiCheats.", + "description.wurst.hack.nofall": "Vous protège des dommages causés par les chutes.", + "description.wurst.hack.nofireoverlay": "Bloque l'overlay lorsque vous êtes en feu.\n\n§c§lATTENTION:§r Cela peut vous faire brûler jusqu'à la mort sans que vous vous en apercevez.", + "description.wurst.hack.nohurtcam": "Désactive l'effet de tremblement lorsque vous vous blessez.", + "description.wurst.hack.nolevitation": "Désactive l'effet de lévitation quand vous êtes touché par un Shulker.\n\n§c§lATTENTION:§r Vous tomberez si vous activez ceci alors que l'effet de lévitation est déjà actif!", + "description.wurst.hack.nooverlay": "Bloque les overlays d'eau et de lave.", + "description.wurst.hack.nopumpkin": "Bloque l'overlay lorsque vous portez une citrouille sur la tête.", + "description.wurst.hack.noslowdown": "Annule les effets de lenteur causés par le miel, le sable des âmes et l'utilisation d'objets.", + "description.wurst.hack.noweather": "Vous permet de modifier la météo, l'heure et la phase de lune côté client.", + "description.wurst.hack.noweb": "Vous évite d'être ralenti par les toiles d'araignées.", + "description.wurst.hack.nuker": "Brise automatiquement les blocs autour de vous.", + "description.wurst.hack.nukerlegit": "Nuker plus lent qui contourne tous les plugins AntiCheat.\nNon requis sur les serveurs NoCheat+ normaux !", + "description.wurst.hack.openwateresp": "Indique si vous pêchez ou non dans l'eau libre et dessine un cadre autour de la zone utilisée pour le calcul de l'eau libre.", + "description.wurst.hack.overlay": "Rend l'animation du Nuker chaque fois que vous cassez un bloc.", + "description.wurst.hack.panic": "Désactive instantanément tous les hacks activés.\nSoyez prudent avec celui-ci !", + "description.wurst.hack.parkour": "Vous fait sauter automatiquement lorsque vous atteignez le bord d'un bloc.\nUtile pour les parcours.", + "description.wurst.hack.playeresp": "Met en évidence les joueurs à proximité.\nLes boîtes ESP des amis apparaîtront en bleu.", + "description.wurst.hack.portalgui": "Vous permet d'ouvrir les GUI dans des portails.", + "description.wurst.hack.potionsaver": "Gèle tous les effets de potion pendant que vous êtes immobile.", + "description.wurst.hack.prophuntesp": "Permet de voir les faux blocs dans le Prophunt.\nConçu pour le Prohunt de Mineplex. Peut ne pas fonctionner sur d'autres serveurs.", + "description.wurst.hack.protect": "Un bot qui suit l'entité la plus proche et la protège des autres entités.\nUtilisez .protect pour protéger une entité spécifique au lieu de la plus proche.", + "description.wurst.hack.radar": "Affiche l'emplacement des entités à proximité.\n§crouge§r - joueurs\n§6orange§r - monstres\n§avert§r - animaux\n§7gris§r - autres", + "description.wurst.hack.rainbowui": "§cR§ae§9n§cd §at§9o§cu§at §9c§co§al§9o§cr§aé.", + "description.wurst.hack.reach": "Permet d'atteindre plus loin.", + "description.wurst.hack.remoteview": "Permet de voir le monde comme quelqu'un d'autre.\nUtilisez la commande .rv pour qu'il cible une entité spécifique.", + "description.wurst.hack.safewalk": "Vous empêche de tomber des bords.", + "description.wurst.hack.scaffoldwalk": "Place automatiquement des blocs sous vos pieds.", + "description.wurst.hack.search": "Vous aide à trouver des blocs spécifiques en les mettant en évidence en couleur arc-en-ciel.", + "description.wurst.hack.skinderp": "Bascule aléatoirement des parties de votre skin.", + "description.wurst.hack.sneak": "Vous fait vous s'accroupir automatiquement.", + "description.wurst.hack.snowshoe": "Permet de marcher sur de la poudreuse.", + "description.wurst.hack.speedhack": "Permet de courir ~2.5x plus vite que vous ne le feriez en sprintant et en sautant.\n\n§6§lATTENTION:§r Corrigé avec NoCheat+ version 3.13.2. Ne contournera que les anciennes versions de NoCheat+.\nTapez §l/ncp version§r pour vérifier la version NoCheat+ d'un serveur.", + "description.wurst.hack.speednuker": "Version plus rapide de Nuker qui ne peut pas contourner NoCheat+.", + "description.wurst.hack.spider": "Permet de grimper aux murs comme une araignée.", + "description.wurst.hack.step": "Vous permet d'intensifier les blocs complets.", + "description.wurst.hack.throw": "Utilise un objet plusieurs fois. Peut être utilisé pour lancer des boules de neige et des oeufs, faire apparaître des mobs, placer des minecarts, etc. en très grande quantité.\n\nCela peut causer beaucoup de lag et même planter un serveur.", + "description.wurst.hack.tillaura": "Transforme automatiquement la terre, l'herbe, etc. en terres labourés. À ne pas confondre avec le Killaura.", + "description.wurst.hack.timer": "Change la vitesse de presque tout.", + "description.wurst.hack.tired": "Vous fait ressembler à Alexander en avril 2015.\nUniquement visible par les autres joueurs.", + "description.wurst.hack.toomanyhax": "Bloque toutes les fonctionnalités dont vous ne voulez pas.\nVous permet de vous assurer que vous n'activez pas accidentellement le mauvais hack et que vous n'êtes pas banni pour cela.\nPour ceux qui veulent \"seulement cheat un peu\".\n\nUtilisez la commande §6.toomanyhax§r pour choisir les fonctionnalités à bloquer.\nFaites §6.help toomanyhax§r pour plus d'infos.", + "description.wurst.hack.tp-aura": "Attaque automatiquement l'entité valide la plus proche tout en se téléportant autour d'elle.", + "description.wurst.hack.trajectories": "Prédit la trajectoire de vol des flèches et des objets jetables.", + "description.wurst.hack.treebot": "Un bot expérimental qui se promène et coupe automatiquement les arbres.\nLimité aux petits arbres pour l'instant.", + "description.wurst.hack.triggerbot": "Attaque automatiquement l'entité que vous regardez.", + "description.wurst.hack.trollpotion": "Génère une potion avec de nombreux effets ennuyeux.", + "description.wurst.hack.truesight": "Permet de voir les entités invisibles.", + "description.wurst.hack.tunneller": "Creuse automatiquement un tunnel.\n\n§c§lATTENTION:§r Bien que ce bot essaie d'éviter la lave et d'autres dangers, il n'y a aucune garantie qu'il ne mourra pas. N'envoyez-le qu'avec du matériel que vous ne craignez pas de perdre.", + "description.wurst.hack.x-ray": "Permet de voir les minerais à travers les murs.", + "description.wurst.other_feature.nochatreports": "Désactive les signatures cryptographiques qui depuis la 1.19 sont attachées à vos messages de chat.\n\n§c§lATTENTION: §cSi §cvous §cenvoyez §cun §cmessage §cdans §cle §cchat §cavec §csignature, §cvotre §ccompte §cMinecraft §cpeut §cêtre §csignalé §cet §cêtre §cbanni §cglobalement §cdu §cmultijoueur !§r\n\nMême si vous ne dites que des choses inoffensives dans le chat, vos messages signés peuvent être abusés pour créer un faux signalement de chat qui banni injustement votre compte.\n\nSi vous devez réactiver les signatures de chat pour rejoindre un serveur, envisagez de ne pas utiliser leur chat du tout. Ou jouez sur un compte secondaire que cela ne vous dérange pas de perdre.", + "button.wurst.nochatreports.disable_signatures": "Désactiver les Signatures", + "button.wurst.nochatreports.re-enable_signatures": "Réactiver les Signatures", + "description.wurst.setting.generic.attack_speed": "Vitesse d'attaque en clics par seconde.\n0 = ajuste dynamiquement la vitesse pour correspondre à votre temps de recharge d'attaque.", + "description.wurst.setting.generic.pause_attack_on_containers": "N'attaque pas lorsqu'un écran de conteneur (coffre, entonnoir, etc.) est ouvert.\nUtile pour les serveurs de mini-jeux qui affichent des menus sous forme de coffre.", + "description.wurst.altmanager.premium": "Cet alt a un mot de passe et peut rejoindre tous les serveurs.", + "description.wurst.altmanager.cracked": "Cet alt n'a pas de mot de passe et ne fonctionnera que sur les serveurs cracks.", + "description.wurst.altmanager.failed": "La dernière fois que vous avez essayé de vous connecter avec cet alt, cela n'a pas fonctionné.", + "description.wurst.altmanager.checked": "Le mot de passe a fonctionné dans le passé.", + "description.wurst.altmanager.unchecked": "Vous ne vous êtes jamais connecté avec succès avec cet alt.", + "description.wurst.altmanager.favorite": "Vous avez marqué cet alt comme l'un de vos favoris.", + "description.wurst.altmanager.window": "Ce bouton ouvre une autre fenêtre.", + "description.wurst.altmanager.window_freeze": "Il peut sembler que le jeu ne répond pas lorsque cette fenêtre est ouverte.", + "description.wurst.altmanager.fullscreen": "§cDésactiver le mode plein écran !", + "gui.wurst.altmanager.folder_error.title": "Impossible de créer le dossier '.Wurst encryption' !", + "gui.wurst.altmanager.folder_error.message": "Vous avez peut-être accidentellement bloqué l'accès de Wurst à ce dossier.\nL'AltManager ne peut pas chiffrer ou déchiffrer votre liste d'alt sans lui.\nVous pouvez toujours utiliser l'AltManager, mais les alts que vous créez maintenant ne seront pas enregistrés.\n\nL'erreur complète est la suivante :\n%s", + "gui.wurst.altmanager.empty.title": "Votre liste d'alt est vide.", + "gui.wurst.altmanager.empty.message": "Aimeriez-vous quelques alts aléatoires pour commencer ?", + "gui.wurst.nochatreports.unsafe_server.title": "§4§lATTENTION :§r Serveur non protégé", + "gui.wurst.nochatreports.unsafe_server.message": "Ce serveur nécessite l'activation des signatures de chat, ce qui expose votre compte au risque de signalements de chat frauduleux.\n\nVous pouvez rejoindre ce serveur si vous débloquez les signatures de chat, puis vous reconnectez. Si vous le faites, envisagez de ne pas utiliser le chat du tout. Ou jouez sur un compte secondaire que cela ne vous dérange pas de perdre.\n\nS'il s'agit de votre serveur, vous pouvez résoudre ce problème en définissant 'enforce-secure-profile' sur false dans server.properties. À la manière typique de Mojang, ce paramètre fait le contraire de ce à quoi il ressemble.", + "toast.wurst.nochatreports.unsafe_server.title": "Les messages de chat peuvent être signalés", + "toast.wurst.nochatreports.unsafe_server.message": "Les messages envoyés sur ce serveur peuvent être signalés à Mojang Big Brother et votre compte peut être banni à l'échelle mondiale", + "gui.wurst.nochatreports.ncr_mod_server.title": "Serveur \"No Chat Reports\"", + "gui.wurst.nochatreports.ncr_mod_server.message": "Ce serveur utilise le mod \"No Chat Reports\".\n\nVous pouvez rejoindre ce serveur si vous bloquez les signatures de chat et désactivez le VanillaSpoof.", + "button.wurst.nochatreports.signatures_status": "Signatures: ", + "description.wurst.nochatreports.message_is_reportable": "Ce message a une signature valide et est donc vulnérable aux signalements de chat frauduleux.", + "gui.wurst.generic.allcaps_blocked": "BLOQUÉ", + "gui.wurst.generic.allcaps_allowed": "AUTORISÉ", + "key.wurst.zoom": "Zoom" +} diff --git a/src/main/resources/assets/wurst/lang/it_it.json b/src/main/resources/assets/wurst/lang/it_it.json index 55675eb0..a06ce19a 100644 --- a/src/main/resources/assets/wurst/lang/it_it.json +++ b/src/main/resources/assets/wurst/lang/it_it.json @@ -1,186 +1,186 @@ -{ - "description.wurst.hack.airplace": "Permette di posizionare blocchi in mezz'aria.", - "description.wurst.hack.anchoraura": "Posiziona automaticamente (opzionale), carica e fa esplodere le ancore di rigenerazione per uccidere le entità intorno a te.", - "description.wurst.hack.antiafk": "Cammina randomicamente per nasconderti dai detector di player AFK.", - "description.wurst.hack.antiblind": "Previene la cecità ed effetti oscurità.\nIncompatibile con OptiFine.", - "description.wurst.hack.anticactus": "Ti protegge dai danni causati dai cactus.", - "description.wurst.hack.antihunger": "Rallenta la tua fame quando cammini.", - "description.wurst.hack.antiknockback": "Annulla il knockback (non permette alle entità di spingerti).", - "description.wurst.hack.antispam": "Blocca gli spammer in chat mettendo un contatore per i messaggi.", - "description.wurst.hack.antiwaterpush": "Non permette all'acqua di spingerti.", - "description.wurst.hack.antiwobble": "Disattiva l'effetto oscillante causato dalla nausea e dai portali.", - "description.wurst.hack.arrowdmg": "Aumenta significativamente il danno da frecce, ma consuma anche un sacco di fame e riduce la mira.\n\nNon funziona con le balestre e sembra essere cionco nei server con il Paper.", - "description.wurst.setting.arrowdmg.packets": "Numero di pacchetti da inviare.\nPiù pacchetti = più danno.", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "Quando abilitato, i tridenti volano molto più lontano. Non sembra influire sul danno o sullo Risacca.\n\n§c§lATTENZIONE:§r Puoi facilmente perdere il tuo tridente abilitando questa opzione!", - "description.wurst.hack.autoarmor": "Gestisce la tua armatura automaticamente.", - "description.wurst.hack.autobuild": "Costruisce cose automaticamente.\nPiazza un blocco per cominciare a costruire.", - "description.wurst.hack.autodrop": "Droppa(toglie dall'inventario) automaticamente gli oggetti indesiderati.", - "description.wurst.hack.autoleave": "Abbandona automaticamente il server quando la tua salute è troppo bassa.", - "description.wurst.hack.autoeat": "Mangia quando necessario automaticamente.", - "description.wurst.setting.autoeat.target_hunger": "Cerca di mantenere la barra della fame a un livello pari o superiore a questo, ma solo se non spreca punti fame.", - "description.wurst.setting.autoeat.min_hunger": "Mantiene sempre la barra della fame a un livello pari o superiore a questo, anche se spreca alcuni punti fame.\n6.5 - Non può causare sprechi con gli alimenti alla vaniglia.\n10.0 - Ignora completamente gli sprechi e mantiene solo la barra della fame piena.", - "description.wurst.setting.autoeat.injured_hunger": "Riempie la barra della fame almeno fino a questo livello quando sei ferito, anche se spreca alcuni punti fame.\n10.0 - guarigione più veloce\n9.0 - guarigione più lenta\n<9.0 - nessuna guarigione\n<3.5 - nessuno scatto", - "description.wurst.setting.autoeat.injury_threshold": "Impedisce alle piccole ferite di sprecare tutto il cibo. AutoEat ti considererà infortunato solo se hai perso almeno questo numero di cuori.", - "description.wurst.setting.autoeat.take_items_from": "Dove AutoEat dovrebbe cercare cibo.", - "description.wurst.setting.autoeat.eat_while_walking": "Ti rallenta, non consigliato.", - "description.wurst.setting.autoeat.allow_hunger": "La carne marcia applica un innocuo effetto di \"fame\".\nÈ sicuro da mangiare e utile come alimento di emergenza.", - "description.wurst.setting.autoeat.allow_poison": "Il cibo velenoso provoca danni nel tempo.\nNon consigliato.", - "description.wurst.setting.autoeat.allow_chorus": "Mangiare il frutto di chorus ti teletrasporta in una posizione casuale.\nNon consigliato.", - "description.wurst.hack.autofarm": "Raccoglie e ripianta i raccolti automaticamente.\nFunziona con grano, carote, patate, barbabietole, zucche, meloni, cactus, canne da zucchero, alghe, bambù, verruche inferiori e fave di cacao.", - "description.wurst.hack.autofish": "Pesca automaticamente utilizzando la canna da pesca migliore. Se trova una migliore canna da pesca pescando, cambia automaticamente quella in uso con quella trovata.", - "description.wurst.hack.automine": "Distrugge ogni blocco che guardi automaticamente.", - "description.wurst.hack.autopotion": "Lancia una pozione di cura istantanea automaticamente quando la tua salute è bassa.", - "description.wurst.hack.autoreconnect": "Ti riconnette automaticamente da un server se vieni cacciato.", - "description.wurst.hack.autorespawn": "Ti fa respawnare automaticamente quando muori.", - "description.wurst.hack.autosign": "Scrive istantaneamente del testo su un qualsiasi cartello che piazzi. Una volta attivato, puoi cominciare a scrivere normalmente sul primo cartello che piazzi, il testo impostato per i cartelli che piazzerai successivamente sarà quello del primo cartello piazzato.", - "description.wurst.hack.autosoup": "Mangia automaticamente la zuppa se la tua salute è bassa.\n\n§lNota:§r Questo hack ignora la fame e presuppone che mangiare zuppa riempia direttamente la tua salute. Se il server su cui stai giocando non è configurato per farlo, usa AutoEat.", - "description.wurst.hack.autosprint": "Corri automaticamente.", - "description.wurst.hack.autosteal": "Ruba automaticamente tutto quello che c'è dentro le casse e gli shulker-box che apri.", - "description.wurst.hack.autoswim": "Attiva automaticamente l'animazione di nuoto.", - "description.wurst.hack.autoswitch": "Cambia continuamente l'oggetto che hai in mano.\n\n§lConsiglio:§r Usalo in combinazione con BuildRandom mentre hai molti blocchi di lana o cemento di colore diverso nella tua hotbar.", - "description.wurst.hack.autosword": "Usa automaticamente l'arma migliore nella tua hotbar per attaccare le entità.\nSuggerimento: funziona bene con la Killaura.", - "description.wurst.hack.autotool": "Equipaggia automaticamente lo strumento più veloce applicabile nella tua hotbar quando provi a rompere un blocco.", - "description.wurst.hack.autototem": "Sposta automaticamente i totem dell'immortalità nella tua mano secondaria.", - "description.wurst.hack.autowalk": "Ti fa camminare automaticamente.", - "description.wurst.hack.basefinder": "Trova le basi dei giocatori cercando i blocchi creati dall'uomo.\nI blocchi che trova verranno evidenziati nel colore selezionato.\nBuono per trovare le basi delle fazioni.", - "description.wurst.hack.blink": "Sospende tutti i motion update mentre è abilitato.", - "description.wurst.hack.boatfly": "Ti permette di volare con barche e altri veicoli.\nPremi il tasto sprint per scendere più velocemente.", - "description.wurst.hack.bonemealaura": "Usa automaticamente la farina d'ossa su tipi specifici di piante.\nUtilizza le caselle di controllo per specificare i tipi di piante.", - "description.wurst.hack.bowaimbot": "Mira automaticamente con l'arco o la balestra.", - "description.wurst.hack.buildrandom": "Piazza blocchi intorno a te in modo casuale.", - "description.wurst.hack.bunnyhop": "Ti fa saltare automaticamente.", - "description.wurst.hack.cameradistance": "Ti permette di cambiare la distanza della fotocamera in 3a persona.", - "description.wurst.hack.cameranoclip": "Consente alla telecamera in terza persona di attraversare i muri.", - "description.wurst.hack.cavefinder": "Ti aiuta a trovare delle caverne evidenziandole con il colore selezionato.", - "description.wurst.hack.chattranslator": "Traduce i messaggi in chat utilizzando Google Translate.", - "description.wurst.hack.chestesp": "Evidenzia le casse vicine.", - "description.wurst.hack.clickaura": "Attacca automaticamente l'entità valida più vicina ogni volta che clicchi.\n\n§c§lAVVERTENZA:§r La ClickAura generalmente sembra più sospetta della Killaura ed è più facile da rilevare per i plugin. Si consiglia invece di utilizzare Killaura o TriggerBot.", - "description.wurst.hack.clickgui": "Una Click-GUI a finestra.", - "description.wurst.hack.crashchest": "Genera una cassa che essenzialmente bandisce le persone dal server se ne hanno troppe copie nel loro inventario. §c§lATTENZIONE:§r §cQuesto non può essere annullato. Usare con cautela!§r\n\nSe invece le copie vengono messe in una cassa, chiunque apra la cassa verrà espulso dal server (solo una volta).", - "description.wurst.hack.creativeflight": "Ti fa volare come se fossi in creativa.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi la NoFall.", - "description.wurst.hack.criticals": "Cambia tutte le tue hit in critiche.", - "description.wurst.hack.crystalaura": "Posiziona automaticamente (opzionale) e fa esplodere i cristalli dell'end per uccidere le entità intorno a te.", - "description.wurst.hack.derp": "Muovi casualmente la testa.\nVisibile solo agli altri giocatori.", - "description.wurst.hack.dolphin": "Ti fa saltare in acqua automaticamente.\n(proprio come un delfino)", - "description.wurst.hack.excavator": "Rompe automaticamente tutti i blocchi nell'area selezionata.", - "description.wurst.hack.extraelytra": "Rende l'Elytra più facile da usare.", - "description.wurst.hack.fancychat": "Sostituisce i caratteri ASCII nei messaggi inviati in chat con caratteri Unicode più elaborati. Può essere utilizzato per aggirare i filtri delle parolacce su alcuni server.\nNon funziona su server che bloccano i caratteri Unicode.", - "description.wurst.hack.fastbreak": "Ti fa rompere i blocchi più velocemente.\nConsiglio: Funziona bene con il Nuker.", - "description.wurst.hack.fastladder": "Ti fa usare le scale a pioli più velocemente.", - "description.wurst.hack.fastplace": "Ti fa piazzare i blocchi 5 volte più velocemente.\nConsiglio: Può rendere più veloci le operazioni fatte con altre hack, come la AutoBuild.", - "description.wurst.hack.feedaura": "Nutre automaticamente gli animali intorno a te.", - "description.wurst.hack.fightbot": "Un bot che cammina e uccide tutti i mob automaticamente.\nBuono per le MobArena.", - "description.wurst.hack.fish": "Disabilita la gravità sott'acqua così puoi nuotare come un pesce.", - "description.wurst.hack.flight": "Ti permette di volare.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi NoFall.", - "description.wurst.hack.follow": "Un bot che segue l'entità più vicina.\nMolto fastidioso.\n\nUsa .follow per scegliere l'entità.", - "description.wurst.hack.forceop": "Cracca le password di AuthMe.\nPuò essere usato per diventare OP.", - "description.wurst.hack.freecam": "Ti permette di muovere la telecamera senza muovere il tuo personaggio.", - "description.wurst.hack.fullbright": "Ti fa vedere meglio al buio.", - "description.wurst.hack.glide": "Ti fa scivolare giù lentamente quando cadi.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi la NoFall.", - "description.wurst.hack.handnoclip": "Ti permette di raggiungere certi oggetti attraverso il muro.", - "description.wurst.hack.headroll": "Ti fa annuire continuamente.\nVisibile solo ad altri giocatori.", - "description.wurst.hack.healthtags": "Mostra la salute dei giocatori nelle loro targhette.", - "description.wurst.hack.highjump": "Ti permette di saltare più in alto.\n\n§c§ATTENZIONE:§r subirai danni da caduta se non usi NoFall.", - "description.wurst.hack.infinichat": "Toglie il limite di 256 caratteri per messaggio nella chat.\nUtile per lunghi comandi che modificano i dati NBT.\n\n§6§lNOTA:§r Non consigliato per parlare con le persone. La maggior parte dei server tagliano i messaggi di oltre 256 caratteri.", - "description.wurst.hack.instantbunker": "Costruisce un piccolo bunker intorno a te. Necessita di 57 blocchi.", - "description.wurst.hack.invwalk": "Ti permette di muoverti mentre l'inventario è aperto.", - "description.wurst.setting.invwalk.allow_clickgui": "Ti permette di muoverti mentre la ClickGUI di Wurst è aperta.", - "description.wurst.setting.invwalk.allow_other": "Permette di muoversi mentre altre schermate di gioco sono aperte (ad esempio ceste, \ncavallo, commercio con i villico), a meno che lo schermo non abbia una casella di testo.", - "description.wurst.hack.itemesp": "Evidenzia gli item vicini.", - "description.wurst.hack.itemgenerator": "Genera item randomici e li butta per terra.\n§oSi può usare solo in modalità creativa.§r", - "description.wurst.hack.jesus": "Ti fa camminare sull'acqua.\nGesù ha usato questa hack circa 2000 anni fa.", - "description.wurst.hack.jetpack": "Ti fa volare come se indossassi un jetpack.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi NoFall.", - "description.wurst.hack.kaboom": "Rompe i blocchi intorno a te come un'esplosione.\nQuesto può essere molto più veloce di Nuker se il server non ha NoCheat+. Funziona al meglio con strumenti veloci e blocchi deboli.\nNota: questa non è una vera esplosione.", - "description.wurst.hack.killauralegit": "La Killaura ma più lenta: più difficile da identificare per gli anticheat.\nNon è necessaria nei server con NoCheat+ standard!", - "description.wurst.hack.killaura": "Attacca automaticamentele entità intorno a te.", - "description.wurst.hack.killpotion": "Genera una pozione che può uccidere quasi tutto, inclusi i giocatori in modalità Creativa. Non funziona sui mob non morti, poiché sono già morti.\n\nRichiede la modalità Creativa.", - "description.wurst.hack.liquids": "Ti permette di piazzare blocchi nei liquidi.", - "description.wurst.hack.lsd": "Causa allucinazioni da LSD.", - "description.wurst.hack.masstpa": "Manda una richiesta di teletrasporto a tutti i giocatori.", - "description.wurst.hack.mileycyrus": "Ti fa twerkare.", - "description.wurst.hack.mobesp": "Evidenzia i mob vicini.", - "description.wurst.hack.mobspawnesp": "Evidenzia le aree dove i mob possono spawnare.\n§egiallo§r - I mob possono nascere durante la notte\n§crosso§r - i mob possono nascere sempre", - "description.wurst.hack.multiaura": "Killaura più veloce che attacca più entità in una sola volta.", - "description.wurst.hack.nameprotect": "Nasconde i nomi dei giocatori.", - "description.wurst.hack.nametags": "Modifica la scala delle targhette in modo da poterle leggere sempre. Ti permette anche di vedere le targhette dei giocatori piegati.", - "description.wurst.hack.navigator": "Una GUI che apprende le tue preferenze nel tempo.", - "description.wurst.hack.newchunks": "Evidenzia i chunk mai visitati intorno a te.", - "description.wurst.hack.nobackground": "Rimuove lo sfondo nero nell'inventario.", - "description.wurst.hack.noclip": "Ti permette di muoverti attraverso i blocchi.\nUn blocco (es. sabbia) deve cadere sulla tua testa per attivarlo.\n\n§c§lATTENZIONE:§r Prenderai danno mentre ti muovi fra i blocchi.", - "description.wurst.hack.nocomcrash": "Crea lag e fa crashare i server usando l'exploit Nocom.\nNon funziona nei server con Paper. Testato su Vanilla, Spigot, e Fabric. Può essere disabilitato da alcuni AntiCheats.", - "description.wurst.hack.nofall": "Ti protegge dal danno da caduta.", - "description.wurst.hack.nofireoverlay": "Blocca le animazioni di quando sei in fiamme.\n\n§c§lATTENZIONE:§r Questo può causare morte per il fuoco senza che tu te ne accorga.", - "description.wurst.hack.nohurtcam": "Disattiva l'oscillamento della telecamera quando ti fai male.", - "description.wurst.hack.nolevitation": "Disabilita l'effetto levitazione quando si viene colpiti da uno Shulker.\n\n§c§lATTENZIONE:§r Cadrai se attiverai questo mentre l'effetto levitazione è già attivo!", - "description.wurst.hack.nooverlay": "Blocca gli overlay di lava e acqua.", - "description.wurst.hack.nopumpkin": "Blocca la copertura di quando indossi una zucca in testa.", - "description.wurst.hack.noslowdown": "Rimuove la lentezza applicata da blocchi come la sabbia delle anime o i blocchi di miele.", - "description.wurst.hack.noweather": "Consente di modificare il tempo, l'ora e le fasi lunari lato client.", - "description.wurst.hack.noweb": "Rimuove la lentezza applicata dalle ragnatele.", - "description.wurst.hack.nuker": "Distrugge i blocchi intorno a te automaticamente.", - "description.wurst.hack.nukerlegit": "Nuker più lento che bypassa tutti i plugin Anti Cheat.\n Non richiesto sui normali server NoCheat+!", - "description.wurst.hack.openwateresp": "Mostra se stai pescando in acque libere e disegna un riquadro intorno all'area utilizzata per il calcolo in acque libere.", - "description.wurst.hack.overlay": "Renderizza l'animazione di Nuker ogni volta che distruggi un blocco.", - "description.wurst.hack.panic": "Disattiva tutte le hack utilizzate.\n Pensa prima di usarlo usi!", - "description.wurst.hack.parkour": "Ti fa saltare automaticamente quando arrivi alla fine di un blocco.\nUtile per i parkour e per le jump'n'runs.", - "description.wurst.hack.playeresp": "Evidenzia i giocatori vicini.\nI riquadri ESP degli amici saranno in blu.", - "description.wurst.hack.portalgui": "Ti permette di aprire le GUI nei portali.", - "description.wurst.hack.potionsaver": "Blocca tutti gli effetti della pozione mentre sei fermo.", - "description.wurst.hack.prophuntesp": "Ti permette di vedere i blocchi falsi in PropHunt.\n Fatto per la PropHunt di Mineplex. Potrebbe non funzionare su altri server.", - "description.wurst.hack.protect": "Un bot che segue l'entità più vicina e la protegge da altre entità.\nUsa .protect per proteggere un'entità specifica invece di quella più vicina.", - "description.wurst.hack.radar": "Mostra la posizione delle entità vicine.\n§crosso§r - Giocatori\n§6arancione§r - Mostri\n§averde§r - Animali\n§7grigio§r - Altro", - "description.wurst.hack.rainbowui": "§cT§au§9t§ct§ao §9d§ci§av§9e§cn§at§9a §ca§ar§9c§co§ab§9a§cl§ae§9n§co.", - "description.wurst.hack.reach": "Ti permette di andare più lontano.", - "description.wurst.hack.remoteview": "Ti permette di vedere il mondo come qualcun altro.\nUsa il comando .rv per farlo mirare a un'entità specifica.", - "description.wurst.hack.safewalk": "Ti impedisce di cadere dai bordi.", - "description.wurst.hack.scaffoldwalk": "Posiziona automaticamente i blocchi sotto i tuoi piedi.", - "description.wurst.hack.search": "Ti aiuta a trovare blocchi specifici evidenziandoli nel colore dell'arcobaleno.", - "description.wurst.hack.skinderp": "Alterna casualmente parti della tua pelle.", - "description.wurst.hack.sneak": "Ti fa piegare automaticamente.", - "description.wurst.hack.snowshoe": "Consente di camminare su neve farinosa.", - "description.wurst.hack.speedhack": "Ti permette di correre circa 2.5 volte più velocemente di quanto faresti facendo sprint e salti.\n\n§6§lAVVERTENZA:§r Patchato in NoCheat+ versione 3.13.2. Ignorerà solo le versioni precedenti di NoCheat+.\nDigitare §l/ncp version§r per controllare la versione NoCheat+ di un server.", - "description.wurst.hack.speednuker": "Versione più veloce della Nuker che non ti fa bypassare gli Anticheat.", - "description.wurst.hack.spider": "Ti permette di arrampicarti sui muri come un ragno.", - "description.wurst.hack.step": "Ti consente di camminare di blocchi completi.", - "description.wurst.hack.throw": "Utilizza un oggetto più volte. Può essere usato per lanciare palle di neve e uova, generare mob, posizionare carrelli da miniera, ecc. in grandi quantità.\n\nCiò può causare molto ritardo e persino mandare in crash un server.", - "description.wurst.hack.tillaura": "Trasforma automaticamente terra, erba, ecc. in terreno agricolo.\nDa non confondere con Killaura.", - "description.wurst.hack.timer": "Cambia la velocità di quasi tutto.", - "description.wurst.hack.tired": "Ti fa sembrare Alexander nell'aprile 2015.\nVisibile solo ad altri giocatori.", - "description.wurst.hack.toomanyhax": "Blocca tutte le funzionalità che non desideri.\nTi permette di assicurarti di non abilitare accidentalmente l'hacking sbagliato e di essere bannato per questo.\nPer coloro che vogliono \"hackerare solo un po'\".\n \nUtilizzare il comando §6.toomanyhax§r per scegliere quali funzioni bloccare.\nDigitare §6.help toomanyhax§r per ulteriori informazioni.", - "description.wurst.hack.tp-aura": "Attacca automaticamente l'entità valida più vicina mentre si teletrasporta intorno ad essa.", - "description.wurst.hack.trajectories": "Predice la traiettoria di volo di frecce e oggetti lanciabili.", - "description.wurst.hack.treebot": "Un bot sperimentale che cammina automaticamente e abbatte gli alberi.\nPer ora limitato ai piccoli alberi.", - "description.wurst.hack.triggerbot": "Attacca automaticamente l'entità che stai guardando.", - "description.wurst.hack.trollpotion": "Genera una pozione con molti effetti fastidiosi su di essa.", - "description.wurst.hack.truesight": "Ti permette di vedere entità invisibili.", - "description.wurst.hack.tunneller": "Scava automaticamente un tunnel.\n\n§c§lATTENZIONE:§r Sebbene questo bot cercherà di evitare la lava e altri pericoli, non vi è alcuna garanzia che non muoia. Invialo solo con equipaggiamento che non ti dispiace perdere.", - "description.wurst.hack.x-ray": "Ti permette di vedere i minerali attraverso i muri.", - "description.wurst.other_feature.nochatreports": "Disabilita le firme crittografiche che dalla 1.19 sono allegate ai tuoi messaggi di chat.\n\n§c§lATTENZIONE: §cSe §ctu §cinvii §cchat §cmessaggi §ccon §cfirme, §cil §ctuo §cL'account §cMinecraft §cpuò §cessere §csegnalato §ce §ca §clivello §cglobale §cbandito §cdal §cmultiplayer!§r\n\nAnche se dici solo cose innocue in chat, i tuoi messaggi firmati possono essere maltrattati per creare un falso rapporto di chat che faccia bannare il tuo account ingiustamente.\n\nSe devi riattivare le firme della chat per unirti a un server, considera di non utilizzare affatto la loro chat. Oppure gioca con un account alternativo che non ti dispiace perdere.", - "button.wurst.nochatreports.disable_signatures": "Disabilita firme", - "button.wurst.nochatreports.re-enable_signatures": "Riattiva le firme", - "description.wurst.setting.generic.attack_speed": "Velocità d'attacco in clic al secondo.\n0 = regola dinamicamente la velocità in base al tempo di recupero dell'attacco.", - "description.wurst.setting.generic.pause_attack_on_containers": "Non attaccherà mentre è aperta la schermata di un container (forziere, tramoggia, ecc.).\nUtile per i server di minigiochi che mostrano menu simili a forzieri.", - "description.wurst.altmanager.premium": "Questo alt ha una password e può unirsi a tutti i server.", - "description.wurst.altmanager.cracked": "Questo alt non ha password e funzionerà solo su server crackati.", - "description.wurst.altmanager.failed": "L'ultima volta che hai provato ad accedere con questo alt, non ha funzionato.", - "description.wurst.altmanager.checked": "La password ha funzionato in passato.", - "description.wurst.altmanager.unchecked": "Non hai mai effettuato correttamente l'accesso con questa alt.", - "description.wurst.altmanager.favorite": "Hai contrassegnato questo alt come uno dei tuoi preferiti.", - "description.wurst.altmanager.window": "Questo pulsante apre un'altra finestra.", - "description.wurst.altmanager.window_freeze": "Potrebbe sembrare che il gioco non risponda mentre quella finestra è aperta.", - "description.wurst.altmanager.fullscreen": "§cDisattiva la modalità a schermo intero!", - "gui.wurst.altmanager.folder_error.title": "Non è stato possibile creare la cartella '.Wurst encryption'!", - "gui.wurst.altmanager.folder_error.message": "Potresti aver accidentalmente bloccato l'accesso a questa cartella.\nAltManager non può cifrare o decifrare la tua lista alt senza di essa.\nPuoi ancora usare AltManager, ma qualsiasi alt che crei ora non verrà salvato.\n\nL'errore completo è il seguente:\n%s", - "gui.wurst.altmanager.empty.title": "La tua lista alt è vuota.", - "gui.wurst.altmanager.empty.message": "Vorresti creare qualche alt casuale per iniziare?", - "gui.wurst.nochatreports.unsafe_server.title": "§4§lATTENZIONE:§r Server Non Sicuro", - "gui.wurst.nochatreports.unsafe_server.message": "Questo server richiede che le firme di chat siano abilitate, il che mette il tuo account a rischio di chat report.\n\nPuoi unirti a questo server se sblocchi le firme di chat e poi riconnetterti. Se lo fai, considera di non usare la chat. O giocare su un account alt che non ti dispiace perdere.\n\nSe questo è il tuo server, puoi risolvere questo problema impostando 'enforce-secure-profile' su false nelle server.properties. Nell tipico Mojang fashion, questa impostazione fa l'opposto di quello che dice.", - "toast.wurst.nochatreports.unsafe_server.title": "I messaggi in chat possono essere segnalati", - "toast.wurst.nochatreports.unsafe_server.message": "I messaggi in questo server possono essere segnalati alla Mojang e forse il tuo account può essere bannato globalmente", - "gui.wurst.nochatreports.ncr_mod_server.title": "Server \"No Chat Reports\"", - "gui.wurst.nochatreports.ncr_mod_server.message": "Questo server utilizza la mod \"No Chat Reports\".\n\nPuoi unirti a questo server se blocchi le firme di chat e disabiliti VanillaSpoof.", - "button.wurst.nochatreports.signatures_status": "Firme: ", - "description.wurst.nochatreports.message_is_reportable": "Questo messaggio ha una firma valida ed è quindi vulnerabile ai chat reports.", - "gui.wurst.generic.allcaps_blocked": "BLOCCATO", - "gui.wurst.generic.allcaps_allowed": "PERMESSO" -} \ No newline at end of file +{ + "description.wurst.hack.airplace": "Permette di posizionare blocchi in mezz'aria.", + "description.wurst.hack.anchoraura": "Posiziona automaticamente (opzionale), carica e fa esplodere le ancore di rigenerazione per uccidere le entità intorno a te.", + "description.wurst.hack.antiafk": "Cammina randomicamente per nasconderti dai detector di player AFK.", + "description.wurst.hack.antiblind": "Previene la cecità ed effetti oscurità.\nIncompatibile con OptiFine.", + "description.wurst.hack.anticactus": "Ti protegge dai danni causati dai cactus.", + "description.wurst.hack.antihunger": "Rallenta la tua fame quando cammini.", + "description.wurst.hack.antiknockback": "Annulla il knockback (non permette alle entità di spingerti).", + "description.wurst.hack.antispam": "Blocca gli spammer in chat mettendo un contatore per i messaggi.", + "description.wurst.hack.antiwaterpush": "Non permette all'acqua di spingerti.", + "description.wurst.hack.antiwobble": "Disattiva l'effetto oscillante causato dalla nausea e dai portali.", + "description.wurst.hack.arrowdmg": "Aumenta significativamente il danno da frecce, ma consuma anche un sacco di fame e riduce la mira.\n\nNon funziona con le balestre e sembra essere cionco nei server con il Paper.", + "description.wurst.setting.arrowdmg.packets": "Numero di pacchetti da inviare.\nPiù pacchetti = più danno.", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "Quando abilitato, i tridenti volano molto più lontano. Non sembra influire sul danno o sullo Risacca.\n\n§c§lATTENZIONE:§r Puoi facilmente perdere il tuo tridente abilitando questa opzione!", + "description.wurst.hack.autoarmor": "Gestisce la tua armatura automaticamente.", + "description.wurst.hack.autobuild": "Costruisce cose automaticamente.\nPiazza un blocco per cominciare a costruire.", + "description.wurst.hack.autodrop": "Droppa(toglie dall'inventario) automaticamente gli oggetti indesiderati.", + "description.wurst.hack.autoleave": "Abbandona automaticamente il server quando la tua salute è troppo bassa.", + "description.wurst.hack.autoeat": "Mangia quando necessario automaticamente.", + "description.wurst.setting.autoeat.target_hunger": "Cerca di mantenere la barra della fame a un livello pari o superiore a questo, ma solo se non spreca punti fame.", + "description.wurst.setting.autoeat.min_hunger": "Mantiene sempre la barra della fame a un livello pari o superiore a questo, anche se spreca alcuni punti fame.\n6.5 - Non può causare sprechi con gli alimenti alla vaniglia.\n10.0 - Ignora completamente gli sprechi e mantiene solo la barra della fame piena.", + "description.wurst.setting.autoeat.injured_hunger": "Riempie la barra della fame almeno fino a questo livello quando sei ferito, anche se spreca alcuni punti fame.\n10.0 - guarigione più veloce\n9.0 - guarigione più lenta\n<9.0 - nessuna guarigione\n<3.5 - nessuno scatto", + "description.wurst.setting.autoeat.injury_threshold": "Impedisce alle piccole ferite di sprecare tutto il cibo. AutoEat ti considererà infortunato solo se hai perso almeno questo numero di cuori.", + "description.wurst.setting.autoeat.take_items_from": "Dove AutoEat dovrebbe cercare cibo.", + "description.wurst.setting.autoeat.eat_while_walking": "Ti rallenta, non consigliato.", + "description.wurst.setting.autoeat.allow_hunger": "La carne marcia applica un innocuo effetto di \"fame\".\nÈ sicuro da mangiare e utile come alimento di emergenza.", + "description.wurst.setting.autoeat.allow_poison": "Il cibo velenoso provoca danni nel tempo.\nNon consigliato.", + "description.wurst.setting.autoeat.allow_chorus": "Mangiare il frutto di chorus ti teletrasporta in una posizione casuale.\nNon consigliato.", + "description.wurst.hack.autofarm": "Raccoglie e ripianta i raccolti automaticamente.\nFunziona con grano, carote, patate, barbabietole, zucche, meloni, cactus, canne da zucchero, alghe, bambù, verruche inferiori e fave di cacao.", + "description.wurst.hack.autofish": "Pesca automaticamente utilizzando la canna da pesca migliore. Se trova una migliore canna da pesca pescando, cambia automaticamente quella in uso con quella trovata.", + "description.wurst.hack.automine": "Distrugge ogni blocco che guardi automaticamente.", + "description.wurst.hack.autopotion": "Lancia una pozione di cura istantanea automaticamente quando la tua salute è bassa.", + "description.wurst.hack.autoreconnect": "Ti riconnette automaticamente da un server se vieni cacciato.", + "description.wurst.hack.autorespawn": "Ti fa respawnare automaticamente quando muori.", + "description.wurst.hack.autosign": "Scrive istantaneamente del testo su un qualsiasi cartello che piazzi. Una volta attivato, puoi cominciare a scrivere normalmente sul primo cartello che piazzi, il testo impostato per i cartelli che piazzerai successivamente sarà quello del primo cartello piazzato.", + "description.wurst.hack.autosoup": "Mangia automaticamente la zuppa se la tua salute è bassa.\n\n§lNota:§r Questo hack ignora la fame e presuppone che mangiare zuppa riempia direttamente la tua salute. Se il server su cui stai giocando non è configurato per farlo, usa AutoEat.", + "description.wurst.hack.autosprint": "Corri automaticamente.", + "description.wurst.hack.autosteal": "Ruba automaticamente tutto quello che c'è dentro le casse e gli shulker-box che apri.", + "description.wurst.hack.autoswim": "Attiva automaticamente l'animazione di nuoto.", + "description.wurst.hack.autoswitch": "Cambia continuamente l'oggetto che hai in mano.\n\n§lConsiglio:§r Usalo in combinazione con BuildRandom mentre hai molti blocchi di lana o cemento di colore diverso nella tua hotbar.", + "description.wurst.hack.autosword": "Usa automaticamente l'arma migliore nella tua hotbar per attaccare le entità.\nSuggerimento: funziona bene con la Killaura.", + "description.wurst.hack.autotool": "Equipaggia automaticamente lo strumento più veloce applicabile nella tua hotbar quando provi a rompere un blocco.", + "description.wurst.hack.autototem": "Sposta automaticamente i totem dell'immortalità nella tua mano secondaria.", + "description.wurst.hack.autowalk": "Ti fa camminare automaticamente.", + "description.wurst.hack.basefinder": "Trova le basi dei giocatori cercando i blocchi creati dall'uomo.\nI blocchi che trova verranno evidenziati nel colore selezionato.\nBuono per trovare le basi delle fazioni.", + "description.wurst.hack.blink": "Sospende tutti i motion update mentre è abilitato.", + "description.wurst.hack.boatfly": "Ti permette di volare con barche e altri veicoli.\nPremi il tasto sprint per scendere più velocemente.", + "description.wurst.hack.bonemealaura": "Usa automaticamente la farina d'ossa su tipi specifici di piante.\nUtilizza le caselle di controllo per specificare i tipi di piante.", + "description.wurst.hack.bowaimbot": "Mira automaticamente con l'arco o la balestra.", + "description.wurst.hack.buildrandom": "Piazza blocchi intorno a te in modo casuale.", + "description.wurst.hack.bunnyhop": "Ti fa saltare automaticamente.", + "description.wurst.hack.cameradistance": "Ti permette di cambiare la distanza della fotocamera in 3a persona.", + "description.wurst.hack.cameranoclip": "Consente alla telecamera in terza persona di attraversare i muri.", + "description.wurst.hack.cavefinder": "Ti aiuta a trovare delle caverne evidenziandole con il colore selezionato.", + "description.wurst.hack.chattranslator": "Traduce i messaggi in chat utilizzando Google Translate.", + "description.wurst.hack.chestesp": "Evidenzia le casse vicine.", + "description.wurst.hack.clickaura": "Attacca automaticamente l'entità valida più vicina ogni volta che clicchi.\n\n§c§lAVVERTENZA:§r La ClickAura generalmente sembra più sospetta della Killaura ed è più facile da rilevare per i plugin. Si consiglia invece di utilizzare Killaura o TriggerBot.", + "description.wurst.hack.clickgui": "Una Click-GUI a finestra.", + "description.wurst.hack.crashchest": "Genera una cassa che essenzialmente bandisce le persone dal server se ne hanno troppe copie nel loro inventario. §c§lATTENZIONE:§r §cQuesto non può essere annullato. Usare con cautela!§r\n\nSe invece le copie vengono messe in una cassa, chiunque apra la cassa verrà espulso dal server (solo una volta).", + "description.wurst.hack.creativeflight": "Ti fa volare come se fossi in creativa.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi la NoFall.", + "description.wurst.hack.criticals": "Cambia tutte le tue hit in critiche.", + "description.wurst.hack.crystalaura": "Posiziona automaticamente (opzionale) e fa esplodere i cristalli dell'end per uccidere le entità intorno a te.", + "description.wurst.hack.derp": "Muovi casualmente la testa.\nVisibile solo agli altri giocatori.", + "description.wurst.hack.dolphin": "Ti fa saltare in acqua automaticamente.\n(proprio come un delfino)", + "description.wurst.hack.excavator": "Rompe automaticamente tutti i blocchi nell'area selezionata.", + "description.wurst.hack.extraelytra": "Rende l'Elytra più facile da usare.", + "description.wurst.hack.fancychat": "Sostituisce i caratteri ASCII nei messaggi inviati in chat con caratteri Unicode più elaborati. Può essere utilizzato per aggirare i filtri delle parolacce su alcuni server.\nNon funziona su server che bloccano i caratteri Unicode.", + "description.wurst.hack.fastbreak": "Ti fa rompere i blocchi più velocemente.\nConsiglio: Funziona bene con il Nuker.", + "description.wurst.hack.fastladder": "Ti fa usare le scale a pioli più velocemente.", + "description.wurst.hack.fastplace": "Ti fa piazzare i blocchi 5 volte più velocemente.\nConsiglio: Può rendere più veloci le operazioni fatte con altre hack, come la AutoBuild.", + "description.wurst.hack.feedaura": "Nutre automaticamente gli animali intorno a te.", + "description.wurst.hack.fightbot": "Un bot che cammina e uccide tutti i mob automaticamente.\nBuono per le MobArena.", + "description.wurst.hack.fish": "Disabilita la gravità sott'acqua così puoi nuotare come un pesce.", + "description.wurst.hack.flight": "Ti permette di volare.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi NoFall.", + "description.wurst.hack.follow": "Un bot che segue l'entità più vicina.\nMolto fastidioso.\n\nUsa .follow per scegliere l'entità.", + "description.wurst.hack.forceop": "Cracca le password di AuthMe.\nPuò essere usato per diventare OP.", + "description.wurst.hack.freecam": "Ti permette di muovere la telecamera senza muovere il tuo personaggio.", + "description.wurst.hack.fullbright": "Ti fa vedere meglio al buio.", + "description.wurst.hack.glide": "Ti fa scivolare giù lentamente quando cadi.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi la NoFall.", + "description.wurst.hack.handnoclip": "Ti permette di raggiungere certi oggetti attraverso il muro.", + "description.wurst.hack.headroll": "Ti fa annuire continuamente.\nVisibile solo ad altri giocatori.", + "description.wurst.hack.healthtags": "Mostra la salute dei giocatori nelle loro targhette.", + "description.wurst.hack.highjump": "Ti permette di saltare più in alto.\n\n§c§ATTENZIONE:§r subirai danni da caduta se non usi NoFall.", + "description.wurst.hack.infinichat": "Toglie il limite di 256 caratteri per messaggio nella chat.\nUtile per lunghi comandi che modificano i dati NBT.\n\n§6§lNOTA:§r Non consigliato per parlare con le persone. La maggior parte dei server tagliano i messaggi di oltre 256 caratteri.", + "description.wurst.hack.instantbunker": "Costruisce un piccolo bunker intorno a te. Necessita di 57 blocchi.", + "description.wurst.hack.invwalk": "Ti permette di muoverti mentre l'inventario è aperto.", + "description.wurst.setting.invwalk.allow_clickgui": "Ti permette di muoverti mentre la ClickGUI di Wurst è aperta.", + "description.wurst.setting.invwalk.allow_other": "Permette di muoversi mentre altre schermate di gioco sono aperte (ad esempio ceste, \ncavallo, commercio con i villico), a meno che lo schermo non abbia una casella di testo.", + "description.wurst.hack.itemesp": "Evidenzia gli item vicini.", + "description.wurst.hack.itemgenerator": "Genera item randomici e li butta per terra.\n§oSi può usare solo in modalità creativa.§r", + "description.wurst.hack.jesus": "Ti fa camminare sull'acqua.\nGesù ha usato questa hack circa 2000 anni fa.", + "description.wurst.hack.jetpack": "Ti fa volare come se indossassi un jetpack.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi NoFall.", + "description.wurst.hack.kaboom": "Rompe i blocchi intorno a te come un'esplosione.\nQuesto può essere molto più veloce di Nuker se il server non ha NoCheat+. Funziona al meglio con strumenti veloci e blocchi deboli.\nNota: questa non è una vera esplosione.", + "description.wurst.hack.killauralegit": "La Killaura ma più lenta: più difficile da identificare per gli anticheat.\nNon è necessaria nei server con NoCheat+ standard!", + "description.wurst.hack.killaura": "Attacca automaticamentele entità intorno a te.", + "description.wurst.hack.killpotion": "Genera una pozione che può uccidere quasi tutto, inclusi i giocatori in modalità Creativa. Non funziona sui mob non morti, poiché sono già morti.\n\nRichiede la modalità Creativa.", + "description.wurst.hack.liquids": "Ti permette di piazzare blocchi nei liquidi.", + "description.wurst.hack.lsd": "Causa allucinazioni da LSD.", + "description.wurst.hack.masstpa": "Manda una richiesta di teletrasporto a tutti i giocatori.", + "description.wurst.hack.mileycyrus": "Ti fa twerkare.", + "description.wurst.hack.mobesp": "Evidenzia i mob vicini.", + "description.wurst.hack.mobspawnesp": "Evidenzia le aree dove i mob possono spawnare.\n§egiallo§r - I mob possono nascere durante la notte\n§crosso§r - i mob possono nascere sempre", + "description.wurst.hack.multiaura": "Killaura più veloce che attacca più entità in una sola volta.", + "description.wurst.hack.nameprotect": "Nasconde i nomi dei giocatori.", + "description.wurst.hack.nametags": "Modifica la scala delle targhette in modo da poterle leggere sempre. Ti permette anche di vedere le targhette dei giocatori piegati.", + "description.wurst.hack.navigator": "Una GUI che apprende le tue preferenze nel tempo.", + "description.wurst.hack.newchunks": "Evidenzia i chunk mai visitati intorno a te.", + "description.wurst.hack.nobackground": "Rimuove lo sfondo nero nell'inventario.", + "description.wurst.hack.noclip": "Ti permette di muoverti attraverso i blocchi.\nUn blocco (es. sabbia) deve cadere sulla tua testa per attivarlo.\n\n§c§lATTENZIONE:§r Prenderai danno mentre ti muovi fra i blocchi.", + "description.wurst.hack.nocomcrash": "Crea lag e fa crashare i server usando l'exploit Nocom.\nNon funziona nei server con Paper. Testato su Vanilla, Spigot, e Fabric. Può essere disabilitato da alcuni AntiCheats.", + "description.wurst.hack.nofall": "Ti protegge dal danno da caduta.", + "description.wurst.hack.nofireoverlay": "Blocca le animazioni di quando sei in fiamme.\n\n§c§lATTENZIONE:§r Questo può causare morte per il fuoco senza che tu te ne accorga.", + "description.wurst.hack.nohurtcam": "Disattiva l'oscillamento della telecamera quando ti fai male.", + "description.wurst.hack.nolevitation": "Disabilita l'effetto levitazione quando si viene colpiti da uno Shulker.\n\n§c§lATTENZIONE:§r Cadrai se attiverai questo mentre l'effetto levitazione è già attivo!", + "description.wurst.hack.nooverlay": "Blocca gli overlay di lava e acqua.", + "description.wurst.hack.nopumpkin": "Blocca la copertura di quando indossi una zucca in testa.", + "description.wurst.hack.noslowdown": "Rimuove la lentezza applicata da blocchi come la sabbia delle anime o i blocchi di miele.", + "description.wurst.hack.noweather": "Consente di modificare il tempo, l'ora e le fasi lunari lato client.", + "description.wurst.hack.noweb": "Rimuove la lentezza applicata dalle ragnatele.", + "description.wurst.hack.nuker": "Distrugge i blocchi intorno a te automaticamente.", + "description.wurst.hack.nukerlegit": "Nuker più lento che bypassa tutti i plugin Anti Cheat.\n Non richiesto sui normali server NoCheat+!", + "description.wurst.hack.openwateresp": "Mostra se stai pescando in acque libere e disegna un riquadro intorno all'area utilizzata per il calcolo in acque libere.", + "description.wurst.hack.overlay": "Renderizza l'animazione di Nuker ogni volta che distruggi un blocco.", + "description.wurst.hack.panic": "Disattiva tutte le hack utilizzate.\n Pensa prima di usarlo usi!", + "description.wurst.hack.parkour": "Ti fa saltare automaticamente quando arrivi alla fine di un blocco.\nUtile per i parkour e per le jump'n'runs.", + "description.wurst.hack.playeresp": "Evidenzia i giocatori vicini.\nI riquadri ESP degli amici saranno in blu.", + "description.wurst.hack.portalgui": "Ti permette di aprire le GUI nei portali.", + "description.wurst.hack.potionsaver": "Blocca tutti gli effetti della pozione mentre sei fermo.", + "description.wurst.hack.prophuntesp": "Ti permette di vedere i blocchi falsi in PropHunt.\n Fatto per la PropHunt di Mineplex. Potrebbe non funzionare su altri server.", + "description.wurst.hack.protect": "Un bot che segue l'entità più vicina e la protegge da altre entità.\nUsa .protect per proteggere un'entità specifica invece di quella più vicina.", + "description.wurst.hack.radar": "Mostra la posizione delle entità vicine.\n§crosso§r - Giocatori\n§6arancione§r - Mostri\n§averde§r - Animali\n§7grigio§r - Altro", + "description.wurst.hack.rainbowui": "§cT§au§9t§ct§ao §9d§ci§av§9e§cn§at§9a §ca§ar§9c§co§ab§9a§cl§ae§9n§co.", + "description.wurst.hack.reach": "Ti permette di andare più lontano.", + "description.wurst.hack.remoteview": "Ti permette di vedere il mondo come qualcun altro.\nUsa il comando .rv per farlo mirare a un'entità specifica.", + "description.wurst.hack.safewalk": "Ti impedisce di cadere dai bordi.", + "description.wurst.hack.scaffoldwalk": "Posiziona automaticamente i blocchi sotto i tuoi piedi.", + "description.wurst.hack.search": "Ti aiuta a trovare blocchi specifici evidenziandoli nel colore dell'arcobaleno.", + "description.wurst.hack.skinderp": "Alterna casualmente parti della tua pelle.", + "description.wurst.hack.sneak": "Ti fa piegare automaticamente.", + "description.wurst.hack.snowshoe": "Consente di camminare su neve farinosa.", + "description.wurst.hack.speedhack": "Ti permette di correre circa 2.5 volte più velocemente di quanto faresti facendo sprint e salti.\n\n§6§lAVVERTENZA:§r Patchato in NoCheat+ versione 3.13.2. Ignorerà solo le versioni precedenti di NoCheat+.\nDigitare §l/ncp version§r per controllare la versione NoCheat+ di un server.", + "description.wurst.hack.speednuker": "Versione più veloce della Nuker che non ti fa bypassare gli Anticheat.", + "description.wurst.hack.spider": "Ti permette di arrampicarti sui muri come un ragno.", + "description.wurst.hack.step": "Ti consente di camminare di blocchi completi.", + "description.wurst.hack.throw": "Utilizza un oggetto più volte. Può essere usato per lanciare palle di neve e uova, generare mob, posizionare carrelli da miniera, ecc. in grandi quantità.\n\nCiò può causare molto ritardo e persino mandare in crash un server.", + "description.wurst.hack.tillaura": "Trasforma automaticamente terra, erba, ecc. in terreno agricolo.\nDa non confondere con Killaura.", + "description.wurst.hack.timer": "Cambia la velocità di quasi tutto.", + "description.wurst.hack.tired": "Ti fa sembrare Alexander nell'aprile 2015.\nVisibile solo ad altri giocatori.", + "description.wurst.hack.toomanyhax": "Blocca tutte le funzionalità che non desideri.\nTi permette di assicurarti di non abilitare accidentalmente l'hacking sbagliato e di essere bannato per questo.\nPer coloro che vogliono \"hackerare solo un po'\".\n \nUtilizzare il comando §6.toomanyhax§r per scegliere quali funzioni bloccare.\nDigitare §6.help toomanyhax§r per ulteriori informazioni.", + "description.wurst.hack.tp-aura": "Attacca automaticamente l'entità valida più vicina mentre si teletrasporta intorno ad essa.", + "description.wurst.hack.trajectories": "Predice la traiettoria di volo di frecce e oggetti lanciabili.", + "description.wurst.hack.treebot": "Un bot sperimentale che cammina automaticamente e abbatte gli alberi.\nPer ora limitato ai piccoli alberi.", + "description.wurst.hack.triggerbot": "Attacca automaticamente l'entità che stai guardando.", + "description.wurst.hack.trollpotion": "Genera una pozione con molti effetti fastidiosi su di essa.", + "description.wurst.hack.truesight": "Ti permette di vedere entità invisibili.", + "description.wurst.hack.tunneller": "Scava automaticamente un tunnel.\n\n§c§lATTENZIONE:§r Sebbene questo bot cercherà di evitare la lava e altri pericoli, non vi è alcuna garanzia che non muoia. Invialo solo con equipaggiamento che non ti dispiace perdere.", + "description.wurst.hack.x-ray": "Ti permette di vedere i minerali attraverso i muri.", + "description.wurst.other_feature.nochatreports": "Disabilita le firme crittografiche che dalla 1.19 sono allegate ai tuoi messaggi di chat.\n\n§c§lATTENZIONE: §cSe §ctu §cinvii §cchat §cmessaggi §ccon §cfirme, §cil §ctuo §cL'account §cMinecraft §cpuò §cessere §csegnalato §ce §ca §clivello §cglobale §cbandito §cdal §cmultiplayer!§r\n\nAnche se dici solo cose innocue in chat, i tuoi messaggi firmati possono essere maltrattati per creare un falso rapporto di chat che faccia bannare il tuo account ingiustamente.\n\nSe devi riattivare le firme della chat per unirti a un server, considera di non utilizzare affatto la loro chat. Oppure gioca con un account alternativo che non ti dispiace perdere.", + "button.wurst.nochatreports.disable_signatures": "Disabilita firme", + "button.wurst.nochatreports.re-enable_signatures": "Riattiva le firme", + "description.wurst.setting.generic.attack_speed": "Velocità d'attacco in clic al secondo.\n0 = regola dinamicamente la velocità in base al tempo di recupero dell'attacco.", + "description.wurst.setting.generic.pause_attack_on_containers": "Non attaccherà mentre è aperta la schermata di un container (forziere, tramoggia, ecc.).\nUtile per i server di minigiochi che mostrano menu simili a forzieri.", + "description.wurst.altmanager.premium": "Questo alt ha una password e può unirsi a tutti i server.", + "description.wurst.altmanager.cracked": "Questo alt non ha password e funzionerà solo su server crackati.", + "description.wurst.altmanager.failed": "L'ultima volta che hai provato ad accedere con questo alt, non ha funzionato.", + "description.wurst.altmanager.checked": "La password ha funzionato in passato.", + "description.wurst.altmanager.unchecked": "Non hai mai effettuato correttamente l'accesso con questa alt.", + "description.wurst.altmanager.favorite": "Hai contrassegnato questo alt come uno dei tuoi preferiti.", + "description.wurst.altmanager.window": "Questo pulsante apre un'altra finestra.", + "description.wurst.altmanager.window_freeze": "Potrebbe sembrare che il gioco non risponda mentre quella finestra è aperta.", + "description.wurst.altmanager.fullscreen": "§cDisattiva la modalità a schermo intero!", + "gui.wurst.altmanager.folder_error.title": "Non è stato possibile creare la cartella '.Wurst encryption'!", + "gui.wurst.altmanager.folder_error.message": "Potresti aver accidentalmente bloccato l'accesso a questa cartella.\nAltManager non può cifrare o decifrare la tua lista alt senza di essa.\nPuoi ancora usare AltManager, ma qualsiasi alt che crei ora non verrà salvato.\n\nL'errore completo è il seguente:\n%s", + "gui.wurst.altmanager.empty.title": "La tua lista alt è vuota.", + "gui.wurst.altmanager.empty.message": "Vorresti creare qualche alt casuale per iniziare?", + "gui.wurst.nochatreports.unsafe_server.title": "§4§lATTENZIONE:§r Server Non Sicuro", + "gui.wurst.nochatreports.unsafe_server.message": "Questo server richiede che le firme di chat siano abilitate, il che mette il tuo account a rischio di chat report.\n\nPuoi unirti a questo server se sblocchi le firme di chat e poi riconnetterti. Se lo fai, considera di non usare la chat. O giocare su un account alt che non ti dispiace perdere.\n\nSe questo è il tuo server, puoi risolvere questo problema impostando 'enforce-secure-profile' su false nelle server.properties. Nell tipico Mojang fashion, questa impostazione fa l'opposto di quello che dice.", + "toast.wurst.nochatreports.unsafe_server.title": "I messaggi in chat possono essere segnalati", + "toast.wurst.nochatreports.unsafe_server.message": "I messaggi in questo server possono essere segnalati alla Mojang e forse il tuo account può essere bannato globalmente", + "gui.wurst.nochatreports.ncr_mod_server.title": "Server \"No Chat Reports\"", + "gui.wurst.nochatreports.ncr_mod_server.message": "Questo server utilizza la mod \"No Chat Reports\".\n\nPuoi unirti a questo server se blocchi le firme di chat e disabiliti VanillaSpoof.", + "button.wurst.nochatreports.signatures_status": "Firme: ", + "description.wurst.nochatreports.message_is_reportable": "Questo messaggio ha una firma valida ed è quindi vulnerabile ai chat reports.", + "gui.wurst.generic.allcaps_blocked": "BLOCCATO", + "gui.wurst.generic.allcaps_allowed": "PERMESSO" +} diff --git a/src/main/resources/assets/wurst/lang/ko_kr.json b/src/main/resources/assets/wurst/lang/ko_kr.json index ff372f78..6b965b21 100644 --- a/src/main/resources/assets/wurst/lang/ko_kr.json +++ b/src/main/resources/assets/wurst/lang/ko_kr.json @@ -1,154 +1,154 @@ -{ - "description.wurst.hack.aimassist": "주변 엔티티를 조준하는 데 도움을 줍니다.", - "description.wurst.hack.airplace": "공중에 블록을 배치할 수 있게 해줍니다.", - "description.wurst.hack.antiafk": "자리비움 검출기에서 숨기기 위해 무작위로 이동합니다.", - "description.wurst.hack.antiblind": "실명 및 어둠 효과를 방지합니다.\nOptiFine과 호환되지 않습니다.", - "description.wurst.hack.anticactus": "선인장 대미지를 받지 않습니다.", - "description.wurst.hack.antientitypush": "다른 플레이어나 몹에게 밀려나는 것을 방지합니다.", - "description.wurst.hack.antihunger": "걷는 동안 배고픔 속도를 늦춥니다.", - "description.wurst.hack.antiknockback": "플레이어나 몹으로부터 넉백을 받지 않도록 합니다.", - "description.wurst.hack.antispam": "반복된 메시지에 카운터를 추가하여 채팅 스팸을 차단합니다.", - "description.wurst.hack.antiwaterpush": "물에 밀리는 것을 방지합니다.", - "description.wurst.setting.arrowdmg.packets": "전송할 패킷 수.\n패킷이 많을수록 공격력이 높아집니다.", - "description.wurst.hack.autoarmor": "자동으로 방어구를 관리합니다.", - "description.wurst.hack.autobuild": "자동으로 건물을 건설합니다.\n한 개의 블록을 놓으면 건설을 시작합니다.", - "description.wurst.hack.autocomplete": "대형 언어 모델을 사용하여 채팅 메시지를 자동 완성합니다. OpenAI 계정 API 접근 권한 또는 OpenAI와 호환되는 다른 언어 모델 API가 필요합니다.", - "description.wurst.hack.autodrop": "원하지 않는 아이템을 자동으로 버립니다.", - "description.wurst.hack.autoleave": "체력이 낮을 때 자동으로 서버에서 나갑니다.", - "description.wurst.hack.autolibrarian": "특정 인챈트된 책을 판매하는 마을 주민을 자동으로 훈련합니다. 이 핵을 사용하면 전체 거래 구간을 짧은 시간 내에 설정할 수 있습니다.", - "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.eat_while_walking": "걷는 동안 음식을 먹는 것은 속도를 늦춥니다. 권장하지 않습니다.", - "description.wurst.setting.autoeat.allow_poison": "독성 음식은 시간 경과에 따라 피해를 입힙니다.\n권장하지 않습니다.", - "description.wurst.hack.autofarm": "곡물, 당근, 감자, 비트, 호박, 수박, 선인장, 사탕수수, 켈프, 대나무, 네더 와트, 코코아 열매에 대해 자동으로 작물을 수확하고 다시 심습니다.", - "description.wurst.hack.autofish": "최고의 낚싯대를 사용하여 자동으로 물고기를 잡습니다. 물고기를 잡는 동안 더 좋은 낚싯대를 발견하면 자동으로 전환됩니다.", - "description.wurst.hack.automine": "시선을 정한 블록을 자동으로 채굴합니다.", - "description.wurst.hack.autopotion": "체력이 낮을 때 즉시 회복 물약을 자동으로 던집니다.", - "description.wurst.hack.autoreconnect": "서버에서 강제 퇴장당할 경우 자동으로 재접속합니다.", - "description.wurst.hack.autorespawn": "죽을 경우 자동으로 리스폰합니다.", - "description.wurst.hack.autosign": "원하는 글을 모든 표지판에 즉시 작성합니다. 활성화된 후 첫 번째 표지판에 일반적으로 글을 작성하여 모든 다른 표지판에 적용할 수 있습니다.", - "description.wurst.hack.autosoup": "체력이 낮을 때 자동으로 수프를 먹습니다.\n\n§l참고:§r 이 해킹 기능은 배고픔을 무시하고 수프를 직접 먹으면 체력이 회복된다고 가정합니다. 만약 이 기능이 서버에서 설정되어 있지 않다면 AutoEat을 사용하세요.", - "description.wurst.hack.autosprint": "자동으로 달립니다.", - "description.wurst.hack.autosteal": "여는 모든 상자와 셜커 상자에서 모든 것을 자동으로 훔칩니다.", - "description.wurst.hack.autoswim": "수영 애니메이션을 자동으로 실행합니다.", - "description.wurst.hack.autoswitch": "항상 손에 들고 있는 아이템을 전환합니다.\n\n§l팁:§r 이 기능은 다양한 색의 양털 또는 콘크리트 블록을 핫바에 넣고 BuildRandom과 함께 사용하는 것이 좋습니다.", - "description.wurst.hack.autowalk": "자동으로 걷게 해줍니다.", - "description.wurst.hack.basefinder": "인공 블록을 검색하여 베이스를 찾습니다.\n찾은 블록은 선택한 색상으로 강조됩니다.\nFaction 기지를 찾는 데 유용합니다.", - "description.wurst.hack.buildrandom": "주변에 무작위로 블록을 배치합니다.", - "description.wurst.hack.bunnyhop": "자동으로 점프합니다.", - "description.wurst.hack.cameradistance": "카메라 거리를 3인칭에서 변경할 수 있습니다.", - "description.wurst.hack.cameranoclip": "카메라가 벽을 통과할 수 있습니다(3인칭).", - "description.wurst.hack.cavefinder": "선택한 색상으로 동굴을 강조하여 찾도록 도와줍니다.", - "description.wurst.hack.chattranslator": "구글 번역을 이용하여 채팅을 번역합니다.", - "description.wurst.hack.chestesp": "주변의 상자를 강조합니다.", - "description.wurst.hack.clickaura": "클릭할 때 가장 가까운 유효한 엔티티를 자동으로 공격합니다.\n\n§c§l경고:§r ClickAura는 Killaura보다 더욱 의심스러워 보이며, 플러그인에 탐지되기 쉽습니다. 대신 Killaura나 TriggerBot을 사용하는 것이 좋습니다.", - "description.wurst.hack.creativeflight": "크리에이티브 모드와 같이 비행할 수 있습니다.\n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 대미지를 입을 수 있습니다.", - "description.wurst.hack.criticals": "모든 공격을 크리티컬로 변경합니다.", - "description.wurst.hack.derp": "머리를 무작위로 움직입니다.\n다른 플레이어에게만 보입니다.", - "description.wurst.hack.dolphin": "물 속에서 자동으로 위아래로 움직이도록 합니다.\n(돌고래처럼)", - "description.wurst.hack.excavator": "선택한 영역 내의 모든 블록을 자동으로 부숩니다.", - "description.wurst.hack.fancychat": "채팅 메시지에서 ASCII 문자를 화려한 유니코드 문자로 바꿉니다. 일부 서버에서 욕설 필터를 우회하는 데 사용할 수 있습니다. \n유니코드 문자를 차단하는 서버에서는 작동하지 않습니다.", - "description.wurst.hack.fastbreak": "블록을 더 빨리 부술 수 있습니다. \n팁: Nuker와 함께 사용할 수 있습니다.", - "description.wurst.hack.fastladder": "사다리를 더 빨리 올라갈 수 있습니다.", - "description.wurst.hack.fastplace": "블록을 5배 더 빨리 배치할 수 있습니다. \n팁: AutoBuild와 같은 다른 해킹을 가속화할 수 있습니다.", - "description.wurst.hack.feedaura": "주변의 동물에게 자동으로 사료를 줍니다.", - "description.wurst.hack.fightbot": "자동으로 주변을 돌아다니며 모든 것을 죽이는 봇입니다. \nMobArena에 적합합니다.", - "description.wurst.hack.fish": "수중 중력을 해제하여 물고기처럼 수영할 수 있습니다.", - "description.wurst.hack.flight": "비행이 가능합니다. \n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", - "description.wurst.hack.follow": "가장 가까운 개체를 따라가는 봇입니다. \n매우 귀찮습니다. \n\n.follow를 사용하여 특정 개체를 따라갈 수 있습니다.", - "description.wurst.hack.forceop": "AuthMe 비밀번호를 크랙합니다. \nOP를 얻는 데 사용할 수 있습니다.", - "description.wurst.hack.glide": "낙하할 때 천천히 떨어집니다. \n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", - "description.wurst.hack.handnoclip": "벽을 통해 특정 블록에 접근할 수 있습니다.", - "description.wurst.hack.headroll": "항상 고개를 끄덕입니다. \n다른 플레이어에게만 표시됩니다.", - "description.wurst.hack.healthtags": "플레이어의 체력을 이름표에 표시합니다.", - "description.wurst.hack.highjump": "더 높이 점프할 수 있게 해줍니다.\n\n§c§l주의:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", - "description.wurst.hack.infinichat": "채팅에서 256자 제한을 없애줍니다.\nNBT 데이터를 수정하는 긴 명령어에 유용합니다.\n\n§6§l주의:§r 대화를 위해 권장되지 않습니다. 대부분의 서버는 메시지를 256자로 제한합니다.", - "description.wurst.hack.instantbunker": "자신 주위에 작은 벙커를 만듭니다. 57개의 블록이 필요합니다.", - "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년 전에 예수님이 사용했습니다.", - "description.wurst.hack.jetpack": "마치 제트팩을 가지고 있는 것처럼 날 수 있게 해줍니다.\n\n§c§l주의:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", - "description.wurst.hack.kaboom": "주변 블록을 폭발처럼 부숩니다.\n서버에 NoCheat+가 없다면 Nuker보다 훨씬 빠를 수 있습니다. 빠른 도구와 약한 블록과 함께 사용하는 것이 가장 효과적입니다.\n참고: 실제로 폭발하는 것은 아닙니다.", - "description.wurst.hack.killauralegit": "감지가 어려운 느린 Killaura입니다.\n일반적인 NoCheat+ 서버에서는 필요하지 않습니다!", - "description.wurst.hack.killaura": "자동으로 주변의 개체를 공격합니다.", - "description.wurst.hack.liquids": "액체 안에 블록을 배치할 수 있게 해줍니다.", - "description.wurst.hack.lsd": "환각을 유발합니다.", - "description.wurst.hack.masstpa": "모든 플레이어에게 TPA 요청을 보냅니다.", - "description.wurst.hack.mileycyrus": "트월킹을 할 수 있게 해줍니다.", - "description.wurst.hack.mobesp": "주변의 몹을 강조합니다.", - "description.wurst.hack.multiaura": "여러 개체를 동시에 공격하는 더 빠른 Killaura입니다.", - "description.wurst.hack.nameprotect": "모든 플레이어 이름을 숨깁니다.", - "description.wurst.hack.nametags": "네임태그의 크기를 크게 변경하여 항상 읽을 수 있게 해줍니다. 또한 웅크리는 플레이어의 네임태그를 볼 수 있게 해줍니다.", - "description.wurst.hack.navigator": "시간이 지남에 따라 사용자의 선호도를 학습하는 검색 가능한 GUI입니다.", - "description.wurst.hack.newchunks": "자신 주변에 최근에 생성된 청크를 강조합니다.", - "description.wurst.hack.noclip": "블록을 자유롭게 통과할 수 있게 해줍니다.\n블록(예: 모래)이 머리 위로 떨어져야 활성화됩니다.\n\n§c§l주의:§r 블록을 통과하는 동안 피해를 입을 수 있습니다!", - "description.wurst.hack.nocomcrash": "Nocom 악용을 통해 서버를 지연시키고 충돌시킵니다.\nPaper 서버에서 작동하지 않습니다. Vanilla, Spigot 및 Fabric에서 테스트된 작동합니다. 일부 AntiCheats에 의해 비활성화될 수 있습니다.", - "description.wurst.hack.nofall": "낙하 피해를 방지합니다.", - "description.wurst.hack.nofireoverlay": "불에 탔을 때 오버레이를 제거합니다.\n\n§c§l주의:§r 이로 인해 알지 못하고 타죽을 수 있습니다.", - "description.wurst.hack.nohurtcam": "피해를 입었을 때 흔들림 효과를 제거합니다.", - "description.wurst.hack.nooverlay": "물과 용암의 오버레이를 제거합니다.", - "description.wurst.hack.nopumpkin": "호박을 머리에 쓸 때 오버레이를 제거합니다.", - "description.wurst.hack.noslowdown": "꿀, 영혼 모래 및 아이템 사용으로 인한 속도 감소 효과를 제거합니다.", - "description.wurst.hack.noweather": "클라이언트 측의 날씨, 시간 및 달의 위상을 변경할 수 있게 해줍니다.", - "description.wurst.hack.noweb": "거미줄에 갇히는 것을 제거합니다.", - "description.wurst.hack.nuker": "주변 블록을 자동으로 부숩니다.", - "description.wurst.hack.nukerlegit": "감지 플러그인을 우회하는 더 느린 Nuker입니다.\n일반적인 NoCheat+ 서버에서는 필요하지 않습니다!", - "description.wurst.hack.openwateresp": "'열린 물'에서 낚시를 하는지 여부를 보여주고 열린 물 계산에 사용되는 영역 주위에 상자를 그립니다.", - "description.wurst.hack.overlay": "블록을 채굴할 때마다 Nuker 애니메이션을 렌더링합니다.", - "description.wurst.hack.panic": "활성화된 모든 핵을 즉시 비활성화합니다.\n이 기능을 사용할 때 주의하세요!", - "description.wurst.hack.parkour": "블록 가장자리에 도달하면 자동으로 점프합니다.\n파쿠르와 점프'n'런에 유용합니다.", - "description.wurst.hack.portalgui": "포탈에서 GUI를 열 수 있게 해줍니다.", - "description.wurst.hack.potionsaver": "정지 상태에서는 모든 물약 효과를 유지합니다.", - "description.wurst.hack.prophuntesp": "블럭 숨바꼭질에서 가짜 블록을 볼 수 있게 해줍니다.\nMineplex서버의 블럭 숨바꼭질을 위해 제작되었으며, 다른 서버에서 작동하지 않을 수 있습니다.", - "description.wurst.hack.protect": "가장 가까운 개체를 따라가고 다른 개체로부터 보호하는 봇입니다.\n가장 가까운 개체 대신 특정 개체를 보호하려면 .protect 명령을 사용하세요.", - "description.wurst.hack.radar": "주변 개체의 위치를 보여줍니다.\n§c빨강색§r - 플레이어\n§6주황색§r - 몬스터\n§a초록색§r - 동물\n§7회색§r - 기타", - "description.wurst.hack.remoteview": "특정 플레이어의 시야를 공유합니다.\n.rv 명령을 사용하여 특정 개체를 대상으로 설정할 수 있습니다.", - "description.wurst.hack.safewalk": "블럭끝에서 떨어지지 않게 해줍니다.", - "description.wurst.hack.scaffoldwalk": "자동으로 발 아래에 블록을 배치합니다.", - "description.wurst.hack.search": "무지개 색상으로 강조하여 특정 블록을 찾는 데 도움을 줍니다.", - "description.wurst.hack.skinderp": "스킨의 커버를 무작위로 on/off 합니다.", - "description.wurst.hack.sneak": "웅크리게 합니다.", - "description.wurst.hack.speedhack": "달리기와 점프로 할 때보다 약 2.5배 더 빠르게 달릴 수 있게 해줍니다.\n\n§6§l주의:§r NoCheat+ 버전 3.13.2에서 패치되었습니다. 이전 버전의 NoCheat+에서만 우회됩니다.\n서버의 NoCheat+ 버전을 확인하려면 §l/ncp version§r을 입력하세요.", - "description.wurst.hack.speednuker": "NoCheat+를 우회할 수 없는 더 빠른 버전의 Nuker입니다.", - "description.wurst.hack.spider": "거미처럼 벽을 타고 올라갈 수 있게 해줍니다.", - "description.wurst.hack.step": "모든 블럭을 계단처럼 올라갑니다.", - "description.wurst.hack.tillaura": "자동으로 흙, 잔디 등을 경작화 시킵니다.\nKillaura와 혼동하지 마세요.", - "description.wurst.hack.timer": "개인의 시간 선을 조절합니다.\n단, 서버의 영향을 미치진 않습니다.", - "description.wurst.hack.toomanyhax": "원치 않는 기능을 차단합니다.\n잘못된 핵을 우연히 활성화하여 밴을 당하는 것을 방지할 수 있습니다.\n'핵을 조금만 사용하는' 사람들을 위한 기능입니다.\n\n§6.toomanyhax§r 명령을 사용하여 어떤 기능을 차단할지 선택할 수 있습니다.\n자세한 내용은 §6.help toomanyhax§r를 입력하세요.", - "description.wurst.hack.tp-aura": "가까운 유효한 개체로 텔레포트 하면서 가장 자동으로 공격합니다.", - "description.wurst.hack.trajectories": "화살과 던져지는 아이템의 비행 경로를 예측해 줍니다.", - "description.wurst.hack.treebot": "자동으로 주위를 돌아다니며 나무를 베어줍니다.\n현재는 작은 나무에만 사용 가능합니다.", - "description.wurst.hack.triggerbot": "바라보고 있는 개체를 자동으로 공격합니다.", - "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글로벌 §c밴 §c처리될 §c수 §c있습니다!§r\n\n채팅에서 무해한 내용을 말한다고 해도, 서명된 메시지는 가짜 채팅 신고를 생성하여 계정이 불공정하게 밴 처리되는 경우가 있을 수 있습니다.\n\n채팅 서명을 다시 활성화하여 채팅을 하려면 계정이 아닌 가계정에서 플레이하는 것을 고려하세요.", - "button.wurst.nochatreports.disable_signatures": "서명 비활성화", - "button.wurst.nochatreports.re-enable_signatures": "서명 활성화", - "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는 이 폴더 없이 가계정 목록을 암호화하거나 복호화할 수 없습니다.\nAltManager를 계속 사용할 수 있지만, 이제 만드는 가계정은 저장되지 않습니다.\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이 서버가 소유한 경우 server.properties에서 'enforce-secure-profile'을 false로 설정하여 수정할 수 있습니다. 전형적인 Mojang의 스타일로, 이 설정은 이름이 의미하는 것과 반대로 작동합니다.", - "toast.wurst.nochatreports.unsafe_server.title": "채팅 메시지가 신고될 수 있습니다", - "toast.wurst.nochatreports.unsafe_server.message": "이 서버에서 전송한 메시지는 Mojang에게 신고될 수 있으며 계정이 모든 서버 밴 처리될 수 있습니다", - "button.wurst.nochatreports.signatures_status": "서명: ", - "description.wurst.nochatreports.message_is_reportable": "이 메시지에는 유효한 서명이 있으므로 가짜 채팅 신고에 취약합니다.", - "gui.wurst.generic.allcaps_blocked": "차단됨", - "gui.wurst.generic.allcaps_allowed": "허용됨" -} +{ + "description.wurst.hack.aimassist": "주변 엔티티를 조준하는 데 도움을 줍니다.", + "description.wurst.hack.airplace": "공중에 블록을 배치할 수 있게 해줍니다.", + "description.wurst.hack.antiafk": "자리비움 검출기에서 숨기기 위해 무작위로 이동합니다.", + "description.wurst.hack.antiblind": "실명 및 어둠 효과를 방지합니다.\nOptiFine과 호환되지 않습니다.", + "description.wurst.hack.anticactus": "선인장 대미지를 받지 않습니다.", + "description.wurst.hack.antientitypush": "다른 플레이어나 몹에게 밀려나는 것을 방지합니다.", + "description.wurst.hack.antihunger": "걷는 동안 배고픔 속도를 늦춥니다.", + "description.wurst.hack.antiknockback": "플레이어나 몹으로부터 넉백을 받지 않도록 합니다.", + "description.wurst.hack.antispam": "반복된 메시지에 카운터를 추가하여 채팅 스팸을 차단합니다.", + "description.wurst.hack.antiwaterpush": "물에 밀리는 것을 방지합니다.", + "description.wurst.setting.arrowdmg.packets": "전송할 패킷 수.\n패킷이 많을수록 공격력이 높아집니다.", + "description.wurst.hack.autoarmor": "자동으로 방어구를 관리합니다.", + "description.wurst.hack.autobuild": "자동으로 건물을 건설합니다.\n한 개의 블록을 놓으면 건설을 시작합니다.", + "description.wurst.hack.autocomplete": "대형 언어 모델을 사용하여 채팅 메시지를 자동 완성합니다. OpenAI 계정 API 접근 권한 또는 OpenAI와 호환되는 다른 언어 모델 API가 필요합니다.", + "description.wurst.hack.autodrop": "원하지 않는 아이템을 자동으로 버립니다.", + "description.wurst.hack.autoleave": "체력이 낮을 때 자동으로 서버에서 나갑니다.", + "description.wurst.hack.autolibrarian": "특정 인챈트된 책을 판매하는 마을 주민을 자동으로 훈련합니다. 이 핵을 사용하면 전체 거래 구간을 짧은 시간 내에 설정할 수 있습니다.", + "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.eat_while_walking": "걷는 동안 음식을 먹는 것은 속도를 늦춥니다. 권장하지 않습니다.", + "description.wurst.setting.autoeat.allow_poison": "독성 음식은 시간 경과에 따라 피해를 입힙니다.\n권장하지 않습니다.", + "description.wurst.hack.autofarm": "곡물, 당근, 감자, 비트, 호박, 수박, 선인장, 사탕수수, 켈프, 대나무, 네더 와트, 코코아 열매에 대해 자동으로 작물을 수확하고 다시 심습니다.", + "description.wurst.hack.autofish": "최고의 낚싯대를 사용하여 자동으로 물고기를 잡습니다. 물고기를 잡는 동안 더 좋은 낚싯대를 발견하면 자동으로 전환됩니다.", + "description.wurst.hack.automine": "시선을 정한 블록을 자동으로 채굴합니다.", + "description.wurst.hack.autopotion": "체력이 낮을 때 즉시 회복 물약을 자동으로 던집니다.", + "description.wurst.hack.autoreconnect": "서버에서 강제 퇴장당할 경우 자동으로 재접속합니다.", + "description.wurst.hack.autorespawn": "죽을 경우 자동으로 리스폰합니다.", + "description.wurst.hack.autosign": "원하는 글을 모든 표지판에 즉시 작성합니다. 활성화된 후 첫 번째 표지판에 일반적으로 글을 작성하여 모든 다른 표지판에 적용할 수 있습니다.", + "description.wurst.hack.autosoup": "체력이 낮을 때 자동으로 수프를 먹습니다.\n\n§l참고:§r 이 해킹 기능은 배고픔을 무시하고 수프를 직접 먹으면 체력이 회복된다고 가정합니다. 만약 이 기능이 서버에서 설정되어 있지 않다면 AutoEat을 사용하세요.", + "description.wurst.hack.autosprint": "자동으로 달립니다.", + "description.wurst.hack.autosteal": "여는 모든 상자와 셜커 상자에서 모든 것을 자동으로 훔칩니다.", + "description.wurst.hack.autoswim": "수영 애니메이션을 자동으로 실행합니다.", + "description.wurst.hack.autoswitch": "항상 손에 들고 있는 아이템을 전환합니다.\n\n§l팁:§r 이 기능은 다양한 색의 양털 또는 콘크리트 블록을 핫바에 넣고 BuildRandom과 함께 사용하는 것이 좋습니다.", + "description.wurst.hack.autowalk": "자동으로 걷게 해줍니다.", + "description.wurst.hack.basefinder": "인공 블록을 검색하여 베이스를 찾습니다.\n찾은 블록은 선택한 색상으로 강조됩니다.\nFaction 기지를 찾는 데 유용합니다.", + "description.wurst.hack.buildrandom": "주변에 무작위로 블록을 배치합니다.", + "description.wurst.hack.bunnyhop": "자동으로 점프합니다.", + "description.wurst.hack.cameradistance": "카메라 거리를 3인칭에서 변경할 수 있습니다.", + "description.wurst.hack.cameranoclip": "카메라가 벽을 통과할 수 있습니다(3인칭).", + "description.wurst.hack.cavefinder": "선택한 색상으로 동굴을 강조하여 찾도록 도와줍니다.", + "description.wurst.hack.chattranslator": "구글 번역을 이용하여 채팅을 번역합니다.", + "description.wurst.hack.chestesp": "주변의 상자를 강조합니다.", + "description.wurst.hack.clickaura": "클릭할 때 가장 가까운 유효한 엔티티를 자동으로 공격합니다.\n\n§c§l경고:§r ClickAura는 Killaura보다 더욱 의심스러워 보이며, 플러그인에 탐지되기 쉽습니다. 대신 Killaura나 TriggerBot을 사용하는 것이 좋습니다.", + "description.wurst.hack.creativeflight": "크리에이티브 모드와 같이 비행할 수 있습니다.\n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 대미지를 입을 수 있습니다.", + "description.wurst.hack.criticals": "모든 공격을 크리티컬로 변경합니다.", + "description.wurst.hack.derp": "머리를 무작위로 움직입니다.\n다른 플레이어에게만 보입니다.", + "description.wurst.hack.dolphin": "물 속에서 자동으로 위아래로 움직이도록 합니다.\n(돌고래처럼)", + "description.wurst.hack.excavator": "선택한 영역 내의 모든 블록을 자동으로 부숩니다.", + "description.wurst.hack.fancychat": "채팅 메시지에서 ASCII 문자를 화려한 유니코드 문자로 바꿉니다. 일부 서버에서 욕설 필터를 우회하는 데 사용할 수 있습니다. \n유니코드 문자를 차단하는 서버에서는 작동하지 않습니다.", + "description.wurst.hack.fastbreak": "블록을 더 빨리 부술 수 있습니다. \n팁: Nuker와 함께 사용할 수 있습니다.", + "description.wurst.hack.fastladder": "사다리를 더 빨리 올라갈 수 있습니다.", + "description.wurst.hack.fastplace": "블록을 5배 더 빨리 배치할 수 있습니다. \n팁: AutoBuild와 같은 다른 해킹을 가속화할 수 있습니다.", + "description.wurst.hack.feedaura": "주변의 동물에게 자동으로 사료를 줍니다.", + "description.wurst.hack.fightbot": "자동으로 주변을 돌아다니며 모든 것을 죽이는 봇입니다. \nMobArena에 적합합니다.", + "description.wurst.hack.fish": "수중 중력을 해제하여 물고기처럼 수영할 수 있습니다.", + "description.wurst.hack.flight": "비행이 가능합니다. \n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", + "description.wurst.hack.follow": "가장 가까운 개체를 따라가는 봇입니다. \n매우 귀찮습니다. \n\n.follow를 사용하여 특정 개체를 따라갈 수 있습니다.", + "description.wurst.hack.forceop": "AuthMe 비밀번호를 크랙합니다. \nOP를 얻는 데 사용할 수 있습니다.", + "description.wurst.hack.glide": "낙하할 때 천천히 떨어집니다. \n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", + "description.wurst.hack.handnoclip": "벽을 통해 특정 블록에 접근할 수 있습니다.", + "description.wurst.hack.headroll": "항상 고개를 끄덕입니다. \n다른 플레이어에게만 표시됩니다.", + "description.wurst.hack.healthtags": "플레이어의 체력을 이름표에 표시합니다.", + "description.wurst.hack.highjump": "더 높이 점프할 수 있게 해줍니다.\n\n§c§l주의:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", + "description.wurst.hack.infinichat": "채팅에서 256자 제한을 없애줍니다.\nNBT 데이터를 수정하는 긴 명령어에 유용합니다.\n\n§6§l주의:§r 대화를 위해 권장되지 않습니다. 대부분의 서버는 메시지를 256자로 제한합니다.", + "description.wurst.hack.instantbunker": "자신 주위에 작은 벙커를 만듭니다. 57개의 블록이 필요합니다.", + "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년 전에 예수님이 사용했습니다.", + "description.wurst.hack.jetpack": "마치 제트팩을 가지고 있는 것처럼 날 수 있게 해줍니다.\n\n§c§l주의:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", + "description.wurst.hack.kaboom": "주변 블록을 폭발처럼 부숩니다.\n서버에 NoCheat+가 없다면 Nuker보다 훨씬 빠를 수 있습니다. 빠른 도구와 약한 블록과 함께 사용하는 것이 가장 효과적입니다.\n참고: 실제로 폭발하는 것은 아닙니다.", + "description.wurst.hack.killauralegit": "감지가 어려운 느린 Killaura입니다.\n일반적인 NoCheat+ 서버에서는 필요하지 않습니다!", + "description.wurst.hack.killaura": "자동으로 주변의 개체를 공격합니다.", + "description.wurst.hack.liquids": "액체 안에 블록을 배치할 수 있게 해줍니다.", + "description.wurst.hack.lsd": "환각을 유발합니다.", + "description.wurst.hack.masstpa": "모든 플레이어에게 TPA 요청을 보냅니다.", + "description.wurst.hack.mileycyrus": "트월킹을 할 수 있게 해줍니다.", + "description.wurst.hack.mobesp": "주변의 몹을 강조합니다.", + "description.wurst.hack.multiaura": "여러 개체를 동시에 공격하는 더 빠른 Killaura입니다.", + "description.wurst.hack.nameprotect": "모든 플레이어 이름을 숨깁니다.", + "description.wurst.hack.nametags": "네임태그의 크기를 크게 변경하여 항상 읽을 수 있게 해줍니다. 또한 웅크리는 플레이어의 네임태그를 볼 수 있게 해줍니다.", + "description.wurst.hack.navigator": "시간이 지남에 따라 사용자의 선호도를 학습하는 검색 가능한 GUI입니다.", + "description.wurst.hack.newchunks": "자신 주변에 최근에 생성된 청크를 강조합니다.", + "description.wurst.hack.noclip": "블록을 자유롭게 통과할 수 있게 해줍니다.\n블록(예: 모래)이 머리 위로 떨어져야 활성화됩니다.\n\n§c§l주의:§r 블록을 통과하는 동안 피해를 입을 수 있습니다!", + "description.wurst.hack.nocomcrash": "Nocom 악용을 통해 서버를 지연시키고 충돌시킵니다.\nPaper 서버에서 작동하지 않습니다. Vanilla, Spigot 및 Fabric에서 테스트된 작동합니다. 일부 AntiCheats에 의해 비활성화될 수 있습니다.", + "description.wurst.hack.nofall": "낙하 피해를 방지합니다.", + "description.wurst.hack.nofireoverlay": "불에 탔을 때 오버레이를 제거합니다.\n\n§c§l주의:§r 이로 인해 알지 못하고 타죽을 수 있습니다.", + "description.wurst.hack.nohurtcam": "피해를 입었을 때 흔들림 효과를 제거합니다.", + "description.wurst.hack.nooverlay": "물과 용암의 오버레이를 제거합니다.", + "description.wurst.hack.nopumpkin": "호박을 머리에 쓸 때 오버레이를 제거합니다.", + "description.wurst.hack.noslowdown": "꿀, 영혼 모래 및 아이템 사용으로 인한 속도 감소 효과를 제거합니다.", + "description.wurst.hack.noweather": "클라이언트 측의 날씨, 시간 및 달의 위상을 변경할 수 있게 해줍니다.", + "description.wurst.hack.noweb": "거미줄에 갇히는 것을 제거합니다.", + "description.wurst.hack.nuker": "주변 블록을 자동으로 부숩니다.", + "description.wurst.hack.nukerlegit": "감지 플러그인을 우회하는 더 느린 Nuker입니다.\n일반적인 NoCheat+ 서버에서는 필요하지 않습니다!", + "description.wurst.hack.openwateresp": "'열린 물'에서 낚시를 하는지 여부를 보여주고 열린 물 계산에 사용되는 영역 주위에 상자를 그립니다.", + "description.wurst.hack.overlay": "블록을 채굴할 때마다 Nuker 애니메이션을 렌더링합니다.", + "description.wurst.hack.panic": "활성화된 모든 핵을 즉시 비활성화합니다.\n이 기능을 사용할 때 주의하세요!", + "description.wurst.hack.parkour": "블록 가장자리에 도달하면 자동으로 점프합니다.\n파쿠르와 점프'n'런에 유용합니다.", + "description.wurst.hack.portalgui": "포탈에서 GUI를 열 수 있게 해줍니다.", + "description.wurst.hack.potionsaver": "정지 상태에서는 모든 물약 효과를 유지합니다.", + "description.wurst.hack.prophuntesp": "블럭 숨바꼭질에서 가짜 블록을 볼 수 있게 해줍니다.\nMineplex서버의 블럭 숨바꼭질을 위해 제작되었으며, 다른 서버에서 작동하지 않을 수 있습니다.", + "description.wurst.hack.protect": "가장 가까운 개체를 따라가고 다른 개체로부터 보호하는 봇입니다.\n가장 가까운 개체 대신 특정 개체를 보호하려면 .protect 명령을 사용하세요.", + "description.wurst.hack.radar": "주변 개체의 위치를 보여줍니다.\n§c빨강색§r - 플레이어\n§6주황색§r - 몬스터\n§a초록색§r - 동물\n§7회색§r - 기타", + "description.wurst.hack.remoteview": "특정 플레이어의 시야를 공유합니다.\n.rv 명령을 사용하여 특정 개체를 대상으로 설정할 수 있습니다.", + "description.wurst.hack.safewalk": "블럭끝에서 떨어지지 않게 해줍니다.", + "description.wurst.hack.scaffoldwalk": "자동으로 발 아래에 블록을 배치합니다.", + "description.wurst.hack.search": "무지개 색상으로 강조하여 특정 블록을 찾는 데 도움을 줍니다.", + "description.wurst.hack.skinderp": "스킨의 커버를 무작위로 on/off 합니다.", + "description.wurst.hack.sneak": "웅크리게 합니다.", + "description.wurst.hack.speedhack": "달리기와 점프로 할 때보다 약 2.5배 더 빠르게 달릴 수 있게 해줍니다.\n\n§6§l주의:§r NoCheat+ 버전 3.13.2에서 패치되었습니다. 이전 버전의 NoCheat+에서만 우회됩니다.\n서버의 NoCheat+ 버전을 확인하려면 §l/ncp version§r을 입력하세요.", + "description.wurst.hack.speednuker": "NoCheat+를 우회할 수 없는 더 빠른 버전의 Nuker입니다.", + "description.wurst.hack.spider": "거미처럼 벽을 타고 올라갈 수 있게 해줍니다.", + "description.wurst.hack.step": "모든 블럭을 계단처럼 올라갑니다.", + "description.wurst.hack.tillaura": "자동으로 흙, 잔디 등을 경작화 시킵니다.\nKillaura와 혼동하지 마세요.", + "description.wurst.hack.timer": "개인의 시간 선을 조절합니다.\n단, 서버의 영향을 미치진 않습니다.", + "description.wurst.hack.toomanyhax": "원치 않는 기능을 차단합니다.\n잘못된 핵을 우연히 활성화하여 밴을 당하는 것을 방지할 수 있습니다.\n'핵을 조금만 사용하는' 사람들을 위한 기능입니다.\n\n§6.toomanyhax§r 명령을 사용하여 어떤 기능을 차단할지 선택할 수 있습니다.\n자세한 내용은 §6.help toomanyhax§r를 입력하세요.", + "description.wurst.hack.tp-aura": "가까운 유효한 개체로 텔레포트 하면서 가장 자동으로 공격합니다.", + "description.wurst.hack.trajectories": "화살과 던져지는 아이템의 비행 경로를 예측해 줍니다.", + "description.wurst.hack.treebot": "자동으로 주위를 돌아다니며 나무를 베어줍니다.\n현재는 작은 나무에만 사용 가능합니다.", + "description.wurst.hack.triggerbot": "바라보고 있는 개체를 자동으로 공격합니다.", + "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글로벌 §c밴 §c처리될 §c수 §c있습니다!§r\n\n채팅에서 무해한 내용을 말한다고 해도, 서명된 메시지는 가짜 채팅 신고를 생성하여 계정이 불공정하게 밴 처리되는 경우가 있을 수 있습니다.\n\n채팅 서명을 다시 활성화하여 채팅을 하려면 계정이 아닌 가계정에서 플레이하는 것을 고려하세요.", + "button.wurst.nochatreports.disable_signatures": "서명 비활성화", + "button.wurst.nochatreports.re-enable_signatures": "서명 활성화", + "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는 이 폴더 없이 가계정 목록을 암호화하거나 복호화할 수 없습니다.\nAltManager를 계속 사용할 수 있지만, 이제 만드는 가계정은 저장되지 않습니다.\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이 서버가 소유한 경우 server.properties에서 'enforce-secure-profile'을 false로 설정하여 수정할 수 있습니다. 전형적인 Mojang의 스타일로, 이 설정은 이름이 의미하는 것과 반대로 작동합니다.", + "toast.wurst.nochatreports.unsafe_server.title": "채팅 메시지가 신고될 수 있습니다", + "toast.wurst.nochatreports.unsafe_server.message": "이 서버에서 전송한 메시지는 Mojang에게 신고될 수 있으며 계정이 모든 서버 밴 처리될 수 있습니다", + "button.wurst.nochatreports.signatures_status": "서명: ", + "description.wurst.nochatreports.message_is_reportable": "이 메시지에는 유효한 서명이 있으므로 가짜 채팅 신고에 취약합니다.", + "gui.wurst.generic.allcaps_blocked": "차단됨", + "gui.wurst.generic.allcaps_allowed": "허용됨" +} diff --git a/src/main/resources/assets/wurst/lang/pl_pl.json b/src/main/resources/assets/wurst/lang/pl_pl.json index 2469c190..01ad3400 100644 --- a/src/main/resources/assets/wurst/lang/pl_pl.json +++ b/src/main/resources/assets/wurst/lang/pl_pl.json @@ -183,4 +183,4 @@ "description.wurst.nochatreports.message_is_reportable": "Ta wiadomość ma prawidłową sygnaturę, przez co jest podatna na fałszywe zgłoszenia.", "gui.wurst.generic.allcaps_blocked": "ZABLOKOWANE", "gui.wurst.generic.allcaps_allowed": "DOZWOLONE" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/wurst/lang/ro_ro.json b/src/main/resources/assets/wurst/lang/ro_ro.json index 0431d4b4..31701419 100644 --- a/src/main/resources/assets/wurst/lang/ro_ro.json +++ b/src/main/resources/assets/wurst/lang/ro_ro.json @@ -1,178 +1,178 @@ -{ - "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.", - "description.wurst.hack.antiblind": "Previne orbirea si efectele întunericului.\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 cu barci si alte vehicule.\nApasa pe sprint pentru a cobori mai repede.", - "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.", - "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.newchunks": "Conturează chunk-urile generate recent in jurul tău.", - "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.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.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.", - "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.", - "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", - "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" -} \ No newline at end of file +{ + "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.", + "description.wurst.hack.antiblind": "Previne orbirea si efectele întunericului.\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 cu barci si alte vehicule.\nApasa pe sprint pentru a cobori mai repede.", + "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.", + "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.newchunks": "Conturează chunk-urile generate recent in jurul tău.", + "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.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.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.", + "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.", + "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", + "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" +} diff --git a/src/main/resources/assets/wurst/lang/ru_ru.json b/src/main/resources/assets/wurst/lang/ru_ru.json index eddb8ba0..7b705944 100644 --- a/src/main/resources/assets/wurst/lang/ru_ru.json +++ b/src/main/resources/assets/wurst/lang/ru_ru.json @@ -1,187 +1,187 @@ -{ - "description.wurst.hack.airplace": "Позволяет ставить блоки в воздухе.", - "description.wurst.hack.anchoraura": "Автоматически ставит (если отмечено), заряжает и взрывает якоря возрождения, чтобы убить сущностей вокруг вас.", - "description.wurst.hack.antiafk": "Ходит в случайном направлении чтобы сервер не знал что Вы АФК.", - "description.wurst.hack.antiblind": "Предотвращает эффекты слепоты и темноты.\nНесовместим с OptiFine.", - "description.wurst.hack.anticactus": "Защищает Вас от урона от столкновения с кактусами.", - "description.wurst.hack.antihunger": "Замедляет уменьшение голода, когда вы ходите.", - "description.wurst.hack.antiknockback": "Предотвращает откидывание при получении урона.", - "description.wurst.hack.antispam": "Блокирует спам в чате добавляя счетчик повторений у сообщения.", - "description.wurst.hack.antiwaterpush": "Убирает снос течением воды.", - "description.wurst.hack.antiwobble": "Отключает покачивание экрана от портала и эффекта тошноты.", - "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": "Автоматически экипирует наилучшую броню.", - "description.wurst.hack.autobuild": "Автоматически строит объекты.\nПоставьте блок, чтобы начать строительство.", - "description.wurst.hack.autodrop": "Автоматически выбрасывает ненужные вещи.", - "description.wurst.hack.autoleave": "Автоматический выход с сервера когда остается мало здоровья.", - "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.take_items_from": "Где AutoEat должен искать еду.", - "description.wurst.setting.autoeat.eat_while_walking": "Замедляет тебя, не рекомендуется.", - "description.wurst.setting.autoeat.allow_hunger": "Гнилая плоть накладывает эффект \"голод\".\nОна безопасна для употребления в пищу и полезна в качестве аварийного питания.", - "description.wurst.setting.autoeat.allow_poison": "Ядовитая пища наносит урон с течением времени.\nНе рекомендуется.", - "description.wurst.setting.autoeat.allow_chorus": "Съев плод хоруса, вы телепортируетесь в случайное место.\nНе рекомендуется.", - "description.wurst.hack.autofarm": "Автоматически собирает урожай и сажает семена.\nРаботает с пшеницей, морковкой, картошкой, свеклой, тыквами, арбузами, кактусами, тростником, водорослями, бамбуком, адским наростом, и какао-бобами.", - "description.wurst.hack.autofish": "Автоматически ловит рыбу используя Вашу лучшую удочку. Если во время рыбалки найдётся удочка ещё лучше - бот переключится на неё.", - "description.wurst.hack.automine": "Автоматически копает блоки на которые Вы смотрите.", - "description.wurst.hack.autopotion": "Автоматически использует взрывные зелья лечения когда у Вас мало здоровья.", - "description.wurst.hack.autoreconnect": "Автоматически переподключается когда Вас кикает с сервера.", - "description.wurst.hack.autorespawn": "Автоматически возрождает Вас после смерти.", - "description.wurst.hack.autosign": "Моментально пишет заданный текст на табличках которые Вы устанавливаете. После активации текст написанный на первой Вашей табличке будет повторяться на всех следующих.", - "description.wurst.hack.autosoup": "Автоматически ест суп когда мало здоровья.\n\n§lВНИМАНИЕ:§r Этот чит игнорирует голод и предполагает что суп восстановит здоровье напрямую. Если на сервере такого нет, то используйте AutoEat.", - "description.wurst.hack.autosprint": "Автоматически включает бег.", - "description.wurst.hack.autosteal": "Автоматически забирает всё из сундуков и шалкеров которые Вы открываете.", - "description.wurst.hack.autoswim": "Автоматически включает анимацию быстрого плаванья.", - "description.wurst.hack.autoswitch": "Всё время переключает слоты в руке.\n\n§lProTip:§r Можно использовать это с BuildRandom когда у вас в хотбаре много разноцветной шерсти или бетона.", - "description.wurst.hack.autosword": "Автоматическое использование наилучшего оружия для атаки.\nСовет: Это хорошее дополнение к Killaura.", - "description.wurst.hack.autotool": "Автоматически экипирует подходящий инструмент из хотбара когда Вы пытаетесь сломать блок.", - "description.wurst.hack.autototem": "Автоматически перемещает тотемы бессмертия во вторую руку.", - "description.wurst.hack.autowalk": "Заставляет Вас всё время идти.", - "description.wurst.hack.basefinder": "Ищет базы игроков при помощи поиска рукотворных блоков.\nБлоки которые эта функция находит будут подсвечены выбранным цветом.\nХороший инструмент для поиска скрытых баз гильдий.", - "description.wurst.hack.blink": "Приостанавливает все движения пока включен.", - "description.wurst.hack.boatfly": "Позволяет летать, находясь в лодке или других транспортных средствах.\nНажмите клавишу спринта, чтобы спускаться быстрее.", - "description.wurst.hack.bonemealaura": "Автоматически использует костную муку на растениях.\nОтметьте в меню на каких типах растений использовать.", - "description.wurst.hack.bowaimbot": "Автоматически целится из лука или арбалета.", - "description.wurst.hack.buildrandom": "Ставит вокруг блоки в случайном порядке.", - "description.wurst.hack.bunnyhop": "Заставляет Вас постоянно прыгать.", - "description.wurst.hack.cameradistance": "Позволяет вам изменять расстояние до камеры от третьего лица.", - "description.wurst.hack.cameranoclip": "Позволяет камере проходить сквозь стены.", - "description.wurst.hack.cavefinder": "Помогает найти пещеры подсвечивая их выбранным цветом.", - "description.wurst.hack.chattranslator": "Все входящие сообщения в чате будут переводиться Google переводчиком.", - "description.wurst.hack.chestesp": "Подсвечивает выбранным цветом сундуки поблизости.", - "description.wurst.hack.clickaura": "Автоматически атакует ближайшую сущность когда вы нажимаете ЛКМ.\n\n§c§lВНИМАНИЕ:§r ClickAura обычно выглядят более подозрительно чем Killaura и легче обнаруживается плагинами. Вместо этого рекомендуется использовать Killaura или TriggerBot.", - "description.wurst.hack.clickgui": "Интерфейс с панелями.", - "description.wurst.hack.crashchest": "Создаёт сундук который банит того у кого будет слишком много копий такого сундука в инвентаре. §c§lВНИМАНИЕ:§r §cЭто необратимо. Используйте с осторожностью!§r\n\nЕсли кучу таких копий засунуть в сундук, то любой кто его откроет вылетит из сервера (не навсегда).", - "description.wurst.hack.creativeflight": "Позволяет летать как в креативе.\n\n§c§lВНИМАНИЕ:§r Вы всё равно будете получать урон от падения если не включите NoFall.", - "description.wurst.hack.criticals": "Все ваши удары теперь будут критическими, как если бы Вы каждый раз прыгали.", - "description.wurst.hack.crystalaura": "Автоматически ставит (если отмечено) и взрывает кристаллы края, чтобы убить сущности вокруг.", - "description.wurst.hack.derp": "Крутит головой в случайном направлении.\nВидно только другим игрокам.", - "description.wurst.hack.dolphin": "Заставляет вас автоматически всплывать.\n(как дельфинчик)", - "description.wurst.hack.excavator": "Автоматически выкапывает все блоки в выбранной области.", - "description.wurst.hack.extraelytra": "Облегчает использование Элитр.", - "description.wurst.hack.fancychat": "Заменяет обычные буквы на более элегантные символы Юникода. Можно использовать для обхода мат-фильтра на некоторых серверах.\nНе работает на серверах на которых заблокированы символы Юникода.", - "description.wurst.hack.fastbreak": "Позволяет ломать блоки быстрее.\nСовет: Хорошо сочетается с Nuker.", - "description.wurst.hack.fastladder": "Позволяет забираться по лестницам быстрее.", - "description.wurst.hack.fastplace": "Позволяет ставить блоки в 5 раз быстрее.\nСовет: Может ускорять работу AutoBuild.", - "description.wurst.hack.feedaura": "Автоматически кормит животных вокруг.", - "description.wurst.hack.fightbot": "Бот автоматически ходит вокруг и убивает что попало.\nМожет быть полезен на моб-арене.", - "description.wurst.hack.fish": "Отключает притяжение под водой, можно плавать как рыба.", - "description.wurst.hack.flight": "Позволяет вам летать.\n\n§c§lВНИМАНИЕ:§r Вы будете получать урон от падения если не включите NoFall.", - "description.wurst.hack.follow": "Бот, который следует за ближайшей сущностью.\nОчень назойливо.\n\nИспользуйте .follow, чтобы следовать за кем-то конкретным.", - "description.wurst.hack.forceop": "Перебирает пароли AuthMe.\nМожно попробовать подобрать пароль админа :) .", - "description.wurst.hack.freecam": "Позволяет перемещать камеру не двигая персонажа.", - "description.wurst.hack.fullbright": "Позволяет видеть в темноте.", - "description.wurst.hack.glide": "Замедляет падение.\n\n§c§lВНИМАНИЕ:§r Вы всё равно будете получать урон от падения если не включите NoFall.", - "description.wurst.hack.handnoclip": "Позволяет использовать некоторые блоки через стены.", - "description.wurst.hack.headroll": "Заставляет Вас всё время кивать.\nВидно только другим игрокам.", - "description.wurst.hack.healthtags": "Показывает здоровье игроков возле ника.", - "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Около двух тысяч лет назад им воспользовался Иисус.", - "description.wurst.hack.jetpack": "Позволяет летать как с реактивным ранцем.\n\n§c§lВНИМАНИЕ:§r Вы будете получать урон от падения если не включите NoFall.", - "description.wurst.hack.kaboom": "Ломает блоки вокруг как будто произошел взрыв.\nЭто может быть намного быстрее Nuker'а если на сервере нет NoCheat+. Лучше всего работает с быстрыми инструментами и слабыми блоками.\nПометка: Это не взрыв.", - "description.wurst.hack.killauralegit": "Более медленная Killaura которую тяжелее обнаружить.\nНе нужна на обычных серверах с простым NoCheat+!", - "description.wurst.hack.killaura": "Автоматически атакует сущностей вокруг.", - "description.wurst.hack.killpotion": "Создает зелье которое убивает практически кого угодно, даже тех кто в креативе. Не работает на нежити потому что они и так мертвы лол.\n\nДля работы требуется креатив.", - "description.wurst.hack.liquids": "Позволяет ставить блоки прямо в жидкостях.", - "description.wurst.hack.lsd": "Провоцирует тяжелые галлюцинации.", - "description.wurst.hack.masstpa": "Отправляет запрос на телепортацию всем игрокам.", - "description.wurst.hack.mileycyrus": "Заставляет Вас тверкать.", - "description.wurst.hack.mobesp": "Подсвечивает мобов неподалеку.", - "description.wurst.hack.mobspawnesp": "Показывает места в которых могут заспавниться мобы.\n§eжёлтым§r - мобы могут заспавниться ночью\n§cкрасным§r - мобы могут заспавниться когда угодно", - "description.wurst.hack.multiaura": "Более быстрая Killaura которая атакует сразу несколько сущностей одновременно.", - "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.nukerlegit": "Более медленная версия Nuker которая обходит любой античит.\nНе нужна на обычных серверах с простым NoCheat+!", - "description.wurst.hack.openwateresp": "Показывает рыбачите ли Вы в 'открытой воде' и рисует вокруг области куб используемый для расчета.", - "description.wurst.hack.overlay": "Добавляет анимацию разрушения блока для Nuker.", - "description.wurst.hack.panic": "Моментально выключает все читы.\nОсторожней с этим!", - "description.wurst.hack.parkour": "Заставляет вас автоматически прыгать по достижении края блока.\nПолезно для паркуров и побегов.", - "description.wurst.hack.playeresp": "Подсвечивает игроков неподалеку.\nДрузей будет подсвечивать синим.", - "description.wurst.hack.portalgui": "Позволяет открывать инвентарь и чат в порталах.", - "description.wurst.hack.potionsaver": "Замораживает время действия всех эффектов пока Вы стоите на месте.", - "description.wurst.hack.prophuntesp": "Позволяет отличать ненастоящие блоки в Prophunt.\nСделано для Mineplex Prophunt. Может не работать на других серверах.", - "description.wurst.hack.protect": "Бот, который следует за ближайшей сущностью и защищает её от других.\nИспользуйте .protect, чтобы защищать кого-то конкретного.", - "description.wurst.hack.radar": "Радар, отображающий сущностей вокруг.\n§cкрасным§r - игроков\n§6оранжевым§r - монстров\n§aзелёным§r - животных\n§7серым§r - всех остальных", - "description.wurst.hack.rainbowui": "§cД§aе§9л§cа§aе§9т §cв§aс§9ё §cр§aа§9з§cн§aо§9ц§cв§aе§9т§cн§aы§9м.", - "description.wurst.hack.reach": "Позволяет дотягиваться дальше.", - "description.wurst.hack.remoteview": "Позволяет смотреть от лица другой сущности или игрока.\nИспользуйте .rv, чтобы посмотреть на мир глазами кого-то конкретного.", - "description.wurst.hack.safewalk": "Не даёт вам упасть с края блоков.", - "description.wurst.hack.scaffoldwalk": "Автоматически ставит блоки под ноги.", - "description.wurst.hack.search": "Помогает найти заданные блоки подсвечивая их всеми цветами радуги.", - "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.speednuker": "Более быстрая версия Nuker которая не работает с NoCheat+.", - "description.wurst.hack.spider": "Позволяет взбираться по стенам как паук.", - "description.wurst.hack.step": "Позволяет зашагивать на блоки как по ступенькам.", - "description.wurst.hack.throw": "Использует вещь несколько раз. Может быть использовано для быстрого бросания снежков и яиц, призыва мобов, установки вагонеток и т.д. в огромных количествах.\n\nЭто может создать большую нагрузку на сервер и даже его крашнуть.", - "description.wurst.hack.tillaura": "Автоматически вспахивает землю вокруг.\nНе перепутайте с Killaura.", - "description.wurst.hack.timer": "Изменяет скорость практически всего.", - "description.wurst.hack.tired": "Делает Вас как выглядел Alexander в Апреле 2015.\nВидно только другим игрокам.", - "description.wurst.hack.toomanyhax": "Отключает ненужные вам функции.\nПозволяет быть уверенным что вы не включите случайно что-то не то и получите бан.\nДля тех, кто хочеть почитерить \"совсем чуть-чуть\".\n\nИспользуйте команду §6.toomanyhax§r чтобы выбрать какие функции следует отключить.\nНапишите §6.help toomanyhax§r для более подробной информации.", - "description.wurst.hack.tp-aura": "Автоматически атакует ближайшую сущность при этом телепортируясь вокруг неё.", - "description.wurst.hack.trajectories": "Показывает траекторию полета стрел и бросаемых вещей.", - "description.wurst.hack.treebot": "Экспериментальная функция, бот который ходит и автоматически вырубает деревья.\nПока что ограничен обычными маленькими деревьями.", - "description.wurst.hack.triggerbot": "Автоматически атакует сущность на которую Вы смотрите.", - "description.wurst.hack.trollpotion": "Создает зелье с множеством противных эффектов. Для работы требуется креатив.", - "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": "Этот аккаунт имеет пароль и может присоединяться к любым серверам.", - "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": "РАЗРЕШЕНО", - "key.wurst.zoom": "Приблизить" -} \ No newline at end of file +{ + "description.wurst.hack.airplace": "Позволяет ставить блоки в воздухе.", + "description.wurst.hack.anchoraura": "Автоматически ставит (если отмечено), заряжает и взрывает якоря возрождения, чтобы убить сущностей вокруг вас.", + "description.wurst.hack.antiafk": "Ходит в случайном направлении чтобы сервер не знал что Вы АФК.", + "description.wurst.hack.antiblind": "Предотвращает эффекты слепоты и темноты.\nНесовместим с OptiFine.", + "description.wurst.hack.anticactus": "Защищает Вас от урона от столкновения с кактусами.", + "description.wurst.hack.antihunger": "Замедляет уменьшение голода, когда вы ходите.", + "description.wurst.hack.antiknockback": "Предотвращает откидывание при получении урона.", + "description.wurst.hack.antispam": "Блокирует спам в чате добавляя счетчик повторений у сообщения.", + "description.wurst.hack.antiwaterpush": "Убирает снос течением воды.", + "description.wurst.hack.antiwobble": "Отключает покачивание экрана от портала и эффекта тошноты.", + "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": "Автоматически экипирует наилучшую броню.", + "description.wurst.hack.autobuild": "Автоматически строит объекты.\nПоставьте блок, чтобы начать строительство.", + "description.wurst.hack.autodrop": "Автоматически выбрасывает ненужные вещи.", + "description.wurst.hack.autoleave": "Автоматический выход с сервера когда остается мало здоровья.", + "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.take_items_from": "Где AutoEat должен искать еду.", + "description.wurst.setting.autoeat.eat_while_walking": "Замедляет тебя, не рекомендуется.", + "description.wurst.setting.autoeat.allow_hunger": "Гнилая плоть накладывает эффект \"голод\".\nОна безопасна для употребления в пищу и полезна в качестве аварийного питания.", + "description.wurst.setting.autoeat.allow_poison": "Ядовитая пища наносит урон с течением времени.\nНе рекомендуется.", + "description.wurst.setting.autoeat.allow_chorus": "Съев плод хоруса, вы телепортируетесь в случайное место.\nНе рекомендуется.", + "description.wurst.hack.autofarm": "Автоматически собирает урожай и сажает семена.\nРаботает с пшеницей, морковкой, картошкой, свеклой, тыквами, арбузами, кактусами, тростником, водорослями, бамбуком, адским наростом, и какао-бобами.", + "description.wurst.hack.autofish": "Автоматически ловит рыбу используя Вашу лучшую удочку. Если во время рыбалки найдётся удочка ещё лучше - бот переключится на неё.", + "description.wurst.hack.automine": "Автоматически копает блоки на которые Вы смотрите.", + "description.wurst.hack.autopotion": "Автоматически использует взрывные зелья лечения когда у Вас мало здоровья.", + "description.wurst.hack.autoreconnect": "Автоматически переподключается когда Вас кикает с сервера.", + "description.wurst.hack.autorespawn": "Автоматически возрождает Вас после смерти.", + "description.wurst.hack.autosign": "Моментально пишет заданный текст на табличках которые Вы устанавливаете. После активации текст написанный на первой Вашей табличке будет повторяться на всех следующих.", + "description.wurst.hack.autosoup": "Автоматически ест суп когда мало здоровья.\n\n§lВНИМАНИЕ:§r Этот чит игнорирует голод и предполагает что суп восстановит здоровье напрямую. Если на сервере такого нет, то используйте AutoEat.", + "description.wurst.hack.autosprint": "Автоматически включает бег.", + "description.wurst.hack.autosteal": "Автоматически забирает всё из сундуков и шалкеров которые Вы открываете.", + "description.wurst.hack.autoswim": "Автоматически включает анимацию быстрого плаванья.", + "description.wurst.hack.autoswitch": "Всё время переключает слоты в руке.\n\n§lProTip:§r Можно использовать это с BuildRandom когда у вас в хотбаре много разноцветной шерсти или бетона.", + "description.wurst.hack.autosword": "Автоматическое использование наилучшего оружия для атаки.\nСовет: Это хорошее дополнение к Killaura.", + "description.wurst.hack.autotool": "Автоматически экипирует подходящий инструмент из хотбара когда Вы пытаетесь сломать блок.", + "description.wurst.hack.autototem": "Автоматически перемещает тотемы бессмертия во вторую руку.", + "description.wurst.hack.autowalk": "Заставляет Вас всё время идти.", + "description.wurst.hack.basefinder": "Ищет базы игроков при помощи поиска рукотворных блоков.\nБлоки которые эта функция находит будут подсвечены выбранным цветом.\nХороший инструмент для поиска скрытых баз гильдий.", + "description.wurst.hack.blink": "Приостанавливает все движения пока включен.", + "description.wurst.hack.boatfly": "Позволяет летать, находясь в лодке или других транспортных средствах.\nНажмите клавишу спринта, чтобы спускаться быстрее.", + "description.wurst.hack.bonemealaura": "Автоматически использует костную муку на растениях.\nОтметьте в меню на каких типах растений использовать.", + "description.wurst.hack.bowaimbot": "Автоматически целится из лука или арбалета.", + "description.wurst.hack.buildrandom": "Ставит вокруг блоки в случайном порядке.", + "description.wurst.hack.bunnyhop": "Заставляет Вас постоянно прыгать.", + "description.wurst.hack.cameradistance": "Позволяет вам изменять расстояние до камеры от третьего лица.", + "description.wurst.hack.cameranoclip": "Позволяет камере проходить сквозь стены.", + "description.wurst.hack.cavefinder": "Помогает найти пещеры подсвечивая их выбранным цветом.", + "description.wurst.hack.chattranslator": "Все входящие сообщения в чате будут переводиться Google переводчиком.", + "description.wurst.hack.chestesp": "Подсвечивает выбранным цветом сундуки поблизости.", + "description.wurst.hack.clickaura": "Автоматически атакует ближайшую сущность когда вы нажимаете ЛКМ.\n\n§c§lВНИМАНИЕ:§r ClickAura обычно выглядят более подозрительно чем Killaura и легче обнаруживается плагинами. Вместо этого рекомендуется использовать Killaura или TriggerBot.", + "description.wurst.hack.clickgui": "Интерфейс с панелями.", + "description.wurst.hack.crashchest": "Создаёт сундук который банит того у кого будет слишком много копий такого сундука в инвентаре. §c§lВНИМАНИЕ:§r §cЭто необратимо. Используйте с осторожностью!§r\n\nЕсли кучу таких копий засунуть в сундук, то любой кто его откроет вылетит из сервера (не навсегда).", + "description.wurst.hack.creativeflight": "Позволяет летать как в креативе.\n\n§c§lВНИМАНИЕ:§r Вы всё равно будете получать урон от падения если не включите NoFall.", + "description.wurst.hack.criticals": "Все ваши удары теперь будут критическими, как если бы Вы каждый раз прыгали.", + "description.wurst.hack.crystalaura": "Автоматически ставит (если отмечено) и взрывает кристаллы края, чтобы убить сущности вокруг.", + "description.wurst.hack.derp": "Крутит головой в случайном направлении.\nВидно только другим игрокам.", + "description.wurst.hack.dolphin": "Заставляет вас автоматически всплывать.\n(как дельфинчик)", + "description.wurst.hack.excavator": "Автоматически выкапывает все блоки в выбранной области.", + "description.wurst.hack.extraelytra": "Облегчает использование Элитр.", + "description.wurst.hack.fancychat": "Заменяет обычные буквы на более элегантные символы Юникода. Можно использовать для обхода мат-фильтра на некоторых серверах.\nНе работает на серверах на которых заблокированы символы Юникода.", + "description.wurst.hack.fastbreak": "Позволяет ломать блоки быстрее.\nСовет: Хорошо сочетается с Nuker.", + "description.wurst.hack.fastladder": "Позволяет забираться по лестницам быстрее.", + "description.wurst.hack.fastplace": "Позволяет ставить блоки в 5 раз быстрее.\nСовет: Может ускорять работу AutoBuild.", + "description.wurst.hack.feedaura": "Автоматически кормит животных вокруг.", + "description.wurst.hack.fightbot": "Бот автоматически ходит вокруг и убивает что попало.\nМожет быть полезен на моб-арене.", + "description.wurst.hack.fish": "Отключает притяжение под водой, можно плавать как рыба.", + "description.wurst.hack.flight": "Позволяет вам летать.\n\n§c§lВНИМАНИЕ:§r Вы будете получать урон от падения если не включите NoFall.", + "description.wurst.hack.follow": "Бот, который следует за ближайшей сущностью.\nОчень назойливо.\n\nИспользуйте .follow, чтобы следовать за кем-то конкретным.", + "description.wurst.hack.forceop": "Перебирает пароли AuthMe.\nМожно попробовать подобрать пароль админа :) .", + "description.wurst.hack.freecam": "Позволяет перемещать камеру не двигая персонажа.", + "description.wurst.hack.fullbright": "Позволяет видеть в темноте.", + "description.wurst.hack.glide": "Замедляет падение.\n\n§c§lВНИМАНИЕ:§r Вы всё равно будете получать урон от падения если не включите NoFall.", + "description.wurst.hack.handnoclip": "Позволяет использовать некоторые блоки через стены.", + "description.wurst.hack.headroll": "Заставляет Вас всё время кивать.\nВидно только другим игрокам.", + "description.wurst.hack.healthtags": "Показывает здоровье игроков возле ника.", + "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Около двух тысяч лет назад им воспользовался Иисус.", + "description.wurst.hack.jetpack": "Позволяет летать как с реактивным ранцем.\n\n§c§lВНИМАНИЕ:§r Вы будете получать урон от падения если не включите NoFall.", + "description.wurst.hack.kaboom": "Ломает блоки вокруг как будто произошел взрыв.\nЭто может быть намного быстрее Nuker'а если на сервере нет NoCheat+. Лучше всего работает с быстрыми инструментами и слабыми блоками.\nПометка: Это не взрыв.", + "description.wurst.hack.killauralegit": "Более медленная Killaura которую тяжелее обнаружить.\nНе нужна на обычных серверах с простым NoCheat+!", + "description.wurst.hack.killaura": "Автоматически атакует сущностей вокруг.", + "description.wurst.hack.killpotion": "Создает зелье которое убивает практически кого угодно, даже тех кто в креативе. Не работает на нежити потому что они и так мертвы лол.\n\nДля работы требуется креатив.", + "description.wurst.hack.liquids": "Позволяет ставить блоки прямо в жидкостях.", + "description.wurst.hack.lsd": "Провоцирует тяжелые галлюцинации.", + "description.wurst.hack.masstpa": "Отправляет запрос на телепортацию всем игрокам.", + "description.wurst.hack.mileycyrus": "Заставляет Вас тверкать.", + "description.wurst.hack.mobesp": "Подсвечивает мобов неподалеку.", + "description.wurst.hack.mobspawnesp": "Показывает места в которых могут заспавниться мобы.\n§eжёлтым§r - мобы могут заспавниться ночью\n§cкрасным§r - мобы могут заспавниться когда угодно", + "description.wurst.hack.multiaura": "Более быстрая Killaura которая атакует сразу несколько сущностей одновременно.", + "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.nukerlegit": "Более медленная версия Nuker которая обходит любой античит.\nНе нужна на обычных серверах с простым NoCheat+!", + "description.wurst.hack.openwateresp": "Показывает рыбачите ли Вы в 'открытой воде' и рисует вокруг области куб используемый для расчета.", + "description.wurst.hack.overlay": "Добавляет анимацию разрушения блока для Nuker.", + "description.wurst.hack.panic": "Моментально выключает все читы.\nОсторожней с этим!", + "description.wurst.hack.parkour": "Заставляет вас автоматически прыгать по достижении края блока.\nПолезно для паркуров и побегов.", + "description.wurst.hack.playeresp": "Подсвечивает игроков неподалеку.\nДрузей будет подсвечивать синим.", + "description.wurst.hack.portalgui": "Позволяет открывать инвентарь и чат в порталах.", + "description.wurst.hack.potionsaver": "Замораживает время действия всех эффектов пока Вы стоите на месте.", + "description.wurst.hack.prophuntesp": "Позволяет отличать ненастоящие блоки в Prophunt.\nСделано для Mineplex Prophunt. Может не работать на других серверах.", + "description.wurst.hack.protect": "Бот, который следует за ближайшей сущностью и защищает её от других.\nИспользуйте .protect, чтобы защищать кого-то конкретного.", + "description.wurst.hack.radar": "Радар, отображающий сущностей вокруг.\n§cкрасным§r - игроков\n§6оранжевым§r - монстров\n§aзелёным§r - животных\n§7серым§r - всех остальных", + "description.wurst.hack.rainbowui": "§cД§aе§9л§cа§aе§9т §cв§aс§9ё §cр§aа§9з§cн§aо§9ц§cв§aе§9т§cн§aы§9м.", + "description.wurst.hack.reach": "Позволяет дотягиваться дальше.", + "description.wurst.hack.remoteview": "Позволяет смотреть от лица другой сущности или игрока.\nИспользуйте .rv, чтобы посмотреть на мир глазами кого-то конкретного.", + "description.wurst.hack.safewalk": "Не даёт вам упасть с края блоков.", + "description.wurst.hack.scaffoldwalk": "Автоматически ставит блоки под ноги.", + "description.wurst.hack.search": "Помогает найти заданные блоки подсвечивая их всеми цветами радуги.", + "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.speednuker": "Более быстрая версия Nuker которая не работает с NoCheat+.", + "description.wurst.hack.spider": "Позволяет взбираться по стенам как паук.", + "description.wurst.hack.step": "Позволяет зашагивать на блоки как по ступенькам.", + "description.wurst.hack.throw": "Использует вещь несколько раз. Может быть использовано для быстрого бросания снежков и яиц, призыва мобов, установки вагонеток и т.д. в огромных количествах.\n\nЭто может создать большую нагрузку на сервер и даже его крашнуть.", + "description.wurst.hack.tillaura": "Автоматически вспахивает землю вокруг.\nНе перепутайте с Killaura.", + "description.wurst.hack.timer": "Изменяет скорость практически всего.", + "description.wurst.hack.tired": "Делает Вас как выглядел Alexander в Апреле 2015.\nВидно только другим игрокам.", + "description.wurst.hack.toomanyhax": "Отключает ненужные вам функции.\nПозволяет быть уверенным что вы не включите случайно что-то не то и получите бан.\nДля тех, кто хочеть почитерить \"совсем чуть-чуть\".\n\nИспользуйте команду §6.toomanyhax§r чтобы выбрать какие функции следует отключить.\nНапишите §6.help toomanyhax§r для более подробной информации.", + "description.wurst.hack.tp-aura": "Автоматически атакует ближайшую сущность при этом телепортируясь вокруг неё.", + "description.wurst.hack.trajectories": "Показывает траекторию полета стрел и бросаемых вещей.", + "description.wurst.hack.treebot": "Экспериментальная функция, бот который ходит и автоматически вырубает деревья.\nПока что ограничен обычными маленькими деревьями.", + "description.wurst.hack.triggerbot": "Автоматически атакует сущность на которую Вы смотрите.", + "description.wurst.hack.trollpotion": "Создает зелье с множеством противных эффектов. Для работы требуется креатив.", + "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": "Этот аккаунт имеет пароль и может присоединяться к любым серверам.", + "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": "РАЗРЕШЕНО", + "key.wurst.zoom": "Приблизить" +} diff --git a/src/main/resources/assets/wurst/lang/uk_ua.json b/src/main/resources/assets/wurst/lang/uk_ua.json index 1870bd5a..4a1af5a4 100644 --- a/src/main/resources/assets/wurst/lang/uk_ua.json +++ b/src/main/resources/assets/wurst/lang/uk_ua.json @@ -1,182 +1,182 @@ -{ - "description.wurst.hack.anchoraura": "Автоматично ставить (якщо прийнято), заряджає і підриває якоря відродження, щоб убити сутності навколо.", - "description.wurst.hack.antiafk": "Ходить у випадковому напрямку, щоб сервер не знав, що ви є АФК.", - "description.wurst.hack.antiblind": "Запобігає ефекту сліпоти та темряви.\nНесумісний з OptiFine.", - "description.wurst.hack.anticactus": "Захищає вас від урону від зіткнення з кактусами.", - "description.wurst.hack.antiknockback": "Запобігає відкиданням при отриманні урону.", - "description.wurst.hack.antispam": "Блокує спам у чаті, натомість додаючи кількість повторень біля повідомлень.", - "description.wurst.hack.antiwaterpush": "Вас більше не зносить течією води.", - "description.wurst.hack.antiwobble": "Вимикає похитування екрана від порталу та ефекту нудоти.", - "description.wurst.hack.arrowdmg": "Суттєво збільшує ушкодження від стріл, але також споживає багато голоду та знижує точність.\n\nНе працює з арбалетами і, здається, виправлено на серверах Paper.", - "description.wurst.setting.arrowdmg.packets": "Кількість пакетів для відправки.\nБільше пакетів = більша шкода.", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "Коли ввімкнено, тризуби летять набагато далі. Здається, не впливає на пошкодження чи Riptide.\n\n§c§lПОПЕРЕДЖЕННЯ:§r Ви можете легко втратити свій тризуб, увімкнувши цю опцію!", - "description.wurst.hack.autoarmor": "Автоматично екіпірує найкращу броню.", - "description.wurst.hack.autobuild": "Автоматично будує об'єкти.\nПоставте блок, щоб почати будівництво.", - "description.wurst.hack.autodrop": "Автоматично викидає непотрібні речі.", - "description.wurst.hack.autoleave": "Автоматичний вихід із сервера, коли залишилося мало здоров'я.", - "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.take_items_from": "Де AutoEat має шукати їжу.", - "description.wurst.setting.autoeat.eat_while_walking": "Уповільнює, не рекомендується.", - "description.wurst.setting.autoeat.allow_hunger": "Гнила м’якоть застосовує нешкідливий ефект «голоду».\nВона безпечна для вживання в їжу та корисна як їжа для невідкладної допомоги.", - "description.wurst.setting.autoeat.allow_poison": "Отруйна їжа з часом завдає шкоди.\nНе рекомендується.", - "description.wurst.setting.autoeat.allow_chorus": "З’їдаючи фрукти хору, ви телепортуєтеся у випадкове місце.\nНе рекомендується.", - "description.wurst.hack.autofarm": "Автоматично збирає та садить урожай.\nПрацює з пшеницею, морквою, картоплею, буряком, гарбузами, кавунами, кактусами, тростиною, водоростями, бамбуком, пекельним наростом, та какао-бобами.", - "description.wurst.hack.autofish": "Автоматично ловить рибу використовуючи вашу найкращу вудку. Якщо під час риболовлі знайдеться вудка ще краще – переключиться на неї.", - "description.wurst.hack.automine": "Автоматично копає блоки на погляд.", - "description.wurst.hack.autopotion": "Автоматично кидає вибухові зілля лікування, коли у вас мало здоров'я.", - "description.wurst.hack.autoreconnect": "Автоматично перепідключається, коли вас кикає з сервера.", - "description.wurst.hack.autorespawn": "Автоматично відроджує вас після смерті.", - "description.wurst.hack.autosign": "Моментально пише заданий текст на табличках, що встановлюються. Після активації тексту, написаного на першій табличці, буде повторюватися на всіх наступних.", - "description.wurst.hack.autosoup": "Автоматично їсть суп, коли мало здоров'я.\n\n§lУвага:§r Цей чит ігнорує голод і припускає, що суп відновить здоров'я безпосередньо. Якщо на сервері такого немає, то використовуйте AutoEat.", - "description.wurst.hack.autosprint": "Автоматично включає біг.", - "description.wurst.hack.autosteal": "Автоматично забирає все із скринь та шалкерів, які ви відкриваєте.", - "description.wurst.hack.autoswim": "Автоматично включає анімацію швидкого плавання.", - "description.wurst.hack.autoswitch": "Весь час перемикає слоти на руці.\n\n§lПІДКАЗКА:§r Можна використовувати це з BuildRandom, коли у вас в хотбарі багато різнокольорової вовни або бетону.", - "description.wurst.hack.autosword": "Автоматичне використання найкращої зброї для атаки.\nПорада: Це гарний додаток до Killaura.", - "description.wurst.hack.autotool": "Автоматично екіпірує відповідний інструмент із хотбару, коли ви намагаєтеся зламати блок.", - "description.wurst.hack.autototem": "Автоматично переміщує тотеми безсмертя у другу руку.", - "description.wurst.hack.autowalk": "Примушує вас постійно йти.", - "description.wurst.hack.basefinder": "Шукає основи гравців за допомогою пошуку рукотворних блоків.\nБлоки, які ця функція знаходить, будуть підсвічені вибраним кольором.\nГарний інструмент для пошуку прихованих баз гільдій.", - "description.wurst.hack.blink": "Припиняє всі рухи поки що включений.", - "description.wurst.hack.bonemealaura": "Автоматично використовує кісткове борошно на рослинах.\nПозначте меню, на яких типах рослин використовувати.", - "description.wurst.hack.bowaimbot": "Автоматично цілиться із луку або арбалета.", - "description.wurst.hack.buildrandom": "Ставить навколо блоків у випадковому порядку.", - "description.wurst.hack.bunnyhop": "Примушує вас постійно стрибати.", - "description.wurst.hack.cameranoclip": "Дозволяє камеру від 3-ї особи пройти через стіни.", - "description.wurst.hack.cavefinder": "Допомагає знайти печери, підсвічуючи їх вибраним кольором.", - "description.wurst.hack.chattranslator": "Всі вхідні повідомлення в чаті будуть перекладатися Google перекладачем.", - "description.wurst.hack.chestesp": "Підсвічує вибраним кольором скрині поблизу.", - "description.wurst.hack.clickaura": "Автоматично атакує найближчу сутність, коли ви натискаєте ЛКМ.\n\n§c§lУВАГА:§r ClickAura'и звичайно виглядають більш підозріло, ніж Killaura'и і легше виявляються плагінами. Краще використовувати Killaura або TriggerBot.", - "description.wurst.hack.clickgui": "Інтерфейс із панелями.", - "description.wurst.hack.crashchest": "Створює скриню, яка банить того, у кого буде занадто багато копій такої скрині в інвентарі. §c§lУВАГА:§r §cЦе необоротно. Використовуйте з обережністю!§r\n\nЯкщо замість купу таких копій засунути в скриню, то будь-хто її відкриє вилетить із сервера (не назавжди).", - "description.wurst.hack.creativeflight": "Дозволяє літати як у креативі.\n\n§c§lУВАГА:§r Ви все одно будете отримувати урон від падіння, якщо не увімкніть NoFall.", - "description.wurst.hack.criticals": "Всі ваші удари тепер будуть з критами, ніби ви щоразу стрибали.", - "description.wurst.hack.crystalaura": "Автоматично ставить (якщо прийнято) і підриває кристали, щоб убити сутності навколо.", - "description.wurst.hack.derp": "Крутить головою у випадковому напрямку.\nВидно лише іншим гравцям.", - "description.wurst.hack.dolphin": "Примушує вас автоматично спливати.\n(як дельфін)", - "description.wurst.hack.excavator": "Автоматично викопує всі блоки у вибраній області.", - "description.wurst.hack.extraelytra": "Полегшує використання Елітри.", - "description.wurst.hack.fancychat": "Замінює звичайні букви на зламані. Можна використовувати для обхіду мат-фільтра на деяких серверах.\nНе працює на серверах, на яких заблоковано символи Юнікоду.", - "description.wurst.hack.fastbreak": "Дозволяє ламати блоки швидше.\nПорада: Добре поєднується з Nuker.", - "description.wurst.hack.fastladder": "Дозволяє забиратися сходами швидше.", - "description.wurst.hack.fastplace": "Дозволяє ставити блоки в 5 разів швидше.\nПорада: Може прискорити AutoBuild.", - "description.wurst.hack.feedaura": "Автоматично годує тварин довкола.", - "description.wurst.hack.fightbot": "Бот автоматично ходить і вбиває будь-що.\nМоже бути корисним на моб-арені.", - "description.wurst.hack.fish": "Відключає тяжіння під водою, можна плавати, як риба.", - "description.wurst.hack.flight": "Дозволяє вам літати.\n\n§c§lУВАГА:§r Ви отримаєте шкоду від падіння якщо неїте NoFall.", - "description.wurst.hack.follow": "Бот який слідує за найближчою сутністю.\nДуже настирливо.\n\nВикористовуйте .follow, щоб слідувати за кимось конкретним.", - "description.wurst.hack.forceop": "Перебирає паролі AuthMe.\nМожна спробувати підібрати пароль адміну :).", - "description.wurst.hack.freecam": "Дозволяє переміщати камеру, не рухаючи персонажа.", - "description.wurst.hack.fullbright": "Дозволяє бачити у темряві.", - "description.wurst.hack.glide": "Уповільнює падіння.\n\n§c§lУВАГА:§r Ви все одно отримувати урон від падіння якщо не використовуєте NoFall.", - "description.wurst.hack.handnoclip": "Дозволяє взаємодіяти з деякими блоками через стіни.", - "description.wurst.hack.headroll": "Примушує вас постійно кивати.\nВидно лише іншим гравцям.", - "description.wurst.hack.healthtags": "Показує здоров'я гравців біля ніку.", - "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.", - "description.wurst.setting.invwalk.allow_other": "Дозволяє пересуватися, поки відкриті інші екрани в грі (наприклад, скриня, кінь, торгівля селянами), якщо на екрані немає текстового поля.", - "description.wurst.hack.itemesp": "Підсвічує речі, що лежать.", - "description.wurst.hack.itemgenerator": "Створює випадкові речі та викидає їх.\n§oПрацює тільки в креативі.§r", - "description.wurst.hack.jesus": "Дозволяє ходити по воді.\nБлизько двох тисяч років тому ним користувався Ісус.", - "description.wurst.hack.jetpack": "Дозволяє літати наче з реактивним ранцем.\n\n§c§lУВАГА:§r Ви отримаєте урон від падіння, якщо не увімкніть NoFall.", - "description.wurst.hack.kaboom": "Ламають блоки навколо, ніби стався вибух.\nЦе може бути набагато швидше за Nuker'а якщо на сервері немає NoCheat+ Найкраще працює зі швидкими інструментами та слабкими блоками.\nПримітка: Насправді це ніякий не вибух.", - "description.wurst.hack.killauralegit": "Повільніша Killaura яку важче виявити\nНе потрібна на звичайних серверах із простим NoCheat+!", - "description.wurst.hack.killaura": "Автоматично атакує сутності довкола.", - "description.wurst.hack.killpotion": "Створює зілля вбиває практично будь-кого, навіть тих хто в креативі. Не працює на нежиті, бо вони мертві лол.\n\nДля роботи потрібен креатив.", - "description.wurst.hack.liquids": "Дозволяє ставити блоки прямо на рідині.", - "description.wurst.hack.lsd": "Провокує тяжкі галюцинації.", - "description.wurst.hack.masstpa": "Надсилає запит на телепортацію всім гравцям.", - "description.wurst.hack.mileycyrus": "Примушує вас тверкати.", - "description.wurst.hack.mobesp": "Підсвічує мобів знову.", - "description.wurst.hack.mobspawnesp": "Показує місця, у яких можуть народитися моби.\n§eжовтим§r - моби можуть народитися вночі\n§cчервоним§r - моби можуть народиться коли завгодно", - "description.wurst.hack.multiaura": "Швидша Killaura, яка атакує відразу кілька сутностей одночасно.", - "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. Протестовано на Vanilla, 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": "Дозволяє встановити погоду, час дня та фазу місяця. Тільки на вашому боці, на сервері нічого не зміниться.", - "description.wurst.hack.noweb": "Павутина більше не сповільнюватиме вас.", - "description.wurst.hack.nuker": "Автоматично ламає блоки довкола.", - "description.wurst.hack.nukerlegit": "Повільніша версія Nuker яка обходить будь-який античит.\nНе потрібна на звичайних серверах із загальним NoCheat+!", - "description.wurst.hack.openwateresp": "Показує чи рибаєте ви у 'відкритій воді' і малює область лову риби.", - "description.wurst.hack.overlay": "Додає анімацію до руйнування блоку.", - "description.wurst.hack.panic": "Миттєво вимикає всі чити.\nОбережніше з цим!", - "description.wurst.hack.parkour": "Примушує вас автоматично стрибати після досягнення краю блоку.\nКорисно для паркурів та пагонів.", - "description.wurst.hack.playeresp": "Підсвічує гравців.\nДрузів буде підсвічувати синім.", - "description.wurst.hack.portalgui": "Дозволяє відкривати інвентар та чат у порталах.", - "description.wurst.hack.potionsaver": "Заморожує дію всіх ефектів, поки ви стоїте на місці.", - "description.wurst.hack.prophuntesp": "Дозволяє відрізняти несправжні блоки в Prophunt.\nЗроблено для Mineplex Prophunt. Може працювати на інших серверах.", - "description.wurst.hack.protect": "Бот який слідує за найближчу сутність і захищає її від інших. Використовуйте .protect, щоб захищати когось конкретного.", - "description.wurst.hack.radar": "Радар, що відображає сутності довкола.\n§cчервоним§r - гравців\n§6оранжевим§r - монстром\n§aзеленим§r - тварин\n§7сірим§r - інших", - "description.wurst.hack.rainbowui": "§cР§aо§9б§cи§aт§9ь §cу§aс§9е §cр§aі§9з§cн§aо§9к§cо§aл§9ь§cо§ар§9о§cв§aи§9м.", - "description.wurst.hack.reach": "Дозволяє дотягуватися далі.", - "description.wurst.hack.remoteview": "Дозволяє дивитися від лиця іншої сутності чи гравця.\nВикористовуйте .rv щоб подивитися на світ очима когось конкретного.", - "description.wurst.hack.safewalk": "Не дає вам впасти із краю блока.", - "description.wurst.hack.scaffoldwalk": "Автоматично ставить блоки під ноги.", - "description.wurst.hack.search": "Допомагає знайти задані блоки, підсвічуючи їх усіма кольорами веселки.", - "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.speednuker": "Швидша версія Nuker яка не буде працювати з NoCheat+.", - "description.wurst.hack.spider": "Дозволяє підніматися по стінах як павучок.", - "description.wurst.hack.step": "Дозволяє крокувати на блоки як по сходах.", - "description.wurst.hack.throw": "Використовує річ кілька разів. Може бути використаний для швидкого кидання сніжків або яєць, відроджувати мобів, ставити вагонетки і т.д. у величезних кількостях.\n\nЦе може створити на сервері велике навантаження і навіть його крашити.", - "description.wurst.hack.tillaura": "Автоматично орає землю навколо.\nНе плутайте з Killaura.", - "description.wurst.hack.timer": "Змінює швидкість практично всього.", - "description.wurst.hack.tired": "Робить вас на вигляд яким був Alexander у квітні 2015 року.\nВидно тільки іншим гравцям.", - "description.wurst.hack.toomanyhax": "Вимикає непотрібні функції.\nДозволяє бути впевненим, що ви не отримаєте бан.\nДля тих, хто хоче почитерити \"зовсім трохи\".\n\nВикористовуйте §6.toomanyhax§r, щоб вибрати які функції відключити.\nНапишіть §6.help toomanyhax§r для більш детальної інформації.", - "description.wurst.hack.tp-aura": "Автоматично атакує найближчу сутність, при цьому телепортуючись навколо неї.", - "description.wurst.hack.trajectories": "Передбачає траєкторію польоту стріл або речей, що кидаються.", - "description.wurst.hack.treebot": "Експериментальна функція, бот, який ходить та автоматично вирубує дерева.\nПоки що обмежений звичайними маленькими деревами.", - "description.wurst.hack.triggerbot": "Автоматично атакує суть, на яку ви дивитеся.", - "description.wurst.hack.trollpotion": "Створює зілля з безліччю неприємних ефектів. Для роботи потрібний креатив.", - "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Якщо §ви §відправляєте §чат-повідомлення §з §підписами, §ваш §саккаунт §в §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": "ДОЗВОЛЕНО" -} \ No newline at end of file +{ + "description.wurst.hack.anchoraura": "Автоматично ставить (якщо прийнято), заряджає і підриває якоря відродження, щоб убити сутності навколо.", + "description.wurst.hack.antiafk": "Ходить у випадковому напрямку, щоб сервер не знав, що ви є АФК.", + "description.wurst.hack.antiblind": "Запобігає ефекту сліпоти та темряви.\nНесумісний з OptiFine.", + "description.wurst.hack.anticactus": "Захищає вас від урону від зіткнення з кактусами.", + "description.wurst.hack.antiknockback": "Запобігає відкиданням при отриманні урону.", + "description.wurst.hack.antispam": "Блокує спам у чаті, натомість додаючи кількість повторень біля повідомлень.", + "description.wurst.hack.antiwaterpush": "Вас більше не зносить течією води.", + "description.wurst.hack.antiwobble": "Вимикає похитування екрана від порталу та ефекту нудоти.", + "description.wurst.hack.arrowdmg": "Суттєво збільшує ушкодження від стріл, але також споживає багато голоду та знижує точність.\n\nНе працює з арбалетами і, здається, виправлено на серверах Paper.", + "description.wurst.setting.arrowdmg.packets": "Кількість пакетів для відправки.\nБільше пакетів = більша шкода.", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "Коли ввімкнено, тризуби летять набагато далі. Здається, не впливає на пошкодження чи Riptide.\n\n§c§lПОПЕРЕДЖЕННЯ:§r Ви можете легко втратити свій тризуб, увімкнувши цю опцію!", + "description.wurst.hack.autoarmor": "Автоматично екіпірує найкращу броню.", + "description.wurst.hack.autobuild": "Автоматично будує об'єкти.\nПоставте блок, щоб почати будівництво.", + "description.wurst.hack.autodrop": "Автоматично викидає непотрібні речі.", + "description.wurst.hack.autoleave": "Автоматичний вихід із сервера, коли залишилося мало здоров'я.", + "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.take_items_from": "Де AutoEat має шукати їжу.", + "description.wurst.setting.autoeat.eat_while_walking": "Уповільнює, не рекомендується.", + "description.wurst.setting.autoeat.allow_hunger": "Гнила м’якоть застосовує нешкідливий ефект «голоду».\nВона безпечна для вживання в їжу та корисна як їжа для невідкладної допомоги.", + "description.wurst.setting.autoeat.allow_poison": "Отруйна їжа з часом завдає шкоди.\nНе рекомендується.", + "description.wurst.setting.autoeat.allow_chorus": "З’їдаючи фрукти хору, ви телепортуєтеся у випадкове місце.\nНе рекомендується.", + "description.wurst.hack.autofarm": "Автоматично збирає та садить урожай.\nПрацює з пшеницею, морквою, картоплею, буряком, гарбузами, кавунами, кактусами, тростиною, водоростями, бамбуком, пекельним наростом, та какао-бобами.", + "description.wurst.hack.autofish": "Автоматично ловить рибу використовуючи вашу найкращу вудку. Якщо під час риболовлі знайдеться вудка ще краще – переключиться на неї.", + "description.wurst.hack.automine": "Автоматично копає блоки на погляд.", + "description.wurst.hack.autopotion": "Автоматично кидає вибухові зілля лікування, коли у вас мало здоров'я.", + "description.wurst.hack.autoreconnect": "Автоматично перепідключається, коли вас кикає з сервера.", + "description.wurst.hack.autorespawn": "Автоматично відроджує вас після смерті.", + "description.wurst.hack.autosign": "Моментально пише заданий текст на табличках, що встановлюються. Після активації тексту, написаного на першій табличці, буде повторюватися на всіх наступних.", + "description.wurst.hack.autosoup": "Автоматично їсть суп, коли мало здоров'я.\n\n§lУвага:§r Цей чит ігнорує голод і припускає, що суп відновить здоров'я безпосередньо. Якщо на сервері такого немає, то використовуйте AutoEat.", + "description.wurst.hack.autosprint": "Автоматично включає біг.", + "description.wurst.hack.autosteal": "Автоматично забирає все із скринь та шалкерів, які ви відкриваєте.", + "description.wurst.hack.autoswim": "Автоматично включає анімацію швидкого плавання.", + "description.wurst.hack.autoswitch": "Весь час перемикає слоти на руці.\n\n§lПІДКАЗКА:§r Можна використовувати це з BuildRandom, коли у вас в хотбарі багато різнокольорової вовни або бетону.", + "description.wurst.hack.autosword": "Автоматичне використання найкращої зброї для атаки.\nПорада: Це гарний додаток до Killaura.", + "description.wurst.hack.autotool": "Автоматично екіпірує відповідний інструмент із хотбару, коли ви намагаєтеся зламати блок.", + "description.wurst.hack.autototem": "Автоматично переміщує тотеми безсмертя у другу руку.", + "description.wurst.hack.autowalk": "Примушує вас постійно йти.", + "description.wurst.hack.basefinder": "Шукає основи гравців за допомогою пошуку рукотворних блоків.\nБлоки, які ця функція знаходить, будуть підсвічені вибраним кольором.\nГарний інструмент для пошуку прихованих баз гільдій.", + "description.wurst.hack.blink": "Припиняє всі рухи поки що включений.", + "description.wurst.hack.bonemealaura": "Автоматично використовує кісткове борошно на рослинах.\nПозначте меню, на яких типах рослин використовувати.", + "description.wurst.hack.bowaimbot": "Автоматично цілиться із луку або арбалета.", + "description.wurst.hack.buildrandom": "Ставить навколо блоків у випадковому порядку.", + "description.wurst.hack.bunnyhop": "Примушує вас постійно стрибати.", + "description.wurst.hack.cameranoclip": "Дозволяє камеру від 3-ї особи пройти через стіни.", + "description.wurst.hack.cavefinder": "Допомагає знайти печери, підсвічуючи їх вибраним кольором.", + "description.wurst.hack.chattranslator": "Всі вхідні повідомлення в чаті будуть перекладатися Google перекладачем.", + "description.wurst.hack.chestesp": "Підсвічує вибраним кольором скрині поблизу.", + "description.wurst.hack.clickaura": "Автоматично атакує найближчу сутність, коли ви натискаєте ЛКМ.\n\n§c§lУВАГА:§r ClickAura'и звичайно виглядають більш підозріло, ніж Killaura'и і легше виявляються плагінами. Краще використовувати Killaura або TriggerBot.", + "description.wurst.hack.clickgui": "Інтерфейс із панелями.", + "description.wurst.hack.crashchest": "Створює скриню, яка банить того, у кого буде занадто багато копій такої скрині в інвентарі. §c§lУВАГА:§r §cЦе необоротно. Використовуйте з обережністю!§r\n\nЯкщо замість купу таких копій засунути в скриню, то будь-хто її відкриє вилетить із сервера (не назавжди).", + "description.wurst.hack.creativeflight": "Дозволяє літати як у креативі.\n\n§c§lУВАГА:§r Ви все одно будете отримувати урон від падіння, якщо не увімкніть NoFall.", + "description.wurst.hack.criticals": "Всі ваші удари тепер будуть з критами, ніби ви щоразу стрибали.", + "description.wurst.hack.crystalaura": "Автоматично ставить (якщо прийнято) і підриває кристали, щоб убити сутності навколо.", + "description.wurst.hack.derp": "Крутить головою у випадковому напрямку.\nВидно лише іншим гравцям.", + "description.wurst.hack.dolphin": "Примушує вас автоматично спливати.\n(як дельфін)", + "description.wurst.hack.excavator": "Автоматично викопує всі блоки у вибраній області.", + "description.wurst.hack.extraelytra": "Полегшує використання Елітри.", + "description.wurst.hack.fancychat": "Замінює звичайні букви на зламані. Можна використовувати для обхіду мат-фільтра на деяких серверах.\nНе працює на серверах, на яких заблоковано символи Юнікоду.", + "description.wurst.hack.fastbreak": "Дозволяє ламати блоки швидше.\nПорада: Добре поєднується з Nuker.", + "description.wurst.hack.fastladder": "Дозволяє забиратися сходами швидше.", + "description.wurst.hack.fastplace": "Дозволяє ставити блоки в 5 разів швидше.\nПорада: Може прискорити AutoBuild.", + "description.wurst.hack.feedaura": "Автоматично годує тварин довкола.", + "description.wurst.hack.fightbot": "Бот автоматично ходить і вбиває будь-що.\nМоже бути корисним на моб-арені.", + "description.wurst.hack.fish": "Відключає тяжіння під водою, можна плавати, як риба.", + "description.wurst.hack.flight": "Дозволяє вам літати.\n\n§c§lУВАГА:§r Ви отримаєте шкоду від падіння якщо неїте NoFall.", + "description.wurst.hack.follow": "Бот який слідує за найближчою сутністю.\nДуже настирливо.\n\nВикористовуйте .follow, щоб слідувати за кимось конкретним.", + "description.wurst.hack.forceop": "Перебирає паролі AuthMe.\nМожна спробувати підібрати пароль адміну :).", + "description.wurst.hack.freecam": "Дозволяє переміщати камеру, не рухаючи персонажа.", + "description.wurst.hack.fullbright": "Дозволяє бачити у темряві.", + "description.wurst.hack.glide": "Уповільнює падіння.\n\n§c§lУВАГА:§r Ви все одно отримувати урон від падіння якщо не використовуєте NoFall.", + "description.wurst.hack.handnoclip": "Дозволяє взаємодіяти з деякими блоками через стіни.", + "description.wurst.hack.headroll": "Примушує вас постійно кивати.\nВидно лише іншим гравцям.", + "description.wurst.hack.healthtags": "Показує здоров'я гравців біля ніку.", + "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.", + "description.wurst.setting.invwalk.allow_other": "Дозволяє пересуватися, поки відкриті інші екрани в грі (наприклад, скриня, кінь, торгівля селянами), якщо на екрані немає текстового поля.", + "description.wurst.hack.itemesp": "Підсвічує речі, що лежать.", + "description.wurst.hack.itemgenerator": "Створює випадкові речі та викидає їх.\n§oПрацює тільки в креативі.§r", + "description.wurst.hack.jesus": "Дозволяє ходити по воді.\nБлизько двох тисяч років тому ним користувався Ісус.", + "description.wurst.hack.jetpack": "Дозволяє літати наче з реактивним ранцем.\n\n§c§lУВАГА:§r Ви отримаєте урон від падіння, якщо не увімкніть NoFall.", + "description.wurst.hack.kaboom": "Ламають блоки навколо, ніби стався вибух.\nЦе може бути набагато швидше за Nuker'а якщо на сервері немає NoCheat+ Найкраще працює зі швидкими інструментами та слабкими блоками.\nПримітка: Насправді це ніякий не вибух.", + "description.wurst.hack.killauralegit": "Повільніша Killaura яку важче виявити\nНе потрібна на звичайних серверах із простим NoCheat+!", + "description.wurst.hack.killaura": "Автоматично атакує сутності довкола.", + "description.wurst.hack.killpotion": "Створює зілля вбиває практично будь-кого, навіть тих хто в креативі. Не працює на нежиті, бо вони мертві лол.\n\nДля роботи потрібен креатив.", + "description.wurst.hack.liquids": "Дозволяє ставити блоки прямо на рідині.", + "description.wurst.hack.lsd": "Провокує тяжкі галюцинації.", + "description.wurst.hack.masstpa": "Надсилає запит на телепортацію всім гравцям.", + "description.wurst.hack.mileycyrus": "Примушує вас тверкати.", + "description.wurst.hack.mobesp": "Підсвічує мобів знову.", + "description.wurst.hack.mobspawnesp": "Показує місця, у яких можуть народитися моби.\n§eжовтим§r - моби можуть народитися вночі\n§cчервоним§r - моби можуть народиться коли завгодно", + "description.wurst.hack.multiaura": "Швидша Killaura, яка атакує відразу кілька сутностей одночасно.", + "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. Протестовано на Vanilla, 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": "Дозволяє встановити погоду, час дня та фазу місяця. Тільки на вашому боці, на сервері нічого не зміниться.", + "description.wurst.hack.noweb": "Павутина більше не сповільнюватиме вас.", + "description.wurst.hack.nuker": "Автоматично ламає блоки довкола.", + "description.wurst.hack.nukerlegit": "Повільніша версія Nuker яка обходить будь-який античит.\nНе потрібна на звичайних серверах із загальним NoCheat+!", + "description.wurst.hack.openwateresp": "Показує чи рибаєте ви у 'відкритій воді' і малює область лову риби.", + "description.wurst.hack.overlay": "Додає анімацію до руйнування блоку.", + "description.wurst.hack.panic": "Миттєво вимикає всі чити.\nОбережніше з цим!", + "description.wurst.hack.parkour": "Примушує вас автоматично стрибати після досягнення краю блоку.\nКорисно для паркурів та пагонів.", + "description.wurst.hack.playeresp": "Підсвічує гравців.\nДрузів буде підсвічувати синім.", + "description.wurst.hack.portalgui": "Дозволяє відкривати інвентар та чат у порталах.", + "description.wurst.hack.potionsaver": "Заморожує дію всіх ефектів, поки ви стоїте на місці.", + "description.wurst.hack.prophuntesp": "Дозволяє відрізняти несправжні блоки в Prophunt.\nЗроблено для Mineplex Prophunt. Може працювати на інших серверах.", + "description.wurst.hack.protect": "Бот який слідує за найближчу сутність і захищає її від інших. Використовуйте .protect, щоб захищати когось конкретного.", + "description.wurst.hack.radar": "Радар, що відображає сутності довкола.\n§cчервоним§r - гравців\n§6оранжевим§r - монстром\n§aзеленим§r - тварин\n§7сірим§r - інших", + "description.wurst.hack.rainbowui": "§cР§aо§9б§cи§aт§9ь §cу§aс§9е §cр§aі§9з§cн§aо§9к§cо§aл§9ь§cо§ар§9о§cв§aи§9м.", + "description.wurst.hack.reach": "Дозволяє дотягуватися далі.", + "description.wurst.hack.remoteview": "Дозволяє дивитися від лиця іншої сутності чи гравця.\nВикористовуйте .rv щоб подивитися на світ очима когось конкретного.", + "description.wurst.hack.safewalk": "Не дає вам впасти із краю блока.", + "description.wurst.hack.scaffoldwalk": "Автоматично ставить блоки під ноги.", + "description.wurst.hack.search": "Допомагає знайти задані блоки, підсвічуючи їх усіма кольорами веселки.", + "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.speednuker": "Швидша версія Nuker яка не буде працювати з NoCheat+.", + "description.wurst.hack.spider": "Дозволяє підніматися по стінах як павучок.", + "description.wurst.hack.step": "Дозволяє крокувати на блоки як по сходах.", + "description.wurst.hack.throw": "Використовує річ кілька разів. Може бути використаний для швидкого кидання сніжків або яєць, відроджувати мобів, ставити вагонетки і т.д. у величезних кількостях.\n\nЦе може створити на сервері велике навантаження і навіть його крашити.", + "description.wurst.hack.tillaura": "Автоматично орає землю навколо.\nНе плутайте з Killaura.", + "description.wurst.hack.timer": "Змінює швидкість практично всього.", + "description.wurst.hack.tired": "Робить вас на вигляд яким був Alexander у квітні 2015 року.\nВидно тільки іншим гравцям.", + "description.wurst.hack.toomanyhax": "Вимикає непотрібні функції.\nДозволяє бути впевненим, що ви не отримаєте бан.\nДля тих, хто хоче почитерити \"зовсім трохи\".\n\nВикористовуйте §6.toomanyhax§r, щоб вибрати які функції відключити.\nНапишіть §6.help toomanyhax§r для більш детальної інформації.", + "description.wurst.hack.tp-aura": "Автоматично атакує найближчу сутність, при цьому телепортуючись навколо неї.", + "description.wurst.hack.trajectories": "Передбачає траєкторію польоту стріл або речей, що кидаються.", + "description.wurst.hack.treebot": "Експериментальна функція, бот, який ходить та автоматично вирубує дерева.\nПоки що обмежений звичайними маленькими деревами.", + "description.wurst.hack.triggerbot": "Автоматично атакує суть, на яку ви дивитеся.", + "description.wurst.hack.trollpotion": "Створює зілля з безліччю неприємних ефектів. Для роботи потрібний креатив.", + "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Якщо §ви §відправляєте §чат-повідомлення §з §підписами, §ваш §саккаунт §в §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": "ДОЗВОЛЕНО" +} diff --git a/src/main/resources/assets/wurst/lang/zh_cn.json b/src/main/resources/assets/wurst/lang/zh_cn.json index c887ebeb..650bd2bb 100644 --- a/src/main/resources/assets/wurst/lang/zh_cn.json +++ b/src/main/resources/assets/wurst/lang/zh_cn.json @@ -5,7 +5,7 @@ "description.wurst.hack.antiafk": "随机走动,用于避免服务器挂机检测。", "description.wurst.hack.antiblind": "防止失明和黑暗效果。\n与 OptiFine 不兼容。", "description.wurst.hack.anticactus": "保护你免受仙人掌伤害。", - "description.wurst.hack.antientitypush": "保护你不会被玩家和其他生物推挤。", + "description.wurst.hack.antientitypush": "保护你不会被玩家和其他生物推挤。", "description.wurst.hack.antihunger": "在你走路时减缓你的饥饿状态。", "description.wurst.hack.antiknockback": "保护你不被其他生物或玩家推动和用剑击退。", "description.wurst.hack.antispam": "将重复的刷屏改为计数器显示。", diff --git a/src/main/resources/assets/wurst/lang/zh_hk.json b/src/main/resources/assets/wurst/lang/zh_hk.json index 5f7c8971..519597bc 100644 --- a/src/main/resources/assets/wurst/lang/zh_hk.json +++ b/src/main/resources/assets/wurst/lang/zh_hk.json @@ -165,4 +165,4 @@ "gui.wurst.altmanager.empty.title": "你嘅帳號列表係空嘅。", "gui.wurst.altmanager.empty.message": "你想唔想要啲隨機嘅帳號嚟開始?", "key.wurst.zoom": "縮放" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/wurst/lang/zh_tw.json b/src/main/resources/assets/wurst/lang/zh_tw.json index 543c298c..a85991ca 100644 --- a/src/main/resources/assets/wurst/lang/zh_tw.json +++ b/src/main/resources/assets/wurst/lang/zh_tw.json @@ -1,187 +1,187 @@ -{ - "description.wurst.hack.airplace": "允許你在半空中放置方塊。", - "description.wurst.hack.anchoraura": "自動放置(可選),充能並引爆重生錨並擊殺你附近的實體。", - "description.wurst.hack.antiafk": "隨機走動,用於避免伺服器掛機檢測。", - "description.wurst.hack.antiblind": "防止失明和黑暗效果。\n與 OptiFine不相容。", - "description.wurst.hack.anticactus": "保護你免受仙人掌傷害。", - "description.wurst.hack.antihunger": "走路時減緩你的飢餓度。", - "description.wurst.hack.antiknockback": "保護你不會被其他生物或玩家推動和用劍擊退。", - "description.wurst.hack.antispam": "預防存在的重複刷屏,改為用計數器顯示。", - "description.wurst.hack.antiwaterpush": "防止你被水流推動。", - "description.wurst.hack.antiwobble": "關閉因反胃和傳送門引起的搖晃效果。", - "description.wurst.hack.arrowdmg": "大幅增加箭的傷害,但也會消耗大量飢餓值並降低準確性。\n\n不適用於弩,並且似乎已在紙質服務器上進行了修補。", - "description.wurst.setting.arrowdmg.packets": "要發送的數據包數量。\n更多數據包 = 更高的傷害。", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "啟用後,三叉戟飛得更遠。 似乎不會影響傷害或激流。\n\n§c§l警告:§r 啟用此選項很容易丟失三叉戟!", - "description.wurst.hack.autoarmor": "自動管理你的盔甲。", - "description.wurst.hack.autobuild": "自動建築東西。\n放一個方塊就開始自動建造。", - "description.wurst.hack.autodrop": "自動丟棄你不想要的物品(有預設)。", - "description.wurst.hack.autoleave": "如果你的血量低於設定值,將會自動退出伺服器。", - "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.take_items_from": "AutoEat 應該在哪裡尋找食物。", - "description.wurst.setting.autoeat.eat_while_walking": "減慢速度,不推薦。", - "description.wurst.setting.autoeat.allow_hunger": "腐肉具有無害的“飢餓”效果。\n可安全食用,可用作緊急食品。", - "description.wurst.setting.autoeat.allow_poison": "有毒食物會隨著時間的推移造成傷害。\n不推薦。", - "description.wurst.setting.autoeat.allow_chorus": "吃紫頌果會將你傳送到一個隨機位置。\n不推薦。", - "description.wurst.hack.autofarm": "自動收穫與種植農作物。\n有效作物為小麥、胡蘿蔔、馬鈴薯、紅菜頭根、南瓜、西瓜、仙人掌、甘蔗、海帶、竹子、地狱疙瘩和可可豆。", - "description.wurst.hack.autofish": "自動使用最好的魚竿釣魚,如果在此期間獲得了更好的魚竿,就會自動切換到它。", - "description.wurst.hack.automine": "自動挖掘你眼前所指的方塊。", - "description.wurst.hack.autopotion": "當你的生命值低於設定值時,自動扔一瓶噴濺型瞬間恢復藥水。", - "description.wurst.hack.autoreconnect": "當你被伺服器踢出時候,自動重連。", - "description.wurst.hack.autorespawn": "當你死亡的時候自動重生。", - "description.wurst.hack.autosign": "立即在每個牌子上寫下任何你想要的文字,當此功能啟動的時候,你只需要很普通的在第一個牌子上,寫你想要的文字,之後接下來所有牌子都跟上一個一樣。", - "description.wurst.hack.autosoup": "當你生命值低下的時候自動喝蘑菇煲。\n\n§l注意:§r這個功能是忽視“饑餓值”,因為特定伺服器小遊戲內(如Hypixel),喝湯是直接補充生命,而不是回復飽腹值。如果你正在玩的伺服器沒有這個功能,請使用AutoEat功能而不是這個。", - "description.wurst.hack.autosprint": "讓你自動進入疾跑。", - "description.wurst.hack.autosteal": "你所打開的箱子以及界伏盒會自動盜竊裡面所有物品。", - "description.wurst.hack.autoswim": "當你在水中會自動切換泳姿狀態。", - "description.wurst.hack.autoswitch": "按順序自動切換快捷欄位。\n\n§l進階提示:§r倘若在你的快捷欄有不同顏色的羊毛以及,不同顏色的混粘土,利用這個功能與BuildRandom同時使用會出現意想不到的效果。", - "description.wurst.hack.autosword": "當你攻擊實體的時候,自動使用快捷欄中最好的武器。\n提示:在使用Killaura功能時候,最好開啟。", - "description.wurst.hack.autotool": "當你破壞方塊的時候會在你的物品快捷欄中切換成最優的破壞工具。", - "description.wurst.hack.autototem": "自動將不死圖騰移動到副手上。", - "description.wurst.hack.autowalk": "讓你自動走路,不需要自己按著W鍵。", - "description.wurst.hack.basefinder": "通過尋找人為建造的方塊以找到玩家的基地\n假如方塊被找到將會高亮以你所選的顏色。\n建議用於尋找幫派的基地。", - "description.wurst.hack.blink": "暫停所有動作更新,並在關閉時繼續。", - "description.wurst.hack.boatfly": "允許您乘船和其他車輛飛行。\n按跑步鍵可以更快地下降。", - "description.wurst.hack.bonemealaura": "在指定的作物上自動使用骨粉。\n使用核取方塊來指定作物。", - "description.wurst.hack.bowaimbot": "當你用弓或者弩時自動瞄準所設定的實體。", - "description.wurst.hack.buildrandom": "在你的附近隨機放置方塊。", - "description.wurst.hack.bunnyhop": "讓你自動跳躍,但不能做到像CSGO一樣。", - "description.wurst.hack.cameradistance": "允許你在第三人稱中改變鏡頭距離。", - "description.wurst.hack.cameranoclip": "允許第三人稱攝像機忽視牆體碰撞直接把視角穿過去。", - "description.wurst.hack.cavefinder": "幫助你找到洞穴並以你所選的顏色將他們高亮。", - "description.wurst.hack.chattranslator": "從聊天欄的資訊利用Google翻譯成你所指定的語言。", - "description.wurst.hack.chestesp": "按你所設定的顏色高亮附近的箱子、潜影盒、陷阱箱、末影箱。", - "description.wurst.hack.clickaura": "當瞄準的時候。自動攻擊你附近有效的實體\n\n§c§l警告:§r此功能通常來說比Killaura更加容易被發現且被檢測出來,這極力推薦使用Killaura或者TriggerBot作為替代。", - "description.wurst.hack.clickgui": "基於視窗的點擊式GUI(有分類)。", - "description.wurst.hack.crashchest": "生成一個容易封禁玩家的箱子,如果他們複製大量的箱子在他們背包裡面§c§l警告:§r§c這個無法撤銷。請小心使用!§r\n\n如果複製出來被放在箱子裏,無論誰打開箱子就會被踢出伺服器(只要一個)。", - "description.wurst.hack.creativeflight": "可以跟創造模式的飛行沒啥兩樣(即按兩下空格起飛)。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", - "description.wurst.hack.criticals": "將你的攻擊全變為暴擊。", - "description.wurst.hack.crystalaura": "自動放置(可選)並引爆末影水晶殺死你附近的實體。", - "description.wurst.hack.derp": "讓你的頭瘋狂到處隨機轉動。\n僅限其他玩家可視。", - "description.wurst.hack.dolphin": "讓你在水中浮起來。\n(就像海豚一樣)", - "description.wurst.hack.excavator": "自動破壞所選區域內的所有方塊。", - "description.wurst.hack.extraelytra": "讓你的鞘翅更加容易使用。", - "description.wurst.hack.fancychat": "替換ASCII字元在發送消息時,變成更好的Unicode字元。可以用於繞過英文單詞字元限制在一些伺服器上。\n但對於那些禁用Unicode字元的伺服器不起作用。", - "description.wurst.hack.fastbreak": "允許你更快的破壞方塊。\n提示:可以和Nuker功能配合利用。", - "description.wurst.hack.fastladder": "允許你爬梯的速度加快。", - "description.wurst.hack.fastplace": "允許你正常放置方塊速度的5倍或以上。\n提示:這個能新增AutoBuild功能的速度。", - "description.wurst.hack.feedaura": "自動餵食你附近的動物。", - "description.wurst.hack.fightbot": "仿照機器人會自動跟隨並擊殺最近的實體。\n很適合刷怪區域。", - "description.wurst.hack.fish": "關閉水底的重力,所以你可以像魚一樣游泳。", - "description.wurst.hack.flight": "允許你飛天。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", - "description.wurst.hack.follow": "跟機器人一樣跟隨最近的實體。\n非常惹惱人。\n\n使用.follow指令跟隨特定的實體。", - "description.wurst.hack.forceop": "破解AuthMe登入挿件密碼。\n一般用於獲得OP。(PS:只是撞庫,跑密碼的軟件)", - "description.wurst.hack.freecam": "允許在不移動你角色的情况下自由移動角色。(靈魂出竅)", - "description.wurst.hack.fullbright": "可以在黑暗中看的一清二楚。(無限夜視)", - "description.wurst.hack.glide": "使你在下落時緩慢下降。\n\n§c§l警告:§r如果你不使用NoFall則可能會摔落致死。", - "description.wurst.hack.handnoclip": "允許你能透過牆壁觸碰到特殊的方塊。", - "description.wurst.hack.headroll": "讓你不斷點頭。\n僅限其他玩家可視。", - "description.wurst.hack.healthtags": "在玩家名字旁邊顯示血量。", - "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年前。", - "description.wurst.hack.jetpack": "模仿你好像真的有飛行背包一樣飛行。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", - "description.wurst.hack.kaboom": "像爆炸一樣破壞你附近的方塊。\n這個可能比Nuker功能破壞更快如果服務器沒有反作弊的話,使用適合的工具和破壞脆弱的方塊可以事半功倍。\n注意:這並不是真正的爆炸。", - "description.wurst.hack.killauralegit": "KillauraLegit更難被反作弊檢測。\n在正常的NoCheat+(NCP)服務器上不需要!", - "description.wurst.hack.killaura": "自動攻擊你附近的實體。", - "description.wurst.hack.killpotion": "生成一個能殺死絕大多數生物的藥水,包括創造模式的玩家,但對那些不死的生物或者已死生物無效。\n\n需要在創造模式下。", - "description.wurst.hack.liquids": "取消限制,允許你在水面上直接放置方塊。", - "description.wurst.hack.lsd": "產生和吃了雲南蘑菇一樣的漸變色暈眩效果。", - "description.wurst.hack.masstpa": "給每個人發送TPA請求。\n\n§c§l警告:§r國內服務器使用會因為Wurst判斷的是英文而導致TPA仍在繼續。", - "description.wurst.hack.mileycyrus": "類似全自動Shift蹲起。", - "description.wurst.hack.mobesp": "高亮附近的生物。", - "description.wurst.hack.mobspawnesp": "高亮那些生物可以生成的區域。\n§e黃色§r - 可以在夜間生成\n§c紅色§r - 可以在任意時候生成", - "description.wurst.hack.multiaura": "比Killaura更高級,能同一時間攻擊多個實體。", - "description.wurst.hack.nameprotect": "隱藏所有玩家的名字。", - "description.wurst.hack.nametags": "改變名字標籤大小使你可以經常可以看到他們,同時也能讓你看到那些正潜行的玩家名字標籤。", - "description.wurst.hack.navigator": "一個可供你蒐索的GUI,可以隨著時間的推移瞭解您的偏好。", - "description.wurst.hack.newchunks": "突出您周圍新生成的區塊。", - "description.wurst.hack.nobackground": "移除GUI後的暗色背景。", - "description.wurst.hack.noclip": "讓你可以自由穿越方塊。\n必須要有一個掉落的方塊在你的正上方才會啟動此功能 (例如:沙子、砂礫...)。\n\n§c§l警告:§r穿牆時將會受到傷害!", - "description.wurst.hack.nocomcrash": "利用Nocom漏洞使伺服器卡頓或崩潰。\n經測試可在Vanilla、Spigot和Fabric上工作,Paper和一些擁有特定反作弊的服務器無法使用。", - "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": "允許改變你當地用戶端所在的時間,和月亮的階段(僅在本地生效,與服務器無關)。", - "description.wurst.hack.noweb": "使你不會因為蜘蛛網而慢下來。", - "description.wurst.hack.nuker": "自動挖掘你附近的方塊。", - "description.wurst.hack.nukerlegit": "NukerLegit能够繞過所有的反作弊檢測。\n在正常的NoCheat+(NCP)服務器上不需要!", - "description.wurst.hack.openwateresp": "顯示你是否在一個“開放水域”的地方,在區域內畫一個大方塊用於計算檢測是否為開放水域。", - "description.wurst.hack.overlay": "開採一個方塊時渲染“Nuker功能”動畫。", - "description.wurst.hack.panic": "瞬間關閉所有的作弊功能。\n請小心使用!", - "description.wurst.hack.parkour": "你會自動跳躍起來,當到方塊的邊緣。\n適用於跑酷或跳和跑。", - "description.wurst.hack.playeresp": "高亮透視附近的玩家。\n如果是你的好友的話會顯示藍色框框。", - "description.wurst.hack.portalgui": "允許你在傳送門內打開GUI。", - "description.wurst.hack.potionsaver": "當你站著不動時凍結所有的藥水效果時間。", - "description.wurst.hack.prophuntesp": "在躲猫猫小遊戲中知道哪些是人扮的方塊。\n用於Mineplex服務器的Prophunt(躲猫猫),其他服務器未必凑效。", - "description.wurst.hack.protect": "使用AI模式保護最近的實體,並保護它免受其他實體的傷害。\n使用指令.protect來保護指定的實體,而不是最近的一個。", - "description.wurst.hack.radar": "生成一個雷達UI並顯示附近的實體。\n§c紅色§r - 玩家\n§6橘色§r - 怪物\n§a綠色§r - 動物\n§7灰色§r - 其他", - "description.wurst.hack.rainbowui": "§c讓§a每§9一§c樣§a都§9充§c滿§a五§9彩§c斑§a斕§9的§c樣§a子§9,\n§c包§a括§9你§c當§a前§9所§c在§aU§9I", - "description.wurst.hack.reach": "允許你碰到更遠的距離。", - "description.wurst.hack.remoteview": "允許你以另一個視角觀看世界。\n使用.rv指令來指定一個特殊的實體。", - "description.wurst.hack.safewalk": "防止你從方塊邊緣掉出。", - "description.wurst.hack.scaffoldwalk": "自動在你的脚下搭方塊。", - "description.wurst.hack.search": "幫助你找到所需要的方塊並以彩虹色的管道高亮。", - "description.wurst.hack.skinderp": "隨機切換你的皮膚。", - "description.wurst.hack.sneak": "讓你自動保持潜行行走。", - "description.wurst.hack.snowshoe": "可以讓你在細雪上行走。", - "description.wurst.hack.speedhack": "允許你以大約~2.5x或更快的速度跳躍或疾跑。\n\n§6§l警告:§r只有低於反作弊版本3.13.2才會工作且繞過,如果你不知道服務器反作弊是哪個版本。\n輸入§l/ncp version§r來查看反作弊版本。", - "description.wurst.hack.speednuker": "一個比Nuker更快的版本,但會無法繞過反作弊。", - "description.wurst.hack.spider": "像蜘蛛一樣能够爬牆。", - "description.wurst.hack.step": "允許你走上更高高度(取決於你的設定)的格子方塊。", - "description.wurst.hack.throw": "迅速丟你手中種類的物品,可以用於丟雪球、雞蛋、刷怪蛋、礦車,諸如此類。\n\n會生成大量的數量,這會產生大量的lag且可能會導致服務器崩潰。", - "description.wurst.hack.tillaura": "自動將泥土、草塊、諸如此類。轉化為耕地。\n不要和Killaura搞混。", - "description.wurst.hack.timer": "改變大部分東西的速度。", - "description.wurst.hack.tired": "讓你看起來很像2015年的Alexander。\n僅限其他玩家可視。", - "description.wurst.hack.toomanyhax": "關閉那些你並不想要使用的功能。\n讓你確保你不會不小心開啟錯誤的作弊功能導致被服務器封禁。\n這個是給那些“只想作弊一點點的用戶”。\n\n使用指令§6. toomanyhax§r來選擇哪些功能需要被遮罩。\n輸入§6. help toomanyhax§r尋求更多。", - "description.wurst.hack.tp-aura": "自動傳送到實體附近並自動攻擊他。", - "description.wurst.hack.trajectories": "預測箭和投擲物品的飛行路徑。", - "description.wurst.hack.treebot": "一個實驗性的機器人將會在樹木附近砍樹。\n現時僅限於砍小樹。", - "description.wurst.hack.triggerbot": "自動攻擊你所看的實體。", - "description.wurst.hack.trollpotion": "生成一個惹人惱怒的藥水效果。\n§o僅限創造模式。§r", - "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": "上次你嘗試登入這個,但是它不起作用。", - "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 無法在沒有權限的情況下加密或解密 Alt List。\n你可以繼續使用 AltManager,但是你新建的 Alt 都無法被存儲。\n\n完整的錯誤信息如下:\n%s", - "gui.wurst.altmanager.empty.title": "你的 Alt List 是空的。", - "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": "允許", - "key.wurst.zoom": "縮放" -} \ No newline at end of file +{ + "description.wurst.hack.airplace": "允許你在半空中放置方塊。", + "description.wurst.hack.anchoraura": "自動放置(可選),充能並引爆重生錨並擊殺你附近的實體。", + "description.wurst.hack.antiafk": "隨機走動,用於避免伺服器掛機檢測。", + "description.wurst.hack.antiblind": "防止失明和黑暗效果。\n與 OptiFine不相容。", + "description.wurst.hack.anticactus": "保護你免受仙人掌傷害。", + "description.wurst.hack.antihunger": "走路時減緩你的飢餓度。", + "description.wurst.hack.antiknockback": "保護你不會被其他生物或玩家推動和用劍擊退。", + "description.wurst.hack.antispam": "預防存在的重複刷屏,改為用計數器顯示。", + "description.wurst.hack.antiwaterpush": "防止你被水流推動。", + "description.wurst.hack.antiwobble": "關閉因反胃和傳送門引起的搖晃效果。", + "description.wurst.hack.arrowdmg": "大幅增加箭的傷害,但也會消耗大量飢餓值並降低準確性。\n\n不適用於弩,並且似乎已在紙質服務器上進行了修補。", + "description.wurst.setting.arrowdmg.packets": "要發送的數據包數量。\n更多數據包 = 更高的傷害。", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "啟用後,三叉戟飛得更遠。 似乎不會影響傷害或激流。\n\n§c§l警告:§r 啟用此選項很容易丟失三叉戟!", + "description.wurst.hack.autoarmor": "自動管理你的盔甲。", + "description.wurst.hack.autobuild": "自動建築東西。\n放一個方塊就開始自動建造。", + "description.wurst.hack.autodrop": "自動丟棄你不想要的物品(有預設)。", + "description.wurst.hack.autoleave": "如果你的血量低於設定值,將會自動退出伺服器。", + "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.take_items_from": "AutoEat 應該在哪裡尋找食物。", + "description.wurst.setting.autoeat.eat_while_walking": "減慢速度,不推薦。", + "description.wurst.setting.autoeat.allow_hunger": "腐肉具有無害的“飢餓”效果。\n可安全食用,可用作緊急食品。", + "description.wurst.setting.autoeat.allow_poison": "有毒食物會隨著時間的推移造成傷害。\n不推薦。", + "description.wurst.setting.autoeat.allow_chorus": "吃紫頌果會將你傳送到一個隨機位置。\n不推薦。", + "description.wurst.hack.autofarm": "自動收穫與種植農作物。\n有效作物為小麥、胡蘿蔔、馬鈴薯、紅菜頭根、南瓜、西瓜、仙人掌、甘蔗、海帶、竹子、地狱疙瘩和可可豆。", + "description.wurst.hack.autofish": "自動使用最好的魚竿釣魚,如果在此期間獲得了更好的魚竿,就會自動切換到它。", + "description.wurst.hack.automine": "自動挖掘你眼前所指的方塊。", + "description.wurst.hack.autopotion": "當你的生命值低於設定值時,自動扔一瓶噴濺型瞬間恢復藥水。", + "description.wurst.hack.autoreconnect": "當你被伺服器踢出時候,自動重連。", + "description.wurst.hack.autorespawn": "當你死亡的時候自動重生。", + "description.wurst.hack.autosign": "立即在每個牌子上寫下任何你想要的文字,當此功能啟動的時候,你只需要很普通的在第一個牌子上,寫你想要的文字,之後接下來所有牌子都跟上一個一樣。", + "description.wurst.hack.autosoup": "當你生命值低下的時候自動喝蘑菇煲。\n\n§l注意:§r這個功能是忽視“饑餓值”,因為特定伺服器小遊戲內(如Hypixel),喝湯是直接補充生命,而不是回復飽腹值。如果你正在玩的伺服器沒有這個功能,請使用AutoEat功能而不是這個。", + "description.wurst.hack.autosprint": "讓你自動進入疾跑。", + "description.wurst.hack.autosteal": "你所打開的箱子以及界伏盒會自動盜竊裡面所有物品。", + "description.wurst.hack.autoswim": "當你在水中會自動切換泳姿狀態。", + "description.wurst.hack.autoswitch": "按順序自動切換快捷欄位。\n\n§l進階提示:§r倘若在你的快捷欄有不同顏色的羊毛以及,不同顏色的混粘土,利用這個功能與BuildRandom同時使用會出現意想不到的效果。", + "description.wurst.hack.autosword": "當你攻擊實體的時候,自動使用快捷欄中最好的武器。\n提示:在使用Killaura功能時候,最好開啟。", + "description.wurst.hack.autotool": "當你破壞方塊的時候會在你的物品快捷欄中切換成最優的破壞工具。", + "description.wurst.hack.autototem": "自動將不死圖騰移動到副手上。", + "description.wurst.hack.autowalk": "讓你自動走路,不需要自己按著W鍵。", + "description.wurst.hack.basefinder": "通過尋找人為建造的方塊以找到玩家的基地\n假如方塊被找到將會高亮以你所選的顏色。\n建議用於尋找幫派的基地。", + "description.wurst.hack.blink": "暫停所有動作更新,並在關閉時繼續。", + "description.wurst.hack.boatfly": "允許您乘船和其他車輛飛行。\n按跑步鍵可以更快地下降。", + "description.wurst.hack.bonemealaura": "在指定的作物上自動使用骨粉。\n使用核取方塊來指定作物。", + "description.wurst.hack.bowaimbot": "當你用弓或者弩時自動瞄準所設定的實體。", + "description.wurst.hack.buildrandom": "在你的附近隨機放置方塊。", + "description.wurst.hack.bunnyhop": "讓你自動跳躍,但不能做到像CSGO一樣。", + "description.wurst.hack.cameradistance": "允許你在第三人稱中改變鏡頭距離。", + "description.wurst.hack.cameranoclip": "允許第三人稱攝像機忽視牆體碰撞直接把視角穿過去。", + "description.wurst.hack.cavefinder": "幫助你找到洞穴並以你所選的顏色將他們高亮。", + "description.wurst.hack.chattranslator": "從聊天欄的資訊利用Google翻譯成你所指定的語言。", + "description.wurst.hack.chestesp": "按你所設定的顏色高亮附近的箱子、潜影盒、陷阱箱、末影箱。", + "description.wurst.hack.clickaura": "當瞄準的時候。自動攻擊你附近有效的實體\n\n§c§l警告:§r此功能通常來說比Killaura更加容易被發現且被檢測出來,這極力推薦使用Killaura或者TriggerBot作為替代。", + "description.wurst.hack.clickgui": "基於視窗的點擊式GUI(有分類)。", + "description.wurst.hack.crashchest": "生成一個容易封禁玩家的箱子,如果他們複製大量的箱子在他們背包裡面§c§l警告:§r§c這個無法撤銷。請小心使用!§r\n\n如果複製出來被放在箱子裏,無論誰打開箱子就會被踢出伺服器(只要一個)。", + "description.wurst.hack.creativeflight": "可以跟創造模式的飛行沒啥兩樣(即按兩下空格起飛)。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", + "description.wurst.hack.criticals": "將你的攻擊全變為暴擊。", + "description.wurst.hack.crystalaura": "自動放置(可選)並引爆末影水晶殺死你附近的實體。", + "description.wurst.hack.derp": "讓你的頭瘋狂到處隨機轉動。\n僅限其他玩家可視。", + "description.wurst.hack.dolphin": "讓你在水中浮起來。\n(就像海豚一樣)", + "description.wurst.hack.excavator": "自動破壞所選區域內的所有方塊。", + "description.wurst.hack.extraelytra": "讓你的鞘翅更加容易使用。", + "description.wurst.hack.fancychat": "替換ASCII字元在發送消息時,變成更好的Unicode字元。可以用於繞過英文單詞字元限制在一些伺服器上。\n但對於那些禁用Unicode字元的伺服器不起作用。", + "description.wurst.hack.fastbreak": "允許你更快的破壞方塊。\n提示:可以和Nuker功能配合利用。", + "description.wurst.hack.fastladder": "允許你爬梯的速度加快。", + "description.wurst.hack.fastplace": "允許你正常放置方塊速度的5倍或以上。\n提示:這個能新增AutoBuild功能的速度。", + "description.wurst.hack.feedaura": "自動餵食你附近的動物。", + "description.wurst.hack.fightbot": "仿照機器人會自動跟隨並擊殺最近的實體。\n很適合刷怪區域。", + "description.wurst.hack.fish": "關閉水底的重力,所以你可以像魚一樣游泳。", + "description.wurst.hack.flight": "允許你飛天。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", + "description.wurst.hack.follow": "跟機器人一樣跟隨最近的實體。\n非常惹惱人。\n\n使用.follow指令跟隨特定的實體。", + "description.wurst.hack.forceop": "破解AuthMe登入挿件密碼。\n一般用於獲得OP。(PS:只是撞庫,跑密碼的軟件)", + "description.wurst.hack.freecam": "允許在不移動你角色的情况下自由移動角色。(靈魂出竅)", + "description.wurst.hack.fullbright": "可以在黑暗中看的一清二楚。(無限夜視)", + "description.wurst.hack.glide": "使你在下落時緩慢下降。\n\n§c§l警告:§r如果你不使用NoFall則可能會摔落致死。", + "description.wurst.hack.handnoclip": "允許你能透過牆壁觸碰到特殊的方塊。", + "description.wurst.hack.headroll": "讓你不斷點頭。\n僅限其他玩家可視。", + "description.wurst.hack.healthtags": "在玩家名字旁邊顯示血量。", + "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年前。", + "description.wurst.hack.jetpack": "模仿你好像真的有飛行背包一樣飛行。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", + "description.wurst.hack.kaboom": "像爆炸一樣破壞你附近的方塊。\n這個可能比Nuker功能破壞更快如果服務器沒有反作弊的話,使用適合的工具和破壞脆弱的方塊可以事半功倍。\n注意:這並不是真正的爆炸。", + "description.wurst.hack.killauralegit": "KillauraLegit更難被反作弊檢測。\n在正常的NoCheat+(NCP)服務器上不需要!", + "description.wurst.hack.killaura": "自動攻擊你附近的實體。", + "description.wurst.hack.killpotion": "生成一個能殺死絕大多數生物的藥水,包括創造模式的玩家,但對那些不死的生物或者已死生物無效。\n\n需要在創造模式下。", + "description.wurst.hack.liquids": "取消限制,允許你在水面上直接放置方塊。", + "description.wurst.hack.lsd": "產生和吃了雲南蘑菇一樣的漸變色暈眩效果。", + "description.wurst.hack.masstpa": "給每個人發送TPA請求。\n\n§c§l警告:§r國內服務器使用會因為Wurst判斷的是英文而導致TPA仍在繼續。", + "description.wurst.hack.mileycyrus": "類似全自動Shift蹲起。", + "description.wurst.hack.mobesp": "高亮附近的生物。", + "description.wurst.hack.mobspawnesp": "高亮那些生物可以生成的區域。\n§e黃色§r - 可以在夜間生成\n§c紅色§r - 可以在任意時候生成", + "description.wurst.hack.multiaura": "比Killaura更高級,能同一時間攻擊多個實體。", + "description.wurst.hack.nameprotect": "隱藏所有玩家的名字。", + "description.wurst.hack.nametags": "改變名字標籤大小使你可以經常可以看到他們,同時也能讓你看到那些正潜行的玩家名字標籤。", + "description.wurst.hack.navigator": "一個可供你蒐索的GUI,可以隨著時間的推移瞭解您的偏好。", + "description.wurst.hack.newchunks": "突出您周圍新生成的區塊。", + "description.wurst.hack.nobackground": "移除GUI後的暗色背景。", + "description.wurst.hack.noclip": "讓你可以自由穿越方塊。\n必須要有一個掉落的方塊在你的正上方才會啟動此功能 (例如:沙子、砂礫...)。\n\n§c§l警告:§r穿牆時將會受到傷害!", + "description.wurst.hack.nocomcrash": "利用Nocom漏洞使伺服器卡頓或崩潰。\n經測試可在Vanilla、Spigot和Fabric上工作,Paper和一些擁有特定反作弊的服務器無法使用。", + "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": "允許改變你當地用戶端所在的時間,和月亮的階段(僅在本地生效,與服務器無關)。", + "description.wurst.hack.noweb": "使你不會因為蜘蛛網而慢下來。", + "description.wurst.hack.nuker": "自動挖掘你附近的方塊。", + "description.wurst.hack.nukerlegit": "NukerLegit能够繞過所有的反作弊檢測。\n在正常的NoCheat+(NCP)服務器上不需要!", + "description.wurst.hack.openwateresp": "顯示你是否在一個“開放水域”的地方,在區域內畫一個大方塊用於計算檢測是否為開放水域。", + "description.wurst.hack.overlay": "開採一個方塊時渲染“Nuker功能”動畫。", + "description.wurst.hack.panic": "瞬間關閉所有的作弊功能。\n請小心使用!", + "description.wurst.hack.parkour": "你會自動跳躍起來,當到方塊的邊緣。\n適用於跑酷或跳和跑。", + "description.wurst.hack.playeresp": "高亮透視附近的玩家。\n如果是你的好友的話會顯示藍色框框。", + "description.wurst.hack.portalgui": "允許你在傳送門內打開GUI。", + "description.wurst.hack.potionsaver": "當你站著不動時凍結所有的藥水效果時間。", + "description.wurst.hack.prophuntesp": "在躲猫猫小遊戲中知道哪些是人扮的方塊。\n用於Mineplex服務器的Prophunt(躲猫猫),其他服務器未必凑效。", + "description.wurst.hack.protect": "使用AI模式保護最近的實體,並保護它免受其他實體的傷害。\n使用指令.protect來保護指定的實體,而不是最近的一個。", + "description.wurst.hack.radar": "生成一個雷達UI並顯示附近的實體。\n§c紅色§r - 玩家\n§6橘色§r - 怪物\n§a綠色§r - 動物\n§7灰色§r - 其他", + "description.wurst.hack.rainbowui": "§c讓§a每§9一§c樣§a都§9充§c滿§a五§9彩§c斑§a斕§9的§c樣§a子§9,\n§c包§a括§9你§c當§a前§9所§c在§aU§9I", + "description.wurst.hack.reach": "允許你碰到更遠的距離。", + "description.wurst.hack.remoteview": "允許你以另一個視角觀看世界。\n使用.rv指令來指定一個特殊的實體。", + "description.wurst.hack.safewalk": "防止你從方塊邊緣掉出。", + "description.wurst.hack.scaffoldwalk": "自動在你的脚下搭方塊。", + "description.wurst.hack.search": "幫助你找到所需要的方塊並以彩虹色的管道高亮。", + "description.wurst.hack.skinderp": "隨機切換你的皮膚。", + "description.wurst.hack.sneak": "讓你自動保持潜行行走。", + "description.wurst.hack.snowshoe": "可以讓你在細雪上行走。", + "description.wurst.hack.speedhack": "允許你以大約~2.5x或更快的速度跳躍或疾跑。\n\n§6§l警告:§r只有低於反作弊版本3.13.2才會工作且繞過,如果你不知道服務器反作弊是哪個版本。\n輸入§l/ncp version§r來查看反作弊版本。", + "description.wurst.hack.speednuker": "一個比Nuker更快的版本,但會無法繞過反作弊。", + "description.wurst.hack.spider": "像蜘蛛一樣能够爬牆。", + "description.wurst.hack.step": "允許你走上更高高度(取決於你的設定)的格子方塊。", + "description.wurst.hack.throw": "迅速丟你手中種類的物品,可以用於丟雪球、雞蛋、刷怪蛋、礦車,諸如此類。\n\n會生成大量的數量,這會產生大量的lag且可能會導致服務器崩潰。", + "description.wurst.hack.tillaura": "自動將泥土、草塊、諸如此類。轉化為耕地。\n不要和Killaura搞混。", + "description.wurst.hack.timer": "改變大部分東西的速度。", + "description.wurst.hack.tired": "讓你看起來很像2015年的Alexander。\n僅限其他玩家可視。", + "description.wurst.hack.toomanyhax": "關閉那些你並不想要使用的功能。\n讓你確保你不會不小心開啟錯誤的作弊功能導致被服務器封禁。\n這個是給那些“只想作弊一點點的用戶”。\n\n使用指令§6. toomanyhax§r來選擇哪些功能需要被遮罩。\n輸入§6. help toomanyhax§r尋求更多。", + "description.wurst.hack.tp-aura": "自動傳送到實體附近並自動攻擊他。", + "description.wurst.hack.trajectories": "預測箭和投擲物品的飛行路徑。", + "description.wurst.hack.treebot": "一個實驗性的機器人將會在樹木附近砍樹。\n現時僅限於砍小樹。", + "description.wurst.hack.triggerbot": "自動攻擊你所看的實體。", + "description.wurst.hack.trollpotion": "生成一個惹人惱怒的藥水效果。\n§o僅限創造模式。§r", + "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": "上次你嘗試登入這個,但是它不起作用。", + "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 無法在沒有權限的情況下加密或解密 Alt List。\n你可以繼續使用 AltManager,但是你新建的 Alt 都無法被存儲。\n\n完整的錯誤信息如下:\n%s", + "gui.wurst.altmanager.empty.title": "你的 Alt List 是空的。", + "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": "允許", + "key.wurst.zoom": "縮放" +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index ac972418..c881efd7 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,54 +1,50 @@ -{ - "schemaVersion": 1, - "id": "wurst", - "version": "${version}", - - "name": "Wurst Client", - "description": "Wurst Wurst Wurst!", - "authors": [ - "Alexander01998" - ], - "contact": { - "homepage": "https://www.wurstclient.net/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Website", - "issues": "https://www.wurstclient.net/wurst7issues/", - "sources": "https://www.wurstclient.net/wurst7sources/" - }, - - "license": "GPL-3.0-or-later", - "icon": "assets/wurst/icon.png", - - "environment": "client", - "entrypoints": { - "main": [ - "net.wurstclient.WurstInitializer" - ] - }, - "mixins": [ - "wurst.mixins.json" - ], - "accessWidener" : "wurst.accesswidener", - - "depends": { - "fabricloader": ">=0.15.10", - "fabric-api": ">=0.99.5", - "minecraft": "~1.21-beta.1", - "java": ">=21" - }, - "suggests": { - "mo_glass": "*" - }, - "breaks": { - "wi_zoom": "*", - "wi-zoom": "*", - "vulkanmod": "*" - }, - "custom": { - "modmenu": { - "links": { - "Wiki": "https://wurst.wiki/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Wiki", - "Forum": "https://wurstforum.net/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Forum", - "Donate": "https://www.wurstclient.net/donate/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Donate" - } - } - } -} +{ + "schemaVersion": 1, + "id": "wurst", + "version": "${version}", + "name": "Wurst Client", + "description": "Wurst Wurst Wurst!", + "authors": [ + "Alexander01998" + ], + "contact": { + "homepage": "https://www.wurstclient.net/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Website", + "issues": "https://www.wurstclient.net/wurst7issues/", + "sources": "https://www.wurstclient.net/wurst7sources/" + }, + "license": "GPL-3.0-or-later", + "icon": "assets/wurst/icon.png", + "environment": "client", + "entrypoints": { + "main": [ + "net.wurstclient.WurstInitializer" + ] + }, + "mixins": [ + "wurst.mixins.json" + ], + "accessWidener": "wurst.accesswidener", + "depends": { + "fabricloader": ">=0.15.10", + "fabric-api": ">=0.99.5", + "minecraft": "~1.21-beta.1", + "java": ">=21" + }, + "suggests": { + "mo_glass": "*" + }, + "breaks": { + "wi_zoom": "*", + "wi-zoom": "*", + "vulkanmod": "*" + }, + "custom": { + "modmenu": { + "links": { + "Wiki": "https://wurst.wiki/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Wiki", + "Forum": "https://wurstforum.net/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Forum", + "Donate": "https://www.wurstclient.net/donate/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Donate" + } + } + } +} diff --git a/src/main/resources/wurst.mixins.json b/src/main/resources/wurst.mixins.json index f08363ff..84d63987 100644 --- a/src/main/resources/wurst.mixins.json +++ b/src/main/resources/wurst.mixins.json @@ -1,74 +1,73 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "net.wurstclient.mixin", - "compatibilityLevel": "JAVA_17", - "mixins": [ - ], - "client": [ - "AbstractBlockStateMixin", - "AbstractSignEditScreenMixin", - "AllowedAddressResolverMixin", - "BackgroundRendererMixin", - "BasicBakedModelMixin", - "BlockEntityRenderDispatcherMixin", - "BlockMixin", - "CactusBlockMixin", - "CameraMixin", - "ChatHudMixin", - "ChatInputSuggestorMixin", - "ChatScreenMixin", - "ChunkOcclusionGraphBuilderMixin", - "ClientCommonNetworkHandlerMixin", - "ClientConnectionMixin", - "ClientPlayerEntityMixin", - "ClientPlayerInteractionManagerMixin", - "ClientPlayNetworkHandlerMixin", - "ClientWorldMixin", - "ControlsListWidgetMixin", - "CreativeInventoryScreenMixin", - "DeathScreenMixin", - "DirectConnectScreenMixin", - "DisconnectedRealmsScreenMixin", - "DisconnectedScreenMixin", - "EntityMixin", - "EntityRendererMixin", - "FluidRendererMixin", - "GameMenuScreenMixin", - "GameRendererMixin", - "GenericContainerScreenMixin", - "HeldItemRendererMixin", - "IngameHudMixin", - "InGameOverlayRendererMixin", - "KeyBindingMixin", - "KeybindTextContentMixin", - "KeyboardMixin", - "LanguageManagerMixin", - "LivingEntityRendererMixin", - "MinecraftClientMixin", - "MobEntityRendererMixin", - "MouseMixin", - "MultiplayerScreenMixin", - "PackScreenMixin", - "PlayerInventoryMixin", - "PlayerSkinProviderMixin", - "PowderSnowBlockMixin", - "RenderTickCounterDynamicMixin", - "ScreenMixin", - "ShulkerBoxScreenMixin", - "SimpleOptionMixin", - "SodiumBlockOcclusionCacheMixin", - "SodiumFluidRendererMixin", - "StatsScreenMixin", - "StatusEffectInstanceMixin", - "TelemetryManagerMixin", - "TextVisitFactoryMixin", - "TitleScreenMixin", - "TranslatableTextContentMixin", - "WorldMixin", - "WorldRendererMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} +{ + "required": true, + "minVersion": "0.8", + "package": "net.wurstclient.mixin", + "compatibilityLevel": "JAVA_17", + "mixins": [], + "client": [ + "AbstractBlockStateMixin", + "AbstractSignEditScreenMixin", + "AllowedAddressResolverMixin", + "BackgroundRendererMixin", + "BasicBakedModelMixin", + "BlockEntityRenderDispatcherMixin", + "BlockMixin", + "CactusBlockMixin", + "CameraMixin", + "ChatHudMixin", + "ChatInputSuggestorMixin", + "ChatScreenMixin", + "ChunkOcclusionGraphBuilderMixin", + "ClientCommonNetworkHandlerMixin", + "ClientConnectionMixin", + "ClientPlayerEntityMixin", + "ClientPlayerInteractionManagerMixin", + "ClientPlayNetworkHandlerMixin", + "ClientWorldMixin", + "ControlsListWidgetMixin", + "CreativeInventoryScreenMixin", + "DeathScreenMixin", + "DirectConnectScreenMixin", + "DisconnectedRealmsScreenMixin", + "DisconnectedScreenMixin", + "EntityMixin", + "EntityRendererMixin", + "FluidRendererMixin", + "GameMenuScreenMixin", + "GameRendererMixin", + "GenericContainerScreenMixin", + "HeldItemRendererMixin", + "IngameHudMixin", + "InGameOverlayRendererMixin", + "KeyBindingMixin", + "KeybindTextContentMixin", + "KeyboardMixin", + "LanguageManagerMixin", + "LivingEntityRendererMixin", + "MinecraftClientMixin", + "MobEntityRendererMixin", + "MouseMixin", + "MultiplayerScreenMixin", + "PackScreenMixin", + "PlayerInventoryMixin", + "PlayerSkinProviderMixin", + "PowderSnowBlockMixin", + "RenderTickCounterDynamicMixin", + "ScreenMixin", + "ShulkerBoxScreenMixin", + "SimpleOptionMixin", + "SodiumBlockOcclusionCacheMixin", + "SodiumFluidRendererMixin", + "StatsScreenMixin", + "StatusEffectInstanceMixin", + "TelemetryManagerMixin", + "TextVisitFactoryMixin", + "TitleScreenMixin", + "TranslatableTextContentMixin", + "WorldMixin", + "WorldRendererMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} From cd942214f67783348306e4e2a6ffa96bce0cf6da Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 23 Jun 2024 10:09:43 +0200 Subject: [PATCH 043/109] Add spotless check for JSON files --- .github/workflows/gradle.yml | 2 ++ build.gradle | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 6fd9a896..d0906b28 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -4,11 +4,13 @@ on: push: paths: - '**.java' + - '**.json' - 'gradle**' - 'build.gradle' pull_request: paths: - '**.java' + - '**.json' - 'gradle**' - 'build.gradle' # Makes it possible to run this workflow manually from the Actions tab diff --git a/build.gradle b/build.gradle index ef378ac2..79eee2df 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ dependencies { // // In other words, Wurst won't compile without this library, // even though it's Minecraft that actually uses it. - modImplementation 'com.google.code.findbugs:jsr305:3.0.2' + modImplementation "com.google.code.findbugs:jsr305:3.0.2" } loom { @@ -73,17 +73,21 @@ java { jar { from("LICENSE") { - rename { "${it}_${project.base.archivesName.get()}"} + rename {"${it}_${project.base.archivesName.get()}"} } } spotless { + lineEndings("WINDOWS") java { removeUnusedImports() indentWithTabs() trimTrailingWhitespace() eclipse().configFile(file("codestyle/formatter.xml")) - lineEndings('WINDOWS') + } + json { + target "src/**/*.json" + gson().indentWithSpaces(2).version("2.10.1") } } From ad704c492306d1e5f2e19cfc483d771072896282 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 23 Jun 2024 10:12:32 +0200 Subject: [PATCH 044/109] Fix style issues in JSON files --- .../resources/assets/wurst/lang/cs_cz.json | 364 ++++++++--------- .../resources/assets/wurst/lang/de_de.json | 2 +- .../resources/assets/wurst/lang/en_us.json | 36 +- .../resources/assets/wurst/lang/fr_fr.json | 366 ++++++++--------- .../resources/assets/wurst/lang/it_it.json | 370 ++++++++--------- .../resources/assets/wurst/lang/ja_jp.json | 2 +- .../resources/assets/wurst/lang/ko_kr.json | 306 +++++++------- .../resources/assets/wurst/lang/pl_pl.json | 2 +- .../resources/assets/wurst/lang/ro_ro.json | 354 ++++++++--------- .../resources/assets/wurst/lang/ru_ru.json | 372 +++++++++--------- .../resources/assets/wurst/lang/uk_ua.json | 362 ++++++++--------- .../resources/assets/wurst/lang/zh_cn.json | 2 +- .../resources/assets/wurst/lang/zh_hk.json | 2 +- .../resources/assets/wurst/lang/zh_tw.json | 372 +++++++++--------- src/main/resources/fabric.mod.json | 104 +++-- src/main/resources/wurst.mixins.json | 147 ++++--- 16 files changed, 1579 insertions(+), 1584 deletions(-) diff --git a/src/main/resources/assets/wurst/lang/cs_cz.json b/src/main/resources/assets/wurst/lang/cs_cz.json index cd095cc3..02a6acae 100644 --- a/src/main/resources/assets/wurst/lang/cs_cz.json +++ b/src/main/resources/assets/wurst/lang/cs_cz.json @@ -1,182 +1,182 @@ -{ - "description.wurst.hack.airplace": "Umožňuje umístit bloky do prázdného prostoru.", - "description.wurst.hack.anchoraura": "Automaticky umísťí (volitelně), nabije a odpalí kotvy oživení k zabití entit kolem vás.", - "description.wurst.hack.antiafk": "Prochází se náhodně, aby vás skryl před AFK detektory.", - "description.wurst.hack.antiblind": "Zabraňuje blindness a efekty tmy.\nNekompatibilní s OptiFinem.", - "description.wurst.hack.anticactus": "Chrání vás před poškozením kaktusem.", - "description.wurst.hack.antihunger": "Zpomalí váš hlad, když chodíte.", - "description.wurst.hack.antiknockback": "Zabraní strkání hráči a moby.", - "description.wurst.hack.antispam": "Blokuje spam chatu přidáním čítače k opakovaným zprávám.", - "description.wurst.hack.antiwaterpush": "Zabraňuje posouvání vodou.", - "description.wurst.hack.antiwobble": "Zabraňuje viklavému efektu způsobenému nevolností a portály.", - "description.wurst.hack.arrowdmg": "Masivně zvyšuje poškození šípem, ale také spotřebovává hodně hladu a snižuje přesnost.\n\nNefunguje s kušemi a zdá se nefunkční na Paper serverech.", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "Povolením, trojzubce létají mnohem dál. Nezdá se, že by to mělo vliv na poškození nebo Mocný záběr.\n\n§c§lUPOZORNĚNÍ:§r Povolením této možnosti můžete snadno přijít o trojzubec!", - "description.wurst.hack.autoarmor": "Automaticky přehazuje vaše brnění.", - "description.wurst.hack.autobuild": "Automaticky staví.\nUmístěte blok k započatí stavby.", - "description.wurst.hack.autodrop": "Automaticky vyhazuje nechtěné předměty.", - "description.wurst.hack.autoleave": "Automaticky opustí server, když jsou vaše životy nízké.", - "description.wurst.hack.autoeat": "Automaticky jí jídlo, když je potřeba.", - "description.wurst.setting.autoeat.target_hunger": "Snaží se držet laťku hladu na této úrovni nebo nad ní, ale jen v případě, že nepromrhá žádné body hladu.", - "description.wurst.setting.autoeat.min_hunger": "Vždy udržuje laťku hladu na této úrovni nebo nad ní, i když promrhá některé body hladu.\n6.5 - Nepusobí plýtvání s vanilovými potravinami.\n10.0 - Zcela ignoruje plýtvání a jen udržuje hlad plný.", - "description.wurst.setting.autoeat.injured_hunger": "Naplňuje laťku hladu alespoň na tuto úroveň, když jste zraněni, i když to plýtvá některé body hladu.\n10,0 - nejrychlejší hojení\n9,0 - nejpomalejší hojení\n<9,0 - bez hojení <3,5 - bez sprintu", - "description.wurst.setting.autoeat.injury_threshold": "Zabrání drobným úrazům v plýtvání jídlem. AutoEat vás bude považovat za zraněného pouze v případě, že jste ztratil alespoň tento počet srdcí.", - "description.wurst.setting.autoeat.take_items_from": "Kde by měl AutoEat hledat jídlo.", - "description.wurst.setting.autoeat.eat_while_walking": "Zpomaluje, nedoporučuje se.", - "description.wurst.setting.autoeat.allow_hunger": "Shnilé maso má neškodný \"hladový\" efekt.\nJe bezpečné a užitečné jako nouzové jídlo.", - "description.wurst.setting.autoeat.allow_poison": "Jedovatá potrava časem působí poškození.\n Nedoporučuje se.", - "description.wurst.setting.autoeat.allow_chorus": "Ovoce chorusovníku vás teleportuje na náhodné místo.\nNedoporučuje se.", - "description.wurst.hack.autofarm": "Automaticky sklízí a přesazuje plodiny.\nPracuje s pšenicí, mrkví, bramborami, řepou, dýněmi, melouny, kaktusy, cukrovou třtinou, chaluhou, bambusem, bradavičníkem a kakaovými boby.", - "description.wurst.hack.autofish": "Automaticky chytá ryby pomocí vašeho nejlepšího rybářského prutu. Pokud najde lepší prut při rybaření, automaticky na něj přepne.", - "description.wurst.hack.automine": "Automaticky vytěží jakýkoli blok, na který se podíváte.", - "description.wurst.hack.autopotion": "Automaticky hází lektvary okamžitého zdraví, když je vaše zdraví nízké.", - "description.wurst.hack.autoreconnect": "Automaticky se znovu připojí, když vás vyhodí ze serveru.", - "description.wurst.hack.autorespawn": "Automaticky vás oživí, když zemřete.", - "description.wurst.hack.autosign": "Okamžitě napíše jakýkoliv text, který chcete, na každou ceduli, kterou umístíte. Po aktivaci můžete normálně psát na první ceduli a vytvořit tak šablonu pro všechny ostatní cedule.", - "description.wurst.hack.autosoup": "Automaticky jí polévku, když jsou vaše životy nízké.\n\n§lPoznámka:§r Tento hack ignoruje hlad a předpokládá, že konzumace polévky přímo doplňuje vaše zdraví. Pokud server, na kterém hrajete, není takto nastaven, použijte radši AutoEat.", - "description.wurst.hack.autosprint": "Neustálý sprint.", - "description.wurst.hack.autosteal": "Automaticky ukradne vše ze všech truhel a shulkerových schránek, které otevřete.", - "description.wurst.hack.autoswim": "Automaticky spustí animaci plavání.", - "description.wurst.hack.autoswitch": "Neustále přepíná předmět ve vaší ruce.\n\n§lProRada:§r Použijte to v kombinaci s BuildRandom, zatímco máte ve svém hotbaru spoustu různobarevných vlněných nebo betonových bloků.", - "description.wurst.hack.autosword": "Automaticky použije nejlepší zbraň ve vašem hotbaru k útoku na entity.\nRada: Funguje s Killaurou.", - "description.wurst.hack.autotool": "Automaticky vybaví nejrychlejším použitelným nástroj v hotbaru k rozbití bloku.", - "description.wurst.hack.autototem": "Automaticky přesune totemy nesmrtelnosti do vaší druhé ruky.", - "description.wurst.hack.autowalk": "Neustálá chůze.", - "description.wurst.hack.basefinder": "Vyhledá hráčské základny vyhledáváním uměle vytvořených bloků.\nBloky, které vyhledá, budou zvýrazněny vybranou barvou.\nDobré pro vyhledání frakčních základen.", - "description.wurst.hack.blink": "Pozastaví všechny možnosti pohybu při povolení.", - "description.wurst.hack.boatfly": "Umožňuje vám létat s loďkami a jinými vozidly.\nStiskněte Sprint pro rychlejší klesání.", - "description.wurst.hack.bonemealaura": "Automaticky používá kostní moučku na určité druhy rostlin.\nPomocí zaškrtávacích políček určujete tyto druhy rostlin.", - "description.wurst.hack.bowaimbot": "Automaticky zaměří luk nebo kuši.", - "description.wurst.hack.buildrandom": "Náhodně umísťuje bloky kolem vás.", - "description.wurst.hack.bunnyhop": "Neustálé skákání.", - "description.wurst.hack.cameradistance": "Umožňuje změnit vzdálenost kamery ve 3. osobě.", - "description.wurst.hack.cameranoclip": "Umožňuje kameře ve třetí osobě procházet zdmi.", - "description.wurst.hack.cavefinder": "Pomáhá najít jeskyně tím, že je zvýrazní vybranou barvou.", - "description.wurst.hack.chattranslator": "Překládá příchozí zprávy v chatu pomocí Google Translate.", - "description.wurst.hack.chestesp": "Zvýrazní okolní truhly.", - "description.wurst.hack.clickaura": "S každým kliknutím automaticky zaútočí na nejbližší platnou entitu.\n\n§c§lWAROVÁNÍ:§r ClickAury sjou obecně podezřelejší než Killaury a jsou i snadněji rozpoznatelné pro pluginy. Doporučuje se namísto nich používat buďto Killauru, či TriggerBota.", - "description.wurst.hack.clickgui": "Okenní rozhraní ClickGUI.", - "description.wurst.hack.crashchest": "Generuje truhlu, která lidem v podstatě zakáže přístup k serveru pokud jich mají v inventáři příliš mnoho. §c§lVAROVÁNÍ:§r §cToto nelze vzít zpět. Používejte s opatrností!§r\n\nPokud se místo toho vloží kopie do truhly, každý, kdo truhlu otevře, bude ze serveru jen odpojen (může se znovupřipojit).", - "description.wurst.hack.creativeflight": "Umožňuje létat jako v kreativním režimu.\n\n§c§lVAROVÁNÍ:§r Pokud nepoužíváte NoFall, dojde k zranění pádem.", - "description.wurst.hack.criticals": "Změní všechny vaše údery na kritické.", - "description.wurst.hack.crystalaura": "Automaticky umístí (volitelně) a odpálí endové krystaly, k zabití entit kolem vás.", - "description.wurst.hack.derp": "Šibuje s hlavou do všech stran.\nViditelné jen ostatním hráčům.", - "description.wurst.hack.dolphin": "Neustálé nadskakování ve vodě.\n(úplně jako delfín)", - "description.wurst.hack.excavator": "Automaticky ztěží všechny bloky ve vybrané oblasti.", - "description.wurst.hack.extraelytra": "Usnadňuje používání Elytry.", - "description.wurst.hack.fancychat": "Nahradí ASCII znaky ve vašich zprávách hezčími unicode znaky. Lze využít k obcházení filtru sprostých slov na některých serverech.\nNefunguje na serverech, které blokují znaky unicode.", - "description.wurst.hack.fastbreak": "Umožňuje rozbíjet bloky rychleji.\nTip: Funguje s Nukerem.", - "description.wurst.hack.fastladder": "Umožňuje rychlejší šplhání po žebřících.", - "description.wurst.hack.fastplace": "Umožňuje umístit bloky 5x rychleji.\nRada: Může urychlit další hacky jako AutoBuild.", - "description.wurst.hack.feedaura": "Automaticky krmí zvířata kolem vás.", - "description.wurst.hack.fightbot": "Bot, který automaticky pochoduje kolem a všechno zabíjí.\nDobré pro MobArenu.", - "description.wurst.hack.fish": "Deaktivuje podvodní gravitaci, takže můžete plavat jako ryba.", - "description.wurst.hack.flight": "Umožňuje létat.\n\n§c§lUPOZORNĚNÍ:§r Budete poškozeni pádem, pokud nepoužijete NoFall.", - "description.wurst.hack.follow": "Bot, který následuje nejbližší entitu.\nVelice otravné.\n\nPoužijte .follow pro sledování konkrétní entity.", - "description.wurst.hack.forceop": "Prolomuje AuthMe hesla.\nLze použít k získání OP.", - "description.wurst.hack.freecam": "Umožňuje pohybovat kamerou, aniž byste pohnuli postavou.", - "description.wurst.hack.fullbright": "Umožňuje vidět ve tmě.", - "description.wurst.hack.glide": "Při pádu padáte dolů pomalu.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužíváte NoFall, zraníte se pádem.", - "description.wurst.hack.handnoclip": "Umožňuje dosáhnout určitých bloků skrz zdi.", - "description.wurst.hack.headroll": "Neustále přikyvujete.\nViditelné jen ostatními.", - "description.wurst.hack.healthtags": "Ukazuje zdraví hráčů v jejich jmenovkách.", - "description.wurst.hack.highjump": "Umožňuje skákat výš.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužIJETE NoFall, zraníte se pádem.", - "description.wurst.hack.infinichat": "Odstraňuje limit 256 znaků z chatu.\nUžitečné pro dlouhé příkazy, které upravují data NBT.\n\n§6§lPOZNÁMKA:§r Nedoporučuje se pro komunikaci s ostatníma. Většina serverů na svém konci zkrátí zprávy na 256 znaků.", - "description.wurst.hack.instantbunker": "Postaví kolem vás malý bunkr. Potřebuje 57 bloků.", - "description.wurst.hack.invwalk": "Umožňuje pohyb s otevřeným inventářem.", - "description.wurst.setting.invwalk.allow_clickgui": "Umožňuje pohyb s otevřeným Wurstským ClickGUI.", - "description.wurst.setting.invwalk.allow_other": "Umožňuje pohybovat se s dalšími překrytími (např. truhly, koně, obchodu s vesničany...), pokud obrazovka neobsahuje textové pole (např. cedule).", - "description.wurst.hack.itemesp": "Zvýrazní blízké položky.", - "description.wurst.hack.itemgenerator": "Vytváří náhodné položky a odhazuje je na zem.\n§oPouze v kreativním režiu.§r", - "description.wurst.hack.jesus": "Umožňuje chodit po vodě.\nJežíš použil tento hack asi tak před 2000 lety.", - "description.wurst.hack.jetpack": "Umožňuje létat, jako byste měli jetpack.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužijete NoFall, zraníte se pádem.", - "description.wurst.hack.kaboom": "Rozbíjí bloky kolem vás polo-explozí.\nMůže být mnohem rychlejší než Nuker, pokud server nemá NoCheat+. Nejlépe to funguje s rychlými nástroji a slabými bloky.\nPoznámka: Nejedná se o skutečnou explozi.", - "description.wurst.hack.killauralegit": "Pomalejší, hůře detekovatelná Killaura.\nZbytečné na obyčejných NoCheat+ serverech!", - "description.wurst.hack.killaura": "Automaticky útočí na entity kolem vás.", - "description.wurst.hack.killpotion": "Vytvoří lektvar, který může zabít téměř cokoliv, včetně hráčů v kreativním režimu. Nefunguje na nemrtvé, protože jsou již mrtví.\n\nVyžaduje kreativní režim.", - "description.wurst.hack.liquids": "Umožňuje umístit bloky do kapalin.", - "description.wurst.hack.lsd": "Způsobuje halucinace.", - "description.wurst.hack.masstpa": "Odešle požadavek na TPA všem hráčům.", - "description.wurst.hack.mileycyrus": "Neustálé twerkování.", - "description.wurst.hack.mobesp": "Zvýrazní moby v okolí.", - "description.wurst.hack.mobspawnesp": "Zvýrazní oblasti, kde se mohou mobové objevovat.\n§ežlutá§r - mobové se mohou oběvovat v noci\n§cred§r - mobové se mohou oběvovat vždy", - "description.wurst.hack.multiaura": "Rychlejší Killaura, která útočí na více entit najednou.", - "description.wurst.hack.nameprotect": "Skryje jména všech hráčů.", - "description.wurst.hack.nametags": "Změní měřítko jmenovek tak, abyste je mohli vždy číst. Také vám umožní vidět jmenovky krčících se hráčů.", - "description.wurst.hack.navigator": "Prohledávatelné GUI, které se časem naučí vaše preference.", - "description.wurst.hack.newchunks": "Zvýrazní nově generované chunky kolem vás.", - "description.wurst.hack.nobackground": "Odstraní tmavé pozadí za inventářem.", - "description.wurst.hack.noclip": "Umožňuje volný pohyb mezi bloky.\nBlok (např. písek) musí spadnout na vaši hlavu k aktivovaci.\n\n§c§lUPOZORNĚNÍ:§r Při pohybu mezi bloky se budete zraňovat!", - "description.wurst.hack.nocomcrash": "Laguje a shazuje servery Nocom exploitem.\nNefunguje na Paper serverech. Testováno na Vanile, Spigotu a Fabricu. Některé AntiCheaty mohou znemožňovat jeho použití.", - "description.wurst.hack.nofall": "Chrání vás před poškozením pádem.", - "description.wurst.hack.nofireoverlay": "Blokuje překrytí ohně.\n\n§c§lUPOZORNĚNÍ:§r Může způsobit uhoření bez povšimnutí.", - "description.wurst.hack.nohurtcam": "Zakáže třes obrazovky při zranění.", - "description.wurst.hack.nolevitation": "Odstraní efekt levitace, když vás zasáhne Shulker.\n\n§c§lVAROVÁNÍ:§r Pokud toto zapnete během levitace, spadnete!", - "description.wurst.hack.nooverlay": "Blokuje překrytí vody a lávy.", - "description.wurst.hack.nopumpkin": "Blokuje překrytí dýně na hlavě.", - "description.wurst.hack.noslowdown": "Zruší zpomalení medem, písekm duší i používáním itemů.", - "description.wurst.hack.noweather": "Umožňuje změnit počasí, čas a fázi měsíce na straně klienta.", - "description.wurst.hack.noweb": "Zabraňuje zpomalení pavučinami.", - "description.wurst.hack.nuker": "Automaticky ničí bloky kolem vás.", - "description.wurst.hack.nukerlegit": "Pomalejší Nuker, který obchází všechny moduly AntiCheat.\nNení vyžadován na běžných serverech s NoCheat+!", - "description.wurst.hack.openwateresp": "Zobrazí, zda rybaříte na otevřené vodě, nebo ne, a nakreslí ohraničení kolem oblasti, která se považuje za otevřenou vodu.", - "description.wurst.hack.overlay": "Vykreslí Nukerovu animaci, kdykoli vytěžíte blok.", - "description.wurst.hack.panic": "Okamžitě vypne všechny povolené hacky.\nS tímhle opatrně!", - "description.wurst.hack.parkour": "Při dosažení hrany bloku skáčete automaticky.\nUžitečné pro parkoury a skoko-běhách.", - "description.wurst.hack.playeresp": "Zvýrazní okolní hráče.\nESP boxy přátel se zobrazí modře.", - "description.wurst.hack.portalgui": "Umožňuje otevření inventářů v portálech.", - "description.wurst.hack.potionsaver": "Pozastaví všecny efekty lektvarů, dokud stojíte na místě.", - "description.wurst.hack.prophuntesp": "Umožňuje vidět falešné bloky v Prophuntu.\nVyrobeno pro Mineplexí Prophunt. Může však fungovat i na jiných serverech.", - "description.wurst.hack.protect": "Bot, který sleduje nejbližší entitu a chrání ji před ostatními entitami.\nPoužijte .protect k ochraně konkrétní entity místo té nejbližší.", - "description.wurst.hack.radar": "Zobrazí polohu blízkých entit.\n§cčerveně§r - hráči\n§6oranžově§r - monstra\n§azeleně§r - zvířata\n§7šedě§r - ostatní", - "description.wurst.hack.rainbowui": "§cD§aě§9l§cá §av§9š§ce§ac§9h§cn§ao §9k§cr§aá§9s§cn§aě §9b§ca§ar§9e§cv§an§9é§c.", - "description.wurst.hack.reach": "Umožňuje dosáhnout dále.", - "description.wurst.hack.remoteview": "Umožňuje vidět svět pohledem někoho jiného.\nPoužijte příkaz .rv k použití na konkrétní entitu.", - "description.wurst.hack.safewalk": "Zabraňuje pádu z hran.", - "description.wurst.hack.scaffoldwalk": "Automaticky umísťuje bloky pod nohy.", - "description.wurst.hack.search": "Pomáhá najít konkrétní bloky zvýrazněním jich barevně.", - "description.wurst.hack.skinderp": "Náhodně přepíná části postavy.", - "description.wurst.hack.sneak": "Neustálé plížení.", - "description.wurst.hack.snowshoe": "Umožňuje chůzi po prašanu.", - "description.wurst.hack.speedhack": "Umožní vám běžet ~2.5x rychleji, než byste běželi sprintem se skokem.\n\n§6§lVAROVÁNÍ:§r Opraveno v NoCheat+ verzi 3.13.2. Obchází pouze starší verze NoCheat+.\nNapište §l/ncp version§r pro kontrolu verze NoCheat+ na serveru.", - "description.wurst.hack.speednuker": "Rychlejší verze nukeru, která nemůže obejít NoCheat+.", - "description.wurst.hack.spider": "Umožňuje šplhat po zdech jako pavouk.", - "description.wurst.hack.step": "Samovýstup celých bloků jako u schodů.", - "description.wurst.hack.throw": "Použije položku vícekrát. Lze použít k vrhání sněhových koulí a vajec, vyvolání mobů, umisťování vozíků, atd. ve velmi velkém množství.\n\nTo může způsobit velké zpomalení a dokonce i pád serveru.", - "description.wurst.hack.tillaura": "Automaticky zorá hlínu, trávu, atd. na zemědělskou půdu.\nNezaměňovat s Killaurou.", - "description.wurst.hack.timer": "Mění rychlost téměř všeho.", - "description.wurst.hack.tired": "Vypadáte jako Alexander v dubnu 2015.\nViditelný jen ostatními hráči.", - "description.wurst.hack.toomanyhax": "Blokuje všechny funkce, které nechcete.\nUmožňuje vám ujistit se, že omylem nepovolíte špatný hack a nedostanete za to ban.\nPro ty, kteří chtějí 'hackovat jen trochu'.\n\nPoužijte příkaz §6.toomanyhax§r pro výběr, které funkce budou zablokovány.\nNapište §6.help toomanyhax§r pro více informací.", - "description.wurst.hack.tp-aura": "Automaticky útočí na nejbližší platnou entitu, zatímco se teleportuje kolem ní.", - "description.wurst.hack.trajectories": "Předvídá dráhu letu šipek a hoditelných předmětů.", - "description.wurst.hack.treebot": "Experimentální bot, který automaticky chodí kolem a kácí stromy.\nProzatím omezeno na malé stromy.", - "description.wurst.hack.triggerbot": "Automaticky zaútočí na entitu, na kterou se díváte.", - "description.wurst.hack.trollpotion": "Vytvoří lektvar s mnoha otravnými účinky.", - "description.wurst.hack.truesight": "Umožňuje vidět neviditelné entity.", - "description.wurst.hack.tunneller": "Automaticky kope tunel.\n\n§c§lUPOZORNĚNÍ:§r I když se tento bot pokusí vyhnout lávě a dalším nebezpečím, není zaručeno, že nezemře. Vyšlete ho jen s výstrojí, o kterou vám nevadí přijít.", - "description.wurst.hack.x-ray": "Zobrazuje rudy skrz bloky.", - "button.wurst.nochatreports.disable_signatures": "Vypnout podpisy", - "button.wurst.nochatreports.re-enable_signatures": "Znovu povolit podpisy", - "description.wurst.setting.generic.attack_speed": "Rychlost útoku v klikách za sekundu.\n0 = dynamicky upravuje rychlost tak, aby odpovídala zpomalení útoku.", - "description.wurst.setting.generic.pause_attack_on_containers": "Nebude útočit, pokud je otevřený inventář (truhly, dávkovače, atd.)\nUžitečné pro minihry, které mají menu, které vypadá jako truhla.", - "description.wurst.altmanager.premium": "Tento alt má heslo a může se připojit ke všem serverům.", - "description.wurst.altmanager.cracked": "Tento alt nemá heslo a bude fungovat pouze na cracknutých serverech.", - "description.wurst.altmanager.failed": "Posledně, když jste se pokoušeli přihlásit s tímhle altem, nefungovalo to.", - "description.wurst.altmanager.checked": "Heslo v minulosti fungovalo.", - "description.wurst.altmanager.unchecked": "S tímto altem jste se nikdy úspěšně nepřihlásili.", - "description.wurst.altmanager.favorite": "Označili jste tento alt jako jeden z vašich oblíbených.", - "description.wurst.altmanager.window": "Toto tlačítko otevře jiné okno.", - "description.wurst.altmanager.window_freeze": "Může to vypadat, že hra neodpovídá, dokud je toto okno otevřené.", - "description.wurst.altmanager.fullscreen": "§cVypnout režim celé obrazovky!", - "gui.wurst.altmanager.folder_error.title": "Nelze vytvořit složku '.Wurst encryption'!", - "gui.wurst.altmanager.folder_error.message": "Možná jste omylem zablokovali Wurstu přístup k této složce.\nAltManager bez ní nemůže šifrovat nebo dešifrovat váš seznam altů.\nStále můžete používat AltManager, ale žádné alty, které nyní vytvoříte, nebudou uloženy.\n\nCelá chyba zní následovně:\n%s", - "gui.wurst.altmanager.empty.title": "Váš seznam altů je prázdný.", - "gui.wurst.altmanager.empty.message": "Chcete na začátek nějaké náhodné alty?", - "gui.wurst.nochatreports.unsafe_server.title": "§4§lVAROVÁNÍ:§r Nebezpečný server", - "toast.wurst.nochatreports.unsafe_server.title": "Zprávy v chatu mohou být nahlášeny", - "toast.wurst.nochatreports.unsafe_server.message": "Zprávy odeslané na tomto serveru mohou být nahlášené do Mojangu, který vás může globálně zabanovat", - "gui.wurst.nochatreports.ncr_mod_server.title": "Server \"No Chat Reports\"", - "button.wurst.nochatreports.signatures_status": "Podpisy: ", - "description.wurst.nochatreports.message_is_reportable": "Tato zpráva má platný podpis, a proto je zranitelná vůči podvodným nahlášením v chatu.", - "gui.wurst.generic.allcaps_blocked": "BLOKOVÁNO", - "gui.wurst.generic.allcaps_allowed": "POVOLENO" -} \ No newline at end of file +{ + "description.wurst.hack.airplace": "Umožňuje umístit bloky do prázdného prostoru.", + "description.wurst.hack.anchoraura": "Automaticky umísťí (volitelně), nabije a odpalí kotvy oživení k zabití entit kolem vás.", + "description.wurst.hack.antiafk": "Prochází se náhodně, aby vás skryl před AFK detektory.", + "description.wurst.hack.antiblind": "Zabraňuje blindness a efekty tmy.\nNekompatibilní s OptiFinem.", + "description.wurst.hack.anticactus": "Chrání vás před poškozením kaktusem.", + "description.wurst.hack.antihunger": "Zpomalí váš hlad, když chodíte.", + "description.wurst.hack.antiknockback": "Zabraní strkání hráči a moby.", + "description.wurst.hack.antispam": "Blokuje spam chatu přidáním čítače k opakovaným zprávám.", + "description.wurst.hack.antiwaterpush": "Zabraňuje posouvání vodou.", + "description.wurst.hack.antiwobble": "Zabraňuje viklavému efektu způsobenému nevolností a portály.", + "description.wurst.hack.arrowdmg": "Masivně zvyšuje poškození šípem, ale také spotřebovává hodně hladu a snižuje přesnost.\n\nNefunguje s kušemi a zdá se nefunkční na Paper serverech.", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "Povolením, trojzubce létají mnohem dál. Nezdá se, že by to mělo vliv na poškození nebo Mocný záběr.\n\n§c§lUPOZORNĚNÍ:§r Povolením této možnosti můžete snadno přijít o trojzubec!", + "description.wurst.hack.autoarmor": "Automaticky přehazuje vaše brnění.", + "description.wurst.hack.autobuild": "Automaticky staví.\nUmístěte blok k započatí stavby.", + "description.wurst.hack.autodrop": "Automaticky vyhazuje nechtěné předměty.", + "description.wurst.hack.autoleave": "Automaticky opustí server, když jsou vaše životy nízké.", + "description.wurst.hack.autoeat": "Automaticky jí jídlo, když je potřeba.", + "description.wurst.setting.autoeat.target_hunger": "Snaží se držet laťku hladu na této úrovni nebo nad ní, ale jen v případě, že nepromrhá žádné body hladu.", + "description.wurst.setting.autoeat.min_hunger": "Vždy udržuje laťku hladu na této úrovni nebo nad ní, i když promrhá některé body hladu.\n6.5 - Nepusobí plýtvání s vanilovými potravinami.\n10.0 - Zcela ignoruje plýtvání a jen udržuje hlad plný.", + "description.wurst.setting.autoeat.injured_hunger": "Naplňuje laťku hladu alespoň na tuto úroveň, když jste zraněni, i když to plýtvá některé body hladu.\n10,0 - nejrychlejší hojení\n9,0 - nejpomalejší hojení\n<9,0 - bez hojení <3,5 - bez sprintu", + "description.wurst.setting.autoeat.injury_threshold": "Zabrání drobným úrazům v plýtvání jídlem. AutoEat vás bude považovat za zraněného pouze v případě, že jste ztratil alespoň tento počet srdcí.", + "description.wurst.setting.autoeat.take_items_from": "Kde by měl AutoEat hledat jídlo.", + "description.wurst.setting.autoeat.eat_while_walking": "Zpomaluje, nedoporučuje se.", + "description.wurst.setting.autoeat.allow_hunger": "Shnilé maso má neškodný \"hladový\" efekt.\nJe bezpečné a užitečné jako nouzové jídlo.", + "description.wurst.setting.autoeat.allow_poison": "Jedovatá potrava časem působí poškození.\n Nedoporučuje se.", + "description.wurst.setting.autoeat.allow_chorus": "Ovoce chorusovníku vás teleportuje na náhodné místo.\nNedoporučuje se.", + "description.wurst.hack.autofarm": "Automaticky sklízí a přesazuje plodiny.\nPracuje s pšenicí, mrkví, bramborami, řepou, dýněmi, melouny, kaktusy, cukrovou třtinou, chaluhou, bambusem, bradavičníkem a kakaovými boby.", + "description.wurst.hack.autofish": "Automaticky chytá ryby pomocí vašeho nejlepšího rybářského prutu. Pokud najde lepší prut při rybaření, automaticky na něj přepne.", + "description.wurst.hack.automine": "Automaticky vytěží jakýkoli blok, na který se podíváte.", + "description.wurst.hack.autopotion": "Automaticky hází lektvary okamžitého zdraví, když je vaše zdraví nízké.", + "description.wurst.hack.autoreconnect": "Automaticky se znovu připojí, když vás vyhodí ze serveru.", + "description.wurst.hack.autorespawn": "Automaticky vás oživí, když zemřete.", + "description.wurst.hack.autosign": "Okamžitě napíše jakýkoliv text, který chcete, na každou ceduli, kterou umístíte. Po aktivaci můžete normálně psát na první ceduli a vytvořit tak šablonu pro všechny ostatní cedule.", + "description.wurst.hack.autosoup": "Automaticky jí polévku, když jsou vaše životy nízké.\n\n§lPoznámka:§r Tento hack ignoruje hlad a předpokládá, že konzumace polévky přímo doplňuje vaše zdraví. Pokud server, na kterém hrajete, není takto nastaven, použijte radši AutoEat.", + "description.wurst.hack.autosprint": "Neustálý sprint.", + "description.wurst.hack.autosteal": "Automaticky ukradne vše ze všech truhel a shulkerových schránek, které otevřete.", + "description.wurst.hack.autoswim": "Automaticky spustí animaci plavání.", + "description.wurst.hack.autoswitch": "Neustále přepíná předmět ve vaší ruce.\n\n§lProRada:§r Použijte to v kombinaci s BuildRandom, zatímco máte ve svém hotbaru spoustu různobarevných vlněných nebo betonových bloků.", + "description.wurst.hack.autosword": "Automaticky použije nejlepší zbraň ve vašem hotbaru k útoku na entity.\nRada: Funguje s Killaurou.", + "description.wurst.hack.autotool": "Automaticky vybaví nejrychlejším použitelným nástroj v hotbaru k rozbití bloku.", + "description.wurst.hack.autototem": "Automaticky přesune totemy nesmrtelnosti do vaší druhé ruky.", + "description.wurst.hack.autowalk": "Neustálá chůze.", + "description.wurst.hack.basefinder": "Vyhledá hráčské základny vyhledáváním uměle vytvořených bloků.\nBloky, které vyhledá, budou zvýrazněny vybranou barvou.\nDobré pro vyhledání frakčních základen.", + "description.wurst.hack.blink": "Pozastaví všechny možnosti pohybu při povolení.", + "description.wurst.hack.boatfly": "Umožňuje vám létat s loďkami a jinými vozidly.\nStiskněte Sprint pro rychlejší klesání.", + "description.wurst.hack.bonemealaura": "Automaticky používá kostní moučku na určité druhy rostlin.\nPomocí zaškrtávacích políček určujete tyto druhy rostlin.", + "description.wurst.hack.bowaimbot": "Automaticky zaměří luk nebo kuši.", + "description.wurst.hack.buildrandom": "Náhodně umísťuje bloky kolem vás.", + "description.wurst.hack.bunnyhop": "Neustálé skákání.", + "description.wurst.hack.cameradistance": "Umožňuje změnit vzdálenost kamery ve 3. osobě.", + "description.wurst.hack.cameranoclip": "Umožňuje kameře ve třetí osobě procházet zdmi.", + "description.wurst.hack.cavefinder": "Pomáhá najít jeskyně tím, že je zvýrazní vybranou barvou.", + "description.wurst.hack.chattranslator": "Překládá příchozí zprávy v chatu pomocí Google Translate.", + "description.wurst.hack.chestesp": "Zvýrazní okolní truhly.", + "description.wurst.hack.clickaura": "S každým kliknutím automaticky zaútočí na nejbližší platnou entitu.\n\n§c§lWAROVÁNÍ:§r ClickAury sjou obecně podezřelejší než Killaury a jsou i snadněji rozpoznatelné pro pluginy. Doporučuje se namísto nich používat buďto Killauru, či TriggerBota.", + "description.wurst.hack.clickgui": "Okenní rozhraní ClickGUI.", + "description.wurst.hack.crashchest": "Generuje truhlu, která lidem v podstatě zakáže přístup k serveru pokud jich mají v inventáři příliš mnoho. §c§lVAROVÁNÍ:§r §cToto nelze vzít zpět. Používejte s opatrností!§r\n\nPokud se místo toho vloží kopie do truhly, každý, kdo truhlu otevře, bude ze serveru jen odpojen (může se znovupřipojit).", + "description.wurst.hack.creativeflight": "Umožňuje létat jako v kreativním režimu.\n\n§c§lVAROVÁNÍ:§r Pokud nepoužíváte NoFall, dojde k zranění pádem.", + "description.wurst.hack.criticals": "Změní všechny vaše údery na kritické.", + "description.wurst.hack.crystalaura": "Automaticky umístí (volitelně) a odpálí endové krystaly, k zabití entit kolem vás.", + "description.wurst.hack.derp": "Šibuje s hlavou do všech stran.\nViditelné jen ostatním hráčům.", + "description.wurst.hack.dolphin": "Neustálé nadskakování ve vodě.\n(úplně jako delfín)", + "description.wurst.hack.excavator": "Automaticky ztěží všechny bloky ve vybrané oblasti.", + "description.wurst.hack.extraelytra": "Usnadňuje používání Elytry.", + "description.wurst.hack.fancychat": "Nahradí ASCII znaky ve vašich zprávách hezčími unicode znaky. Lze využít k obcházení filtru sprostých slov na některých serverech.\nNefunguje na serverech, které blokují znaky unicode.", + "description.wurst.hack.fastbreak": "Umožňuje rozbíjet bloky rychleji.\nTip: Funguje s Nukerem.", + "description.wurst.hack.fastladder": "Umožňuje rychlejší šplhání po žebřících.", + "description.wurst.hack.fastplace": "Umožňuje umístit bloky 5x rychleji.\nRada: Může urychlit další hacky jako AutoBuild.", + "description.wurst.hack.feedaura": "Automaticky krmí zvířata kolem vás.", + "description.wurst.hack.fightbot": "Bot, který automaticky pochoduje kolem a všechno zabíjí.\nDobré pro MobArenu.", + "description.wurst.hack.fish": "Deaktivuje podvodní gravitaci, takže můžete plavat jako ryba.", + "description.wurst.hack.flight": "Umožňuje létat.\n\n§c§lUPOZORNĚNÍ:§r Budete poškozeni pádem, pokud nepoužijete NoFall.", + "description.wurst.hack.follow": "Bot, který následuje nejbližší entitu.\nVelice otravné.\n\nPoužijte .follow pro sledování konkrétní entity.", + "description.wurst.hack.forceop": "Prolomuje AuthMe hesla.\nLze použít k získání OP.", + "description.wurst.hack.freecam": "Umožňuje pohybovat kamerou, aniž byste pohnuli postavou.", + "description.wurst.hack.fullbright": "Umožňuje vidět ve tmě.", + "description.wurst.hack.glide": "Při pádu padáte dolů pomalu.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužíváte NoFall, zraníte se pádem.", + "description.wurst.hack.handnoclip": "Umožňuje dosáhnout určitých bloků skrz zdi.", + "description.wurst.hack.headroll": "Neustále přikyvujete.\nViditelné jen ostatními.", + "description.wurst.hack.healthtags": "Ukazuje zdraví hráčů v jejich jmenovkách.", + "description.wurst.hack.highjump": "Umožňuje skákat výš.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužIJETE NoFall, zraníte se pádem.", + "description.wurst.hack.infinichat": "Odstraňuje limit 256 znaků z chatu.\nUžitečné pro dlouhé příkazy, které upravují data NBT.\n\n§6§lPOZNÁMKA:§r Nedoporučuje se pro komunikaci s ostatníma. Většina serverů na svém konci zkrátí zprávy na 256 znaků.", + "description.wurst.hack.instantbunker": "Postaví kolem vás malý bunkr. Potřebuje 57 bloků.", + "description.wurst.hack.invwalk": "Umožňuje pohyb s otevřeným inventářem.", + "description.wurst.setting.invwalk.allow_clickgui": "Umožňuje pohyb s otevřeným Wurstským ClickGUI.", + "description.wurst.setting.invwalk.allow_other": "Umožňuje pohybovat se s dalšími překrytími (např. truhly, koně, obchodu s vesničany...), pokud obrazovka neobsahuje textové pole (např. cedule).", + "description.wurst.hack.itemesp": "Zvýrazní blízké položky.", + "description.wurst.hack.itemgenerator": "Vytváří náhodné položky a odhazuje je na zem.\n§oPouze v kreativním režiu.§r", + "description.wurst.hack.jesus": "Umožňuje chodit po vodě.\nJežíš použil tento hack asi tak před 2000 lety.", + "description.wurst.hack.jetpack": "Umožňuje létat, jako byste měli jetpack.\n\n§c§lUPOZORNĚNÍ:§r Pokud nepoužijete NoFall, zraníte se pádem.", + "description.wurst.hack.kaboom": "Rozbíjí bloky kolem vás polo-explozí.\nMůže být mnohem rychlejší než Nuker, pokud server nemá NoCheat+. Nejlépe to funguje s rychlými nástroji a slabými bloky.\nPoznámka: Nejedná se o skutečnou explozi.", + "description.wurst.hack.killauralegit": "Pomalejší, hůře detekovatelná Killaura.\nZbytečné na obyčejných NoCheat+ serverech!", + "description.wurst.hack.killaura": "Automaticky útočí na entity kolem vás.", + "description.wurst.hack.killpotion": "Vytvoří lektvar, který může zabít téměř cokoliv, včetně hráčů v kreativním režimu. Nefunguje na nemrtvé, protože jsou již mrtví.\n\nVyžaduje kreativní režim.", + "description.wurst.hack.liquids": "Umožňuje umístit bloky do kapalin.", + "description.wurst.hack.lsd": "Způsobuje halucinace.", + "description.wurst.hack.masstpa": "Odešle požadavek na TPA všem hráčům.", + "description.wurst.hack.mileycyrus": "Neustálé twerkování.", + "description.wurst.hack.mobesp": "Zvýrazní moby v okolí.", + "description.wurst.hack.mobspawnesp": "Zvýrazní oblasti, kde se mohou mobové objevovat.\n§ežlutá§r - mobové se mohou oběvovat v noci\n§cred§r - mobové se mohou oběvovat vždy", + "description.wurst.hack.multiaura": "Rychlejší Killaura, která útočí na více entit najednou.", + "description.wurst.hack.nameprotect": "Skryje jména všech hráčů.", + "description.wurst.hack.nametags": "Změní měřítko jmenovek tak, abyste je mohli vždy číst. Také vám umožní vidět jmenovky krčících se hráčů.", + "description.wurst.hack.navigator": "Prohledávatelné GUI, které se časem naučí vaše preference.", + "description.wurst.hack.newchunks": "Zvýrazní nově generované chunky kolem vás.", + "description.wurst.hack.nobackground": "Odstraní tmavé pozadí za inventářem.", + "description.wurst.hack.noclip": "Umožňuje volný pohyb mezi bloky.\nBlok (např. písek) musí spadnout na vaši hlavu k aktivovaci.\n\n§c§lUPOZORNĚNÍ:§r Při pohybu mezi bloky se budete zraňovat!", + "description.wurst.hack.nocomcrash": "Laguje a shazuje servery Nocom exploitem.\nNefunguje na Paper serverech. Testováno na Vanile, Spigotu a Fabricu. Některé AntiCheaty mohou znemožňovat jeho použití.", + "description.wurst.hack.nofall": "Chrání vás před poškozením pádem.", + "description.wurst.hack.nofireoverlay": "Blokuje překrytí ohně.\n\n§c§lUPOZORNĚNÍ:§r Může způsobit uhoření bez povšimnutí.", + "description.wurst.hack.nohurtcam": "Zakáže třes obrazovky při zranění.", + "description.wurst.hack.nolevitation": "Odstraní efekt levitace, když vás zasáhne Shulker.\n\n§c§lVAROVÁNÍ:§r Pokud toto zapnete během levitace, spadnete!", + "description.wurst.hack.nooverlay": "Blokuje překrytí vody a lávy.", + "description.wurst.hack.nopumpkin": "Blokuje překrytí dýně na hlavě.", + "description.wurst.hack.noslowdown": "Zruší zpomalení medem, písekm duší i používáním itemů.", + "description.wurst.hack.noweather": "Umožňuje změnit počasí, čas a fázi měsíce na straně klienta.", + "description.wurst.hack.noweb": "Zabraňuje zpomalení pavučinami.", + "description.wurst.hack.nuker": "Automaticky ničí bloky kolem vás.", + "description.wurst.hack.nukerlegit": "Pomalejší Nuker, který obchází všechny moduly AntiCheat.\nNení vyžadován na běžných serverech s NoCheat+!", + "description.wurst.hack.openwateresp": "Zobrazí, zda rybaříte na otevřené vodě, nebo ne, a nakreslí ohraničení kolem oblasti, která se považuje za otevřenou vodu.", + "description.wurst.hack.overlay": "Vykreslí Nukerovu animaci, kdykoli vytěžíte blok.", + "description.wurst.hack.panic": "Okamžitě vypne všechny povolené hacky.\nS tímhle opatrně!", + "description.wurst.hack.parkour": "Při dosažení hrany bloku skáčete automaticky.\nUžitečné pro parkoury a skoko-běhách.", + "description.wurst.hack.playeresp": "Zvýrazní okolní hráče.\nESP boxy přátel se zobrazí modře.", + "description.wurst.hack.portalgui": "Umožňuje otevření inventářů v portálech.", + "description.wurst.hack.potionsaver": "Pozastaví všecny efekty lektvarů, dokud stojíte na místě.", + "description.wurst.hack.prophuntesp": "Umožňuje vidět falešné bloky v Prophuntu.\nVyrobeno pro Mineplexí Prophunt. Může však fungovat i na jiných serverech.", + "description.wurst.hack.protect": "Bot, který sleduje nejbližší entitu a chrání ji před ostatními entitami.\nPoužijte .protect k ochraně konkrétní entity místo té nejbližší.", + "description.wurst.hack.radar": "Zobrazí polohu blízkých entit.\n§cčerveně§r - hráči\n§6oranžově§r - monstra\n§azeleně§r - zvířata\n§7šedě§r - ostatní", + "description.wurst.hack.rainbowui": "§cD§aě§9l§cá §av§9š§ce§ac§9h§cn§ao §9k§cr§aá§9s§cn§aě §9b§ca§ar§9e§cv§an§9é§c.", + "description.wurst.hack.reach": "Umožňuje dosáhnout dále.", + "description.wurst.hack.remoteview": "Umožňuje vidět svět pohledem někoho jiného.\nPoužijte příkaz .rv k použití na konkrétní entitu.", + "description.wurst.hack.safewalk": "Zabraňuje pádu z hran.", + "description.wurst.hack.scaffoldwalk": "Automaticky umísťuje bloky pod nohy.", + "description.wurst.hack.search": "Pomáhá najít konkrétní bloky zvýrazněním jich barevně.", + "description.wurst.hack.skinderp": "Náhodně přepíná části postavy.", + "description.wurst.hack.sneak": "Neustálé plížení.", + "description.wurst.hack.snowshoe": "Umožňuje chůzi po prašanu.", + "description.wurst.hack.speedhack": "Umožní vám běžet ~2.5x rychleji, než byste běželi sprintem se skokem.\n\n§6§lVAROVÁNÍ:§r Opraveno v NoCheat+ verzi 3.13.2. Obchází pouze starší verze NoCheat+.\nNapište §l/ncp version§r pro kontrolu verze NoCheat+ na serveru.", + "description.wurst.hack.speednuker": "Rychlejší verze nukeru, která nemůže obejít NoCheat+.", + "description.wurst.hack.spider": "Umožňuje šplhat po zdech jako pavouk.", + "description.wurst.hack.step": "Samovýstup celých bloků jako u schodů.", + "description.wurst.hack.throw": "Použije položku vícekrát. Lze použít k vrhání sněhových koulí a vajec, vyvolání mobů, umisťování vozíků, atd. ve velmi velkém množství.\n\nTo může způsobit velké zpomalení a dokonce i pád serveru.", + "description.wurst.hack.tillaura": "Automaticky zorá hlínu, trávu, atd. na zemědělskou půdu.\nNezaměňovat s Killaurou.", + "description.wurst.hack.timer": "Mění rychlost téměř všeho.", + "description.wurst.hack.tired": "Vypadáte jako Alexander v dubnu 2015.\nViditelný jen ostatními hráči.", + "description.wurst.hack.toomanyhax": "Blokuje všechny funkce, které nechcete.\nUmožňuje vám ujistit se, že omylem nepovolíte špatný hack a nedostanete za to ban.\nPro ty, kteří chtějí 'hackovat jen trochu'.\n\nPoužijte příkaz §6.toomanyhax§r pro výběr, které funkce budou zablokovány.\nNapište §6.help toomanyhax§r pro více informací.", + "description.wurst.hack.tp-aura": "Automaticky útočí na nejbližší platnou entitu, zatímco se teleportuje kolem ní.", + "description.wurst.hack.trajectories": "Předvídá dráhu letu šipek a hoditelných předmětů.", + "description.wurst.hack.treebot": "Experimentální bot, který automaticky chodí kolem a kácí stromy.\nProzatím omezeno na malé stromy.", + "description.wurst.hack.triggerbot": "Automaticky zaútočí na entitu, na kterou se díváte.", + "description.wurst.hack.trollpotion": "Vytvoří lektvar s mnoha otravnými účinky.", + "description.wurst.hack.truesight": "Umožňuje vidět neviditelné entity.", + "description.wurst.hack.tunneller": "Automaticky kope tunel.\n\n§c§lUPOZORNĚNÍ:§r I když se tento bot pokusí vyhnout lávě a dalším nebezpečím, není zaručeno, že nezemře. Vyšlete ho jen s výstrojí, o kterou vám nevadí přijít.", + "description.wurst.hack.x-ray": "Zobrazuje rudy skrz bloky.", + "button.wurst.nochatreports.disable_signatures": "Vypnout podpisy", + "button.wurst.nochatreports.re-enable_signatures": "Znovu povolit podpisy", + "description.wurst.setting.generic.attack_speed": "Rychlost útoku v klikách za sekundu.\n0 = dynamicky upravuje rychlost tak, aby odpovídala zpomalení útoku.", + "description.wurst.setting.generic.pause_attack_on_containers": "Nebude útočit, pokud je otevřený inventář (truhly, dávkovače, atd.)\nUžitečné pro minihry, které mají menu, které vypadá jako truhla.", + "description.wurst.altmanager.premium": "Tento alt má heslo a může se připojit ke všem serverům.", + "description.wurst.altmanager.cracked": "Tento alt nemá heslo a bude fungovat pouze na cracknutých serverech.", + "description.wurst.altmanager.failed": "Posledně, když jste se pokoušeli přihlásit s tímhle altem, nefungovalo to.", + "description.wurst.altmanager.checked": "Heslo v minulosti fungovalo.", + "description.wurst.altmanager.unchecked": "S tímto altem jste se nikdy úspěšně nepřihlásili.", + "description.wurst.altmanager.favorite": "Označili jste tento alt jako jeden z vašich oblíbených.", + "description.wurst.altmanager.window": "Toto tlačítko otevře jiné okno.", + "description.wurst.altmanager.window_freeze": "Může to vypadat, že hra neodpovídá, dokud je toto okno otevřené.", + "description.wurst.altmanager.fullscreen": "§cVypnout režim celé obrazovky!", + "gui.wurst.altmanager.folder_error.title": "Nelze vytvořit složku '.Wurst encryption'!", + "gui.wurst.altmanager.folder_error.message": "Možná jste omylem zablokovali Wurstu přístup k této složce.\nAltManager bez ní nemůže šifrovat nebo dešifrovat váš seznam altů.\nStále můžete používat AltManager, ale žádné alty, které nyní vytvoříte, nebudou uloženy.\n\nCelá chyba zní následovně:\n%s", + "gui.wurst.altmanager.empty.title": "Váš seznam altů je prázdný.", + "gui.wurst.altmanager.empty.message": "Chcete na začátek nějaké náhodné alty?", + "gui.wurst.nochatreports.unsafe_server.title": "§4§lVAROVÁNÍ:§r Nebezpečný server", + "toast.wurst.nochatreports.unsafe_server.title": "Zprávy v chatu mohou být nahlášeny", + "toast.wurst.nochatreports.unsafe_server.message": "Zprávy odeslané na tomto serveru mohou být nahlášené do Mojangu, který vás může globálně zabanovat", + "gui.wurst.nochatreports.ncr_mod_server.title": "Server \"No Chat Reports\"", + "button.wurst.nochatreports.signatures_status": "Podpisy: ", + "description.wurst.nochatreports.message_is_reportable": "Tato zpráva má platný podpis, a proto je zranitelná vůči podvodným nahlášením v chatu.", + "gui.wurst.generic.allcaps_blocked": "BLOKOVÁNO", + "gui.wurst.generic.allcaps_allowed": "POVOLENO" +} diff --git a/src/main/resources/assets/wurst/lang/de_de.json b/src/main/resources/assets/wurst/lang/de_de.json index 7762f504..0c95e32b 100644 --- a/src/main/resources/assets/wurst/lang/de_de.json +++ b/src/main/resources/assets/wurst/lang/de_de.json @@ -138,4 +138,4 @@ "gui.wurst.generic.allcaps_blocked": "BLOCKIERT", "gui.wurst.generic.allcaps_allowed": "ERLAUBT", "key.wurst.zoom": "Zoom" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index 220b1615..832f2a24 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -94,7 +94,7 @@ "description.wurst.hack.fish": "Disables underwater gravity so you can swim like a fish.", "description.wurst.hack.flight": "Allows you to fly.\n\n§c§lWARNING:§r You will take fall damage if you don't use NoFall.", "description.wurst.hack.follow": "A bot that follows the closest entity.\nVery annoying.\n\nUse .follow to follow a specific entity.", - "description.wurst.setting.follow.filter_players": "Won't follow other players.", + "description.wurst.setting.follow.filter_players": "Won't follow other players.", "description.wurst.setting.follow.filter_sleeping": "Won't follow sleeping players.", "description.wurst.setting.follow.filter_flying": "Won't follow players that are at least the given distance above ground.", "description.wurst.setting.follow.filter_neutral": "Won't follow neutral mobs like endermen and wolves.", @@ -103,13 +103,13 @@ "description.wurst.setting.follow.filter_villagers": "Won't follow villagers and wandering traders.", "description.wurst.setting.follow.filter_zombie_villagers": "Won't follow zombified villagers.", "description.wurst.setting.follow.filter_golems": "Won't follow iron golems and snow golems.", - "description.wurst.setting.follow.filter_zombie_piglins": "Won't follow zombified piglins.", - "description.wurst.setting.follow.filter_endermen": "Won't follow endermen.", - "description.wurst.setting.follow.filter_shulkers": "Won't follow shulkers.", - "description.wurst.setting.follow.filter_allays": "Won't follow allays.", - "description.wurst.setting.follow.filter_invisible": "Won't follow invisible entities.", - "description.wurst.setting.follow.filter_armor_stands": "Won't follow armor stands.", - "description.wurst.setting.follow.filter_minecarts": "Won't follow minecarts.", + "description.wurst.setting.follow.filter_zombie_piglins": "Won't follow zombified piglins.", + "description.wurst.setting.follow.filter_endermen": "Won't follow endermen.", + "description.wurst.setting.follow.filter_shulkers": "Won't follow shulkers.", + "description.wurst.setting.follow.filter_allays": "Won't follow allays.", + "description.wurst.setting.follow.filter_invisible": "Won't follow invisible entities.", + "description.wurst.setting.follow.filter_armor_stands": "Won't follow armor stands.", + "description.wurst.setting.follow.filter_minecarts": "Won't follow minecarts.", "description.wurst.hack.forceop": "Cracks AuthMe passwords.\nCan be used to get OP.", "description.wurst.hack.freecam": "Allows you to move the camera without moving your character.", "description.wurst.hack.fullbright": "Allows you to see in the dark.", @@ -215,7 +215,7 @@ "button.wurst.nochatreports.disable_signatures": "Disable Signatures", "button.wurst.nochatreports.re-enable_signatures": "Re-enable Signatures", "description.wurst.setting.generic.attack_speed": "Attack speed in clicks per second.\n0 = dynamically adjusts the speed to match your attack cooldown.", - "description.wurst.setting.generic.filter_allays_combat": "Won't attack allays.", + "description.wurst.setting.generic.filter_allays_combat": "Won't attack allays.", "description.wurst.setting.generic.filter_allays_vision": "Won't show allays.", "description.wurst.setting.generic.filter_armor_stands_combat": "Won't attack armor stands.", "description.wurst.setting.generic.filter_armor_stands_vision": "Won't show armor stands.", @@ -225,11 +225,11 @@ "description.wurst.setting.generic.filter_endermen_combat": "When set to §lOn§r, endermen won't be attacked at all.\n\nWhen set to §lIf calm§r, endermen won't be attacked until they attack first. Be warned that this filter cannot detect if the endermen are attacking you or someone else.\n\nWhen set to §lOff§r, this filter does nothing and endermen can be attacked.", "description.wurst.setting.generic.filter_endermen_vision": "When set to §lOn§r, endermen won't be shown at all.\n\nWhen set to §lIf calm§r, endermen won't be shown until they attack something.\n\nWhen set to §lOff§r, this filter does nothing and endermen can be shown.", "description.wurst.setting.generic.filter_flying_combat": "Won't attack players that are at least the given distance above ground.\n\nUseful for servers that try to detect your hacks by placing a flying bot near you.", - "description.wurst.setting.generic.filter_golems_combat": "Won't attack iron golems and snow golems.", + "description.wurst.setting.generic.filter_golems_combat": "Won't attack iron golems and snow golems.", "description.wurst.setting.generic.filter_golems_vision": "Won't show iron golems and snow golems.", "description.wurst.setting.generic.filter_invisible_combat": "Won't attack invisible entities.", "description.wurst.setting.generic.filter_invisible_vision": "Won't show invisible entities.", - "description.wurst.setting.generic.filter_named_combat": "Won't attack name-tagged entities.", + "description.wurst.setting.generic.filter_named_combat": "Won't attack name-tagged entities.", "description.wurst.setting.generic.filter_named_vision": "Won't show name-tagged entities.", "description.wurst.setting.generic.filter_neutral_combat": "When set to §lOn§r, neutral mobs won't be attacked at all.\n\nWhen set to §lIf calm§r, neutral mobs won't be attacked until they attack first. Be warned that this filter cannot detect if the neutral mobs are attacking you or someone else.\n\nWhen set to §lOff§r, this filter does nothing and neutral mobs can be attacked.", "description.wurst.setting.generic.filter_neutral_vision": "When set to §lOn§r, neutral mobs won't be shown at all.\n\nWhen set to §lIf calm§r, neutral mobs won't be shown until they attack something.\n\nWhen set to §lOff§r, this filter does nothing and neutral mobs can be shown.", @@ -238,16 +238,16 @@ "description.wurst.setting.generic.filter_players_combat": "Won't attack other players.", "description.wurst.setting.generic.filter_players_vision": "Won't show other players.", "description.wurst.setting.generic.filter_shulker_bullets_combat": "Won't attack shulker bullets.", - "description.wurst.setting.generic.filter_shulkers_combat": "Won't attack shulkers.", + "description.wurst.setting.generic.filter_shulkers_combat": "Won't attack shulkers.", "description.wurst.setting.generic.filter_shulkers_vision": "Won't show shulkers.", - "description.wurst.setting.generic.filter_sleeping_combat": "Won't attack sleeping players.\n\nUseful for servers like Mineplex that place sleeping players on the ground to make them look like corpses.", + "description.wurst.setting.generic.filter_sleeping_combat": "Won't attack sleeping players.\n\nUseful for servers like Mineplex that place sleeping players on the ground to make them look like corpses.", "description.wurst.setting.generic.filter_sleeping_vision": "Won't show sleeping players.", - "description.wurst.setting.generic.filter_villagers_combat": "Won't attack villagers and wandering traders.", + "description.wurst.setting.generic.filter_villagers_combat": "Won't attack villagers and wandering traders.", "description.wurst.setting.generic.filter_villagers_vision": "Won't show villagers and wandering traders.", - "description.wurst.setting.generic.filter_zombie_piglins_combat": "When set to §lOn§r, zombified piglins won't be attacked at all.\n\nWhen set to §lIf calm§r, zombified piglins won't be attacked until they attack first. Be warned that this filter cannot detect if the zombified piglins are attacking you or someone else.\n\nWhen set to §lOff§r, this filter does nothing and zombified piglins can be attacked.", + "description.wurst.setting.generic.filter_zombie_piglins_combat": "When set to §lOn§r, zombified piglins won't be attacked at all.\n\nWhen set to §lIf calm§r, zombified piglins won't be attacked until they attack first. Be warned that this filter cannot detect if the zombified piglins are attacking you or someone else.\n\nWhen set to §lOff§r, this filter does nothing and zombified piglins can be attacked.", "description.wurst.setting.generic.filter_zombie_piglins_vision": "When set to §lOn§r, zombified piglins won't be shown at all.\n\nWhen set to §lIf calm§r, zombified piglins won't be shown until they attack something.\n\nWhen set to §lOff§r, this filter does nothing and zombified piglins can be shown.", - "description.wurst.setting.generic.filter_zombie_villagers_combat": "Won't attack zombified villagers.", - "description.wurst.setting.generic.filter_zombie_villagers_vision": "Won't show zombified villagers.", + "description.wurst.setting.generic.filter_zombie_villagers_combat": "Won't attack zombified villagers.", + "description.wurst.setting.generic.filter_zombie_villagers_vision": "Won't show zombified villagers.", "description.wurst.setting.generic.pause_attack_on_containers": "Won't attack while a container screen (chest, hopper, etc.) is open.\nUseful for minigame servers that display chest-like menus.", "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.", @@ -273,4 +273,4 @@ "gui.wurst.generic.allcaps_blocked": "BLOCKED", "gui.wurst.generic.allcaps_allowed": "ALLOWED", "key.wurst.zoom": "Zoom" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/wurst/lang/fr_fr.json b/src/main/resources/assets/wurst/lang/fr_fr.json index 8805efd6..23314663 100644 --- a/src/main/resources/assets/wurst/lang/fr_fr.json +++ b/src/main/resources/assets/wurst/lang/fr_fr.json @@ -1,183 +1,183 @@ -{ - "description.wurst.hack.anchoraura": "Place automatiquement (optionnel), charge et fait exploser les ancres de réapparition pour tuer les entités autour de vous.", - "description.wurst.hack.antiafk": "Marche au hasard pour vous cacher des détecteurs d'AFK.", - "description.wurst.hack.antiblind": "Empêche l'effet cécité et d'obscurité.\nIncompatible avec OptiFine.", - "description.wurst.hack.anticactus": "Vous protège des dommages causés par les cactus.", - "description.wurst.hack.antiknockback": "Vous empêche d'être poussé par les joueurs et les mobs.", - "description.wurst.hack.antispam": "Bloque les spams de chat en ajoutant un compteur aux messages répétés.", - "description.wurst.hack.antiwaterpush": "Vous empêche d'être poussé par l'eau.", - "description.wurst.hack.antiwobble": "Désactive l'effet d'oscillation causé par la nausée et les portails.", - "description.wurst.hack.arrowdmg": "Augmente massivement les dégâts des flèches, mais consomme également beaucoup de faim et réduit la précision. \n\nNe fonctionne pas avec les arbalètes et semble être corrigé sur les serveurs Paper.", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "Lorsqu'il est activé, les tridents volent beaucoup plus loin. Ne semble pas affecter les dégâts ou l'impulsion.\n\n§c§lATTENTION:§r Vous pouvez facilement perdre votre trident en activant cette option !", - "description.wurst.hack.autoarmor": "Gère votre armure automatiquement.", - "description.wurst.hack.autobuild": "Construit les choses automatiquement.\nPlacez un seul bloc pour commencer à construire.", - "description.wurst.hack.autodrop": "Supprime automatiquement les objets indésirables.", - "description.wurst.hack.autoleave": "Quitte automatiquement le serveur lorsque votre santé est faible.", - "description.wurst.hack.autoeat": "Mange automatiquement de la nourriture si nécessaire.", - "description.wurst.setting.autoeat.target_hunger": "Essaie de maintenir la barre de faim à ce niveau ou au-dessus, mais seulement si elle ne gaspille aucun point de faim.", - "description.wurst.setting.autoeat.min_hunger": "Maintient toujours la barre de faim à ce niveau ou au-dessus, même si cela gaspille des points de faim.\n6.5 - Ne peut pas causer de gaspillage avec de la nourriture vanilla.\n10.0 - Ignore complètement le gaspillage et garde juste la barre de la faim pleine.", - "description.wurst.setting.autoeat.injured_hunger": "Remplit la barre de faim au moins à ce niveau lorsque vous êtes blessé, même si cela gaspille des points de faim.\n10.0 - guérison la plus rapide\n9.0 - guérison la plus lente\n<9.0 - pas de guérison\n<3.5 - pas de sprint", - "description.wurst.setting.autoeat.injury_threshold": "Empêche les petites blessures de gaspiller toute votre nourriture. L'AutoEat ne vous considérera comme blessé que si vous avez perdu au moins ce nombre de cœurs.", - "description.wurst.setting.autoeat.take_items_from": "Où l'AutoEat devrait chercher de la nourriture.", - "description.wurst.setting.autoeat.eat_while_walking": "Vous ralentit, non recommandé.", - "description.wurst.setting.autoeat.allow_hunger": "La chair putréfiée applique un effet de \"faim\" inoffensif.\nElle est sûre à manger et utile comme nourriture d'urgence.", - "description.wurst.setting.autoeat.allow_poison": "La nourriture empoisonnée applique des dégâts au fil du temps.\nNon recommandé.", - "description.wurst.setting.autoeat.allow_chorus": "Manger des fruits de chorus vous téléporte à un endroit aléatoire.\nNon recommandé.", - "description.wurst.hack.autofarm": "Récolte et replante les cultures automatiquement.\nFonctionne avec le blé, les carottes, les pommes de terre, les betteraves, les citrouilles, les melons, les cactus, les cannes à sucre, les algues, le bambou, les verrues du nether et les fèves de cacao.", - "description.wurst.hack.autofish": "Attrape automatiquement les poissons en utilisant votre meilleure canne à pêche. S'il trouve une meilleure canne pendant la pêche, il passera automatiquement à celle-ci.", - "description.wurst.hack.automine": "Mine automatiquement n'importe quel bloc que vous regardez.", - "description.wurst.hack.autopotion": "Lance automatiquement des potions jetables de soin instantanée lorsque votre santé est faible.", - "description.wurst.hack.autoreconnect": "Se reconnecte automatiquement lorsque vous êtes expulsé du serveur.", - "description.wurst.hack.autorespawn": "Vous réapparaît automatiquement chaque fois que vous mourez.", - "description.wurst.hack.autosign": "Écrit instantanément le texte que vous voulez sur chaque panneau que vous placez. Une fois activé, vous pouvez écrire normalement sur le premier panneau pour spécifier le texte de tous les autres panneaux.", - "description.wurst.hack.autosoup": "Mange automatiquement de la soupe lorsque votre santé est faible.\n\n§lNote:§r Ce hack ignore la faim et suppose que manger de la soupe recharge directement votre santé. Si le serveur sur lequel vous jouez n'est pas configuré pour cela, utilisez plutôt AutoEat.", - "description.wurst.hack.autosprint": "Vous fait sprinter automatiquement.", - "description.wurst.hack.autosteal": "Vole automatiquement tout dans tous les coffres et boîtes de shulker que vous ouvrez.", - "description.wurst.hack.autoswim": "Déclenche automatiquement l'animation de nage.", - "description.wurst.hack.autoswitch": "Change l'objet dans votre main tout le temps.\n\n§lConseil de Pro:§r Utilisez-le en combinaison avec BuildRandom tout en ayant beaucoup de blocs de laine ou de béton de différentes couleurs dans votre barre de raccourcis.", - "description.wurst.hack.autosword": "Utilise automatiquement la meilleure arme de votre barre de raccourcis pour attaquer les entités.\nConseil: Cela fonctionne avec le Killaura.", - "description.wurst.hack.autotool": "Équipe automatiquement l'outil adéquat le plus rapide dans votre barre de raccourci lorsque vous essayez de casser un bloc.", - "description.wurst.hack.autototem": "Déplace automatiquement les totems d'immortalité vers votre main secondaire.", - "description.wurst.hack.autowalk": "Vous fait marcher automatiquement.", - "description.wurst.hack.basefinder": "Trouve les bases de joueurs en recherchant des blocs artificiels.\nLes blocs qu'il trouve seront mis en surbrillance dans la couleur sélectionnée.\nBon pour trouver des bases de faction.", - "description.wurst.hack.blink": "Suspend toutes les mises à jour de mouvement lorsqu'elles sont activées.", - "description.wurst.hack.boatfly": "Vous permet de voler grâce à un bateau ou à un autre véhicule.\nAppuyez sur la touche de sprint pour descendre plus vite.", - "description.wurst.hack.bonemealaura": "Utilise automatiquement la poudre d'os sur des types de plantes spécifiques.\nCocher des cases pour spécifier les types de plantes.", - "description.wurst.hack.bowaimbot": "Vise automatiquement avec votre arc ou votre arbalète.", - "description.wurst.hack.buildrandom": "Place aléatoirement des blocs autour de vous.", - "description.wurst.hack.bunnyhop": "Vous fait sauter automatiquement.", - "description.wurst.hack.cameranoclip": "Permet à la caméra à la 3ème personne de traverser les murs.", - "description.wurst.hack.cavefinder": "Vous aide à trouver des grottes en les mettant en surbrillance dans la couleur sélectionnée.", - "description.wurst.hack.chattranslator": "Traduit les messages de chat entrants à l'aide de Google Traduction.", - "description.wurst.hack.chestesp": "Met en évidence les coffres à proximité.", - "description.wurst.hack.clickaura": "Attaque automatiquement l'entité valide la plus proche chaque fois que vous cliquez.\n\n§c§lATTENTION:§r ClickAuras semble généralement plus suspect que Killauras et est plus facile à détecter pour les plugins. Il est recommandé d'utiliser Killaura ou TriggerBot à la place.", - "description.wurst.hack.clickgui": "ClickGUI basé sur une fenêtre.", - "description.wurst.hack.crashchest": "Génère un coffre qui bannit essentiellement les gens du serveur s'ils en ont trop de copies dans leur inventaire. §c§lATTENTION:§r §cCela ne peut pas être annulé. Utiliser avec précaution !§r\n\nSi des copies sont plutôt placées dans un coffre, quiconque ouvre le coffre sera expulsé du serveur (une seule fois).", - "description.wurst.hack.creativeflight": "Vous permet de voler comme en mode Créatif.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", - "description.wurst.hack.criticals": "Change tous vos coups en coups critiques.", - "description.wurst.hack.crystalaura": "Place automatiquement (optionel) et fait exploser les cristaux de l'end pour tuer les entités autour de vous.", - "description.wurst.hack.derp": "Bouge la tête au hasard.\nUniquement visible par les autres joueurs.", - "description.wurst.hack.dolphin": "Vous fait sauter dans l'eau automatiquement.\n(juste comme un dophin)", - "description.wurst.hack.excavator": "Casse automatiquement tous les blocs de la zone sélectionnée.", - "description.wurst.hack.extraelytra": "Rend l'Elytre plus facile à utiliser.", - "description.wurst.hack.fancychat": "Remplace les caractères ASCII dans les messages de chat envoyés par des caractères Unicode plus sophistiqués. Peut être utilisé pour contourner les filtres de mots maudits sur certains serveurs.\nNe fonctionne pas sur les serveurs qui bloquent les caractères unicode.", - "description.wurst.hack.fastbreak": "Vous permet de casser des blocs plus rapidement.\nConseil: Cela fonctionne avec le Nuker.", - "description.wurst.hack.fastladder": "Permet de grimper plus rapidement aux échelles.", - "description.wurst.hack.fastplace": "Vous permet de placer des blocs 5 fois plus rapidement.\nConseil: Cela peut accélérer d'autres hacks comme l'AutoBuild.", - "description.wurst.hack.feedaura": "Nourrit automatiquement les animaux autour de vous.", - "description.wurst.hack.fightbot": "Un bot qui se promène automatiquement et tue tout.\nBon pour les MobArena.", - "description.wurst.hack.fish": "Désactive la gravité sous-marine pour que vous puissiez nager comme un poisson.", - "description.wurst.hack.flight": "Permet de voler.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", - "description.wurst.hack.follow": "Un bot qui suit l'entité la plus proche.\nTrès ennuyant.\n\nUtilisez .follow pour suivre une entité spécifique.", - "description.wurst.hack.forceop": "Cracke les mots de passe AuthMe.\nPeut être utilisé pour devenir OP.", - "description.wurst.hack.freecam": "Permet de déplacer la caméra sans déplacer votre personnage.", - "description.wurst.hack.fullbright": "Permet de voir dans le noir.", - "description.wurst.hack.glide": "Vous fait glisser lentement en tombant.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", - "description.wurst.hack.handnoclip": "Vous permet d'atteindre des blocs spécifiques à travers les murs.", - "description.wurst.hack.headroll": "Vous fait hocher la tête tout le temps.\nUniquement visible par les autres joueurs.", - "description.wurst.hack.healthtags": "Affiche la santé des joueurs dans leurs nametags.", - "description.wurst.hack.highjump": "Permet de sauter plus haut.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", - "description.wurst.hack.infinichat": "Supprime la limite de 256 caractères du chat.\nUtile pour les commandes longues qui modifient les données NBT.\n\n§6§lREMARQUE:§r Pas recommandé pour parler aux gens. La plupart des serveurs réduiront les messages à 256 caractères de leur côté.", - "description.wurst.hack.instantbunker": "Construit un petit bunker autour de vous. Nécessite 57 blocs.", - "description.wurst.hack.invwalk": "Permet de se déplacer pendant que l'inventaire est ouvert.", - "description.wurst.setting.invwalk.allow_clickgui": "Vous permet de vous déplacer pendant que le ClickGUI de Wurst est ouvert.", - "description.wurst.setting.invwalk.allow_other": "Vous permet de vous déplacer pendant que d'autres écrans du jeu sont ouverts (par ex: coffre, cheval, vente avec un villageois), à moins que l'écran ne comporte une zone de texte.", - "description.wurst.hack.itemesp": "Met en évidence les objets à proximité.", - "description.wurst.hack.itemgenerator": "Génère des objets aléatoires et les laisse tomber sur le sol.\n§oMode Créatif uniquement.§r", - "description.wurst.hack.jesus": "Permet de marcher sur l'eau.\nJésus a utilisé ce hack il y a environ 2000 ans.", - "description.wurst.hack.jetpack": "Permet de voler comme si vous aviez un jetpack.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", - "description.wurst.hack.kaboom": "Brise les blocs autour de vous comme une explosion.\nCela peut être beaucoup plus rapide que le Nuker si le serveur n'a pas NoCheat+. Cela fonctionne mieux avec des outils rapides et des blocs faibles.\nNote: Ceci n'est pas une véritable explosion.", - "description.wurst.hack.killauralegit": "Killaura plus lent qui est plus difficile à détecter.\nNon requis sur les serveurs NoCheat+ normaux !", - "description.wurst.hack.killaura": "Attaque automatiquement les entités autour de vous.", - "description.wurst.hack.killpotion": "Génère une potion qui peut presque tout tuer, y compris les joueurs en mode Créatif. Ne fonctionne pas sur les monstres morts-vivants, car ils sont déjà morts.\n\nNécessite le mode Créatif.", - "description.wurst.hack.liquids": "Permet de placer des blocs dans des liquides.", - "description.wurst.hack.lsd": "Provoque des hallucinations.", - "description.wurst.hack.masstpa": "Envoie une requête TPA à tous les joueurs.", - "description.wurst.hack.mileycyrus": "Vous fait twerker.", - "description.wurst.hack.mobesp": "Met en évidence les monstres à proximité.", - "description.wurst.hack.mobspawnesp": "Met en évidence les zones où les monstres peuvent apparaître.\n§ejaune§r - les monstres peuvent apparaître la nuit\n§crouge§r - les monstres peuvent toujours apparaître", - "description.wurst.hack.multiaura": "Killaura plus rapide qui attaque plusieurs entités à la fois.", - "description.wurst.hack.nameprotect": "Masque tous les noms de joueurs.", - "description.wurst.hack.nametags": "Modifie l'échelle des nametags de nom afin que vous puissiez toujours les lire. Vous permet également de voir les nametags des joueurs accroupis.", - "description.wurst.hack.navigator": "Une interface graphique consultable qui apprend vos préférences au fil du temps.", - "description.wurst.hack.newchunks": "Surligne les tronçons qui viennent de se générer autour de vous.", - "description.wurst.hack.nobackground": "Supprime le fond sombre derrière les inventaires.", - "description.wurst.hack.noclip": "Vous permet de vous déplacer librement à travers les blocs.\nUn bloc (par exemple du sable) doit tomber sur votre tête pour l'activer.\n\n§c§lATTENTION:§r Vous subirez des dégâts en vous déplaçant à travers les blocs !", - "description.wurst.hack.nocomcrash": "Lags et plantages des serveurs en utilisant l'exploit Nocom.\nNe fonctionne pas sur les serveurs Paper. Testé en Vanilla, Spigot et Fabric. Peut être désactivé par certains AntiCheats.", - "description.wurst.hack.nofall": "Vous protège des dommages causés par les chutes.", - "description.wurst.hack.nofireoverlay": "Bloque l'overlay lorsque vous êtes en feu.\n\n§c§lATTENTION:§r Cela peut vous faire brûler jusqu'à la mort sans que vous vous en apercevez.", - "description.wurst.hack.nohurtcam": "Désactive l'effet de tremblement lorsque vous vous blessez.", - "description.wurst.hack.nolevitation": "Désactive l'effet de lévitation quand vous êtes touché par un Shulker.\n\n§c§lATTENTION:§r Vous tomberez si vous activez ceci alors que l'effet de lévitation est déjà actif!", - "description.wurst.hack.nooverlay": "Bloque les overlays d'eau et de lave.", - "description.wurst.hack.nopumpkin": "Bloque l'overlay lorsque vous portez une citrouille sur la tête.", - "description.wurst.hack.noslowdown": "Annule les effets de lenteur causés par le miel, le sable des âmes et l'utilisation d'objets.", - "description.wurst.hack.noweather": "Vous permet de modifier la météo, l'heure et la phase de lune côté client.", - "description.wurst.hack.noweb": "Vous évite d'être ralenti par les toiles d'araignées.", - "description.wurst.hack.nuker": "Brise automatiquement les blocs autour de vous.", - "description.wurst.hack.nukerlegit": "Nuker plus lent qui contourne tous les plugins AntiCheat.\nNon requis sur les serveurs NoCheat+ normaux !", - "description.wurst.hack.openwateresp": "Indique si vous pêchez ou non dans l'eau libre et dessine un cadre autour de la zone utilisée pour le calcul de l'eau libre.", - "description.wurst.hack.overlay": "Rend l'animation du Nuker chaque fois que vous cassez un bloc.", - "description.wurst.hack.panic": "Désactive instantanément tous les hacks activés.\nSoyez prudent avec celui-ci !", - "description.wurst.hack.parkour": "Vous fait sauter automatiquement lorsque vous atteignez le bord d'un bloc.\nUtile pour les parcours.", - "description.wurst.hack.playeresp": "Met en évidence les joueurs à proximité.\nLes boîtes ESP des amis apparaîtront en bleu.", - "description.wurst.hack.portalgui": "Vous permet d'ouvrir les GUI dans des portails.", - "description.wurst.hack.potionsaver": "Gèle tous les effets de potion pendant que vous êtes immobile.", - "description.wurst.hack.prophuntesp": "Permet de voir les faux blocs dans le Prophunt.\nConçu pour le Prohunt de Mineplex. Peut ne pas fonctionner sur d'autres serveurs.", - "description.wurst.hack.protect": "Un bot qui suit l'entité la plus proche et la protège des autres entités.\nUtilisez .protect pour protéger une entité spécifique au lieu de la plus proche.", - "description.wurst.hack.radar": "Affiche l'emplacement des entités à proximité.\n§crouge§r - joueurs\n§6orange§r - monstres\n§avert§r - animaux\n§7gris§r - autres", - "description.wurst.hack.rainbowui": "§cR§ae§9n§cd §at§9o§cu§at §9c§co§al§9o§cr§aé.", - "description.wurst.hack.reach": "Permet d'atteindre plus loin.", - "description.wurst.hack.remoteview": "Permet de voir le monde comme quelqu'un d'autre.\nUtilisez la commande .rv pour qu'il cible une entité spécifique.", - "description.wurst.hack.safewalk": "Vous empêche de tomber des bords.", - "description.wurst.hack.scaffoldwalk": "Place automatiquement des blocs sous vos pieds.", - "description.wurst.hack.search": "Vous aide à trouver des blocs spécifiques en les mettant en évidence en couleur arc-en-ciel.", - "description.wurst.hack.skinderp": "Bascule aléatoirement des parties de votre skin.", - "description.wurst.hack.sneak": "Vous fait vous s'accroupir automatiquement.", - "description.wurst.hack.snowshoe": "Permet de marcher sur de la poudreuse.", - "description.wurst.hack.speedhack": "Permet de courir ~2.5x plus vite que vous ne le feriez en sprintant et en sautant.\n\n§6§lATTENTION:§r Corrigé avec NoCheat+ version 3.13.2. Ne contournera que les anciennes versions de NoCheat+.\nTapez §l/ncp version§r pour vérifier la version NoCheat+ d'un serveur.", - "description.wurst.hack.speednuker": "Version plus rapide de Nuker qui ne peut pas contourner NoCheat+.", - "description.wurst.hack.spider": "Permet de grimper aux murs comme une araignée.", - "description.wurst.hack.step": "Vous permet d'intensifier les blocs complets.", - "description.wurst.hack.throw": "Utilise un objet plusieurs fois. Peut être utilisé pour lancer des boules de neige et des oeufs, faire apparaître des mobs, placer des minecarts, etc. en très grande quantité.\n\nCela peut causer beaucoup de lag et même planter un serveur.", - "description.wurst.hack.tillaura": "Transforme automatiquement la terre, l'herbe, etc. en terres labourés. À ne pas confondre avec le Killaura.", - "description.wurst.hack.timer": "Change la vitesse de presque tout.", - "description.wurst.hack.tired": "Vous fait ressembler à Alexander en avril 2015.\nUniquement visible par les autres joueurs.", - "description.wurst.hack.toomanyhax": "Bloque toutes les fonctionnalités dont vous ne voulez pas.\nVous permet de vous assurer que vous n'activez pas accidentellement le mauvais hack et que vous n'êtes pas banni pour cela.\nPour ceux qui veulent \"seulement cheat un peu\".\n\nUtilisez la commande §6.toomanyhax§r pour choisir les fonctionnalités à bloquer.\nFaites §6.help toomanyhax§r pour plus d'infos.", - "description.wurst.hack.tp-aura": "Attaque automatiquement l'entité valide la plus proche tout en se téléportant autour d'elle.", - "description.wurst.hack.trajectories": "Prédit la trajectoire de vol des flèches et des objets jetables.", - "description.wurst.hack.treebot": "Un bot expérimental qui se promène et coupe automatiquement les arbres.\nLimité aux petits arbres pour l'instant.", - "description.wurst.hack.triggerbot": "Attaque automatiquement l'entité que vous regardez.", - "description.wurst.hack.trollpotion": "Génère une potion avec de nombreux effets ennuyeux.", - "description.wurst.hack.truesight": "Permet de voir les entités invisibles.", - "description.wurst.hack.tunneller": "Creuse automatiquement un tunnel.\n\n§c§lATTENTION:§r Bien que ce bot essaie d'éviter la lave et d'autres dangers, il n'y a aucune garantie qu'il ne mourra pas. N'envoyez-le qu'avec du matériel que vous ne craignez pas de perdre.", - "description.wurst.hack.x-ray": "Permet de voir les minerais à travers les murs.", - "description.wurst.other_feature.nochatreports": "Désactive les signatures cryptographiques qui depuis la 1.19 sont attachées à vos messages de chat.\n\n§c§lATTENTION: §cSi §cvous §cenvoyez §cun §cmessage §cdans §cle §cchat §cavec §csignature, §cvotre §ccompte §cMinecraft §cpeut §cêtre §csignalé §cet §cêtre §cbanni §cglobalement §cdu §cmultijoueur !§r\n\nMême si vous ne dites que des choses inoffensives dans le chat, vos messages signés peuvent être abusés pour créer un faux signalement de chat qui banni injustement votre compte.\n\nSi vous devez réactiver les signatures de chat pour rejoindre un serveur, envisagez de ne pas utiliser leur chat du tout. Ou jouez sur un compte secondaire que cela ne vous dérange pas de perdre.", - "button.wurst.nochatreports.disable_signatures": "Désactiver les Signatures", - "button.wurst.nochatreports.re-enable_signatures": "Réactiver les Signatures", - "description.wurst.setting.generic.attack_speed": "Vitesse d'attaque en clics par seconde.\n0 = ajuste dynamiquement la vitesse pour correspondre à votre temps de recharge d'attaque.", - "description.wurst.setting.generic.pause_attack_on_containers": "N'attaque pas lorsqu'un écran de conteneur (coffre, entonnoir, etc.) est ouvert.\nUtile pour les serveurs de mini-jeux qui affichent des menus sous forme de coffre.", - "description.wurst.altmanager.premium": "Cet alt a un mot de passe et peut rejoindre tous les serveurs.", - "description.wurst.altmanager.cracked": "Cet alt n'a pas de mot de passe et ne fonctionnera que sur les serveurs cracks.", - "description.wurst.altmanager.failed": "La dernière fois que vous avez essayé de vous connecter avec cet alt, cela n'a pas fonctionné.", - "description.wurst.altmanager.checked": "Le mot de passe a fonctionné dans le passé.", - "description.wurst.altmanager.unchecked": "Vous ne vous êtes jamais connecté avec succès avec cet alt.", - "description.wurst.altmanager.favorite": "Vous avez marqué cet alt comme l'un de vos favoris.", - "description.wurst.altmanager.window": "Ce bouton ouvre une autre fenêtre.", - "description.wurst.altmanager.window_freeze": "Il peut sembler que le jeu ne répond pas lorsque cette fenêtre est ouverte.", - "description.wurst.altmanager.fullscreen": "§cDésactiver le mode plein écran !", - "gui.wurst.altmanager.folder_error.title": "Impossible de créer le dossier '.Wurst encryption' !", - "gui.wurst.altmanager.folder_error.message": "Vous avez peut-être accidentellement bloqué l'accès de Wurst à ce dossier.\nL'AltManager ne peut pas chiffrer ou déchiffrer votre liste d'alt sans lui.\nVous pouvez toujours utiliser l'AltManager, mais les alts que vous créez maintenant ne seront pas enregistrés.\n\nL'erreur complète est la suivante :\n%s", - "gui.wurst.altmanager.empty.title": "Votre liste d'alt est vide.", - "gui.wurst.altmanager.empty.message": "Aimeriez-vous quelques alts aléatoires pour commencer ?", - "gui.wurst.nochatreports.unsafe_server.title": "§4§lATTENTION :§r Serveur non protégé", - "gui.wurst.nochatreports.unsafe_server.message": "Ce serveur nécessite l'activation des signatures de chat, ce qui expose votre compte au risque de signalements de chat frauduleux.\n\nVous pouvez rejoindre ce serveur si vous débloquez les signatures de chat, puis vous reconnectez. Si vous le faites, envisagez de ne pas utiliser le chat du tout. Ou jouez sur un compte secondaire que cela ne vous dérange pas de perdre.\n\nS'il s'agit de votre serveur, vous pouvez résoudre ce problème en définissant 'enforce-secure-profile' sur false dans server.properties. À la manière typique de Mojang, ce paramètre fait le contraire de ce à quoi il ressemble.", - "toast.wurst.nochatreports.unsafe_server.title": "Les messages de chat peuvent être signalés", - "toast.wurst.nochatreports.unsafe_server.message": "Les messages envoyés sur ce serveur peuvent être signalés à Mojang Big Brother et votre compte peut être banni à l'échelle mondiale", - "gui.wurst.nochatreports.ncr_mod_server.title": "Serveur \"No Chat Reports\"", - "gui.wurst.nochatreports.ncr_mod_server.message": "Ce serveur utilise le mod \"No Chat Reports\".\n\nVous pouvez rejoindre ce serveur si vous bloquez les signatures de chat et désactivez le VanillaSpoof.", - "button.wurst.nochatreports.signatures_status": "Signatures: ", - "description.wurst.nochatreports.message_is_reportable": "Ce message a une signature valide et est donc vulnérable aux signalements de chat frauduleux.", - "gui.wurst.generic.allcaps_blocked": "BLOQUÉ", - "gui.wurst.generic.allcaps_allowed": "AUTORISÉ", - "key.wurst.zoom": "Zoom" -} \ No newline at end of file +{ + "description.wurst.hack.anchoraura": "Place automatiquement (optionnel), charge et fait exploser les ancres de réapparition pour tuer les entités autour de vous.", + "description.wurst.hack.antiafk": "Marche au hasard pour vous cacher des détecteurs d'AFK.", + "description.wurst.hack.antiblind": "Empêche l'effet cécité et d'obscurité.\nIncompatible avec OptiFine.", + "description.wurst.hack.anticactus": "Vous protège des dommages causés par les cactus.", + "description.wurst.hack.antiknockback": "Vous empêche d'être poussé par les joueurs et les mobs.", + "description.wurst.hack.antispam": "Bloque les spams de chat en ajoutant un compteur aux messages répétés.", + "description.wurst.hack.antiwaterpush": "Vous empêche d'être poussé par l'eau.", + "description.wurst.hack.antiwobble": "Désactive l'effet d'oscillation causé par la nausée et les portails.", + "description.wurst.hack.arrowdmg": "Augmente massivement les dégâts des flèches, mais consomme également beaucoup de faim et réduit la précision. \n\nNe fonctionne pas avec les arbalètes et semble être corrigé sur les serveurs Paper.", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "Lorsqu'il est activé, les tridents volent beaucoup plus loin. Ne semble pas affecter les dégâts ou l'impulsion.\n\n§c§lATTENTION:§r Vous pouvez facilement perdre votre trident en activant cette option !", + "description.wurst.hack.autoarmor": "Gère votre armure automatiquement.", + "description.wurst.hack.autobuild": "Construit les choses automatiquement.\nPlacez un seul bloc pour commencer à construire.", + "description.wurst.hack.autodrop": "Supprime automatiquement les objets indésirables.", + "description.wurst.hack.autoleave": "Quitte automatiquement le serveur lorsque votre santé est faible.", + "description.wurst.hack.autoeat": "Mange automatiquement de la nourriture si nécessaire.", + "description.wurst.setting.autoeat.target_hunger": "Essaie de maintenir la barre de faim à ce niveau ou au-dessus, mais seulement si elle ne gaspille aucun point de faim.", + "description.wurst.setting.autoeat.min_hunger": "Maintient toujours la barre de faim à ce niveau ou au-dessus, même si cela gaspille des points de faim.\n6.5 - Ne peut pas causer de gaspillage avec de la nourriture vanilla.\n10.0 - Ignore complètement le gaspillage et garde juste la barre de la faim pleine.", + "description.wurst.setting.autoeat.injured_hunger": "Remplit la barre de faim au moins à ce niveau lorsque vous êtes blessé, même si cela gaspille des points de faim.\n10.0 - guérison la plus rapide\n9.0 - guérison la plus lente\n<9.0 - pas de guérison\n<3.5 - pas de sprint", + "description.wurst.setting.autoeat.injury_threshold": "Empêche les petites blessures de gaspiller toute votre nourriture. L'AutoEat ne vous considérera comme blessé que si vous avez perdu au moins ce nombre de cœurs.", + "description.wurst.setting.autoeat.take_items_from": "Où l'AutoEat devrait chercher de la nourriture.", + "description.wurst.setting.autoeat.eat_while_walking": "Vous ralentit, non recommandé.", + "description.wurst.setting.autoeat.allow_hunger": "La chair putréfiée applique un effet de \"faim\" inoffensif.\nElle est sûre à manger et utile comme nourriture d'urgence.", + "description.wurst.setting.autoeat.allow_poison": "La nourriture empoisonnée applique des dégâts au fil du temps.\nNon recommandé.", + "description.wurst.setting.autoeat.allow_chorus": "Manger des fruits de chorus vous téléporte à un endroit aléatoire.\nNon recommandé.", + "description.wurst.hack.autofarm": "Récolte et replante les cultures automatiquement.\nFonctionne avec le blé, les carottes, les pommes de terre, les betteraves, les citrouilles, les melons, les cactus, les cannes à sucre, les algues, le bambou, les verrues du nether et les fèves de cacao.", + "description.wurst.hack.autofish": "Attrape automatiquement les poissons en utilisant votre meilleure canne à pêche. S'il trouve une meilleure canne pendant la pêche, il passera automatiquement à celle-ci.", + "description.wurst.hack.automine": "Mine automatiquement n'importe quel bloc que vous regardez.", + "description.wurst.hack.autopotion": "Lance automatiquement des potions jetables de soin instantanée lorsque votre santé est faible.", + "description.wurst.hack.autoreconnect": "Se reconnecte automatiquement lorsque vous êtes expulsé du serveur.", + "description.wurst.hack.autorespawn": "Vous réapparaît automatiquement chaque fois que vous mourez.", + "description.wurst.hack.autosign": "Écrit instantanément le texte que vous voulez sur chaque panneau que vous placez. Une fois activé, vous pouvez écrire normalement sur le premier panneau pour spécifier le texte de tous les autres panneaux.", + "description.wurst.hack.autosoup": "Mange automatiquement de la soupe lorsque votre santé est faible.\n\n§lNote:§r Ce hack ignore la faim et suppose que manger de la soupe recharge directement votre santé. Si le serveur sur lequel vous jouez n'est pas configuré pour cela, utilisez plutôt AutoEat.", + "description.wurst.hack.autosprint": "Vous fait sprinter automatiquement.", + "description.wurst.hack.autosteal": "Vole automatiquement tout dans tous les coffres et boîtes de shulker que vous ouvrez.", + "description.wurst.hack.autoswim": "Déclenche automatiquement l'animation de nage.", + "description.wurst.hack.autoswitch": "Change l'objet dans votre main tout le temps.\n\n§lConseil de Pro:§r Utilisez-le en combinaison avec BuildRandom tout en ayant beaucoup de blocs de laine ou de béton de différentes couleurs dans votre barre de raccourcis.", + "description.wurst.hack.autosword": "Utilise automatiquement la meilleure arme de votre barre de raccourcis pour attaquer les entités.\nConseil: Cela fonctionne avec le Killaura.", + "description.wurst.hack.autotool": "Équipe automatiquement l'outil adéquat le plus rapide dans votre barre de raccourci lorsque vous essayez de casser un bloc.", + "description.wurst.hack.autototem": "Déplace automatiquement les totems d'immortalité vers votre main secondaire.", + "description.wurst.hack.autowalk": "Vous fait marcher automatiquement.", + "description.wurst.hack.basefinder": "Trouve les bases de joueurs en recherchant des blocs artificiels.\nLes blocs qu'il trouve seront mis en surbrillance dans la couleur sélectionnée.\nBon pour trouver des bases de faction.", + "description.wurst.hack.blink": "Suspend toutes les mises à jour de mouvement lorsqu'elles sont activées.", + "description.wurst.hack.boatfly": "Vous permet de voler grâce à un bateau ou à un autre véhicule.\nAppuyez sur la touche de sprint pour descendre plus vite.", + "description.wurst.hack.bonemealaura": "Utilise automatiquement la poudre d'os sur des types de plantes spécifiques.\nCocher des cases pour spécifier les types de plantes.", + "description.wurst.hack.bowaimbot": "Vise automatiquement avec votre arc ou votre arbalète.", + "description.wurst.hack.buildrandom": "Place aléatoirement des blocs autour de vous.", + "description.wurst.hack.bunnyhop": "Vous fait sauter automatiquement.", + "description.wurst.hack.cameranoclip": "Permet à la caméra à la 3ème personne de traverser les murs.", + "description.wurst.hack.cavefinder": "Vous aide à trouver des grottes en les mettant en surbrillance dans la couleur sélectionnée.", + "description.wurst.hack.chattranslator": "Traduit les messages de chat entrants à l'aide de Google Traduction.", + "description.wurst.hack.chestesp": "Met en évidence les coffres à proximité.", + "description.wurst.hack.clickaura": "Attaque automatiquement l'entité valide la plus proche chaque fois que vous cliquez.\n\n§c§lATTENTION:§r ClickAuras semble généralement plus suspect que Killauras et est plus facile à détecter pour les plugins. Il est recommandé d'utiliser Killaura ou TriggerBot à la place.", + "description.wurst.hack.clickgui": "ClickGUI basé sur une fenêtre.", + "description.wurst.hack.crashchest": "Génère un coffre qui bannit essentiellement les gens du serveur s'ils en ont trop de copies dans leur inventaire. §c§lATTENTION:§r §cCela ne peut pas être annulé. Utiliser avec précaution !§r\n\nSi des copies sont plutôt placées dans un coffre, quiconque ouvre le coffre sera expulsé du serveur (une seule fois).", + "description.wurst.hack.creativeflight": "Vous permet de voler comme en mode Créatif.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", + "description.wurst.hack.criticals": "Change tous vos coups en coups critiques.", + "description.wurst.hack.crystalaura": "Place automatiquement (optionel) et fait exploser les cristaux de l'end pour tuer les entités autour de vous.", + "description.wurst.hack.derp": "Bouge la tête au hasard.\nUniquement visible par les autres joueurs.", + "description.wurst.hack.dolphin": "Vous fait sauter dans l'eau automatiquement.\n(juste comme un dophin)", + "description.wurst.hack.excavator": "Casse automatiquement tous les blocs de la zone sélectionnée.", + "description.wurst.hack.extraelytra": "Rend l'Elytre plus facile à utiliser.", + "description.wurst.hack.fancychat": "Remplace les caractères ASCII dans les messages de chat envoyés par des caractères Unicode plus sophistiqués. Peut être utilisé pour contourner les filtres de mots maudits sur certains serveurs.\nNe fonctionne pas sur les serveurs qui bloquent les caractères unicode.", + "description.wurst.hack.fastbreak": "Vous permet de casser des blocs plus rapidement.\nConseil: Cela fonctionne avec le Nuker.", + "description.wurst.hack.fastladder": "Permet de grimper plus rapidement aux échelles.", + "description.wurst.hack.fastplace": "Vous permet de placer des blocs 5 fois plus rapidement.\nConseil: Cela peut accélérer d'autres hacks comme l'AutoBuild.", + "description.wurst.hack.feedaura": "Nourrit automatiquement les animaux autour de vous.", + "description.wurst.hack.fightbot": "Un bot qui se promène automatiquement et tue tout.\nBon pour les MobArena.", + "description.wurst.hack.fish": "Désactive la gravité sous-marine pour que vous puissiez nager comme un poisson.", + "description.wurst.hack.flight": "Permet de voler.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", + "description.wurst.hack.follow": "Un bot qui suit l'entité la plus proche.\nTrès ennuyant.\n\nUtilisez .follow pour suivre une entité spécifique.", + "description.wurst.hack.forceop": "Cracke les mots de passe AuthMe.\nPeut être utilisé pour devenir OP.", + "description.wurst.hack.freecam": "Permet de déplacer la caméra sans déplacer votre personnage.", + "description.wurst.hack.fullbright": "Permet de voir dans le noir.", + "description.wurst.hack.glide": "Vous fait glisser lentement en tombant.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", + "description.wurst.hack.handnoclip": "Vous permet d'atteindre des blocs spécifiques à travers les murs.", + "description.wurst.hack.headroll": "Vous fait hocher la tête tout le temps.\nUniquement visible par les autres joueurs.", + "description.wurst.hack.healthtags": "Affiche la santé des joueurs dans leurs nametags.", + "description.wurst.hack.highjump": "Permet de sauter plus haut.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", + "description.wurst.hack.infinichat": "Supprime la limite de 256 caractères du chat.\nUtile pour les commandes longues qui modifient les données NBT.\n\n§6§lREMARQUE:§r Pas recommandé pour parler aux gens. La plupart des serveurs réduiront les messages à 256 caractères de leur côté.", + "description.wurst.hack.instantbunker": "Construit un petit bunker autour de vous. Nécessite 57 blocs.", + "description.wurst.hack.invwalk": "Permet de se déplacer pendant que l'inventaire est ouvert.", + "description.wurst.setting.invwalk.allow_clickgui": "Vous permet de vous déplacer pendant que le ClickGUI de Wurst est ouvert.", + "description.wurst.setting.invwalk.allow_other": "Vous permet de vous déplacer pendant que d'autres écrans du jeu sont ouverts (par ex: coffre, cheval, vente avec un villageois), à moins que l'écran ne comporte une zone de texte.", + "description.wurst.hack.itemesp": "Met en évidence les objets à proximité.", + "description.wurst.hack.itemgenerator": "Génère des objets aléatoires et les laisse tomber sur le sol.\n§oMode Créatif uniquement.§r", + "description.wurst.hack.jesus": "Permet de marcher sur l'eau.\nJésus a utilisé ce hack il y a environ 2000 ans.", + "description.wurst.hack.jetpack": "Permet de voler comme si vous aviez un jetpack.\n\n§c§lATTENTION:§r Vous subirez des dégâts de chute si vous n'utilisez pas le NoFall.", + "description.wurst.hack.kaboom": "Brise les blocs autour de vous comme une explosion.\nCela peut être beaucoup plus rapide que le Nuker si le serveur n'a pas NoCheat+. Cela fonctionne mieux avec des outils rapides et des blocs faibles.\nNote: Ceci n'est pas une véritable explosion.", + "description.wurst.hack.killauralegit": "Killaura plus lent qui est plus difficile à détecter.\nNon requis sur les serveurs NoCheat+ normaux !", + "description.wurst.hack.killaura": "Attaque automatiquement les entités autour de vous.", + "description.wurst.hack.killpotion": "Génère une potion qui peut presque tout tuer, y compris les joueurs en mode Créatif. Ne fonctionne pas sur les monstres morts-vivants, car ils sont déjà morts.\n\nNécessite le mode Créatif.", + "description.wurst.hack.liquids": "Permet de placer des blocs dans des liquides.", + "description.wurst.hack.lsd": "Provoque des hallucinations.", + "description.wurst.hack.masstpa": "Envoie une requête TPA à tous les joueurs.", + "description.wurst.hack.mileycyrus": "Vous fait twerker.", + "description.wurst.hack.mobesp": "Met en évidence les monstres à proximité.", + "description.wurst.hack.mobspawnesp": "Met en évidence les zones où les monstres peuvent apparaître.\n§ejaune§r - les monstres peuvent apparaître la nuit\n§crouge§r - les monstres peuvent toujours apparaître", + "description.wurst.hack.multiaura": "Killaura plus rapide qui attaque plusieurs entités à la fois.", + "description.wurst.hack.nameprotect": "Masque tous les noms de joueurs.", + "description.wurst.hack.nametags": "Modifie l'échelle des nametags de nom afin que vous puissiez toujours les lire. Vous permet également de voir les nametags des joueurs accroupis.", + "description.wurst.hack.navigator": "Une interface graphique consultable qui apprend vos préférences au fil du temps.", + "description.wurst.hack.newchunks": "Surligne les tronçons qui viennent de se générer autour de vous.", + "description.wurst.hack.nobackground": "Supprime le fond sombre derrière les inventaires.", + "description.wurst.hack.noclip": "Vous permet de vous déplacer librement à travers les blocs.\nUn bloc (par exemple du sable) doit tomber sur votre tête pour l'activer.\n\n§c§lATTENTION:§r Vous subirez des dégâts en vous déplaçant à travers les blocs !", + "description.wurst.hack.nocomcrash": "Lags et plantages des serveurs en utilisant l'exploit Nocom.\nNe fonctionne pas sur les serveurs Paper. Testé en Vanilla, Spigot et Fabric. Peut être désactivé par certains AntiCheats.", + "description.wurst.hack.nofall": "Vous protège des dommages causés par les chutes.", + "description.wurst.hack.nofireoverlay": "Bloque l'overlay lorsque vous êtes en feu.\n\n§c§lATTENTION:§r Cela peut vous faire brûler jusqu'à la mort sans que vous vous en apercevez.", + "description.wurst.hack.nohurtcam": "Désactive l'effet de tremblement lorsque vous vous blessez.", + "description.wurst.hack.nolevitation": "Désactive l'effet de lévitation quand vous êtes touché par un Shulker.\n\n§c§lATTENTION:§r Vous tomberez si vous activez ceci alors que l'effet de lévitation est déjà actif!", + "description.wurst.hack.nooverlay": "Bloque les overlays d'eau et de lave.", + "description.wurst.hack.nopumpkin": "Bloque l'overlay lorsque vous portez une citrouille sur la tête.", + "description.wurst.hack.noslowdown": "Annule les effets de lenteur causés par le miel, le sable des âmes et l'utilisation d'objets.", + "description.wurst.hack.noweather": "Vous permet de modifier la météo, l'heure et la phase de lune côté client.", + "description.wurst.hack.noweb": "Vous évite d'être ralenti par les toiles d'araignées.", + "description.wurst.hack.nuker": "Brise automatiquement les blocs autour de vous.", + "description.wurst.hack.nukerlegit": "Nuker plus lent qui contourne tous les plugins AntiCheat.\nNon requis sur les serveurs NoCheat+ normaux !", + "description.wurst.hack.openwateresp": "Indique si vous pêchez ou non dans l'eau libre et dessine un cadre autour de la zone utilisée pour le calcul de l'eau libre.", + "description.wurst.hack.overlay": "Rend l'animation du Nuker chaque fois que vous cassez un bloc.", + "description.wurst.hack.panic": "Désactive instantanément tous les hacks activés.\nSoyez prudent avec celui-ci !", + "description.wurst.hack.parkour": "Vous fait sauter automatiquement lorsque vous atteignez le bord d'un bloc.\nUtile pour les parcours.", + "description.wurst.hack.playeresp": "Met en évidence les joueurs à proximité.\nLes boîtes ESP des amis apparaîtront en bleu.", + "description.wurst.hack.portalgui": "Vous permet d'ouvrir les GUI dans des portails.", + "description.wurst.hack.potionsaver": "Gèle tous les effets de potion pendant que vous êtes immobile.", + "description.wurst.hack.prophuntesp": "Permet de voir les faux blocs dans le Prophunt.\nConçu pour le Prohunt de Mineplex. Peut ne pas fonctionner sur d'autres serveurs.", + "description.wurst.hack.protect": "Un bot qui suit l'entité la plus proche et la protège des autres entités.\nUtilisez .protect pour protéger une entité spécifique au lieu de la plus proche.", + "description.wurst.hack.radar": "Affiche l'emplacement des entités à proximité.\n§crouge§r - joueurs\n§6orange§r - monstres\n§avert§r - animaux\n§7gris§r - autres", + "description.wurst.hack.rainbowui": "§cR§ae§9n§cd §at§9o§cu§at §9c§co§al§9o§cr§aé.", + "description.wurst.hack.reach": "Permet d'atteindre plus loin.", + "description.wurst.hack.remoteview": "Permet de voir le monde comme quelqu'un d'autre.\nUtilisez la commande .rv pour qu'il cible une entité spécifique.", + "description.wurst.hack.safewalk": "Vous empêche de tomber des bords.", + "description.wurst.hack.scaffoldwalk": "Place automatiquement des blocs sous vos pieds.", + "description.wurst.hack.search": "Vous aide à trouver des blocs spécifiques en les mettant en évidence en couleur arc-en-ciel.", + "description.wurst.hack.skinderp": "Bascule aléatoirement des parties de votre skin.", + "description.wurst.hack.sneak": "Vous fait vous s'accroupir automatiquement.", + "description.wurst.hack.snowshoe": "Permet de marcher sur de la poudreuse.", + "description.wurst.hack.speedhack": "Permet de courir ~2.5x plus vite que vous ne le feriez en sprintant et en sautant.\n\n§6§lATTENTION:§r Corrigé avec NoCheat+ version 3.13.2. Ne contournera que les anciennes versions de NoCheat+.\nTapez §l/ncp version§r pour vérifier la version NoCheat+ d'un serveur.", + "description.wurst.hack.speednuker": "Version plus rapide de Nuker qui ne peut pas contourner NoCheat+.", + "description.wurst.hack.spider": "Permet de grimper aux murs comme une araignée.", + "description.wurst.hack.step": "Vous permet d'intensifier les blocs complets.", + "description.wurst.hack.throw": "Utilise un objet plusieurs fois. Peut être utilisé pour lancer des boules de neige et des oeufs, faire apparaître des mobs, placer des minecarts, etc. en très grande quantité.\n\nCela peut causer beaucoup de lag et même planter un serveur.", + "description.wurst.hack.tillaura": "Transforme automatiquement la terre, l'herbe, etc. en terres labourés. À ne pas confondre avec le Killaura.", + "description.wurst.hack.timer": "Change la vitesse de presque tout.", + "description.wurst.hack.tired": "Vous fait ressembler à Alexander en avril 2015.\nUniquement visible par les autres joueurs.", + "description.wurst.hack.toomanyhax": "Bloque toutes les fonctionnalités dont vous ne voulez pas.\nVous permet de vous assurer que vous n'activez pas accidentellement le mauvais hack et que vous n'êtes pas banni pour cela.\nPour ceux qui veulent \"seulement cheat un peu\".\n\nUtilisez la commande §6.toomanyhax§r pour choisir les fonctionnalités à bloquer.\nFaites §6.help toomanyhax§r pour plus d'infos.", + "description.wurst.hack.tp-aura": "Attaque automatiquement l'entité valide la plus proche tout en se téléportant autour d'elle.", + "description.wurst.hack.trajectories": "Prédit la trajectoire de vol des flèches et des objets jetables.", + "description.wurst.hack.treebot": "Un bot expérimental qui se promène et coupe automatiquement les arbres.\nLimité aux petits arbres pour l'instant.", + "description.wurst.hack.triggerbot": "Attaque automatiquement l'entité que vous regardez.", + "description.wurst.hack.trollpotion": "Génère une potion avec de nombreux effets ennuyeux.", + "description.wurst.hack.truesight": "Permet de voir les entités invisibles.", + "description.wurst.hack.tunneller": "Creuse automatiquement un tunnel.\n\n§c§lATTENTION:§r Bien que ce bot essaie d'éviter la lave et d'autres dangers, il n'y a aucune garantie qu'il ne mourra pas. N'envoyez-le qu'avec du matériel que vous ne craignez pas de perdre.", + "description.wurst.hack.x-ray": "Permet de voir les minerais à travers les murs.", + "description.wurst.other_feature.nochatreports": "Désactive les signatures cryptographiques qui depuis la 1.19 sont attachées à vos messages de chat.\n\n§c§lATTENTION: §cSi §cvous §cenvoyez §cun §cmessage §cdans §cle §cchat §cavec §csignature, §cvotre §ccompte §cMinecraft §cpeut §cêtre §csignalé §cet §cêtre §cbanni §cglobalement §cdu §cmultijoueur !§r\n\nMême si vous ne dites que des choses inoffensives dans le chat, vos messages signés peuvent être abusés pour créer un faux signalement de chat qui banni injustement votre compte.\n\nSi vous devez réactiver les signatures de chat pour rejoindre un serveur, envisagez de ne pas utiliser leur chat du tout. Ou jouez sur un compte secondaire que cela ne vous dérange pas de perdre.", + "button.wurst.nochatreports.disable_signatures": "Désactiver les Signatures", + "button.wurst.nochatreports.re-enable_signatures": "Réactiver les Signatures", + "description.wurst.setting.generic.attack_speed": "Vitesse d'attaque en clics par seconde.\n0 = ajuste dynamiquement la vitesse pour correspondre à votre temps de recharge d'attaque.", + "description.wurst.setting.generic.pause_attack_on_containers": "N'attaque pas lorsqu'un écran de conteneur (coffre, entonnoir, etc.) est ouvert.\nUtile pour les serveurs de mini-jeux qui affichent des menus sous forme de coffre.", + "description.wurst.altmanager.premium": "Cet alt a un mot de passe et peut rejoindre tous les serveurs.", + "description.wurst.altmanager.cracked": "Cet alt n'a pas de mot de passe et ne fonctionnera que sur les serveurs cracks.", + "description.wurst.altmanager.failed": "La dernière fois que vous avez essayé de vous connecter avec cet alt, cela n'a pas fonctionné.", + "description.wurst.altmanager.checked": "Le mot de passe a fonctionné dans le passé.", + "description.wurst.altmanager.unchecked": "Vous ne vous êtes jamais connecté avec succès avec cet alt.", + "description.wurst.altmanager.favorite": "Vous avez marqué cet alt comme l'un de vos favoris.", + "description.wurst.altmanager.window": "Ce bouton ouvre une autre fenêtre.", + "description.wurst.altmanager.window_freeze": "Il peut sembler que le jeu ne répond pas lorsque cette fenêtre est ouverte.", + "description.wurst.altmanager.fullscreen": "§cDésactiver le mode plein écran !", + "gui.wurst.altmanager.folder_error.title": "Impossible de créer le dossier '.Wurst encryption' !", + "gui.wurst.altmanager.folder_error.message": "Vous avez peut-être accidentellement bloqué l'accès de Wurst à ce dossier.\nL'AltManager ne peut pas chiffrer ou déchiffrer votre liste d'alt sans lui.\nVous pouvez toujours utiliser l'AltManager, mais les alts que vous créez maintenant ne seront pas enregistrés.\n\nL'erreur complète est la suivante :\n%s", + "gui.wurst.altmanager.empty.title": "Votre liste d'alt est vide.", + "gui.wurst.altmanager.empty.message": "Aimeriez-vous quelques alts aléatoires pour commencer ?", + "gui.wurst.nochatreports.unsafe_server.title": "§4§lATTENTION :§r Serveur non protégé", + "gui.wurst.nochatreports.unsafe_server.message": "Ce serveur nécessite l'activation des signatures de chat, ce qui expose votre compte au risque de signalements de chat frauduleux.\n\nVous pouvez rejoindre ce serveur si vous débloquez les signatures de chat, puis vous reconnectez. Si vous le faites, envisagez de ne pas utiliser le chat du tout. Ou jouez sur un compte secondaire que cela ne vous dérange pas de perdre.\n\nS'il s'agit de votre serveur, vous pouvez résoudre ce problème en définissant 'enforce-secure-profile' sur false dans server.properties. À la manière typique de Mojang, ce paramètre fait le contraire de ce à quoi il ressemble.", + "toast.wurst.nochatreports.unsafe_server.title": "Les messages de chat peuvent être signalés", + "toast.wurst.nochatreports.unsafe_server.message": "Les messages envoyés sur ce serveur peuvent être signalés à Mojang Big Brother et votre compte peut être banni à l'échelle mondiale", + "gui.wurst.nochatreports.ncr_mod_server.title": "Serveur \"No Chat Reports\"", + "gui.wurst.nochatreports.ncr_mod_server.message": "Ce serveur utilise le mod \"No Chat Reports\".\n\nVous pouvez rejoindre ce serveur si vous bloquez les signatures de chat et désactivez le VanillaSpoof.", + "button.wurst.nochatreports.signatures_status": "Signatures: ", + "description.wurst.nochatreports.message_is_reportable": "Ce message a une signature valide et est donc vulnérable aux signalements de chat frauduleux.", + "gui.wurst.generic.allcaps_blocked": "BLOQUÉ", + "gui.wurst.generic.allcaps_allowed": "AUTORISÉ", + "key.wurst.zoom": "Zoom" +} diff --git a/src/main/resources/assets/wurst/lang/it_it.json b/src/main/resources/assets/wurst/lang/it_it.json index 84e211cc..8b2095eb 100644 --- a/src/main/resources/assets/wurst/lang/it_it.json +++ b/src/main/resources/assets/wurst/lang/it_it.json @@ -1,185 +1,185 @@ -{ - "description.wurst.hack.airplace": "Permette di posizionare blocchi in mezz'aria.", - "description.wurst.hack.anchoraura": "Posiziona automaticamente (opzionale), carica e fa esplodere le ancore di rigenerazione per uccidere le entità intorno a te.", - "description.wurst.hack.antiafk": "Cammina randomicamente per nasconderti dai detector di player AFK.", - "description.wurst.hack.antiblind": "Previene la cecità ed effetti oscurità.\nIncompatibile con OptiFine.", - "description.wurst.hack.anticactus": "Ti protegge dai danni causati dai cactus.", - "description.wurst.hack.antihunger": "Rallenta la tua fame quando cammini.", - "description.wurst.hack.antiknockback": "Annulla il knockback (non permette alle entità di spingerti).", - "description.wurst.hack.antispam": "Blocca gli spammer in chat mettendo un contatore per i messaggi.", - "description.wurst.hack.antiwaterpush": "Non permette all'acqua di spingerti.", - "description.wurst.hack.antiwobble": "Disattiva l'effetto oscillante causato dalla nausea e dai portali.", - "description.wurst.hack.arrowdmg": "Aumenta significativamente il danno da frecce, ma consuma anche un sacco di fame e riduce la mira.\n\nNon funziona con le balestre e sembra essere cionco nei server con il Paper.", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "Quando abilitato, i tridenti volano molto più lontano. Non sembra influire sul danno o sullo Risacca.\n\n§c§lATTENZIONE:§r Puoi facilmente perdere il tuo tridente abilitando questa opzione!", - "description.wurst.hack.autoarmor": "Gestisce la tua armatura automaticamente.", - "description.wurst.hack.autobuild": "Costruisce cose automaticamente.\nPiazza un blocco per cominciare a costruire.", - "description.wurst.hack.autodrop": "Droppa(toglie dall'inventario) automaticamente gli oggetti indesiderati.", - "description.wurst.hack.autoleave": "Abbandona automaticamente il server quando la tua salute è troppo bassa.", - "description.wurst.hack.autoeat": "Mangia quando necessario automaticamente.", - "description.wurst.setting.autoeat.target_hunger": "Cerca di mantenere la barra della fame a un livello pari o superiore a questo, ma solo se non spreca punti fame.", - "description.wurst.setting.autoeat.min_hunger": "Mantiene sempre la barra della fame a un livello pari o superiore a questo, anche se spreca alcuni punti fame.\n6.5 - Non può causare sprechi con gli alimenti alla vaniglia.\n10.0 - Ignora completamente gli sprechi e mantiene solo la barra della fame piena.", - "description.wurst.setting.autoeat.injured_hunger": "Riempie la barra della fame almeno fino a questo livello quando sei ferito, anche se spreca alcuni punti fame.\n10.0 - guarigione più veloce\n9.0 - guarigione più lenta\n<9.0 - nessuna guarigione\n<3.5 - nessuno scatto", - "description.wurst.setting.autoeat.injury_threshold": "Impedisce alle piccole ferite di sprecare tutto il cibo. AutoEat ti considererà infortunato solo se hai perso almeno questo numero di cuori.", - "description.wurst.setting.autoeat.take_items_from": "Dove AutoEat dovrebbe cercare cibo.", - "description.wurst.setting.autoeat.eat_while_walking": "Ti rallenta, non consigliato.", - "description.wurst.setting.autoeat.allow_hunger": "La carne marcia applica un innocuo effetto di \"fame\".\nÈ sicuro da mangiare e utile come alimento di emergenza.", - "description.wurst.setting.autoeat.allow_poison": "Il cibo velenoso provoca danni nel tempo.\nNon consigliato.", - "description.wurst.setting.autoeat.allow_chorus": "Mangiare il frutto di chorus ti teletrasporta in una posizione casuale.\nNon consigliato.", - "description.wurst.hack.autofarm": "Raccoglie e ripianta i raccolti automaticamente.\nFunziona con grano, carote, patate, barbabietole, zucche, meloni, cactus, canne da zucchero, alghe, bambù, verruche inferiori e fave di cacao.", - "description.wurst.hack.autofish": "Pesca automaticamente utilizzando la canna da pesca migliore. Se trova una migliore canna da pesca pescando, cambia automaticamente quella in uso con quella trovata.", - "description.wurst.hack.automine": "Distrugge ogni blocco che guardi automaticamente.", - "description.wurst.hack.autopotion": "Lancia una pozione di cura istantanea automaticamente quando la tua salute è bassa.", - "description.wurst.hack.autoreconnect": "Ti riconnette automaticamente da un server se vieni cacciato.", - "description.wurst.hack.autorespawn": "Ti fa respawnare automaticamente quando muori.", - "description.wurst.hack.autosign": "Scrive istantaneamente del testo su un qualsiasi cartello che piazzi. Una volta attivato, puoi cominciare a scrivere normalmente sul primo cartello che piazzi, il testo impostato per i cartelli che piazzerai successivamente sarà quello del primo cartello piazzato.", - "description.wurst.hack.autosoup": "Mangia automaticamente la zuppa se la tua salute è bassa.\n\n§lNota:§r Questo hack ignora la fame e presuppone che mangiare zuppa riempia direttamente la tua salute. Se il server su cui stai giocando non è configurato per farlo, usa AutoEat.", - "description.wurst.hack.autosprint": "Corri automaticamente.", - "description.wurst.hack.autosteal": "Ruba automaticamente tutto quello che c'è dentro le casse e gli shulker-box che apri.", - "description.wurst.hack.autoswim": "Attiva automaticamente l'animazione di nuoto.", - "description.wurst.hack.autoswitch": "Cambia continuamente l'oggetto che hai in mano.\n\n§lConsiglio:§r Usalo in combinazione con BuildRandom mentre hai molti blocchi di lana o cemento di colore diverso nella tua hotbar.", - "description.wurst.hack.autosword": "Usa automaticamente l'arma migliore nella tua hotbar per attaccare le entità.\nSuggerimento: funziona bene con la Killaura.", - "description.wurst.hack.autotool": "Equipaggia automaticamente lo strumento più veloce applicabile nella tua hotbar quando provi a rompere un blocco.", - "description.wurst.hack.autototem": "Sposta automaticamente i totem dell'immortalità nella tua mano secondaria.", - "description.wurst.hack.autowalk": "Ti fa camminare automaticamente.", - "description.wurst.hack.basefinder": "Trova le basi dei giocatori cercando i blocchi creati dall'uomo.\nI blocchi che trova verranno evidenziati nel colore selezionato.\nBuono per trovare le basi delle fazioni.", - "description.wurst.hack.blink": "Sospende tutti i motion update mentre è abilitato.", - "description.wurst.hack.boatfly": "Ti permette di volare con barche e altri veicoli.\nPremi il tasto sprint per scendere più velocemente.", - "description.wurst.hack.bonemealaura": "Usa automaticamente la farina d'ossa su tipi specifici di piante.\nUtilizza le caselle di controllo per specificare i tipi di piante.", - "description.wurst.hack.bowaimbot": "Mira automaticamente con l'arco o la balestra.", - "description.wurst.hack.buildrandom": "Piazza blocchi intorno a te in modo casuale.", - "description.wurst.hack.bunnyhop": "Ti fa saltare automaticamente.", - "description.wurst.hack.cameradistance": "Ti permette di cambiare la distanza della fotocamera in 3a persona.", - "description.wurst.hack.cameranoclip": "Consente alla telecamera in terza persona di attraversare i muri.", - "description.wurst.hack.cavefinder": "Ti aiuta a trovare delle caverne evidenziandole con il colore selezionato.", - "description.wurst.hack.chattranslator": "Traduce i messaggi in chat utilizzando Google Translate.", - "description.wurst.hack.chestesp": "Evidenzia le casse vicine.", - "description.wurst.hack.clickaura": "Attacca automaticamente l'entità valida più vicina ogni volta che clicchi.\n\n§c§lAVVERTENZA:§r La ClickAura generalmente sembra più sospetta della Killaura ed è più facile da rilevare per i plugin. Si consiglia invece di utilizzare Killaura o TriggerBot.", - "description.wurst.hack.clickgui": "Una Click-GUI a finestra.", - "description.wurst.hack.crashchest": "Genera una cassa che essenzialmente bandisce le persone dal server se ne hanno troppe copie nel loro inventario. §c§lATTENZIONE:§r §cQuesto non può essere annullato. Usare con cautela!§r\n\nSe invece le copie vengono messe in una cassa, chiunque apra la cassa verrà espulso dal server (solo una volta).", - "description.wurst.hack.creativeflight": "Ti fa volare come se fossi in creativa.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi la NoFall.", - "description.wurst.hack.criticals": "Cambia tutte le tue hit in critiche.", - "description.wurst.hack.crystalaura": "Posiziona automaticamente (opzionale) e fa esplodere i cristalli dell'end per uccidere le entità intorno a te.", - "description.wurst.hack.derp": "Muovi casualmente la testa.\nVisibile solo agli altri giocatori.", - "description.wurst.hack.dolphin": "Ti fa saltare in acqua automaticamente.\n(proprio come un delfino)", - "description.wurst.hack.excavator": "Rompe automaticamente tutti i blocchi nell'area selezionata.", - "description.wurst.hack.extraelytra": "Rende l'Elytra più facile da usare.", - "description.wurst.hack.fancychat": "Sostituisce i caratteri ASCII nei messaggi inviati in chat con caratteri Unicode più elaborati. Può essere utilizzato per aggirare i filtri delle parolacce su alcuni server.\nNon funziona su server che bloccano i caratteri Unicode.", - "description.wurst.hack.fastbreak": "Ti fa rompere i blocchi più velocemente.\nConsiglio: Funziona bene con il Nuker.", - "description.wurst.hack.fastladder": "Ti fa usare le scale a pioli più velocemente.", - "description.wurst.hack.fastplace": "Ti fa piazzare i blocchi 5 volte più velocemente.\nConsiglio: Può rendere più veloci le operazioni fatte con altre hack, come la AutoBuild.", - "description.wurst.hack.feedaura": "Nutre automaticamente gli animali intorno a te.", - "description.wurst.hack.fightbot": "Un bot che cammina e uccide tutti i mob automaticamente.\nBuono per le MobArena.", - "description.wurst.hack.fish": "Disabilita la gravità sott'acqua così puoi nuotare come un pesce.", - "description.wurst.hack.flight": "Ti permette di volare.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi NoFall.", - "description.wurst.hack.follow": "Un bot che segue l'entità più vicina.\nMolto fastidioso.\n\nUsa .follow per scegliere l'entità.", - "description.wurst.hack.forceop": "Cracca le password di AuthMe.\nPuò essere usato per diventare OP.", - "description.wurst.hack.freecam": "Ti permette di muovere la telecamera senza muovere il tuo personaggio.", - "description.wurst.hack.fullbright": "Ti fa vedere meglio al buio.", - "description.wurst.hack.glide": "Ti fa scivolare giù lentamente quando cadi.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi la NoFall.", - "description.wurst.hack.handnoclip": "Ti permette di raggiungere certi oggetti attraverso il muro.", - "description.wurst.hack.headroll": "Ti fa annuire continuamente.\nVisibile solo ad altri giocatori.", - "description.wurst.hack.healthtags": "Mostra la salute dei giocatori nelle loro targhette.", - "description.wurst.hack.highjump": "Ti permette di saltare più in alto.\n\n§c§ATTENZIONE:§r subirai danni da caduta se non usi NoFall.", - "description.wurst.hack.infinichat": "Toglie il limite di 256 caratteri per messaggio nella chat.\nUtile per lunghi comandi che modificano i dati NBT.\n\n§6§lNOTA:§r Non consigliato per parlare con le persone. La maggior parte dei server tagliano i messaggi di oltre 256 caratteri.", - "description.wurst.hack.instantbunker": "Costruisce un piccolo bunker intorno a te. Necessita di 57 blocchi.", - "description.wurst.hack.invwalk": "Ti permette di muoverti mentre l'inventario è aperto.", - "description.wurst.setting.invwalk.allow_clickgui": "Ti permette di muoverti mentre la ClickGUI di Wurst è aperta.", - "description.wurst.setting.invwalk.allow_other": "Permette di muoversi mentre altre schermate di gioco sono aperte (ad esempio ceste, \ncavallo, commercio con i villico), a meno che lo schermo non abbia una casella di testo.", - "description.wurst.hack.itemesp": "Evidenzia gli item vicini.", - "description.wurst.hack.itemgenerator": "Genera item randomici e li butta per terra.\n§oSi può usare solo in modalità creativa.§r", - "description.wurst.hack.jesus": "Ti fa camminare sull'acqua.\nGesù ha usato questa hack circa 2000 anni fa.", - "description.wurst.hack.jetpack": "Ti fa volare come se indossassi un jetpack.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi NoFall.", - "description.wurst.hack.kaboom": "Rompe i blocchi intorno a te come un'esplosione.\nQuesto può essere molto più veloce di Nuker se il server non ha NoCheat+. Funziona al meglio con strumenti veloci e blocchi deboli.\nNota: questa non è una vera esplosione.", - "description.wurst.hack.killauralegit": "La Killaura ma più lenta: più difficile da identificare per gli anticheat.\nNon è necessaria nei server con NoCheat+ standard!", - "description.wurst.hack.killaura": "Attacca automaticamentele entità intorno a te.", - "description.wurst.hack.killpotion": "Genera una pozione che può uccidere quasi tutto, inclusi i giocatori in modalità Creativa. Non funziona sui mob non morti, poiché sono già morti.\n\nRichiede la modalità Creativa.", - "description.wurst.hack.liquids": "Ti permette di piazzare blocchi nei liquidi.", - "description.wurst.hack.lsd": "Causa allucinazioni da LSD.", - "description.wurst.hack.masstpa": "Manda una richiesta di teletrasporto a tutti i giocatori.", - "description.wurst.hack.mileycyrus": "Ti fa twerkare.", - "description.wurst.hack.mobesp": "Evidenzia i mob vicini.", - "description.wurst.hack.mobspawnesp": "Evidenzia le aree dove i mob possono spawnare.\n§egiallo§r - I mob possono nascere durante la notte\n§crosso§r - i mob possono nascere sempre", - "description.wurst.hack.multiaura": "Killaura più veloce che attacca più entità in una sola volta.", - "description.wurst.hack.nameprotect": "Nasconde i nomi dei giocatori.", - "description.wurst.hack.nametags": "Modifica la scala delle targhette in modo da poterle leggere sempre. Ti permette anche di vedere le targhette dei giocatori piegati.", - "description.wurst.hack.navigator": "Una GUI che apprende le tue preferenze nel tempo.", - "description.wurst.hack.newchunks": "Evidenzia i chunk mai visitati intorno a te.", - "description.wurst.hack.nobackground": "Rimuove lo sfondo nero nell'inventario.", - "description.wurst.hack.noclip": "Ti permette di muoverti attraverso i blocchi.\nUn blocco (es. sabbia) deve cadere sulla tua testa per attivarlo.\n\n§c§lATTENZIONE:§r Prenderai danno mentre ti muovi fra i blocchi.", - "description.wurst.hack.nocomcrash": "Crea lag e fa crashare i server usando l'exploit Nocom.\nNon funziona nei server con Paper. Testato su Vanilla, Spigot, e Fabric. Può essere disabilitato da alcuni AntiCheats.", - "description.wurst.hack.nofall": "Ti protegge dal danno da caduta.", - "description.wurst.hack.nofireoverlay": "Blocca le animazioni di quando sei in fiamme.\n\n§c§lATTENZIONE:§r Questo può causare morte per il fuoco senza che tu te ne accorga.", - "description.wurst.hack.nohurtcam": "Disattiva l'oscillamento della telecamera quando ti fai male.", - "description.wurst.hack.nolevitation": "Disabilita l'effetto levitazione quando si viene colpiti da uno Shulker.\n\n§c§lATTENZIONE:§r Cadrai se attiverai questo mentre l'effetto levitazione è già attivo!", - "description.wurst.hack.nooverlay": "Blocca gli overlay di lava e acqua.", - "description.wurst.hack.nopumpkin": "Blocca la copertura di quando indossi una zucca in testa.", - "description.wurst.hack.noslowdown": "Rimuove la lentezza applicata da blocchi come la sabbia delle anime o i blocchi di miele.", - "description.wurst.hack.noweather": "Consente di modificare il tempo, l'ora e le fasi lunari lato client.", - "description.wurst.hack.noweb": "Rimuove la lentezza applicata dalle ragnatele.", - "description.wurst.hack.nuker": "Distrugge i blocchi intorno a te automaticamente.", - "description.wurst.hack.nukerlegit": "Nuker più lento che bypassa tutti i plugin Anti Cheat.\n Non richiesto sui normali server NoCheat+!", - "description.wurst.hack.openwateresp": "Mostra se stai pescando in acque libere e disegna un riquadro intorno all'area utilizzata per il calcolo in acque libere.", - "description.wurst.hack.overlay": "Renderizza l'animazione di Nuker ogni volta che distruggi un blocco.", - "description.wurst.hack.panic": "Disattiva tutte le hack utilizzate.\n Pensa prima di usarlo usi!", - "description.wurst.hack.parkour": "Ti fa saltare automaticamente quando arrivi alla fine di un blocco.\nUtile per i parkour e per le jump'n'runs.", - "description.wurst.hack.playeresp": "Evidenzia i giocatori vicini.\nI riquadri ESP degli amici saranno in blu.", - "description.wurst.hack.portalgui": "Ti permette di aprire le GUI nei portali.", - "description.wurst.hack.potionsaver": "Blocca tutti gli effetti della pozione mentre sei fermo.", - "description.wurst.hack.prophuntesp": "Ti permette di vedere i blocchi falsi in PropHunt.\n Fatto per la PropHunt di Mineplex. Potrebbe non funzionare su altri server.", - "description.wurst.hack.protect": "Un bot che segue l'entità più vicina e la protegge da altre entità.\nUsa .protect per proteggere un'entità specifica invece di quella più vicina.", - "description.wurst.hack.radar": "Mostra la posizione delle entità vicine.\n§crosso§r - Giocatori\n§6arancione§r - Mostri\n§averde§r - Animali\n§7grigio§r - Altro", - "description.wurst.hack.rainbowui": "§cT§au§9t§ct§ao §9d§ci§av§9e§cn§at§9a §ca§ar§9c§co§ab§9a§cl§ae§9n§co.", - "description.wurst.hack.reach": "Ti permette di andare più lontano.", - "description.wurst.hack.remoteview": "Ti permette di vedere il mondo come qualcun altro.\nUsa il comando .rv per farlo mirare a un'entità specifica.", - "description.wurst.hack.safewalk": "Ti impedisce di cadere dai bordi.", - "description.wurst.hack.scaffoldwalk": "Posiziona automaticamente i blocchi sotto i tuoi piedi.", - "description.wurst.hack.search": "Ti aiuta a trovare blocchi specifici evidenziandoli nel colore dell'arcobaleno.", - "description.wurst.hack.skinderp": "Alterna casualmente parti della tua pelle.", - "description.wurst.hack.sneak": "Ti fa piegare automaticamente.", - "description.wurst.hack.snowshoe": "Consente di camminare su neve farinosa.", - "description.wurst.hack.speedhack": "Ti permette di correre circa 2.5 volte più velocemente di quanto faresti facendo sprint e salti.\n\n§6§lAVVERTENZA:§r Patchato in NoCheat+ versione 3.13.2. Ignorerà solo le versioni precedenti di NoCheat+.\nDigitare §l/ncp version§r per controllare la versione NoCheat+ di un server.", - "description.wurst.hack.speednuker": "Versione più veloce della Nuker che non ti fa bypassare gli Anticheat.", - "description.wurst.hack.spider": "Ti permette di arrampicarti sui muri come un ragno.", - "description.wurst.hack.step": "Ti consente di camminare di blocchi completi.", - "description.wurst.hack.throw": "Utilizza un oggetto più volte. Può essere usato per lanciare palle di neve e uova, generare mob, posizionare carrelli da miniera, ecc. in grandi quantità.\n\nCiò può causare molto ritardo e persino mandare in crash un server.", - "description.wurst.hack.tillaura": "Trasforma automaticamente terra, erba, ecc. in terreno agricolo.\nDa non confondere con Killaura.", - "description.wurst.hack.timer": "Cambia la velocità di quasi tutto.", - "description.wurst.hack.tired": "Ti fa sembrare Alexander nell'aprile 2015.\nVisibile solo ad altri giocatori.", - "description.wurst.hack.toomanyhax": "Blocca tutte le funzionalità che non desideri.\nTi permette di assicurarti di non abilitare accidentalmente l'hacking sbagliato e di essere bannato per questo.\nPer coloro che vogliono \"hackerare solo un po'\".\n \nUtilizzare il comando §6.toomanyhax§r per scegliere quali funzioni bloccare.\nDigitare §6.help toomanyhax§r per ulteriori informazioni.", - "description.wurst.hack.tp-aura": "Attacca automaticamente l'entità valida più vicina mentre si teletrasporta intorno ad essa.", - "description.wurst.hack.trajectories": "Predice la traiettoria di volo di frecce e oggetti lanciabili.", - "description.wurst.hack.treebot": "Un bot sperimentale che cammina automaticamente e abbatte gli alberi.\nPer ora limitato ai piccoli alberi.", - "description.wurst.hack.triggerbot": "Attacca automaticamente l'entità che stai guardando.", - "description.wurst.hack.trollpotion": "Genera una pozione con molti effetti fastidiosi su di essa.", - "description.wurst.hack.truesight": "Ti permette di vedere entità invisibili.", - "description.wurst.hack.tunneller": "Scava automaticamente un tunnel.\n\n§c§lATTENZIONE:§r Sebbene questo bot cercherà di evitare la lava e altri pericoli, non vi è alcuna garanzia che non muoia. Invialo solo con equipaggiamento che non ti dispiace perdere.", - "description.wurst.hack.x-ray": "Ti permette di vedere i minerali attraverso i muri.", - "description.wurst.other_feature.nochatreports": "Disabilita le firme crittografiche che dalla 1.19 sono allegate ai tuoi messaggi di chat.\n\n§c§lATTENZIONE: §cSe §ctu §cinvii §cchat §cmessaggi §ccon §cfirme, §cil §ctuo §cL'account §cMinecraft §cpuò §cessere §csegnalato §ce §ca §clivello §cglobale §cbandito §cdal §cmultiplayer!§r\n\nAnche se dici solo cose innocue in chat, i tuoi messaggi firmati possono essere maltrattati per creare un falso rapporto di chat che faccia bannare il tuo account ingiustamente.\n\nSe devi riattivare le firme della chat per unirti a un server, considera di non utilizzare affatto la loro chat. Oppure gioca con un account alternativo che non ti dispiace perdere.", - "button.wurst.nochatreports.disable_signatures": "Disabilita firme", - "button.wurst.nochatreports.re-enable_signatures": "Riattiva le firme", - "description.wurst.setting.generic.attack_speed": "Velocità d'attacco in clic al secondo.\n0 = regola dinamicamente la velocità in base al tempo di recupero dell'attacco.", - "description.wurst.setting.generic.pause_attack_on_containers": "Non attaccherà mentre è aperta la schermata di un container (forziere, tramoggia, ecc.).\nUtile per i server di minigiochi che mostrano menu simili a forzieri.", - "description.wurst.altmanager.premium": "Questo alt ha una password e può unirsi a tutti i server.", - "description.wurst.altmanager.cracked": "Questo alt non ha password e funzionerà solo su server crackati.", - "description.wurst.altmanager.failed": "L'ultima volta che hai provato ad accedere con questo alt, non ha funzionato.", - "description.wurst.altmanager.checked": "La password ha funzionato in passato.", - "description.wurst.altmanager.unchecked": "Non hai mai effettuato correttamente l'accesso con questa alt.", - "description.wurst.altmanager.favorite": "Hai contrassegnato questo alt come uno dei tuoi preferiti.", - "description.wurst.altmanager.window": "Questo pulsante apre un'altra finestra.", - "description.wurst.altmanager.window_freeze": "Potrebbe sembrare che il gioco non risponda mentre quella finestra è aperta.", - "description.wurst.altmanager.fullscreen": "§cDisattiva la modalità a schermo intero!", - "gui.wurst.altmanager.folder_error.title": "Non è stato possibile creare la cartella '.Wurst encryption'!", - "gui.wurst.altmanager.folder_error.message": "Potresti aver accidentalmente bloccato l'accesso a questa cartella.\nAltManager non può cifrare o decifrare la tua lista alt senza di essa.\nPuoi ancora usare AltManager, ma qualsiasi alt che crei ora non verrà salvato.\n\nL'errore completo è il seguente:\n%s", - "gui.wurst.altmanager.empty.title": "La tua lista alt è vuota.", - "gui.wurst.altmanager.empty.message": "Vorresti creare qualche alt casuale per iniziare?", - "gui.wurst.nochatreports.unsafe_server.title": "§4§lATTENZIONE:§r Server Non Sicuro", - "gui.wurst.nochatreports.unsafe_server.message": "Questo server richiede che le firme di chat siano abilitate, il che mette il tuo account a rischio di chat report.\n\nPuoi unirti a questo server se sblocchi le firme di chat e poi riconnetterti. Se lo fai, considera di non usare la chat. O giocare su un account alt che non ti dispiace perdere.\n\nSe questo è il tuo server, puoi risolvere questo problema impostando 'enforce-secure-profile' su false nelle server.properties. Nell tipico Mojang fashion, questa impostazione fa l'opposto di quello che dice.", - "toast.wurst.nochatreports.unsafe_server.title": "I messaggi in chat possono essere segnalati", - "toast.wurst.nochatreports.unsafe_server.message": "I messaggi in questo server possono essere segnalati alla Mojang e forse il tuo account può essere bannato globalmente", - "gui.wurst.nochatreports.ncr_mod_server.title": "Server \"No Chat Reports\"", - "gui.wurst.nochatreports.ncr_mod_server.message": "Questo server utilizza la mod \"No Chat Reports\".\n\nPuoi unirti a questo server se blocchi le firme di chat e disabiliti VanillaSpoof.", - "button.wurst.nochatreports.signatures_status": "Firme: ", - "description.wurst.nochatreports.message_is_reportable": "Questo messaggio ha una firma valida ed è quindi vulnerabile ai chat reports.", - "gui.wurst.generic.allcaps_blocked": "BLOCCATO", - "gui.wurst.generic.allcaps_allowed": "PERMESSO" -} \ No newline at end of file +{ + "description.wurst.hack.airplace": "Permette di posizionare blocchi in mezz'aria.", + "description.wurst.hack.anchoraura": "Posiziona automaticamente (opzionale), carica e fa esplodere le ancore di rigenerazione per uccidere le entità intorno a te.", + "description.wurst.hack.antiafk": "Cammina randomicamente per nasconderti dai detector di player AFK.", + "description.wurst.hack.antiblind": "Previene la cecità ed effetti oscurità.\nIncompatibile con OptiFine.", + "description.wurst.hack.anticactus": "Ti protegge dai danni causati dai cactus.", + "description.wurst.hack.antihunger": "Rallenta la tua fame quando cammini.", + "description.wurst.hack.antiknockback": "Annulla il knockback (non permette alle entità di spingerti).", + "description.wurst.hack.antispam": "Blocca gli spammer in chat mettendo un contatore per i messaggi.", + "description.wurst.hack.antiwaterpush": "Non permette all'acqua di spingerti.", + "description.wurst.hack.antiwobble": "Disattiva l'effetto oscillante causato dalla nausea e dai portali.", + "description.wurst.hack.arrowdmg": "Aumenta significativamente il danno da frecce, ma consuma anche un sacco di fame e riduce la mira.\n\nNon funziona con le balestre e sembra essere cionco nei server con il Paper.", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "Quando abilitato, i tridenti volano molto più lontano. Non sembra influire sul danno o sullo Risacca.\n\n§c§lATTENZIONE:§r Puoi facilmente perdere il tuo tridente abilitando questa opzione!", + "description.wurst.hack.autoarmor": "Gestisce la tua armatura automaticamente.", + "description.wurst.hack.autobuild": "Costruisce cose automaticamente.\nPiazza un blocco per cominciare a costruire.", + "description.wurst.hack.autodrop": "Droppa(toglie dall'inventario) automaticamente gli oggetti indesiderati.", + "description.wurst.hack.autoleave": "Abbandona automaticamente il server quando la tua salute è troppo bassa.", + "description.wurst.hack.autoeat": "Mangia quando necessario automaticamente.", + "description.wurst.setting.autoeat.target_hunger": "Cerca di mantenere la barra della fame a un livello pari o superiore a questo, ma solo se non spreca punti fame.", + "description.wurst.setting.autoeat.min_hunger": "Mantiene sempre la barra della fame a un livello pari o superiore a questo, anche se spreca alcuni punti fame.\n6.5 - Non può causare sprechi con gli alimenti alla vaniglia.\n10.0 - Ignora completamente gli sprechi e mantiene solo la barra della fame piena.", + "description.wurst.setting.autoeat.injured_hunger": "Riempie la barra della fame almeno fino a questo livello quando sei ferito, anche se spreca alcuni punti fame.\n10.0 - guarigione più veloce\n9.0 - guarigione più lenta\n<9.0 - nessuna guarigione\n<3.5 - nessuno scatto", + "description.wurst.setting.autoeat.injury_threshold": "Impedisce alle piccole ferite di sprecare tutto il cibo. AutoEat ti considererà infortunato solo se hai perso almeno questo numero di cuori.", + "description.wurst.setting.autoeat.take_items_from": "Dove AutoEat dovrebbe cercare cibo.", + "description.wurst.setting.autoeat.eat_while_walking": "Ti rallenta, non consigliato.", + "description.wurst.setting.autoeat.allow_hunger": "La carne marcia applica un innocuo effetto di \"fame\".\nÈ sicuro da mangiare e utile come alimento di emergenza.", + "description.wurst.setting.autoeat.allow_poison": "Il cibo velenoso provoca danni nel tempo.\nNon consigliato.", + "description.wurst.setting.autoeat.allow_chorus": "Mangiare il frutto di chorus ti teletrasporta in una posizione casuale.\nNon consigliato.", + "description.wurst.hack.autofarm": "Raccoglie e ripianta i raccolti automaticamente.\nFunziona con grano, carote, patate, barbabietole, zucche, meloni, cactus, canne da zucchero, alghe, bambù, verruche inferiori e fave di cacao.", + "description.wurst.hack.autofish": "Pesca automaticamente utilizzando la canna da pesca migliore. Se trova una migliore canna da pesca pescando, cambia automaticamente quella in uso con quella trovata.", + "description.wurst.hack.automine": "Distrugge ogni blocco che guardi automaticamente.", + "description.wurst.hack.autopotion": "Lancia una pozione di cura istantanea automaticamente quando la tua salute è bassa.", + "description.wurst.hack.autoreconnect": "Ti riconnette automaticamente da un server se vieni cacciato.", + "description.wurst.hack.autorespawn": "Ti fa respawnare automaticamente quando muori.", + "description.wurst.hack.autosign": "Scrive istantaneamente del testo su un qualsiasi cartello che piazzi. Una volta attivato, puoi cominciare a scrivere normalmente sul primo cartello che piazzi, il testo impostato per i cartelli che piazzerai successivamente sarà quello del primo cartello piazzato.", + "description.wurst.hack.autosoup": "Mangia automaticamente la zuppa se la tua salute è bassa.\n\n§lNota:§r Questo hack ignora la fame e presuppone che mangiare zuppa riempia direttamente la tua salute. Se il server su cui stai giocando non è configurato per farlo, usa AutoEat.", + "description.wurst.hack.autosprint": "Corri automaticamente.", + "description.wurst.hack.autosteal": "Ruba automaticamente tutto quello che c'è dentro le casse e gli shulker-box che apri.", + "description.wurst.hack.autoswim": "Attiva automaticamente l'animazione di nuoto.", + "description.wurst.hack.autoswitch": "Cambia continuamente l'oggetto che hai in mano.\n\n§lConsiglio:§r Usalo in combinazione con BuildRandom mentre hai molti blocchi di lana o cemento di colore diverso nella tua hotbar.", + "description.wurst.hack.autosword": "Usa automaticamente l'arma migliore nella tua hotbar per attaccare le entità.\nSuggerimento: funziona bene con la Killaura.", + "description.wurst.hack.autotool": "Equipaggia automaticamente lo strumento più veloce applicabile nella tua hotbar quando provi a rompere un blocco.", + "description.wurst.hack.autototem": "Sposta automaticamente i totem dell'immortalità nella tua mano secondaria.", + "description.wurst.hack.autowalk": "Ti fa camminare automaticamente.", + "description.wurst.hack.basefinder": "Trova le basi dei giocatori cercando i blocchi creati dall'uomo.\nI blocchi che trova verranno evidenziati nel colore selezionato.\nBuono per trovare le basi delle fazioni.", + "description.wurst.hack.blink": "Sospende tutti i motion update mentre è abilitato.", + "description.wurst.hack.boatfly": "Ti permette di volare con barche e altri veicoli.\nPremi il tasto sprint per scendere più velocemente.", + "description.wurst.hack.bonemealaura": "Usa automaticamente la farina d'ossa su tipi specifici di piante.\nUtilizza le caselle di controllo per specificare i tipi di piante.", + "description.wurst.hack.bowaimbot": "Mira automaticamente con l'arco o la balestra.", + "description.wurst.hack.buildrandom": "Piazza blocchi intorno a te in modo casuale.", + "description.wurst.hack.bunnyhop": "Ti fa saltare automaticamente.", + "description.wurst.hack.cameradistance": "Ti permette di cambiare la distanza della fotocamera in 3a persona.", + "description.wurst.hack.cameranoclip": "Consente alla telecamera in terza persona di attraversare i muri.", + "description.wurst.hack.cavefinder": "Ti aiuta a trovare delle caverne evidenziandole con il colore selezionato.", + "description.wurst.hack.chattranslator": "Traduce i messaggi in chat utilizzando Google Translate.", + "description.wurst.hack.chestesp": "Evidenzia le casse vicine.", + "description.wurst.hack.clickaura": "Attacca automaticamente l'entità valida più vicina ogni volta che clicchi.\n\n§c§lAVVERTENZA:§r La ClickAura generalmente sembra più sospetta della Killaura ed è più facile da rilevare per i plugin. Si consiglia invece di utilizzare Killaura o TriggerBot.", + "description.wurst.hack.clickgui": "Una Click-GUI a finestra.", + "description.wurst.hack.crashchest": "Genera una cassa che essenzialmente bandisce le persone dal server se ne hanno troppe copie nel loro inventario. §c§lATTENZIONE:§r §cQuesto non può essere annullato. Usare con cautela!§r\n\nSe invece le copie vengono messe in una cassa, chiunque apra la cassa verrà espulso dal server (solo una volta).", + "description.wurst.hack.creativeflight": "Ti fa volare come se fossi in creativa.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi la NoFall.", + "description.wurst.hack.criticals": "Cambia tutte le tue hit in critiche.", + "description.wurst.hack.crystalaura": "Posiziona automaticamente (opzionale) e fa esplodere i cristalli dell'end per uccidere le entità intorno a te.", + "description.wurst.hack.derp": "Muovi casualmente la testa.\nVisibile solo agli altri giocatori.", + "description.wurst.hack.dolphin": "Ti fa saltare in acqua automaticamente.\n(proprio come un delfino)", + "description.wurst.hack.excavator": "Rompe automaticamente tutti i blocchi nell'area selezionata.", + "description.wurst.hack.extraelytra": "Rende l'Elytra più facile da usare.", + "description.wurst.hack.fancychat": "Sostituisce i caratteri ASCII nei messaggi inviati in chat con caratteri Unicode più elaborati. Può essere utilizzato per aggirare i filtri delle parolacce su alcuni server.\nNon funziona su server che bloccano i caratteri Unicode.", + "description.wurst.hack.fastbreak": "Ti fa rompere i blocchi più velocemente.\nConsiglio: Funziona bene con il Nuker.", + "description.wurst.hack.fastladder": "Ti fa usare le scale a pioli più velocemente.", + "description.wurst.hack.fastplace": "Ti fa piazzare i blocchi 5 volte più velocemente.\nConsiglio: Può rendere più veloci le operazioni fatte con altre hack, come la AutoBuild.", + "description.wurst.hack.feedaura": "Nutre automaticamente gli animali intorno a te.", + "description.wurst.hack.fightbot": "Un bot che cammina e uccide tutti i mob automaticamente.\nBuono per le MobArena.", + "description.wurst.hack.fish": "Disabilita la gravità sott'acqua così puoi nuotare come un pesce.", + "description.wurst.hack.flight": "Ti permette di volare.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi NoFall.", + "description.wurst.hack.follow": "Un bot che segue l'entità più vicina.\nMolto fastidioso.\n\nUsa .follow per scegliere l'entità.", + "description.wurst.hack.forceop": "Cracca le password di AuthMe.\nPuò essere usato per diventare OP.", + "description.wurst.hack.freecam": "Ti permette di muovere la telecamera senza muovere il tuo personaggio.", + "description.wurst.hack.fullbright": "Ti fa vedere meglio al buio.", + "description.wurst.hack.glide": "Ti fa scivolare giù lentamente quando cadi.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi la NoFall.", + "description.wurst.hack.handnoclip": "Ti permette di raggiungere certi oggetti attraverso il muro.", + "description.wurst.hack.headroll": "Ti fa annuire continuamente.\nVisibile solo ad altri giocatori.", + "description.wurst.hack.healthtags": "Mostra la salute dei giocatori nelle loro targhette.", + "description.wurst.hack.highjump": "Ti permette di saltare più in alto.\n\n§c§ATTENZIONE:§r subirai danni da caduta se non usi NoFall.", + "description.wurst.hack.infinichat": "Toglie il limite di 256 caratteri per messaggio nella chat.\nUtile per lunghi comandi che modificano i dati NBT.\n\n§6§lNOTA:§r Non consigliato per parlare con le persone. La maggior parte dei server tagliano i messaggi di oltre 256 caratteri.", + "description.wurst.hack.instantbunker": "Costruisce un piccolo bunker intorno a te. Necessita di 57 blocchi.", + "description.wurst.hack.invwalk": "Ti permette di muoverti mentre l'inventario è aperto.", + "description.wurst.setting.invwalk.allow_clickgui": "Ti permette di muoverti mentre la ClickGUI di Wurst è aperta.", + "description.wurst.setting.invwalk.allow_other": "Permette di muoversi mentre altre schermate di gioco sono aperte (ad esempio ceste, \ncavallo, commercio con i villico), a meno che lo schermo non abbia una casella di testo.", + "description.wurst.hack.itemesp": "Evidenzia gli item vicini.", + "description.wurst.hack.itemgenerator": "Genera item randomici e li butta per terra.\n§oSi può usare solo in modalità creativa.§r", + "description.wurst.hack.jesus": "Ti fa camminare sull'acqua.\nGesù ha usato questa hack circa 2000 anni fa.", + "description.wurst.hack.jetpack": "Ti fa volare come se indossassi un jetpack.\n\n§c§lATTENZIONE:§r Prenderai danno da caduta se non usi NoFall.", + "description.wurst.hack.kaboom": "Rompe i blocchi intorno a te come un'esplosione.\nQuesto può essere molto più veloce di Nuker se il server non ha NoCheat+. Funziona al meglio con strumenti veloci e blocchi deboli.\nNota: questa non è una vera esplosione.", + "description.wurst.hack.killauralegit": "La Killaura ma più lenta: più difficile da identificare per gli anticheat.\nNon è necessaria nei server con NoCheat+ standard!", + "description.wurst.hack.killaura": "Attacca automaticamentele entità intorno a te.", + "description.wurst.hack.killpotion": "Genera una pozione che può uccidere quasi tutto, inclusi i giocatori in modalità Creativa. Non funziona sui mob non morti, poiché sono già morti.\n\nRichiede la modalità Creativa.", + "description.wurst.hack.liquids": "Ti permette di piazzare blocchi nei liquidi.", + "description.wurst.hack.lsd": "Causa allucinazioni da LSD.", + "description.wurst.hack.masstpa": "Manda una richiesta di teletrasporto a tutti i giocatori.", + "description.wurst.hack.mileycyrus": "Ti fa twerkare.", + "description.wurst.hack.mobesp": "Evidenzia i mob vicini.", + "description.wurst.hack.mobspawnesp": "Evidenzia le aree dove i mob possono spawnare.\n§egiallo§r - I mob possono nascere durante la notte\n§crosso§r - i mob possono nascere sempre", + "description.wurst.hack.multiaura": "Killaura più veloce che attacca più entità in una sola volta.", + "description.wurst.hack.nameprotect": "Nasconde i nomi dei giocatori.", + "description.wurst.hack.nametags": "Modifica la scala delle targhette in modo da poterle leggere sempre. Ti permette anche di vedere le targhette dei giocatori piegati.", + "description.wurst.hack.navigator": "Una GUI che apprende le tue preferenze nel tempo.", + "description.wurst.hack.newchunks": "Evidenzia i chunk mai visitati intorno a te.", + "description.wurst.hack.nobackground": "Rimuove lo sfondo nero nell'inventario.", + "description.wurst.hack.noclip": "Ti permette di muoverti attraverso i blocchi.\nUn blocco (es. sabbia) deve cadere sulla tua testa per attivarlo.\n\n§c§lATTENZIONE:§r Prenderai danno mentre ti muovi fra i blocchi.", + "description.wurst.hack.nocomcrash": "Crea lag e fa crashare i server usando l'exploit Nocom.\nNon funziona nei server con Paper. Testato su Vanilla, Spigot, e Fabric. Può essere disabilitato da alcuni AntiCheats.", + "description.wurst.hack.nofall": "Ti protegge dal danno da caduta.", + "description.wurst.hack.nofireoverlay": "Blocca le animazioni di quando sei in fiamme.\n\n§c§lATTENZIONE:§r Questo può causare morte per il fuoco senza che tu te ne accorga.", + "description.wurst.hack.nohurtcam": "Disattiva l'oscillamento della telecamera quando ti fai male.", + "description.wurst.hack.nolevitation": "Disabilita l'effetto levitazione quando si viene colpiti da uno Shulker.\n\n§c§lATTENZIONE:§r Cadrai se attiverai questo mentre l'effetto levitazione è già attivo!", + "description.wurst.hack.nooverlay": "Blocca gli overlay di lava e acqua.", + "description.wurst.hack.nopumpkin": "Blocca la copertura di quando indossi una zucca in testa.", + "description.wurst.hack.noslowdown": "Rimuove la lentezza applicata da blocchi come la sabbia delle anime o i blocchi di miele.", + "description.wurst.hack.noweather": "Consente di modificare il tempo, l'ora e le fasi lunari lato client.", + "description.wurst.hack.noweb": "Rimuove la lentezza applicata dalle ragnatele.", + "description.wurst.hack.nuker": "Distrugge i blocchi intorno a te automaticamente.", + "description.wurst.hack.nukerlegit": "Nuker più lento che bypassa tutti i plugin Anti Cheat.\n Non richiesto sui normali server NoCheat+!", + "description.wurst.hack.openwateresp": "Mostra se stai pescando in acque libere e disegna un riquadro intorno all'area utilizzata per il calcolo in acque libere.", + "description.wurst.hack.overlay": "Renderizza l'animazione di Nuker ogni volta che distruggi un blocco.", + "description.wurst.hack.panic": "Disattiva tutte le hack utilizzate.\n Pensa prima di usarlo usi!", + "description.wurst.hack.parkour": "Ti fa saltare automaticamente quando arrivi alla fine di un blocco.\nUtile per i parkour e per le jump'n'runs.", + "description.wurst.hack.playeresp": "Evidenzia i giocatori vicini.\nI riquadri ESP degli amici saranno in blu.", + "description.wurst.hack.portalgui": "Ti permette di aprire le GUI nei portali.", + "description.wurst.hack.potionsaver": "Blocca tutti gli effetti della pozione mentre sei fermo.", + "description.wurst.hack.prophuntesp": "Ti permette di vedere i blocchi falsi in PropHunt.\n Fatto per la PropHunt di Mineplex. Potrebbe non funzionare su altri server.", + "description.wurst.hack.protect": "Un bot che segue l'entità più vicina e la protegge da altre entità.\nUsa .protect per proteggere un'entità specifica invece di quella più vicina.", + "description.wurst.hack.radar": "Mostra la posizione delle entità vicine.\n§crosso§r - Giocatori\n§6arancione§r - Mostri\n§averde§r - Animali\n§7grigio§r - Altro", + "description.wurst.hack.rainbowui": "§cT§au§9t§ct§ao §9d§ci§av§9e§cn§at§9a §ca§ar§9c§co§ab§9a§cl§ae§9n§co.", + "description.wurst.hack.reach": "Ti permette di andare più lontano.", + "description.wurst.hack.remoteview": "Ti permette di vedere il mondo come qualcun altro.\nUsa il comando .rv per farlo mirare a un'entità specifica.", + "description.wurst.hack.safewalk": "Ti impedisce di cadere dai bordi.", + "description.wurst.hack.scaffoldwalk": "Posiziona automaticamente i blocchi sotto i tuoi piedi.", + "description.wurst.hack.search": "Ti aiuta a trovare blocchi specifici evidenziandoli nel colore dell'arcobaleno.", + "description.wurst.hack.skinderp": "Alterna casualmente parti della tua pelle.", + "description.wurst.hack.sneak": "Ti fa piegare automaticamente.", + "description.wurst.hack.snowshoe": "Consente di camminare su neve farinosa.", + "description.wurst.hack.speedhack": "Ti permette di correre circa 2.5 volte più velocemente di quanto faresti facendo sprint e salti.\n\n§6§lAVVERTENZA:§r Patchato in NoCheat+ versione 3.13.2. Ignorerà solo le versioni precedenti di NoCheat+.\nDigitare §l/ncp version§r per controllare la versione NoCheat+ di un server.", + "description.wurst.hack.speednuker": "Versione più veloce della Nuker che non ti fa bypassare gli Anticheat.", + "description.wurst.hack.spider": "Ti permette di arrampicarti sui muri come un ragno.", + "description.wurst.hack.step": "Ti consente di camminare di blocchi completi.", + "description.wurst.hack.throw": "Utilizza un oggetto più volte. Può essere usato per lanciare palle di neve e uova, generare mob, posizionare carrelli da miniera, ecc. in grandi quantità.\n\nCiò può causare molto ritardo e persino mandare in crash un server.", + "description.wurst.hack.tillaura": "Trasforma automaticamente terra, erba, ecc. in terreno agricolo.\nDa non confondere con Killaura.", + "description.wurst.hack.timer": "Cambia la velocità di quasi tutto.", + "description.wurst.hack.tired": "Ti fa sembrare Alexander nell'aprile 2015.\nVisibile solo ad altri giocatori.", + "description.wurst.hack.toomanyhax": "Blocca tutte le funzionalità che non desideri.\nTi permette di assicurarti di non abilitare accidentalmente l'hacking sbagliato e di essere bannato per questo.\nPer coloro che vogliono \"hackerare solo un po'\".\n \nUtilizzare il comando §6.toomanyhax§r per scegliere quali funzioni bloccare.\nDigitare §6.help toomanyhax§r per ulteriori informazioni.", + "description.wurst.hack.tp-aura": "Attacca automaticamente l'entità valida più vicina mentre si teletrasporta intorno ad essa.", + "description.wurst.hack.trajectories": "Predice la traiettoria di volo di frecce e oggetti lanciabili.", + "description.wurst.hack.treebot": "Un bot sperimentale che cammina automaticamente e abbatte gli alberi.\nPer ora limitato ai piccoli alberi.", + "description.wurst.hack.triggerbot": "Attacca automaticamente l'entità che stai guardando.", + "description.wurst.hack.trollpotion": "Genera una pozione con molti effetti fastidiosi su di essa.", + "description.wurst.hack.truesight": "Ti permette di vedere entità invisibili.", + "description.wurst.hack.tunneller": "Scava automaticamente un tunnel.\n\n§c§lATTENZIONE:§r Sebbene questo bot cercherà di evitare la lava e altri pericoli, non vi è alcuna garanzia che non muoia. Invialo solo con equipaggiamento che non ti dispiace perdere.", + "description.wurst.hack.x-ray": "Ti permette di vedere i minerali attraverso i muri.", + "description.wurst.other_feature.nochatreports": "Disabilita le firme crittografiche che dalla 1.19 sono allegate ai tuoi messaggi di chat.\n\n§c§lATTENZIONE: §cSe §ctu §cinvii §cchat §cmessaggi §ccon §cfirme, §cil §ctuo §cL'account §cMinecraft §cpuò §cessere §csegnalato §ce §ca §clivello §cglobale §cbandito §cdal §cmultiplayer!§r\n\nAnche se dici solo cose innocue in chat, i tuoi messaggi firmati possono essere maltrattati per creare un falso rapporto di chat che faccia bannare il tuo account ingiustamente.\n\nSe devi riattivare le firme della chat per unirti a un server, considera di non utilizzare affatto la loro chat. Oppure gioca con un account alternativo che non ti dispiace perdere.", + "button.wurst.nochatreports.disable_signatures": "Disabilita firme", + "button.wurst.nochatreports.re-enable_signatures": "Riattiva le firme", + "description.wurst.setting.generic.attack_speed": "Velocità d'attacco in clic al secondo.\n0 = regola dinamicamente la velocità in base al tempo di recupero dell'attacco.", + "description.wurst.setting.generic.pause_attack_on_containers": "Non attaccherà mentre è aperta la schermata di un container (forziere, tramoggia, ecc.).\nUtile per i server di minigiochi che mostrano menu simili a forzieri.", + "description.wurst.altmanager.premium": "Questo alt ha una password e può unirsi a tutti i server.", + "description.wurst.altmanager.cracked": "Questo alt non ha password e funzionerà solo su server crackati.", + "description.wurst.altmanager.failed": "L'ultima volta che hai provato ad accedere con questo alt, non ha funzionato.", + "description.wurst.altmanager.checked": "La password ha funzionato in passato.", + "description.wurst.altmanager.unchecked": "Non hai mai effettuato correttamente l'accesso con questa alt.", + "description.wurst.altmanager.favorite": "Hai contrassegnato questo alt come uno dei tuoi preferiti.", + "description.wurst.altmanager.window": "Questo pulsante apre un'altra finestra.", + "description.wurst.altmanager.window_freeze": "Potrebbe sembrare che il gioco non risponda mentre quella finestra è aperta.", + "description.wurst.altmanager.fullscreen": "§cDisattiva la modalità a schermo intero!", + "gui.wurst.altmanager.folder_error.title": "Non è stato possibile creare la cartella '.Wurst encryption'!", + "gui.wurst.altmanager.folder_error.message": "Potresti aver accidentalmente bloccato l'accesso a questa cartella.\nAltManager non può cifrare o decifrare la tua lista alt senza di essa.\nPuoi ancora usare AltManager, ma qualsiasi alt che crei ora non verrà salvato.\n\nL'errore completo è il seguente:\n%s", + "gui.wurst.altmanager.empty.title": "La tua lista alt è vuota.", + "gui.wurst.altmanager.empty.message": "Vorresti creare qualche alt casuale per iniziare?", + "gui.wurst.nochatreports.unsafe_server.title": "§4§lATTENZIONE:§r Server Non Sicuro", + "gui.wurst.nochatreports.unsafe_server.message": "Questo server richiede che le firme di chat siano abilitate, il che mette il tuo account a rischio di chat report.\n\nPuoi unirti a questo server se sblocchi le firme di chat e poi riconnetterti. Se lo fai, considera di non usare la chat. O giocare su un account alt che non ti dispiace perdere.\n\nSe questo è il tuo server, puoi risolvere questo problema impostando 'enforce-secure-profile' su false nelle server.properties. Nell tipico Mojang fashion, questa impostazione fa l'opposto di quello che dice.", + "toast.wurst.nochatreports.unsafe_server.title": "I messaggi in chat possono essere segnalati", + "toast.wurst.nochatreports.unsafe_server.message": "I messaggi in questo server possono essere segnalati alla Mojang e forse il tuo account può essere bannato globalmente", + "gui.wurst.nochatreports.ncr_mod_server.title": "Server \"No Chat Reports\"", + "gui.wurst.nochatreports.ncr_mod_server.message": "Questo server utilizza la mod \"No Chat Reports\".\n\nPuoi unirti a questo server se blocchi le firme di chat e disabiliti VanillaSpoof.", + "button.wurst.nochatreports.signatures_status": "Firme: ", + "description.wurst.nochatreports.message_is_reportable": "Questo messaggio ha una firma valida ed è quindi vulnerabile ai chat reports.", + "gui.wurst.generic.allcaps_blocked": "BLOCCATO", + "gui.wurst.generic.allcaps_allowed": "PERMESSO" +} diff --git a/src/main/resources/assets/wurst/lang/ja_jp.json b/src/main/resources/assets/wurst/lang/ja_jp.json index d920e099..d8606d22 100644 --- a/src/main/resources/assets/wurst/lang/ja_jp.json +++ b/src/main/resources/assets/wurst/lang/ja_jp.json @@ -256,4 +256,4 @@ "gui.wurst.generic.allcaps_blocked": "ブロックされました", "gui.wurst.generic.allcaps_allowed": "許可された", "key.wurst.zoom": "拡大" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/wurst/lang/ko_kr.json b/src/main/resources/assets/wurst/lang/ko_kr.json index 6e83ef6a..fcd99e04 100644 --- a/src/main/resources/assets/wurst/lang/ko_kr.json +++ b/src/main/resources/assets/wurst/lang/ko_kr.json @@ -1,153 +1,153 @@ -{ - "description.wurst.hack.aimassist": "주변 엔티티를 조준하는 데 도움을 줍니다.", - "description.wurst.hack.airplace": "공중에 블록을 배치할 수 있게 해줍니다.", - "description.wurst.hack.antiafk": "자리비움 검출기에서 숨기기 위해 무작위로 이동합니다.", - "description.wurst.hack.antiblind": "실명 및 어둠 효과를 방지합니다.\nOptiFine과 호환되지 않습니다.", - "description.wurst.hack.anticactus": "선인장 대미지를 받지 않습니다.", - "description.wurst.hack.antientitypush": "다른 플레이어나 몹에게 밀려나는 것을 방지합니다.", - "description.wurst.hack.antihunger": "걷는 동안 배고픔 속도를 늦춥니다.", - "description.wurst.hack.antiknockback": "플레이어나 몹으로부터 넉백을 받지 않도록 합니다.", - "description.wurst.hack.antispam": "반복된 메시지에 카운터를 추가하여 채팅 스팸을 차단합니다.", - "description.wurst.hack.antiwaterpush": "물에 밀리는 것을 방지합니다.", - "description.wurst.hack.autoarmor": "자동으로 방어구를 관리합니다.", - "description.wurst.hack.autobuild": "자동으로 건물을 건설합니다.\n한 개의 블록을 놓으면 건설을 시작합니다.", - "description.wurst.hack.autocomplete": "대형 언어 모델을 사용하여 채팅 메시지를 자동 완성합니다. OpenAI 계정 API 접근 권한 또는 OpenAI와 호환되는 다른 언어 모델 API가 필요합니다.", - "description.wurst.hack.autodrop": "원하지 않는 아이템을 자동으로 버립니다.", - "description.wurst.hack.autoleave": "체력이 낮을 때 자동으로 서버에서 나갑니다.", - "description.wurst.hack.autolibrarian": "특정 인챈트된 책을 판매하는 마을 주민을 자동으로 훈련합니다. 이 핵을 사용하면 전체 거래 구간을 짧은 시간 내에 설정할 수 있습니다.", - "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.eat_while_walking": "걷는 동안 음식을 먹는 것은 속도를 늦춥니다. 권장하지 않습니다.", - "description.wurst.setting.autoeat.allow_poison": "독성 음식은 시간 경과에 따라 피해를 입힙니다.\n권장하지 않습니다.", - "description.wurst.hack.autofarm": "곡물, 당근, 감자, 비트, 호박, 수박, 선인장, 사탕수수, 켈프, 대나무, 네더 와트, 코코아 열매에 대해 자동으로 작물을 수확하고 다시 심습니다.", - "description.wurst.hack.autofish": "최고의 낚싯대를 사용하여 자동으로 물고기를 잡습니다. 물고기를 잡는 동안 더 좋은 낚싯대를 발견하면 자동으로 전환됩니다.", - "description.wurst.hack.automine": "시선을 정한 블록을 자동으로 채굴합니다.", - "description.wurst.hack.autopotion": "체력이 낮을 때 즉시 회복 물약을 자동으로 던집니다.", - "description.wurst.hack.autoreconnect": "서버에서 강제 퇴장당할 경우 자동으로 재접속합니다.", - "description.wurst.hack.autorespawn": "죽을 경우 자동으로 리스폰합니다.", - "description.wurst.hack.autosign": "원하는 글을 모든 표지판에 즉시 작성합니다. 활성화된 후 첫 번째 표지판에 일반적으로 글을 작성하여 모든 다른 표지판에 적용할 수 있습니다.", - "description.wurst.hack.autosoup": "체력이 낮을 때 자동으로 수프를 먹습니다.\n\n§l참고:§r 이 해킹 기능은 배고픔을 무시하고 수프를 직접 먹으면 체력이 회복된다고 가정합니다. 만약 이 기능이 서버에서 설정되어 있지 않다면 AutoEat을 사용하세요.", - "description.wurst.hack.autosprint": "자동으로 달립니다.", - "description.wurst.hack.autosteal": "여는 모든 상자와 셜커 상자에서 모든 것을 자동으로 훔칩니다.", - "description.wurst.hack.autoswim": "수영 애니메이션을 자동으로 실행합니다.", - "description.wurst.hack.autoswitch": "항상 손에 들고 있는 아이템을 전환합니다.\n\n§l팁:§r 이 기능은 다양한 색의 양털 또는 콘크리트 블록을 핫바에 넣고 BuildRandom과 함께 사용하는 것이 좋습니다.", - "description.wurst.hack.autowalk": "자동으로 걷게 해줍니다.", - "description.wurst.hack.basefinder": "인공 블록을 검색하여 베이스를 찾습니다.\n찾은 블록은 선택한 색상으로 강조됩니다.\nFaction 기지를 찾는 데 유용합니다.", - "description.wurst.hack.buildrandom": "주변에 무작위로 블록을 배치합니다.", - "description.wurst.hack.bunnyhop": "자동으로 점프합니다.", - "description.wurst.hack.cameradistance": "카메라 거리를 3인칭에서 변경할 수 있습니다.", - "description.wurst.hack.cameranoclip": "카메라가 벽을 통과할 수 있습니다(3인칭).", - "description.wurst.hack.cavefinder": "선택한 색상으로 동굴을 강조하여 찾도록 도와줍니다.", - "description.wurst.hack.chattranslator": "구글 번역을 이용하여 채팅을 번역합니다.", - "description.wurst.hack.chestesp": "주변의 상자를 강조합니다.", - "description.wurst.hack.clickaura": "클릭할 때 가장 가까운 유효한 엔티티를 자동으로 공격합니다.\n\n§c§l경고:§r ClickAura는 Killaura보다 더욱 의심스러워 보이며, 플러그인에 탐지되기 쉽습니다. 대신 Killaura나 TriggerBot을 사용하는 것이 좋습니다.", - "description.wurst.hack.creativeflight": "크리에이티브 모드와 같이 비행할 수 있습니다.\n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 대미지를 입을 수 있습니다.", - "description.wurst.hack.criticals": "모든 공격을 크리티컬로 변경합니다.", - "description.wurst.hack.derp": "머리를 무작위로 움직입니다.\n다른 플레이어에게만 보입니다.", - "description.wurst.hack.dolphin": "물 속에서 자동으로 위아래로 움직이도록 합니다.\n(돌고래처럼)", - "description.wurst.hack.excavator": "선택한 영역 내의 모든 블록을 자동으로 부숩니다.", - "description.wurst.hack.fancychat": "채팅 메시지에서 ASCII 문자를 화려한 유니코드 문자로 바꿉니다. 일부 서버에서 욕설 필터를 우회하는 데 사용할 수 있습니다. \n유니코드 문자를 차단하는 서버에서는 작동하지 않습니다.", - "description.wurst.hack.fastbreak": "블록을 더 빨리 부술 수 있습니다. \n팁: Nuker와 함께 사용할 수 있습니다.", - "description.wurst.hack.fastladder": "사다리를 더 빨리 올라갈 수 있습니다.", - "description.wurst.hack.fastplace": "블록을 5배 더 빨리 배치할 수 있습니다. \n팁: AutoBuild와 같은 다른 해킹을 가속화할 수 있습니다.", - "description.wurst.hack.feedaura": "주변의 동물에게 자동으로 사료를 줍니다.", - "description.wurst.hack.fightbot": "자동으로 주변을 돌아다니며 모든 것을 죽이는 봇입니다. \nMobArena에 적합합니다.", - "description.wurst.hack.fish": "수중 중력을 해제하여 물고기처럼 수영할 수 있습니다.", - "description.wurst.hack.flight": "비행이 가능합니다. \n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", - "description.wurst.hack.follow": "가장 가까운 개체를 따라가는 봇입니다. \n매우 귀찮습니다. \n\n.follow를 사용하여 특정 개체를 따라갈 수 있습니다.", - "description.wurst.hack.forceop": "AuthMe 비밀번호를 크랙합니다. \nOP를 얻는 데 사용할 수 있습니다.", - "description.wurst.hack.glide": "낙하할 때 천천히 떨어집니다. \n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", - "description.wurst.hack.handnoclip": "벽을 통해 특정 블록에 접근할 수 있습니다.", - "description.wurst.hack.headroll": "항상 고개를 끄덕입니다. \n다른 플레이어에게만 표시됩니다.", - "description.wurst.hack.healthtags": "플레이어의 체력을 이름표에 표시합니다.", - "description.wurst.hack.highjump": "더 높이 점프할 수 있게 해줍니다.\n\n§c§l주의:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", - "description.wurst.hack.infinichat": "채팅에서 256자 제한을 없애줍니다.\nNBT 데이터를 수정하는 긴 명령어에 유용합니다.\n\n§6§l주의:§r 대화를 위해 권장되지 않습니다. 대부분의 서버는 메시지를 256자로 제한합니다.", - "description.wurst.hack.instantbunker": "자신 주위에 작은 벙커를 만듭니다. 57개의 블록이 필요합니다.", - "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년 전에 예수님이 사용했습니다.", - "description.wurst.hack.jetpack": "마치 제트팩을 가지고 있는 것처럼 날 수 있게 해줍니다.\n\n§c§l주의:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", - "description.wurst.hack.kaboom": "주변 블록을 폭발처럼 부숩니다.\n서버에 NoCheat+가 없다면 Nuker보다 훨씬 빠를 수 있습니다. 빠른 도구와 약한 블록과 함께 사용하는 것이 가장 효과적입니다.\n참고: 실제로 폭발하는 것은 아닙니다.", - "description.wurst.hack.killauralegit": "감지가 어려운 느린 Killaura입니다.\n일반적인 NoCheat+ 서버에서는 필요하지 않습니다!", - "description.wurst.hack.killaura": "자동으로 주변의 개체를 공격합니다.", - "description.wurst.hack.liquids": "액체 안에 블록을 배치할 수 있게 해줍니다.", - "description.wurst.hack.lsd": "환각을 유발합니다.", - "description.wurst.hack.masstpa": "모든 플레이어에게 TPA 요청을 보냅니다.", - "description.wurst.hack.mileycyrus": "트월킹을 할 수 있게 해줍니다.", - "description.wurst.hack.mobesp": "주변의 몹을 강조합니다.", - "description.wurst.hack.multiaura": "여러 개체를 동시에 공격하는 더 빠른 Killaura입니다.", - "description.wurst.hack.nameprotect": "모든 플레이어 이름을 숨깁니다.", - "description.wurst.hack.nametags": "네임태그의 크기를 크게 변경하여 항상 읽을 수 있게 해줍니다. 또한 웅크리는 플레이어의 네임태그를 볼 수 있게 해줍니다.", - "description.wurst.hack.navigator": "시간이 지남에 따라 사용자의 선호도를 학습하는 검색 가능한 GUI입니다.", - "description.wurst.hack.newchunks": "자신 주변에 최근에 생성된 청크를 강조합니다.", - "description.wurst.hack.noclip": "블록을 자유롭게 통과할 수 있게 해줍니다.\n블록(예: 모래)이 머리 위로 떨어져야 활성화됩니다.\n\n§c§l주의:§r 블록을 통과하는 동안 피해를 입을 수 있습니다!", - "description.wurst.hack.nocomcrash": "Nocom 악용을 통해 서버를 지연시키고 충돌시킵니다.\nPaper 서버에서 작동하지 않습니다. Vanilla, Spigot 및 Fabric에서 테스트된 작동합니다. 일부 AntiCheats에 의해 비활성화될 수 있습니다.", - "description.wurst.hack.nofall": "낙하 피해를 방지합니다.", - "description.wurst.hack.nofireoverlay": "불에 탔을 때 오버레이를 제거합니다.\n\n§c§l주의:§r 이로 인해 알지 못하고 타죽을 수 있습니다.", - "description.wurst.hack.nohurtcam": "피해를 입었을 때 흔들림 효과를 제거합니다.", - "description.wurst.hack.nooverlay": "물과 용암의 오버레이를 제거합니다.", - "description.wurst.hack.nopumpkin": "호박을 머리에 쓸 때 오버레이를 제거합니다.", - "description.wurst.hack.noslowdown": "꿀, 영혼 모래 및 아이템 사용으로 인한 속도 감소 효과를 제거합니다.", - "description.wurst.hack.noweather": "클라이언트 측의 날씨, 시간 및 달의 위상을 변경할 수 있게 해줍니다.", - "description.wurst.hack.noweb": "거미줄에 갇히는 것을 제거합니다.", - "description.wurst.hack.nuker": "주변 블록을 자동으로 부숩니다.", - "description.wurst.hack.nukerlegit": "감지 플러그인을 우회하는 더 느린 Nuker입니다.\n일반적인 NoCheat+ 서버에서는 필요하지 않습니다!", - "description.wurst.hack.openwateresp": "'열린 물'에서 낚시를 하는지 여부를 보여주고 열린 물 계산에 사용되는 영역 주위에 상자를 그립니다.", - "description.wurst.hack.overlay": "블록을 채굴할 때마다 Nuker 애니메이션을 렌더링합니다.", - "description.wurst.hack.panic": "활성화된 모든 핵을 즉시 비활성화합니다.\n이 기능을 사용할 때 주의하세요!", - "description.wurst.hack.parkour": "블록 가장자리에 도달하면 자동으로 점프합니다.\n파쿠르와 점프'n'런에 유용합니다.", - "description.wurst.hack.portalgui": "포탈에서 GUI를 열 수 있게 해줍니다.", - "description.wurst.hack.potionsaver": "정지 상태에서는 모든 물약 효과를 유지합니다.", - "description.wurst.hack.prophuntesp": "블럭 숨바꼭질에서 가짜 블록을 볼 수 있게 해줍니다.\nMineplex서버의 블럭 숨바꼭질을 위해 제작되었으며, 다른 서버에서 작동하지 않을 수 있습니다.", - "description.wurst.hack.protect": "가장 가까운 개체를 따라가고 다른 개체로부터 보호하는 봇입니다.\n가장 가까운 개체 대신 특정 개체를 보호하려면 .protect 명령을 사용하세요.", - "description.wurst.hack.radar": "주변 개체의 위치를 보여줍니다.\n§c빨강색§r - 플레이어\n§6주황색§r - 몬스터\n§a초록색§r - 동물\n§7회색§r - 기타", - "description.wurst.hack.remoteview": "특정 플레이어의 시야를 공유합니다.\n.rv 명령을 사용하여 특정 개체를 대상으로 설정할 수 있습니다.", - "description.wurst.hack.safewalk": "블럭끝에서 떨어지지 않게 해줍니다.", - "description.wurst.hack.scaffoldwalk": "자동으로 발 아래에 블록을 배치합니다.", - "description.wurst.hack.search": "무지개 색상으로 강조하여 특정 블록을 찾는 데 도움을 줍니다.", - "description.wurst.hack.skinderp": "스킨의 커버를 무작위로 on/off 합니다.", - "description.wurst.hack.sneak": "웅크리게 합니다.", - "description.wurst.hack.speedhack": "달리기와 점프로 할 때보다 약 2.5배 더 빠르게 달릴 수 있게 해줍니다.\n\n§6§l주의:§r NoCheat+ 버전 3.13.2에서 패치되었습니다. 이전 버전의 NoCheat+에서만 우회됩니다.\n서버의 NoCheat+ 버전을 확인하려면 §l/ncp version§r을 입력하세요.", - "description.wurst.hack.speednuker": "NoCheat+를 우회할 수 없는 더 빠른 버전의 Nuker입니다.", - "description.wurst.hack.spider": "거미처럼 벽을 타고 올라갈 수 있게 해줍니다.", - "description.wurst.hack.step": "모든 블럭을 계단처럼 올라갑니다.", - "description.wurst.hack.tillaura": "자동으로 흙, 잔디 등을 경작화 시킵니다.\nKillaura와 혼동하지 마세요.", - "description.wurst.hack.timer": "개인의 시간 선을 조절합니다.\n단, 서버의 영향을 미치진 않습니다.", - "description.wurst.hack.toomanyhax": "원치 않는 기능을 차단합니다.\n잘못된 핵을 우연히 활성화하여 밴을 당하는 것을 방지할 수 있습니다.\n'핵을 조금만 사용하는' 사람들을 위한 기능입니다.\n\n§6.toomanyhax§r 명령을 사용하여 어떤 기능을 차단할지 선택할 수 있습니다.\n자세한 내용은 §6.help toomanyhax§r를 입력하세요.", - "description.wurst.hack.tp-aura": "가까운 유효한 개체로 텔레포트 하면서 가장 자동으로 공격합니다.", - "description.wurst.hack.trajectories": "화살과 던져지는 아이템의 비행 경로를 예측해 줍니다.", - "description.wurst.hack.treebot": "자동으로 주위를 돌아다니며 나무를 베어줍니다.\n현재는 작은 나무에만 사용 가능합니다.", - "description.wurst.hack.triggerbot": "바라보고 있는 개체를 자동으로 공격합니다.", - "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글로벌 §c밴 §c처리될 §c수 §c있습니다!§r\n\n채팅에서 무해한 내용을 말한다고 해도, 서명된 메시지는 가짜 채팅 신고를 생성하여 계정이 불공정하게 밴 처리되는 경우가 있을 수 있습니다.\n\n채팅 서명을 다시 활성화하여 채팅을 하려면 계정이 아닌 가계정에서 플레이하는 것을 고려하세요.", - "button.wurst.nochatreports.disable_signatures": "서명 비활성화", - "button.wurst.nochatreports.re-enable_signatures": "서명 활성화", - "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는 이 폴더 없이 가계정 목록을 암호화하거나 복호화할 수 없습니다.\nAltManager를 계속 사용할 수 있지만, 이제 만드는 가계정은 저장되지 않습니다.\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이 서버가 소유한 경우 server.properties에서 'enforce-secure-profile'을 false로 설정하여 수정할 수 있습니다. 전형적인 Mojang의 스타일로, 이 설정은 이름이 의미하는 것과 반대로 작동합니다.", - "toast.wurst.nochatreports.unsafe_server.title": "채팅 메시지가 신고될 수 있습니다", - "toast.wurst.nochatreports.unsafe_server.message": "이 서버에서 전송한 메시지는 Mojang에게 신고될 수 있으며 계정이 모든 서버 밴 처리될 수 있습니다", - "button.wurst.nochatreports.signatures_status": "서명: ", - "description.wurst.nochatreports.message_is_reportable": "이 메시지에는 유효한 서명이 있으므로 가짜 채팅 신고에 취약합니다.", - "gui.wurst.generic.allcaps_blocked": "차단됨", - "gui.wurst.generic.allcaps_allowed": "허용됨" -} +{ + "description.wurst.hack.aimassist": "주변 엔티티를 조준하는 데 도움을 줍니다.", + "description.wurst.hack.airplace": "공중에 블록을 배치할 수 있게 해줍니다.", + "description.wurst.hack.antiafk": "자리비움 검출기에서 숨기기 위해 무작위로 이동합니다.", + "description.wurst.hack.antiblind": "실명 및 어둠 효과를 방지합니다.\nOptiFine과 호환되지 않습니다.", + "description.wurst.hack.anticactus": "선인장 대미지를 받지 않습니다.", + "description.wurst.hack.antientitypush": "다른 플레이어나 몹에게 밀려나는 것을 방지합니다.", + "description.wurst.hack.antihunger": "걷는 동안 배고픔 속도를 늦춥니다.", + "description.wurst.hack.antiknockback": "플레이어나 몹으로부터 넉백을 받지 않도록 합니다.", + "description.wurst.hack.antispam": "반복된 메시지에 카운터를 추가하여 채팅 스팸을 차단합니다.", + "description.wurst.hack.antiwaterpush": "물에 밀리는 것을 방지합니다.", + "description.wurst.hack.autoarmor": "자동으로 방어구를 관리합니다.", + "description.wurst.hack.autobuild": "자동으로 건물을 건설합니다.\n한 개의 블록을 놓으면 건설을 시작합니다.", + "description.wurst.hack.autocomplete": "대형 언어 모델을 사용하여 채팅 메시지를 자동 완성합니다. OpenAI 계정 API 접근 권한 또는 OpenAI와 호환되는 다른 언어 모델 API가 필요합니다.", + "description.wurst.hack.autodrop": "원하지 않는 아이템을 자동으로 버립니다.", + "description.wurst.hack.autoleave": "체력이 낮을 때 자동으로 서버에서 나갑니다.", + "description.wurst.hack.autolibrarian": "특정 인챈트된 책을 판매하는 마을 주민을 자동으로 훈련합니다. 이 핵을 사용하면 전체 거래 구간을 짧은 시간 내에 설정할 수 있습니다.", + "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.eat_while_walking": "걷는 동안 음식을 먹는 것은 속도를 늦춥니다. 권장하지 않습니다.", + "description.wurst.setting.autoeat.allow_poison": "독성 음식은 시간 경과에 따라 피해를 입힙니다.\n권장하지 않습니다.", + "description.wurst.hack.autofarm": "곡물, 당근, 감자, 비트, 호박, 수박, 선인장, 사탕수수, 켈프, 대나무, 네더 와트, 코코아 열매에 대해 자동으로 작물을 수확하고 다시 심습니다.", + "description.wurst.hack.autofish": "최고의 낚싯대를 사용하여 자동으로 물고기를 잡습니다. 물고기를 잡는 동안 더 좋은 낚싯대를 발견하면 자동으로 전환됩니다.", + "description.wurst.hack.automine": "시선을 정한 블록을 자동으로 채굴합니다.", + "description.wurst.hack.autopotion": "체력이 낮을 때 즉시 회복 물약을 자동으로 던집니다.", + "description.wurst.hack.autoreconnect": "서버에서 강제 퇴장당할 경우 자동으로 재접속합니다.", + "description.wurst.hack.autorespawn": "죽을 경우 자동으로 리스폰합니다.", + "description.wurst.hack.autosign": "원하는 글을 모든 표지판에 즉시 작성합니다. 활성화된 후 첫 번째 표지판에 일반적으로 글을 작성하여 모든 다른 표지판에 적용할 수 있습니다.", + "description.wurst.hack.autosoup": "체력이 낮을 때 자동으로 수프를 먹습니다.\n\n§l참고:§r 이 해킹 기능은 배고픔을 무시하고 수프를 직접 먹으면 체력이 회복된다고 가정합니다. 만약 이 기능이 서버에서 설정되어 있지 않다면 AutoEat을 사용하세요.", + "description.wurst.hack.autosprint": "자동으로 달립니다.", + "description.wurst.hack.autosteal": "여는 모든 상자와 셜커 상자에서 모든 것을 자동으로 훔칩니다.", + "description.wurst.hack.autoswim": "수영 애니메이션을 자동으로 실행합니다.", + "description.wurst.hack.autoswitch": "항상 손에 들고 있는 아이템을 전환합니다.\n\n§l팁:§r 이 기능은 다양한 색의 양털 또는 콘크리트 블록을 핫바에 넣고 BuildRandom과 함께 사용하는 것이 좋습니다.", + "description.wurst.hack.autowalk": "자동으로 걷게 해줍니다.", + "description.wurst.hack.basefinder": "인공 블록을 검색하여 베이스를 찾습니다.\n찾은 블록은 선택한 색상으로 강조됩니다.\nFaction 기지를 찾는 데 유용합니다.", + "description.wurst.hack.buildrandom": "주변에 무작위로 블록을 배치합니다.", + "description.wurst.hack.bunnyhop": "자동으로 점프합니다.", + "description.wurst.hack.cameradistance": "카메라 거리를 3인칭에서 변경할 수 있습니다.", + "description.wurst.hack.cameranoclip": "카메라가 벽을 통과할 수 있습니다(3인칭).", + "description.wurst.hack.cavefinder": "선택한 색상으로 동굴을 강조하여 찾도록 도와줍니다.", + "description.wurst.hack.chattranslator": "구글 번역을 이용하여 채팅을 번역합니다.", + "description.wurst.hack.chestesp": "주변의 상자를 강조합니다.", + "description.wurst.hack.clickaura": "클릭할 때 가장 가까운 유효한 엔티티를 자동으로 공격합니다.\n\n§c§l경고:§r ClickAura는 Killaura보다 더욱 의심스러워 보이며, 플러그인에 탐지되기 쉽습니다. 대신 Killaura나 TriggerBot을 사용하는 것이 좋습니다.", + "description.wurst.hack.creativeflight": "크리에이티브 모드와 같이 비행할 수 있습니다.\n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 대미지를 입을 수 있습니다.", + "description.wurst.hack.criticals": "모든 공격을 크리티컬로 변경합니다.", + "description.wurst.hack.derp": "머리를 무작위로 움직입니다.\n다른 플레이어에게만 보입니다.", + "description.wurst.hack.dolphin": "물 속에서 자동으로 위아래로 움직이도록 합니다.\n(돌고래처럼)", + "description.wurst.hack.excavator": "선택한 영역 내의 모든 블록을 자동으로 부숩니다.", + "description.wurst.hack.fancychat": "채팅 메시지에서 ASCII 문자를 화려한 유니코드 문자로 바꿉니다. 일부 서버에서 욕설 필터를 우회하는 데 사용할 수 있습니다. \n유니코드 문자를 차단하는 서버에서는 작동하지 않습니다.", + "description.wurst.hack.fastbreak": "블록을 더 빨리 부술 수 있습니다. \n팁: Nuker와 함께 사용할 수 있습니다.", + "description.wurst.hack.fastladder": "사다리를 더 빨리 올라갈 수 있습니다.", + "description.wurst.hack.fastplace": "블록을 5배 더 빨리 배치할 수 있습니다. \n팁: AutoBuild와 같은 다른 해킹을 가속화할 수 있습니다.", + "description.wurst.hack.feedaura": "주변의 동물에게 자동으로 사료를 줍니다.", + "description.wurst.hack.fightbot": "자동으로 주변을 돌아다니며 모든 것을 죽이는 봇입니다. \nMobArena에 적합합니다.", + "description.wurst.hack.fish": "수중 중력을 해제하여 물고기처럼 수영할 수 있습니다.", + "description.wurst.hack.flight": "비행이 가능합니다. \n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", + "description.wurst.hack.follow": "가장 가까운 개체를 따라가는 봇입니다. \n매우 귀찮습니다. \n\n.follow를 사용하여 특정 개체를 따라갈 수 있습니다.", + "description.wurst.hack.forceop": "AuthMe 비밀번호를 크랙합니다. \nOP를 얻는 데 사용할 수 있습니다.", + "description.wurst.hack.glide": "낙하할 때 천천히 떨어집니다. \n\n§c§l경고:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", + "description.wurst.hack.handnoclip": "벽을 통해 특정 블록에 접근할 수 있습니다.", + "description.wurst.hack.headroll": "항상 고개를 끄덕입니다. \n다른 플레이어에게만 표시됩니다.", + "description.wurst.hack.healthtags": "플레이어의 체력을 이름표에 표시합니다.", + "description.wurst.hack.highjump": "더 높이 점프할 수 있게 해줍니다.\n\n§c§l주의:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", + "description.wurst.hack.infinichat": "채팅에서 256자 제한을 없애줍니다.\nNBT 데이터를 수정하는 긴 명령어에 유용합니다.\n\n§6§l주의:§r 대화를 위해 권장되지 않습니다. 대부분의 서버는 메시지를 256자로 제한합니다.", + "description.wurst.hack.instantbunker": "자신 주위에 작은 벙커를 만듭니다. 57개의 블록이 필요합니다.", + "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년 전에 예수님이 사용했습니다.", + "description.wurst.hack.jetpack": "마치 제트팩을 가지고 있는 것처럼 날 수 있게 해줍니다.\n\n§c§l주의:§r NoFall을 사용하지 않으면 낙하 피해를 입을 수 있습니다.", + "description.wurst.hack.kaboom": "주변 블록을 폭발처럼 부숩니다.\n서버에 NoCheat+가 없다면 Nuker보다 훨씬 빠를 수 있습니다. 빠른 도구와 약한 블록과 함께 사용하는 것이 가장 효과적입니다.\n참고: 실제로 폭발하는 것은 아닙니다.", + "description.wurst.hack.killauralegit": "감지가 어려운 느린 Killaura입니다.\n일반적인 NoCheat+ 서버에서는 필요하지 않습니다!", + "description.wurst.hack.killaura": "자동으로 주변의 개체를 공격합니다.", + "description.wurst.hack.liquids": "액체 안에 블록을 배치할 수 있게 해줍니다.", + "description.wurst.hack.lsd": "환각을 유발합니다.", + "description.wurst.hack.masstpa": "모든 플레이어에게 TPA 요청을 보냅니다.", + "description.wurst.hack.mileycyrus": "트월킹을 할 수 있게 해줍니다.", + "description.wurst.hack.mobesp": "주변의 몹을 강조합니다.", + "description.wurst.hack.multiaura": "여러 개체를 동시에 공격하는 더 빠른 Killaura입니다.", + "description.wurst.hack.nameprotect": "모든 플레이어 이름을 숨깁니다.", + "description.wurst.hack.nametags": "네임태그의 크기를 크게 변경하여 항상 읽을 수 있게 해줍니다. 또한 웅크리는 플레이어의 네임태그를 볼 수 있게 해줍니다.", + "description.wurst.hack.navigator": "시간이 지남에 따라 사용자의 선호도를 학습하는 검색 가능한 GUI입니다.", + "description.wurst.hack.newchunks": "자신 주변에 최근에 생성된 청크를 강조합니다.", + "description.wurst.hack.noclip": "블록을 자유롭게 통과할 수 있게 해줍니다.\n블록(예: 모래)이 머리 위로 떨어져야 활성화됩니다.\n\n§c§l주의:§r 블록을 통과하는 동안 피해를 입을 수 있습니다!", + "description.wurst.hack.nocomcrash": "Nocom 악용을 통해 서버를 지연시키고 충돌시킵니다.\nPaper 서버에서 작동하지 않습니다. Vanilla, Spigot 및 Fabric에서 테스트된 작동합니다. 일부 AntiCheats에 의해 비활성화될 수 있습니다.", + "description.wurst.hack.nofall": "낙하 피해를 방지합니다.", + "description.wurst.hack.nofireoverlay": "불에 탔을 때 오버레이를 제거합니다.\n\n§c§l주의:§r 이로 인해 알지 못하고 타죽을 수 있습니다.", + "description.wurst.hack.nohurtcam": "피해를 입었을 때 흔들림 효과를 제거합니다.", + "description.wurst.hack.nooverlay": "물과 용암의 오버레이를 제거합니다.", + "description.wurst.hack.nopumpkin": "호박을 머리에 쓸 때 오버레이를 제거합니다.", + "description.wurst.hack.noslowdown": "꿀, 영혼 모래 및 아이템 사용으로 인한 속도 감소 효과를 제거합니다.", + "description.wurst.hack.noweather": "클라이언트 측의 날씨, 시간 및 달의 위상을 변경할 수 있게 해줍니다.", + "description.wurst.hack.noweb": "거미줄에 갇히는 것을 제거합니다.", + "description.wurst.hack.nuker": "주변 블록을 자동으로 부숩니다.", + "description.wurst.hack.nukerlegit": "감지 플러그인을 우회하는 더 느린 Nuker입니다.\n일반적인 NoCheat+ 서버에서는 필요하지 않습니다!", + "description.wurst.hack.openwateresp": "'열린 물'에서 낚시를 하는지 여부를 보여주고 열린 물 계산에 사용되는 영역 주위에 상자를 그립니다.", + "description.wurst.hack.overlay": "블록을 채굴할 때마다 Nuker 애니메이션을 렌더링합니다.", + "description.wurst.hack.panic": "활성화된 모든 핵을 즉시 비활성화합니다.\n이 기능을 사용할 때 주의하세요!", + "description.wurst.hack.parkour": "블록 가장자리에 도달하면 자동으로 점프합니다.\n파쿠르와 점프'n'런에 유용합니다.", + "description.wurst.hack.portalgui": "포탈에서 GUI를 열 수 있게 해줍니다.", + "description.wurst.hack.potionsaver": "정지 상태에서는 모든 물약 효과를 유지합니다.", + "description.wurst.hack.prophuntesp": "블럭 숨바꼭질에서 가짜 블록을 볼 수 있게 해줍니다.\nMineplex서버의 블럭 숨바꼭질을 위해 제작되었으며, 다른 서버에서 작동하지 않을 수 있습니다.", + "description.wurst.hack.protect": "가장 가까운 개체를 따라가고 다른 개체로부터 보호하는 봇입니다.\n가장 가까운 개체 대신 특정 개체를 보호하려면 .protect 명령을 사용하세요.", + "description.wurst.hack.radar": "주변 개체의 위치를 보여줍니다.\n§c빨강색§r - 플레이어\n§6주황색§r - 몬스터\n§a초록색§r - 동물\n§7회색§r - 기타", + "description.wurst.hack.remoteview": "특정 플레이어의 시야를 공유합니다.\n.rv 명령을 사용하여 특정 개체를 대상으로 설정할 수 있습니다.", + "description.wurst.hack.safewalk": "블럭끝에서 떨어지지 않게 해줍니다.", + "description.wurst.hack.scaffoldwalk": "자동으로 발 아래에 블록을 배치합니다.", + "description.wurst.hack.search": "무지개 색상으로 강조하여 특정 블록을 찾는 데 도움을 줍니다.", + "description.wurst.hack.skinderp": "스킨의 커버를 무작위로 on/off 합니다.", + "description.wurst.hack.sneak": "웅크리게 합니다.", + "description.wurst.hack.speedhack": "달리기와 점프로 할 때보다 약 2.5배 더 빠르게 달릴 수 있게 해줍니다.\n\n§6§l주의:§r NoCheat+ 버전 3.13.2에서 패치되었습니다. 이전 버전의 NoCheat+에서만 우회됩니다.\n서버의 NoCheat+ 버전을 확인하려면 §l/ncp version§r을 입력하세요.", + "description.wurst.hack.speednuker": "NoCheat+를 우회할 수 없는 더 빠른 버전의 Nuker입니다.", + "description.wurst.hack.spider": "거미처럼 벽을 타고 올라갈 수 있게 해줍니다.", + "description.wurst.hack.step": "모든 블럭을 계단처럼 올라갑니다.", + "description.wurst.hack.tillaura": "자동으로 흙, 잔디 등을 경작화 시킵니다.\nKillaura와 혼동하지 마세요.", + "description.wurst.hack.timer": "개인의 시간 선을 조절합니다.\n단, 서버의 영향을 미치진 않습니다.", + "description.wurst.hack.toomanyhax": "원치 않는 기능을 차단합니다.\n잘못된 핵을 우연히 활성화하여 밴을 당하는 것을 방지할 수 있습니다.\n'핵을 조금만 사용하는' 사람들을 위한 기능입니다.\n\n§6.toomanyhax§r 명령을 사용하여 어떤 기능을 차단할지 선택할 수 있습니다.\n자세한 내용은 §6.help toomanyhax§r를 입력하세요.", + "description.wurst.hack.tp-aura": "가까운 유효한 개체로 텔레포트 하면서 가장 자동으로 공격합니다.", + "description.wurst.hack.trajectories": "화살과 던져지는 아이템의 비행 경로를 예측해 줍니다.", + "description.wurst.hack.treebot": "자동으로 주위를 돌아다니며 나무를 베어줍니다.\n현재는 작은 나무에만 사용 가능합니다.", + "description.wurst.hack.triggerbot": "바라보고 있는 개체를 자동으로 공격합니다.", + "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글로벌 §c밴 §c처리될 §c수 §c있습니다!§r\n\n채팅에서 무해한 내용을 말한다고 해도, 서명된 메시지는 가짜 채팅 신고를 생성하여 계정이 불공정하게 밴 처리되는 경우가 있을 수 있습니다.\n\n채팅 서명을 다시 활성화하여 채팅을 하려면 계정이 아닌 가계정에서 플레이하는 것을 고려하세요.", + "button.wurst.nochatreports.disable_signatures": "서명 비활성화", + "button.wurst.nochatreports.re-enable_signatures": "서명 활성화", + "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는 이 폴더 없이 가계정 목록을 암호화하거나 복호화할 수 없습니다.\nAltManager를 계속 사용할 수 있지만, 이제 만드는 가계정은 저장되지 않습니다.\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이 서버가 소유한 경우 server.properties에서 'enforce-secure-profile'을 false로 설정하여 수정할 수 있습니다. 전형적인 Mojang의 스타일로, 이 설정은 이름이 의미하는 것과 반대로 작동합니다.", + "toast.wurst.nochatreports.unsafe_server.title": "채팅 메시지가 신고될 수 있습니다", + "toast.wurst.nochatreports.unsafe_server.message": "이 서버에서 전송한 메시지는 Mojang에게 신고될 수 있으며 계정이 모든 서버 밴 처리될 수 있습니다", + "button.wurst.nochatreports.signatures_status": "서명: ", + "description.wurst.nochatreports.message_is_reportable": "이 메시지에는 유효한 서명이 있으므로 가짜 채팅 신고에 취약합니다.", + "gui.wurst.generic.allcaps_blocked": "차단됨", + "gui.wurst.generic.allcaps_allowed": "허용됨" +} diff --git a/src/main/resources/assets/wurst/lang/pl_pl.json b/src/main/resources/assets/wurst/lang/pl_pl.json index c320f8e4..fd68108e 100644 --- a/src/main/resources/assets/wurst/lang/pl_pl.json +++ b/src/main/resources/assets/wurst/lang/pl_pl.json @@ -182,4 +182,4 @@ "description.wurst.nochatreports.message_is_reportable": "Ta wiadomość ma prawidłową sygnaturę, przez co jest podatna na fałszywe zgłoszenia.", "gui.wurst.generic.allcaps_blocked": "ZABLOKOWANE", "gui.wurst.generic.allcaps_allowed": "DOZWOLONE" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/wurst/lang/ro_ro.json b/src/main/resources/assets/wurst/lang/ro_ro.json index e4531a35..9d448805 100644 --- a/src/main/resources/assets/wurst/lang/ro_ro.json +++ b/src/main/resources/assets/wurst/lang/ro_ro.json @@ -1,177 +1,177 @@ -{ - "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.", - "description.wurst.hack.antiblind": "Previne orbirea si efectele întunericului.\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.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 cu barci si alte vehicule.\nApasa pe sprint pentru a cobori mai repede.", - "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.", - "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.newchunks": "Conturează chunk-urile generate recent in jurul tău.", - "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.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.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.", - "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.", - "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", - "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" -} \ No newline at end of file +{ + "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.", + "description.wurst.hack.antiblind": "Previne orbirea si efectele întunericului.\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.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 cu barci si alte vehicule.\nApasa pe sprint pentru a cobori mai repede.", + "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.", + "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.newchunks": "Conturează chunk-urile generate recent in jurul tău.", + "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.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.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.", + "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.", + "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", + "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" +} diff --git a/src/main/resources/assets/wurst/lang/ru_ru.json b/src/main/resources/assets/wurst/lang/ru_ru.json index 7db40e63..d992d2e4 100644 --- a/src/main/resources/assets/wurst/lang/ru_ru.json +++ b/src/main/resources/assets/wurst/lang/ru_ru.json @@ -1,186 +1,186 @@ -{ - "description.wurst.hack.airplace": "Позволяет ставить блоки в воздухе.", - "description.wurst.hack.anchoraura": "Автоматически ставит (если отмечено), заряжает и взрывает якоря возрождения, чтобы убить сущностей вокруг вас.", - "description.wurst.hack.antiafk": "Ходит в случайном направлении чтобы сервер не знал что Вы АФК.", - "description.wurst.hack.antiblind": "Предотвращает эффекты слепоты и темноты.\nНесовместим с OptiFine.", - "description.wurst.hack.anticactus": "Защищает Вас от урона от столкновения с кактусами.", - "description.wurst.hack.antihunger": "Замедляет уменьшение голода, когда вы ходите.", - "description.wurst.hack.antiknockback": "Предотвращает откидывание при получении урона.", - "description.wurst.hack.antispam": "Блокирует спам в чате добавляя счетчик повторений у сообщения.", - "description.wurst.hack.antiwaterpush": "Убирает снос течением воды.", - "description.wurst.hack.antiwobble": "Отключает покачивание экрана от портала и эффекта тошноты.", - "description.wurst.hack.arrowdmg": "Значительно увеличивает урон от стрел, но также потребляет много сытости и снижает точность.\n\nНе работает с арбалетами и, кажется, исправлено на серверах Paper.", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "При включении трезубцы летят намного дальше. Похоже, не влияет на урон или чары Тягун.\n\n§c§lВНИМАНИЕ:§r Вы можете легко потерять свой трезубец, включив эту опцию!", - "description.wurst.hack.autoarmor": "Автоматически экипирует наилучшую броню.", - "description.wurst.hack.autobuild": "Автоматически строит объекты.\nПоставьте блок, чтобы начать строительство.", - "description.wurst.hack.autodrop": "Автоматически выбрасывает ненужные вещи.", - "description.wurst.hack.autoleave": "Автоматический выход с сервера когда остается мало здоровья.", - "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.take_items_from": "Где AutoEat должен искать еду.", - "description.wurst.setting.autoeat.eat_while_walking": "Замедляет тебя, не рекомендуется.", - "description.wurst.setting.autoeat.allow_hunger": "Гнилая плоть накладывает эффект \"голод\".\nОна безопасна для употребления в пищу и полезна в качестве аварийного питания.", - "description.wurst.setting.autoeat.allow_poison": "Ядовитая пища наносит урон с течением времени.\nНе рекомендуется.", - "description.wurst.setting.autoeat.allow_chorus": "Съев плод хоруса, вы телепортируетесь в случайное место.\nНе рекомендуется.", - "description.wurst.hack.autofarm": "Автоматически собирает урожай и сажает семена.\nРаботает с пшеницей, морковкой, картошкой, свеклой, тыквами, арбузами, кактусами, тростником, водорослями, бамбуком, адским наростом, и какао-бобами.", - "description.wurst.hack.autofish": "Автоматически ловит рыбу используя Вашу лучшую удочку. Если во время рыбалки найдётся удочка ещё лучше - бот переключится на неё.", - "description.wurst.hack.automine": "Автоматически копает блоки на которые Вы смотрите.", - "description.wurst.hack.autopotion": "Автоматически использует взрывные зелья лечения когда у Вас мало здоровья.", - "description.wurst.hack.autoreconnect": "Автоматически переподключается когда Вас кикает с сервера.", - "description.wurst.hack.autorespawn": "Автоматически возрождает Вас после смерти.", - "description.wurst.hack.autosign": "Моментально пишет заданный текст на табличках которые Вы устанавливаете. После активации текст написанный на первой Вашей табличке будет повторяться на всех следующих.", - "description.wurst.hack.autosoup": "Автоматически ест суп когда мало здоровья.\n\n§lВНИМАНИЕ:§r Этот чит игнорирует голод и предполагает что суп восстановит здоровье напрямую. Если на сервере такого нет, то используйте AutoEat.", - "description.wurst.hack.autosprint": "Автоматически включает бег.", - "description.wurst.hack.autosteal": "Автоматически забирает всё из сундуков и шалкеров которые Вы открываете.", - "description.wurst.hack.autoswim": "Автоматически включает анимацию быстрого плаванья.", - "description.wurst.hack.autoswitch": "Всё время переключает слоты в руке.\n\n§lProTip:§r Можно использовать это с BuildRandom когда у вас в хотбаре много разноцветной шерсти или бетона.", - "description.wurst.hack.autosword": "Автоматическое использование наилучшего оружия для атаки.\nСовет: Это хорошее дополнение к Killaura.", - "description.wurst.hack.autotool": "Автоматически экипирует подходящий инструмент из хотбара когда Вы пытаетесь сломать блок.", - "description.wurst.hack.autototem": "Автоматически перемещает тотемы бессмертия во вторую руку.", - "description.wurst.hack.autowalk": "Заставляет Вас всё время идти.", - "description.wurst.hack.basefinder": "Ищет базы игроков при помощи поиска рукотворных блоков.\nБлоки которые эта функция находит будут подсвечены выбранным цветом.\nХороший инструмент для поиска скрытых баз гильдий.", - "description.wurst.hack.blink": "Приостанавливает все движения пока включен.", - "description.wurst.hack.boatfly": "Позволяет летать, находясь в лодке или других транспортных средствах.\nНажмите клавишу спринта, чтобы спускаться быстрее.", - "description.wurst.hack.bonemealaura": "Автоматически использует костную муку на растениях.\nОтметьте в меню на каких типах растений использовать.", - "description.wurst.hack.bowaimbot": "Автоматически целится из лука или арбалета.", - "description.wurst.hack.buildrandom": "Ставит вокруг блоки в случайном порядке.", - "description.wurst.hack.bunnyhop": "Заставляет Вас постоянно прыгать.", - "description.wurst.hack.cameradistance": "Позволяет вам изменять расстояние до камеры от третьего лица.", - "description.wurst.hack.cameranoclip": "Позволяет камере проходить сквозь стены.", - "description.wurst.hack.cavefinder": "Помогает найти пещеры подсвечивая их выбранным цветом.", - "description.wurst.hack.chattranslator": "Все входящие сообщения в чате будут переводиться Google переводчиком.", - "description.wurst.hack.chestesp": "Подсвечивает выбранным цветом сундуки поблизости.", - "description.wurst.hack.clickaura": "Автоматически атакует ближайшую сущность когда вы нажимаете ЛКМ.\n\n§c§lВНИМАНИЕ:§r ClickAura обычно выглядят более подозрительно чем Killaura и легче обнаруживается плагинами. Вместо этого рекомендуется использовать Killaura или TriggerBot.", - "description.wurst.hack.clickgui": "Интерфейс с панелями.", - "description.wurst.hack.crashchest": "Создаёт сундук который банит того у кого будет слишком много копий такого сундука в инвентаре. §c§lВНИМАНИЕ:§r §cЭто необратимо. Используйте с осторожностью!§r\n\nЕсли кучу таких копий засунуть в сундук, то любой кто его откроет вылетит из сервера (не навсегда).", - "description.wurst.hack.creativeflight": "Позволяет летать как в креативе.\n\n§c§lВНИМАНИЕ:§r Вы всё равно будете получать урон от падения если не включите NoFall.", - "description.wurst.hack.criticals": "Все ваши удары теперь будут критическими, как если бы Вы каждый раз прыгали.", - "description.wurst.hack.crystalaura": "Автоматически ставит (если отмечено) и взрывает кристаллы края, чтобы убить сущности вокруг.", - "description.wurst.hack.derp": "Крутит головой в случайном направлении.\nВидно только другим игрокам.", - "description.wurst.hack.dolphin": "Заставляет вас автоматически всплывать.\n(как дельфинчик)", - "description.wurst.hack.excavator": "Автоматически выкапывает все блоки в выбранной области.", - "description.wurst.hack.extraelytra": "Облегчает использование Элитр.", - "description.wurst.hack.fancychat": "Заменяет обычные буквы на более элегантные символы Юникода. Можно использовать для обхода мат-фильтра на некоторых серверах.\nНе работает на серверах на которых заблокированы символы Юникода.", - "description.wurst.hack.fastbreak": "Позволяет ломать блоки быстрее.\nСовет: Хорошо сочетается с Nuker.", - "description.wurst.hack.fastladder": "Позволяет забираться по лестницам быстрее.", - "description.wurst.hack.fastplace": "Позволяет ставить блоки в 5 раз быстрее.\nСовет: Может ускорять работу AutoBuild.", - "description.wurst.hack.feedaura": "Автоматически кормит животных вокруг.", - "description.wurst.hack.fightbot": "Бот автоматически ходит вокруг и убивает что попало.\nМожет быть полезен на моб-арене.", - "description.wurst.hack.fish": "Отключает притяжение под водой, можно плавать как рыба.", - "description.wurst.hack.flight": "Позволяет вам летать.\n\n§c§lВНИМАНИЕ:§r Вы будете получать урон от падения если не включите NoFall.", - "description.wurst.hack.follow": "Бот, который следует за ближайшей сущностью.\nОчень назойливо.\n\nИспользуйте .follow, чтобы следовать за кем-то конкретным.", - "description.wurst.hack.forceop": "Перебирает пароли AuthMe.\nМожно попробовать подобрать пароль админа :) .", - "description.wurst.hack.freecam": "Позволяет перемещать камеру не двигая персонажа.", - "description.wurst.hack.fullbright": "Позволяет видеть в темноте.", - "description.wurst.hack.glide": "Замедляет падение.\n\n§c§lВНИМАНИЕ:§r Вы всё равно будете получать урон от падения если не включите NoFall.", - "description.wurst.hack.handnoclip": "Позволяет использовать некоторые блоки через стены.", - "description.wurst.hack.headroll": "Заставляет Вас всё время кивать.\nВидно только другим игрокам.", - "description.wurst.hack.healthtags": "Показывает здоровье игроков возле ника.", - "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Около двух тысяч лет назад им воспользовался Иисус.", - "description.wurst.hack.jetpack": "Позволяет летать как с реактивным ранцем.\n\n§c§lВНИМАНИЕ:§r Вы будете получать урон от падения если не включите NoFall.", - "description.wurst.hack.kaboom": "Ломает блоки вокруг как будто произошел взрыв.\nЭто может быть намного быстрее Nuker'а если на сервере нет NoCheat+. Лучше всего работает с быстрыми инструментами и слабыми блоками.\nПометка: Это не взрыв.", - "description.wurst.hack.killauralegit": "Более медленная Killaura которую тяжелее обнаружить.\nНе нужна на обычных серверах с простым NoCheat+!", - "description.wurst.hack.killaura": "Автоматически атакует сущностей вокруг.", - "description.wurst.hack.killpotion": "Создает зелье которое убивает практически кого угодно, даже тех кто в креативе. Не работает на нежити потому что они и так мертвы лол.\n\nДля работы требуется креатив.", - "description.wurst.hack.liquids": "Позволяет ставить блоки прямо в жидкостях.", - "description.wurst.hack.lsd": "Провоцирует тяжелые галлюцинации.", - "description.wurst.hack.masstpa": "Отправляет запрос на телепортацию всем игрокам.", - "description.wurst.hack.mileycyrus": "Заставляет Вас тверкать.", - "description.wurst.hack.mobesp": "Подсвечивает мобов неподалеку.", - "description.wurst.hack.mobspawnesp": "Показывает места в которых могут заспавниться мобы.\n§eжёлтым§r - мобы могут заспавниться ночью\n§cкрасным§r - мобы могут заспавниться когда угодно", - "description.wurst.hack.multiaura": "Более быстрая Killaura которая атакует сразу несколько сущностей одновременно.", - "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.nukerlegit": "Более медленная версия Nuker которая обходит любой античит.\nНе нужна на обычных серверах с простым NoCheat+!", - "description.wurst.hack.openwateresp": "Показывает рыбачите ли Вы в 'открытой воде' и рисует вокруг области куб используемый для расчета.", - "description.wurst.hack.overlay": "Добавляет анимацию разрушения блока для Nuker.", - "description.wurst.hack.panic": "Моментально выключает все читы.\nОсторожней с этим!", - "description.wurst.hack.parkour": "Заставляет вас автоматически прыгать по достижении края блока.\nПолезно для паркуров и побегов.", - "description.wurst.hack.playeresp": "Подсвечивает игроков неподалеку.\nДрузей будет подсвечивать синим.", - "description.wurst.hack.portalgui": "Позволяет открывать инвентарь и чат в порталах.", - "description.wurst.hack.potionsaver": "Замораживает время действия всех эффектов пока Вы стоите на месте.", - "description.wurst.hack.prophuntesp": "Позволяет отличать ненастоящие блоки в Prophunt.\nСделано для Mineplex Prophunt. Может не работать на других серверах.", - "description.wurst.hack.protect": "Бот, который следует за ближайшей сущностью и защищает её от других.\nИспользуйте .protect, чтобы защищать кого-то конкретного.", - "description.wurst.hack.radar": "Радар, отображающий сущностей вокруг.\n§cкрасным§r - игроков\n§6оранжевым§r - монстров\n§aзелёным§r - животных\n§7серым§r - всех остальных", - "description.wurst.hack.rainbowui": "§cД§aе§9л§cа§aе§9т §cв§aс§9ё §cр§aа§9з§cн§aо§9ц§cв§aе§9т§cн§aы§9м.", - "description.wurst.hack.reach": "Позволяет дотягиваться дальше.", - "description.wurst.hack.remoteview": "Позволяет смотреть от лица другой сущности или игрока.\nИспользуйте .rv, чтобы посмотреть на мир глазами кого-то конкретного.", - "description.wurst.hack.safewalk": "Не даёт вам упасть с края блоков.", - "description.wurst.hack.scaffoldwalk": "Автоматически ставит блоки под ноги.", - "description.wurst.hack.search": "Помогает найти заданные блоки подсвечивая их всеми цветами радуги.", - "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.speednuker": "Более быстрая версия Nuker которая не работает с NoCheat+.", - "description.wurst.hack.spider": "Позволяет взбираться по стенам как паук.", - "description.wurst.hack.step": "Позволяет зашагивать на блоки как по ступенькам.", - "description.wurst.hack.throw": "Использует вещь несколько раз. Может быть использовано для быстрого бросания снежков и яиц, призыва мобов, установки вагонеток и т.д. в огромных количествах.\n\nЭто может создать большую нагрузку на сервер и даже его крашнуть.", - "description.wurst.hack.tillaura": "Автоматически вспахивает землю вокруг.\nНе перепутайте с Killaura.", - "description.wurst.hack.timer": "Изменяет скорость практически всего.", - "description.wurst.hack.tired": "Делает Вас как выглядел Alexander в Апреле 2015.\nВидно только другим игрокам.", - "description.wurst.hack.toomanyhax": "Отключает ненужные вам функции.\nПозволяет быть уверенным что вы не включите случайно что-то не то и получите бан.\nДля тех, кто хочеть почитерить \"совсем чуть-чуть\".\n\nИспользуйте команду §6.toomanyhax§r чтобы выбрать какие функции следует отключить.\nНапишите §6.help toomanyhax§r для более подробной информации.", - "description.wurst.hack.tp-aura": "Автоматически атакует ближайшую сущность при этом телепортируясь вокруг неё.", - "description.wurst.hack.trajectories": "Показывает траекторию полета стрел и бросаемых вещей.", - "description.wurst.hack.treebot": "Экспериментальная функция, бот который ходит и автоматически вырубает деревья.\nПока что ограничен обычными маленькими деревьями.", - "description.wurst.hack.triggerbot": "Автоматически атакует сущность на которую Вы смотрите.", - "description.wurst.hack.trollpotion": "Создает зелье с множеством противных эффектов. Для работы требуется креатив.", - "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": "Этот аккаунт имеет пароль и может присоединяться к любым серверам.", - "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": "РАЗРЕШЕНО", - "key.wurst.zoom": "Приблизить" -} \ No newline at end of file +{ + "description.wurst.hack.airplace": "Позволяет ставить блоки в воздухе.", + "description.wurst.hack.anchoraura": "Автоматически ставит (если отмечено), заряжает и взрывает якоря возрождения, чтобы убить сущностей вокруг вас.", + "description.wurst.hack.antiafk": "Ходит в случайном направлении чтобы сервер не знал что Вы АФК.", + "description.wurst.hack.antiblind": "Предотвращает эффекты слепоты и темноты.\nНесовместим с OptiFine.", + "description.wurst.hack.anticactus": "Защищает Вас от урона от столкновения с кактусами.", + "description.wurst.hack.antihunger": "Замедляет уменьшение голода, когда вы ходите.", + "description.wurst.hack.antiknockback": "Предотвращает откидывание при получении урона.", + "description.wurst.hack.antispam": "Блокирует спам в чате добавляя счетчик повторений у сообщения.", + "description.wurst.hack.antiwaterpush": "Убирает снос течением воды.", + "description.wurst.hack.antiwobble": "Отключает покачивание экрана от портала и эффекта тошноты.", + "description.wurst.hack.arrowdmg": "Значительно увеличивает урон от стрел, но также потребляет много сытости и снижает точность.\n\nНе работает с арбалетами и, кажется, исправлено на серверах Paper.", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "При включении трезубцы летят намного дальше. Похоже, не влияет на урон или чары Тягун.\n\n§c§lВНИМАНИЕ:§r Вы можете легко потерять свой трезубец, включив эту опцию!", + "description.wurst.hack.autoarmor": "Автоматически экипирует наилучшую броню.", + "description.wurst.hack.autobuild": "Автоматически строит объекты.\nПоставьте блок, чтобы начать строительство.", + "description.wurst.hack.autodrop": "Автоматически выбрасывает ненужные вещи.", + "description.wurst.hack.autoleave": "Автоматический выход с сервера когда остается мало здоровья.", + "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.take_items_from": "Где AutoEat должен искать еду.", + "description.wurst.setting.autoeat.eat_while_walking": "Замедляет тебя, не рекомендуется.", + "description.wurst.setting.autoeat.allow_hunger": "Гнилая плоть накладывает эффект \"голод\".\nОна безопасна для употребления в пищу и полезна в качестве аварийного питания.", + "description.wurst.setting.autoeat.allow_poison": "Ядовитая пища наносит урон с течением времени.\nНе рекомендуется.", + "description.wurst.setting.autoeat.allow_chorus": "Съев плод хоруса, вы телепортируетесь в случайное место.\nНе рекомендуется.", + "description.wurst.hack.autofarm": "Автоматически собирает урожай и сажает семена.\nРаботает с пшеницей, морковкой, картошкой, свеклой, тыквами, арбузами, кактусами, тростником, водорослями, бамбуком, адским наростом, и какао-бобами.", + "description.wurst.hack.autofish": "Автоматически ловит рыбу используя Вашу лучшую удочку. Если во время рыбалки найдётся удочка ещё лучше - бот переключится на неё.", + "description.wurst.hack.automine": "Автоматически копает блоки на которые Вы смотрите.", + "description.wurst.hack.autopotion": "Автоматически использует взрывные зелья лечения когда у Вас мало здоровья.", + "description.wurst.hack.autoreconnect": "Автоматически переподключается когда Вас кикает с сервера.", + "description.wurst.hack.autorespawn": "Автоматически возрождает Вас после смерти.", + "description.wurst.hack.autosign": "Моментально пишет заданный текст на табличках которые Вы устанавливаете. После активации текст написанный на первой Вашей табличке будет повторяться на всех следующих.", + "description.wurst.hack.autosoup": "Автоматически ест суп когда мало здоровья.\n\n§lВНИМАНИЕ:§r Этот чит игнорирует голод и предполагает что суп восстановит здоровье напрямую. Если на сервере такого нет, то используйте AutoEat.", + "description.wurst.hack.autosprint": "Автоматически включает бег.", + "description.wurst.hack.autosteal": "Автоматически забирает всё из сундуков и шалкеров которые Вы открываете.", + "description.wurst.hack.autoswim": "Автоматически включает анимацию быстрого плаванья.", + "description.wurst.hack.autoswitch": "Всё время переключает слоты в руке.\n\n§lProTip:§r Можно использовать это с BuildRandom когда у вас в хотбаре много разноцветной шерсти или бетона.", + "description.wurst.hack.autosword": "Автоматическое использование наилучшего оружия для атаки.\nСовет: Это хорошее дополнение к Killaura.", + "description.wurst.hack.autotool": "Автоматически экипирует подходящий инструмент из хотбара когда Вы пытаетесь сломать блок.", + "description.wurst.hack.autototem": "Автоматически перемещает тотемы бессмертия во вторую руку.", + "description.wurst.hack.autowalk": "Заставляет Вас всё время идти.", + "description.wurst.hack.basefinder": "Ищет базы игроков при помощи поиска рукотворных блоков.\nБлоки которые эта функция находит будут подсвечены выбранным цветом.\nХороший инструмент для поиска скрытых баз гильдий.", + "description.wurst.hack.blink": "Приостанавливает все движения пока включен.", + "description.wurst.hack.boatfly": "Позволяет летать, находясь в лодке или других транспортных средствах.\nНажмите клавишу спринта, чтобы спускаться быстрее.", + "description.wurst.hack.bonemealaura": "Автоматически использует костную муку на растениях.\nОтметьте в меню на каких типах растений использовать.", + "description.wurst.hack.bowaimbot": "Автоматически целится из лука или арбалета.", + "description.wurst.hack.buildrandom": "Ставит вокруг блоки в случайном порядке.", + "description.wurst.hack.bunnyhop": "Заставляет Вас постоянно прыгать.", + "description.wurst.hack.cameradistance": "Позволяет вам изменять расстояние до камеры от третьего лица.", + "description.wurst.hack.cameranoclip": "Позволяет камере проходить сквозь стены.", + "description.wurst.hack.cavefinder": "Помогает найти пещеры подсвечивая их выбранным цветом.", + "description.wurst.hack.chattranslator": "Все входящие сообщения в чате будут переводиться Google переводчиком.", + "description.wurst.hack.chestesp": "Подсвечивает выбранным цветом сундуки поблизости.", + "description.wurst.hack.clickaura": "Автоматически атакует ближайшую сущность когда вы нажимаете ЛКМ.\n\n§c§lВНИМАНИЕ:§r ClickAura обычно выглядят более подозрительно чем Killaura и легче обнаруживается плагинами. Вместо этого рекомендуется использовать Killaura или TriggerBot.", + "description.wurst.hack.clickgui": "Интерфейс с панелями.", + "description.wurst.hack.crashchest": "Создаёт сундук который банит того у кого будет слишком много копий такого сундука в инвентаре. §c§lВНИМАНИЕ:§r §cЭто необратимо. Используйте с осторожностью!§r\n\nЕсли кучу таких копий засунуть в сундук, то любой кто его откроет вылетит из сервера (не навсегда).", + "description.wurst.hack.creativeflight": "Позволяет летать как в креативе.\n\n§c§lВНИМАНИЕ:§r Вы всё равно будете получать урон от падения если не включите NoFall.", + "description.wurst.hack.criticals": "Все ваши удары теперь будут критическими, как если бы Вы каждый раз прыгали.", + "description.wurst.hack.crystalaura": "Автоматически ставит (если отмечено) и взрывает кристаллы края, чтобы убить сущности вокруг.", + "description.wurst.hack.derp": "Крутит головой в случайном направлении.\nВидно только другим игрокам.", + "description.wurst.hack.dolphin": "Заставляет вас автоматически всплывать.\n(как дельфинчик)", + "description.wurst.hack.excavator": "Автоматически выкапывает все блоки в выбранной области.", + "description.wurst.hack.extraelytra": "Облегчает использование Элитр.", + "description.wurst.hack.fancychat": "Заменяет обычные буквы на более элегантные символы Юникода. Можно использовать для обхода мат-фильтра на некоторых серверах.\nНе работает на серверах на которых заблокированы символы Юникода.", + "description.wurst.hack.fastbreak": "Позволяет ломать блоки быстрее.\nСовет: Хорошо сочетается с Nuker.", + "description.wurst.hack.fastladder": "Позволяет забираться по лестницам быстрее.", + "description.wurst.hack.fastplace": "Позволяет ставить блоки в 5 раз быстрее.\nСовет: Может ускорять работу AutoBuild.", + "description.wurst.hack.feedaura": "Автоматически кормит животных вокруг.", + "description.wurst.hack.fightbot": "Бот автоматически ходит вокруг и убивает что попало.\nМожет быть полезен на моб-арене.", + "description.wurst.hack.fish": "Отключает притяжение под водой, можно плавать как рыба.", + "description.wurst.hack.flight": "Позволяет вам летать.\n\n§c§lВНИМАНИЕ:§r Вы будете получать урон от падения если не включите NoFall.", + "description.wurst.hack.follow": "Бот, который следует за ближайшей сущностью.\nОчень назойливо.\n\nИспользуйте .follow, чтобы следовать за кем-то конкретным.", + "description.wurst.hack.forceop": "Перебирает пароли AuthMe.\nМожно попробовать подобрать пароль админа :) .", + "description.wurst.hack.freecam": "Позволяет перемещать камеру не двигая персонажа.", + "description.wurst.hack.fullbright": "Позволяет видеть в темноте.", + "description.wurst.hack.glide": "Замедляет падение.\n\n§c§lВНИМАНИЕ:§r Вы всё равно будете получать урон от падения если не включите NoFall.", + "description.wurst.hack.handnoclip": "Позволяет использовать некоторые блоки через стены.", + "description.wurst.hack.headroll": "Заставляет Вас всё время кивать.\nВидно только другим игрокам.", + "description.wurst.hack.healthtags": "Показывает здоровье игроков возле ника.", + "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Около двух тысяч лет назад им воспользовался Иисус.", + "description.wurst.hack.jetpack": "Позволяет летать как с реактивным ранцем.\n\n§c§lВНИМАНИЕ:§r Вы будете получать урон от падения если не включите NoFall.", + "description.wurst.hack.kaboom": "Ломает блоки вокруг как будто произошел взрыв.\nЭто может быть намного быстрее Nuker'а если на сервере нет NoCheat+. Лучше всего работает с быстрыми инструментами и слабыми блоками.\nПометка: Это не взрыв.", + "description.wurst.hack.killauralegit": "Более медленная Killaura которую тяжелее обнаружить.\nНе нужна на обычных серверах с простым NoCheat+!", + "description.wurst.hack.killaura": "Автоматически атакует сущностей вокруг.", + "description.wurst.hack.killpotion": "Создает зелье которое убивает практически кого угодно, даже тех кто в креативе. Не работает на нежити потому что они и так мертвы лол.\n\nДля работы требуется креатив.", + "description.wurst.hack.liquids": "Позволяет ставить блоки прямо в жидкостях.", + "description.wurst.hack.lsd": "Провоцирует тяжелые галлюцинации.", + "description.wurst.hack.masstpa": "Отправляет запрос на телепортацию всем игрокам.", + "description.wurst.hack.mileycyrus": "Заставляет Вас тверкать.", + "description.wurst.hack.mobesp": "Подсвечивает мобов неподалеку.", + "description.wurst.hack.mobspawnesp": "Показывает места в которых могут заспавниться мобы.\n§eжёлтым§r - мобы могут заспавниться ночью\n§cкрасным§r - мобы могут заспавниться когда угодно", + "description.wurst.hack.multiaura": "Более быстрая Killaura которая атакует сразу несколько сущностей одновременно.", + "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.nukerlegit": "Более медленная версия Nuker которая обходит любой античит.\nНе нужна на обычных серверах с простым NoCheat+!", + "description.wurst.hack.openwateresp": "Показывает рыбачите ли Вы в 'открытой воде' и рисует вокруг области куб используемый для расчета.", + "description.wurst.hack.overlay": "Добавляет анимацию разрушения блока для Nuker.", + "description.wurst.hack.panic": "Моментально выключает все читы.\nОсторожней с этим!", + "description.wurst.hack.parkour": "Заставляет вас автоматически прыгать по достижении края блока.\nПолезно для паркуров и побегов.", + "description.wurst.hack.playeresp": "Подсвечивает игроков неподалеку.\nДрузей будет подсвечивать синим.", + "description.wurst.hack.portalgui": "Позволяет открывать инвентарь и чат в порталах.", + "description.wurst.hack.potionsaver": "Замораживает время действия всех эффектов пока Вы стоите на месте.", + "description.wurst.hack.prophuntesp": "Позволяет отличать ненастоящие блоки в Prophunt.\nСделано для Mineplex Prophunt. Может не работать на других серверах.", + "description.wurst.hack.protect": "Бот, который следует за ближайшей сущностью и защищает её от других.\nИспользуйте .protect, чтобы защищать кого-то конкретного.", + "description.wurst.hack.radar": "Радар, отображающий сущностей вокруг.\n§cкрасным§r - игроков\n§6оранжевым§r - монстров\n§aзелёным§r - животных\n§7серым§r - всех остальных", + "description.wurst.hack.rainbowui": "§cД§aе§9л§cа§aе§9т §cв§aс§9ё §cр§aа§9з§cн§aо§9ц§cв§aе§9т§cн§aы§9м.", + "description.wurst.hack.reach": "Позволяет дотягиваться дальше.", + "description.wurst.hack.remoteview": "Позволяет смотреть от лица другой сущности или игрока.\nИспользуйте .rv, чтобы посмотреть на мир глазами кого-то конкретного.", + "description.wurst.hack.safewalk": "Не даёт вам упасть с края блоков.", + "description.wurst.hack.scaffoldwalk": "Автоматически ставит блоки под ноги.", + "description.wurst.hack.search": "Помогает найти заданные блоки подсвечивая их всеми цветами радуги.", + "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.speednuker": "Более быстрая версия Nuker которая не работает с NoCheat+.", + "description.wurst.hack.spider": "Позволяет взбираться по стенам как паук.", + "description.wurst.hack.step": "Позволяет зашагивать на блоки как по ступенькам.", + "description.wurst.hack.throw": "Использует вещь несколько раз. Может быть использовано для быстрого бросания снежков и яиц, призыва мобов, установки вагонеток и т.д. в огромных количествах.\n\nЭто может создать большую нагрузку на сервер и даже его крашнуть.", + "description.wurst.hack.tillaura": "Автоматически вспахивает землю вокруг.\nНе перепутайте с Killaura.", + "description.wurst.hack.timer": "Изменяет скорость практически всего.", + "description.wurst.hack.tired": "Делает Вас как выглядел Alexander в Апреле 2015.\nВидно только другим игрокам.", + "description.wurst.hack.toomanyhax": "Отключает ненужные вам функции.\nПозволяет быть уверенным что вы не включите случайно что-то не то и получите бан.\nДля тех, кто хочеть почитерить \"совсем чуть-чуть\".\n\nИспользуйте команду §6.toomanyhax§r чтобы выбрать какие функции следует отключить.\nНапишите §6.help toomanyhax§r для более подробной информации.", + "description.wurst.hack.tp-aura": "Автоматически атакует ближайшую сущность при этом телепортируясь вокруг неё.", + "description.wurst.hack.trajectories": "Показывает траекторию полета стрел и бросаемых вещей.", + "description.wurst.hack.treebot": "Экспериментальная функция, бот который ходит и автоматически вырубает деревья.\nПока что ограничен обычными маленькими деревьями.", + "description.wurst.hack.triggerbot": "Автоматически атакует сущность на которую Вы смотрите.", + "description.wurst.hack.trollpotion": "Создает зелье с множеством противных эффектов. Для работы требуется креатив.", + "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": "Этот аккаунт имеет пароль и может присоединяться к любым серверам.", + "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": "РАЗРЕШЕНО", + "key.wurst.zoom": "Приблизить" +} diff --git a/src/main/resources/assets/wurst/lang/uk_ua.json b/src/main/resources/assets/wurst/lang/uk_ua.json index 93439183..c82b1931 100644 --- a/src/main/resources/assets/wurst/lang/uk_ua.json +++ b/src/main/resources/assets/wurst/lang/uk_ua.json @@ -1,181 +1,181 @@ -{ - "description.wurst.hack.anchoraura": "Автоматично ставить (якщо прийнято), заряджає і підриває якоря відродження, щоб убити сутності навколо.", - "description.wurst.hack.antiafk": "Ходить у випадковому напрямку, щоб сервер не знав, що ви є АФК.", - "description.wurst.hack.antiblind": "Запобігає ефекту сліпоти та темряви.\nНесумісний з OptiFine.", - "description.wurst.hack.anticactus": "Захищає вас від урону від зіткнення з кактусами.", - "description.wurst.hack.antiknockback": "Запобігає відкиданням при отриманні урону.", - "description.wurst.hack.antispam": "Блокує спам у чаті, натомість додаючи кількість повторень біля повідомлень.", - "description.wurst.hack.antiwaterpush": "Вас більше не зносить течією води.", - "description.wurst.hack.antiwobble": "Вимикає похитування екрана від порталу та ефекту нудоти.", - "description.wurst.hack.arrowdmg": "Суттєво збільшує ушкодження від стріл, але також споживає багато голоду та знижує точність.\n\nНе працює з арбалетами і, здається, виправлено на серверах Paper.", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "Коли ввімкнено, тризуби летять набагато далі. Здається, не впливає на пошкодження чи Riptide.\n\n§c§lПОПЕРЕДЖЕННЯ:§r Ви можете легко втратити свій тризуб, увімкнувши цю опцію!", - "description.wurst.hack.autoarmor": "Автоматично екіпірує найкращу броню.", - "description.wurst.hack.autobuild": "Автоматично будує об'єкти.\nПоставте блок, щоб почати будівництво.", - "description.wurst.hack.autodrop": "Автоматично викидає непотрібні речі.", - "description.wurst.hack.autoleave": "Автоматичний вихід із сервера, коли залишилося мало здоров'я.", - "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.take_items_from": "Де AutoEat має шукати їжу.", - "description.wurst.setting.autoeat.eat_while_walking": "Уповільнює, не рекомендується.", - "description.wurst.setting.autoeat.allow_hunger": "Гнила м’якоть застосовує нешкідливий ефект «голоду».\nВона безпечна для вживання в їжу та корисна як їжа для невідкладної допомоги.", - "description.wurst.setting.autoeat.allow_poison": "Отруйна їжа з часом завдає шкоди.\nНе рекомендується.", - "description.wurst.setting.autoeat.allow_chorus": "З’їдаючи фрукти хору, ви телепортуєтеся у випадкове місце.\nНе рекомендується.", - "description.wurst.hack.autofarm": "Автоматично збирає та садить урожай.\nПрацює з пшеницею, морквою, картоплею, буряком, гарбузами, кавунами, кактусами, тростиною, водоростями, бамбуком, пекельним наростом, та какао-бобами.", - "description.wurst.hack.autofish": "Автоматично ловить рибу використовуючи вашу найкращу вудку. Якщо під час риболовлі знайдеться вудка ще краще – переключиться на неї.", - "description.wurst.hack.automine": "Автоматично копає блоки на погляд.", - "description.wurst.hack.autopotion": "Автоматично кидає вибухові зілля лікування, коли у вас мало здоров'я.", - "description.wurst.hack.autoreconnect": "Автоматично перепідключається, коли вас кикає з сервера.", - "description.wurst.hack.autorespawn": "Автоматично відроджує вас після смерті.", - "description.wurst.hack.autosign": "Моментально пише заданий текст на табличках, що встановлюються. Після активації тексту, написаного на першій табличці, буде повторюватися на всіх наступних.", - "description.wurst.hack.autosoup": "Автоматично їсть суп, коли мало здоров'я.\n\n§lУвага:§r Цей чит ігнорує голод і припускає, що суп відновить здоров'я безпосередньо. Якщо на сервері такого немає, то використовуйте AutoEat.", - "description.wurst.hack.autosprint": "Автоматично включає біг.", - "description.wurst.hack.autosteal": "Автоматично забирає все із скринь та шалкерів, які ви відкриваєте.", - "description.wurst.hack.autoswim": "Автоматично включає анімацію швидкого плавання.", - "description.wurst.hack.autoswitch": "Весь час перемикає слоти на руці.\n\n§lПІДКАЗКА:§r Можна використовувати це з BuildRandom, коли у вас в хотбарі багато різнокольорової вовни або бетону.", - "description.wurst.hack.autosword": "Автоматичне використання найкращої зброї для атаки.\nПорада: Це гарний додаток до Killaura.", - "description.wurst.hack.autotool": "Автоматично екіпірує відповідний інструмент із хотбару, коли ви намагаєтеся зламати блок.", - "description.wurst.hack.autototem": "Автоматично переміщує тотеми безсмертя у другу руку.", - "description.wurst.hack.autowalk": "Примушує вас постійно йти.", - "description.wurst.hack.basefinder": "Шукає основи гравців за допомогою пошуку рукотворних блоків.\nБлоки, які ця функція знаходить, будуть підсвічені вибраним кольором.\nГарний інструмент для пошуку прихованих баз гільдій.", - "description.wurst.hack.blink": "Припиняє всі рухи поки що включений.", - "description.wurst.hack.bonemealaura": "Автоматично використовує кісткове борошно на рослинах.\nПозначте меню, на яких типах рослин використовувати.", - "description.wurst.hack.bowaimbot": "Автоматично цілиться із луку або арбалета.", - "description.wurst.hack.buildrandom": "Ставить навколо блоків у випадковому порядку.", - "description.wurst.hack.bunnyhop": "Примушує вас постійно стрибати.", - "description.wurst.hack.cameranoclip": "Дозволяє камеру від 3-ї особи пройти через стіни.", - "description.wurst.hack.cavefinder": "Допомагає знайти печери, підсвічуючи їх вибраним кольором.", - "description.wurst.hack.chattranslator": "Всі вхідні повідомлення в чаті будуть перекладатися Google перекладачем.", - "description.wurst.hack.chestesp": "Підсвічує вибраним кольором скрині поблизу.", - "description.wurst.hack.clickaura": "Автоматично атакує найближчу сутність, коли ви натискаєте ЛКМ.\n\n§c§lУВАГА:§r ClickAura'и звичайно виглядають більш підозріло, ніж Killaura'и і легше виявляються плагінами. Краще використовувати Killaura або TriggerBot.", - "description.wurst.hack.clickgui": "Інтерфейс із панелями.", - "description.wurst.hack.crashchest": "Створює скриню, яка банить того, у кого буде занадто багато копій такої скрині в інвентарі. §c§lУВАГА:§r §cЦе необоротно. Використовуйте з обережністю!§r\n\nЯкщо замість купу таких копій засунути в скриню, то будь-хто її відкриє вилетить із сервера (не назавжди).", - "description.wurst.hack.creativeflight": "Дозволяє літати як у креативі.\n\n§c§lУВАГА:§r Ви все одно будете отримувати урон від падіння, якщо не увімкніть NoFall.", - "description.wurst.hack.criticals": "Всі ваші удари тепер будуть з критами, ніби ви щоразу стрибали.", - "description.wurst.hack.crystalaura": "Автоматично ставить (якщо прийнято) і підриває кристали, щоб убити сутності навколо.", - "description.wurst.hack.derp": "Крутить головою у випадковому напрямку.\nВидно лише іншим гравцям.", - "description.wurst.hack.dolphin": "Примушує вас автоматично спливати.\n(як дельфін)", - "description.wurst.hack.excavator": "Автоматично викопує всі блоки у вибраній області.", - "description.wurst.hack.extraelytra": "Полегшує використання Елітри.", - "description.wurst.hack.fancychat": "Замінює звичайні букви на зламані. Можна використовувати для обхіду мат-фільтра на деяких серверах.\nНе працює на серверах, на яких заблоковано символи Юнікоду.", - "description.wurst.hack.fastbreak": "Дозволяє ламати блоки швидше.\nПорада: Добре поєднується з Nuker.", - "description.wurst.hack.fastladder": "Дозволяє забиратися сходами швидше.", - "description.wurst.hack.fastplace": "Дозволяє ставити блоки в 5 разів швидше.\nПорада: Може прискорити AutoBuild.", - "description.wurst.hack.feedaura": "Автоматично годує тварин довкола.", - "description.wurst.hack.fightbot": "Бот автоматично ходить і вбиває будь-що.\nМоже бути корисним на моб-арені.", - "description.wurst.hack.fish": "Відключає тяжіння під водою, можна плавати, як риба.", - "description.wurst.hack.flight": "Дозволяє вам літати.\n\n§c§lУВАГА:§r Ви отримаєте шкоду від падіння якщо неїте NoFall.", - "description.wurst.hack.follow": "Бот який слідує за найближчою сутністю.\nДуже настирливо.\n\nВикористовуйте .follow, щоб слідувати за кимось конкретним.", - "description.wurst.hack.forceop": "Перебирає паролі AuthMe.\nМожна спробувати підібрати пароль адміну :).", - "description.wurst.hack.freecam": "Дозволяє переміщати камеру, не рухаючи персонажа.", - "description.wurst.hack.fullbright": "Дозволяє бачити у темряві.", - "description.wurst.hack.glide": "Уповільнює падіння.\n\n§c§lУВАГА:§r Ви все одно отримувати урон від падіння якщо не використовуєте NoFall.", - "description.wurst.hack.handnoclip": "Дозволяє взаємодіяти з деякими блоками через стіни.", - "description.wurst.hack.headroll": "Примушує вас постійно кивати.\nВидно лише іншим гравцям.", - "description.wurst.hack.healthtags": "Показує здоров'я гравців біля ніку.", - "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.", - "description.wurst.setting.invwalk.allow_other": "Дозволяє пересуватися, поки відкриті інші екрани в грі (наприклад, скриня, кінь, торгівля селянами), якщо на екрані немає текстового поля.", - "description.wurst.hack.itemesp": "Підсвічує речі, що лежать.", - "description.wurst.hack.itemgenerator": "Створює випадкові речі та викидає їх.\n§oПрацює тільки в креативі.§r", - "description.wurst.hack.jesus": "Дозволяє ходити по воді.\nБлизько двох тисяч років тому ним користувався Ісус.", - "description.wurst.hack.jetpack": "Дозволяє літати наче з реактивним ранцем.\n\n§c§lУВАГА:§r Ви отримаєте урон від падіння, якщо не увімкніть NoFall.", - "description.wurst.hack.kaboom": "Ламають блоки навколо, ніби стався вибух.\nЦе може бути набагато швидше за Nuker'а якщо на сервері немає NoCheat+ Найкраще працює зі швидкими інструментами та слабкими блоками.\nПримітка: Насправді це ніякий не вибух.", - "description.wurst.hack.killauralegit": "Повільніша Killaura яку важче виявити\nНе потрібна на звичайних серверах із простим NoCheat+!", - "description.wurst.hack.killaura": "Автоматично атакує сутності довкола.", - "description.wurst.hack.killpotion": "Створює зілля вбиває практично будь-кого, навіть тих хто в креативі. Не працює на нежиті, бо вони мертві лол.\n\nДля роботи потрібен креатив.", - "description.wurst.hack.liquids": "Дозволяє ставити блоки прямо на рідині.", - "description.wurst.hack.lsd": "Провокує тяжкі галюцинації.", - "description.wurst.hack.masstpa": "Надсилає запит на телепортацію всім гравцям.", - "description.wurst.hack.mileycyrus": "Примушує вас тверкати.", - "description.wurst.hack.mobesp": "Підсвічує мобів знову.", - "description.wurst.hack.mobspawnesp": "Показує місця, у яких можуть народитися моби.\n§eжовтим§r - моби можуть народитися вночі\n§cчервоним§r - моби можуть народиться коли завгодно", - "description.wurst.hack.multiaura": "Швидша Killaura, яка атакує відразу кілька сутностей одночасно.", - "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. Протестовано на Vanilla, 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": "Дозволяє встановити погоду, час дня та фазу місяця. Тільки на вашому боці, на сервері нічого не зміниться.", - "description.wurst.hack.noweb": "Павутина більше не сповільнюватиме вас.", - "description.wurst.hack.nuker": "Автоматично ламає блоки довкола.", - "description.wurst.hack.nukerlegit": "Повільніша версія Nuker яка обходить будь-який античит.\nНе потрібна на звичайних серверах із загальним NoCheat+!", - "description.wurst.hack.openwateresp": "Показує чи рибаєте ви у 'відкритій воді' і малює область лову риби.", - "description.wurst.hack.overlay": "Додає анімацію до руйнування блоку.", - "description.wurst.hack.panic": "Миттєво вимикає всі чити.\nОбережніше з цим!", - "description.wurst.hack.parkour": "Примушує вас автоматично стрибати після досягнення краю блоку.\nКорисно для паркурів та пагонів.", - "description.wurst.hack.playeresp": "Підсвічує гравців.\nДрузів буде підсвічувати синім.", - "description.wurst.hack.portalgui": "Дозволяє відкривати інвентар та чат у порталах.", - "description.wurst.hack.potionsaver": "Заморожує дію всіх ефектів, поки ви стоїте на місці.", - "description.wurst.hack.prophuntesp": "Дозволяє відрізняти несправжні блоки в Prophunt.\nЗроблено для Mineplex Prophunt. Може працювати на інших серверах.", - "description.wurst.hack.protect": "Бот який слідує за найближчу сутність і захищає її від інших. Використовуйте .protect, щоб захищати когось конкретного.", - "description.wurst.hack.radar": "Радар, що відображає сутності довкола.\n§cчервоним§r - гравців\n§6оранжевим§r - монстром\n§aзеленим§r - тварин\n§7сірим§r - інших", - "description.wurst.hack.rainbowui": "§cР§aо§9б§cи§aт§9ь §cу§aс§9е §cр§aі§9з§cн§aо§9к§cо§aл§9ь§cо§ар§9о§cв§aи§9м.", - "description.wurst.hack.reach": "Дозволяє дотягуватися далі.", - "description.wurst.hack.remoteview": "Дозволяє дивитися від лиця іншої сутності чи гравця.\nВикористовуйте .rv щоб подивитися на світ очима когось конкретного.", - "description.wurst.hack.safewalk": "Не дає вам впасти із краю блока.", - "description.wurst.hack.scaffoldwalk": "Автоматично ставить блоки під ноги.", - "description.wurst.hack.search": "Допомагає знайти задані блоки, підсвічуючи їх усіма кольорами веселки.", - "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.speednuker": "Швидша версія Nuker яка не буде працювати з NoCheat+.", - "description.wurst.hack.spider": "Дозволяє підніматися по стінах як павучок.", - "description.wurst.hack.step": "Дозволяє крокувати на блоки як по сходах.", - "description.wurst.hack.throw": "Використовує річ кілька разів. Може бути використаний для швидкого кидання сніжків або яєць, відроджувати мобів, ставити вагонетки і т.д. у величезних кількостях.\n\nЦе може створити на сервері велике навантаження і навіть його крашити.", - "description.wurst.hack.tillaura": "Автоматично орає землю навколо.\nНе плутайте з Killaura.", - "description.wurst.hack.timer": "Змінює швидкість практично всього.", - "description.wurst.hack.tired": "Робить вас на вигляд яким був Alexander у квітні 2015 року.\nВидно тільки іншим гравцям.", - "description.wurst.hack.toomanyhax": "Вимикає непотрібні функції.\nДозволяє бути впевненим, що ви не отримаєте бан.\nДля тих, хто хоче почитерити \"зовсім трохи\".\n\nВикористовуйте §6.toomanyhax§r, щоб вибрати які функції відключити.\nНапишіть §6.help toomanyhax§r для більш детальної інформації.", - "description.wurst.hack.tp-aura": "Автоматично атакує найближчу сутність, при цьому телепортуючись навколо неї.", - "description.wurst.hack.trajectories": "Передбачає траєкторію польоту стріл або речей, що кидаються.", - "description.wurst.hack.treebot": "Експериментальна функція, бот, який ходить та автоматично вирубує дерева.\nПоки що обмежений звичайними маленькими деревами.", - "description.wurst.hack.triggerbot": "Автоматично атакує суть, на яку ви дивитеся.", - "description.wurst.hack.trollpotion": "Створює зілля з безліччю неприємних ефектів. Для роботи потрібний креатив.", - "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Якщо §ви §відправляєте §чат-повідомлення §з §підписами, §ваш §саккаунт §в §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": "ДОЗВОЛЕНО" -} \ No newline at end of file +{ + "description.wurst.hack.anchoraura": "Автоматично ставить (якщо прийнято), заряджає і підриває якоря відродження, щоб убити сутності навколо.", + "description.wurst.hack.antiafk": "Ходить у випадковому напрямку, щоб сервер не знав, що ви є АФК.", + "description.wurst.hack.antiblind": "Запобігає ефекту сліпоти та темряви.\nНесумісний з OptiFine.", + "description.wurst.hack.anticactus": "Захищає вас від урону від зіткнення з кактусами.", + "description.wurst.hack.antiknockback": "Запобігає відкиданням при отриманні урону.", + "description.wurst.hack.antispam": "Блокує спам у чаті, натомість додаючи кількість повторень біля повідомлень.", + "description.wurst.hack.antiwaterpush": "Вас більше не зносить течією води.", + "description.wurst.hack.antiwobble": "Вимикає похитування екрана від порталу та ефекту нудоти.", + "description.wurst.hack.arrowdmg": "Суттєво збільшує ушкодження від стріл, але також споживає багато голоду та знижує точність.\n\nНе працює з арбалетами і, здається, виправлено на серверах Paper.", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "Коли ввімкнено, тризуби летять набагато далі. Здається, не впливає на пошкодження чи Riptide.\n\n§c§lПОПЕРЕДЖЕННЯ:§r Ви можете легко втратити свій тризуб, увімкнувши цю опцію!", + "description.wurst.hack.autoarmor": "Автоматично екіпірує найкращу броню.", + "description.wurst.hack.autobuild": "Автоматично будує об'єкти.\nПоставте блок, щоб почати будівництво.", + "description.wurst.hack.autodrop": "Автоматично викидає непотрібні речі.", + "description.wurst.hack.autoleave": "Автоматичний вихід із сервера, коли залишилося мало здоров'я.", + "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.take_items_from": "Де AutoEat має шукати їжу.", + "description.wurst.setting.autoeat.eat_while_walking": "Уповільнює, не рекомендується.", + "description.wurst.setting.autoeat.allow_hunger": "Гнила м’якоть застосовує нешкідливий ефект «голоду».\nВона безпечна для вживання в їжу та корисна як їжа для невідкладної допомоги.", + "description.wurst.setting.autoeat.allow_poison": "Отруйна їжа з часом завдає шкоди.\nНе рекомендується.", + "description.wurst.setting.autoeat.allow_chorus": "З’їдаючи фрукти хору, ви телепортуєтеся у випадкове місце.\nНе рекомендується.", + "description.wurst.hack.autofarm": "Автоматично збирає та садить урожай.\nПрацює з пшеницею, морквою, картоплею, буряком, гарбузами, кавунами, кактусами, тростиною, водоростями, бамбуком, пекельним наростом, та какао-бобами.", + "description.wurst.hack.autofish": "Автоматично ловить рибу використовуючи вашу найкращу вудку. Якщо під час риболовлі знайдеться вудка ще краще – переключиться на неї.", + "description.wurst.hack.automine": "Автоматично копає блоки на погляд.", + "description.wurst.hack.autopotion": "Автоматично кидає вибухові зілля лікування, коли у вас мало здоров'я.", + "description.wurst.hack.autoreconnect": "Автоматично перепідключається, коли вас кикає з сервера.", + "description.wurst.hack.autorespawn": "Автоматично відроджує вас після смерті.", + "description.wurst.hack.autosign": "Моментально пише заданий текст на табличках, що встановлюються. Після активації тексту, написаного на першій табличці, буде повторюватися на всіх наступних.", + "description.wurst.hack.autosoup": "Автоматично їсть суп, коли мало здоров'я.\n\n§lУвага:§r Цей чит ігнорує голод і припускає, що суп відновить здоров'я безпосередньо. Якщо на сервері такого немає, то використовуйте AutoEat.", + "description.wurst.hack.autosprint": "Автоматично включає біг.", + "description.wurst.hack.autosteal": "Автоматично забирає все із скринь та шалкерів, які ви відкриваєте.", + "description.wurst.hack.autoswim": "Автоматично включає анімацію швидкого плавання.", + "description.wurst.hack.autoswitch": "Весь час перемикає слоти на руці.\n\n§lПІДКАЗКА:§r Можна використовувати це з BuildRandom, коли у вас в хотбарі багато різнокольорової вовни або бетону.", + "description.wurst.hack.autosword": "Автоматичне використання найкращої зброї для атаки.\nПорада: Це гарний додаток до Killaura.", + "description.wurst.hack.autotool": "Автоматично екіпірує відповідний інструмент із хотбару, коли ви намагаєтеся зламати блок.", + "description.wurst.hack.autototem": "Автоматично переміщує тотеми безсмертя у другу руку.", + "description.wurst.hack.autowalk": "Примушує вас постійно йти.", + "description.wurst.hack.basefinder": "Шукає основи гравців за допомогою пошуку рукотворних блоків.\nБлоки, які ця функція знаходить, будуть підсвічені вибраним кольором.\nГарний інструмент для пошуку прихованих баз гільдій.", + "description.wurst.hack.blink": "Припиняє всі рухи поки що включений.", + "description.wurst.hack.bonemealaura": "Автоматично використовує кісткове борошно на рослинах.\nПозначте меню, на яких типах рослин використовувати.", + "description.wurst.hack.bowaimbot": "Автоматично цілиться із луку або арбалета.", + "description.wurst.hack.buildrandom": "Ставить навколо блоків у випадковому порядку.", + "description.wurst.hack.bunnyhop": "Примушує вас постійно стрибати.", + "description.wurst.hack.cameranoclip": "Дозволяє камеру від 3-ї особи пройти через стіни.", + "description.wurst.hack.cavefinder": "Допомагає знайти печери, підсвічуючи їх вибраним кольором.", + "description.wurst.hack.chattranslator": "Всі вхідні повідомлення в чаті будуть перекладатися Google перекладачем.", + "description.wurst.hack.chestesp": "Підсвічує вибраним кольором скрині поблизу.", + "description.wurst.hack.clickaura": "Автоматично атакує найближчу сутність, коли ви натискаєте ЛКМ.\n\n§c§lУВАГА:§r ClickAura'и звичайно виглядають більш підозріло, ніж Killaura'и і легше виявляються плагінами. Краще використовувати Killaura або TriggerBot.", + "description.wurst.hack.clickgui": "Інтерфейс із панелями.", + "description.wurst.hack.crashchest": "Створює скриню, яка банить того, у кого буде занадто багато копій такої скрині в інвентарі. §c§lУВАГА:§r §cЦе необоротно. Використовуйте з обережністю!§r\n\nЯкщо замість купу таких копій засунути в скриню, то будь-хто її відкриє вилетить із сервера (не назавжди).", + "description.wurst.hack.creativeflight": "Дозволяє літати як у креативі.\n\n§c§lУВАГА:§r Ви все одно будете отримувати урон від падіння, якщо не увімкніть NoFall.", + "description.wurst.hack.criticals": "Всі ваші удари тепер будуть з критами, ніби ви щоразу стрибали.", + "description.wurst.hack.crystalaura": "Автоматично ставить (якщо прийнято) і підриває кристали, щоб убити сутності навколо.", + "description.wurst.hack.derp": "Крутить головою у випадковому напрямку.\nВидно лише іншим гравцям.", + "description.wurst.hack.dolphin": "Примушує вас автоматично спливати.\n(як дельфін)", + "description.wurst.hack.excavator": "Автоматично викопує всі блоки у вибраній області.", + "description.wurst.hack.extraelytra": "Полегшує використання Елітри.", + "description.wurst.hack.fancychat": "Замінює звичайні букви на зламані. Можна використовувати для обхіду мат-фільтра на деяких серверах.\nНе працює на серверах, на яких заблоковано символи Юнікоду.", + "description.wurst.hack.fastbreak": "Дозволяє ламати блоки швидше.\nПорада: Добре поєднується з Nuker.", + "description.wurst.hack.fastladder": "Дозволяє забиратися сходами швидше.", + "description.wurst.hack.fastplace": "Дозволяє ставити блоки в 5 разів швидше.\nПорада: Може прискорити AutoBuild.", + "description.wurst.hack.feedaura": "Автоматично годує тварин довкола.", + "description.wurst.hack.fightbot": "Бот автоматично ходить і вбиває будь-що.\nМоже бути корисним на моб-арені.", + "description.wurst.hack.fish": "Відключає тяжіння під водою, можна плавати, як риба.", + "description.wurst.hack.flight": "Дозволяє вам літати.\n\n§c§lУВАГА:§r Ви отримаєте шкоду від падіння якщо неїте NoFall.", + "description.wurst.hack.follow": "Бот який слідує за найближчою сутністю.\nДуже настирливо.\n\nВикористовуйте .follow, щоб слідувати за кимось конкретним.", + "description.wurst.hack.forceop": "Перебирає паролі AuthMe.\nМожна спробувати підібрати пароль адміну :).", + "description.wurst.hack.freecam": "Дозволяє переміщати камеру, не рухаючи персонажа.", + "description.wurst.hack.fullbright": "Дозволяє бачити у темряві.", + "description.wurst.hack.glide": "Уповільнює падіння.\n\n§c§lУВАГА:§r Ви все одно отримувати урон від падіння якщо не використовуєте NoFall.", + "description.wurst.hack.handnoclip": "Дозволяє взаємодіяти з деякими блоками через стіни.", + "description.wurst.hack.headroll": "Примушує вас постійно кивати.\nВидно лише іншим гравцям.", + "description.wurst.hack.healthtags": "Показує здоров'я гравців біля ніку.", + "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.", + "description.wurst.setting.invwalk.allow_other": "Дозволяє пересуватися, поки відкриті інші екрани в грі (наприклад, скриня, кінь, торгівля селянами), якщо на екрані немає текстового поля.", + "description.wurst.hack.itemesp": "Підсвічує речі, що лежать.", + "description.wurst.hack.itemgenerator": "Створює випадкові речі та викидає їх.\n§oПрацює тільки в креативі.§r", + "description.wurst.hack.jesus": "Дозволяє ходити по воді.\nБлизько двох тисяч років тому ним користувався Ісус.", + "description.wurst.hack.jetpack": "Дозволяє літати наче з реактивним ранцем.\n\n§c§lУВАГА:§r Ви отримаєте урон від падіння, якщо не увімкніть NoFall.", + "description.wurst.hack.kaboom": "Ламають блоки навколо, ніби стався вибух.\nЦе може бути набагато швидше за Nuker'а якщо на сервері немає NoCheat+ Найкраще працює зі швидкими інструментами та слабкими блоками.\nПримітка: Насправді це ніякий не вибух.", + "description.wurst.hack.killauralegit": "Повільніша Killaura яку важче виявити\nНе потрібна на звичайних серверах із простим NoCheat+!", + "description.wurst.hack.killaura": "Автоматично атакує сутності довкола.", + "description.wurst.hack.killpotion": "Створює зілля вбиває практично будь-кого, навіть тих хто в креативі. Не працює на нежиті, бо вони мертві лол.\n\nДля роботи потрібен креатив.", + "description.wurst.hack.liquids": "Дозволяє ставити блоки прямо на рідині.", + "description.wurst.hack.lsd": "Провокує тяжкі галюцинації.", + "description.wurst.hack.masstpa": "Надсилає запит на телепортацію всім гравцям.", + "description.wurst.hack.mileycyrus": "Примушує вас тверкати.", + "description.wurst.hack.mobesp": "Підсвічує мобів знову.", + "description.wurst.hack.mobspawnesp": "Показує місця, у яких можуть народитися моби.\n§eжовтим§r - моби можуть народитися вночі\n§cчервоним§r - моби можуть народиться коли завгодно", + "description.wurst.hack.multiaura": "Швидша Killaura, яка атакує відразу кілька сутностей одночасно.", + "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. Протестовано на Vanilla, 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": "Дозволяє встановити погоду, час дня та фазу місяця. Тільки на вашому боці, на сервері нічого не зміниться.", + "description.wurst.hack.noweb": "Павутина більше не сповільнюватиме вас.", + "description.wurst.hack.nuker": "Автоматично ламає блоки довкола.", + "description.wurst.hack.nukerlegit": "Повільніша версія Nuker яка обходить будь-який античит.\nНе потрібна на звичайних серверах із загальним NoCheat+!", + "description.wurst.hack.openwateresp": "Показує чи рибаєте ви у 'відкритій воді' і малює область лову риби.", + "description.wurst.hack.overlay": "Додає анімацію до руйнування блоку.", + "description.wurst.hack.panic": "Миттєво вимикає всі чити.\nОбережніше з цим!", + "description.wurst.hack.parkour": "Примушує вас автоматично стрибати після досягнення краю блоку.\nКорисно для паркурів та пагонів.", + "description.wurst.hack.playeresp": "Підсвічує гравців.\nДрузів буде підсвічувати синім.", + "description.wurst.hack.portalgui": "Дозволяє відкривати інвентар та чат у порталах.", + "description.wurst.hack.potionsaver": "Заморожує дію всіх ефектів, поки ви стоїте на місці.", + "description.wurst.hack.prophuntesp": "Дозволяє відрізняти несправжні блоки в Prophunt.\nЗроблено для Mineplex Prophunt. Може працювати на інших серверах.", + "description.wurst.hack.protect": "Бот який слідує за найближчу сутність і захищає її від інших. Використовуйте .protect, щоб захищати когось конкретного.", + "description.wurst.hack.radar": "Радар, що відображає сутності довкола.\n§cчервоним§r - гравців\n§6оранжевим§r - монстром\n§aзеленим§r - тварин\n§7сірим§r - інших", + "description.wurst.hack.rainbowui": "§cР§aо§9б§cи§aт§9ь §cу§aс§9е §cр§aі§9з§cн§aо§9к§cо§aл§9ь§cо§ар§9о§cв§aи§9м.", + "description.wurst.hack.reach": "Дозволяє дотягуватися далі.", + "description.wurst.hack.remoteview": "Дозволяє дивитися від лиця іншої сутності чи гравця.\nВикористовуйте .rv щоб подивитися на світ очима когось конкретного.", + "description.wurst.hack.safewalk": "Не дає вам впасти із краю блока.", + "description.wurst.hack.scaffoldwalk": "Автоматично ставить блоки під ноги.", + "description.wurst.hack.search": "Допомагає знайти задані блоки, підсвічуючи їх усіма кольорами веселки.", + "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.speednuker": "Швидша версія Nuker яка не буде працювати з NoCheat+.", + "description.wurst.hack.spider": "Дозволяє підніматися по стінах як павучок.", + "description.wurst.hack.step": "Дозволяє крокувати на блоки як по сходах.", + "description.wurst.hack.throw": "Використовує річ кілька разів. Може бути використаний для швидкого кидання сніжків або яєць, відроджувати мобів, ставити вагонетки і т.д. у величезних кількостях.\n\nЦе може створити на сервері велике навантаження і навіть його крашити.", + "description.wurst.hack.tillaura": "Автоматично орає землю навколо.\nНе плутайте з Killaura.", + "description.wurst.hack.timer": "Змінює швидкість практично всього.", + "description.wurst.hack.tired": "Робить вас на вигляд яким був Alexander у квітні 2015 року.\nВидно тільки іншим гравцям.", + "description.wurst.hack.toomanyhax": "Вимикає непотрібні функції.\nДозволяє бути впевненим, що ви не отримаєте бан.\nДля тих, хто хоче почитерити \"зовсім трохи\".\n\nВикористовуйте §6.toomanyhax§r, щоб вибрати які функції відключити.\nНапишіть §6.help toomanyhax§r для більш детальної інформації.", + "description.wurst.hack.tp-aura": "Автоматично атакує найближчу сутність, при цьому телепортуючись навколо неї.", + "description.wurst.hack.trajectories": "Передбачає траєкторію польоту стріл або речей, що кидаються.", + "description.wurst.hack.treebot": "Експериментальна функція, бот, який ходить та автоматично вирубує дерева.\nПоки що обмежений звичайними маленькими деревами.", + "description.wurst.hack.triggerbot": "Автоматично атакує суть, на яку ви дивитеся.", + "description.wurst.hack.trollpotion": "Створює зілля з безліччю неприємних ефектів. Для роботи потрібний креатив.", + "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Якщо §ви §відправляєте §чат-повідомлення §з §підписами, §ваш §саккаунт §в §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": "ДОЗВОЛЕНО" +} diff --git a/src/main/resources/assets/wurst/lang/zh_cn.json b/src/main/resources/assets/wurst/lang/zh_cn.json index 12755980..7cb3db00 100644 --- a/src/main/resources/assets/wurst/lang/zh_cn.json +++ b/src/main/resources/assets/wurst/lang/zh_cn.json @@ -5,7 +5,7 @@ "description.wurst.hack.antiafk": "随机走动,用于避免服务器挂机检测。", "description.wurst.hack.antiblind": "防止失明和黑暗效果。\n与 OptiFine 不兼容。", "description.wurst.hack.anticactus": "保护你免受仙人掌伤害。", - "description.wurst.hack.antientitypush": "保护你不会被玩家和其他生物推挤。", + "description.wurst.hack.antientitypush": "保护你不会被玩家和其他生物推挤。", "description.wurst.hack.antihunger": "在你走路时减缓你的饥饿状态。", "description.wurst.hack.antiknockback": "保护你不被其他生物或玩家推动和用剑击退。", "description.wurst.hack.antispam": "将重复的刷屏改为计数器显示。", diff --git a/src/main/resources/assets/wurst/lang/zh_hk.json b/src/main/resources/assets/wurst/lang/zh_hk.json index 1ce6031f..a858936d 100644 --- a/src/main/resources/assets/wurst/lang/zh_hk.json +++ b/src/main/resources/assets/wurst/lang/zh_hk.json @@ -164,4 +164,4 @@ "gui.wurst.altmanager.empty.title": "你嘅帳號列表係空嘅。", "gui.wurst.altmanager.empty.message": "你想唔想要啲隨機嘅帳號嚟開始?", "key.wurst.zoom": "縮放" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/wurst/lang/zh_tw.json b/src/main/resources/assets/wurst/lang/zh_tw.json index 02cd7205..2f1c9b1b 100644 --- a/src/main/resources/assets/wurst/lang/zh_tw.json +++ b/src/main/resources/assets/wurst/lang/zh_tw.json @@ -1,186 +1,186 @@ -{ - "description.wurst.hack.airplace": "允許你在半空中放置方塊。", - "description.wurst.hack.anchoraura": "自動放置(可選),充能並引爆重生錨並擊殺你附近的實體。", - "description.wurst.hack.antiafk": "隨機走動,用於避免伺服器掛機檢測。", - "description.wurst.hack.antiblind": "防止失明和黑暗效果。\n與 OptiFine不相容。", - "description.wurst.hack.anticactus": "保護你免受仙人掌傷害。", - "description.wurst.hack.antihunger": "走路時減緩你的飢餓度。", - "description.wurst.hack.antiknockback": "保護你不會被其他生物或玩家推動和用劍擊退。", - "description.wurst.hack.antispam": "預防存在的重複刷屏,改為用計數器顯示。", - "description.wurst.hack.antiwaterpush": "防止你被水流推動。", - "description.wurst.hack.antiwobble": "關閉因反胃和傳送門引起的搖晃效果。", - "description.wurst.hack.arrowdmg": "大幅增加箭的傷害,但也會消耗大量飢餓值並降低準確性。\n\n不適用於弩,並且似乎已在紙質服務器上進行了修補。", - "description.wurst.setting.arrowdmg.trident_yeet_mode": "啟用後,三叉戟飛得更遠。 似乎不會影響傷害或激流。\n\n§c§l警告:§r 啟用此選項很容易丟失三叉戟!", - "description.wurst.hack.autoarmor": "自動管理你的盔甲。", - "description.wurst.hack.autobuild": "自動建築東西。\n放一個方塊就開始自動建造。", - "description.wurst.hack.autodrop": "自動丟棄你不想要的物品(有預設)。", - "description.wurst.hack.autoleave": "如果你的血量低於設定值,將會自動退出伺服器。", - "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.take_items_from": "AutoEat 應該在哪裡尋找食物。", - "description.wurst.setting.autoeat.eat_while_walking": "減慢速度,不推薦。", - "description.wurst.setting.autoeat.allow_hunger": "腐肉具有無害的“飢餓”效果。\n可安全食用,可用作緊急食品。", - "description.wurst.setting.autoeat.allow_poison": "有毒食物會隨著時間的推移造成傷害。\n不推薦。", - "description.wurst.setting.autoeat.allow_chorus": "吃紫頌果會將你傳送到一個隨機位置。\n不推薦。", - "description.wurst.hack.autofarm": "自動收穫與種植農作物。\n有效作物為小麥、胡蘿蔔、馬鈴薯、紅菜頭根、南瓜、西瓜、仙人掌、甘蔗、海帶、竹子、地狱疙瘩和可可豆。", - "description.wurst.hack.autofish": "自動使用最好的魚竿釣魚,如果在此期間獲得了更好的魚竿,就會自動切換到它。", - "description.wurst.hack.automine": "自動挖掘你眼前所指的方塊。", - "description.wurst.hack.autopotion": "當你的生命值低於設定值時,自動扔一瓶噴濺型瞬間恢復藥水。", - "description.wurst.hack.autoreconnect": "當你被伺服器踢出時候,自動重連。", - "description.wurst.hack.autorespawn": "當你死亡的時候自動重生。", - "description.wurst.hack.autosign": "立即在每個牌子上寫下任何你想要的文字,當此功能啟動的時候,你只需要很普通的在第一個牌子上,寫你想要的文字,之後接下來所有牌子都跟上一個一樣。", - "description.wurst.hack.autosoup": "當你生命值低下的時候自動喝蘑菇煲。\n\n§l注意:§r這個功能是忽視“饑餓值”,因為特定伺服器小遊戲內(如Hypixel),喝湯是直接補充生命,而不是回復飽腹值。如果你正在玩的伺服器沒有這個功能,請使用AutoEat功能而不是這個。", - "description.wurst.hack.autosprint": "讓你自動進入疾跑。", - "description.wurst.hack.autosteal": "你所打開的箱子以及界伏盒會自動盜竊裡面所有物品。", - "description.wurst.hack.autoswim": "當你在水中會自動切換泳姿狀態。", - "description.wurst.hack.autoswitch": "按順序自動切換快捷欄位。\n\n§l進階提示:§r倘若在你的快捷欄有不同顏色的羊毛以及,不同顏色的混粘土,利用這個功能與BuildRandom同時使用會出現意想不到的效果。", - "description.wurst.hack.autosword": "當你攻擊實體的時候,自動使用快捷欄中最好的武器。\n提示:在使用Killaura功能時候,最好開啟。", - "description.wurst.hack.autotool": "當你破壞方塊的時候會在你的物品快捷欄中切換成最優的破壞工具。", - "description.wurst.hack.autototem": "自動將不死圖騰移動到副手上。", - "description.wurst.hack.autowalk": "讓你自動走路,不需要自己按著W鍵。", - "description.wurst.hack.basefinder": "通過尋找人為建造的方塊以找到玩家的基地\n假如方塊被找到將會高亮以你所選的顏色。\n建議用於尋找幫派的基地。", - "description.wurst.hack.blink": "暫停所有動作更新,並在關閉時繼續。", - "description.wurst.hack.boatfly": "允許您乘船和其他車輛飛行。\n按跑步鍵可以更快地下降。", - "description.wurst.hack.bonemealaura": "在指定的作物上自動使用骨粉。\n使用核取方塊來指定作物。", - "description.wurst.hack.bowaimbot": "當你用弓或者弩時自動瞄準所設定的實體。", - "description.wurst.hack.buildrandom": "在你的附近隨機放置方塊。", - "description.wurst.hack.bunnyhop": "讓你自動跳躍,但不能做到像CSGO一樣。", - "description.wurst.hack.cameradistance": "允許你在第三人稱中改變鏡頭距離。", - "description.wurst.hack.cameranoclip": "允許第三人稱攝像機忽視牆體碰撞直接把視角穿過去。", - "description.wurst.hack.cavefinder": "幫助你找到洞穴並以你所選的顏色將他們高亮。", - "description.wurst.hack.chattranslator": "從聊天欄的資訊利用Google翻譯成你所指定的語言。", - "description.wurst.hack.chestesp": "按你所設定的顏色高亮附近的箱子、潜影盒、陷阱箱、末影箱。", - "description.wurst.hack.clickaura": "當瞄準的時候。自動攻擊你附近有效的實體\n\n§c§l警告:§r此功能通常來說比Killaura更加容易被發現且被檢測出來,這極力推薦使用Killaura或者TriggerBot作為替代。", - "description.wurst.hack.clickgui": "基於視窗的點擊式GUI(有分類)。", - "description.wurst.hack.crashchest": "生成一個容易封禁玩家的箱子,如果他們複製大量的箱子在他們背包裡面§c§l警告:§r§c這個無法撤銷。請小心使用!§r\n\n如果複製出來被放在箱子裏,無論誰打開箱子就會被踢出伺服器(只要一個)。", - "description.wurst.hack.creativeflight": "可以跟創造模式的飛行沒啥兩樣(即按兩下空格起飛)。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", - "description.wurst.hack.criticals": "將你的攻擊全變為暴擊。", - "description.wurst.hack.crystalaura": "自動放置(可選)並引爆末影水晶殺死你附近的實體。", - "description.wurst.hack.derp": "讓你的頭瘋狂到處隨機轉動。\n僅限其他玩家可視。", - "description.wurst.hack.dolphin": "讓你在水中浮起來。\n(就像海豚一樣)", - "description.wurst.hack.excavator": "自動破壞所選區域內的所有方塊。", - "description.wurst.hack.extraelytra": "讓你的鞘翅更加容易使用。", - "description.wurst.hack.fancychat": "替換ASCII字元在發送消息時,變成更好的Unicode字元。可以用於繞過英文單詞字元限制在一些伺服器上。\n但對於那些禁用Unicode字元的伺服器不起作用。", - "description.wurst.hack.fastbreak": "允許你更快的破壞方塊。\n提示:可以和Nuker功能配合利用。", - "description.wurst.hack.fastladder": "允許你爬梯的速度加快。", - "description.wurst.hack.fastplace": "允許你正常放置方塊速度的5倍或以上。\n提示:這個能新增AutoBuild功能的速度。", - "description.wurst.hack.feedaura": "自動餵食你附近的動物。", - "description.wurst.hack.fightbot": "仿照機器人會自動跟隨並擊殺最近的實體。\n很適合刷怪區域。", - "description.wurst.hack.fish": "關閉水底的重力,所以你可以像魚一樣游泳。", - "description.wurst.hack.flight": "允許你飛天。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", - "description.wurst.hack.follow": "跟機器人一樣跟隨最近的實體。\n非常惹惱人。\n\n使用.follow指令跟隨特定的實體。", - "description.wurst.hack.forceop": "破解AuthMe登入挿件密碼。\n一般用於獲得OP。(PS:只是撞庫,跑密碼的軟件)", - "description.wurst.hack.freecam": "允許在不移動你角色的情况下自由移動角色。(靈魂出竅)", - "description.wurst.hack.fullbright": "可以在黑暗中看的一清二楚。(無限夜視)", - "description.wurst.hack.glide": "使你在下落時緩慢下降。\n\n§c§l警告:§r如果你不使用NoFall則可能會摔落致死。", - "description.wurst.hack.handnoclip": "允許你能透過牆壁觸碰到特殊的方塊。", - "description.wurst.hack.headroll": "讓你不斷點頭。\n僅限其他玩家可視。", - "description.wurst.hack.healthtags": "在玩家名字旁邊顯示血量。", - "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年前。", - "description.wurst.hack.jetpack": "模仿你好像真的有飛行背包一樣飛行。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", - "description.wurst.hack.kaboom": "像爆炸一樣破壞你附近的方塊。\n這個可能比Nuker功能破壞更快如果服務器沒有反作弊的話,使用適合的工具和破壞脆弱的方塊可以事半功倍。\n注意:這並不是真正的爆炸。", - "description.wurst.hack.killauralegit": "KillauraLegit更難被反作弊檢測。\n在正常的NoCheat+(NCP)服務器上不需要!", - "description.wurst.hack.killaura": "自動攻擊你附近的實體。", - "description.wurst.hack.killpotion": "生成一個能殺死絕大多數生物的藥水,包括創造模式的玩家,但對那些不死的生物或者已死生物無效。\n\n需要在創造模式下。", - "description.wurst.hack.liquids": "取消限制,允許你在水面上直接放置方塊。", - "description.wurst.hack.lsd": "產生和吃了雲南蘑菇一樣的漸變色暈眩效果。", - "description.wurst.hack.masstpa": "給每個人發送TPA請求。\n\n§c§l警告:§r國內服務器使用會因為Wurst判斷的是英文而導致TPA仍在繼續。", - "description.wurst.hack.mileycyrus": "類似全自動Shift蹲起。", - "description.wurst.hack.mobesp": "高亮附近的生物。", - "description.wurst.hack.mobspawnesp": "高亮那些生物可以生成的區域。\n§e黃色§r - 可以在夜間生成\n§c紅色§r - 可以在任意時候生成", - "description.wurst.hack.multiaura": "比Killaura更高級,能同一時間攻擊多個實體。", - "description.wurst.hack.nameprotect": "隱藏所有玩家的名字。", - "description.wurst.hack.nametags": "改變名字標籤大小使你可以經常可以看到他們,同時也能讓你看到那些正潜行的玩家名字標籤。", - "description.wurst.hack.navigator": "一個可供你蒐索的GUI,可以隨著時間的推移瞭解您的偏好。", - "description.wurst.hack.newchunks": "突出您周圍新生成的區塊。", - "description.wurst.hack.nobackground": "移除GUI後的暗色背景。", - "description.wurst.hack.noclip": "讓你可以自由穿越方塊。\n必須要有一個掉落的方塊在你的正上方才會啟動此功能 (例如:沙子、砂礫...)。\n\n§c§l警告:§r穿牆時將會受到傷害!", - "description.wurst.hack.nocomcrash": "利用Nocom漏洞使伺服器卡頓或崩潰。\n經測試可在Vanilla、Spigot和Fabric上工作,Paper和一些擁有特定反作弊的服務器無法使用。", - "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": "允許改變你當地用戶端所在的時間,和月亮的階段(僅在本地生效,與服務器無關)。", - "description.wurst.hack.noweb": "使你不會因為蜘蛛網而慢下來。", - "description.wurst.hack.nuker": "自動挖掘你附近的方塊。", - "description.wurst.hack.nukerlegit": "NukerLegit能够繞過所有的反作弊檢測。\n在正常的NoCheat+(NCP)服務器上不需要!", - "description.wurst.hack.openwateresp": "顯示你是否在一個“開放水域”的地方,在區域內畫一個大方塊用於計算檢測是否為開放水域。", - "description.wurst.hack.overlay": "開採一個方塊時渲染“Nuker功能”動畫。", - "description.wurst.hack.panic": "瞬間關閉所有的作弊功能。\n請小心使用!", - "description.wurst.hack.parkour": "你會自動跳躍起來,當到方塊的邊緣。\n適用於跑酷或跳和跑。", - "description.wurst.hack.playeresp": "高亮透視附近的玩家。\n如果是你的好友的話會顯示藍色框框。", - "description.wurst.hack.portalgui": "允許你在傳送門內打開GUI。", - "description.wurst.hack.potionsaver": "當你站著不動時凍結所有的藥水效果時間。", - "description.wurst.hack.prophuntesp": "在躲猫猫小遊戲中知道哪些是人扮的方塊。\n用於Mineplex服務器的Prophunt(躲猫猫),其他服務器未必凑效。", - "description.wurst.hack.protect": "使用AI模式保護最近的實體,並保護它免受其他實體的傷害。\n使用指令.protect來保護指定的實體,而不是最近的一個。", - "description.wurst.hack.radar": "生成一個雷達UI並顯示附近的實體。\n§c紅色§r - 玩家\n§6橘色§r - 怪物\n§a綠色§r - 動物\n§7灰色§r - 其他", - "description.wurst.hack.rainbowui": "§c讓§a每§9一§c樣§a都§9充§c滿§a五§9彩§c斑§a斕§9的§c樣§a子§9,\n§c包§a括§9你§c當§a前§9所§c在§aU§9I", - "description.wurst.hack.reach": "允許你碰到更遠的距離。", - "description.wurst.hack.remoteview": "允許你以另一個視角觀看世界。\n使用.rv指令來指定一個特殊的實體。", - "description.wurst.hack.safewalk": "防止你從方塊邊緣掉出。", - "description.wurst.hack.scaffoldwalk": "自動在你的脚下搭方塊。", - "description.wurst.hack.search": "幫助你找到所需要的方塊並以彩虹色的管道高亮。", - "description.wurst.hack.skinderp": "隨機切換你的皮膚。", - "description.wurst.hack.sneak": "讓你自動保持潜行行走。", - "description.wurst.hack.snowshoe": "可以讓你在細雪上行走。", - "description.wurst.hack.speedhack": "允許你以大約~2.5x或更快的速度跳躍或疾跑。\n\n§6§l警告:§r只有低於反作弊版本3.13.2才會工作且繞過,如果你不知道服務器反作弊是哪個版本。\n輸入§l/ncp version§r來查看反作弊版本。", - "description.wurst.hack.speednuker": "一個比Nuker更快的版本,但會無法繞過反作弊。", - "description.wurst.hack.spider": "像蜘蛛一樣能够爬牆。", - "description.wurst.hack.step": "允許你走上更高高度(取決於你的設定)的格子方塊。", - "description.wurst.hack.throw": "迅速丟你手中種類的物品,可以用於丟雪球、雞蛋、刷怪蛋、礦車,諸如此類。\n\n會生成大量的數量,這會產生大量的lag且可能會導致服務器崩潰。", - "description.wurst.hack.tillaura": "自動將泥土、草塊、諸如此類。轉化為耕地。\n不要和Killaura搞混。", - "description.wurst.hack.timer": "改變大部分東西的速度。", - "description.wurst.hack.tired": "讓你看起來很像2015年的Alexander。\n僅限其他玩家可視。", - "description.wurst.hack.toomanyhax": "關閉那些你並不想要使用的功能。\n讓你確保你不會不小心開啟錯誤的作弊功能導致被服務器封禁。\n這個是給那些“只想作弊一點點的用戶”。\n\n使用指令§6. toomanyhax§r來選擇哪些功能需要被遮罩。\n輸入§6. help toomanyhax§r尋求更多。", - "description.wurst.hack.tp-aura": "自動傳送到實體附近並自動攻擊他。", - "description.wurst.hack.trajectories": "預測箭和投擲物品的飛行路徑。", - "description.wurst.hack.treebot": "一個實驗性的機器人將會在樹木附近砍樹。\n現時僅限於砍小樹。", - "description.wurst.hack.triggerbot": "自動攻擊你所看的實體。", - "description.wurst.hack.trollpotion": "生成一個惹人惱怒的藥水效果。\n§o僅限創造模式。§r", - "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": "上次你嘗試登入這個,但是它不起作用。", - "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 無法在沒有權限的情況下加密或解密 Alt List。\n你可以繼續使用 AltManager,但是你新建的 Alt 都無法被存儲。\n\n完整的錯誤信息如下:\n%s", - "gui.wurst.altmanager.empty.title": "你的 Alt List 是空的。", - "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": "允許", - "key.wurst.zoom": "縮放" -} \ No newline at end of file +{ + "description.wurst.hack.airplace": "允許你在半空中放置方塊。", + "description.wurst.hack.anchoraura": "自動放置(可選),充能並引爆重生錨並擊殺你附近的實體。", + "description.wurst.hack.antiafk": "隨機走動,用於避免伺服器掛機檢測。", + "description.wurst.hack.antiblind": "防止失明和黑暗效果。\n與 OptiFine不相容。", + "description.wurst.hack.anticactus": "保護你免受仙人掌傷害。", + "description.wurst.hack.antihunger": "走路時減緩你的飢餓度。", + "description.wurst.hack.antiknockback": "保護你不會被其他生物或玩家推動和用劍擊退。", + "description.wurst.hack.antispam": "預防存在的重複刷屏,改為用計數器顯示。", + "description.wurst.hack.antiwaterpush": "防止你被水流推動。", + "description.wurst.hack.antiwobble": "關閉因反胃和傳送門引起的搖晃效果。", + "description.wurst.hack.arrowdmg": "大幅增加箭的傷害,但也會消耗大量飢餓值並降低準確性。\n\n不適用於弩,並且似乎已在紙質服務器上進行了修補。", + "description.wurst.setting.arrowdmg.trident_yeet_mode": "啟用後,三叉戟飛得更遠。 似乎不會影響傷害或激流。\n\n§c§l警告:§r 啟用此選項很容易丟失三叉戟!", + "description.wurst.hack.autoarmor": "自動管理你的盔甲。", + "description.wurst.hack.autobuild": "自動建築東西。\n放一個方塊就開始自動建造。", + "description.wurst.hack.autodrop": "自動丟棄你不想要的物品(有預設)。", + "description.wurst.hack.autoleave": "如果你的血量低於設定值,將會自動退出伺服器。", + "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.take_items_from": "AutoEat 應該在哪裡尋找食物。", + "description.wurst.setting.autoeat.eat_while_walking": "減慢速度,不推薦。", + "description.wurst.setting.autoeat.allow_hunger": "腐肉具有無害的“飢餓”效果。\n可安全食用,可用作緊急食品。", + "description.wurst.setting.autoeat.allow_poison": "有毒食物會隨著時間的推移造成傷害。\n不推薦。", + "description.wurst.setting.autoeat.allow_chorus": "吃紫頌果會將你傳送到一個隨機位置。\n不推薦。", + "description.wurst.hack.autofarm": "自動收穫與種植農作物。\n有效作物為小麥、胡蘿蔔、馬鈴薯、紅菜頭根、南瓜、西瓜、仙人掌、甘蔗、海帶、竹子、地狱疙瘩和可可豆。", + "description.wurst.hack.autofish": "自動使用最好的魚竿釣魚,如果在此期間獲得了更好的魚竿,就會自動切換到它。", + "description.wurst.hack.automine": "自動挖掘你眼前所指的方塊。", + "description.wurst.hack.autopotion": "當你的生命值低於設定值時,自動扔一瓶噴濺型瞬間恢復藥水。", + "description.wurst.hack.autoreconnect": "當你被伺服器踢出時候,自動重連。", + "description.wurst.hack.autorespawn": "當你死亡的時候自動重生。", + "description.wurst.hack.autosign": "立即在每個牌子上寫下任何你想要的文字,當此功能啟動的時候,你只需要很普通的在第一個牌子上,寫你想要的文字,之後接下來所有牌子都跟上一個一樣。", + "description.wurst.hack.autosoup": "當你生命值低下的時候自動喝蘑菇煲。\n\n§l注意:§r這個功能是忽視“饑餓值”,因為特定伺服器小遊戲內(如Hypixel),喝湯是直接補充生命,而不是回復飽腹值。如果你正在玩的伺服器沒有這個功能,請使用AutoEat功能而不是這個。", + "description.wurst.hack.autosprint": "讓你自動進入疾跑。", + "description.wurst.hack.autosteal": "你所打開的箱子以及界伏盒會自動盜竊裡面所有物品。", + "description.wurst.hack.autoswim": "當你在水中會自動切換泳姿狀態。", + "description.wurst.hack.autoswitch": "按順序自動切換快捷欄位。\n\n§l進階提示:§r倘若在你的快捷欄有不同顏色的羊毛以及,不同顏色的混粘土,利用這個功能與BuildRandom同時使用會出現意想不到的效果。", + "description.wurst.hack.autosword": "當你攻擊實體的時候,自動使用快捷欄中最好的武器。\n提示:在使用Killaura功能時候,最好開啟。", + "description.wurst.hack.autotool": "當你破壞方塊的時候會在你的物品快捷欄中切換成最優的破壞工具。", + "description.wurst.hack.autototem": "自動將不死圖騰移動到副手上。", + "description.wurst.hack.autowalk": "讓你自動走路,不需要自己按著W鍵。", + "description.wurst.hack.basefinder": "通過尋找人為建造的方塊以找到玩家的基地\n假如方塊被找到將會高亮以你所選的顏色。\n建議用於尋找幫派的基地。", + "description.wurst.hack.blink": "暫停所有動作更新,並在關閉時繼續。", + "description.wurst.hack.boatfly": "允許您乘船和其他車輛飛行。\n按跑步鍵可以更快地下降。", + "description.wurst.hack.bonemealaura": "在指定的作物上自動使用骨粉。\n使用核取方塊來指定作物。", + "description.wurst.hack.bowaimbot": "當你用弓或者弩時自動瞄準所設定的實體。", + "description.wurst.hack.buildrandom": "在你的附近隨機放置方塊。", + "description.wurst.hack.bunnyhop": "讓你自動跳躍,但不能做到像CSGO一樣。", + "description.wurst.hack.cameradistance": "允許你在第三人稱中改變鏡頭距離。", + "description.wurst.hack.cameranoclip": "允許第三人稱攝像機忽視牆體碰撞直接把視角穿過去。", + "description.wurst.hack.cavefinder": "幫助你找到洞穴並以你所選的顏色將他們高亮。", + "description.wurst.hack.chattranslator": "從聊天欄的資訊利用Google翻譯成你所指定的語言。", + "description.wurst.hack.chestesp": "按你所設定的顏色高亮附近的箱子、潜影盒、陷阱箱、末影箱。", + "description.wurst.hack.clickaura": "當瞄準的時候。自動攻擊你附近有效的實體\n\n§c§l警告:§r此功能通常來說比Killaura更加容易被發現且被檢測出來,這極力推薦使用Killaura或者TriggerBot作為替代。", + "description.wurst.hack.clickgui": "基於視窗的點擊式GUI(有分類)。", + "description.wurst.hack.crashchest": "生成一個容易封禁玩家的箱子,如果他們複製大量的箱子在他們背包裡面§c§l警告:§r§c這個無法撤銷。請小心使用!§r\n\n如果複製出來被放在箱子裏,無論誰打開箱子就會被踢出伺服器(只要一個)。", + "description.wurst.hack.creativeflight": "可以跟創造模式的飛行沒啥兩樣(即按兩下空格起飛)。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", + "description.wurst.hack.criticals": "將你的攻擊全變為暴擊。", + "description.wurst.hack.crystalaura": "自動放置(可選)並引爆末影水晶殺死你附近的實體。", + "description.wurst.hack.derp": "讓你的頭瘋狂到處隨機轉動。\n僅限其他玩家可視。", + "description.wurst.hack.dolphin": "讓你在水中浮起來。\n(就像海豚一樣)", + "description.wurst.hack.excavator": "自動破壞所選區域內的所有方塊。", + "description.wurst.hack.extraelytra": "讓你的鞘翅更加容易使用。", + "description.wurst.hack.fancychat": "替換ASCII字元在發送消息時,變成更好的Unicode字元。可以用於繞過英文單詞字元限制在一些伺服器上。\n但對於那些禁用Unicode字元的伺服器不起作用。", + "description.wurst.hack.fastbreak": "允許你更快的破壞方塊。\n提示:可以和Nuker功能配合利用。", + "description.wurst.hack.fastladder": "允許你爬梯的速度加快。", + "description.wurst.hack.fastplace": "允許你正常放置方塊速度的5倍或以上。\n提示:這個能新增AutoBuild功能的速度。", + "description.wurst.hack.feedaura": "自動餵食你附近的動物。", + "description.wurst.hack.fightbot": "仿照機器人會自動跟隨並擊殺最近的實體。\n很適合刷怪區域。", + "description.wurst.hack.fish": "關閉水底的重力,所以你可以像魚一樣游泳。", + "description.wurst.hack.flight": "允許你飛天。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", + "description.wurst.hack.follow": "跟機器人一樣跟隨最近的實體。\n非常惹惱人。\n\n使用.follow指令跟隨特定的實體。", + "description.wurst.hack.forceop": "破解AuthMe登入挿件密碼。\n一般用於獲得OP。(PS:只是撞庫,跑密碼的軟件)", + "description.wurst.hack.freecam": "允許在不移動你角色的情况下自由移動角色。(靈魂出竅)", + "description.wurst.hack.fullbright": "可以在黑暗中看的一清二楚。(無限夜視)", + "description.wurst.hack.glide": "使你在下落時緩慢下降。\n\n§c§l警告:§r如果你不使用NoFall則可能會摔落致死。", + "description.wurst.hack.handnoclip": "允許你能透過牆壁觸碰到特殊的方塊。", + "description.wurst.hack.headroll": "讓你不斷點頭。\n僅限其他玩家可視。", + "description.wurst.hack.healthtags": "在玩家名字旁邊顯示血量。", + "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年前。", + "description.wurst.hack.jetpack": "模仿你好像真的有飛行背包一樣飛行。\n\n§c§l警告:§r如果你不使用NoFall,會導致受到掉落傷害。", + "description.wurst.hack.kaboom": "像爆炸一樣破壞你附近的方塊。\n這個可能比Nuker功能破壞更快如果服務器沒有反作弊的話,使用適合的工具和破壞脆弱的方塊可以事半功倍。\n注意:這並不是真正的爆炸。", + "description.wurst.hack.killauralegit": "KillauraLegit更難被反作弊檢測。\n在正常的NoCheat+(NCP)服務器上不需要!", + "description.wurst.hack.killaura": "自動攻擊你附近的實體。", + "description.wurst.hack.killpotion": "生成一個能殺死絕大多數生物的藥水,包括創造模式的玩家,但對那些不死的生物或者已死生物無效。\n\n需要在創造模式下。", + "description.wurst.hack.liquids": "取消限制,允許你在水面上直接放置方塊。", + "description.wurst.hack.lsd": "產生和吃了雲南蘑菇一樣的漸變色暈眩效果。", + "description.wurst.hack.masstpa": "給每個人發送TPA請求。\n\n§c§l警告:§r國內服務器使用會因為Wurst判斷的是英文而導致TPA仍在繼續。", + "description.wurst.hack.mileycyrus": "類似全自動Shift蹲起。", + "description.wurst.hack.mobesp": "高亮附近的生物。", + "description.wurst.hack.mobspawnesp": "高亮那些生物可以生成的區域。\n§e黃色§r - 可以在夜間生成\n§c紅色§r - 可以在任意時候生成", + "description.wurst.hack.multiaura": "比Killaura更高級,能同一時間攻擊多個實體。", + "description.wurst.hack.nameprotect": "隱藏所有玩家的名字。", + "description.wurst.hack.nametags": "改變名字標籤大小使你可以經常可以看到他們,同時也能讓你看到那些正潜行的玩家名字標籤。", + "description.wurst.hack.navigator": "一個可供你蒐索的GUI,可以隨著時間的推移瞭解您的偏好。", + "description.wurst.hack.newchunks": "突出您周圍新生成的區塊。", + "description.wurst.hack.nobackground": "移除GUI後的暗色背景。", + "description.wurst.hack.noclip": "讓你可以自由穿越方塊。\n必須要有一個掉落的方塊在你的正上方才會啟動此功能 (例如:沙子、砂礫...)。\n\n§c§l警告:§r穿牆時將會受到傷害!", + "description.wurst.hack.nocomcrash": "利用Nocom漏洞使伺服器卡頓或崩潰。\n經測試可在Vanilla、Spigot和Fabric上工作,Paper和一些擁有特定反作弊的服務器無法使用。", + "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": "允許改變你當地用戶端所在的時間,和月亮的階段(僅在本地生效,與服務器無關)。", + "description.wurst.hack.noweb": "使你不會因為蜘蛛網而慢下來。", + "description.wurst.hack.nuker": "自動挖掘你附近的方塊。", + "description.wurst.hack.nukerlegit": "NukerLegit能够繞過所有的反作弊檢測。\n在正常的NoCheat+(NCP)服務器上不需要!", + "description.wurst.hack.openwateresp": "顯示你是否在一個“開放水域”的地方,在區域內畫一個大方塊用於計算檢測是否為開放水域。", + "description.wurst.hack.overlay": "開採一個方塊時渲染“Nuker功能”動畫。", + "description.wurst.hack.panic": "瞬間關閉所有的作弊功能。\n請小心使用!", + "description.wurst.hack.parkour": "你會自動跳躍起來,當到方塊的邊緣。\n適用於跑酷或跳和跑。", + "description.wurst.hack.playeresp": "高亮透視附近的玩家。\n如果是你的好友的話會顯示藍色框框。", + "description.wurst.hack.portalgui": "允許你在傳送門內打開GUI。", + "description.wurst.hack.potionsaver": "當你站著不動時凍結所有的藥水效果時間。", + "description.wurst.hack.prophuntesp": "在躲猫猫小遊戲中知道哪些是人扮的方塊。\n用於Mineplex服務器的Prophunt(躲猫猫),其他服務器未必凑效。", + "description.wurst.hack.protect": "使用AI模式保護最近的實體,並保護它免受其他實體的傷害。\n使用指令.protect來保護指定的實體,而不是最近的一個。", + "description.wurst.hack.radar": "生成一個雷達UI並顯示附近的實體。\n§c紅色§r - 玩家\n§6橘色§r - 怪物\n§a綠色§r - 動物\n§7灰色§r - 其他", + "description.wurst.hack.rainbowui": "§c讓§a每§9一§c樣§a都§9充§c滿§a五§9彩§c斑§a斕§9的§c樣§a子§9,\n§c包§a括§9你§c當§a前§9所§c在§aU§9I", + "description.wurst.hack.reach": "允許你碰到更遠的距離。", + "description.wurst.hack.remoteview": "允許你以另一個視角觀看世界。\n使用.rv指令來指定一個特殊的實體。", + "description.wurst.hack.safewalk": "防止你從方塊邊緣掉出。", + "description.wurst.hack.scaffoldwalk": "自動在你的脚下搭方塊。", + "description.wurst.hack.search": "幫助你找到所需要的方塊並以彩虹色的管道高亮。", + "description.wurst.hack.skinderp": "隨機切換你的皮膚。", + "description.wurst.hack.sneak": "讓你自動保持潜行行走。", + "description.wurst.hack.snowshoe": "可以讓你在細雪上行走。", + "description.wurst.hack.speedhack": "允許你以大約~2.5x或更快的速度跳躍或疾跑。\n\n§6§l警告:§r只有低於反作弊版本3.13.2才會工作且繞過,如果你不知道服務器反作弊是哪個版本。\n輸入§l/ncp version§r來查看反作弊版本。", + "description.wurst.hack.speednuker": "一個比Nuker更快的版本,但會無法繞過反作弊。", + "description.wurst.hack.spider": "像蜘蛛一樣能够爬牆。", + "description.wurst.hack.step": "允許你走上更高高度(取決於你的設定)的格子方塊。", + "description.wurst.hack.throw": "迅速丟你手中種類的物品,可以用於丟雪球、雞蛋、刷怪蛋、礦車,諸如此類。\n\n會生成大量的數量,這會產生大量的lag且可能會導致服務器崩潰。", + "description.wurst.hack.tillaura": "自動將泥土、草塊、諸如此類。轉化為耕地。\n不要和Killaura搞混。", + "description.wurst.hack.timer": "改變大部分東西的速度。", + "description.wurst.hack.tired": "讓你看起來很像2015年的Alexander。\n僅限其他玩家可視。", + "description.wurst.hack.toomanyhax": "關閉那些你並不想要使用的功能。\n讓你確保你不會不小心開啟錯誤的作弊功能導致被服務器封禁。\n這個是給那些“只想作弊一點點的用戶”。\n\n使用指令§6. toomanyhax§r來選擇哪些功能需要被遮罩。\n輸入§6. help toomanyhax§r尋求更多。", + "description.wurst.hack.tp-aura": "自動傳送到實體附近並自動攻擊他。", + "description.wurst.hack.trajectories": "預測箭和投擲物品的飛行路徑。", + "description.wurst.hack.treebot": "一個實驗性的機器人將會在樹木附近砍樹。\n現時僅限於砍小樹。", + "description.wurst.hack.triggerbot": "自動攻擊你所看的實體。", + "description.wurst.hack.trollpotion": "生成一個惹人惱怒的藥水效果。\n§o僅限創造模式。§r", + "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": "上次你嘗試登入這個,但是它不起作用。", + "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 無法在沒有權限的情況下加密或解密 Alt List。\n你可以繼續使用 AltManager,但是你新建的 Alt 都無法被存儲。\n\n完整的錯誤信息如下:\n%s", + "gui.wurst.altmanager.empty.title": "你的 Alt List 是空的。", + "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": "允許", + "key.wurst.zoom": "縮放" +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index ac972418..c881efd7 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,54 +1,50 @@ -{ - "schemaVersion": 1, - "id": "wurst", - "version": "${version}", - - "name": "Wurst Client", - "description": "Wurst Wurst Wurst!", - "authors": [ - "Alexander01998" - ], - "contact": { - "homepage": "https://www.wurstclient.net/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Website", - "issues": "https://www.wurstclient.net/wurst7issues/", - "sources": "https://www.wurstclient.net/wurst7sources/" - }, - - "license": "GPL-3.0-or-later", - "icon": "assets/wurst/icon.png", - - "environment": "client", - "entrypoints": { - "main": [ - "net.wurstclient.WurstInitializer" - ] - }, - "mixins": [ - "wurst.mixins.json" - ], - "accessWidener" : "wurst.accesswidener", - - "depends": { - "fabricloader": ">=0.15.10", - "fabric-api": ">=0.99.5", - "minecraft": "~1.21-beta.1", - "java": ">=21" - }, - "suggests": { - "mo_glass": "*" - }, - "breaks": { - "wi_zoom": "*", - "wi-zoom": "*", - "vulkanmod": "*" - }, - "custom": { - "modmenu": { - "links": { - "Wiki": "https://wurst.wiki/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Wiki", - "Forum": "https://wurstforum.net/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Forum", - "Donate": "https://www.wurstclient.net/donate/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Donate" - } - } - } -} +{ + "schemaVersion": 1, + "id": "wurst", + "version": "${version}", + "name": "Wurst Client", + "description": "Wurst Wurst Wurst!", + "authors": [ + "Alexander01998" + ], + "contact": { + "homepage": "https://www.wurstclient.net/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Website", + "issues": "https://www.wurstclient.net/wurst7issues/", + "sources": "https://www.wurstclient.net/wurst7sources/" + }, + "license": "GPL-3.0-or-later", + "icon": "assets/wurst/icon.png", + "environment": "client", + "entrypoints": { + "main": [ + "net.wurstclient.WurstInitializer" + ] + }, + "mixins": [ + "wurst.mixins.json" + ], + "accessWidener": "wurst.accesswidener", + "depends": { + "fabricloader": ">=0.15.10", + "fabric-api": ">=0.99.5", + "minecraft": "~1.21-beta.1", + "java": ">=21" + }, + "suggests": { + "mo_glass": "*" + }, + "breaks": { + "wi_zoom": "*", + "wi-zoom": "*", + "vulkanmod": "*" + }, + "custom": { + "modmenu": { + "links": { + "Wiki": "https://wurst.wiki/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Wiki", + "Forum": "https://wurstforum.net/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Forum", + "Donate": "https://www.wurstclient.net/donate/?utm_source=Wurst+Client&utm_medium=ModMenu&utm_content=Donate" + } + } + } +} diff --git a/src/main/resources/wurst.mixins.json b/src/main/resources/wurst.mixins.json index f08363ff..84d63987 100644 --- a/src/main/resources/wurst.mixins.json +++ b/src/main/resources/wurst.mixins.json @@ -1,74 +1,73 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "net.wurstclient.mixin", - "compatibilityLevel": "JAVA_17", - "mixins": [ - ], - "client": [ - "AbstractBlockStateMixin", - "AbstractSignEditScreenMixin", - "AllowedAddressResolverMixin", - "BackgroundRendererMixin", - "BasicBakedModelMixin", - "BlockEntityRenderDispatcherMixin", - "BlockMixin", - "CactusBlockMixin", - "CameraMixin", - "ChatHudMixin", - "ChatInputSuggestorMixin", - "ChatScreenMixin", - "ChunkOcclusionGraphBuilderMixin", - "ClientCommonNetworkHandlerMixin", - "ClientConnectionMixin", - "ClientPlayerEntityMixin", - "ClientPlayerInteractionManagerMixin", - "ClientPlayNetworkHandlerMixin", - "ClientWorldMixin", - "ControlsListWidgetMixin", - "CreativeInventoryScreenMixin", - "DeathScreenMixin", - "DirectConnectScreenMixin", - "DisconnectedRealmsScreenMixin", - "DisconnectedScreenMixin", - "EntityMixin", - "EntityRendererMixin", - "FluidRendererMixin", - "GameMenuScreenMixin", - "GameRendererMixin", - "GenericContainerScreenMixin", - "HeldItemRendererMixin", - "IngameHudMixin", - "InGameOverlayRendererMixin", - "KeyBindingMixin", - "KeybindTextContentMixin", - "KeyboardMixin", - "LanguageManagerMixin", - "LivingEntityRendererMixin", - "MinecraftClientMixin", - "MobEntityRendererMixin", - "MouseMixin", - "MultiplayerScreenMixin", - "PackScreenMixin", - "PlayerInventoryMixin", - "PlayerSkinProviderMixin", - "PowderSnowBlockMixin", - "RenderTickCounterDynamicMixin", - "ScreenMixin", - "ShulkerBoxScreenMixin", - "SimpleOptionMixin", - "SodiumBlockOcclusionCacheMixin", - "SodiumFluidRendererMixin", - "StatsScreenMixin", - "StatusEffectInstanceMixin", - "TelemetryManagerMixin", - "TextVisitFactoryMixin", - "TitleScreenMixin", - "TranslatableTextContentMixin", - "WorldMixin", - "WorldRendererMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} +{ + "required": true, + "minVersion": "0.8", + "package": "net.wurstclient.mixin", + "compatibilityLevel": "JAVA_17", + "mixins": [], + "client": [ + "AbstractBlockStateMixin", + "AbstractSignEditScreenMixin", + "AllowedAddressResolverMixin", + "BackgroundRendererMixin", + "BasicBakedModelMixin", + "BlockEntityRenderDispatcherMixin", + "BlockMixin", + "CactusBlockMixin", + "CameraMixin", + "ChatHudMixin", + "ChatInputSuggestorMixin", + "ChatScreenMixin", + "ChunkOcclusionGraphBuilderMixin", + "ClientCommonNetworkHandlerMixin", + "ClientConnectionMixin", + "ClientPlayerEntityMixin", + "ClientPlayerInteractionManagerMixin", + "ClientPlayNetworkHandlerMixin", + "ClientWorldMixin", + "ControlsListWidgetMixin", + "CreativeInventoryScreenMixin", + "DeathScreenMixin", + "DirectConnectScreenMixin", + "DisconnectedRealmsScreenMixin", + "DisconnectedScreenMixin", + "EntityMixin", + "EntityRendererMixin", + "FluidRendererMixin", + "GameMenuScreenMixin", + "GameRendererMixin", + "GenericContainerScreenMixin", + "HeldItemRendererMixin", + "IngameHudMixin", + "InGameOverlayRendererMixin", + "KeyBindingMixin", + "KeybindTextContentMixin", + "KeyboardMixin", + "LanguageManagerMixin", + "LivingEntityRendererMixin", + "MinecraftClientMixin", + "MobEntityRendererMixin", + "MouseMixin", + "MultiplayerScreenMixin", + "PackScreenMixin", + "PlayerInventoryMixin", + "PlayerSkinProviderMixin", + "PowderSnowBlockMixin", + "RenderTickCounterDynamicMixin", + "ScreenMixin", + "ShulkerBoxScreenMixin", + "SimpleOptionMixin", + "SodiumBlockOcclusionCacheMixin", + "SodiumFluidRendererMixin", + "StatsScreenMixin", + "StatusEffectInstanceMixin", + "TelemetryManagerMixin", + "TextVisitFactoryMixin", + "TitleScreenMixin", + "TranslatableTextContentMixin", + "WorldMixin", + "WorldRendererMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} From 6eba58c9592025e5cfd336803e9b43cf2f2dc97d Mon Sep 17 00:00:00 2001 From: ssyo <47333239+yutaoz@users.noreply.github.com> Date: Mon, 17 Jun 2024 17:56:38 -0400 Subject: [PATCH 045/109] Accounted for mace in autosword hack, added bonus damage from falling with mace. --- .../java/net/wurstclient/hacks/AutoSwordHack.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoSwordHack.java b/src/main/java/net/wurstclient/hacks/AutoSwordHack.java index 40deb7d3..fa64bd9f 100644 --- a/src/main/java/net/wurstclient/hacks/AutoSwordHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoSwordHack.java @@ -14,6 +14,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolItem; import net.minecraft.item.TridentItem; +import net.minecraft.item.MaceItem; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.hit.HitResult; import net.wurstclient.Category; @@ -144,7 +145,8 @@ public final class AutoSwordHack extends Hack implements UpdateListener private float getValue(ItemStack stack, Entity entity) { Item item = stack.getItem(); - if(!(item instanceof ToolItem || item instanceof TridentItem)) + if(!(item instanceof ToolItem || item instanceof TridentItem + || item instanceof MaceItem)) return Integer.MIN_VALUE; switch(priority.getSelected()) @@ -161,6 +163,13 @@ public final class AutoSwordHack extends Hack implements UpdateListener float dmg = (float)ItemUtils .getAttribute(item, EntityAttributes.GENERIC_ATTACK_DAMAGE) .orElseThrow(); + + // Check for mace, get bonus damage from fall + if(item instanceof MaceItem) + { + dmg = ((MaceItem)item).getBonusAttackDamage(MC.player, dmg, + entity.getDamageSources().playerAttack(MC.player)); + } // dmg += EnchantmentHelper.getAttackDamage(stack, group); return dmg; } From 2850a0cd07a39fabe75ea9678e2ae2c7858811ba Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 25 Jun 2024 11:23:52 +0200 Subject: [PATCH 046/109] Minor refactoring --- src/main/java/net/wurstclient/hacks/AutoSwordHack.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoSwordHack.java b/src/main/java/net/wurstclient/hacks/AutoSwordHack.java index fa64bd9f..371ea851 100644 --- a/src/main/java/net/wurstclient/hacks/AutoSwordHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoSwordHack.java @@ -12,9 +12,9 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.MaceItem; import net.minecraft.item.ToolItem; import net.minecraft.item.TridentItem; -import net.minecraft.item.MaceItem; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.hit.HitResult; import net.wurstclient.Category; @@ -165,11 +165,9 @@ public final class AutoSwordHack extends Hack implements UpdateListener .orElseThrow(); // Check for mace, get bonus damage from fall - if(item instanceof MaceItem) - { - dmg = ((MaceItem)item).getBonusAttackDamage(MC.player, dmg, + if(item instanceof MaceItem mace) + dmg = mace.getBonusAttackDamage(MC.player, dmg, entity.getDamageSources().playerAttack(MC.player)); - } // dmg += EnchantmentHelper.getAttackDamage(stack, group); return dmg; } From 1698c352bfaf5b227730ce2be0ca494de67e7722 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 25 Jun 2024 15:39:33 +0200 Subject: [PATCH 047/109] Add translation key for NoFall's "Allow elytra" setting --- src/main/java/net/wurstclient/hacks/NoFallHack.java | 6 +----- src/main/resources/assets/wurst/lang/en_us.json | 1 + 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/NoFallHack.java b/src/main/java/net/wurstclient/hacks/NoFallHack.java index c93377ba..011b21af 100644 --- a/src/main/java/net/wurstclient/hacks/NoFallHack.java +++ b/src/main/java/net/wurstclient/hacks/NoFallHack.java @@ -19,11 +19,7 @@ import net.wurstclient.settings.CheckboxSetting; public final class NoFallHack extends Hack implements UpdateListener { private final CheckboxSetting allowElytra = new CheckboxSetting( - "Allow elytra", - "Also tries to prevent fall damage while you are flying with an elytra.\n\n" - + "\u00a7c\u00a7lWARNING:\u00a7r This can sometimes cause you to" - + " stop flying unexpectedly.", - false); + "Allow elytra", "description.wurst.setting.nofall.allow_elytra", false); public NoFallHack() { diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index 832f2a24..fcb9ea49 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -146,6 +146,7 @@ "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.setting.nofall.allow_elytra": "Also tries to prevent fall damage while you are flying with an elytra.\n\n§c§lWARNING:§r This can sometimes cause you to stop flying unexpectedly.", "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.nofog": "Removes distance fog from the world.", "description.wurst.hack.nohurtcam": "Disables the shaking effect when you get hurt.", From 8b7c7cf517273748a06c2c436d827add6fc8422f Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 25 Jun 2024 16:22:07 +0200 Subject: [PATCH 048/109] Add "Pause for mace" checkbox to NoFallHack Fixes #1012 --- .../java/net/wurstclient/hacks/NoFallHack.java | 18 ++++++++++++++++++ .../resources/assets/wurst/lang/en_us.json | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/hacks/NoFallHack.java b/src/main/java/net/wurstclient/hacks/NoFallHack.java index 011b21af..ceac661a 100644 --- a/src/main/java/net/wurstclient/hacks/NoFallHack.java +++ b/src/main/java/net/wurstclient/hacks/NoFallHack.java @@ -8,6 +8,7 @@ package net.wurstclient.hacks; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.item.Items; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket.OnGroundOnly; import net.wurstclient.Category; import net.wurstclient.SearchTags; @@ -21,11 +22,16 @@ public final class NoFallHack extends Hack implements UpdateListener private final CheckboxSetting allowElytra = new CheckboxSetting( "Allow elytra", "description.wurst.setting.nofall.allow_elytra", false); + private final CheckboxSetting pauseForMace = + new CheckboxSetting("Pause for mace", + "description.wurst.setting.nofall.pause_for_mace", false); + public NoFallHack() { super("NoFall"); setCategory(Category.MOVEMENT); addSetting(allowElytra); + addSetting(pauseForMace); } @Override @@ -41,6 +47,9 @@ public final class NoFallHack extends Hack implements UpdateListener if(player.isCreative()) return getName() + " (paused)"; + if(pauseForMace.isChecked() && isHoldingMace(player)) + return getName() + " (paused)"; + return getName(); } @@ -68,6 +77,10 @@ public final class NoFallHack extends Hack implements UpdateListener boolean fallFlying = player.isFallFlying(); if(fallFlying && !allowElytra.isChecked()) return; + + // pause when holding a mace, if enabled + if(pauseForMace.isChecked() && isHoldingMace(player)) + return; // ignore small falls that can't cause damage, // unless CreativeFlight is enabled in survival mode @@ -85,6 +98,11 @@ public final class NoFallHack extends Hack implements UpdateListener player.networkHandler.sendPacket(new OnGroundOnly(true)); } + private boolean isHoldingMace(ClientPlayerEntity player) + { + return player.getMainHandStack().isOf(Items.MACE); + } + private boolean isFallingFastEnoughToCauseDamage(ClientPlayerEntity player) { return player.getVelocity().y < -0.5; diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index fcb9ea49..aa9c24e2 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -146,7 +146,8 @@ "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.setting.nofall.allow_elytra": "Also tries to prevent fall damage while you are flying with an elytra.\n\n§c§lWARNING:§r This can sometimes cause you to stop flying unexpectedly.", + "description.wurst.setting.nofall.allow_elytra": "Also tries to prevent fall damage while you are flying with an elytra.\n\n§c§lWARNING:§r This can sometimes cause you to stop flying unexpectedly.", + "description.wurst.setting.nofall.pause_for_mace": "Pauses NoFall when holding a mace, so that you can take advantage of the mace's fall distance bonus.\n\n§c§lWARNING:§r You will not be protected from fall damage while you are holding a mace. Also, switching to or away from a mace while you are already falling will interrupt your fall, potentially causing you to take 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.nofog": "Removes distance fog from the world.", "description.wurst.hack.nohurtcam": "Disables the shaking effect when you get hurt.", From 8ab80c74bb91f61019c35fe657bd6257c9372800 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 25 Jun 2024 16:25:54 +0200 Subject: [PATCH 049/109] Change version to 7.44pre2 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 30656648..dca393ed 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version=0.15.11 fabric_version=0.100.3+1.21 # Mod Properties -mod_version = v7.44pre1-MC1.21 +mod_version = v7.44pre2-MC1.21 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 7f8264a5..5ef2771a 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -58,7 +58,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.44pre1"; + public static final String VERSION = "7.44pre2"; public static final String MC_VERSION = "1.21"; private WurstAnalytics analytics; From 9b79865cbc11a3d96227318ca4b178069200e1ed Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 25 Jun 2024 16:32:44 +0200 Subject: [PATCH 050/109] Fix wrong line break in en_us.json --- src/main/resources/assets/wurst/lang/en_us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index aa9c24e2..5610cbea 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -147,7 +147,7 @@ "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.setting.nofall.allow_elytra": "Also tries to prevent fall damage while you are flying with an elytra.\n\n§c§lWARNING:§r This can sometimes cause you to stop flying unexpectedly.", - "description.wurst.setting.nofall.pause_for_mace": "Pauses NoFall when holding a mace, so that you can take advantage of the mace's fall distance bonus.\n\n§c§lWARNING:§r You will not be protected from fall damage while you are holding a mace. Also, switching to or away from a mace while you are already falling will interrupt your fall, potentially causing you to take damage.", + "description.wurst.setting.nofall.pause_for_mace": "Pauses NoFall when holding a mace, so that you can take advantage of the mace's fall distance bonus.\n\n§c§lWARNING:§r You will not be protected from fall damage while you are holding a mace. Also, switching to or away from a mace while you are already falling will interrupt your fall, potentially causing you to take 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.nofog": "Removes distance fog from the world.", "description.wurst.hack.nohurtcam": "Disables the shaking effect when you get hurt.", From 76ec389f004327fe41aa821ca3220d70489154ed Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 26 Jun 2024 11:11:30 +0200 Subject: [PATCH 051/109] Fix AutoMine stopping whenever you open a screen Fixes #1029 --- src/main/java/net/wurstclient/hacks/AutoMineHack.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoMineHack.java b/src/main/java/net/wurstclient/hacks/AutoMineHack.java index a2131a0f..3b9ba5a6 100644 --- a/src/main/java/net/wurstclient/hacks/AutoMineHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoMineHack.java @@ -9,6 +9,7 @@ package net.wurstclient.hacks; import net.minecraft.block.BlockState; import net.minecraft.client.network.ClientPlayerInteractionManager; +import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; @@ -53,11 +54,8 @@ public final class AutoMineHack extends Hack implements UpdateListener { ClientPlayerInteractionManager im = MC.interactionManager; - if(MC.attackCooldown > 0) - { - im.cancelBlockBreaking(); - return; - } + // Ignore the attack cooldown because opening any screen + // will set it to 10k ticks. if(MC.player.isRiding()) { @@ -91,6 +89,7 @@ public final class AutoMineHack extends Hack implements UpdateListener if(im.updateBlockBreakingProgress(pos, side)) { MC.particleManager.addBlockBreakingParticles(pos, side); + MC.player.swingHand(Hand.MAIN_HAND); MC.options.attackKey.setPressed(true); } } From bffead62330cc3048588149b868114d69f6fa8fc Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 28 Jun 2024 08:29:52 +0200 Subject: [PATCH 052/109] Add MaceDmgHack --- .../java/net/wurstclient/hack/HackList.java | 1 + .../net/wurstclient/hacks/CriticalsHack.java | 5 ++ .../net/wurstclient/hacks/MaceDmgHack.java | 69 +++++++++++++++++++ .../resources/assets/wurst/lang/en_us.json | 1 + 4 files changed, 76 insertions(+) create mode 100644 src/main/java/net/wurstclient/hacks/MaceDmgHack.java diff --git a/src/main/java/net/wurstclient/hack/HackList.java b/src/main/java/net/wurstclient/hack/HackList.java index 94527624..2cb14067 100644 --- a/src/main/java/net/wurstclient/hack/HackList.java +++ b/src/main/java/net/wurstclient/hack/HackList.java @@ -121,6 +121,7 @@ public final class HackList implements UpdateListener public final KillPotionHack killPotionHack = new KillPotionHack(); public final LiquidsHack liquidsHack = new LiquidsHack(); public final LsdHack lsdHack = new LsdHack(); + public final MaceDmgHack maceDmgHack = new MaceDmgHack(); public final MassTpaHack massTpaHack = new MassTpaHack(); public final MileyCyrusHack mileyCyrusHack = new MileyCyrusHack(); public final MobEspHack mobEspHack = new MobEspHack(); diff --git a/src/main/java/net/wurstclient/hacks/CriticalsHack.java b/src/main/java/net/wurstclient/hacks/CriticalsHack.java index abc848fe..d4851935 100644 --- a/src/main/java/net/wurstclient/hacks/CriticalsHack.java +++ b/src/main/java/net/wurstclient/hacks/CriticalsHack.java @@ -8,6 +8,7 @@ package net.wurstclient.hacks; import net.minecraft.entity.LivingEntity; +import net.minecraft.item.Items; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.hit.HitResult; @@ -68,6 +69,10 @@ public final class CriticalsHack extends Hack implements LeftClickListener if(!isEnabled()) return; + if(WURST.getHax().maceDmgHack.isEnabled() + && MC.player.getMainHandStack().isOf(Items.MACE)) + return; + if(!MC.player.isOnGround()) return; diff --git a/src/main/java/net/wurstclient/hacks/MaceDmgHack.java b/src/main/java/net/wurstclient/hacks/MaceDmgHack.java new file mode 100644 index 00000000..8ecf4b8e --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/MaceDmgHack.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2014-2024 Wurst-Imperium and contributors. + * + * This source code is subject to the terms of the GNU General Public + * License, version 3. If a copy of the GPL was not distributed with this + * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt + */ +package net.wurstclient.hacks; + +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.item.Items; +import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket.PositionAndOnGround; +import net.minecraft.util.hit.HitResult; +import net.wurstclient.Category; +import net.wurstclient.SearchTags; +import net.wurstclient.events.LeftClickListener; +import net.wurstclient.hack.Hack; + +@SearchTags({"mace dmg", "MaceDamage", "mace damage"}) +public final class MaceDmgHack extends Hack implements LeftClickListener +{ + public MaceDmgHack() + { + super("MaceDMG"); + setCategory(Category.COMBAT); + } + + @Override + protected void onEnable() + { + EVENTS.add(LeftClickListener.class, this); + } + + @Override + protected void onDisable() + { + EVENTS.remove(LeftClickListener.class, this); + } + + @Override + public void onLeftClick(LeftClickEvent event) + { + if(MC.crosshairTarget == null + || MC.crosshairTarget.getType() != HitResult.Type.ENTITY) + return; + + if(!MC.player.getMainHandStack().isOf(Items.MACE)) + return; + + // See ServerPlayNetworkHandler.onPlayerMove() + // for why it's using these numbers. + // Also, let me know if you find a way to bypass that check in 1.21. + for(int i = 0; i < 4; i++) + sendFakeY(0); + sendFakeY(Math.sqrt(500)); + sendFakeY(0); + } + + private void sendFakeY(double offset) + { + ClientPlayNetworkHandler netHandler = MC.player.networkHandler; + double posX = MC.player.getX(); + double posY = MC.player.getY(); + double posZ = MC.player.getZ(); + + netHandler.sendPacket( + new PositionAndOnGround(posX, posY + offset, posZ, false)); + } +} diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/lang/en_us.json index 5610cbea..677edaa2 100644 --- a/src/main/resources/assets/wurst/lang/en_us.json +++ b/src/main/resources/assets/wurst/lang/en_us.json @@ -133,6 +133,7 @@ "description.wurst.hack.killpotion": "Generates a potion that can kill almost anything, including players in Creative mode. Does not work on undead mobs, since they are already dead.\n\nRequires Creative mode.", "description.wurst.hack.liquids": "Allows you to place blocks in liquids.", "description.wurst.hack.lsd": "Causes hallucinations.", + "description.wurst.hack.macedmg": "Increases your damage when attacking with a mace.", "description.wurst.hack.masstpa": "Sends a TPA request to all players.", "description.wurst.hack.mileycyrus": "Makes you twerk.", "description.wurst.hack.mobesp": "Highlights nearby mobs.", From 8a4d768c045db16eb11ae8e1ea22fa58b5841d49 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 19 Jun 2024 10:17:33 +0200 Subject: [PATCH 053/109] Fix ModMenu breaking everything again Fixes #1018 --- .../mixin/GameMenuScreenMixin.java | 86 ++++++++++++------- 1 file changed, 56 insertions(+), 30 deletions(-) diff --git a/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java b/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java index 864850be..599ea55e 100644 --- a/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java +++ b/src/main/java/net/wurstclient/mixin/GameMenuScreenMixin.java @@ -11,6 +11,7 @@ import java.util.List; import org.lwjgl.opengl.GL11; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -18,12 +19,14 @@ 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.fabricmc.loader.api.FabricLoader; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.GameMenuScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.resource.language.I18n; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.crash.CrashException; @@ -34,9 +37,11 @@ import net.wurstclient.options.WurstOptionsScreen; @Mixin(GameMenuScreen.class) public abstract class GameMenuScreenMixin extends Screen { + @Unique private static final Identifier WURST_TEXTURE = Identifier.of("wurst", "wurst_128.png"); + @Unique private ButtonWidget wurstOptionsButton; private GameMenuScreenMixin(WurstClient wurst, Text title) @@ -81,62 +86,83 @@ public abstract class GameMenuScreenMixin extends Screen GL11.glDisable(GL11.GL_BLEND); } + @Unique private void addWurstOptionsButton() { List buttons = Screens.getButtons(this); + int buttonX = width / 2 - 102; int buttonY = -1; - int buttonI = -1; + int buttonWidth = 204; + int buttonHeight = 20; - for(int i = 0; i < buttons.size(); i++) + // Find the first row containing a feedback or ModMenu button + for(ClickableWidget button : buttons) { - ClickableWidget button = buttons.get(i); + if(!isFeedbackButton(button)) + continue; - // insert Wurst button in place of feedback/report row - if(isFeedbackButton(button)) - { - buttonY = button.getY(); - buttonI = i; - } - - // make feedback/report buttons invisible - // (removing them completely would break ModMenu) - if(isFeedbackButton(button) || isBugReportButton(button)) - button.visible = false; + buttonY = button.getY(); + break; } - if(buttonY == -1 || buttonI == -1) - throw new CrashException( - CrashReport.create(new IllegalStateException(), - "Someone deleted the Feedback button!")); + // Crash if ModMenu can't behave itself again + if(buttonY == -1) + throw new CrashException(CrashReport.create( + new IllegalStateException( + "Someone deleted the Feedback button."), + "I bet ModMenu is breaking stuff again!")); + + // Make any conflicting feedback/report/ModMenu buttons invisible + // We don't remove them completely, because unlike ModMenu, we care + // about compatibility with other mods here + for(ClickableWidget button : buttons) + { + if(button.getRight() < buttonX + || button.getX() > buttonX + buttonWidth + || button.getBottom() < buttonY + || button.getY() > buttonY + buttonHeight) + continue; + + button.visible = false; + } + // Add the Wurst Options button + MutableText buttonText = Text.literal(" Options"); wurstOptionsButton = ButtonWidget - .builder(Text.literal(" Options"), - b -> openWurstOptions()) - .dimensions(width / 2 - 102, buttonY, 204, 20).build(); + .builder(buttonText, b -> openWurstOptions()) + .dimensions(buttonX, buttonY, buttonWidth, buttonHeight).build(); buttons.add(wurstOptionsButton); } + @Unique private void openWurstOptions() { client.setScreen(new WurstOptionsScreen(this)); } + @Unique private boolean isFeedbackButton(ClickableWidget button) { - return hasTrKey(button, "menu.sendFeedback") - || hasTrKey(button, "menu.feedback"); + if(FabricLoader.getInstance().isModLoaded("modmenu") + && containsTrKey(button, "modmenu.title")) + return true; + + return isTrKey(button, "menu.sendFeedback") + || isTrKey(button, "menu.feedback"); } - private boolean isBugReportButton(ClickableWidget button) - { - return hasTrKey(button, "menu.reportBugs") - || hasTrKey(button, "menu.server_links"); - } - - private boolean hasTrKey(ClickableWidget button, String key) + @Unique + private boolean isTrKey(ClickableWidget button, String key) { String message = button.getMessage().getString(); return message != null && message.equals(I18n.translate(key)); } + + @Unique + private boolean containsTrKey(ClickableWidget button, String key) + { + String message = button.getMessage().getString(); + return message != null && message.contains(I18n.translate(key)); + } } From b71d7d5e237a363b6db07dbcfb0ed485fe481c0c Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 28 Jun 2024 08:46:48 +0200 Subject: [PATCH 054/109] Change version to 7.43.2 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 2cf07512..1beb84d9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version=0.15.11 fabric_version=0.100.3+1.21 # Mod Properties -mod_version = v7.43.1-MC1.21 +mod_version = v7.43.2-MC1.21 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 721f660f..f3d64a86 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -58,7 +58,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.43.1"; + public static final String VERSION = "7.43.2"; public static final String MC_VERSION = "1.21"; private WurstAnalytics analytics; From d33ec8a51e5de977fe76b1e5dd38ba2c6bbe5d59 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 28 Jun 2024 08:49:19 +0200 Subject: [PATCH 055/109] Update Fabric stuff --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 1beb84d9..959dfa5f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,11 +6,11 @@ org.gradle.parallel=true # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions minecraft_version=1.21 -yarn_mappings=1.21+build.2 +yarn_mappings=1.21+build.4 loader_version=0.15.11 # Fabric API -fabric_version=0.100.3+1.21 +fabric_version=0.100.4+1.21 # Mod Properties mod_version = v7.43.2-MC1.21 From b50e89a1b4bd7a2db4cfdde8da4ff6bbcc72b54a Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 28 Jun 2024 12:12:04 +0200 Subject: [PATCH 056/109] Add helper methods for setting the shader color --- .../net/wurstclient/clickgui/ClickGui.java | 31 +++++++------------ .../wurstclient/clickgui/ComboBoxPopup.java | 5 +-- .../components/AbstractListEditButton.java | 9 +++--- .../clickgui/components/BlockComponent.java | 3 +- .../components/CheckboxComponent.java | 8 ++--- .../clickgui/components/ColorComponent.java | 9 +++--- .../components/ComboBoxComponent.java | 9 +++--- .../clickgui/components/FeatureButton.java | 7 +++-- .../clickgui/components/FileComponent.java | 9 +++--- .../clickgui/components/RadarComponent.java | 7 ++--- .../clickgui/components/SliderComponent.java | 16 +++++----- .../components/TextFieldEditButton.java | 9 +++--- .../net/wurstclient/commands/TacoCmd.java | 8 ++--- .../net/wurstclient/hacks/AirPlaceHack.java | 8 ++--- .../net/wurstclient/hacks/BaseFinderHack.java | 3 +- .../net/wurstclient/hacks/BowAimbotHack.java | 7 ++--- .../net/wurstclient/hacks/CaveFinderHack.java | 3 +- .../net/wurstclient/hacks/FreecamHack.java | 3 +- .../net/wurstclient/hacks/ItemEspHack.java | 7 ++--- .../net/wurstclient/hacks/SearchHack.java | 2 +- .../wurstclient/hacks/TrajectoriesHack.java | 8 ++--- .../hacks/autofish/AutoFishDebugDraw.java | 9 ++---- .../hacks/chestesp/ChestEspRenderer.java | 6 ++-- .../hacks/newchunks/NewChunksRenderer.java | 8 ++--- .../hacks/portalesp/PortalEspRenderer.java | 6 ++-- src/main/java/net/wurstclient/hud/TabGui.java | 6 ++-- .../navigator/NavigatorFeatureScreen.java | 2 +- .../navigator/NavigatorMainScreen.java | 10 +++--- .../navigator/NavigatorScreen.java | 11 +++---- .../wurstclient/settings/ColorSetting.java | 7 +++++ .../net/wurstclient/util/RenderUtils.java | 5 +++ 31 files changed, 108 insertions(+), 133 deletions(-) diff --git a/src/main/java/net/wurstclient/clickgui/ClickGui.java b/src/main/java/net/wurstclient/clickgui/ClickGui.java index e17d1ae4..a41a16e3 100644 --- a/src/main/java/net/wurstclient/clickgui/ClickGui.java +++ b/src/main/java/net/wurstclient/clickgui/ClickGui.java @@ -562,8 +562,7 @@ public final class ClickGui RenderSystem.setShader(GameRenderer::getPositionProgram); // background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - ttOpacity); + RenderUtils.setShaderColor(bgColor, ttOpacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xt1, yt1, 0); @@ -573,7 +572,7 @@ public final class ClickGui BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xt1, yt1, 0); @@ -673,8 +672,7 @@ public final class ClickGui int ys4 = ys3 + (int)scrollbarHeight; // window background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); @@ -696,7 +694,7 @@ public final class ClickGui && mouseX < xs2 && mouseY < ys4; // scrollbar - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], + RenderUtils.setShaderColor(acColor, hovering ? opacity * 1.5F : opacity); bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, @@ -708,8 +706,7 @@ public final class ClickGui BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], - 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, @@ -729,8 +726,7 @@ public final class ClickGui // window background // left & right - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); @@ -754,8 +750,7 @@ public final class ClickGui matrixStack.translate(x1, y4, 0); matrix = matrixStack.peek().getPositionMatrix(); - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); @@ -808,7 +803,7 @@ public final class ClickGui GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); // window outline - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); @@ -862,8 +857,7 @@ public final class ClickGui // title bar background // above & below buttons - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], - opacity); + RenderUtils.setShaderColor(acColor, opacity); bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); @@ -906,7 +900,7 @@ public final class ClickGui RenderSystem.setShader(GameRenderer::getPositionProgram); // button background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], + RenderUtils.setShaderColor(bgColor, hovering ? opacity * 1.5F : opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); @@ -917,8 +911,7 @@ public final class ClickGui BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // background between buttons - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], - opacity); + RenderUtils.setShaderColor(acColor, opacity); bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x2, y1, 0); @@ -928,7 +921,7 @@ public final class ClickGui BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // button outline - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); diff --git a/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java b/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java index 978e2148..4bb944e5 100644 --- a/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java +++ b/src/main/java/net/wurstclient/clickgui/ComboBoxPopup.java @@ -23,6 +23,7 @@ import net.minecraft.client.render.VertexFormats; import net.minecraft.client.util.math.MatrixStack; import net.wurstclient.WurstClient; import net.wurstclient.settings.EnumSetting; +import net.wurstclient.util.RenderUtils; public final class ComboBoxPopup> extends Popup { @@ -117,7 +118,7 @@ public final class ComboBoxPopup> extends Popup Tessellator tessellator = RenderSystem.renderThreadTesselator(); float[] acColor = gui.getAcColor(); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); @@ -138,7 +139,7 @@ public final class ComboBoxPopup> extends Popup Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], alpha); + RenderUtils.setShaderColor(bgColor, alpha); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); diff --git a/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java b/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java index bb786165..592614ec 100644 --- a/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java @@ -26,6 +26,7 @@ import net.wurstclient.WurstClient; import net.wurstclient.clickgui.ClickGui; import net.wurstclient.clickgui.Component; import net.wurstclient.settings.Setting; +import net.wurstclient.util.RenderUtils; public abstract class AbstractListEditButton extends Component { @@ -91,8 +92,7 @@ public abstract class AbstractListEditButton extends Component gui.setTooltip(getSetting().getWrappedDescription(200)); // background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); @@ -102,8 +102,7 @@ public abstract class AbstractListEditButton extends Component BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // box - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - hBox ? opacity * 1.5F : opacity); + RenderUtils.setShaderColor(bgColor, hBox ? opacity * 1.5F : opacity); bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); @@ -111,7 +110,7 @@ public abstract class AbstractListEditButton extends Component bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java b/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java index 74f38a79..29782475 100644 --- a/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/BlockComponent.java @@ -106,8 +106,7 @@ public final class BlockComponent extends Component } // background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java b/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java index 318794d5..d0a4052f 100644 --- a/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/CheckboxComponent.java @@ -26,6 +26,7 @@ import net.wurstclient.clickgui.ClickGui; import net.wurstclient.clickgui.Component; import net.wurstclient.clickgui.Window; import net.wurstclient.settings.CheckboxSetting; +import net.wurstclient.util.RenderUtils; public final class CheckboxComponent extends Component { @@ -119,8 +120,7 @@ public final class CheckboxComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); @@ -140,7 +140,7 @@ public final class CheckboxComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], + RenderUtils.setShaderColor(bgColor, hovering ? opacity * 1.5F : opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); @@ -150,7 +150,7 @@ public final class CheckboxComponent extends Component bufferBuilder.vertex(matrix, x3, y1, 0); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java b/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java index cf0321df..4bc012c9 100644 --- a/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/ColorComponent.java @@ -29,6 +29,7 @@ import net.wurstclient.clickgui.Window; import net.wurstclient.clickgui.screens.EditColorScreen; import net.wurstclient.settings.ColorSetting; import net.wurstclient.util.ColorUtils; +import net.wurstclient.util.RenderUtils; public final class ColorComponent extends Component { @@ -110,8 +111,7 @@ public final class ColorComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); @@ -133,8 +133,7 @@ public final class ColorComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - RenderSystem.setShaderColor(color[0], color[1], color[2], - hovering ? 1F : opacity); + RenderUtils.setShaderColor(color, hovering ? 1F : opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); @@ -144,7 +143,7 @@ public final class ColorComponent extends Component bufferBuilder.vertex(matrix, x2, y2, 0); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); diff --git a/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java b/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java index 6ba454e7..ae97a77b 100644 --- a/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/ComboBoxComponent.java @@ -31,6 +31,7 @@ import net.wurstclient.clickgui.ComboBoxPopup; import net.wurstclient.clickgui.Component; import net.wurstclient.clickgui.Window; import net.wurstclient.settings.EnumSetting; +import net.wurstclient.util.RenderUtils; public final class ComboBoxComponent> extends Component { @@ -154,8 +155,7 @@ public final class ComboBoxComponent> extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); @@ -178,8 +178,7 @@ public final class ComboBoxComponent> extends Component // background float bgAlpha = hBox ? opacity * 1.5F : opacity; - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - bgAlpha); + RenderUtils.setShaderColor(bgColor, bgAlpha); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x4, y1, 0); @@ -189,7 +188,7 @@ public final class ComboBoxComponent> extends Component BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x4, y1, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java b/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java index 3f2989df..1d9735f1 100644 --- a/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/FeatureButton.java @@ -32,6 +32,7 @@ import net.wurstclient.clickgui.SettingsWindow; import net.wurstclient.clickgui.Window; import net.wurstclient.hacks.TooManyHaxHack; import net.wurstclient.util.ChatUtils; +import net.wurstclient.util.RenderUtils; public final class FeatureButton extends Component { @@ -179,7 +180,7 @@ public final class FeatureButton extends Component RenderSystem.setShaderColor(0, 1, 0, hHack ? opacity * 1.5F : opacity); else - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], + RenderUtils.setShaderColor(bgColor, hHack ? opacity * 1.5F : opacity); bufferBuilder.vertex(matrix, x1, y1, 0); @@ -201,7 +202,7 @@ public final class FeatureButton extends Component BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], + RenderUtils.setShaderColor(bgColor, hSettings ? opacity * 1.5F : opacity); bufferBuilder.vertex(matrix, x3, y1, 0); bufferBuilder.vertex(matrix, x3, y2, 0); @@ -220,7 +221,7 @@ public final class FeatureButton extends Component BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder.vertex(matrix, x1, y1, 0); bufferBuilder.vertex(matrix, x1, y2, 0); bufferBuilder.vertex(matrix, x2, y2, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/FileComponent.java b/src/main/java/net/wurstclient/clickgui/components/FileComponent.java index 66080764..3dcafcff 100644 --- a/src/main/java/net/wurstclient/clickgui/components/FileComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/FileComponent.java @@ -26,6 +26,7 @@ import net.wurstclient.clickgui.ClickGui; import net.wurstclient.clickgui.Component; import net.wurstclient.clickgui.screens.SelectFileScreen; import net.wurstclient.settings.FileSetting; +import net.wurstclient.util.RenderUtils; public final class FileComponent extends Component { @@ -97,8 +98,7 @@ public final class FileComponent extends Component } // background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); @@ -108,8 +108,7 @@ public final class FileComponent extends Component BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // box - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - hBox ? opacity * 1.5F : opacity); + RenderUtils.setShaderColor(bgColor, hBox ? opacity * 1.5F : opacity); bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); @@ -117,7 +116,7 @@ public final class FileComponent extends Component bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y1, 0); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y1, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java b/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java index 6f5b795f..a1752f88 100644 --- a/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/RadarComponent.java @@ -35,6 +35,7 @@ import net.wurstclient.clickgui.ClickGui; import net.wurstclient.clickgui.Component; import net.wurstclient.hacks.RadarHack; import net.wurstclient.util.EntityUtils; +import net.wurstclient.util.RenderUtils; public final class RadarComponent extends Component { @@ -77,8 +78,7 @@ public final class RadarComponent extends Component gui.setTooltip(""); // background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); @@ -107,8 +107,7 @@ public final class RadarComponent extends Component float ya3 = 1; // arrow - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], - opacity); + RenderUtils.setShaderColor(acColor, opacity); bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xa1, ya1, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java b/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java index 5c0c8315..e8019f4b 100644 --- a/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java +++ b/src/main/java/net/wurstclient/clickgui/components/SliderComponent.java @@ -29,6 +29,7 @@ import net.wurstclient.clickgui.Component; import net.wurstclient.clickgui.Window; import net.wurstclient.clickgui.screens.EditSliderScreen; import net.wurstclient.settings.SliderSetting; +import net.wurstclient.util.RenderUtils; public final class SliderComponent extends Component { @@ -175,8 +176,7 @@ public final class SliderComponent extends Component Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); @@ -238,8 +238,7 @@ public final class SliderComponent extends Component BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - hSlider ? opacity * 1.5F : opacity); + RenderUtils.setShaderColor(bgColor, hSlider ? opacity * 1.5F : opacity); bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xl1, y4, 0); @@ -249,7 +248,7 @@ public final class SliderComponent extends Component BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x3, y4, 0); @@ -276,10 +275,9 @@ public final class SliderComponent extends Component if(renderAsDisabled) RenderSystem.setShaderColor(0.5F, 0.5F, 0.5F, 0.75F); else - { - float[] c = setting.getKnobColor(); - RenderSystem.setShaderColor(c[0], c[1], c[2], hSlider ? 1 : 0.75F); - } + RenderUtils.setShaderColor(setting.getKnobColor(), + hSlider ? 1 : 0.75F); + BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xk1, yk1, 0); diff --git a/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java b/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java index 7c185a28..21b95c51 100644 --- a/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/TextFieldEditButton.java @@ -31,6 +31,7 @@ import net.wurstclient.clickgui.Component; import net.wurstclient.clickgui.screens.EditTextFieldScreen; import net.wurstclient.settings.TextFieldSetting; import net.wurstclient.util.ChatUtils; +import net.wurstclient.util.RenderUtils; public final class TextFieldEditButton extends Component { @@ -99,8 +100,7 @@ public final class TextFieldEditButton extends Component gui.setTooltip(ChatUtils.wrapText(setting.getValue(), 200)); // background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y1, 0); @@ -110,8 +110,7 @@ public final class TextFieldEditButton extends Component BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // box - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - hBox ? opacity * 1.5F : opacity); + RenderUtils.setShaderColor(bgColor, hBox ? opacity * 1.5F : opacity); bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y3, 0); @@ -119,7 +118,7 @@ public final class TextFieldEditButton extends Component bufferBuilder.vertex(matrix, x2, y2, 0); bufferBuilder.vertex(matrix, x2, y3, 0); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, y3, 0); diff --git a/src/main/java/net/wurstclient/commands/TacoCmd.java b/src/main/java/net/wurstclient/commands/TacoCmd.java index 27f795b9..b14fc735 100644 --- a/src/main/java/net/wurstclient/commands/TacoCmd.java +++ b/src/main/java/net/wurstclient/commands/TacoCmd.java @@ -20,6 +20,7 @@ import net.wurstclient.command.CmdSyntaxError; import net.wurstclient.command.Command; import net.wurstclient.events.GUIRenderListener; import net.wurstclient.events.UpdateListener; +import net.wurstclient.util.RenderUtils; public final class TacoCmd extends Command implements GUIRenderListener, UpdateListener @@ -89,11 +90,8 @@ public final class TacoCmd extends Command GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); if(WURST.getHax().rainbowUiHack.isEnabled()) - { - float[] acColor = WURST.getGui().getAcColor(); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 1); - - }else + RenderUtils.setShaderColor(WURST.getGui().getAcColor(), 1); + else RenderSystem.setShaderColor(1, 1, 1, 1); Window sr = MC.getWindow(); diff --git a/src/main/java/net/wurstclient/hacks/AirPlaceHack.java b/src/main/java/net/wurstclient/hacks/AirPlaceHack.java index 44639682..c8c821ec 100644 --- a/src/main/java/net/wurstclient/hacks/AirPlaceHack.java +++ b/src/main/java/net/wurstclient/hacks/AirPlaceHack.java @@ -139,12 +139,12 @@ public final class AirPlaceHack extends Hack RenderUtils.applyRegionalRenderOffset(matrixStack); Box box = new Box(renderPos.subtract(region.toBlockPos())); - float[] colorF = guideColor.getColorF(); - RenderSystem.setShader(GameRenderer::getPositionProgram); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.1F); + + guideColor.setAsShaderColor(0.1F); RenderUtils.drawSolidBox(box, matrixStack); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.75F); + + guideColor.setAsShaderColor(0.75F); RenderUtils.drawOutlinedBox(box, matrixStack); matrixStack.pop(); diff --git a/src/main/java/net/wurstclient/hacks/BaseFinderHack.java b/src/main/java/net/wurstclient/hacks/BaseFinderHack.java index b3d5bb24..09a0fd90 100644 --- a/src/main/java/net/wurstclient/hacks/BaseFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/BaseFinderHack.java @@ -170,9 +170,8 @@ public final class BaseFinderHack extends Hack matrixStack.push(); RenderUtils.applyRegionalRenderOffset(matrixStack, region); - float[] colorF = color.getColorF(); RenderSystem.setShader(GameRenderer::getPositionProgram); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.15F); + color.setAsShaderColor(0.15F); if(vertexBuffer != null) { diff --git a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java index 37714eb7..f2b130b8 100644 --- a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java +++ b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java @@ -231,16 +231,13 @@ public final class BowAimbotHack extends Hack matrixStack.scale(v, v, v); RenderSystem.setShader(GameRenderer::getPositionProgram); - float[] colorF = color.getColorF(); // draw outline - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], - 0.5F * velocity); + color.setAsShaderColor(0.5F * velocity); RenderUtils.drawOutlinedBox(TARGET_BOX, matrixStack); // draw box - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], - 0.25F * velocity); + color.setAsShaderColor(0.25F * velocity); RenderUtils.drawSolidBox(TARGET_BOX, matrixStack); matrixStack.pop(); diff --git a/src/main/java/net/wurstclient/hacks/CaveFinderHack.java b/src/main/java/net/wurstclient/hacks/CaveFinderHack.java index 1f6cdb6a..0b8eda80 100644 --- a/src/main/java/net/wurstclient/hacks/CaveFinderHack.java +++ b/src/main/java/net/wurstclient/hacks/CaveFinderHack.java @@ -186,8 +186,7 @@ public final class CaveFinderHack extends Hack if(opacity.getValue() > 0) alpha = opacity.getValueF(); - float[] colorF = color.getColorF(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], alpha); + color.setAsShaderColor(alpha); RenderSystem.setShader(GameRenderer::getPositionProgram); Matrix4f viewMatrix = matrixStack.peek().getPositionMatrix(); diff --git a/src/main/java/net/wurstclient/hacks/FreecamHack.java b/src/main/java/net/wurstclient/hacks/FreecamHack.java index 40378213..7f15a682 100644 --- a/src/main/java/net/wurstclient/hacks/FreecamHack.java +++ b/src/main/java/net/wurstclient/hacks/FreecamHack.java @@ -192,8 +192,7 @@ public final class FreecamHack extends Hack implements UpdateListener, RegionPos region = RenderUtils.getCameraRegion(); RenderUtils.applyRegionalRenderOffset(matrixStack, region); - float[] colorF = color.getColorF(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); + color.setAsShaderColor(0.5F); // box matrixStack.push(); diff --git a/src/main/java/net/wurstclient/hacks/ItemEspHack.java b/src/main/java/net/wurstclient/hacks/ItemEspHack.java index 37f7f6a8..e5eac293 100644 --- a/src/main/java/net/wurstclient/hacks/ItemEspHack.java +++ b/src/main/java/net/wurstclient/hacks/ItemEspHack.java @@ -143,9 +143,7 @@ public final class ItemEspHack extends Hack implements UpdateListener, GL11.glEnable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_DEPTH_TEST); - float[] colorF = color.getColorF(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], - 0.5F); + color.setAsShaderColor(0.5F); RenderUtils.drawOutlinedBox(new Box(-0.5, 0, -0.5, 0.5, 1, 0.5), matrixStack); @@ -164,8 +162,7 @@ public final class ItemEspHack extends Hack implements UpdateListener, GL11.glEnable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_DEPTH_TEST); - float[] colorF = color.getColorF(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); + color.setAsShaderColor(0.5F); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); Tessellator tessellator = RenderSystem.renderThreadTesselator(); diff --git a/src/main/java/net/wurstclient/hacks/SearchHack.java b/src/main/java/net/wurstclient/hacks/SearchHack.java index 87a445a7..fb091980 100644 --- a/src/main/java/net/wurstclient/hacks/SearchHack.java +++ b/src/main/java/net/wurstclient/hacks/SearchHack.java @@ -193,7 +193,7 @@ public final class SearchHack extends Hack RenderUtils.applyRegionalRenderOffset(matrixStack, bufferRegion); float[] rainbow = RenderUtils.getRainbowColor(); - RenderSystem.setShaderColor(rainbow[0], rainbow[1], rainbow[2], 0.5F); + RenderUtils.setShaderColor(rainbow, 0.5F); RenderSystem.setShader(GameRenderer::getPositionProgram); diff --git a/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java b/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java index 056f1cb5..ae6fc6ab 100644 --- a/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java +++ b/src/main/java/net/wurstclient/hacks/TrajectoriesHack.java @@ -130,8 +130,7 @@ public final class TrajectoriesHack extends Hack implements RenderListener BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); - float[] colorF = color.getColorF(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.75F); + color.setAsShaderColor(0.75F); for(Vec3d point : path) bufferBuilder.vertex(matrix, (float)(point.x - camPos.x), @@ -147,15 +146,14 @@ public final class TrajectoriesHack extends Hack implements RenderListener double renderX = end.x - camPos.x; double renderY = end.y - camPos.y; double renderZ = end.z - camPos.z; - float[] colorF = color.getColorF(); matrixStack.push(); matrixStack.translate(renderX - 0.5, renderY - 0.5, renderZ - 0.5); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.25F); + color.setAsShaderColor(0.25F); RenderUtils.drawSolidBox(matrixStack); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.75F); + color.setAsShaderColor(0.75F); RenderUtils.drawOutlinedBox(matrixStack); matrixStack.pop(); diff --git a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java index 820e098c..51af93c5 100644 --- a/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java +++ b/src/main/java/net/wurstclient/hacks/autofish/AutoFishDebugDraw.java @@ -118,8 +118,7 @@ public final class AutoFishDebugDraw .subtract(region.toVec3d()); matrixStack.translate(pos.getX(), pos.getY(), pos.getZ()); - float[] colorF = ddColor.getColorF(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); + ddColor.setAsShaderColor(0.5F); double vr = validRange.getValue(); Box vrBox = new Box(-vr, -1 / 16.0, -vr, vr, 1 / 16.0, vr); @@ -138,8 +137,7 @@ public final class AutoFishDebugDraw matrixStack.translate(lastSoundPos.x - region.x(), lastSoundPos.y, lastSoundPos.z - region.z()); - float[] colorF = ddColor.getColorF(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); + ddColor.setAsShaderColor(0.5F); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); @@ -158,8 +156,7 @@ public final class AutoFishDebugDraw Box noseBox = headBox.offset(0.125, 0.125, 0.5).shrink(0.25, 0.35, 0.45); - float[] colorF = ddColor.getColorF(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.75F); + ddColor.setAsShaderColor(0.75F); for(FishingSpot spot : fishingSpots.getFishingSpots()) { diff --git a/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java b/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java index 9f1918cf..6e08bd5b 100644 --- a/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java +++ b/src/main/java/net/wurstclient/hacks/chestesp/ChestEspRenderer.java @@ -64,12 +64,12 @@ public final class ChestEspRenderer Matrix4f projMatrix = RenderSystem.getProjectionMatrix(); ShaderProgram shader = RenderSystem.getShader(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.25F); + RenderUtils.setShaderColor(colorF, 0.25F); solidBox.bind(); solidBox.draw(viewMatrix, projMatrix, shader); VertexBuffer.unbind(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); + RenderUtils.setShaderColor(colorF, 0.5F); outlinedBox.bind(); outlinedBox.draw(viewMatrix, projMatrix, shader); VertexBuffer.unbind(); @@ -87,7 +87,7 @@ public final class ChestEspRenderer Tessellator tessellator = RenderSystem.renderThreadTesselator(); float[] colorF = group.getColorF(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); + RenderUtils.setShaderColor(colorF, 0.5F); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); diff --git a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java index 3e5ea828..f014472e 100644 --- a/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java +++ b/src/main/java/net/wurstclient/hacks/newchunks/NewChunksRenderer.java @@ -82,8 +82,6 @@ public final class NewChunksRenderer ShaderProgram 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++) @@ -97,11 +95,9 @@ public final class NewChunksRenderer matrixStack.translate(0, altitudeD, 0); if(i < 2) - RenderSystem.setShaderColor(newColorF[0], newColorF[1], - newColorF[2], alpha); + newChunksColor.setAsShaderColor(alpha); else - RenderSystem.setShaderColor(oldColorF[0], oldColorF[1], - oldColorF[2], alpha); + oldChunksColor.setAsShaderColor(alpha); Matrix4f viewMatrix = matrixStack.peek().getPositionMatrix(); buffer.bind(); diff --git a/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java b/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java index d9a03ea5..8d2515ca 100644 --- a/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java +++ b/src/main/java/net/wurstclient/hacks/portalesp/PortalEspRenderer.java @@ -64,12 +64,12 @@ public final class PortalEspRenderer Matrix4f projMatrix = RenderSystem.getProjectionMatrix(); ShaderProgram shader = RenderSystem.getShader(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.25F); + RenderUtils.setShaderColor(colorF, 0.25F); solidBox.bind(); solidBox.draw(viewMatrix, projMatrix, shader); VertexBuffer.unbind(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); + RenderUtils.setShaderColor(colorF, 0.5F); outlinedBox.bind(); outlinedBox.draw(viewMatrix, projMatrix, shader); VertexBuffer.unbind(); @@ -87,7 +87,7 @@ public final class PortalEspRenderer Tessellator tessellator = RenderSystem.renderThreadTesselator(); float[] colorF = group.getColorF(); - RenderSystem.setShaderColor(colorF[0], colorF[1], colorF[2], 0.5F); + RenderUtils.setShaderColor(colorF, 0.5F); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); diff --git a/src/main/java/net/wurstclient/hud/TabGui.java b/src/main/java/net/wurstclient/hud/TabGui.java index 4adbecdd..324ddcc0 100644 --- a/src/main/java/net/wurstclient/hud/TabGui.java +++ b/src/main/java/net/wurstclient/hud/TabGui.java @@ -33,6 +33,7 @@ import net.wurstclient.events.KeyPressListener; import net.wurstclient.hacks.TooManyHaxHack; import net.wurstclient.other_features.TabGuiOtf; import net.wurstclient.util.ChatUtils; +import net.wurstclient.util.RenderUtils; public final class TabGui implements KeyPressListener { @@ -221,8 +222,7 @@ public final class TabGui implements KeyPressListener RenderSystem.setShader(GameRenderer::getPositionProgram); // color - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); // box BufferBuilder bufferBuilder = tessellator @@ -243,7 +243,7 @@ public final class TabGui implements KeyPressListener // outline GL11.glLineWidth(1); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); { diff --git a/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java index 418f62d2..519b9ca7 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorFeatureScreen.java @@ -470,7 +470,7 @@ public final class NavigatorFeatureScreen extends NavigatorScreen }else alpha = 0.375F; float[] rgb = buttonData.color.getColorComponents(null); - RenderSystem.setShaderColor(rgb[0], rgb[1], rgb[2], alpha); + RenderUtils.setShaderColor(rgb, alpha); // button drawBox(matrixStack, x1, y1, x2, y2); diff --git a/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java index d60232f1..6d4eb442 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorMainScreen.java @@ -301,8 +301,7 @@ public final class NavigatorMainScreen extends NavigatorScreen RenderSystem.setShader(GameRenderer::getPositionProgram); // background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - 0.75F); + RenderUtils.setShaderColor(bgColor, 0.75F); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xt1, yt1, 0); @@ -312,8 +311,7 @@ public final class NavigatorMainScreen extends NavigatorScreen BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); // outline - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], - 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xt1, yt1, 0); @@ -397,7 +395,7 @@ public final class NavigatorMainScreen extends NavigatorScreen RenderSystem.setShaderColor(0, 1, 0, renderAsHovered ? opacity * 1.5F : opacity); else - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], + RenderUtils.setShaderColor(bgColor, renderAsHovered ? opacity * 1.5F : opacity); // tooltip @@ -427,7 +425,7 @@ public final class NavigatorMainScreen extends NavigatorScreen int by1 = area.y + 2; int by2 = by1 + area.height - 4; float[] acColor = WurstClient.INSTANCE.getGui().getAcColor(); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, bx1, by1, 0); diff --git a/src/main/java/net/wurstclient/navigator/NavigatorScreen.java b/src/main/java/net/wurstclient/navigator/NavigatorScreen.java index 1f4351dc..5d2c9e6b 100644 --- a/src/main/java/net/wurstclient/navigator/NavigatorScreen.java +++ b/src/main/java/net/wurstclient/navigator/NavigatorScreen.java @@ -25,6 +25,7 @@ import net.minecraft.client.render.VertexFormats; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.wurstclient.WurstClient; +import net.wurstclient.util.RenderUtils; public abstract class NavigatorScreen extends Screen { @@ -271,7 +272,7 @@ public abstract class NavigatorScreen extends Screen RenderSystem.setShader(GameRenderer::getPositionProgram); // outline - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); BufferBuilder bufferBuilder = tessellator.begin( VertexFormat.DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION); bufferBuilder.vertex(matrix, xi1, yi1, 0); @@ -340,7 +341,7 @@ public abstract class NavigatorScreen extends Screen // outline float yi1 = y1 + 0.1F; - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + RenderUtils.setShaderColor(acColor, 0.5F); BufferBuilder bufferBuilder = tessellator .begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION); bufferBuilder.vertex(matrix, x1, yi1, 0); @@ -373,8 +374,7 @@ public abstract class NavigatorScreen extends Screen WurstClient.INSTANCE.getGui().updateColors(); float[] bgColor = WurstClient.INSTANCE.getGui().getBgColor(); float opacity = WurstClient.INSTANCE.getGui().getOpacity(); - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); } protected final void setColorToForeground() @@ -382,8 +382,7 @@ public abstract class NavigatorScreen extends Screen WurstClient.INSTANCE.getGui().updateColors(); float[] bgColor = WurstClient.INSTANCE.getGui().getBgColor(); float opacity = WurstClient.INSTANCE.getGui().getOpacity(); - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); + RenderUtils.setShaderColor(bgColor, opacity); } protected final void drawBackgroundBox(MatrixStack matrixStack, int x1, diff --git a/src/main/java/net/wurstclient/settings/ColorSetting.java b/src/main/java/net/wurstclient/settings/ColorSetting.java index 105b253d..e56fd1ae 100644 --- a/src/main/java/net/wurstclient/settings/ColorSetting.java +++ b/src/main/java/net/wurstclient/settings/ColorSetting.java @@ -15,6 +15,7 @@ import java.util.Set; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; +import com.mojang.blaze3d.systems.RenderSystem; import net.wurstclient.WurstClient; import net.wurstclient.clickgui.Component; @@ -54,6 +55,12 @@ public final class ColorSetting extends Setting return new float[]{red, green, blue}; } + public void setAsShaderColor(float opacity) + { + float[] rgb = getColorF(); + RenderSystem.setShaderColor(rgb[0], rgb[1], rgb[2], opacity); + } + public int getColorI() { return color.getRGB(); diff --git a/src/main/java/net/wurstclient/util/RenderUtils.java b/src/main/java/net/wurstclient/util/RenderUtils.java index 4c36c4ea..4b95e0ac 100644 --- a/src/main/java/net/wurstclient/util/RenderUtils.java +++ b/src/main/java/net/wurstclient/util/RenderUtils.java @@ -117,6 +117,11 @@ public enum RenderUtils return rainbow; } + public static void setShaderColor(float[] rgb, float opacity) + { + RenderSystem.setShaderColor(rgb[0], rgb[1], rgb[2], opacity); + } + public static void drawSolidBox(MatrixStack matrixStack) { drawSolidBox(DEFAULT_BOX, matrixStack); From e46659943e943c9d2e5e6732e755c342d0d84770 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 28 Jun 2024 12:17:27 +0200 Subject: [PATCH 057/109] Update Fabric stuff --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index dca393ed..eae5d8b3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,11 +6,11 @@ org.gradle.parallel=true # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions minecraft_version=1.21 -yarn_mappings=1.21+build.2 +yarn_mappings=1.21+build.4 loader_version=0.15.11 # Fabric API -fabric_version=0.100.3+1.21 +fabric_version=0.100.4+1.21 # Mod Properties mod_version = v7.44pre2-MC1.21 From f4a2e5b8fd8a02fd0d096133ca62fe774017ac39 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 28 Jun 2024 12:43:27 +0200 Subject: [PATCH 058/109] Improve ArrowDmgHack to deal more damage --- .../net/wurstclient/hacks/ArrowDmgHack.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/ArrowDmgHack.java b/src/main/java/net/wurstclient/hacks/ArrowDmgHack.java index e45b525b..0d86505f 100644 --- a/src/main/java/net/wurstclient/hacks/ArrowDmgHack.java +++ b/src/main/java/net/wurstclient/hacks/ArrowDmgHack.java @@ -13,7 +13,7 @@ import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket; import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket.Mode; -import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; +import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket.PositionAndOnGround; import net.minecraft.util.math.Vec3d; import net.wurstclient.Category; import net.wurstclient.SearchTags; @@ -66,15 +66,25 @@ public final class ArrowDmgHack extends Hack implements StopUsingItemListener netHandler.sendPacket( new ClientCommandC2SPacket(player, Mode.START_SPRINTING)); - Vec3d lookVec = player.getRotationVec(1).multiply(strength.getValue()); double x = player.getX(); double y = player.getY(); double z = player.getZ(); - netHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround( - x - lookVec.x, y - 1e-10, z - lookVec.z, true)); - netHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(x, - y + 1e-10, z, false)); + // See ServerPlayNetworkHandler.onPlayerMove() + // for why it's using these numbers. + // Also, let me know if you find a way to bypass that check in 1.21. + double adjustedStrength = strength.getValue() / 10.0 * Math.sqrt(500); + Vec3d lookVec = player.getRotationVec(1).multiply(adjustedStrength); + for(int i = 0; i < 4; i++) + sendPos(x, y, z, true); + sendPos(x - lookVec.x, y, z - lookVec.z, true); + sendPos(x, y, z, false); + } + + private void sendPos(double x, double y, double z, boolean onGround) + { + ClientPlayNetworkHandler netHandler = MC.player.networkHandler; + netHandler.sendPacket(new PositionAndOnGround(x, y, z, onGround)); } private boolean isValidItem(Item item) From feef28f33b9a96a9842ff6640ee5c8f5918fc89a Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 4 Jul 2024 18:47:42 +0200 Subject: [PATCH 059/109] Update org.kohsuke:github-api to 1.323 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 79eee2df..3fd1a1f4 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ buildscript { dependencies { - classpath "org.kohsuke:github-api:1.322" + classpath "org.kohsuke:github-api:1.323" } } From 90305364073a79e8824e8c0c8cb780137b8e5ff5 Mon Sep 17 00:00:00 2001 From: ThisTestUser Date: Mon, 8 Jul 2024 18:36:07 -0400 Subject: [PATCH 060/109] Convert to WrapOperation --- .../wurstclient/mixin/LivingEntityRendererMixin.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/wurstclient/mixin/LivingEntityRendererMixin.java b/src/main/java/net/wurstclient/mixin/LivingEntityRendererMixin.java index 24d05ff8..c3dee14b 100644 --- a/src/main/java/net/wurstclient/mixin/LivingEntityRendererMixin.java +++ b/src/main/java/net/wurstclient/mixin/LivingEntityRendererMixin.java @@ -10,9 +10,11 @@ package net.wurstclient.mixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; + import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.entity.Entity; @@ -25,16 +27,17 @@ public abstract class LivingEntityRendererMixin /** * Disables the distance limit in hasLabel() if configured in NameTags. */ - @Redirect(at = @At(value = "INVOKE", + @WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/EntityRenderDispatcher;getSquaredDistanceToCamera(Lnet/minecraft/entity/Entity;)D", ordinal = 0), method = "hasLabel(Lnet/minecraft/entity/LivingEntity;)Z") - private double adjustDistance(EntityRenderDispatcher render, Entity entity) + private double adjustDistance(EntityRenderDispatcher render, Entity entity, + Operation original) { // pretend the distance is 1 so the check always passes if(WurstClient.INSTANCE.getHax().nameTagsHack.isUnlimitedRange()) return 1; - return render.getSquaredDistanceToCamera(entity); + return original.call(render, entity); } /** From 4d9b2a209e7351b0a56cd0cd8b8468475c6b4aa6 Mon Sep 17 00:00:00 2001 From: ThisTestUser Date: Sat, 29 Jun 2024 15:31:59 -0400 Subject: [PATCH 061/109] Fix PacketOutputEvent --- .../mixin/ClientCommonNetworkHandlerMixin.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java b/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java index 84a4d478..d9a05dd0 100644 --- a/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java +++ b/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java @@ -9,10 +9,10 @@ package net.wurstclient.mixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.Redirect; import net.minecraft.client.network.ClientCommonNetworkHandler; +import net.minecraft.network.ClientConnection; import net.minecraft.network.listener.ClientCommonPacketListener; import net.minecraft.network.packet.Packet; import net.wurstclient.event.EventManager; @@ -22,15 +22,15 @@ import net.wurstclient.events.PacketOutputListener.PacketOutputEvent; public abstract class ClientCommonNetworkHandlerMixin implements ClientCommonPacketListener { - @Inject(at = @At("HEAD"), - method = "sendPacket(Lnet/minecraft/network/packet/Packet;)V", - cancellable = true) - private void onSendPacket(Packet packet, CallbackInfo ci) + @Redirect(method = "sendPacket(Lnet/minecraft/network/packet/Packet;)V", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/packet/Packet;)V")) + private void onSendPacket(ClientConnection connection, Packet packet) { PacketOutputEvent event = new PacketOutputEvent(packet); EventManager.fire(event); - if(event.isCancelled()) - ci.cancel(); + if(!event.isCancelled()) + connection.send(event.getPacket()); } } From ab11bc49e1e192cb7da8307e748720010c0b2117 Mon Sep 17 00:00:00 2001 From: ThisTestUser Date: Sat, 29 Jun 2024 15:35:47 -0400 Subject: [PATCH 062/109] Apply spotless --- .../net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java b/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java index d9a05dd0..bca41969 100644 --- a/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java +++ b/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java @@ -24,7 +24,7 @@ public abstract class ClientCommonNetworkHandlerMixin { @Redirect(method = "sendPacket(Lnet/minecraft/network/packet/Packet;)V", at = @At(value = "INVOKE", - target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/packet/Packet;)V")) + target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/packet/Packet;)V")) private void onSendPacket(ClientConnection connection, Packet packet) { PacketOutputEvent event = new PacketOutputEvent(packet); From 88d8cc0dd948114c295ac71e069e2e90e88526f8 Mon Sep 17 00:00:00 2001 From: ThisTestUser Date: Mon, 8 Jul 2024 16:33:03 -0400 Subject: [PATCH 063/109] Use WrapOperation --- .../mixin/ClientCommonNetworkHandlerMixin.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java b/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java index bca41969..80bba53c 100644 --- a/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java +++ b/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java @@ -9,7 +9,9 @@ package net.wurstclient.mixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.network.ClientCommonNetworkHandler; import net.minecraft.network.ClientConnection; @@ -22,15 +24,17 @@ import net.wurstclient.events.PacketOutputListener.PacketOutputEvent; public abstract class ClientCommonNetworkHandlerMixin implements ClientCommonPacketListener { - @Redirect(method = "sendPacket(Lnet/minecraft/network/packet/Packet;)V", + @WrapOperation( + method = "sendPacket(Lnet/minecraft/network/packet/Packet;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/packet/Packet;)V")) - private void onSendPacket(ClientConnection connection, Packet packet) + private void wrapSendPacket(ClientConnection connection, Packet packet, + Operation original) { PacketOutputEvent event = new PacketOutputEvent(packet); EventManager.fire(event); if(!event.isCancelled()) - connection.send(event.getPacket()); + original.call(connection, event.getPacket()); } } From 5f9bfe86237ae58a0f4d3b6f64f37d1bc5da5937 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 9 Jul 2024 09:01:20 +0200 Subject: [PATCH 064/109] Slight refactor to put the at parameter first --- .../wurstclient/mixin/ClientCommonNetworkHandlerMixin.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java b/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java index 80bba53c..41828989 100644 --- a/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java +++ b/src/main/java/net/wurstclient/mixin/ClientCommonNetworkHandlerMixin.java @@ -24,10 +24,9 @@ import net.wurstclient.events.PacketOutputListener.PacketOutputEvent; public abstract class ClientCommonNetworkHandlerMixin implements ClientCommonPacketListener { - @WrapOperation( - method = "sendPacket(Lnet/minecraft/network/packet/Packet;)V", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/packet/Packet;)V")) + @WrapOperation(at = @At(value = "INVOKE", + target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/packet/Packet;)V"), + method = "sendPacket(Lnet/minecraft/network/packet/Packet;)V") private void wrapSendPacket(ClientConnection connection, Packet packet, Operation original) { From f8a096c0fbd9055fec007a2cf76c00d30eb9ab5a Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 11 Jul 2024 22:27:21 +0200 Subject: [PATCH 065/109] Stop using Mojang's translation system entirely Fixes JustAlittleWolf/ModDetectionPreventer#6 Sorry for breaking all open translation PRs with this commit, but it's necessary for security reasons. Anything in the lang folder can potentially be read by servers, so the files had to be moved. --- .../java/net/wurstclient/WurstClient.java | 49 +---- .../java/net/wurstclient/WurstTranslator.java | 183 ++++++++++++++++++ .../hacks/autolibrarian/BookOffer.java | 16 +- .../mixin/KeybindTextContentMixin.java | 56 ------ .../mixin/LanguageManagerMixin.java | 20 +- .../mixin/TranslatableTextContentMixin.java | 68 ------- .../mixinterface/ILanguageManager.java | 22 --- .../options/ZoomManagerScreen.java | 18 +- .../wurstclient/other_features/ZoomOtf.java | 49 ++++- .../wurst/{lang => translations}/cs_cz.json | 0 .../wurst/{lang => translations}/de_de.json | 0 .../wurst/{lang => translations}/en_us.json | 0 .../wurst/{lang => translations}/fr_fr.json | 0 .../wurst/{lang => translations}/it_it.json | 0 .../wurst/{lang => translations}/ja_jp.json | 0 .../wurst/{lang => translations}/ko_kr.json | 0 .../wurst/{lang => translations}/pl_pl.json | 0 .../wurst/{lang => translations}/ro_ro.json | 0 .../wurst/{lang => translations}/ru_ru.json | 0 .../wurst/{lang => translations}/uk_ua.json | 0 .../wurst/{lang => translations}/zh_cn.json | 0 .../wurst/{lang => translations}/zh_hk.json | 0 .../wurst/{lang => translations}/zh_tw.json | 0 src/main/resources/wurst.mixins.json | 2 - 24 files changed, 255 insertions(+), 228 deletions(-) create mode 100644 src/main/java/net/wurstclient/WurstTranslator.java delete mode 100644 src/main/java/net/wurstclient/mixin/KeybindTextContentMixin.java delete mode 100644 src/main/java/net/wurstclient/mixin/TranslatableTextContentMixin.java delete mode 100644 src/main/java/net/wurstclient/mixinterface/ILanguageManager.java rename src/main/resources/assets/wurst/{lang => translations}/cs_cz.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/de_de.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/en_us.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/fr_fr.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/it_it.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/ja_jp.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/ko_kr.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/pl_pl.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/ro_ro.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/ru_ru.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/uk_ua.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/zh_cn.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/zh_hk.json (100%) rename src/main/resources/assets/wurst/{lang => translations}/zh_tw.json (100%) diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 5ef2771a..008520c1 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -11,17 +11,10 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; -import java.util.IllegalFormatException; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.lwjgl.glfw.GLFW; - -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.resource.language.I18n; -import net.minecraft.client.util.InputUtil; import net.wurstclient.altmanager.AltManager; import net.wurstclient.altmanager.Encryption; import net.wurstclient.analytics.WurstAnalytics; @@ -41,7 +34,6 @@ import net.wurstclient.hack.HackList; import net.wurstclient.hud.IngameHUD; import net.wurstclient.keybinds.KeybindList; import net.wurstclient.keybinds.KeybindProcessor; -import net.wurstclient.mixinterface.ILanguageManager; import net.wurstclient.mixinterface.IMinecraftClient; import net.wurstclient.navigator.Navigator; import net.wurstclient.other_feature.OtfList; @@ -76,6 +68,7 @@ public enum WurstClient private IngameHUD hud; private RotationFaker rotationFaker; private FriendsList friends; + private WurstTranslator translator; private boolean enabled = true; private static boolean guiInitialized; @@ -83,8 +76,6 @@ public enum WurstClient private ProblematicResourcePackDetector problematicPackDetector; private Path wurstFolder; - private KeyBinding zoomKey; - public void initialize() { System.out.println("Starting Wurst Client..."); @@ -126,6 +117,8 @@ public enum WurstClient friends = new FriendsList(friendsFile); friends.load(); + translator = new WurstTranslator(); + cmdProcessor = new CmdProcessor(cmds); eventManager.add(ChatOutputListener.class, cmdProcessor); @@ -150,10 +143,6 @@ public enum WurstClient Path encFolder = Encryption.chooseEncryptionFolder(); altManager = new AltManager(altsFile, encFolder); - zoomKey = new KeyBinding("key.wurst.zoom", InputUtil.Type.KEYSYM, - GLFW.GLFW_KEY_V, KeyBinding.MISC_CATEGORY); - KeyBindingHelper.registerKeyBinding(zoomKey); - analytics.trackPageView("/mc" + MC_VERSION + "/v" + VERSION, "Wurst " + VERSION + " MC" + MC_VERSION); } @@ -178,27 +167,7 @@ public enum WurstClient public String translate(String key, Object... args) { - if(otfs.translationsOtf.getForceEnglish().isChecked()) - { - String string = ILanguageManager.getEnglish().get(key); - - try - { - return String.format(string, args); - - }catch(IllegalFormatException e) - { - return key; - } - } - - // This extra check is necessary because I18n.translate() doesn't - // always return the key when the translation is missing. If the key - // contains a '%', it will return "Format Error: key" instead. - if(!I18n.hasTranslation(key)) - return key; - - return I18n.translate(key, args); + return translator.translate(key, args); } public WurstAnalytics getAnalytics() @@ -314,6 +283,11 @@ public enum WurstClient return friends; } + public WurstTranslator getTranslator() + { + return translator; + } + public boolean isEnabled() { return enabled; @@ -345,11 +319,6 @@ public enum WurstClient return wurstFolder; } - public KeyBinding getZoomKey() - { - return zoomKey; - } - public AltManager getAltManager() { return altManager; diff --git a/src/main/java/net/wurstclient/WurstTranslator.java b/src/main/java/net/wurstclient/WurstTranslator.java new file mode 100644 index 00000000..380125cc --- /dev/null +++ b/src/main/java/net/wurstclient/WurstTranslator.java @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2014-2024 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; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.IllegalFormatException; +import java.util.List; +import java.util.function.BiConsumer; + +import com.google.common.collect.Lists; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.resource.language.TranslationStorage; +import net.minecraft.resource.Resource; +import net.minecraft.resource.ResourceManager; +import net.minecraft.resource.SynchronousResourceReloader; +import net.minecraft.util.Identifier; +import net.minecraft.util.Language; + +public class WurstTranslator implements SynchronousResourceReloader +{ + private final WurstClient wurst = WurstClient.INSTANCE; + private TranslationStorage mcEnglish; + + private final HashMap englishOnlyStrings = new HashMap<>(); + private final HashMap currentLangStrings = new HashMap<>(); + + @Override + public void reload(ResourceManager manager) + { + mcEnglish = TranslationStorage.load(manager, + Lists.newArrayList("en_us"), false); + + currentLangStrings.clear(); + loadTranslations(manager, getCurrentLangCodes(), + currentLangStrings::put); + + englishOnlyStrings.clear(); + loadTranslations(manager, List.of("en_us"), englishOnlyStrings::put); + } + + /** + * Translates the given key with the given args into the current language, + * or into English if the "Force English" setting is enabled. Both Wurst and + * vanilla translations are supported. + */ + public String translate(String key, Object... args) + { + // Forced English + if(isForcedEnglish()) + return translateEnglish(key, args); + + // Wurst translation + String string = currentLangStrings.get(key); + if(string != null) + try + { + return String.format(string, args); + + }catch(IllegalFormatException e) + { + return key; + } + + // Vanilla translation + return translateMc(key, args); + } + + /** + * Translates the given key with the given args into English, regardless of + * the current language. Both Wurst and vanilla translations are supported. + */ + public String translateEnglish(String key, Object... args) + { + String string = englishOnlyStrings.get(key); + if(string == null) + string = mcEnglish.get(key); + + try + { + return String.format(string, args); + + }catch(IllegalFormatException e) + { + return key; + } + } + + /** + * Translates the given key with the given args into the current language, + * or into English if the "Force English" setting is enabled, using only + * Minecraft's own translations. + * + * @apiNote This method differs from + * {@link I18n#translate(String, Object...)} in that it does not + * return "Format error" if the key contains a percent sign. + */ + public String translateMc(String key, Object... args) + { + if(I18n.hasTranslation(key)) + return I18n.translate(key, args); + + return key; + } + + /** + * Translates the given key with the given args into English, regardless of + * the current language, using only Minecraft's own translations. + * + * @apiNote This method differs from + * {@link I18n#translate(String, Object...)} in that it does not + * return "Format error" if the key contains a percent sign. + */ + public String translateMcEnglish(String key, Object... args) + { + try + { + return String.format(mcEnglish.get(key), args); + + }catch(IllegalFormatException e) + { + return key; + } + } + + public boolean isForcedEnglish() + { + return wurst.getOtfs().translationsOtf.getForceEnglish().isChecked(); + } + + /** + * Returns a translation storage for Minecraft's English strings, regardless + * of the current language. Does not include any of Wurst's translations. + */ + public TranslationStorage getMcEnglish() + { + return mcEnglish; + } + + private ArrayList getCurrentLangCodes() + { + String mainLangCode = + MinecraftClient.getInstance().getLanguageManager().getLanguage(); + + ArrayList langCodes = new ArrayList<>(); + langCodes.add("en_us"); + if(!"en_us".equals(mainLangCode)) + langCodes.add(mainLangCode); + + return langCodes; + } + + private void loadTranslations(ResourceManager manager, + Iterable langCodes, BiConsumer entryConsumer) + { + for(String langCode : langCodes) + { + String langFilePath = "translations/" + langCode + ".json"; + Identifier langId = Identifier.of("wurst", langFilePath); + + for(Resource resource : manager.getAllResources(langId)) + try(InputStream stream = resource.getInputStream()) + { + Language.load(stream, entryConsumer); + + }catch(IOException e) + { + System.out.println("Failed to load translations for " + + langCode + " from pack " + resource.getPackId()); + e.printStackTrace(); + } + } + } +} diff --git a/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java b/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java index e0b62145..70596dce 100644 --- a/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java +++ b/src/main/java/net/wurstclient/hacks/autolibrarian/BookOffer.java @@ -10,7 +10,6 @@ package net.wurstclient.hacks.autolibrarian; import java.util.Objects; import java.util.Optional; -import net.minecraft.client.resource.language.TranslationStorage; import net.minecraft.enchantment.Enchantment; import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.Registry; @@ -21,7 +20,7 @@ import net.minecraft.text.Text; import net.minecraft.text.TranslatableTextContent; import net.minecraft.util.Identifier; import net.wurstclient.WurstClient; -import net.wurstclient.mixinterface.ILanguageManager; +import net.wurstclient.WurstTranslator; public record BookOffer(String id, int level, int price) implements Comparable @@ -53,28 +52,27 @@ public record BookOffer(String id, int level, int price) { Text description = getEnchantment().description(); if(description.getContent() instanceof TranslatableTextContent tr) - { - TranslationStorage english = ILanguageManager.getEnglish(); - return english.get(tr.getKey()); - } + return WurstClient.INSTANCE.getTranslator() + .translateMcEnglish(tr.getKey()); return description.getString(); } public String getEnchantmentNameWithLevel() { - TranslationStorage english = ILanguageManager.getEnglish(); + WurstTranslator translator = WurstClient.INSTANCE.getTranslator(); Enchantment enchantment = getEnchantment(); String name; if(enchantment.description() .getContent() instanceof TranslatableTextContent tr) - name = english.get(tr.getKey()); + name = translator.translateMcEnglish(tr.getKey()); else name = enchantment.description().getString(); if(enchantment.getMaxLevel() > 1) - name += " " + english.get("enchantment.level." + level); + name += " " + + translator.translateMcEnglish("enchantment.level." + level); return name; } diff --git a/src/main/java/net/wurstclient/mixin/KeybindTextContentMixin.java b/src/main/java/net/wurstclient/mixin/KeybindTextContentMixin.java deleted file mode 100644 index 909e4618..00000000 --- a/src/main/java/net/wurstclient/mixin/KeybindTextContentMixin.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2014-2024 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.mixin; - -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; - -import net.minecraft.text.KeybindTextContent; -import net.minecraft.text.Text; -import net.minecraft.text.TextContent; - -@Mixin(KeybindTextContent.class) -public abstract class KeybindTextContentMixin implements TextContent -{ - @Shadow - @Final - private String key; - - /** - * Ensures that any chat messages, written books, signs, etc. cannot resolve - * Wurst-related keybinds. - * - *

- * Fixes at least one security vulnerability affecting Minecraft 1.20 and - * later versions, where the server can detect the presence of Wurst by - * abusing Minecraft's sign editing feature. When a player edits a sign, any - * translated text and keybind text components on that sign are resolved by - * the client and sent back to the server as plain text. This allows the - * server to detect the presence of non-vanilla keybinds, such as Wurst's - * zoom keybind. - * - *

- * It is likely that similar vulnerabilities exist or will exist in other - * parts of the game, such as chat messages and written books. Mojang has a - * long history of failing to properly secure their text component system - * (see BookHack, OP-Sign, BookDupe). Therefore it's best to cut off this - * entire attack vector at the source. - */ - @Inject(at = @At("RETURN"), - method = "getTranslated()Lnet/minecraft/text/Text;", - cancellable = true) - private void onGetTranslated(CallbackInfoReturnable cir) - { - if(key != null && key.contains("wurst")) - cir.setReturnValue(Text.literal(key)); - } -} diff --git a/src/main/java/net/wurstclient/mixin/LanguageManagerMixin.java b/src/main/java/net/wurstclient/mixin/LanguageManagerMixin.java index 42f486fc..ab9ca6c9 100644 --- a/src/main/java/net/wurstclient/mixin/LanguageManagerMixin.java +++ b/src/main/java/net/wurstclient/mixin/LanguageManagerMixin.java @@ -12,31 +12,21 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.google.common.collect.Lists; - import net.minecraft.client.resource.language.LanguageManager; -import net.minecraft.client.resource.language.TranslationStorage; import net.minecraft.resource.ResourceManager; import net.minecraft.resource.SynchronousResourceReloader; -import net.wurstclient.mixinterface.ILanguageManager; +import net.wurstclient.WurstClient; @Mixin(LanguageManager.class) public abstract class LanguageManagerMixin - implements SynchronousResourceReloader, ILanguageManager + implements SynchronousResourceReloader { - private TranslationStorage wurstEnglish; - @Inject(at = @At("HEAD"), method = "reload(Lnet/minecraft/resource/ResourceManager;)V") private void onReload(ResourceManager manager, CallbackInfo ci) { - wurstEnglish = TranslationStorage.load(manager, - Lists.newArrayList("en_us"), false); - } - - @Override - public TranslationStorage wurst_getEnglish() - { - return wurstEnglish; + // Using a mixin for this because WurstClient.initialize() runs too + // early to call ResourceManager.registerReloader() + WurstClient.INSTANCE.getTranslator().reload(manager); } } diff --git a/src/main/java/net/wurstclient/mixin/TranslatableTextContentMixin.java b/src/main/java/net/wurstclient/mixin/TranslatableTextContentMixin.java deleted file mode 100644 index e144cb19..00000000 --- a/src/main/java/net/wurstclient/mixin/TranslatableTextContentMixin.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2014-2024 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.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; - -import net.minecraft.text.TextContent; -import net.minecraft.text.TranslatableTextContent; -import net.minecraft.util.Language; - -@Mixin(TranslatableTextContent.class) -public abstract class TranslatableTextContentMixin implements TextContent -{ - /** - * Ensures that any chat messages, written books, signs, etc. cannot resolve - * Wurst-related translation keys. - * - *

- * Fixes at least one security vulnerability affecting Minecraft 1.20 and - * later versions, where the server can detect the presence of Wurst by - * abusing Minecraft's sign editing feature. When a player edits a sign, any - * translated text and keybind text components on that sign are resolved by - * the client and sent back to the server as plain text. This allows the - * server to detect the presence of non-vanilla translation keys. - * - *

- * It is likely that similar vulnerabilities exist or will exist in other - * parts of the game, such as chat messages and written books. Mojang has a - * long history of failing to properly secure their text component system - * (see BookHack, OP-Sign, BookDupe). Therefore it's best to cut off this - * entire attack vector at the source. - */ - @WrapOperation(at = @At(value = "INVOKE", - target = "Lnet/minecraft/util/Language;get(Ljava/lang/String;)Ljava/lang/String;", - ordinal = 0), method = "updateTranslations()V") - private String translate(Language instance, String key, - Operation original) - { - if(key != null && key.contains("wurst")) - return key; - - return original.call(instance, key); - } - - /** - * Same as above, but for translatable text components with a fallback. - */ - @WrapOperation(at = @At(value = "INVOKE", - target = "Lnet/minecraft/util/Language;get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", - ordinal = 0), method = "updateTranslations()V") - private String translateWithFallback(Language instance, String key, - String fallback, Operation original) - { - if(key != null && key.contains("wurst")) - return fallback; - - return original.call(instance, key, fallback); - } -} diff --git a/src/main/java/net/wurstclient/mixinterface/ILanguageManager.java b/src/main/java/net/wurstclient/mixinterface/ILanguageManager.java deleted file mode 100644 index 3a0e6491..00000000 --- a/src/main/java/net/wurstclient/mixinterface/ILanguageManager.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2014-2024 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.mixinterface; - -import net.minecraft.client.resource.language.TranslationStorage; -import net.wurstclient.WurstClient; - -public interface ILanguageManager -{ - public TranslationStorage wurst_getEnglish(); - - public static TranslationStorage getEnglish() - { - return ((ILanguageManager)WurstClient.MC.getLanguageManager()) - .wurst_getEnglish(); - } -} diff --git a/src/main/java/net/wurstclient/options/ZoomManagerScreen.java b/src/main/java/net/wurstclient/options/ZoomManagerScreen.java index e1687308..4701ded1 100644 --- a/src/main/java/net/wurstclient/options/ZoomManagerScreen.java +++ b/src/main/java/net/wurstclient/options/ZoomManagerScreen.java @@ -11,8 +11,6 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.util.InputUtil; import net.minecraft.text.Text; import net.wurstclient.WurstClient; import net.wurstclient.other_features.ZoomOtf; @@ -22,7 +20,6 @@ import net.wurstclient.settings.SliderSetting; public class ZoomManagerScreen extends Screen implements PressAKeyCallback { private Screen prevScreen; - private ButtonWidget keyButton; private ButtonWidget scrollButton; public ZoomManagerScreen(Screen par1GuiScreen) @@ -38,15 +35,16 @@ public class ZoomManagerScreen extends Screen implements PressAKeyCallback ZoomOtf zoom = wurst.getOtfs().zoomOtf; SliderSetting level = zoom.getLevelSetting(); CheckboxSetting scroll = zoom.getScrollSetting(); - Text zoomKeyName = wurst.getZoomKey().getBoundKeyLocalizedText(); addDrawableChild(ButtonWidget .builder(Text.literal("Back"), b -> client.setScreen(prevScreen)) .dimensions(width / 2 - 100, height / 4 + 144 - 16, 200, 20) .build()); - addDrawableChild(keyButton = ButtonWidget - .builder(Text.literal("Zoom Key: ").append(zoomKeyName), + addDrawableChild(ButtonWidget + .builder( + Text.literal("Zoom Key: ") + .append(zoom.getTranslatedKeybindName()), b -> client.setScreen(new PressAKeyScreen(this))) .dimensions(width / 2 - 79, height / 4 + 24 - 16, 158, 20).build()); @@ -115,10 +113,8 @@ public class ZoomManagerScreen extends Screen implements PressAKeyCallback @Override public void setKey(String key) { - WurstClient.INSTANCE.getZoomKey() - .setBoundKey(InputUtil.fromTranslationKey(key)); - client.options.write(); - KeyBinding.updateKeysByCode(); - keyButton.setMessage(Text.literal("Zoom Key: " + key)); + WurstClient.INSTANCE.getOtfs().zoomOtf.setBoundKey(key); + // Button text updates automatically because going back to this screen + // calls init(). Might be different in older MC versions. } } diff --git a/src/main/java/net/wurstclient/other_features/ZoomOtf.java b/src/main/java/net/wurstclient/other_features/ZoomOtf.java index 1af1905a..7e6571e2 100644 --- a/src/main/java/net/wurstclient/other_features/ZoomOtf.java +++ b/src/main/java/net/wurstclient/other_features/ZoomOtf.java @@ -8,6 +8,8 @@ package net.wurstclient.other_features; import net.minecraft.client.option.SimpleOption; +import net.minecraft.client.util.InputUtil; +import net.minecraft.text.Text; import net.wurstclient.DontBlock; import net.wurstclient.SearchTags; import net.wurstclient.events.MouseScrollListener; @@ -15,6 +17,7 @@ import net.wurstclient.other_feature.OtherFeature; import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; +import net.wurstclient.settings.TextFieldSetting; import net.wurstclient.util.MathUtils; @SearchTags({"telescope", "optifine"}) @@ -25,10 +28,16 @@ public final class ZoomOtf extends OtherFeature implements MouseScrollListener 50, 0.1, ValueDisplay.DECIMAL.withSuffix("x")); private final CheckboxSetting scroll = new CheckboxSetting( - "Use mouse wheel", - "If enabled, you can use the mouse wheel while zooming to zoom in even further.", + "Use mouse wheel", "If enabled, you can use the mouse wheel while" + + " zooming to zoom in even further.", true); + private final TextFieldSetting keybind = new TextFieldSetting("Keybind", + "Determines the zoom keybind.\n\n" + + "Instead of editing this value manually, you should go to Wurst" + + " Options -> Zoom and set it there.", + "key.keyboard.v", this::isValidKeybind); + private Double currentLevel; private Double defaultMouseSensitivity; @@ -39,6 +48,7 @@ public final class ZoomOtf extends OtherFeature implements MouseScrollListener + "Go to Wurst Options -> Zoom to change this keybind."); addSetting(level); addSetting(scroll); + addSetting(keybind); EVENTS.add(MouseScrollListener.class, this); } @@ -50,7 +60,7 @@ public final class ZoomOtf extends OtherFeature implements MouseScrollListener if(currentLevel == null) currentLevel = level.getValue(); - if(!WURST.getZoomKey().isPressed()) + if(!isZoomKeyPressed()) { currentLevel = level.getValue(); @@ -78,7 +88,7 @@ public final class ZoomOtf extends OtherFeature implements MouseScrollListener @Override public void onMouseScroll(double amount) { - if(!WURST.getZoomKey().isPressed() || !scroll.isChecked()) + if(!isZoomKeyPressed() || !scroll.isChecked()) return; if(currentLevel == null) @@ -95,7 +105,36 @@ public final class ZoomOtf extends OtherFeature implements MouseScrollListener public boolean shouldPreventHotbarScrolling() { - return WURST.getZoomKey().isPressed() && scroll.isChecked(); + return isZoomKeyPressed() && scroll.isChecked(); + } + + public Text getTranslatedKeybindName() + { + return InputUtil.fromTranslationKey(keybind.getValue()) + .getLocalizedText(); + } + + public void setBoundKey(String translationKey) + { + keybind.setValue(translationKey); + } + + private boolean isZoomKeyPressed() + { + return InputUtil.isKeyPressed(MC.getWindow().getHandle(), + InputUtil.fromTranslationKey(keybind.getValue()).getCode()); + } + + private boolean isValidKeybind(String keybind) + { + try + { + return InputUtil.fromTranslationKey(keybind) != null; + + }catch(IllegalArgumentException e) + { + return false; + } } public SliderSetting getLevelSetting() diff --git a/src/main/resources/assets/wurst/lang/cs_cz.json b/src/main/resources/assets/wurst/translations/cs_cz.json similarity index 100% rename from src/main/resources/assets/wurst/lang/cs_cz.json rename to src/main/resources/assets/wurst/translations/cs_cz.json diff --git a/src/main/resources/assets/wurst/lang/de_de.json b/src/main/resources/assets/wurst/translations/de_de.json similarity index 100% rename from src/main/resources/assets/wurst/lang/de_de.json rename to src/main/resources/assets/wurst/translations/de_de.json diff --git a/src/main/resources/assets/wurst/lang/en_us.json b/src/main/resources/assets/wurst/translations/en_us.json similarity index 100% rename from src/main/resources/assets/wurst/lang/en_us.json rename to src/main/resources/assets/wurst/translations/en_us.json diff --git a/src/main/resources/assets/wurst/lang/fr_fr.json b/src/main/resources/assets/wurst/translations/fr_fr.json similarity index 100% rename from src/main/resources/assets/wurst/lang/fr_fr.json rename to src/main/resources/assets/wurst/translations/fr_fr.json diff --git a/src/main/resources/assets/wurst/lang/it_it.json b/src/main/resources/assets/wurst/translations/it_it.json similarity index 100% rename from src/main/resources/assets/wurst/lang/it_it.json rename to src/main/resources/assets/wurst/translations/it_it.json diff --git a/src/main/resources/assets/wurst/lang/ja_jp.json b/src/main/resources/assets/wurst/translations/ja_jp.json similarity index 100% rename from src/main/resources/assets/wurst/lang/ja_jp.json rename to src/main/resources/assets/wurst/translations/ja_jp.json diff --git a/src/main/resources/assets/wurst/lang/ko_kr.json b/src/main/resources/assets/wurst/translations/ko_kr.json similarity index 100% rename from src/main/resources/assets/wurst/lang/ko_kr.json rename to src/main/resources/assets/wurst/translations/ko_kr.json diff --git a/src/main/resources/assets/wurst/lang/pl_pl.json b/src/main/resources/assets/wurst/translations/pl_pl.json similarity index 100% rename from src/main/resources/assets/wurst/lang/pl_pl.json rename to src/main/resources/assets/wurst/translations/pl_pl.json diff --git a/src/main/resources/assets/wurst/lang/ro_ro.json b/src/main/resources/assets/wurst/translations/ro_ro.json similarity index 100% rename from src/main/resources/assets/wurst/lang/ro_ro.json rename to src/main/resources/assets/wurst/translations/ro_ro.json diff --git a/src/main/resources/assets/wurst/lang/ru_ru.json b/src/main/resources/assets/wurst/translations/ru_ru.json similarity index 100% rename from src/main/resources/assets/wurst/lang/ru_ru.json rename to src/main/resources/assets/wurst/translations/ru_ru.json diff --git a/src/main/resources/assets/wurst/lang/uk_ua.json b/src/main/resources/assets/wurst/translations/uk_ua.json similarity index 100% rename from src/main/resources/assets/wurst/lang/uk_ua.json rename to src/main/resources/assets/wurst/translations/uk_ua.json diff --git a/src/main/resources/assets/wurst/lang/zh_cn.json b/src/main/resources/assets/wurst/translations/zh_cn.json similarity index 100% rename from src/main/resources/assets/wurst/lang/zh_cn.json rename to src/main/resources/assets/wurst/translations/zh_cn.json diff --git a/src/main/resources/assets/wurst/lang/zh_hk.json b/src/main/resources/assets/wurst/translations/zh_hk.json similarity index 100% rename from src/main/resources/assets/wurst/lang/zh_hk.json rename to src/main/resources/assets/wurst/translations/zh_hk.json diff --git a/src/main/resources/assets/wurst/lang/zh_tw.json b/src/main/resources/assets/wurst/translations/zh_tw.json similarity index 100% rename from src/main/resources/assets/wurst/lang/zh_tw.json rename to src/main/resources/assets/wurst/translations/zh_tw.json diff --git a/src/main/resources/wurst.mixins.json b/src/main/resources/wurst.mixins.json index 84d63987..635bbe9e 100644 --- a/src/main/resources/wurst.mixins.json +++ b/src/main/resources/wurst.mixins.json @@ -40,7 +40,6 @@ "IngameHudMixin", "InGameOverlayRendererMixin", "KeyBindingMixin", - "KeybindTextContentMixin", "KeyboardMixin", "LanguageManagerMixin", "LivingEntityRendererMixin", @@ -63,7 +62,6 @@ "TelemetryManagerMixin", "TextVisitFactoryMixin", "TitleScreenMixin", - "TranslatableTextContentMixin", "WorldMixin", "WorldRendererMixin" ], From 0d50ef6e41db6640862795511147ede4a8d217e3 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 12 Jul 2024 11:47:31 +0200 Subject: [PATCH 066/109] Fix combat hacks always pausing on containers Fixes https://wurstforum.net/d/644 Fixes https://wurstforum.net/d/637 Fixes https://wurstforum.net/d/631 Fixes https://wurstforum.net/d/595 --- .../java/net/wurstclient/mixin/MinecraftClientMixin.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/mixin/MinecraftClientMixin.java b/src/main/java/net/wurstclient/mixin/MinecraftClientMixin.java index f062a860..55989b9f 100644 --- a/src/main/java/net/wurstclient/mixin/MinecraftClientMixin.java +++ b/src/main/java/net/wurstclient/mixin/MinecraftClientMixin.java @@ -65,7 +65,14 @@ public abstract class MinecraftClientMixin super(name); } - @Inject(at = @At("HEAD"), method = "handleInputEvents()V") + /** + * Runs just before {@link MinecraftClient#handleInputEvents()}, bypassing + * the overlay == null && currentScreen == null check in + * {@link MinecraftClient#tick()}. + */ + @Inject(at = @At(value = "FIELD", + target = "Lnet/minecraft/client/MinecraftClient;overlay:Lnet/minecraft/client/gui/screen/Overlay;", + ordinal = 0), method = "tick()V") private void onHandleInputEvents(CallbackInfo ci) { EventManager.fire(HandleInputEvent.INSTANCE); From b9f612b856fb53a618e51aeadda048072e803256 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 12 Jul 2024 11:49:11 +0200 Subject: [PATCH 067/109] Change version to 7.44 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index eae5d8b3..62315ffc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version=0.15.11 fabric_version=0.100.4+1.21 # Mod Properties -mod_version = v7.44pre2-MC1.21 +mod_version = v7.44-MC1.21 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 008520c1..38a413b4 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -50,7 +50,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.44pre2"; + public static final String VERSION = "7.44"; public static final String MC_VERSION = "1.21"; private WurstAnalytics analytics; From 1ab419c8feebeb9a2c5f1d04d013ef66479780cc Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 12 Jul 2024 12:47:36 +0200 Subject: [PATCH 068/109] Update Fabric stuff --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 62315ffc..77ccfba8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,11 +6,11 @@ org.gradle.parallel=true # check these at https://fabricmc.net/develop/ and # https://modrinth.com/mod/fabric-api/versions minecraft_version=1.21 -yarn_mappings=1.21+build.4 +yarn_mappings=1.21+build.9 loader_version=0.15.11 # Fabric API -fabric_version=0.100.4+1.21 +fabric_version=0.100.6+1.21 # Mod Properties mod_version = v7.44-MC1.21 From 78ec9facf257d166736461cebc9c95749cff9bb6 Mon Sep 17 00:00:00 2001 From: ZANX3Y <74610540+ZANX3Y@users.noreply.github.com> Date: Sun, 14 Jul 2024 12:54:38 +0200 Subject: [PATCH 069/109] Fix TriggerBotHack NPE --- src/main/java/net/wurstclient/hacks/TriggerBotHack.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/net/wurstclient/hacks/TriggerBotHack.java b/src/main/java/net/wurstclient/hacks/TriggerBotHack.java index 2c3b66e9..627459e8 100644 --- a/src/main/java/net/wurstclient/hacks/TriggerBotHack.java +++ b/src/main/java/net/wurstclient/hacks/TriggerBotHack.java @@ -136,6 +136,9 @@ public final class TriggerBotHack extends Hack @Override public void onHandleInput() { + if(MC.player == null) + return; + speed.updateTimer(); if(!speed.isTimeToAttack()) return; From dfeedda3c6e1092f922769c5a049577448eff132 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 14 Jul 2024 15:24:42 +0200 Subject: [PATCH 070/109] Move player null check to HandleInputEvent mixin After 0d50ef6e41db6640862795511147ede4a8d217e3, it was possible for this event to be called outside of gameplay, which the hacks using it are not designed for. This commit extends the fix from #1037 to also cover Killaura and KillauraLegit, which could still sometimes crash if they were attacking while leaving a world or server. --- src/main/java/net/wurstclient/hacks/TriggerBotHack.java | 3 --- src/main/java/net/wurstclient/mixin/MinecraftClientMixin.java | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/TriggerBotHack.java b/src/main/java/net/wurstclient/hacks/TriggerBotHack.java index 627459e8..2c3b66e9 100644 --- a/src/main/java/net/wurstclient/hacks/TriggerBotHack.java +++ b/src/main/java/net/wurstclient/hacks/TriggerBotHack.java @@ -136,9 +136,6 @@ public final class TriggerBotHack extends Hack @Override public void onHandleInput() { - if(MC.player == null) - return; - speed.updateTimer(); if(!speed.isTimeToAttack()) return; diff --git a/src/main/java/net/wurstclient/mixin/MinecraftClientMixin.java b/src/main/java/net/wurstclient/mixin/MinecraftClientMixin.java index 55989b9f..3afc973f 100644 --- a/src/main/java/net/wurstclient/mixin/MinecraftClientMixin.java +++ b/src/main/java/net/wurstclient/mixin/MinecraftClientMixin.java @@ -75,6 +75,10 @@ public abstract class MinecraftClientMixin ordinal = 0), method = "tick()V") private void onHandleInputEvents(CallbackInfo ci) { + // Make sure this event is not fired outside of gameplay + if(player == null) + return; + EventManager.fire(HandleInputEvent.INSTANCE); } From a90152c3e4130ac05b43adbb3cfd291e6a0c53f6 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 14 Jul 2024 15:25:17 +0200 Subject: [PATCH 071/109] Change version to 7.44.1 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 77ccfba8..80ac417b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version=0.15.11 fabric_version=0.100.6+1.21 # Mod Properties -mod_version = v7.44-MC1.21 +mod_version = v7.44.1-MC1.21 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 38a413b4..3805dbe9 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -50,7 +50,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.44"; + public static final String VERSION = "7.44.1"; public static final String MC_VERSION = "1.21"; private WurstAnalytics analytics; From cd24e858c64f55204f97721281486fff4bd2c34d Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 14 Jul 2024 21:39:33 +0200 Subject: [PATCH 072/109] Refactor AutoBuildHack to use BlockPlacer --- .../net/wurstclient/hacks/AutoBuildHack.java | 91 ++++--------------- 1 file changed, 19 insertions(+), 72 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java index 27c6fbc3..f905bdf0 100644 --- a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java @@ -19,7 +19,6 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.block.BlockState; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; @@ -30,18 +29,13 @@ import net.wurstclient.events.RenderListener; import net.wurstclient.events.RightClickListener; import net.wurstclient.events.UpdateListener; import net.wurstclient.hack.Hack; -import net.wurstclient.mixinterface.IClientPlayerInteractionManager; import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.FileSetting; import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; -import net.wurstclient.util.AutoBuildTemplate; -import net.wurstclient.util.BlockUtils; -import net.wurstclient.util.ChatUtils; -import net.wurstclient.util.DefaultAutoBuildTemplates; -import net.wurstclient.util.RegionPos; -import net.wurstclient.util.RenderUtils; -import net.wurstclient.util.RotationUtils; +import net.wurstclient.settings.SwingHandSetting.SwingHand; +import net.wurstclient.util.*; +import net.wurstclient.util.BlockPlacer.BlockPlacingParams; import net.wurstclient.util.json.JsonException; public final class AutoBuildHack extends Hack @@ -226,46 +220,17 @@ public final class AutoBuildHack extends Hack private boolean tryToPlace(BlockPos pos, Vec3d eyesPos, double rangeSq) { - Vec3d posVec = Vec3d.ofCenter(pos); - double distanceSqPosVec = eyesPos.squaredDistanceTo(posVec); + BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); + if(params == null || params.distanceSq() > rangeSq) + return false; + if(checkLOS.isChecked() && !params.lineOfSight()) + return false; - for(Direction side : Direction.values()) - { - BlockPos neighbor = pos.offset(side); - - // check if neighbor can be right clicked - if(!BlockUtils.canBeClicked(neighbor) - || BlockUtils.getState(neighbor).isReplaceable()) - continue; - - Vec3d dirVec = Vec3d.of(side.getVector()); - Vec3d hitVec = posVec.add(dirVec.multiply(0.5)); - - // check if hitVec is within range - if(eyesPos.squaredDistanceTo(hitVec) > rangeSq) - continue; - - // check if side is visible (facing away from player) - if(distanceSqPosVec > eyesPos.squaredDistanceTo(posVec.add(dirVec))) - continue; - - // check line of sight - if(checkLOS.isChecked() - && !BlockUtils.hasLineOfSight(eyesPos, hitVec)) - continue; - - // face block - RotationUtils.getNeededRotations(hitVec).sendPlayerLookPacket(); - - // place block - IMC.getInteractionManager().rightClickBlock(neighbor, - side.getOpposite(), hitVec); - MC.player.swingHand(Hand.MAIN_HAND); - MC.itemUseCooldown = 4; - return true; - } - - return false; + MC.itemUseCooldown = 4; + RotationUtils.getNeededRotations(params.hitVec()) + .sendPlayerLookPacket(); + InteractionSimulator.rightClickBlock(params.toHitResult()); + return true; } @Override @@ -298,37 +263,19 @@ public final class AutoBuildHack extends Hack private void buildInstantly() { - Vec3d eyesPos = RotationUtils.getEyesPos(); - IClientPlayerInteractionManager im = IMC.getInteractionManager(); - double rangeSq = Math.pow(range.getValue(), 2); + double rangeSq = range.getValueSq(); for(BlockPos pos : remainingBlocks) { if(!BlockUtils.getState(pos).isReplaceable()) continue; - Vec3d posVec = Vec3d.ofCenter(pos); + BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); + if(params == null || params.distanceSq() > rangeSq) + continue; - for(Direction side : Direction.values()) - { - BlockPos neighbor = pos.offset(side); - - // check if neighbor can be right-clicked - if(!BlockUtils.canBeClicked(neighbor)) - continue; - - Vec3d sideVec = Vec3d.of(side.getVector()); - Vec3d hitVec = posVec.add(sideVec.multiply(0.5)); - - // check if hitVec is within range - if(eyesPos.squaredDistanceTo(hitVec) > rangeSq) - continue; - - // place block - im.rightClickBlock(neighbor, side.getOpposite(), hitVec); - - break; - } + InteractionSimulator.rightClickBlock(params.toHitResult(), + SwingHand.OFF); } remainingBlocks.clear(); From e2eb0de78141e8bbb1460c79e3605fe56d1e804b Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 14 Jul 2024 21:47:28 +0200 Subject: [PATCH 073/109] Slightly refactor AutoBuild rendering --- .../java/net/wurstclient/hacks/AutoBuildHack.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java index f905bdf0..94f5ad0c 100644 --- a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java @@ -287,16 +287,16 @@ public final class AutoBuildHack extends Hack if(status != Status.BUILDING) return; - float scale = 1F * 7F / 8F; - double offset = (1D - scale) / 2D; + float scale = 7F / 8F; + double offset = (1.0 - scale) / 2.0; Vec3d eyesPos = RotationUtils.getEyesPos(); - double rangeSq = Math.pow(range.getValue(), 2); + double rangeSq = range.getValueSq(); // GL settings GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_CULL_FACE); - RenderSystem.setShaderColor(0F, 0F, 0F, 0.5F); + RenderSystem.setShaderColor(0, 0, 0, 0.5F); matrixStack.push(); @@ -339,11 +339,11 @@ public final class AutoBuildHack extends Hack private void drawGreenBox(MatrixStack matrixStack) { GL11.glDepthMask(false); - RenderSystem.setShaderColor(0F, 1F, 0F, 0.15F); + RenderSystem.setShaderColor(0, 1, 0, 0.15F); RenderUtils.drawSolidBox(matrixStack); GL11.glDepthMask(true); - RenderSystem.setShaderColor(0F, 0F, 0F, 0.5F); + RenderSystem.setShaderColor(0, 0, 0, 0.5F); RenderUtils.drawOutlinedBox(matrixStack); } From 516836daf538507e25bd28a7529ca06349e3e59d Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 14 Jul 2024 22:17:36 +0200 Subject: [PATCH 074/109] Combine placeNextBlock() and tryToPlace() methods --- .../net/wurstclient/hacks/AutoBuildHack.java | 33 ++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java index 94f5ad0c..5cc8c587 100644 --- a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java @@ -210,27 +210,22 @@ public final class AutoBuildHack extends Hack private void placeNextBlock() { - Vec3d eyesPos = RotationUtils.getEyesPos(); - double rangeSq = Math.pow(range.getValue(), 2); + double rangeSq = range.getValueSq(); for(BlockPos pos : remainingBlocks) - if(tryToPlace(pos, eyesPos, rangeSq)) - break; - } - - private boolean tryToPlace(BlockPos pos, Vec3d eyesPos, double rangeSq) - { - BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); - if(params == null || params.distanceSq() > rangeSq) - return false; - if(checkLOS.isChecked() && !params.lineOfSight()) - return false; - - MC.itemUseCooldown = 4; - RotationUtils.getNeededRotations(params.hitVec()) - .sendPlayerLookPacket(); - InteractionSimulator.rightClickBlock(params.toHitResult()); - return true; + { + BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); + if(params == null || params.distanceSq() > rangeSq) + continue; + if(checkLOS.isChecked() && !params.lineOfSight()) + continue; + + MC.itemUseCooldown = 4; + RotationUtils.getNeededRotations(params.hitVec()) + .sendPlayerLookPacket(); + InteractionSimulator.rightClickBlock(params.toHitResult()); + break; + } } @Override From b5b14ddab435629272d4aba883529e7e16c92c26 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 16 Jul 2024 11:26:53 +0200 Subject: [PATCH 075/109] Further refactor AutoBuildHack --- .../net/wurstclient/hacks/AutoBuildHack.java | 294 ++++++++---------- 1 file changed, 130 insertions(+), 164 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java index 5cc8c587..3a521b3a 100644 --- a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java @@ -9,19 +9,20 @@ package net.wurstclient.hacks; import java.io.IOException; import java.nio.file.Path; -import java.util.Iterator; +import java.util.ArrayList; import java.util.LinkedHashSet; +import java.util.stream.Collectors; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.block.BlockState; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import net.wurstclient.Category; @@ -133,6 +134,31 @@ public final class AutoBuildHack extends Hack status = Status.IDLE; } + @Override + public void onRightClick(RightClickEvent event) + { + if(status != Status.IDLE) + return; + + HitResult hitResult = MC.crosshairTarget; + if(hitResult == null || hitResult.getType() != HitResult.Type.BLOCK + || !(hitResult instanceof BlockHitResult blockHitResult)) + return; + + BlockPos hitResultPos = blockHitResult.getBlockPos(); + if(!BlockUtils.canBeClicked(hitResultPos)) + return; + + BlockPos startPos = hitResultPos.offset(blockHitResult.getSide()); + Direction direction = MC.player.getHorizontalFacing(); + remainingBlocks = template.getPositions(startPos, direction); + + if(instaBuild.isChecked() && template.size() <= 64) + buildInstantly(); + else + status = Status.BUILDING; + } + @Override public void onUpdate() { @@ -156,6 +182,108 @@ public final class AutoBuildHack extends Hack } } + @Override + public void onRender(MatrixStack matrixStack, float partialTicks) + { + if(status != Status.BUILDING) + return; + + // GL settings + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_CULL_FACE); + + matrixStack.push(); + + RegionPos region = RenderUtils.getCameraRegion(); + RenderUtils.applyRegionalRenderOffset(matrixStack, region); + + RenderSystem.setShaderColor(0, 0, 0, 0.5F); + RenderSystem.setShader(GameRenderer::getPositionProgram); + + double boxStart = 1 / 16.0; + double boxEnd = 15 / 16.0; + Box box = new Box(boxStart, boxStart, boxStart, boxEnd, boxEnd, boxEnd) + .offset(region.negate().toBlockPos()); + + ArrayList blocksToDraw = remainingBlocks.stream() + .filter(pos -> BlockUtils.getState(pos).isReplaceable()).limit(1024) + .collect(Collectors.toCollection(ArrayList::new)); + + GL11.glDepthMask(false); + RenderSystem.setShaderColor(0, 1, 0, 0.15F); + + Vec3d eyesPos = RotationUtils.getEyesPos(); + double rangeSq = range.getValueSq(); + blocksToDraw.stream() + .filter(pos -> pos.getSquaredDistance(eyesPos) <= rangeSq) + .map(pos -> box.offset(pos)).forEach( + offsetBox -> RenderUtils.drawSolidBox(offsetBox, matrixStack)); + + GL11.glDepthMask(true); + RenderSystem.setShaderColor(0, 0, 0, 0.5F); + + blocksToDraw.stream().map(pos -> box.offset(pos)).forEach( + offsetBox -> RenderUtils.drawOutlinedBox(offsetBox, matrixStack)); + + matrixStack.pop(); + + // GL resets + GL11.glDisable(GL11.GL_BLEND); + RenderSystem.setShaderColor(1, 1, 1, 1); + } + + private void buildNormally() + { + remainingBlocks + .removeIf(pos -> !BlockUtils.getState(pos).isReplaceable()); + + if(remainingBlocks.isEmpty()) + { + status = Status.IDLE; + return; + } + + if(!fastPlace.isChecked() && MC.itemUseCooldown > 0) + return; + + double rangeSq = range.getValueSq(); + for(BlockPos pos : remainingBlocks) + { + BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); + if(params == null || params.distanceSq() > rangeSq) + continue; + if(checkLOS.isChecked() && !params.lineOfSight()) + continue; + + MC.itemUseCooldown = 4; + RotationUtils.getNeededRotations(params.hitVec()) + .sendPlayerLookPacket(); + InteractionSimulator.rightClickBlock(params.toHitResult()); + break; + } + } + + private void buildInstantly() + { + double rangeSq = range.getValueSq(); + + for(BlockPos pos : remainingBlocks) + { + if(!BlockUtils.getState(pos).isReplaceable()) + continue; + + BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); + if(params == null || params.distanceSq() > rangeSq) + continue; + + InteractionSimulator.rightClickBlock(params.toHitResult(), + SwingHand.OFF); + } + + remainingBlocks.clear(); + } + private void loadSelectedTemplate() { status = Status.LOADING; @@ -180,168 +308,6 @@ public final class AutoBuildHack extends Hack } } - private void buildNormally() - { - updateRemainingBlocks(); - - if(remainingBlocks.isEmpty()) - { - status = Status.IDLE; - return; - } - - if(!fastPlace.isChecked() && MC.itemUseCooldown > 0) - return; - - placeNextBlock(); - } - - private void updateRemainingBlocks() - { - for(Iterator itr = remainingBlocks.iterator(); itr.hasNext();) - { - BlockPos pos = itr.next(); - BlockState state = BlockUtils.getState(pos); - - if(!state.isReplaceable()) - itr.remove(); - } - } - - private void placeNextBlock() - { - double rangeSq = range.getValueSq(); - - for(BlockPos pos : remainingBlocks) - { - BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); - if(params == null || params.distanceSq() > rangeSq) - continue; - if(checkLOS.isChecked() && !params.lineOfSight()) - continue; - - MC.itemUseCooldown = 4; - RotationUtils.getNeededRotations(params.hitVec()) - .sendPlayerLookPacket(); - InteractionSimulator.rightClickBlock(params.toHitResult()); - break; - } - } - - @Override - public void onRightClick(RightClickEvent event) - { - if(status != Status.IDLE) - return; - - HitResult hitResult = MC.crosshairTarget; - if(hitResult == null || hitResult.getPos() == null - || hitResult.getType() != HitResult.Type.BLOCK - || !(hitResult instanceof BlockHitResult)) - return; - - BlockHitResult blockHitResult = (BlockHitResult)hitResult; - - BlockPos hitResultPos = blockHitResult.getBlockPos(); - if(!BlockUtils.canBeClicked(hitResultPos)) - return; - - BlockPos startPos = hitResultPos.offset(blockHitResult.getSide()); - Direction direction = MC.player.getHorizontalFacing(); - remainingBlocks = template.getPositions(startPos, direction); - - if(instaBuild.isChecked() && template.size() <= 64) - buildInstantly(); - else - status = Status.BUILDING; - } - - private void buildInstantly() - { - double rangeSq = range.getValueSq(); - - for(BlockPos pos : remainingBlocks) - { - if(!BlockUtils.getState(pos).isReplaceable()) - continue; - - BlockPlacingParams params = BlockPlacer.getBlockPlacingParams(pos); - if(params == null || params.distanceSq() > rangeSq) - continue; - - InteractionSimulator.rightClickBlock(params.toHitResult(), - SwingHand.OFF); - } - - remainingBlocks.clear(); - } - - @Override - public void onRender(MatrixStack matrixStack, float partialTicks) - { - if(status != Status.BUILDING) - return; - - float scale = 7F / 8F; - double offset = (1.0 - scale) / 2.0; - Vec3d eyesPos = RotationUtils.getEyesPos(); - double rangeSq = range.getValueSq(); - - // GL settings - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glDisable(GL11.GL_CULL_FACE); - RenderSystem.setShaderColor(0, 0, 0, 0.5F); - - matrixStack.push(); - - RegionPos region = RenderUtils.getCameraRegion(); - RenderUtils.applyRegionalRenderOffset(matrixStack, region); - - int blocksDrawn = 0; - RenderSystem.setShader(GameRenderer::getPositionProgram); - for(Iterator itr = remainingBlocks.iterator(); itr.hasNext() - && blocksDrawn < 1024;) - { - BlockPos pos = itr.next(); - if(!BlockUtils.getState(pos).isReplaceable()) - continue; - - matrixStack.push(); - matrixStack.translate(pos.getX() - region.x(), pos.getY(), - pos.getZ() - region.z()); - matrixStack.translate(offset, offset, offset); - matrixStack.scale(scale, scale, scale); - - Vec3d posVec = Vec3d.ofCenter(pos); - - if(eyesPos.squaredDistanceTo(posVec) <= rangeSq) - drawGreenBox(matrixStack); - else - RenderUtils.drawOutlinedBox(matrixStack); - - matrixStack.pop(); - blocksDrawn++; - } - - matrixStack.pop(); - - // GL resets - GL11.glDisable(GL11.GL_BLEND); - RenderSystem.setShaderColor(1, 1, 1, 1); - } - - private void drawGreenBox(MatrixStack matrixStack) - { - GL11.glDepthMask(false); - RenderSystem.setShaderColor(0, 1, 0, 0.15F); - RenderUtils.drawSolidBox(matrixStack); - GL11.glDepthMask(true); - - RenderSystem.setShaderColor(0, 0, 0, 0.5F); - RenderUtils.drawOutlinedBox(matrixStack); - } - private enum Status { NO_TEMPLATE, From 7c5016cc400f08c41c5ccec098c7461d6c56c58d Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 16 Jul 2024 16:40:45 +0200 Subject: [PATCH 076/109] Update "OpenAI model" description --- .../java/net/wurstclient/hacks/autocomplete/ModelSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/hacks/autocomplete/ModelSettings.java b/src/main/java/net/wurstclient/hacks/autocomplete/ModelSettings.java index 1288d1ca..c782550a 100644 --- a/src/main/java/net/wurstclient/hacks/autocomplete/ModelSettings.java +++ b/src/main/java/net/wurstclient/hacks/autocomplete/ModelSettings.java @@ -24,7 +24,7 @@ public final class ModelSettings public final EnumSetting openAiModel = new EnumSetting<>( "OpenAI model", "The model to use for OpenAI API calls.\nRecommended models:\n\n" - + "\u00a7lGPT-4o-2024-05-13\u00a7r is the world's smartest model at" + + "\u00a7lGPT-4o-2024-05-13\u00a7r is one of the smartest models at" + " the time of writing and will often produce the best completions." + " However, it's meant to be an assistant rather than an" + " auto-completion system, so you will see it produce some odd" From cecf762203bc492ebcb10b466958981e18fddb5b Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 18 Jul 2024 11:52:13 +0200 Subject: [PATCH 077/109] Port TemplateTool from Wurst 6 --- .../java/net/wurstclient/hack/HackList.java | 1 + .../net/wurstclient/hacks/AutoBuildHack.java | 7 + .../net/wurstclient/hacks/BowAimbotHack.java | 1 + .../net/wurstclient/hacks/ExcavatorHack.java | 2 +- .../wurstclient/hacks/TemplateToolHack.java | 512 ++++++++++++++++++ .../wurstclient/hacks/templatetool/Area.java | 122 +++++ .../hacks/templatetool/ChooseNameScreen.java | 140 +++++ .../wurstclient/hacks/templatetool/Step.java | 61 +++ .../hacks/templatetool/Template.java | 82 +++ 9 files changed, 927 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/wurstclient/hacks/TemplateToolHack.java create mode 100644 src/main/java/net/wurstclient/hacks/templatetool/Area.java create mode 100644 src/main/java/net/wurstclient/hacks/templatetool/ChooseNameScreen.java create mode 100644 src/main/java/net/wurstclient/hacks/templatetool/Step.java create mode 100644 src/main/java/net/wurstclient/hacks/templatetool/Template.java diff --git a/src/main/java/net/wurstclient/hack/HackList.java b/src/main/java/net/wurstclient/hack/HackList.java index 2cb14067..d7504295 100644 --- a/src/main/java/net/wurstclient/hack/HackList.java +++ b/src/main/java/net/wurstclient/hack/HackList.java @@ -172,6 +172,7 @@ public final class HackList implements UpdateListener public final SpeedNukerHack speedNukerHack = new SpeedNukerHack(); public final SpiderHack spiderHack = new SpiderHack(); public final StepHack stepHack = new StepHack(); + public final TemplateToolHack templateToolHack = new TemplateToolHack(); public final ThrowHack throwHack = new ThrowHack(); public final TillauraHack tillauraHack = new TillauraHack(); public final TimerHack timerHack = new TimerHack(); diff --git a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java index 3a521b3a..61592a69 100644 --- a/src/main/java/net/wurstclient/hacks/AutoBuildHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoBuildHack.java @@ -114,6 +114,8 @@ public final class AutoBuildHack extends Hack @Override protected void onEnable() { + WURST.getHax().templateToolHack.setEnabled(false); + EVENTS.add(UpdateListener.class, this); EVENTS.add(RightClickListener.class, this); EVENTS.add(RenderListener.class, this); @@ -308,6 +310,11 @@ public final class AutoBuildHack extends Hack } } + public Path getFolder() + { + return templateSetting.getFolder(); + } + private enum Status { NO_TEMPLATE, diff --git a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java index f2b130b8..418448ef 100644 --- a/src/main/java/net/wurstclient/hacks/BowAimbotHack.java +++ b/src/main/java/net/wurstclient/hacks/BowAimbotHack.java @@ -99,6 +99,7 @@ public final class BowAimbotHack extends Hack { // disable conflicting hacks WURST.getHax().excavatorHack.setEnabled(false); + WURST.getHax().templateToolHack.setEnabled(false); // register event listeners EVENTS.add(GUIRenderListener.class, this); diff --git a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java index 184cfcd1..acc2eaa8 100644 --- a/src/main/java/net/wurstclient/hacks/ExcavatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ExcavatorHack.java @@ -102,7 +102,7 @@ public final class ExcavatorHack extends Hack WURST.getHax().nukerHack.setEnabled(false); WURST.getHax().nukerLegitHack.setEnabled(false); WURST.getHax().speedNukerHack.setEnabled(false); - // WURST.getHax().templateToolHack.setEnabled(false); + WURST.getHax().templateToolHack.setEnabled(false); WURST.getHax().tunnellerHack.setEnabled(false); step = Step.START_POS; diff --git a/src/main/java/net/wurstclient/hacks/TemplateToolHack.java b/src/main/java/net/wurstclient/hacks/TemplateToolHack.java new file mode 100644 index 00000000..d35cace9 --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/TemplateToolHack.java @@ -0,0 +1,512 @@ +/* + * Copyright (c) 2014-2024 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.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; + +import org.joml.Matrix4f; +import org.lwjgl.glfw.GLFW; +import org.lwjgl.opengl.GL11; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +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.InputUtil; +import net.minecraft.client.util.Window; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.ClickEvent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.wurstclient.Category; +import net.wurstclient.events.GUIRenderListener; +import net.wurstclient.events.RenderListener; +import net.wurstclient.events.UpdateListener; +import net.wurstclient.hack.Hack; +import net.wurstclient.hacks.templatetool.Area; +import net.wurstclient.hacks.templatetool.ChooseNameScreen; +import net.wurstclient.hacks.templatetool.Step; +import net.wurstclient.hacks.templatetool.Template; +import net.wurstclient.util.BlockUtils; +import net.wurstclient.util.ChatUtils; +import net.wurstclient.util.RegionPos; +import net.wurstclient.util.RenderUtils; +import net.wurstclient.util.json.JsonUtils; + +public final class TemplateToolHack extends Hack + implements UpdateListener, RenderListener, GUIRenderListener +{ + private Step step; + private BlockPos posLookingAt; + private Area area; + private Template template; + private File file; + + public TemplateToolHack() + { + super("TemplateTool"); + setCategory(Category.BLOCKS); + } + + @Override + public void onEnable() + { + // disable conflicting hacks + WURST.getHax().autoBuildHack.setEnabled(false); + WURST.getHax().bowAimbotHack.setEnabled(false); + WURST.getHax().excavatorHack.setEnabled(false); + + step = Step.START_POS; + + EVENTS.add(UpdateListener.class, this); + EVENTS.add(RenderListener.class, this); + EVENTS.add(GUIRenderListener.class, this); + } + + @Override + public void onDisable() + { + EVENTS.remove(UpdateListener.class, this); + EVENTS.remove(RenderListener.class, this); + EVENTS.remove(GUIRenderListener.class, this); + + for(Step step : Step.values()) + step.setPos(null); + posLookingAt = null; + area = null; + template = null; + file = null; + } + + @Override + public void onUpdate() + { + // select position steps + if(step.doesSelectPos()) + { + // continue with next step + if(step.getPos() != null && InputUtil + .isKeyPressed(MC.getWindow().getHandle(), GLFW.GLFW_KEY_ENTER)) + { + step = Step.values()[step.ordinal() + 1]; + + // delete posLookingAt + if(!step.doesSelectPos()) + posLookingAt = null; + + return; + } + + if(MC.crosshairTarget instanceof BlockHitResult bHitResult) + { + // set posLookingAt + posLookingAt = bHitResult.getBlockPos(); + + // offset if sneaking + if(MC.options.sneakKey.isPressed()) + posLookingAt = posLookingAt.offset(bHitResult.getSide()); + + }else + posLookingAt = null; + + // set selected position + if(posLookingAt != null && MC.options.useKey.isPressed()) + step.setPos(posLookingAt); + + // scanning area step + }else if(step == Step.SCAN_AREA) + { + // initialize area + if(area == null) + { + area = new Area(Step.START_POS.getPos(), Step.END_POS.getPos()); + Step.START_POS.setPos(null); + Step.END_POS.setPos(null); + } + + // scan area + for(int i = 0; i < area.getScanSpeed() + && area.getIterator().hasNext(); i++) + { + area.setScannedBlocks(area.getScannedBlocks() + 1); + BlockPos pos = area.getIterator().next(); + + if(!BlockUtils.getState(pos).isReplaceable()) + area.getBlocksFound().add(pos); + } + + // update progress + area.setProgress( + (float)area.getScannedBlocks() / (float)area.getTotalBlocks()); + + // continue with next step + if(!area.getIterator().hasNext()) + step = Step.values()[step.ordinal() + 1]; + + // creating template step + }else if(step == Step.CREATE_TEMPLATE) + { + // initialize template + if(template == null) + template = new Template(Step.FIRST_BLOCK.getPos(), + area.getBlocksFound().size()); + + // sort blocks by distance + if(!area.getBlocksFound().isEmpty()) + { + // move blocks to TreeSet + int min = Math.max(0, + area.getBlocksFound().size() - template.getScanSpeed()); + for(int i = area.getBlocksFound().size() - 1; i >= min; i--) + { + BlockPos pos = area.getBlocksFound().get(i); + template.getRemainingBlocks().add(pos); + area.getBlocksFound().remove(i); + } + + // update progress + template.setProgress((float)template.getRemainingBlocks().size() + / (float)template.getTotalBlocks()); + + return; + } + + // add closest block first + if(template.getSortedBlocks().isEmpty() + && !template.getRemainingBlocks().isEmpty()) + { + BlockPos first = template.getRemainingBlocks().first(); + template.getSortedBlocks().add(first); + template.getRemainingBlocks().remove(first); + template.setLastAddedBlock(first); + } + + // add remaining blocks + for(int i = 0; i < template.getScanSpeed() + && !template.getRemainingBlocks().isEmpty(); i++) + { + BlockPos current = template.getRemainingBlocks().first(); + double dCurrent = Double.MAX_VALUE; + + for(BlockPos pos : template.getRemainingBlocks()) + { + double dPos = + template.getLastAddedBlock().getSquaredDistance(pos); + if(dPos >= dCurrent) + continue; + + for(Direction facing : Direction.values()) + { + BlockPos next = pos.offset(facing); + if(!template.getSortedBlocks().contains(next)) + continue; + + current = pos; + dCurrent = dPos; + } + } + + template.getSortedBlocks().add(current); + template.getRemainingBlocks().remove(current); + template.setLastAddedBlock(current); + } + + // update progress + template.setProgress((float)template.getRemainingBlocks().size() + / (float)template.getTotalBlocks()); + + // continue with next step + if(template.getSortedBlocks().size() == template.getTotalBlocks()) + { + step = Step.values()[step.ordinal() + 1]; + MC.setScreen(new ChooseNameScreen()); + } + } + } + + @Override + public void onRender(MatrixStack matrixStack, float partialTicks) + { + // scale and offset + float scale = 7F / 8F; + double offset = (1.0 - scale) / 2.0; + + // GL settings + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + matrixStack.push(); + RenderSystem.setShader(GameRenderer::getPositionProgram); + + RegionPos region = RenderUtils.getCameraRegion(); + RenderUtils.applyRegionalRenderOffset(matrixStack, region); + + // area + if(area != null) + { + GL11.glEnable(GL11.GL_DEPTH_TEST); + + // recently scanned blocks + if(step == Step.SCAN_AREA && area.getProgress() < 1) + for(int i = Math.max(0, + area.getBlocksFound().size() + - area.getScanSpeed()); i < area.getBlocksFound() + .size(); i++) + { + BlockPos pos = area.getBlocksFound().get(i) + .subtract(region.toBlockPos()); + + matrixStack.push(); + matrixStack.translate(pos.getX(), pos.getY(), pos.getZ()); + matrixStack.translate(-0.005, -0.005, -0.005); + matrixStack.scale(1.01F, 1.01F, 1.01F); + + RenderSystem.setShaderColor(0, 1, 0, 0.15F); + RenderUtils.drawSolidBox(matrixStack); + + RenderSystem.setShaderColor(0, 0, 0, 0.5F); + RenderUtils.drawOutlinedBox(matrixStack); + + matrixStack.pop(); + } + + matrixStack.push(); + matrixStack.translate(area.getMinX() + offset - region.x(), + area.getMinY() + offset, area.getMinZ() + offset - region.z()); + matrixStack.scale(area.getSizeX() + scale, area.getSizeY() + scale, + area.getSizeZ() + scale); + + // area scanner + if(area.getProgress() < 1) + { + matrixStack.push(); + matrixStack.translate(area.getProgress(), 0, 0); + matrixStack.scale(0, 1, 1); + + RenderSystem.setShaderColor(0, 1, 0, 0.3F); + RenderUtils.drawSolidBox(matrixStack); + + RenderSystem.setShaderColor(0, 0, 0, 0.5F); + RenderUtils.drawOutlinedBox(matrixStack); + + matrixStack.pop(); + + // template scanner + }else if(template != null && template.getProgress() > 0) + { + matrixStack.push(); + matrixStack.translate(template.getProgress(), 0, 0); + matrixStack.scale(0, 1, 1); + + RenderSystem.setShaderColor(0, 1, 0, 0.3F); + RenderUtils.drawSolidBox(matrixStack); + + RenderSystem.setShaderColor(0, 0, 0, 0.5F); + RenderUtils.drawOutlinedBox(matrixStack); + + matrixStack.pop(); + } + + // area box + RenderSystem.setShaderColor(0, 0, 0, 0.5F); + RenderUtils.drawOutlinedBox(matrixStack); + + matrixStack.pop(); + + GL11.glDisable(GL11.GL_DEPTH_TEST); + } + + // sorted blocks + if(template != null) + for(BlockPos pos : template.getSortedBlocks()) + { + matrixStack.push(); + matrixStack.translate(pos.getX() - region.x(), pos.getY(), + pos.getZ() - region.z()); + matrixStack.translate(offset, offset, offset); + matrixStack.scale(scale, scale, scale); + + RenderSystem.setShaderColor(0F, 0F, 0F, 0.5F); + RenderUtils.drawOutlinedBox(matrixStack); + + matrixStack.pop(); + } + + // selected positions + for(Step step : Step.SELECT_POSITION_STEPS) + { + BlockPos pos = step.getPos(); + if(pos == null) + continue; + + matrixStack.push(); + matrixStack.translate(pos.getX() - region.x(), pos.getY(), + pos.getZ() - region.z()); + matrixStack.translate(offset, offset, offset); + matrixStack.scale(scale, scale, scale); + + RenderSystem.setShaderColor(0, 1, 0, 0.15F); + RenderUtils.drawSolidBox(matrixStack); + + RenderSystem.setShaderColor(0, 0, 0, 0.5F); + RenderUtils.drawOutlinedBox(matrixStack); + + matrixStack.pop(); + } + + // posLookingAt + if(posLookingAt != null) + { + matrixStack.push(); + matrixStack.translate(posLookingAt.getX() - region.x(), + posLookingAt.getY(), posLookingAt.getZ() - region.z()); + matrixStack.translate(offset, offset, offset); + matrixStack.scale(scale, scale, scale); + + RenderSystem.setShaderColor(0.25F, 0.25F, 0.25F, 0.15F); + RenderUtils.drawSolidBox(matrixStack); + + RenderSystem.setShaderColor(0, 0, 0, 0.5F); + RenderUtils.drawOutlinedBox(matrixStack); + + matrixStack.pop(); + } + + matrixStack.pop(); + + // GL resets + RenderSystem.setShaderColor(1, 1, 1, 1); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_BLEND); + } + + @Override + public void onRenderGUI(DrawContext context, float partialTicks) + { + // GL settings + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_CULL_FACE); + + MatrixStack matrixStack = context.getMatrices(); + matrixStack.push(); + + Matrix4f matrix = matrixStack.peek().getPositionMatrix(); + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + + String message; + if(step.doesSelectPos() && step.getPos() != null) + message = "Press enter to confirm, or select a different position."; + else if(step == Step.FILE_NAME && file != null && file.exists()) + message = "WARNING: This file already exists."; + else + message = step.getMessage(); + + // translate to center + Window sr = MC.getWindow(); + TextRenderer tr = MC.textRenderer; + int msgWidth = tr.getWidth(message); + matrixStack.translate(sr.getScaledWidth() / 2 - msgWidth / 2, + sr.getScaledHeight() / 2 + 1, 0); + + // background + RenderSystem.setShader(GameRenderer::getPositionProgram); + RenderSystem.setShaderColor(0, 0, 0, 0.5F); + BufferBuilder bufferBuilder = tessellator + .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); + bufferBuilder.vertex(matrix, 0, 0, 0); + bufferBuilder.vertex(matrix, msgWidth + 2, 0, 0); + bufferBuilder.vertex(matrix, msgWidth + 2, 10, 0); + bufferBuilder.vertex(matrix, 0, 10, 0); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); + + // text + RenderSystem.setShaderColor(1, 1, 1, 1); + context.drawText(tr, message, 2, 1, 0xffffffff, false); + + matrixStack.pop(); + + // GL resets + RenderSystem.setShaderColor(1, 1, 1, 1); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + } + + public void saveFile() + { + step = Step.values()[step.ordinal() + 1]; + JsonObject json = new JsonObject(); + + // get facings + Direction front = MC.player.getHorizontalFacing(); + Direction left = front.rotateYCounterclockwise(); + + // add sorted blocks + JsonArray jsonBlocks = new JsonArray(); + for(BlockPos pos : template.getSortedBlocks()) + { + // translate + pos = pos.subtract(Step.FIRST_BLOCK.getPos()); + + // rotate + pos = new BlockPos(0, pos.getY(), 0).offset(front, pos.getZ()) + .offset(left, pos.getX()); + + // add to json + jsonBlocks.add(JsonUtils.GSON.toJsonTree( + new int[]{pos.getX(), pos.getY(), pos.getZ()}, int[].class)); + } + json.add("blocks", jsonBlocks); + + try(PrintWriter save = new PrintWriter(new FileWriter(file))) + { + // save file + save.print(JsonUtils.PRETTY_GSON.toJson(json)); + + // show success message + MutableText message = Text.literal("Saved template as "); + ClickEvent event = new ClickEvent(ClickEvent.Action.OPEN_FILE, + file.getParentFile().getAbsolutePath()); + MutableText link = Text.literal(file.getName()) + .styled(s -> s.withUnderline(true).withClickEvent(event)); + message.append(link); + ChatUtils.component(message); + + }catch(IOException e) + { + e.printStackTrace(); + + // show error message + ChatUtils.error("File could not be saved."); + } + + // disable TemplateTool + setEnabled(false); + } + + public void setFile(File file) + { + this.file = file; + } +} diff --git a/src/main/java/net/wurstclient/hacks/templatetool/Area.java b/src/main/java/net/wurstclient/hacks/templatetool/Area.java new file mode 100644 index 00000000..98bd7732 --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/templatetool/Area.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2014-2024 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.templatetool; + +import java.util.ArrayList; +import java.util.Iterator; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.wurstclient.util.BlockUtils; + +public final class Area +{ + private final int minX, minY, minZ; + private final int sizeX, sizeY, sizeZ; + + private final int totalBlocks, scanSpeed; + private final Iterator iterator; + + private int scannedBlocks; + private float progress; + + private final ArrayList blocksFound = new ArrayList<>(); + + public Area(BlockPos start, BlockPos end) + { + int startX = start.getX(); + int startY = start.getY(); + int startZ = start.getZ(); + + int endX = end.getX(); + int endY = end.getY(); + int endZ = end.getZ(); + + minX = Math.min(startX, endX); + minY = Math.min(startY, endY); + minZ = Math.min(startZ, endZ); + + sizeX = Math.abs(startX - endX); + sizeY = Math.abs(startY - endY); + sizeZ = Math.abs(startZ - endZ); + + totalBlocks = (sizeX + 1) * (sizeY + 1) * (sizeZ + 1); + scanSpeed = MathHelper.clamp(totalBlocks / 30, 1, 1024); + iterator = BlockUtils.getAllInBox(start, end).iterator(); + } + + public int getScannedBlocks() + { + return scannedBlocks; + } + + public void setScannedBlocks(int scannedBlocks) + { + this.scannedBlocks = scannedBlocks; + } + + public float getProgress() + { + return progress; + } + + public void setProgress(float progress) + { + this.progress = progress; + } + + public int getMinX() + { + return minX; + } + + public int getMinY() + { + return minY; + } + + public int getMinZ() + { + return minZ; + } + + public int getSizeX() + { + return sizeX; + } + + public int getSizeY() + { + return sizeY; + } + + public int getSizeZ() + { + return sizeZ; + } + + public int getTotalBlocks() + { + return totalBlocks; + } + + public int getScanSpeed() + { + return scanSpeed; + } + + public Iterator getIterator() + { + return iterator; + } + + public ArrayList getBlocksFound() + { + return blocksFound; + } +} diff --git a/src/main/java/net/wurstclient/hacks/templatetool/ChooseNameScreen.java b/src/main/java/net/wurstclient/hacks/templatetool/ChooseNameScreen.java new file mode 100644 index 00000000..2382136c --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/templatetool/ChooseNameScreen.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2014-2024 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.templatetool; + +import java.nio.file.Path; + +import org.lwjgl.glfw.GLFW; + +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.Drawable; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.screen.ScreenTexts; +import net.minecraft.text.Text; +import net.wurstclient.WurstClient; + +public final class ChooseNameScreen extends Screen +{ + private static final WurstClient WURST = WurstClient.INSTANCE; + + private TextFieldWidget nameField; + private ButtonWidget doneButton; + private ButtonWidget cancelButton; + + public ChooseNameScreen() + { + super(ScreenTexts.EMPTY); + } + + @Override + public void init() + { + TextRenderer tr = client.textRenderer; + int middleX = width / 2; + int middleY = height / 2; + + nameField = new TextFieldWidget(tr, middleX - 99, middleY + 16, 198, 16, + Text.empty()); + nameField.setDrawsBackground(false); + nameField.setMaxLength(32); + nameField.setFocused(true); + nameField.setEditableColor(0xFFFFFF); + addSelectableChild(nameField); + setFocused(nameField); + + doneButton = ButtonWidget.builder(Text.literal("Done"), b -> done()) + .dimensions(middleX - 75, middleY + 38, 150, 20).build(); + addDrawableChild(doneButton); + + cancelButton = + ButtonWidget.builder(Text.literal("Cancel"), b -> cancel()) + .dimensions(middleX - 50, middleY + 62, 100, 15).build(); + addDrawableChild(cancelButton); + } + + private void done() + { + client.setScreen(null); + WURST.getHax().templateToolHack.saveFile(); + } + + private void cancel() + { + client.setScreen(null); + WURST.getHax().templateToolHack.setEnabled(false); + } + + @Override + public void tick() + { + if(nameField.getText().isEmpty()) + return; + + Path folder = WURST.getHax().autoBuildHack.getFolder(); + Path file = folder.resolve(nameField.getText() + ".json"); + WURST.getHax().templateToolHack.setFile(file.toFile()); + } + + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + switch(keyCode) + { + case GLFW.GLFW_KEY_ESCAPE: + cancelButton.onPress(); + break; + + case GLFW.GLFW_KEY_ENTER: + doneButton.onPress(); + break; + } + + return super.keyPressed(keyCode, scanCode, modifiers); + } + + @Override + public void render(DrawContext context, int mouseX, int mouseY, + float partialTicks) + { + // super.render(context, mouseX, mouseY, partialTicks); + applyBlur(partialTicks); + for(Drawable drawable : drawables) + drawable.render(context, mouseX, mouseY, partialTicks); + + // middle + int middleX = width / 2; + int middleY = height / 2; + + // background positions + int x1 = middleX - 100; + int y1 = middleY + 15; + int x2 = middleX + 100; + int y2 = middleY + 26; + + // background + context.fill(x1, y1, x2, y2, 0x80000000); + + // name field + nameField.render(context, mouseX, mouseY, partialTicks); + } + + @Override + public boolean shouldPause() + { + return false; + } + + @Override + public boolean shouldCloseOnEsc() + { + return false; + } +} diff --git a/src/main/java/net/wurstclient/hacks/templatetool/Step.java b/src/main/java/net/wurstclient/hacks/templatetool/Step.java new file mode 100644 index 00000000..8f9d7bf1 --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/templatetool/Step.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2014-2024 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.templatetool; + +import net.minecraft.util.math.BlockPos; + +public enum Step +{ + START_POS("Select start position.", true), + + END_POS("Select end position.", true), + + SCAN_AREA("Scanning area...", false), + + FIRST_BLOCK("Select the first block to be placed by AutoBuild.", true), + + CREATE_TEMPLATE("Creating template...", false), + + FILE_NAME("Choose a name for this template.", false), + + SAVE_FILE("Saving file...", false); + + public static final Step[] SELECT_POSITION_STEPS = + {START_POS, END_POS, FIRST_BLOCK}; + + private final String message; + private final boolean selectPos; + + private BlockPos pos; + + private Step(String message, boolean selectPos) + { + this.message = message; + this.selectPos = selectPos; + } + + public BlockPos getPos() + { + return pos; + } + + public void setPos(BlockPos pos) + { + this.pos = pos; + } + + public String getMessage() + { + return message; + } + + public boolean doesSelectPos() + { + return selectPos; + } +} diff --git a/src/main/java/net/wurstclient/hacks/templatetool/Template.java b/src/main/java/net/wurstclient/hacks/templatetool/Template.java new file mode 100644 index 00000000..12063e31 --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/templatetool/Template.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2014-2024 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.templatetool; + +import java.util.LinkedHashSet; +import java.util.TreeSet; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +public final class Template +{ + private final int totalBlocks, scanSpeed; + private float progress; + + private final TreeSet remainingBlocks; + private final LinkedHashSet sortedBlocks = new LinkedHashSet<>(); + private BlockPos lastAddedBlock; + + public Template(BlockPos firstBlock, int blocksFound) + { + totalBlocks = blocksFound; + scanSpeed = MathHelper.clamp(blocksFound / 15, 1, 1024); + + remainingBlocks = new TreeSet<>((o1, o2) -> { + + // compare distance to start pos + int distanceDiff = Double.compare(o1.getSquaredDistance(firstBlock), + o2.getSquaredDistance(firstBlock)); + if(distanceDiff != 0) + return distanceDiff; + + // fallback in case of same distance + return o1.compareTo(o2); + }); + } + + public float getProgress() + { + return progress; + } + + public void setProgress(float progress) + { + this.progress = progress; + } + + public BlockPos getLastAddedBlock() + { + return lastAddedBlock; + } + + public void setLastAddedBlock(BlockPos lastAddedBlock) + { + this.lastAddedBlock = lastAddedBlock; + } + + public int getTotalBlocks() + { + return totalBlocks; + } + + public int getScanSpeed() + { + return scanSpeed; + } + + public TreeSet getRemainingBlocks() + { + return remainingBlocks; + } + + public LinkedHashSet getSortedBlocks() + { + return sortedBlocks; + } +} From 8ceeb41e11532c85e61cb7f7b000bc9df83ab7fd Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 18 Jul 2024 11:52:51 +0200 Subject: [PATCH 078/109] Change version to 7.45pre1 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 80ac417b..6f0a84bb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version=0.15.11 fabric_version=0.100.6+1.21 # Mod Properties -mod_version = v7.44.1-MC1.21 +mod_version = v7.45pre1-MC1.21 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 3805dbe9..350f1db0 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -50,7 +50,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.44.1"; + public static final String VERSION = "7.45pre1"; public static final String MC_VERSION = "1.21"; private WurstAnalytics analytics; From 3bace83e7220f54fba662aa93f65db94a9ec43f1 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 18 Jul 2024 12:01:45 +0200 Subject: [PATCH 079/109] Fix missing TemplateTool description --- src/main/resources/assets/wurst/translations/en_us.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/wurst/translations/en_us.json b/src/main/resources/assets/wurst/translations/en_us.json index 677edaa2..637dd949 100644 --- a/src/main/resources/assets/wurst/translations/en_us.json +++ b/src/main/resources/assets/wurst/translations/en_us.json @@ -201,6 +201,7 @@ "description.wurst.hack.speednuker": "Faster version of Nuker that cannot bypass NoCheat+.", "description.wurst.hack.spider": "Allows you to climb up walls like a spider.", "description.wurst.hack.step": "Allows you to step up full blocks.", + "description.wurst.hack.templatetool": "Allows you to create custom templates for AutoBuild by scanning existing buildings.", "description.wurst.hack.throw": "Uses an item multiple times. Can be used to throw snowballs and eggs, spawn mobs, place minecarts, etc. in very large quantities.\n\nThis can cause a lot of lag and even crash a server.", "description.wurst.hack.tillaura": "Automatically turns dirt, grass, etc. into farmland.\nNot to be confused with Killaura.", "description.wurst.hack.timer": "Changes the speed of almost everything.", From 6b9480a1b1d5ab93381519afaf809064d822c237 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 18 Jul 2024 20:23:16 +0200 Subject: [PATCH 080/109] Run spotlessApply --- src/main/java/net/wurstclient/util/GoogleTranslate.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/wurstclient/util/GoogleTranslate.java b/src/main/java/net/wurstclient/util/GoogleTranslate.java index 62db887d..2114b163 100644 --- a/src/main/java/net/wurstclient/util/GoogleTranslate.java +++ b/src/main/java/net/wurstclient/util/GoogleTranslate.java @@ -28,8 +28,8 @@ public enum GoogleTranslate String html = getHTML(text, langFrom, langTo); String translated = parseHTML(html); - if(text.replaceAll("\\s", "").equalsIgnoreCase( - translated.replaceAll("\\s", ""))) + if(text.replaceAll("\\s", "") + .equalsIgnoreCase(translated.replaceAll("\\s", ""))) return null; return translated; From c904990a84ba7b8dc125120fff5d5f9b4530caad Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 18 Jul 2024 20:33:23 +0200 Subject: [PATCH 081/109] Refactor whitespace check for better performance --- .../java/net/wurstclient/util/GoogleTranslate.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/wurstclient/util/GoogleTranslate.java b/src/main/java/net/wurstclient/util/GoogleTranslate.java index 2114b163..0520704d 100644 --- a/src/main/java/net/wurstclient/util/GoogleTranslate.java +++ b/src/main/java/net/wurstclient/util/GoogleTranslate.java @@ -23,13 +23,16 @@ public enum GoogleTranslate { ; + private static final Pattern ALL_WHITESPACE = Pattern.compile("\\s+"); + public static String translate(String text, String langFrom, String langTo) { String html = getHTML(text, langFrom, langTo); String translated = parseHTML(html); - if(text.replaceAll("\\s", "") - .equalsIgnoreCase(translated.replaceAll("\\s", ""))) + // Detect if Google translate returned the original text, maybe with + // some whitespace or capitalization changes, and return null if so + if(simplify(text).equals(simplify(translated))) return null; return translated; @@ -107,4 +110,9 @@ public enum GoogleTranslate // which isn't bundled with Minecraft return org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4(match); } + + private static String simplify(String text) + { + return ALL_WHITESPACE.matcher(text).replaceAll("").toLowerCase(); + } } From c1d9bda0611bdd121c8335a1b7b4814eefaee87a Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 18 Jul 2024 21:07:26 +0200 Subject: [PATCH 082/109] Fix the unrelated issue that CodeRabbit found --- src/main/java/net/wurstclient/util/GoogleTranslate.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/wurstclient/util/GoogleTranslate.java b/src/main/java/net/wurstclient/util/GoogleTranslate.java index 0520704d..30f78a75 100644 --- a/src/main/java/net/wurstclient/util/GoogleTranslate.java +++ b/src/main/java/net/wurstclient/util/GoogleTranslate.java @@ -100,9 +100,10 @@ public enum GoogleTranslate Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); Matcher matcher = pattern.matcher(html); - matcher.find(); - String match = matcher.group(1); + if(!matcher.find()) + return null; + String match = matcher.group(1); if(match == null || match.isEmpty()) return null; From 745be6cfd859b53047963c4bd6762a116f803968 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 21 Jul 2024 18:04:25 +0200 Subject: [PATCH 083/109] Refactor ChatTranslatorHack to use virtual threads --- .../wurstclient/hacks/ChatTranslatorHack.java | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index a827eed3..9a580fc7 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -53,39 +53,27 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener @Override public void onReceivedMessage(ChatInputEvent event) { - new Thread(() -> { - try - { - translate(event); - - }catch(Exception e) - { - e.printStackTrace(); - } - }, "ChatTranslator").start(); + Thread.ofVirtual().name("ChatTranslator") + .uncaughtExceptionHandler((t, e) -> e.printStackTrace()) + .start(() -> translate(event.getComponent().getString())); } - private void translate(ChatInputEvent event) + private void translate(String message) { - String incomingMsg = event.getComponent().getString(); - - String translatorPrefix = + String prefix = "\u00a7a[\u00a7b" + langTo.getSelected().name + "\u00a7a]:\u00a7r "; - if(incomingMsg.startsWith(ChatUtils.WURST_PREFIX) - || incomingMsg.startsWith(translatorPrefix)) + if(message.startsWith(ChatUtils.WURST_PREFIX) + || message.startsWith(prefix)) return; - String translated = GoogleTranslate.translate(incomingMsg, + String translated = GoogleTranslate.translate(message, langFrom.getSelected().value, langTo.getSelected().value); if(translated == null) return; - Text translationMsg = - Text.literal(translatorPrefix).append(Text.literal(translated)); - - MC.inGameHud.getChatHud().addMessage(translationMsg); + MC.inGameHud.getChatHud().addMessage(Text.literal(prefix + translated)); } public static enum FromLanguage From 3f7f61092aa3a5ad5b140c996ea4d94421000571 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Sun, 21 Jul 2024 23:22:01 +0200 Subject: [PATCH 084/109] Create a LanguageSetting class for use in ChatTranslator --- .../wurstclient/hacks/ChatTranslatorHack.java | 102 ++---------------- .../wurstclient/settings/LanguageSetting.java | 101 +++++++++++++++++ 2 files changed, 109 insertions(+), 94 deletions(-) create mode 100644 src/main/java/net/wurstclient/settings/LanguageSetting.java diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index 9a580fc7..fd3c05ff 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -12,7 +12,8 @@ import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.ChatInputListener; import net.wurstclient.hack.Hack; -import net.wurstclient.settings.EnumSetting; +import net.wurstclient.settings.LanguageSetting; +import net.wurstclient.settings.LanguageSetting.Language; import net.wurstclient.util.ChatUtils; import net.wurstclient.util.GoogleTranslate; @@ -23,11 +24,11 @@ import net.wurstclient.util.GoogleTranslate; "google translator", "GoogleTranslation", "google translation"}) public final class ChatTranslatorHack extends Hack implements ChatInputListener { - private final EnumSetting langFrom = new EnumSetting<>( - "Translate from", FromLanguage.values(), FromLanguage.AUTO_DETECT); + private final LanguageSetting langFrom = + LanguageSetting.withAutoDetect("Translate from", Language.AUTO_DETECT); - private final EnumSetting langTo = new EnumSetting<>( - "Translate to", ToLanguage.values(), ToLanguage.ENGLISH); + private final LanguageSetting langTo = + LanguageSetting.withoutAutoDetect("Translate to", Language.ENGLISH); public ChatTranslatorHack() { @@ -61,105 +62,18 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener private void translate(String message) { String prefix = - "\u00a7a[\u00a7b" + langTo.getSelected().name + "\u00a7a]:\u00a7r "; + "\u00a7a[\u00a7b" + langTo.getSelected() + "\u00a7a]:\u00a7r "; if(message.startsWith(ChatUtils.WURST_PREFIX) || message.startsWith(prefix)) return; String translated = GoogleTranslate.translate(message, - langFrom.getSelected().value, langTo.getSelected().value); + langFrom.getSelected().getValue(), langTo.getSelected().getValue()); if(translated == null) return; MC.inGameHud.getChatHud().addMessage(Text.literal(prefix + translated)); } - - public static enum FromLanguage - { - AUTO_DETECT("Detect Language", "auto"), - AFRIKAANS("Afrikaans", "af"), - ARABIC("Arabic", "ar"), - CZECH("Czech", "cs"), - CHINESE_SIMPLIFIED("Chinese (simplified)", "zh-CN"), - CHINESE_TRADITIONAL("Chinese (traditional)", "zh-TW"), - DANISH("Danish", "da"), - DUTCH("Dutch", "nl"), - ENGLISH("English", "en"), - FINNISH("Finnish", "fi"), - FRENCH("French", "fr"), - GERMAN("Deutsch!", "de"), - GREEK("Greek", "el"), - HINDI("Hindi", "hi"), - ITALIAN("Italian", "it"), - JAPANESE("Japanese", "ja"), - KOREAN("Korean", "ko"), - NORWEGIAN("Norwegian", "no"), - POLISH("Polish", "pl"), - PORTUGUESE("Portugese", "pt"), - RUSSIAN("Russian", "ru"), - SPANISH("Spanish", "es"), - SWAHILI("Swahili", "sw"), - SWEDISH("Swedish", "sv"), - TURKISH("Turkish", "tr"); - - private final String name; - private final String value; - - private FromLanguage(String name, String value) - { - this.name = name; - this.value = value; - } - - @Override - public String toString() - { - return name; - } - } - - public static enum ToLanguage - { - AFRIKAANS("Afrikaans", "af"), - ARABIC("Arabic", "ar"), - CZECH("Czech", "cs"), - CHINESE_SIMPLIFIED("Chinese (simplified)", "zh-CN"), - CHINESE_TRADITIONAL("Chinese (traditional)", "zh-TW"), - DANISH("Danish", "da"), - DUTCH("Dutch", "nl"), - ENGLISH("English", "en"), - FINNISH("Finnish", "fi"), - FRENCH("French", "fr"), - GERMAN("Deutsch!", "de"), - GREEK("Greek", "el"), - HINDI("Hindi", "hi"), - ITALIAN("Italian", "it"), - JAPANESE("Japanese", "ja"), - KOREAN("Korean", "ko"), - NORWEGIAN("Norwegian", "no"), - POLISH("Polish", "pl"), - PORTUGUESE("Portugese", "pt"), - RUSSIAN("Russian", "ru"), - SPANISH("Spanish", "es"), - SWAHILI("Swahili", "sw"), - SWEDISH("Swedish", "sv"), - TURKISH("Turkish", "tr"); - - private final String name; - private final String value; - - private ToLanguage(String name, String value) - { - this.name = name; - this.value = value; - } - - @Override - public String toString() - { - return name; - } - } } diff --git a/src/main/java/net/wurstclient/settings/LanguageSetting.java b/src/main/java/net/wurstclient/settings/LanguageSetting.java new file mode 100644 index 00000000..3a133628 --- /dev/null +++ b/src/main/java/net/wurstclient/settings/LanguageSetting.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2014-2024 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; + +public final class LanguageSetting extends EnumSetting +{ + private LanguageSetting(String name, String description, Language[] values, + Language selected) + { + super(name, description, values, selected); + } + + public static LanguageSetting withAutoDetect(String name, + String description, Language selected) + { + return new LanguageSetting(name, description, Language.values(), + selected); + } + + public static LanguageSetting withAutoDetect(String name, Language selected) + { + return new LanguageSetting(name, "", Language.values(), selected); + } + + public static LanguageSetting withoutAutoDetect(String name, + String description, Language selected) + { + Language[] values = Language.valuesWithoutAutoDetect(); + return new LanguageSetting(name, description, values, selected); + } + + public static LanguageSetting withoutAutoDetect(String name, + Language selected) + { + Language[] values = Language.valuesWithoutAutoDetect(); + return new LanguageSetting(name, "", values, selected); + } + + public enum Language + { + AUTO_DETECT("Detect Language", "auto"), + AFRIKAANS("Afrikaans", "af"), + ARABIC("Arabic", "ar"), + CZECH("Czech", "cs"), + CHINESE_SIMPLIFIED("Chinese (simplified)", "zh-CN"), + CHINESE_TRADITIONAL("Chinese (traditional)", "zh-TW"), + DANISH("Danish", "da"), + DUTCH("Dutch", "nl"), + ENGLISH("English", "en"), + FINNISH("Finnish", "fi"), + FRENCH("French", "fr"), + GERMAN("Deutsch!", "de"), + GREEK("Greek", "el"), + HINDI("Hindi", "hi"), + ITALIAN("Italian", "it"), + JAPANESE("Japanese", "ja"), + KOREAN("Korean", "ko"), + NORWEGIAN("Norwegian", "no"), + POLISH("Polish", "pl"), + PORTUGUESE("Portugese", "pt"), + RUSSIAN("Russian", "ru"), + SPANISH("Spanish", "es"), + SWAHILI("Swahili", "sw"), + SWEDISH("Swedish", "sv"), + TURKISH("Turkish", "tr"); + + private final String name; + private final String value; + + private Language(String name, String value) + { + this.name = name; + this.value = value; + } + + public String getValue() + { + return value; + } + + @Override + public String toString() + { + return name; + } + + private static Language[] valuesWithoutAutoDetect() + { + Language[] allValues = values(); + Language[] valuesWithoutAuto = new Language[allValues.length - 1]; + System.arraycopy(allValues, 1, valuesWithoutAuto, 0, + valuesWithoutAuto.length); + return valuesWithoutAuto; + } + } +} From be6fd81e44353af627a55dd123e40917ef836709 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 00:52:58 +0200 Subject: [PATCH 085/109] Refactor ChatTranslator --- .../wurstclient/hacks/ChatTranslatorHack.java | 40 +++++++++---------- .../wurstclient/settings/LanguageSetting.java | 14 +++++++ 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index fd3c05ff..b7404dcb 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -7,7 +7,6 @@ */ package net.wurstclient.hacks; -import net.minecraft.text.Text; import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.ChatInputListener; @@ -24,19 +23,18 @@ import net.wurstclient.util.GoogleTranslate; "google translator", "GoogleTranslation", "google translation"}) public final class ChatTranslatorHack extends Hack implements ChatInputListener { - private final LanguageSetting langFrom = + private final LanguageSetting translateFrom = LanguageSetting.withAutoDetect("Translate from", Language.AUTO_DETECT); - private final LanguageSetting langTo = + private final LanguageSetting translateTo = LanguageSetting.withoutAutoDetect("Translate to", Language.ENGLISH); public ChatTranslatorHack() { super("ChatTranslator"); setCategory(Category.CHAT); - - addSetting(langFrom); - addSetting(langTo); + addSetting(translateFrom); + addSetting(translateTo); } @Override @@ -54,26 +52,26 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener @Override public void onReceivedMessage(ChatInputEvent event) { - Thread.ofVirtual().name("ChatTranslator") - .uncaughtExceptionHandler((t, e) -> e.printStackTrace()) - .start(() -> translate(event.getComponent().getString())); - } - - private void translate(String message) - { - String prefix = - "\u00a7a[\u00a7b" + langTo.getSelected() + "\u00a7a]:\u00a7r "; + String message = event.getComponent().getString(); + Language fromLang = translateFrom.getSelected(); + Language toLang = translateTo.getSelected(); if(message.startsWith(ChatUtils.WURST_PREFIX) - || message.startsWith(prefix)) + || message.startsWith(toLang.getPrefix())) return; + Thread.ofVirtual().name("ChatTranslator") + .uncaughtExceptionHandler((t, e) -> e.printStackTrace()) + .start(() -> showTranslated(message, fromLang, toLang)); + } + + private void showTranslated(String message, Language fromLang, + Language toLang) + { String translated = GoogleTranslate.translate(message, - langFrom.getSelected().getValue(), langTo.getSelected().getValue()); + fromLang.getValue(), toLang.getValue()); - if(translated == null) - return; - - MC.inGameHud.getChatHud().addMessage(Text.literal(prefix + translated)); + if(translated != null) + MC.inGameHud.getChatHud().addMessage(toLang.prefixText(translated)); } } diff --git a/src/main/java/net/wurstclient/settings/LanguageSetting.java b/src/main/java/net/wurstclient/settings/LanguageSetting.java index 3a133628..0dfb6144 100644 --- a/src/main/java/net/wurstclient/settings/LanguageSetting.java +++ b/src/main/java/net/wurstclient/settings/LanguageSetting.java @@ -7,6 +7,8 @@ */ package net.wurstclient.settings; +import net.minecraft.text.Text; + public final class LanguageSetting extends EnumSetting { private LanguageSetting(String name, String description, Language[] values, @@ -71,11 +73,13 @@ public final class LanguageSetting extends EnumSetting private final String name; private final String value; + private final String prefix; private Language(String name, String value) { this.name = name; this.value = value; + prefix = "\u00a7a[\u00a7b" + value + "\u00a7a]:\u00a7r "; } public String getValue() @@ -83,6 +87,16 @@ public final class LanguageSetting extends EnumSetting return value; } + public String getPrefix() + { + return prefix; + } + + public Text prefixText(String s) + { + return Text.literal(prefix + s); + } + @Override public String toString() { From a249372ac94e5c3d034bc56ab258381b17356583 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 14:49:14 +0200 Subject: [PATCH 086/109] Fix prefix --- src/main/java/net/wurstclient/settings/LanguageSetting.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/settings/LanguageSetting.java b/src/main/java/net/wurstclient/settings/LanguageSetting.java index 0dfb6144..626c7fa5 100644 --- a/src/main/java/net/wurstclient/settings/LanguageSetting.java +++ b/src/main/java/net/wurstclient/settings/LanguageSetting.java @@ -79,7 +79,7 @@ public final class LanguageSetting extends EnumSetting { this.name = name; this.value = value; - prefix = "\u00a7a[\u00a7b" + value + "\u00a7a]:\u00a7r "; + prefix = "\u00a7a[\u00a7b" + name + "\u00a7a]:\u00a7r "; } public String getValue() From 7b5749b1cbbe3974a516545c924d7cda3df7d03c Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 14:50:40 +0200 Subject: [PATCH 087/109] Add "Filter own messages" setting to ChatTranslatorHack --- .../wurstclient/hacks/ChatTranslatorHack.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index b7404dcb..9e0ac7bf 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -11,6 +11,7 @@ import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.ChatInputListener; import net.wurstclient.hack.Hack; +import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.LanguageSetting; import net.wurstclient.settings.LanguageSetting.Language; import net.wurstclient.util.ChatUtils; @@ -29,12 +30,21 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener private final LanguageSetting translateTo = LanguageSetting.withoutAutoDetect("Translate to", Language.ENGLISH); + private final CheckboxSetting filterOwnMessages = new CheckboxSetting( + "Filter own messages", + "Won't translate messages that appear to be sent by you.\n" + + "It tries to detect your messages based on common chat formats" + + " like \"\", \"[username]\", or \"username:\". This" + + " might not work correctly on some servers.", + true); + public ChatTranslatorHack() { super("ChatTranslator"); setCategory(Category.CHAT); addSetting(translateFrom); addSetting(translateTo); + addSetting(filterOwnMessages); } @Override @@ -60,11 +70,22 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener || message.startsWith(toLang.getPrefix())) return; + if(filterOwnMessages.isChecked() && isOwnMessage(message)) + return; + Thread.ofVirtual().name("ChatTranslator") .uncaughtExceptionHandler((t, e) -> e.printStackTrace()) .start(() -> showTranslated(message, fromLang, toLang)); } + private boolean isOwnMessage(String message) + { + String playerName = MC.getSession().getUsername(); + return message.startsWith("<" + playerName + ">") + || message.startsWith("[" + playerName + "]") + || message.startsWith(playerName + ":"); + } + private void showTranslated(String message, Language fromLang, Language toLang) { From 0736af357bc7440ca6480a85898f5cd5aa76cbae Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 15:18:55 +0200 Subject: [PATCH 088/109] Use regex to detect own messages in more formats --- .../net/wurstclient/hacks/ChatTranslatorHack.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index 9e0ac7bf..f72e9931 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -7,6 +7,8 @@ */ package net.wurstclient.hacks; +import java.util.regex.Pattern; + import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.ChatInputListener; @@ -80,10 +82,15 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener private boolean isOwnMessage(String message) { - String playerName = MC.getSession().getUsername(); - return message.startsWith("<" + playerName + ">") - || message.startsWith("[" + playerName + "]") - || message.startsWith(playerName + ":"); + // Escape username for regex + String playerName = Pattern.quote(MC.getSession().getUsername()); + + // Allow up to 2 ranks before the username + String rankPattern = "(?:\\[[^\\]]+\\] ?){0,2}"; + + // Build regex and check if it matches + String regex = "^" + rankPattern + "[<\\[]?" + playerName + "[>\\]:]"; + return Pattern.compile(regex).matcher(message).find(); } private void showTranslated(String message, Language fromLang, From 2ee6402c1a97ffb09db0ac46a7776dd1f8c90f1b Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 17:23:00 +0200 Subject: [PATCH 089/109] Cache own message pattern for better performance --- .../wurstclient/hacks/ChatTranslatorHack.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index f72e9931..db92042b 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -40,6 +40,9 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener + " might not work correctly on some servers.", true); + private Pattern ownMessagePattern; + private String lastUsername; + public ChatTranslatorHack() { super("ChatTranslator"); @@ -82,15 +85,22 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener private boolean isOwnMessage(String message) { - // Escape username for regex - String playerName = Pattern.quote(MC.getSession().getUsername()); + updateOwnMessagePattern(); + return ownMessagePattern.matcher(message).find(); + } + + private void updateOwnMessagePattern() + { + String username = MC.getSession().getUsername(); + if(username.equals(lastUsername)) + return; - // Allow up to 2 ranks before the username String rankPattern = "(?:\\[[^\\]]+\\] ?){0,2}"; + String namePattern = Pattern.quote(username); + String regex = "^" + rankPattern + "[<\\[]?" + namePattern + "[>\\]:]"; - // Build regex and check if it matches - String regex = "^" + rankPattern + "[<\\[]?" + playerName + "[>\\]:]"; - return Pattern.compile(regex).matcher(message).find(); + ownMessagePattern = Pattern.compile(regex); + lastUsername = username; } private void showTranslated(String message, Language fromLang, From 2bd08f5220ea0325646b72de49965017d20b574b Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 17:39:43 +0200 Subject: [PATCH 090/109] Create FilterOwnMessagesSetting to handle own message detection --- .../wurstclient/hacks/ChatTranslatorHack.java | 39 ++------------- .../FilterOwnMessagesSetting.java | 49 +++++++++++++++++++ 2 files changed, 54 insertions(+), 34 deletions(-) create mode 100644 src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index db92042b..f217defa 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -7,13 +7,11 @@ */ package net.wurstclient.hacks; -import java.util.regex.Pattern; - import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.ChatInputListener; import net.wurstclient.hack.Hack; -import net.wurstclient.settings.CheckboxSetting; +import net.wurstclient.hacks.chattranslator.FilterOwnMessagesSetting; import net.wurstclient.settings.LanguageSetting; import net.wurstclient.settings.LanguageSetting.Language; import net.wurstclient.util.ChatUtils; @@ -32,16 +30,8 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener private final LanguageSetting translateTo = LanguageSetting.withoutAutoDetect("Translate to", Language.ENGLISH); - private final CheckboxSetting filterOwnMessages = new CheckboxSetting( - "Filter own messages", - "Won't translate messages that appear to be sent by you.\n" - + "It tries to detect your messages based on common chat formats" - + " like \"\", \"[username]\", or \"username:\". This" - + " might not work correctly on some servers.", - true); - - private Pattern ownMessagePattern; - private String lastUsername; + private final FilterOwnMessagesSetting filterOwnMessages = + new FilterOwnMessagesSetting(); public ChatTranslatorHack() { @@ -75,7 +65,8 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener || message.startsWith(toLang.getPrefix())) return; - if(filterOwnMessages.isChecked() && isOwnMessage(message)) + if(filterOwnMessages.isChecked() + && filterOwnMessages.isOwnMessage(message)) return; Thread.ofVirtual().name("ChatTranslator") @@ -83,26 +74,6 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener .start(() -> showTranslated(message, fromLang, toLang)); } - private boolean isOwnMessage(String message) - { - updateOwnMessagePattern(); - return ownMessagePattern.matcher(message).find(); - } - - private void updateOwnMessagePattern() - { - String username = MC.getSession().getUsername(); - if(username.equals(lastUsername)) - return; - - String rankPattern = "(?:\\[[^\\]]+\\] ?){0,2}"; - String namePattern = Pattern.quote(username); - String regex = "^" + rankPattern + "[<\\[]?" + namePattern + "[>\\]:]"; - - ownMessagePattern = Pattern.compile(regex); - lastUsername = username; - } - private void showTranslated(String message, Language fromLang, Language toLang) { diff --git a/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java b/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java new file mode 100644 index 00000000..16f414fc --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2014-2024 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.chattranslator; + +import java.util.regex.Pattern; + +import net.wurstclient.WurstClient; +import net.wurstclient.settings.CheckboxSetting; + +public class FilterOwnMessagesSetting extends CheckboxSetting +{ + private Pattern ownMessagePattern; + private String lastUsername; + + public FilterOwnMessagesSetting() + { + super("Filter own messages", + "Won't translate messages that appear to be sent by you.\n" + + "It tries to detect your messages based on common chat formats" + + " like \"\", \"[username]\", or \"username:\". This" + + " might not work correctly on some servers.", + true); + } + + public boolean isOwnMessage(String message) + { + updateOwnMessagePattern(); + return ownMessagePattern.matcher(message).find(); + } + + private void updateOwnMessagePattern() + { + String username = WurstClient.MC.getSession().getUsername(); + if(username.equals(lastUsername)) + return; + + String rankPattern = "(?:\\[[^\\]]+\\] ?){0,2}"; + String namePattern = Pattern.quote(username); + String regex = "^" + rankPattern + "[<\\[]?" + namePattern + "[>\\]:]"; + + ownMessagePattern = Pattern.compile(regex); + lastUsername = username; + } +} From dbe6cc78d2d0a6ea8b0e77c22fa5c2788f63c2aa Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 17:44:56 +0200 Subject: [PATCH 091/109] Move all ChatTranslator-related classes to ChatTranslator package --- src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java | 6 +++--- .../{util => hacks/chattranslator}/GoogleTranslate.java | 2 +- .../{settings => hacks/chattranslator}/LanguageSetting.java | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) rename src/main/java/net/wurstclient/{util => hacks/chattranslator}/GoogleTranslate.java (95%) rename src/main/java/net/wurstclient/{settings => hacks/chattranslator}/LanguageSetting.java (93%) diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index f217defa..7ae83ab9 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -12,10 +12,10 @@ import net.wurstclient.SearchTags; import net.wurstclient.events.ChatInputListener; import net.wurstclient.hack.Hack; import net.wurstclient.hacks.chattranslator.FilterOwnMessagesSetting; -import net.wurstclient.settings.LanguageSetting; -import net.wurstclient.settings.LanguageSetting.Language; +import net.wurstclient.hacks.chattranslator.GoogleTranslate; +import net.wurstclient.hacks.chattranslator.LanguageSetting; +import net.wurstclient.hacks.chattranslator.LanguageSetting.Language; import net.wurstclient.util.ChatUtils; -import net.wurstclient.util.GoogleTranslate; @SearchTags({"chat translator", "ChatTranslate", "chat translate", "ChatTranslation", "chat translation", "AutoTranslate", "auto translate", diff --git a/src/main/java/net/wurstclient/util/GoogleTranslate.java b/src/main/java/net/wurstclient/hacks/chattranslator/GoogleTranslate.java similarity index 95% rename from src/main/java/net/wurstclient/util/GoogleTranslate.java rename to src/main/java/net/wurstclient/hacks/chattranslator/GoogleTranslate.java index 30f78a75..206634b0 100644 --- a/src/main/java/net/wurstclient/util/GoogleTranslate.java +++ b/src/main/java/net/wurstclient/hacks/chattranslator/GoogleTranslate.java @@ -5,7 +5,7 @@ * 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; +package net.wurstclient.hacks.chattranslator; import java.io.BufferedReader; import java.io.IOException; diff --git a/src/main/java/net/wurstclient/settings/LanguageSetting.java b/src/main/java/net/wurstclient/hacks/chattranslator/LanguageSetting.java similarity index 93% rename from src/main/java/net/wurstclient/settings/LanguageSetting.java rename to src/main/java/net/wurstclient/hacks/chattranslator/LanguageSetting.java index 626c7fa5..fab2553f 100644 --- a/src/main/java/net/wurstclient/settings/LanguageSetting.java +++ b/src/main/java/net/wurstclient/hacks/chattranslator/LanguageSetting.java @@ -5,9 +5,10 @@ * 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; +package net.wurstclient.hacks.chattranslator; import net.minecraft.text.Text; +import net.wurstclient.settings.EnumSetting; public final class LanguageSetting extends EnumSetting { From 47443a815a607c78183291702845707025ad4e4d Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 18:45:36 +0200 Subject: [PATCH 092/109] Improve detection of unchanged translated text --- .../hacks/chattranslator/GoogleTranslate.java | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/chattranslator/GoogleTranslate.java b/src/main/java/net/wurstclient/hacks/chattranslator/GoogleTranslate.java index 206634b0..705004e9 100644 --- a/src/main/java/net/wurstclient/hacks/chattranslator/GoogleTranslate.java +++ b/src/main/java/net/wurstclient/hacks/chattranslator/GoogleTranslate.java @@ -16,6 +16,7 @@ import java.net.URI; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; +import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -23,15 +24,45 @@ public enum GoogleTranslate { ; - private static final Pattern ALL_WHITESPACE = Pattern.compile("\\s+"); + private static final HashMap simplifyMap; + static + { + simplifyMap = new HashMap<>(); + simplifyMap.put(' ', ""); + simplifyMap.put('\r', ""); + simplifyMap.put('\n', ""); + simplifyMap.put('\t', ""); + simplifyMap.put('ä', "a"); + simplifyMap.put('ö', "o"); + simplifyMap.put('ü', "u"); + simplifyMap.put('á', "a"); + simplifyMap.put('é', "e"); + simplifyMap.put('í', "i"); + simplifyMap.put('ó', "o"); + simplifyMap.put('ú', "u"); + simplifyMap.put('à', "a"); + simplifyMap.put('è', "e"); + simplifyMap.put('ì', "i"); + simplifyMap.put('ò', "o"); + simplifyMap.put('ù', "u"); + simplifyMap.put('â', "a"); + simplifyMap.put('ê', "e"); + simplifyMap.put('î', "i"); + simplifyMap.put('ô', "o"); + simplifyMap.put('û', "u"); + simplifyMap.put('ã', "a"); + simplifyMap.put('õ', "o"); + simplifyMap.put('ñ', "n"); + simplifyMap.put('ç', "c"); + } public static String translate(String text, String langFrom, String langTo) { String html = getHTML(text, langFrom, langTo); String translated = parseHTML(html); - // Detect if Google translate returned the original text, maybe with - // some whitespace or capitalization changes, and return null if so + // Return null if Google Translate just returned the original text, + // ignoring capitalization changes, whitespace, and broken characters if(simplify(text).equals(simplify(translated))) return null; @@ -114,6 +145,10 @@ public enum GoogleTranslate private static String simplify(String text) { - return ALL_WHITESPACE.matcher(text).replaceAll("").toLowerCase(); + StringBuilder sb = new StringBuilder(); + for(char c : text.toLowerCase().toCharArray()) + sb.append(simplifyMap.getOrDefault(c, String.valueOf(c))); + + return sb.toString(); } } From f41e49d5073a29e4a5b0c9e681b4c3e7b7e88fb5 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 22:03:15 +0200 Subject: [PATCH 093/109] Make ChatTranslator also work for sent messages Fixes #320 Fixes #1021 Fixes https://wurstforum.net/d/602 --- .../wurstclient/hacks/ChatTranslatorHack.java | 96 +++++++++++++++++-- .../WhatToTranslateSetting.java | 54 +++++++++++ .../assets/wurst/translations/cs_cz.json | 2 +- .../assets/wurst/translations/de_de.json | 2 +- .../assets/wurst/translations/en_us.json | 2 +- .../assets/wurst/translations/fr_fr.json | 2 +- .../assets/wurst/translations/ja_jp.json | 2 +- .../assets/wurst/translations/pl_pl.json | 2 +- .../assets/wurst/translations/ro_ro.json | 2 +- .../assets/wurst/translations/uk_ua.json | 2 +- 10 files changed, 149 insertions(+), 17 deletions(-) create mode 100644 src/main/java/net/wurstclient/hacks/chattranslator/WhatToTranslateSetting.java diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index 7ae83ab9..cb9d0ac0 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -10,11 +10,14 @@ package net.wurstclient.hacks; import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.ChatInputListener; +import net.wurstclient.events.ChatOutputListener; import net.wurstclient.hack.Hack; import net.wurstclient.hacks.chattranslator.FilterOwnMessagesSetting; import net.wurstclient.hacks.chattranslator.GoogleTranslate; import net.wurstclient.hacks.chattranslator.LanguageSetting; import net.wurstclient.hacks.chattranslator.LanguageSetting.Language; +import net.wurstclient.hacks.chattranslator.WhatToTranslateSetting; +import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.util.ChatUtils; @SearchTags({"chat translator", "ChatTranslate", "chat translate", @@ -22,13 +25,46 @@ import net.wurstclient.util.ChatUtils; "AutoTranslator", "auto translator", "AutoTranslation", "auto translation", "GoogleTranslate", "google translate", "GoogleTranslator", "google translator", "GoogleTranslation", "google translation"}) -public final class ChatTranslatorHack extends Hack implements ChatInputListener +public final class ChatTranslatorHack extends Hack + implements ChatInputListener, ChatOutputListener { - private final LanguageSetting translateFrom = - LanguageSetting.withAutoDetect("Translate from", Language.AUTO_DETECT); + private final WhatToTranslateSetting whatToTranslate = + new WhatToTranslateSetting(); - private final LanguageSetting translateTo = - LanguageSetting.withoutAutoDetect("Translate to", Language.ENGLISH); + private final LanguageSetting playerLanguage = + LanguageSetting.withoutAutoDetect("Your language", + "The main language that you can use and understand.\n\n" + + "Your received messages will always be translated into this" + + " language (if enabled).\n\n" + + "When \"Detect sent language\" is turned off, all" + + " sent messages are assumed to be in this language.", + Language.ENGLISH); + + private final LanguageSetting otherLanguage = + LanguageSetting.withoutAutoDetect("Other language", + "The main language used by other players on the server.\n\n" + + "Your sent messages will always be translated into this" + + " language (if enabled).\n\n" + + "When \"Detect received language\" is turned off, all" + + " received messages are assumed to be in this language.", + Language.CHINESE_SIMPLIFIED); + + private final CheckboxSetting autoDetectReceived = + new CheckboxSetting("Detect received language", + "Automatically detect the language of received messages.\n\n" + + "Useful if other players are using a mix of different" + + " languages.\n\n" + + "If everyone is using the same language, turning this off" + + " can improve accuracy.", + true); + + private final CheckboxSetting autoDetectSent = + new CheckboxSetting("Detect sent language", + "Automatically detect the language of sent messages.\n\n" + + "Useful if you're using a mix of different languages.\n\n" + + "If you're always using the same language, turning this off" + + " can improve accuracy.", + true); private final FilterOwnMessagesSetting filterOwnMessages = new FilterOwnMessagesSetting(); @@ -37,8 +73,11 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener { super("ChatTranslator"); setCategory(Category.CHAT); - addSetting(translateFrom); - addSetting(translateTo); + addSetting(whatToTranslate); + addSetting(playerLanguage); + addSetting(otherLanguage); + addSetting(autoDetectReceived); + addSetting(autoDetectSent); addSetting(filterOwnMessages); } @@ -46,20 +85,26 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener protected void onEnable() { EVENTS.add(ChatInputListener.class, this); + EVENTS.add(ChatOutputListener.class, this); } @Override protected void onDisable() { EVENTS.remove(ChatInputListener.class, this); + EVENTS.remove(ChatOutputListener.class, this); } @Override public void onReceivedMessage(ChatInputEvent event) { + if(!whatToTranslate.includesReceived()) + return; + String message = event.getComponent().getString(); - Language fromLang = translateFrom.getSelected(); - Language toLang = translateTo.getSelected(); + Language fromLang = autoDetectReceived.isChecked() + ? Language.AUTO_DETECT : otherLanguage.getSelected(); + Language toLang = playerLanguage.getSelected(); if(message.startsWith(ChatUtils.WURST_PREFIX) || message.startsWith(toLang.getPrefix())) @@ -83,4 +128,37 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener if(translated != null) MC.inGameHud.getChatHud().addMessage(toLang.prefixText(translated)); } + + @Override + public void onSentMessage(ChatOutputEvent event) + { + if(!whatToTranslate.includesSent()) + return; + + String message = event.getMessage(); + Language fromLang = autoDetectSent.isChecked() ? Language.AUTO_DETECT + : playerLanguage.getSelected(); + Language toLang = otherLanguage.getSelected(); + + if(message.startsWith("/") || message.startsWith(".")) + return; + + event.cancel(); + + Thread.ofVirtual().name("ChatTranslator") + .uncaughtExceptionHandler((t, e) -> e.printStackTrace()) + .start(() -> sendTranslated(message, fromLang, toLang)); + } + + private void sendTranslated(String message, Language fromLang, + Language toLang) + { + String translated = GoogleTranslate.translate(message, + fromLang.getValue(), toLang.getValue()); + + if(translated == null) + translated = message; + + MC.getNetworkHandler().sendChatMessage(translated); + } } diff --git a/src/main/java/net/wurstclient/hacks/chattranslator/WhatToTranslateSetting.java b/src/main/java/net/wurstclient/hacks/chattranslator/WhatToTranslateSetting.java new file mode 100644 index 00000000..bb83cd56 --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/chattranslator/WhatToTranslateSetting.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2014-2024 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.chattranslator; + +import net.wurstclient.settings.EnumSetting; + +public final class WhatToTranslateSetting + extends EnumSetting +{ + public WhatToTranslateSetting() + { + super("Translate", "", WhatToTranslate.values(), + WhatToTranslate.RECEIVED_MESSAGES); + } + + public boolean includesReceived() + { + return getSelected().received; + } + + public boolean includesSent() + { + return getSelected().sent; + } + + public enum WhatToTranslate + { + RECEIVED_MESSAGES("Received messages", true, false), + SENT_MESSAGES("Sent messages", false, true), + BOTH("Both", true, true); + + private final String name; + private final boolean received; + private final boolean sent; + + private WhatToTranslate(String name, boolean received, boolean sent) + { + this.name = name; + this.received = received; + this.sent = sent; + } + + @Override + public String toString() + { + return name; + } + } +} diff --git a/src/main/resources/assets/wurst/translations/cs_cz.json b/src/main/resources/assets/wurst/translations/cs_cz.json index 02a6acae..718f2c1f 100644 --- a/src/main/resources/assets/wurst/translations/cs_cz.json +++ b/src/main/resources/assets/wurst/translations/cs_cz.json @@ -51,7 +51,7 @@ "description.wurst.hack.cameradistance": "Umožňuje změnit vzdálenost kamery ve 3. osobě.", "description.wurst.hack.cameranoclip": "Umožňuje kameře ve třetí osobě procházet zdmi.", "description.wurst.hack.cavefinder": "Pomáhá najít jeskyně tím, že je zvýrazní vybranou barvou.", - "description.wurst.hack.chattranslator": "Překládá příchozí zprávy v chatu pomocí Google Translate.", + "description.wurst.hack.chattranslator": "Překládá zprávy v chatu pomocí Google Translate.", "description.wurst.hack.chestesp": "Zvýrazní okolní truhly.", "description.wurst.hack.clickaura": "S každým kliknutím automaticky zaútočí na nejbližší platnou entitu.\n\n§c§lWAROVÁNÍ:§r ClickAury sjou obecně podezřelejší než Killaury a jsou i snadněji rozpoznatelné pro pluginy. Doporučuje se namísto nich používat buďto Killauru, či TriggerBota.", "description.wurst.hack.clickgui": "Okenní rozhraní ClickGUI.", diff --git a/src/main/resources/assets/wurst/translations/de_de.json b/src/main/resources/assets/wurst/translations/de_de.json index 0c95e32b..203a4eea 100644 --- a/src/main/resources/assets/wurst/translations/de_de.json +++ b/src/main/resources/assets/wurst/translations/de_de.json @@ -54,7 +54,7 @@ "description.wurst.hack.cameradistance": "Ermöglicht dir, den Kamera-Abstand in der 3rd-Person-Ansicht zu ändern.", "description.wurst.hack.cameranoclip": "Ermöglicht der Kamera in der 3rd-Person-Ansicht, durch Wände zu gehen.", "description.wurst.hack.cavefinder": "Markiert Höhlen in der ausgewählten Farbe, sodass du sie leichter finden kannst.", - "description.wurst.hack.chattranslator": "Übersetzt eingehende Chat-Nachrichten mit dem Google-Übersetzer.", + "description.wurst.hack.chattranslator": "Übersetzt Chat-Nachrichten mit dem Google-Übersetzer.", "description.wurst.hack.chestesp": "Markiert Kisten in deiner Umgebung.", "description.wurst.hack.clickaura": "Greift bei jedem Mausklick automatisch den nächsten Mob oder Spieler an.\n\n§c§lWARNUNG:§r ClickAuras sind generell auffälliger als Killauras und für Plugins leichter zu erkennen. Es ist empfohlen, statt ClickAura Killaura oder TriggerBot zu benutzen.", "description.wurst.hack.clickgui": "Fenster-basierte ClickGUI.", diff --git a/src/main/resources/assets/wurst/translations/en_us.json b/src/main/resources/assets/wurst/translations/en_us.json index 637dd949..589c1fe2 100644 --- a/src/main/resources/assets/wurst/translations/en_us.json +++ b/src/main/resources/assets/wurst/translations/en_us.json @@ -73,7 +73,7 @@ "description.wurst.hack.cameradistance": "Allows you to change the camera distance in 3rd person.", "description.wurst.hack.cameranoclip": "Allows the camera in 3rd person to go through walls.", "description.wurst.hack.cavefinder": "Helps you to find caves by highlighting them in the selected color.", - "description.wurst.hack.chattranslator": "Translates incoming chat messages using Google Translate.", + "description.wurst.hack.chattranslator": "Translates chat messages using Google Translate.", "description.wurst.hack.chestesp": "Highlights nearby chests.", "description.wurst.hack.clickaura": "Automatically attacks the closest valid entity whenever you click.\n\n§c§lWARNING:§r ClickAuras generally look more suspicious than Killauras and are easier for plugins to detect. It is recommended to use Killaura or TriggerBot instead.", "description.wurst.hack.clickgui": "Window-based ClickGUI.", diff --git a/src/main/resources/assets/wurst/translations/fr_fr.json b/src/main/resources/assets/wurst/translations/fr_fr.json index 23314663..1468dd72 100644 --- a/src/main/resources/assets/wurst/translations/fr_fr.json +++ b/src/main/resources/assets/wurst/translations/fr_fr.json @@ -48,7 +48,7 @@ "description.wurst.hack.bunnyhop": "Vous fait sauter automatiquement.", "description.wurst.hack.cameranoclip": "Permet à la caméra à la 3ème personne de traverser les murs.", "description.wurst.hack.cavefinder": "Vous aide à trouver des grottes en les mettant en surbrillance dans la couleur sélectionnée.", - "description.wurst.hack.chattranslator": "Traduit les messages de chat entrants à l'aide de Google Traduction.", + "description.wurst.hack.chattranslator": "Traduit les messages de chat à l'aide de Google Traduction.", "description.wurst.hack.chestesp": "Met en évidence les coffres à proximité.", "description.wurst.hack.clickaura": "Attaque automatiquement l'entité valide la plus proche chaque fois que vous cliquez.\n\n§c§lATTENTION:§r ClickAuras semble généralement plus suspect que Killauras et est plus facile à détecter pour les plugins. Il est recommandé d'utiliser Killaura ou TriggerBot à la place.", "description.wurst.hack.clickgui": "ClickGUI basé sur une fenêtre.", diff --git a/src/main/resources/assets/wurst/translations/ja_jp.json b/src/main/resources/assets/wurst/translations/ja_jp.json index d8606d22..bc254930 100644 --- a/src/main/resources/assets/wurst/translations/ja_jp.json +++ b/src/main/resources/assets/wurst/translations/ja_jp.json @@ -56,7 +56,7 @@ "description.wurst.hack.cameradistance": "3人称視点でカメラとプレイヤーの距離が変更できるようになる。", "description.wurst.hack.cameranoclip": "三人称視点のカメラがブロックを貫通するようになる。", "description.wurst.hack.cavefinder": "洞窟を選択した色でハイライト表示し、探しやすくする。", - "description.wurst.hack.chattranslator": "受信したメッセージをGoogle翻訳で翻訳する。", + "description.wurst.hack.chattranslator": "チャットメッセージをGoogle翻訳で翻訳する。", "description.wurst.hack.chestesp": "付近のチェストをハイライト表示する。", "description.wurst.hack.clickaura": "クリックすると、自動で一番近い有効なエンティティを攻撃する。\n\n§c§l注意: §rClickAuraはKillauraよりも怪しまれやすく、かつPluginに検知されやすいため、代わりにKillauraやTriggerBotの使用を推奨する。", "description.wurst.hack.clickgui": "ウィンドウタイプのClickGUI。", diff --git a/src/main/resources/assets/wurst/translations/pl_pl.json b/src/main/resources/assets/wurst/translations/pl_pl.json index fd68108e..c370dd75 100644 --- a/src/main/resources/assets/wurst/translations/pl_pl.json +++ b/src/main/resources/assets/wurst/translations/pl_pl.json @@ -51,7 +51,7 @@ "description.wurst.hack.cameradistance": "Pozwala zmienić odległość kamery w trzeciej osobie.", "description.wurst.hack.cameranoclip": "Umożliwia kamerze trzecio-osobowej na przenikanie przez ściany.", "description.wurst.hack.cavefinder": "Pomaga znaleźć jaskinie, podświetlając je wybranym kolorem.", - "description.wurst.hack.chattranslator": "Tłumaczy przychodzące wiadomości z czatu za pomocą Tłumacza Google.", + "description.wurst.hack.chattranslator": "Tłumaczy wiadomości z czatu za pomocą Tłumacza Google.", "description.wurst.hack.chestesp": "Podświetla pobliskie skrzynie.", "description.wurst.hack.clickaura": "Automatycznie atakuje najbliższy prawidłowy byt za każdym razem, gdy klikniesz.\n\n§c§lOSTRZEŻENIE:§r ClickAury generalnie wyglądają bardziej podejrzanie niż Killaury i są łatwiejsze do wykrycia przez pluginy. Zamiast tego zaleca się użycie Killaury lub TriggerBota.", "description.wurst.hack.clickgui": "ClickGUI oparty na okienkach.", diff --git a/src/main/resources/assets/wurst/translations/ro_ro.json b/src/main/resources/assets/wurst/translations/ro_ro.json index 9d448805..5aaa6c16 100644 --- a/src/main/resources/assets/wurst/translations/ro_ro.json +++ b/src/main/resources/assets/wurst/translations/ro_ro.json @@ -48,7 +48,7 @@ "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.chattranslator": "Traduce mesajele din 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.", diff --git a/src/main/resources/assets/wurst/translations/uk_ua.json b/src/main/resources/assets/wurst/translations/uk_ua.json index c82b1931..19e19b42 100644 --- a/src/main/resources/assets/wurst/translations/uk_ua.json +++ b/src/main/resources/assets/wurst/translations/uk_ua.json @@ -47,7 +47,7 @@ "description.wurst.hack.bunnyhop": "Примушує вас постійно стрибати.", "description.wurst.hack.cameranoclip": "Дозволяє камеру від 3-ї особи пройти через стіни.", "description.wurst.hack.cavefinder": "Допомагає знайти печери, підсвічуючи їх вибраним кольором.", - "description.wurst.hack.chattranslator": "Всі вхідні повідомлення в чаті будуть перекладатися Google перекладачем.", + "description.wurst.hack.chattranslator": "Перекладає повідомлення в чаті за допомогою Google перекладача.", "description.wurst.hack.chestesp": "Підсвічує вибраним кольором скрині поблизу.", "description.wurst.hack.clickaura": "Автоматично атакує найближчу сутність, коли ви натискаєте ЛКМ.\n\n§c§lУВАГА:§r ClickAura'и звичайно виглядають більш підозріло, ніж Killaura'и і легше виявляються плагінами. Краще використовувати Killaura або TriggerBot.", "description.wurst.hack.clickgui": "Інтерфейс із панелями.", From 79cad3cb6503a57462fc1106bf929752290e262e Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 22:07:39 +0200 Subject: [PATCH 094/109] Improve FilterOwnMessagesSetting description --- .../hacks/chattranslator/FilterOwnMessagesSetting.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java b/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java index 16f414fc..e9cb4789 100644 --- a/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java +++ b/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java @@ -20,10 +20,10 @@ public class FilterOwnMessagesSetting extends CheckboxSetting public FilterOwnMessagesSetting() { super("Filter own messages", - "Won't translate messages that appear to be sent by you.\n" + "Won't translate messages that appear to be sent by you.\n\n" + "It tries to detect your messages based on common chat formats" - + " like \"\", \"[username]\", or \"username:\". This" - + " might not work correctly on some servers.", + + " like \"\", \"[name]\", or \"name:\". This might not" + + " work correctly on some servers.", true); } From f88f15b1bfa8caaa4a9ed8068d34399fa9329ab8 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 23 Jul 2024 10:56:42 +0200 Subject: [PATCH 095/109] Make ChatTranslator setting descriptions translatable --- .../wurstclient/hacks/ChatTranslatorHack.java | 28 ++++--------------- .../FilterOwnMessagesSetting.java | 5 +--- .../assets/wurst/translations/de_de.json | 5 ++++ .../assets/wurst/translations/en_us.json | 5 ++++ 4 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index cb9d0ac0..2e80bc4e 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -33,38 +33,22 @@ public final class ChatTranslatorHack extends Hack private final LanguageSetting playerLanguage = LanguageSetting.withoutAutoDetect("Your language", - "The main language that you can use and understand.\n\n" - + "Your received messages will always be translated into this" - + " language (if enabled).\n\n" - + "When \"Detect sent language\" is turned off, all" - + " sent messages are assumed to be in this language.", + "description.wurst.setting.chattranslator.your_language", Language.ENGLISH); private final LanguageSetting otherLanguage = LanguageSetting.withoutAutoDetect("Other language", - "The main language used by other players on the server.\n\n" - + "Your sent messages will always be translated into this" - + " language (if enabled).\n\n" - + "When \"Detect received language\" is turned off, all" - + " received messages are assumed to be in this language.", + "description.wurst.setting.chattranslator.other_language", Language.CHINESE_SIMPLIFIED); private final CheckboxSetting autoDetectReceived = new CheckboxSetting("Detect received language", - "Automatically detect the language of received messages.\n\n" - + "Useful if other players are using a mix of different" - + " languages.\n\n" - + "If everyone is using the same language, turning this off" - + " can improve accuracy.", + "description.wurst.setting.chattranslator.detect_received_language", true); - private final CheckboxSetting autoDetectSent = - new CheckboxSetting("Detect sent language", - "Automatically detect the language of sent messages.\n\n" - + "Useful if you're using a mix of different languages.\n\n" - + "If you're always using the same language, turning this off" - + " can improve accuracy.", - true); + private final CheckboxSetting autoDetectSent = new CheckboxSetting( + "Detect sent language", + "description.wurst.setting.chattranslator.detect_sent_language", true); private final FilterOwnMessagesSetting filterOwnMessages = new FilterOwnMessagesSetting(); diff --git a/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java b/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java index e9cb4789..7cbc3d53 100644 --- a/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java +++ b/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java @@ -20,10 +20,7 @@ public class FilterOwnMessagesSetting extends CheckboxSetting public FilterOwnMessagesSetting() { super("Filter own messages", - "Won't translate messages that appear to be sent by you.\n\n" - + "It tries to detect your messages based on common chat formats" - + " like \"\", \"[name]\", or \"name:\". This might not" - + " work correctly on some servers.", + "description.wurst.setting.chattranslator.filter_own_messages", true); } diff --git a/src/main/resources/assets/wurst/translations/de_de.json b/src/main/resources/assets/wurst/translations/de_de.json index 203a4eea..0ffc549a 100644 --- a/src/main/resources/assets/wurst/translations/de_de.json +++ b/src/main/resources/assets/wurst/translations/de_de.json @@ -55,6 +55,11 @@ "description.wurst.hack.cameranoclip": "Ermöglicht der Kamera in der 3rd-Person-Ansicht, durch Wände zu gehen.", "description.wurst.hack.cavefinder": "Markiert Höhlen in der ausgewählten Farbe, sodass du sie leichter finden kannst.", "description.wurst.hack.chattranslator": "Übersetzt Chat-Nachrichten mit dem Google-Übersetzer.", + "description.wurst.setting.chattranslator.your_language": "Die Sprache, die du am besten verstehen kannst.\n\nDeine empfangenen Nachrichten werden immer in diese Sprache übersetzt (falls aktiviert).\n\nWenn \"Detect sent language\" ausgeschaltet ist, geht der Übersetzer davon aus, dass alle von dir gesendeten Nachrichten in dieser Sprache sind.", + "description.wurst.setting.chattranslator.other_language": "Die Sprache, die von anderen Spielern auf dem Server am meisten benutzt wird.\n\nDeine gesendeten Nachrichten werden immer in diese Sprache übersetzt (falls aktiviert).\n\nWenn \"Detect received language\" ausgeschaltet ist, geht der Übersetzer davon aus, dass alle empfangenen Nachrichten in dieser Sprache sind.", + "description.wurst.setting.chattranslator.detect_received_language": "Erkennt automatisch die Sprache von empfangenen Nachrichten.\n\nNützlich, wenn andere Spieler eine Mischung verschiedener Sprachen benutzen.\n\nWenn alle die gleiche Sprache benutzen, kannst du diese Einstellung ausschalten, um die Genauigkeit der Übersetzungen zu verbessern.", + "description.wurst.setting.chattranslator.detect_sent_language": "Erkennt automatisch die Sprache von gesendeten Nachrichten.\n\nNützlich, wenn du eine Mischung verschiedener Sprachen benutzt.\n\nWenn du immer die gleiche Sprache benutzt, kannst du diese Einstellung ausschalten, um die Genauigkeit der Übersetzungen zu verbessern.", + "description.wurst.setting.chattranslator.filter_own_messages": "Übersetzt keine empfangenen Nachrichten, die so aussehen, als ob sie von dir selbst gesendet wurden.\n\nChatTranslator versucht, deine eigenen Nachrichten anhand gängiger Chat-Formate wie \"\", \"[Name]\" oder \"Name:\" zu erkennen. Auf manchen Servern funktioniert das eventuell nicht richtig.", "description.wurst.hack.chestesp": "Markiert Kisten in deiner Umgebung.", "description.wurst.hack.clickaura": "Greift bei jedem Mausklick automatisch den nächsten Mob oder Spieler an.\n\n§c§lWARNUNG:§r ClickAuras sind generell auffälliger als Killauras und für Plugins leichter zu erkennen. Es ist empfohlen, statt ClickAura Killaura oder TriggerBot zu benutzen.", "description.wurst.hack.clickgui": "Fenster-basierte ClickGUI.", diff --git a/src/main/resources/assets/wurst/translations/en_us.json b/src/main/resources/assets/wurst/translations/en_us.json index 589c1fe2..04f6f3f8 100644 --- a/src/main/resources/assets/wurst/translations/en_us.json +++ b/src/main/resources/assets/wurst/translations/en_us.json @@ -74,6 +74,11 @@ "description.wurst.hack.cameranoclip": "Allows the camera in 3rd person to go through walls.", "description.wurst.hack.cavefinder": "Helps you to find caves by highlighting them in the selected color.", "description.wurst.hack.chattranslator": "Translates chat messages using Google Translate.", + "description.wurst.setting.chattranslator.your_language": "The main language that you can use and understand.\n\nYour received messages will always be translated into this language (if enabled).\n\nWhen \"Detect sent language\" is turned off, all sent messages are assumed to be in this language.", + "description.wurst.setting.chattranslator.other_language": "The main language used by other players on the server.\n\nYour sent messages will always be translated into this language (if enabled).\n\nWhen \"Detect received language\" is turned off, all received messages are assumed to be in this language.", + "description.wurst.setting.chattranslator.detect_received_language": "Automatically detect the language of received messages.\n\nUseful if other players are using a mix of different languages.\n\nIf everyone is using the same language, turning this off can improve accuracy.", + "description.wurst.setting.chattranslator.detect_sent_language": "Automatically detect the language of sent messages.\n\nUseful if you're using a mix of different languages.\n\nIf you're always using the same language, turning this off can improve accuracy.", + "description.wurst.setting.chattranslator.filter_own_messages": "Won't translate messages that appear to be sent by you.\n\nIt tries to detect your messages based on common chat formats like \"\", \"[name]\", or \"name:\". This might not work correctly on some servers.", "description.wurst.hack.chestesp": "Highlights nearby chests.", "description.wurst.hack.clickaura": "Automatically attacks the closest valid entity whenever you click.\n\n§c§lWARNING:§r ClickAuras generally look more suspicious than Killauras and are easier for plugins to detect. It is recommended to use Killaura or TriggerBot instead.", "description.wurst.hack.clickgui": "Window-based ClickGUI.", From 23a149c015ccfe46a5f19b1251e447f074d71897 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 23 Jul 2024 14:28:37 +0200 Subject: [PATCH 096/109] Update Fabric API --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6f0a84bb..2c49f6ab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ yarn_mappings=1.21+build.9 loader_version=0.15.11 # Fabric API -fabric_version=0.100.6+1.21 +fabric_version=0.100.7+1.21 # Mod Properties mod_version = v7.45pre1-MC1.21 From fad99db20b286d5330eff70470e9e207e3465f6b Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 26 Jul 2024 19:13:52 +0200 Subject: [PATCH 097/109] Add "Ignore mouse input" setting to AimAssistHack --- .../java/net/wurstclient/hacks/AimAssistHack.java | 14 ++++++++++++-- .../resources/assets/wurst/translations/en_us.json | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AimAssistHack.java b/src/main/java/net/wurstclient/hacks/AimAssistHack.java index 4b883b4c..35b21e01 100644 --- a/src/main/java/net/wurstclient/hacks/AimAssistHack.java +++ b/src/main/java/net/wurstclient/hacks/AimAssistHack.java @@ -45,6 +45,11 @@ public final class AimAssistHack extends Hack private final AimAtSetting aimAt = new AimAtSetting( "What point in the target's hitbox AimAssist should aim at."); + private final SliderSetting ignoreMouseInput = + new SliderSetting("Ignore mouse input", + "description.wurst.setting.aimassist.ignore_mouse_input", 0, 0, 1, + 0.01, ValueDisplay.PERCENTAGE); + private final CheckboxSetting checkLOS = new CheckboxSetting("Check line of sight", "description.wurst.setting.aimassist.check_line_of_sight", true); @@ -95,6 +100,7 @@ public final class AimAssistHack extends Hack addSetting(rotationSpeed); addSetting(fov); addSetting(aimAt); + addSetting(ignoreMouseInput); addSetting(checkLOS); addSetting(aimWhileBlocking); @@ -201,7 +207,11 @@ public final class AimAssistHack extends Hack diffPitch = nextPitch < curPitch ? -1 : 1; } - event.setDeltaX(event.getDefaultDeltaX() + diffYaw); - event.setDeltaY(event.getDefaultDeltaY() + diffPitch); + double inputFactor = 1 - ignoreMouseInput.getValue(); + int mouseInputX = (int)(event.getDefaultDeltaX() * inputFactor); + int mouseInputY = (int)(event.getDefaultDeltaY() * inputFactor); + + event.setDeltaX(mouseInputX + diffYaw); + event.setDeltaY(mouseInputY + diffPitch); } } diff --git a/src/main/resources/assets/wurst/translations/en_us.json b/src/main/resources/assets/wurst/translations/en_us.json index 04f6f3f8..1d8202ae 100644 --- a/src/main/resources/assets/wurst/translations/en_us.json +++ b/src/main/resources/assets/wurst/translations/en_us.json @@ -1,6 +1,7 @@ { "description.wurst.hack.aimassist": "Helps you aim at nearby entities.", "description.wurst.setting.aimassist.fov": "Field Of View - how far away from your crosshair an entity can be before it's ignored.\n360° = aims at entities all around you.", + "description.wurst.setting.aimassist.ignore_mouse_input": "Ignores some of your mouse input while AimAssist is aiming. This makes it harder for you to accidentally aim away from the target.", "description.wurst.setting.aimassist.check_line_of_sight": "Won't aim at entities behind blocks.", "description.wurst.setting.aimassist.aim_while_blocking": "Keeps aiming at entities while you're blocking with a shield or using items.", "description.wurst.hack.airplace": "Allows you to place blocks in mid-air.", From 2603692755bbfca6434e0ac003f1b94bf327dc40 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 30 Jul 2024 09:20:16 +0200 Subject: [PATCH 098/109] Fix AutoArmor trying to equip horse/wolf armor --- src/main/java/net/wurstclient/hacks/AutoArmorHack.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/AutoArmorHack.java b/src/main/java/net/wurstclient/hacks/AutoArmorHack.java index 964b04f3..8cc5edb1 100644 --- a/src/main/java/net/wurstclient/hacks/AutoArmorHack.java +++ b/src/main/java/net/wurstclient/hacks/AutoArmorHack.java @@ -19,6 +19,7 @@ import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.AnimalArmorItem; import net.minecraft.item.ArmorItem; import net.minecraft.item.ArmorItem.Type; import net.minecraft.item.ItemStack; @@ -114,10 +115,10 @@ public final class AutoArmorHack extends Hack bestArmorSlots[type] = -1; ItemStack stack = inventory.getArmorStack(type); - if(stack.isEmpty() || !(stack.getItem() instanceof ArmorItem)) + if(!(stack.getItem() instanceof ArmorItem item) + || item instanceof AnimalArmorItem) continue; - ArmorItem item = (ArmorItem)stack.getItem(); bestArmorValues[type] = getArmorValue(item, stack); } @@ -126,10 +127,10 @@ public final class AutoArmorHack extends Hack { ItemStack stack = inventory.getStack(slot); - if(stack.isEmpty() || !(stack.getItem() instanceof ArmorItem)) + if(!(stack.getItem() instanceof ArmorItem item) + || item instanceof AnimalArmorItem) continue; - ArmorItem item = (ArmorItem)stack.getItem(); int armorType = item.getSlotType().getEntitySlotId(); int armorValue = getArmorValue(item, stack); From c1a63b2dd30a0409a403977923575c15eb9cd4c3 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 30 Jul 2024 09:48:07 +0200 Subject: [PATCH 099/109] Add explainer message for missing profile public key --- .../other_features/NoChatReportsOtf.java | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/wurstclient/other_features/NoChatReportsOtf.java b/src/main/java/net/wurstclient/other_features/NoChatReportsOtf.java index 18782ab6..8e5b10f8 100644 --- a/src/main/java/net/wurstclient/other_features/NoChatReportsOtf.java +++ b/src/main/java/net/wurstclient/other_features/NoChatReportsOtf.java @@ -16,10 +16,14 @@ import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.network.encryption.ClientPlayerSession; import net.minecraft.network.message.MessageChain; import net.minecraft.network.message.MessageSignatureData; +import net.minecraft.text.ClickEvent; +import net.minecraft.text.HoverEvent; import net.minecraft.text.Text; +import net.minecraft.text.TranslatableTextContent; import net.wurstclient.Category; import net.wurstclient.DontBlock; import net.wurstclient.SearchTags; +import net.wurstclient.events.ChatInputListener; import net.wurstclient.events.UpdateListener; import net.wurstclient.other_feature.OtherFeature; import net.wurstclient.settings.CheckboxSetting; @@ -29,7 +33,7 @@ import net.wurstclient.util.ChatUtils; @SearchTags({"no chat reports", "NoEncryption", "no encryption", "NoChatSigning", "no chat signing"}) public final class NoChatReportsOtf extends OtherFeature - implements UpdateListener + implements UpdateListener, ChatInputListener { private final CheckboxSetting disableSignatures = new CheckboxSetting("Disable signatures", true) @@ -47,6 +51,7 @@ public final class NoChatReportsOtf extends OtherFeature addSetting(disableSignatures); ClientLoginConnectionEvents.INIT.register(this::onLoginStart); + EVENTS.add(ChatInputListener.class, this); } @Override @@ -71,6 +76,33 @@ public final class NoChatReportsOtf extends OtherFeature EVENTS.remove(UpdateListener.class, this); } + @Override + public void onReceivedMessage(ChatInputEvent event) + { + if(!isActive()) + return; + + Text originalText = event.getComponent(); + if(!(originalText + .getContent() instanceof TranslatableTextContent trContent)) + return; + + if(!trContent.getKey().equals("chat.disabled.missingProfileKey")) + return; + + event.cancel(); + + ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.OPEN_URL, + "https://wurst.wiki/ncr"); + HoverEvent hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_TEXT, + Text.literal("Original message: ").append(originalText)); + + ChatUtils.component(Text.literal( + "The server is refusing to let you chat without enabling chat reports. See wurst.wiki/ncr") + .styled( + s -> s.withClickEvent(clickEvent).withHoverEvent(hoverEvent))); + } + private void onLoginStart(ClientLoginNetworkHandler handler, MinecraftClient client) { From 2f400b5598e1d0103dfc54515a60a4c54b15898d Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 30 Jul 2024 11:18:49 +0200 Subject: [PATCH 100/109] Fix misaligned reconnect buttons --- .../mixin/DisconnectedScreenMixin.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java b/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java index c166585c..dad7da24 100644 --- a/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java +++ b/src/main/java/net/wurstclient/mixin/DisconnectedScreenMixin.java @@ -75,15 +75,14 @@ public class DisconnectedScreenMixin extends Screen private void addReconnectButtons() { - ButtonWidget reconnectButton = grid.add( - ButtonWidget.builder(Text.literal("Reconnect"), - b -> LastServerRememberer.reconnect(parent)).build(), - grid.copyPositioner().margin(2).marginTop(-6)); + ButtonWidget reconnectButton = grid.add(ButtonWidget + .builder(Text.literal("Reconnect"), + b -> LastServerRememberer.reconnect(parent)) + .width(200).build()); - autoReconnectButton = grid.add( - ButtonWidget.builder(Text.literal("AutoReconnect"), - b -> pressAutoReconnect()).build(), - grid.copyPositioner().margin(2)); + autoReconnectButton = grid.add(ButtonWidget + .builder(Text.literal("AutoReconnect"), b -> pressAutoReconnect()) + .width(200).build()); grid.refreshPositions(); Stream.of(reconnectButton, autoReconnectButton) From 90092c1097df7e2925bcac37f09157e8e9808b80 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Tue, 30 Jul 2024 11:30:19 +0200 Subject: [PATCH 101/109] Fix zoom in screens bug and turn it into an optional feature --- .../java/net/wurstclient/other_features/ZoomOtf.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/net/wurstclient/other_features/ZoomOtf.java b/src/main/java/net/wurstclient/other_features/ZoomOtf.java index 7e6571e2..a168091d 100644 --- a/src/main/java/net/wurstclient/other_features/ZoomOtf.java +++ b/src/main/java/net/wurstclient/other_features/ZoomOtf.java @@ -32,6 +32,11 @@ public final class ZoomOtf extends OtherFeature implements MouseScrollListener + " zooming to zoom in even further.", true); + private final CheckboxSetting zoomInScreens = new CheckboxSetting( + "Zoom in screens", "If enabled, you can also zoom while a screen (chat," + + " inventory, etc.) is open.", + false); + private final TextFieldSetting keybind = new TextFieldSetting("Keybind", "Determines the zoom keybind.\n\n" + "Instead of editing this value manually, you should go to Wurst" @@ -48,6 +53,7 @@ public final class ZoomOtf extends OtherFeature implements MouseScrollListener + "Go to Wurst Options -> Zoom to change this keybind."); addSetting(level); addSetting(scroll); + addSetting(zoomInScreens); addSetting(keybind); EVENTS.add(MouseScrollListener.class, this); } @@ -121,6 +127,9 @@ public final class ZoomOtf extends OtherFeature implements MouseScrollListener private boolean isZoomKeyPressed() { + if(MC.currentScreen != null && !zoomInScreens.isChecked()) + return false; + return InputUtil.isKeyPressed(MC.getWindow().getHandle(), InputUtil.fromTranslationKey(keybind.getValue()).getCode()); } From 3bcec2d8076cdf430c50011115d169dffd5267e5 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 31 Jul 2024 15:02:52 +0200 Subject: [PATCH 102/109] Add PlayerAttacksEntityEvent for Criticals --- .../events/PlayerAttacksEntityListener.java | 57 +++++++++++++++++++ .../net/wurstclient/hacks/ClickAuraHack.java | 1 - .../net/wurstclient/hacks/CriticalsHack.java | 27 +++------ .../net/wurstclient/hacks/FightBotHack.java | 1 - .../net/wurstclient/hacks/KillauraHack.java | 1 - .../wurstclient/hacks/KillauraLegitHack.java | 1 - .../net/wurstclient/hacks/MultiAuraHack.java | 1 - .../net/wurstclient/hacks/ProtectHack.java | 1 - .../net/wurstclient/hacks/TpAuraHack.java | 1 - .../net/wurstclient/hacks/TriggerBotHack.java | 1 - .../ClientPlayerInteractionManagerMixin.java | 13 +++++ 11 files changed, 78 insertions(+), 27 deletions(-) create mode 100644 src/main/java/net/wurstclient/events/PlayerAttacksEntityListener.java diff --git a/src/main/java/net/wurstclient/events/PlayerAttacksEntityListener.java b/src/main/java/net/wurstclient/events/PlayerAttacksEntityListener.java new file mode 100644 index 00000000..5fa49c76 --- /dev/null +++ b/src/main/java/net/wurstclient/events/PlayerAttacksEntityListener.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2014-2024 Wurst-Imperium and contributors. + * + * This source code is subject to the terms of the GNU General Public + * License, version 3. If a copy of the GPL was not distributed with this + * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt + */ +package net.wurstclient.events; + +import java.util.ArrayList; + +import net.minecraft.client.network.ClientPlayerInteractionManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.wurstclient.event.Event; +import net.wurstclient.event.Listener; + +/** + * Fired at the beginning of + * {@link ClientPlayerInteractionManager#attackEntity(PlayerEntity, Entity)}. + */ +public interface PlayerAttacksEntityListener extends Listener +{ + /** + * Fired at the beginning of + * {@link ClientPlayerInteractionManager#attackEntity(PlayerEntity, Entity)}. + */ + public void onPlayerAttacksEntity(Entity target); + + /** + * Fired at the beginning of + * {@link ClientPlayerInteractionManager#attackEntity(PlayerEntity, Entity)}. + */ + public static class PlayerAttacksEntityEvent + extends Event + { + private final Entity target; + + public PlayerAttacksEntityEvent(Entity target) + { + this.target = target; + } + + @Override + public void fire(ArrayList listeners) + { + for(PlayerAttacksEntityListener listener : listeners) + listener.onPlayerAttacksEntity(target); + } + + @Override + public Class getListenerType() + { + return PlayerAttacksEntityListener.class; + } + } +} diff --git a/src/main/java/net/wurstclient/hacks/ClickAuraHack.java b/src/main/java/net/wurstclient/hacks/ClickAuraHack.java index d57e2689..f3b5349c 100644 --- a/src/main/java/net/wurstclient/hacks/ClickAuraHack.java +++ b/src/main/java/net/wurstclient/hacks/ClickAuraHack.java @@ -136,7 +136,6 @@ public final class ClickAuraHack extends Hack .sendPlayerLookPacket(); // attack entity - WURST.getHax().criticalsHack.doCritical(); MC.interactionManager.attackEntity(player, target); player.swingHand(Hand.MAIN_HAND); speed.resetTimer(); diff --git a/src/main/java/net/wurstclient/hacks/CriticalsHack.java b/src/main/java/net/wurstclient/hacks/CriticalsHack.java index d4851935..53fb1f66 100644 --- a/src/main/java/net/wurstclient/hacks/CriticalsHack.java +++ b/src/main/java/net/wurstclient/hacks/CriticalsHack.java @@ -7,19 +7,19 @@ */ package net.wurstclient.hacks; +import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.item.Items; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; -import net.minecraft.util.hit.EntityHitResult; -import net.minecraft.util.hit.HitResult; import net.wurstclient.Category; import net.wurstclient.SearchTags; -import net.wurstclient.events.LeftClickListener; +import net.wurstclient.events.PlayerAttacksEntityListener; import net.wurstclient.hack.Hack; import net.wurstclient.settings.EnumSetting; @SearchTags({"Crits"}) -public final class CriticalsHack extends Hack implements LeftClickListener +public final class CriticalsHack extends Hack + implements PlayerAttacksEntityListener { private final EnumSetting mode = new EnumSetting<>("Mode", "\u00a7lPacket\u00a7r mode sends packets to server without actually moving you at all.\n\n" @@ -43,30 +43,19 @@ public final class CriticalsHack extends Hack implements LeftClickListener @Override protected void onEnable() { - EVENTS.add(LeftClickListener.class, this); + EVENTS.add(PlayerAttacksEntityListener.class, this); } @Override protected void onDisable() { - EVENTS.remove(LeftClickListener.class, this); + EVENTS.remove(PlayerAttacksEntityListener.class, this); } @Override - public void onLeftClick(LeftClickEvent event) + public void onPlayerAttacksEntity(Entity target) { - if(MC.crosshairTarget == null - || MC.crosshairTarget.getType() != HitResult.Type.ENTITY - || !(((EntityHitResult)MC.crosshairTarget) - .getEntity() instanceof LivingEntity)) - return; - - doCritical(); - } - - public void doCritical() - { - if(!isEnabled()) + if(!(target instanceof LivingEntity)) return; if(WURST.getHax().maceDmgHack.isEnabled() diff --git a/src/main/java/net/wurstclient/hacks/FightBotHack.java b/src/main/java/net/wurstclient/hacks/FightBotHack.java index c36ac153..1346b591 100644 --- a/src/main/java/net/wurstclient/hacks/FightBotHack.java +++ b/src/main/java/net/wurstclient/hacks/FightBotHack.java @@ -216,7 +216,6 @@ public final class FightBotHack extends Hack return; // attack entity - WURST.getHax().criticalsHack.doCritical(); MC.interactionManager.attackEntity(MC.player, entity); swingHand.swing(Hand.MAIN_HAND); speed.resetTimer(); diff --git a/src/main/java/net/wurstclient/hacks/KillauraHack.java b/src/main/java/net/wurstclient/hacks/KillauraHack.java index 7e21b0f4..c3fafc5d 100644 --- a/src/main/java/net/wurstclient/hacks/KillauraHack.java +++ b/src/main/java/net/wurstclient/hacks/KillauraHack.java @@ -192,7 +192,6 @@ public final class KillauraHack extends Hack if(target == null) return; - WURST.getHax().criticalsHack.doCritical(); MC.interactionManager.attackEntity(MC.player, target); swingHand.swing(Hand.MAIN_HAND); diff --git a/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java b/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java index 9d9cf86e..d1eca3cb 100644 --- a/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java +++ b/src/main/java/net/wurstclient/hacks/KillauraLegitHack.java @@ -224,7 +224,6 @@ public final class KillauraLegitHack extends Hack implements UpdateListener, return; // attack entity - WURST.getHax().criticalsHack.doCritical(); MC.interactionManager.attackEntity(MC.player, target); swingHand.swing(Hand.MAIN_HAND); speed.resetTimer(speedRandMS.getValue()); diff --git a/src/main/java/net/wurstclient/hacks/MultiAuraHack.java b/src/main/java/net/wurstclient/hacks/MultiAuraHack.java index 2809c7cc..a1b836fd 100644 --- a/src/main/java/net/wurstclient/hacks/MultiAuraHack.java +++ b/src/main/java/net/wurstclient/hacks/MultiAuraHack.java @@ -122,7 +122,6 @@ public final class MultiAuraHack extends Hack implements UpdateListener .getNeededRotations(entity.getBoundingBox().getCenter()) .sendPlayerLookPacket(); - WURST.getHax().criticalsHack.doCritical(); MC.interactionManager.attackEntity(MC.player, entity); } diff --git a/src/main/java/net/wurstclient/hacks/ProtectHack.java b/src/main/java/net/wurstclient/hacks/ProtectHack.java index b3d3132b..7e1fe6d7 100644 --- a/src/main/java/net/wurstclient/hacks/ProtectHack.java +++ b/src/main/java/net/wurstclient/hacks/ProtectHack.java @@ -285,7 +285,6 @@ public final class ProtectHack extends Hack return; // attack enemy - WURST.getHax().criticalsHack.doCritical(); MC.interactionManager.attackEntity(MC.player, enemy); swingHand.swing(Hand.MAIN_HAND); speed.resetTimer(); diff --git a/src/main/java/net/wurstclient/hacks/TpAuraHack.java b/src/main/java/net/wurstclient/hacks/TpAuraHack.java index 3c547156..cec37a05 100644 --- a/src/main/java/net/wurstclient/hacks/TpAuraHack.java +++ b/src/main/java/net/wurstclient/hacks/TpAuraHack.java @@ -134,7 +134,6 @@ public final class TpAuraHack extends Hack implements UpdateListener RotationUtils.getNeededRotations(entity.getBoundingBox().getCenter()) .sendPlayerLookPacket(); - WURST.getHax().criticalsHack.doCritical(); MC.interactionManager.attackEntity(player, entity); swingHand.swing(Hand.MAIN_HAND); speed.resetTimer(); diff --git a/src/main/java/net/wurstclient/hacks/TriggerBotHack.java b/src/main/java/net/wurstclient/hacks/TriggerBotHack.java index 2c3b66e9..8bc27558 100644 --- a/src/main/java/net/wurstclient/hacks/TriggerBotHack.java +++ b/src/main/java/net/wurstclient/hacks/TriggerBotHack.java @@ -157,7 +157,6 @@ public final class TriggerBotHack extends Hack return; WURST.getHax().autoSwordHack.setSlot(target); - WURST.getHax().criticalsHack.doCritical(); if(simulateMouseClick.isChecked()) { diff --git a/src/main/java/net/wurstclient/mixin/ClientPlayerInteractionManagerMixin.java b/src/main/java/net/wurstclient/mixin/ClientPlayerInteractionManagerMixin.java index 7dde6be2..46a2d0e8 100644 --- a/src/main/java/net/wurstclient/mixin/ClientPlayerInteractionManagerMixin.java +++ b/src/main/java/net/wurstclient/mixin/ClientPlayerInteractionManagerMixin.java @@ -20,6 +20,7 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerInteractionManager; import net.minecraft.client.network.SequencedPacketCreator; import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket.Action; @@ -33,6 +34,7 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import net.wurstclient.event.EventManager; import net.wurstclient.events.BlockBreakingProgressListener.BlockBreakingProgressEvent; +import net.wurstclient.events.PlayerAttacksEntityListener.PlayerAttacksEntityEvent; import net.wurstclient.events.StopUsingItemListener.StopUsingItemEvent; import net.wurstclient.mixinterface.IClientPlayerInteractionManager; @@ -61,6 +63,17 @@ public abstract class ClientPlayerInteractionManagerMixin EventManager.fire(StopUsingItemEvent.INSTANCE); } + @Inject(at = @At("HEAD"), + method = "attackEntity(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/entity/Entity;)V") + private void onAttackEntity(PlayerEntity player, Entity target, + CallbackInfo ci) + { + if(player != client.player) + return; + + EventManager.fire(new PlayerAttacksEntityEvent(target)); + } + @Override public void windowClick_PICKUP(int slot) { From 096a0b82b75714d9acf5e41a832baf548c329259 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 31 Jul 2024 15:10:23 +0200 Subject: [PATCH 103/109] Refactor packet handling for CriticalsHack.doPacketJump() --- .../net/wurstclient/hacks/CriticalsHack.java | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/CriticalsHack.java b/src/main/java/net/wurstclient/hacks/CriticalsHack.java index 53fb1f66..efe59d23 100644 --- a/src/main/java/net/wurstclient/hacks/CriticalsHack.java +++ b/src/main/java/net/wurstclient/hacks/CriticalsHack.java @@ -10,7 +10,7 @@ package net.wurstclient.hacks; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.item.Items; -import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; +import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket.PositionAndOnGround; import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.PlayerAttacksEntityListener; @@ -86,20 +86,17 @@ public final class CriticalsHack extends Hack private void doPacketJump() { - double posX = MC.player.getX(); - double posY = MC.player.getY(); - double posZ = MC.player.getZ(); - - sendPos(posX, posY + 0.0625D, posZ, true); - sendPos(posX, posY, posZ, false); - sendPos(posX, posY + 1.1E-5D, posZ, false); - sendPos(posX, posY, posZ, false); + sendFakeY(0.0625, true); + sendFakeY(0, false); + sendFakeY(1.1e-5, false); + sendFakeY(0, false); } - private void sendPos(double x, double y, double z, boolean onGround) + private void sendFakeY(double offset, boolean onGround) { - MC.player.networkHandler.sendPacket( - new PlayerMoveC2SPacket.PositionAndOnGround(x, y, z, onGround)); + MC.player.networkHandler + .sendPacket(new PositionAndOnGround(MC.player.getX(), + MC.player.getY() + offset, MC.player.getZ(), onGround)); } private void doMiniJump() From f4fff8159438c199256d400c86eeec890329e5bd Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Wed, 31 Jul 2024 15:46:48 +0200 Subject: [PATCH 104/109] Fix other combat hacks being unable to trigger MaceDMG --- .../net/wurstclient/hacks/MaceDmgHack.java | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/MaceDmgHack.java b/src/main/java/net/wurstclient/hacks/MaceDmgHack.java index 8ecf4b8e..32102251 100644 --- a/src/main/java/net/wurstclient/hacks/MaceDmgHack.java +++ b/src/main/java/net/wurstclient/hacks/MaceDmgHack.java @@ -7,17 +7,18 @@ */ package net.wurstclient.hacks; -import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.entity.Entity; import net.minecraft.item.Items; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket.PositionAndOnGround; import net.minecraft.util.hit.HitResult; import net.wurstclient.Category; import net.wurstclient.SearchTags; -import net.wurstclient.events.LeftClickListener; +import net.wurstclient.events.PlayerAttacksEntityListener; import net.wurstclient.hack.Hack; @SearchTags({"mace dmg", "MaceDamage", "mace damage"}) -public final class MaceDmgHack extends Hack implements LeftClickListener +public final class MaceDmgHack extends Hack + implements PlayerAttacksEntityListener { public MaceDmgHack() { @@ -28,17 +29,17 @@ public final class MaceDmgHack extends Hack implements LeftClickListener @Override protected void onEnable() { - EVENTS.add(LeftClickListener.class, this); + EVENTS.add(PlayerAttacksEntityListener.class, this); } @Override protected void onDisable() { - EVENTS.remove(LeftClickListener.class, this); + EVENTS.remove(PlayerAttacksEntityListener.class, this); } @Override - public void onLeftClick(LeftClickEvent event) + public void onPlayerAttacksEntity(Entity target) { if(MC.crosshairTarget == null || MC.crosshairTarget.getType() != HitResult.Type.ENTITY) @@ -58,12 +59,8 @@ public final class MaceDmgHack extends Hack implements LeftClickListener private void sendFakeY(double offset) { - ClientPlayNetworkHandler netHandler = MC.player.networkHandler; - double posX = MC.player.getX(); - double posY = MC.player.getY(); - double posZ = MC.player.getZ(); - - netHandler.sendPacket( - new PositionAndOnGround(posX, posY + offset, posZ, false)); + MC.player.networkHandler + .sendPacket(new PositionAndOnGround(MC.player.getX(), + MC.player.getY() + offset, MC.player.getZ(), false)); } } From 7878c65ebb2520b1448dd11ccfb97a00137c67f0 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 1 Aug 2024 14:05:05 +0200 Subject: [PATCH 105/109] Refactor NukerHack block filtering logic --- .../java/net/wurstclient/hacks/NukerHack.java | 45 ++++++++----------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/NukerHack.java b/src/main/java/net/wurstclient/hacks/NukerHack.java index 45399f2e..bcac508f 100644 --- a/src/main/java/net/wurstclient/hacks/NukerHack.java +++ b/src/main/java/net/wurstclient/hacks/NukerHack.java @@ -26,7 +26,6 @@ import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; import net.wurstclient.Category; import net.wurstclient.events.LeftClickListener; import net.wurstclient.events.RenderListener; @@ -149,47 +148,41 @@ public final class NukerHack extends Hack return; ClientPlayerEntity player = MC.player; - Vec3d eyesPos = RotationUtils.getEyesPos().subtract(0.5, 0.5, 0.5); - BlockPos eyesBlock = BlockPos.ofFloored(RotationUtils.getEyesPos()); - double rangeSq = Math.pow(range.getValue(), 2); - int blockRange = (int)Math.ceil(range.getValue()); + Vec3d eyesVec = RotationUtils.getEyesPos(); + BlockPos eyesBlock = BlockPos.ofFloored(eyesVec); + double rangeSq = range.getValueSq(); + int blockRange = range.getValueCeil(); - Vec3i rangeVec = new Vec3i(blockRange, blockRange, blockRange); - BlockPos min = eyesBlock.subtract(rangeVec); - BlockPos max = eyesBlock.add(rangeVec); - - ArrayList blocks = BlockUtils.getAllInBox(min, max); - Stream stream = blocks.parallelStream(); - - List blocks2 = stream - .filter(pos -> eyesPos.squaredDistanceTo(Vec3d.of(pos)) <= rangeSq) - .filter(BlockUtils::canBeClicked) - .filter(mode.getSelected().getValidator(this)) - .sorted(Comparator.comparingDouble( - pos -> eyesPos.squaredDistanceTo(Vec3d.of(pos)))) - .collect(Collectors.toList()); + ArrayList blocks = + BlockUtils.getAllInBoxStream(eyesBlock, blockRange) + .filter(pos -> pos.getSquaredDistance(eyesVec) <= rangeSq) + .filter(BlockUtils::canBeClicked) + .filter(mode.getSelected().getValidator(this)) + .sorted(Comparator + .comparingDouble(pos -> pos.getSquaredDistance(eyesVec))) + .collect(Collectors.toCollection(ArrayList::new)); if(player.getAbilities().creativeMode) { - Stream stream2 = blocks2.parallelStream(); + Stream stream2 = blocks.parallelStream(); for(Set set : prevBlocks) stream2 = stream2.filter(pos -> !set.contains(pos)); - List blocks3 = stream2.collect(Collectors.toList()); + List blocks2 = stream2.collect(Collectors.toList()); - prevBlocks.addLast(new HashSet<>(blocks3)); + prevBlocks.addLast(new HashSet<>(blocks2)); while(prevBlocks.size() > 5) prevBlocks.removeFirst(); - if(!blocks3.isEmpty()) - currentBlock = blocks3.get(0); + if(!blocks2.isEmpty()) + currentBlock = blocks2.get(0); MC.interactionManager.cancelBlockBreaking(); renderer.resetProgress(); - BlockBreaker.breakBlocksWithPacketSpam(blocks3); + BlockBreaker.breakBlocksWithPacketSpam(blocks2); return; } - for(BlockPos pos : blocks2) + for(BlockPos pos : blocks) if(BlockBreaker.breakOneBlock(pos)) { currentBlock = pos; From 342ea6c1b168622daf1086afdfaba71e733321ef Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 1 Aug 2024 15:58:23 +0200 Subject: [PATCH 106/109] Fix AntiBlind only partially preventing the darkness effect Fixes https://wurstforum.net/d/688 --- .../net/wurstclient/hacks/AntiBlindHack.java | 4 +-- .../mixin/LightmapTextureManagerMixin.java | 33 +++++++++++++++++++ src/main/resources/wurst.mixins.json | 1 + 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/wurstclient/mixin/LightmapTextureManagerMixin.java diff --git a/src/main/java/net/wurstclient/hacks/AntiBlindHack.java b/src/main/java/net/wurstclient/hacks/AntiBlindHack.java index b0b8218c..30082ea9 100644 --- a/src/main/java/net/wurstclient/hacks/AntiBlindHack.java +++ b/src/main/java/net/wurstclient/hacks/AntiBlindHack.java @@ -23,6 +23,6 @@ public final class AntiBlindHack extends Hack setCategory(Category.RENDER); } - // See BackgroundRendererMixin, WorldRendererMixin, - // ClientPlayerEntityMixin.hasStatusEffect() + // See BackgroundRendererMixin, LightmapTextureManagerMixin, + // WorldRendererMixin, ClientPlayerEntityMixin.hasStatusEffect() } diff --git a/src/main/java/net/wurstclient/mixin/LightmapTextureManagerMixin.java b/src/main/java/net/wurstclient/mixin/LightmapTextureManagerMixin.java new file mode 100644 index 00000000..3174f6d2 --- /dev/null +++ b/src/main/java/net/wurstclient/mixin/LightmapTextureManagerMixin.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2014-2024 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.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.minecraft.client.render.LightmapTextureManager; +import net.wurstclient.WurstClient; + +@Mixin(LightmapTextureManager.class) +public class LightmapTextureManagerMixin +{ + /** + * Stops the other darkness effect in caves when AntiBlind is enabled. + */ + @Inject(at = @At("HEAD"), + method = "getDarknessFactor(F)F", + cancellable = true) + private void onGetDarknessFactor(float delta, + CallbackInfoReturnable cir) + { + if(WurstClient.INSTANCE.getHax().antiBlindHack.isEnabled()) + cir.setReturnValue(0F); + } +} diff --git a/src/main/resources/wurst.mixins.json b/src/main/resources/wurst.mixins.json index 635bbe9e..d98d0cda 100644 --- a/src/main/resources/wurst.mixins.json +++ b/src/main/resources/wurst.mixins.json @@ -42,6 +42,7 @@ "KeyBindingMixin", "KeyboardMixin", "LanguageManagerMixin", + "LightmapTextureManagerMixin", "LivingEntityRendererMixin", "MinecraftClientMixin", "MobEntityRendererMixin", From 7a8162668719c80cf7a848f667cf638034c4652c Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 1 Aug 2024 16:07:30 +0200 Subject: [PATCH 107/109] Change version to 7.45pre2 --- gradle.properties | 2 +- src/main/java/net/wurstclient/WurstClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 2c49f6ab..0a5f4eb2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version=0.15.11 fabric_version=0.100.7+1.21 # Mod Properties -mod_version = v7.45pre1-MC1.21 +mod_version = v7.45pre2-MC1.21 maven_group = net.wurstclient archives_base_name = Wurst-Client diff --git a/src/main/java/net/wurstclient/WurstClient.java b/src/main/java/net/wurstclient/WurstClient.java index 350f1db0..3162c790 100644 --- a/src/main/java/net/wurstclient/WurstClient.java +++ b/src/main/java/net/wurstclient/WurstClient.java @@ -50,7 +50,7 @@ public enum WurstClient public static MinecraftClient MC; public static IMinecraftClient IMC; - public static final String VERSION = "7.45pre1"; + public static final String VERSION = "7.45pre2"; public static final String MC_VERSION = "1.21"; private WurstAnalytics analytics; From e0def4f772d01d059f76472495009ee2cfd9a815 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 2 Aug 2024 10:03:42 +0200 Subject: [PATCH 108/109] Refactor NukerHack.onUpdate() logic --- .../java/net/wurstclient/hacks/NukerHack.java | 69 +++++++++++-------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/src/main/java/net/wurstclient/hacks/NukerHack.java b/src/main/java/net/wurstclient/hacks/NukerHack.java index bcac508f..52ed87dd 100644 --- a/src/main/java/net/wurstclient/hacks/NukerHack.java +++ b/src/main/java/net/wurstclient/hacks/NukerHack.java @@ -11,7 +11,6 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; -import java.util.List; import java.util.Set; import java.util.function.BiPredicate; import java.util.function.Function; @@ -20,7 +19,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import net.minecraft.block.Blocks; -import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; @@ -147,57 +145,70 @@ public final class NukerHack extends Hack if(mode.getSelected() == Mode.ID && id.getBlock() == Blocks.AIR) return; - ClientPlayerEntity player = MC.player; Vec3d eyesVec = RotationUtils.getEyesPos(); BlockPos eyesBlock = BlockPos.ofFloored(eyesVec); double rangeSq = range.getValueSq(); int blockRange = range.getValueCeil(); - ArrayList blocks = + Stream stream = BlockUtils.getAllInBoxStream(eyesBlock, blockRange) .filter(pos -> pos.getSquaredDistance(eyesVec) <= rangeSq) .filter(BlockUtils::canBeClicked) - .filter(mode.getSelected().getValidator(this)) - .sorted(Comparator - .comparingDouble(pos -> pos.getSquaredDistance(eyesVec))) - .collect(Collectors.toCollection(ArrayList::new)); + .filter(mode.getSelected().getValidator(this)).sorted(Comparator + .comparingDouble(pos -> pos.getSquaredDistance(eyesVec))); - if(player.getAbilities().creativeMode) + // Break all blocks in creative mode + if(MC.player.getAbilities().creativeMode) { - Stream stream2 = blocks.parallelStream(); - for(Set set : prevBlocks) - stream2 = stream2.filter(pos -> !set.contains(pos)); - List blocks2 = stream2.collect(Collectors.toList()); - - prevBlocks.addLast(new HashSet<>(blocks2)); - while(prevBlocks.size() > 5) - prevBlocks.removeFirst(); - - if(!blocks2.isEmpty()) - currentBlock = blocks2.get(0); - MC.interactionManager.cancelBlockBreaking(); renderer.resetProgress(); - BlockBreaker.breakBlocksWithPacketSpam(blocks2); + + ArrayList blocks = filterOutRecentBlocks(stream); + if(blocks.isEmpty()) + return; + + currentBlock = blocks.get(0); + BlockBreaker.breakBlocksWithPacketSpam(blocks); return; } - for(BlockPos pos : blocks) - if(BlockBreaker.breakOneBlock(pos)) - { - currentBlock = pos; - break; - } + // Break the first valid block in survival mode + currentBlock = + stream.filter(BlockBreaker::breakOneBlock).findFirst().orElse(null); if(currentBlock == null) + { MC.interactionManager.cancelBlockBreaking(); + renderer.resetProgress(); + return; + } - if(currentBlock != null && BlockUtils.getHardness(currentBlock) < 1) + if(BlockUtils.getHardness(currentBlock) < 1) renderer.updateProgress(); else renderer.resetProgress(); } + /* + * Waits 5 ticks before trying to break the same block again, which + * makes it much more likely that the server will accept the block + * breaking packets. + */ + private ArrayList filterOutRecentBlocks(Stream stream) + { + for(Set set : prevBlocks) + stream = stream.filter(pos -> !set.contains(pos)); + + ArrayList blocks = + stream.collect(Collectors.toCollection(ArrayList::new)); + + prevBlocks.addLast(new HashSet<>(blocks)); + while(prevBlocks.size() > 5) + prevBlocks.removeFirst(); + + return blocks; + } + @Override public void onLeftClick(LeftClickEvent event) { From 1c279cf1157f9ad0a6ff3f1f40a50f7c91732992 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Fri, 2 Aug 2024 17:27:26 +0200 Subject: [PATCH 109/109] Update Fabric API --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 0a5f4eb2..7ea4d560 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ yarn_mappings=1.21+build.9 loader_version=0.15.11 # Fabric API -fabric_version=0.100.7+1.21 +fabric_version=0.100.8+1.21 # Mod Properties mod_version = v7.45pre2-MC1.21