diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 9260c713..a7452559 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -36,8 +36,8 @@ jobs: - uses: "0xDylan/action-auto-releases-n20@v1.1" with: repo_token: "${{ secrets.GITHUB_TOKEN }}" - automatic_release_tag: "latest" - prerelease: false - title: "Latest Build (1.21)" + automatic_release_tag: "nightly" + prerelease: true + title: "Nightly Build (1.21)" files: | ./build/libs/*.jar diff --git a/DIFFERENCES.md b/DIFFERENCES.md new file mode 100644 index 00000000..03978f15 --- /dev/null +++ b/DIFFERENCES.md @@ -0,0 +1,2 @@ +# Differences from original ThunderHack Recode: +// TODO \ No newline at end of file diff --git a/README.md b/README.md index 38315300..22f456d5 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,27 @@

- +

-
- -
-[![Discord Mine](https://img.shields.io/discord/1140266441082404924?label=discord&logo=discord&logoColor=white)](https://discord.gg/bJajFP3kCX) +[![Discord Mine](https://img.shields.io/discord/1140266441082404924?label=ThunderHack%20Recode%20Discord&logo=discord&logoColor=white)](https://discord.gg/bJajFP3kCX) +[![Discord Mine](https://img.shields.io/discord/1138007062333366393?label=ulybaka1337's%20Discord&logo=discord&logoColor=white)](https://discord.gg/7radMBMnNZ) +
## Information +ThunderHack Recode is closed, so... I think it is my time to shine! + - Minecraft version: ```Fabric``` 1.21 (or whatever version's the latest) -- Default ClickGui keybind - **```P```** (<--- it is not, you should go to the Discord server and ask for the real keybind) +- Default ClickGui keybind - **```P```** - Default prefix - **```@```** - Middle click the module to bind it. -- Be aware Expensive, DoxWare 2.0, gumballoff, Treoderia "Recode", Deluxe Client, and Quick Client are both ratted and renames of this client. +- ~~Be aware Expensive, DoxWare 2.0, gumballoff, Treoderia "Recode", Deluxe Client, and Quick Client are both ratted and renames of this client.~~ Um, actually, they are renames of original ThunderHack Recode, not this fork ## Requires these mods: @@ -34,12 +35,18 @@ ## Credits +### ThunderHack Recode + - [Ai_24](https://www.youtube.com/@Ai_24) for cool showcase - [KiLAB Gaming](https://www.youtube.com/@KiLABGaming) for complete overview - [@meteordevelopment](https://github.com/meteordevelopment) for orbit - [@ladysnake](https://github.com/ladysnake) for satin - [@0x3C50](https://github.com/0x3C50/Renderer) for the renderer +### ThunderHack Recode Improved +- [@Coderx-Gamer](https://github.com/Coderx-Gamer/) for UI-Utils mod (I took a look at his code for GUI move -> Close without packet) +- [@crazymoose77756](https://github.com/crazymoose77756) and leftys for Meteor Paper Dupe (I added it into PastedPaperDupe module) + ## Screenshots
GUI diff --git a/gradle.properties b/gradle.properties index 60c7d76a..92fc4991 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ minecraft_version=1.21 yarn_mappings=1.21+build.2 loader_version=0.15.11 -mod_version=1.7 +mod_version=1.7.1 maven_group=thunder.hack archives_base_name=thunderhack diff --git a/src/main/java/thunder/hack/core/manager/client/ConfigManager.java b/src/main/java/thunder/hack/core/manager/client/ConfigManager.java index 9769d760..b8bd433f 100644 --- a/src/main/java/thunder/hack/core/manager/client/ConfigManager.java +++ b/src/main/java/thunder/hack/core/manager/client/ConfigManager.java @@ -118,7 +118,7 @@ public void load(String name) { public void loadCloud(String name) { Command.sendMessage(isRu() ? "Загружаю.." : "Downloading.."); - try (BufferedInputStream in = new BufferedInputStream(new URL("https://raw.githubusercontent.com/Pan4ur/THRecodeUtil/main/configs/" + name + ".th").openStream()); + try (BufferedInputStream in = new BufferedInputStream(new URL("https://raw.githubusercontent.com/ulybaka1337/THRecodeImprovedUtil/main/configs/" + name + ".th").openStream()); FileOutputStream fileOutputStream = new FileOutputStream(new File(CONFIGS_FOLDER, name + ".th"))) { byte[] dataBuffer = new byte[1024]; int bytesRead; @@ -402,7 +402,7 @@ public List getConfigList() { public List getCloudConfigs() { List list = new ArrayList<>(); try { - URL url = new URL("https://raw.githubusercontent.com/Pan4ur/THRecodeUtil/main/cloudConfigs.txt"); + URL url = new URL("https://raw.githubusercontent.com/ulybaka1337/THRecodeImprovedUtil/main/cloudConfigs.txt"); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) @@ -446,4 +446,4 @@ public File getCurrentConfig() { currentConfig = new File(CONFIGS_FOLDER, name + ".th"); return currentConfig; } -} \ No newline at end of file +} diff --git a/src/main/java/thunder/hack/core/manager/client/ModuleManager.java b/src/main/java/thunder/hack/core/manager/client/ModuleManager.java index 06f60039..639175c5 100644 --- a/src/main/java/thunder/hack/core/manager/client/ModuleManager.java +++ b/src/main/java/thunder/hack/core/manager/client/ModuleManager.java @@ -57,7 +57,7 @@ public class ModuleManager implements IManager { public static MouseElytraFix mouseElytraFix = new MouseElytraFix(); public static TotemAnimation totemAnimation = new TotemAnimation(); public static PortalGodMode portalGodMode = new PortalGodMode(); - public static OptifineCapes optifineCapes = new OptifineCapes(); + public static Capes capes = new Capes(); public static Notifications notifications = new Notifications(); public static NoEntityTrace noEntityTrace = new NoEntityTrace(); public static MessageAppend messageAppend = new MessageAppend(); @@ -260,6 +260,8 @@ public class ModuleManager implements IManager { public static FOV fov = new FOV(); public static ESP esp = new ESP(); public static RPC rpc = new RPC(); + public static PastedPaperDupe paperdupe = new PastedPaperDupe(); + public static Religion religion = new Religion(); public ModuleManager() { for (Field field : getClass().getDeclaredFields()) { diff --git a/src/main/java/thunder/hack/features/modules/client/Capes.java b/src/main/java/thunder/hack/features/modules/client/Capes.java new file mode 100644 index 00000000..6af9a485 --- /dev/null +++ b/src/main/java/thunder/hack/features/modules/client/Capes.java @@ -0,0 +1,17 @@ +package thunder.hack.features.modules.client; + +import thunder.hack.features.modules.Module; +import thunder.hack.setting.Setting; + +public class Capes extends Module { + public Capes() { + super("Capes", Category.CLIENT); + } + + public Setting optifineCapes = new Setting<>("Optifine", true); + public Setting minecraftcapesCapes = new Setting<>("Minecraftcapes.net", false); + public Setting thCapes = new Setting<>("ThunderHack", true); + public Setting priority = new Setting<>("Priority", capePriority.Optifine, v -> optifineCapes.getValue() && minecraftcapesCapes.getValue()); + + public enum capePriority { Optifine, Minecraftcapes } +} diff --git a/src/main/java/thunder/hack/features/modules/client/OptifineCapes.java b/src/main/java/thunder/hack/features/modules/client/OptifineCapes.java deleted file mode 100644 index 95c4c9ab..00000000 --- a/src/main/java/thunder/hack/features/modules/client/OptifineCapes.java +++ /dev/null @@ -1,9 +0,0 @@ -package thunder.hack.features.modules.client; - -import thunder.hack.features.modules.Module; - -public final class OptifineCapes extends Module { - public OptifineCapes() { - super("OptifineCapes", Category.CLIENT); - } -} diff --git a/src/main/java/thunder/hack/features/modules/client/RPC.java b/src/main/java/thunder/hack/features/modules/client/RPC.java index 3ba352e9..8871089d 100644 --- a/src/main/java/thunder/hack/features/modules/client/RPC.java +++ b/src/main/java/thunder/hack/features/modules/client/RPC.java @@ -83,7 +83,8 @@ public void startRpc() { if (!started) { started = true; DiscordEventHandlers handlers = new DiscordEventHandlers(); - rpc.Discord_Initialize("1093053626198523935", handlers, true, ""); + // rpc.Discord_Initialize("1093053626198523935", handlers, true, ""); + rpc.Discord_Initialize("1294239539711442974", handlers, true, ""); presence.startTimestamp = (System.currentTimeMillis() / 1000L); presence.largeImageText = "v" + ThunderHack.VERSION + " [" + ThunderHack.GITHUB_HASH + "]"; rpc.Discord_UpdatePresence(presence); @@ -109,7 +110,7 @@ public void startRpc() { } presence.button_label_1 = "Download"; - presence.button_url_1 = "https://github.com/Pan4ur/ThunderHack-Recode/"; + presence.button_url_1 = "https://github.com/ulybaka1337/ThunderHack-Recode-Improved/"; switch (mode.getValue()) { case Recode -> presence.largeImageKey = "https://i.imgur.com/yY0z2Uq.gif"; diff --git a/src/main/java/thunder/hack/features/modules/client/Religion.java b/src/main/java/thunder/hack/features/modules/client/Religion.java new file mode 100644 index 00000000..095cd72c --- /dev/null +++ b/src/main/java/thunder/hack/features/modules/client/Religion.java @@ -0,0 +1,53 @@ +package thunder.hack.features.modules.client; + +import meteordevelopment.orbit.EventHandler; +import net.minecraft.entity.Entity; +import net.minecraft.entity.mob.ZoglinEntity; +import net.minecraft.entity.passive.PigEntity; +import net.minecraft.entity.passive.SheepEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket; +import org.jetbrains.annotations.NotNull; +import thunder.hack.core.Managers; +import thunder.hack.features.modules.Module; +import thunder.hack.setting.Setting; +import thunder.hack.events.impl.PacketEvent; + +import static thunder.hack.features.modules.client.ClientSettings.isRu; +import static thunder.hack.features.modules.combat.Criticals.getEntity; + +public class Religion extends Module { + public Religion() { super("Religion", Category.CLIENT); } + + public final Setting ReligionSetting = new Setting<>("YourReligion", YourReligion.Christianity, v -> true); + + public enum YourReligion { Christianity, Islam, Satanism, Atheism } + public int sheepHits = 0; + + @EventHandler + @SuppressWarnings("unused") + private void onPacketSend(PacketEvent.@NotNull Send e) { + if (!(e.getPacket() instanceof PlayerInteractEntityC2SPacket pac)) return; + + Entity entity = getEntity(pac); + if (entity == null) return; + + if ((entity instanceof PigEntity || entity instanceof ZoglinEntity) && ReligionSetting.is(YourReligion.Islam)) e.cancel(); + + if (entity instanceof PlayerEntity) { + if (ReligionSetting.is(YourReligion.Christianity) && Managers.FRIEND.isFriend(entity.getName().getString())) { + sendMessage(isRu() ? "Люби ближнего твоего, как самого себя!" : "Love your neighbour as yourself!"); + e.cancel(); + } else if (ReligionSetting.is(YourReligion.Christianity)) { + sendMessage(isRu() ? "Не убивай!" : "Do not kill!"); + e.cancel(); + } + } + + if ((entity instanceof SheepEntity) && ReligionSetting.is(YourReligion.Satanism)) { + sheepHits++; + sendMessage(isRu() ? String.format("Сатана хочет больше! Ударов по овцам: %d", sheepHits) : String.format("Satan needs more! Times you hit a sheep: %d", sheepHits)); + } + + } +} diff --git a/src/main/java/thunder/hack/features/modules/combat/AutoTotem.java b/src/main/java/thunder/hack/features/modules/combat/AutoTotem.java index b8b58f69..1d0b0766 100644 --- a/src/main/java/thunder/hack/features/modules/combat/AutoTotem.java +++ b/src/main/java/thunder/hack/features/modules/combat/AutoTotem.java @@ -42,6 +42,7 @@ public final class AutoTotem extends Module { private final Setting mode = new Setting<>("Mode", Mode.Matrix); private final Setting offhand = new Setting<>("Item", OffHand.Totem); + private final Setting pomoyka = new Setting<>("DoNotSwapBack", false, v -> offhand.is(OffHand.Totem)); private final Setting bindSwap = new Setting<>("BindSwap", new BooleanSettingGroup(false), v -> offhand.is(OffHand.Totem)); private final Setting swapButton = new Setting<>("SwapButton", new Bind(GLFW.GLFW_KEY_CAPS_LOCK, false, false)).addToGroup(bindSwap); private final Setting swapMode = new Setting<>("Swap", Swap.GappleShield).addToGroup(bindSwap); @@ -89,7 +90,7 @@ public AutoTotem() { public void onSync(EventSync e) { swapTo(getItemSlot()); - if (rcGap.not(RCGap.Off) && (mc.player.getMainHandStack().getItem() instanceof SwordItem) && mc.options.useKey.isPressed() && !mc.player.isUsingItem()) + if (rcGap.not(RCGap.Off) && (mc.player.getMainHandStack().getItem() instanceof SwordItem) && mc.options.useKey.isPressed() && !mc.player.isUsingItem() && !pomoyka.getValue()) ((IMinecraftClient) mc).idoItemUse(); delay--; @@ -246,7 +247,8 @@ public int getItemSlot() { if (offHandItem != Items.TOTEM_OF_UNDYING && !mc.player.getOffHandStack().isEmpty()) prevItem = offHandItem; - item = prevItem; + if (!pomoyka.getValue()) + item = prevItem; if (bindSwap.getValue().isEnabled()) if (isKeyPressed(swapButton) && bindDelay.every(250)) { @@ -272,7 +274,9 @@ public int getItemSlot() { else item = Items.TOTEM_OF_UNDYING; } } - prevItem = item; + + prevItem = item; + } } @@ -401,7 +405,7 @@ else if (gapple.found() || offHandItem == Items.ENCHANTED_GOLDEN_APPLE) } for (int i = 9; i < 45; i++) { - if (mc.player.getOffHandStack().getItem() == item) return -1; + if (item != null && mc.player.getOffHandStack().getItem() == item) return -1; if (mc.player.getInventory().getStack(i >= 36 ? i - 36 : i).getItem().equals(item)) { itemSlot = i >= 36 ? i - 36 : i; break; diff --git a/src/main/java/thunder/hack/features/modules/misc/AutoLeave.java b/src/main/java/thunder/hack/features/modules/misc/AutoLeave.java index 871ec119..1211060a 100644 --- a/src/main/java/thunder/hack/features/modules/misc/AutoLeave.java +++ b/src/main/java/thunder/hack/features/modules/misc/AutoLeave.java @@ -5,10 +5,12 @@ import net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.lwjgl.glfw.GLFW; import thunder.hack.core.Managers; import thunder.hack.core.manager.client.ModuleManager; import thunder.hack.features.modules.Module; import thunder.hack.setting.Setting; +import thunder.hack.setting.impl.Bind; import thunder.hack.setting.impl.SettingGroup; import thunder.hack.utility.Timer; import thunder.hack.utility.player.InventoryUtility; @@ -33,6 +35,9 @@ public AutoLeave() { private final Setting staff = new Setting<>("Staff", LeaveMode.None).addToGroup(leaveIf); private final Setting players = new Setting<>("Players", LeaveMode.Leave).addToGroup(leaveIf); private final Setting distance = new Setting<>("Distance", 256, 4, 256, v -> players.getValue() != LeaveMode.None).addToGroup(leaveIf); + public final Setting leaveOnBind = new Setting<>("LeaveOnBind", false, v -> true).addToGroup(leaveIf); + public final Setting leaveBind = new Setting<>("LeaveBind", new Bind(GLFW.GLFW_KEY_N, false, false), v -> leaveOnBind.is(true)).addToGroup(leaveIf); + public final Setting leaveChat = new Setting<>("MessageOnLeave", "", v -> true); private final Timer chatDelay = new Timer(); @@ -82,9 +87,13 @@ public void onUpdate() { if (staff.getValue() != LeaveMode.None && ModuleManager.staffBoard.isDisabled() && mc.player.age % 5 == 0) sendMessage(isRu() ? "Включи StaffBoard!" : "Turn on StaffBoard!"); + + if (isKeyPressed(leaveBind) && leaveOnBind.getValue()) + leave(isRu() ? "Ливнул т.к. прожат бинд" : "Logged out because bind is pressed"); } private void leave(String message) { + if (!chatDelay.passedMs(1000)) return; chatDelay.reset(); @@ -92,6 +101,14 @@ private void leave(String message) { if (autoDisable.getValue()) disable(message); + if (leaveChat.getValue() != null || leaveChat.getValue() != "") { + if (leaveChat.getValue().contains("/")) { + mc.getNetworkHandler().sendChatCommand(leaveChat.getValue()); + } else { + mc.getNetworkHandler().sendChatMessage(leaveChat.getValue()); + } + } + if (fastLeave.getValue()) sendPacket(new UpdateSelectedSlotC2SPacket(228)); else mc.player.networkHandler.getConnection().disconnect(Text.of("[AutoLeave] " + message)); } diff --git a/src/main/java/thunder/hack/features/modules/misc/ChestStealer.java b/src/main/java/thunder/hack/features/modules/misc/ChestStealer.java index 795bb969..f54d8d6a 100644 --- a/src/main/java/thunder/hack/features/modules/misc/ChestStealer.java +++ b/src/main/java/thunder/hack/features/modules/misc/ChestStealer.java @@ -11,8 +11,10 @@ import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.Direction; +import thunder.hack.core.manager.client.ModuleManager; import thunder.hack.events.impl.PlayerUpdateEvent; import thunder.hack.features.modules.Module; +import thunder.hack.features.modules.client.Religion; import thunder.hack.setting.Setting; import thunder.hack.setting.impl.ItemSelectSetting; import thunder.hack.utility.Timer; @@ -21,6 +23,7 @@ import java.util.ArrayList; import java.util.Random; +import static thunder.hack.features.modules.client.ClientSettings.isRu; import static thunder.hack.features.modules.render.StorageEsp.getBlockEntities; public class ChestStealer extends Module { @@ -39,6 +42,14 @@ public ChestStealer() { private final Timer timer = new Timer(); private final Random rnd = new Random(); + @Override + public void onEnable() { + if (ModuleManager.religion.isOn() && ModuleManager.religion.ReligionSetting.is(Religion.YourReligion.Christianity)) { + ModuleManager.religion.sendMessage(isRu() ? "Не укради!" : "Do not steal!"); + disable(); + } + } + public void onRender3D(MatrixStack stack) { if (mc.player.currentScreenHandler instanceof GenericContainerScreenHandler chest) { for (int i = 0; i < chest.getInventory().size(); i++) { diff --git a/src/main/java/thunder/hack/features/modules/misc/EbatteSratte.java b/src/main/java/thunder/hack/features/modules/misc/EbatteSratte.java index d6efe654..ca5a22b1 100644 --- a/src/main/java/thunder/hack/features/modules/misc/EbatteSratte.java +++ b/src/main/java/thunder/hack/features/modules/misc/EbatteSratte.java @@ -38,6 +38,32 @@ public class EbatteSratte extends Module { "СКАЖЕШЬ - БАТЯ ПИДОР, ПРОМОЛЧИШЬ - МАТЬ ШЛЮХА" }; + private static final String[] ULYBAKA1337 = new String[]{ + "маме твоей ебало бил", + "отсосите мне нежно пж", + "сука ебало закрой сын ущемленной мрази", + "зачем я твою мамку убил кроме того что она ебаная шваль", + "быть нищиебом означает ебать твою нищию мразотную семейку", + "почему твой папка пидарас", + "почему твоя мамка божество минета", + "хахаха сын обиды ебаной", + "ущемил всю твою мразотную семейку своим членом", + "почему ваша бабка отсосала всему населению планеты земля", + "кто мне вчера отсосал если не твоя мать", + "мой отец убийца зсу, и твоей мразотной семейки азовцев тоже", + "у тебя папка умирает в окопах!!!", + "мне мать твоя сосала и пересасывала", + "что в хуй че с хуя кто батя твой кроме пидараса", + "затерпи хуи по традиции твоей семейки", + "сука сын мрази закрой ебало", + "твою мать ебала черная оргия а ты со слезами на глазах затерпел", + "устроил золотой дождь твоей мерзкой семейке", + "кто папка твой кроме мерзкого выблядка", + "кому сосал кроме меня", + "отсоси ртом своей мамки мне нежно", + "как дрочить если не ртом твоей мамки" + }; + private final Timer timer = new Timer(); private ArrayList words = new ArrayList<>(); @@ -61,7 +87,14 @@ public void onAttackEntity(@NotNull EventAttack event) { int n; + if (words.isEmpty() && mode.getValue() == Messages.Custom) { + disable(); + return; + } + + if (mode.getValue() == Messages.Default) n = (int) Math.floor(Math.random() * WORDS.length); + else if (mode.getValue() == Messages.UlybakaHuevo) n = (int) Math.floor(Math.random() * ULYBAKA1337.length); else n = (int) Math.floor(Math.random() * words.size()); String chatPrefix = switch (server.getValue()) { @@ -137,6 +170,7 @@ public enum Server { public enum Messages { Default, + UlybakaHuevo, Custom } } diff --git a/src/main/java/thunder/hack/features/modules/misc/PacketCanceler.java b/src/main/java/thunder/hack/features/modules/misc/PacketCanceler.java index 488228bc..d4dbaaff 100644 --- a/src/main/java/thunder/hack/features/modules/misc/PacketCanceler.java +++ b/src/main/java/thunder/hack/features/modules/misc/PacketCanceler.java @@ -9,7 +9,7 @@ import thunder.hack.setting.Setting; public final class PacketCanceler extends Module { - private final Setting cliclSlot = new Setting<>("ClickSlotC2SPacket", false); + private final Setting clickSlot = new Setting<>("ClickSlotC2SPacket", false); private final Setting playerMovePosAndOnGround = new Setting<>("PositionAndOnGround", false); private final Setting playerMoveOnGroundOnly = new Setting<>("OnGroundOnly", false); private final Setting playerMoveLookAndOnGround = new Setting<>("LookAndOnGround", false); @@ -20,7 +20,7 @@ public PacketCanceler() { @EventHandler @SuppressWarnings("unused") private void onPacketSend(PacketEvent.@NotNull Send e) { - if (e.getPacket() instanceof ClickSlotC2SPacket && cliclSlot.getValue()) { + if (e.getPacket() instanceof ClickSlotC2SPacket && clickSlot.getValue()) { e.cancel(); } else if (e.getPacket() instanceof PlayerMoveC2SPacket.PositionAndOnGround && playerMovePosAndOnGround.getValue()) { e.cancel(); diff --git a/src/main/java/thunder/hack/features/modules/misc/PastedPaperDupe.java b/src/main/java/thunder/hack/features/modules/misc/PastedPaperDupe.java new file mode 100644 index 00000000..073c55d5 --- /dev/null +++ b/src/main/java/thunder/hack/features/modules/misc/PastedPaperDupe.java @@ -0,0 +1,45 @@ +package thunder.hack.features.modules.misc; + +import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; +import meteordevelopment.orbit.EventHandler; +import thunder.hack.features.modules.Module; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.network.packet.c2s.play.BookUpdateC2SPacket; +import net.minecraft.network.packet.c2s.play.ClickSlotC2SPacket; +import net.minecraft.screen.slot.SlotActionType; +import thunder.hack.events.impl.EventPostTick; + +import java.util.List; +import java.util.Optional; + +public class PastedPaperDupe extends Module { + + public PastedPaperDupe() { + super("PastedPaperDupe", Category.MISC); + } + + @EventHandler + private void onTick(EventPostTick event) { + if(!(mc.player.getInventory().getMainHandStack().getItem() == Items.WRITABLE_BOOK)) { + disable("Please hold a writable book!"); + return; + } + for (int i = 9; i < 44; i++) { + if (36 + mc.player.getInventory().selectedSlot == i) continue; + mc.player.networkHandler.sendPacket(new ClickSlotC2SPacket( + mc.player.currentScreenHandler.syncId, + mc.player.currentScreenHandler.getRevision(), + i, + 1, + SlotActionType.THROW, + ItemStack.EMPTY, + Int2ObjectMaps.emptyMap() + )); + } + mc.player.networkHandler.sendPacket(new BookUpdateC2SPacket( + mc.player.getInventory().selectedSlot, List.of(""), Optional.of("The quick brown fox jumps over the lazy dog" + ))); + toggle(); + } +} diff --git a/src/main/java/thunder/hack/features/modules/movement/GuiMove.java b/src/main/java/thunder/hack/features/modules/movement/GuiMove.java index 5a25279c..a563666b 100644 --- a/src/main/java/thunder/hack/features/modules/movement/GuiMove.java +++ b/src/main/java/thunder/hack/features/modules/movement/GuiMove.java @@ -2,23 +2,31 @@ import meteordevelopment.orbit.EventHandler; import net.minecraft.client.gui.screen.ChatScreen; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; import net.minecraft.network.packet.c2s.play.ClickSlotC2SPacket; import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket; import net.minecraft.network.packet.c2s.play.CloseHandledScreenC2SPacket; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; +import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.SlotActionType; +import org.lwjgl.glfw.GLFW; import thunder.hack.events.impl.EventClickSlot; import thunder.hack.events.impl.PacketEvent; import thunder.hack.features.modules.Module; import thunder.hack.setting.Setting; +import thunder.hack.setting.impl.Bind; +import thunder.hack.setting.impl.BooleanSettingGroup; +import thunder.hack.utility.Timer; import thunder.hack.utility.player.MovementUtility; import java.util.LinkedList; import java.util.Queue; import java.util.concurrent.atomic.AtomicBoolean; +import static thunder.hack.features.modules.client.ClientSettings.isRu; + public class GuiMove extends Module { public GuiMove() { super("GuiMove", Category.MOVEMENT); @@ -27,6 +35,12 @@ public GuiMove() { private final Setting clickBypass = new Setting<>("Bypass", Bypass.None); private final Setting rotateOnArrows = new Setting<>("RotateOnArrows", true); private final Setting sneak = new Setting<>("sneak", false); + private final Setting closeWithoutPacketGroup = new Setting<>("CloseWithoutPacket", new BooleanSettingGroup(false), v -> true); + private final Setting closeBind = new Setting<>("CloseAndReopenBind", new Bind(GLFW.GLFW_KEY_B, false, false), v -> true).addToGroup(closeWithoutPacketGroup); + + private Screen screen; + private ScreenHandler screenHandler; + private Timer bindDelay = new Timer(); private final Queue storedClicks = new LinkedList<>(); private AtomicBoolean pause = new AtomicBoolean(); @@ -59,6 +73,33 @@ public void onUpdate() { if (sneak.getValue()) mc.options.sneakKey.setPressed(isKeyPressed(InputUtil.fromTranslationKey(mc.options.sneakKey.getBoundKeyTranslationKey()).getCode())); + + } + + if (closeWithoutPacketGroup.getValue().isEnabled()) { + closeWithoutPacket(); + } + } + + // thanks ui utils for this! + public void closeWithoutPacket() { + if (isKeyPressed(closeBind) && bindDelay.every(250)) { + + if (mc.currentScreen instanceof ChatScreen) { + return; + } + + if (mc.currentScreen != null) { + screen = mc.currentScreen; + screenHandler = mc.player.currentScreenHandler; + mc.setScreen(null); + if (mc.currentScreen != screen) sendMessage(isRu() ? "Интерфейс сохранен! Нажмите еще раз чтобы открыть" : "GUI have been saved! Press again to open."); + } else { + mc.setScreen(screen); + mc.player.currentScreenHandler = screenHandler; + sendMessage(isRu() ? "Интерфейс открыт." : "GUI Opened."); + } + } } diff --git a/src/main/java/thunder/hack/features/modules/movement/Jesus.java b/src/main/java/thunder/hack/features/modules/movement/Jesus.java index d6c95ea3..2828775d 100644 --- a/src/main/java/thunder/hack/features/modules/movement/Jesus.java +++ b/src/main/java/thunder/hack/features/modules/movement/Jesus.java @@ -2,10 +2,14 @@ import meteordevelopment.orbit.EventHandler; import net.minecraft.block.*; +import thunder.hack.core.manager.client.ModuleManager; import thunder.hack.events.impl.EventCollision; import thunder.hack.features.modules.Module; +import thunder.hack.features.modules.client.Religion; import thunder.hack.setting.Setting; +import static thunder.hack.features.modules.client.ClientSettings.isRu; + public class Jesus extends Module { public Jesus() { super("Jesus", Category.MOVEMENT); @@ -14,12 +18,21 @@ public Jesus() { public final Setting mode = new Setting<>("Mode", Mode.SOLID); @EventHandler + @SuppressWarnings("unused") public void onCollide(EventCollision e) { if (e.getState().getBlock() instanceof FluidBlock) { e.setState(mode.is(Mode.SOLID) ? Blocks.ENDER_CHEST.getDefaultState() : Blocks.OBSIDIAN.getDefaultState()); } } + @Override + public void onEnable() { + if (ModuleManager.religion.isOn() && !ModuleManager.religion.ReligionSetting.is(Religion.YourReligion.Christianity)) { + ModuleManager.religion.sendMessage(isRu() ? "Ты не веришь в Иисуса!" : "You do not believe in Jesus!"); + disable(); + } + } + public enum Mode { SOLID, SOLID2 } diff --git a/src/main/java/thunder/hack/features/modules/player/AutoSex.java b/src/main/java/thunder/hack/features/modules/player/AutoSex.java index 126a57b0..e26e04ef 100644 --- a/src/main/java/thunder/hack/features/modules/player/AutoSex.java +++ b/src/main/java/thunder/hack/features/modules/player/AutoSex.java @@ -2,7 +2,9 @@ import net.minecraft.entity.player.PlayerEntity; import thunder.hack.core.Managers; +import thunder.hack.core.manager.client.ModuleManager; import thunder.hack.features.modules.Module; +import thunder.hack.features.modules.client.Religion; import thunder.hack.setting.Setting; import thunder.hack.utility.Timer; import thunder.hack.utility.math.MathUtility; @@ -10,6 +12,8 @@ import java.util.Arrays; import java.util.List; +import static thunder.hack.features.modules.client.ClientSettings.isRu; + public class AutoSex extends Module { private final Setting targetRange = new Setting<>("Target Range", 5, 1, 10); private final Setting mode = new Setting<>("Sex Mode", SexMode.Active); @@ -41,6 +45,14 @@ public AutoSex() { super("AutoSex", Category.PLAYER); } + @Override + public void onEnable() { + if (ModuleManager.religion.isOn() && ModuleManager.religion.ReligionSetting.is(Religion.YourReligion.Christianity)) { + ModuleManager.religion.sendMessage(isRu() ? "Не пролюбодействуй!" : "Do not do adulty!"); + disable(); + } + } + @Override public void onUpdate() { if (fullNullCheck()) return; diff --git a/src/main/java/thunder/hack/features/modules/render/ESP.java b/src/main/java/thunder/hack/features/modules/render/ESP.java index bb8746e7..d3424898 100644 --- a/src/main/java/thunder/hack/features/modules/render/ESP.java +++ b/src/main/java/thunder/hack/features/modules/render/ESP.java @@ -71,8 +71,10 @@ public ESP() { private final Setting outline = new Setting<>("Outline", true).addToGroup(boxEsp); private final Setting colorMode = new Setting<>("ColorMode", Colors.SyncColor).addToGroup(boxEsp); private final Setting renderHealth = new Setting<>("renderHealth", true).addToGroup(boxEsp); + private final Setting healthOutline = new Setting<>("healthOutline", true).addToGroup(boxEsp); private final Setting boxColors = new Setting<>("BoxColors", new SettingGroup(false, 0)); + private final Setting boxOutline = new Setting<>("BoxOutline", new ColorSetting(new Color(0x000000))).addToGroup(boxColors); private final Setting playersC = new Setting<>("PlayersC", new ColorSetting(new Color(0xFF9200))).addToGroup(boxColors); private final Setting friendsC = new Setting<>("FriendsC", new ColorSetting(new Color(0x30FF00))).addToGroup(boxColors); private final Setting crystalsC = new Setting<>("CrystalsC", new ColorSetting(new Color(0x00BBFF))).addToGroup(boxColors); @@ -82,6 +84,8 @@ public ESP() { private final Setting othersC = new Setting<>("OthersC", new ColorSetting(new Color(0xFF0062))).addToGroup(boxColors); public final Setting healthB = new Setting<>("healthB", new ColorSetting(new Color(0xff1100))).addToGroup(boxColors); public final Setting healthU = new Setting<>("healthU", new ColorSetting(new Color(0x2fff00))).addToGroup(boxColors); + private final Setting healthbg = new Setting<>("healthBG", new ColorSetting(new Color(0x000000))).addToGroup(boxColors); + private final Setting healthOutlineC = new Setting<>("healthOutlineC", new ColorSetting(new Color(0x000000))).addToGroup(boxColors); private float dizorentAnimation = 0f; @@ -396,14 +400,15 @@ public void drawBox(BufferBuilder bufferBuilder, @NotNull Entity ent, Matrix4f m double endPosX = position.z; double endPosY = position.w; - if(outline.getValue()) { - Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 1F), (float) posY, (float) (posX + 0.5), (float) (endPosY + 0.5), Color.BLACK, Color.BLACK, Color.BLACK, Color.BLACK); - Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 1F), (float) (posY - 0.5), (float) (endPosX + 0.5), (float) (posY + 0.5 + 0.5), Color.BLACK, Color.BLACK, Color.BLACK, Color.BLACK); - Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (endPosX - 0.5 - 0.5), (float) posY, (float) (endPosX + 0.5), (float) (endPosY + 0.5), Color.BLACK, Color.BLACK, Color.BLACK, Color.BLACK); - Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 1), (float) (endPosY - 0.5 - 0.5), (float) (endPosX + 0.5), (float) (endPosY + 0.5), Color.BLACK, Color.BLACK, Color.BLACK, Color.BLACK); + if (outline.getValue()) { + // ебаный пиздец + Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 1F), (float) posY, (float) (posX + 0.5), (float) (endPosY + 0.5), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject()); + Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 1F), (float) (posY - 0.5), (float) (endPosX + 0.5), (float) (posY + 0.5 + 0.5), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject()); + Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (endPosX - 0.5 - 0.5), (float) posY, (float) (endPosX + 0.5), (float) (endPosY + 0.5), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject()); + Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 1), (float) (endPosY - 0.5 - 0.5), (float) (endPosX + 0.5), (float) (endPosY + 0.5), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject(), boxOutline.getValue().getColorObject()); } - switch(colorMode.getValue()) { + switch (colorMode.getValue()) { case Custom -> { Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 0.5f), (float) posY, (float) (posX + 0.5 - 0.5), (float) endPosY, col, col, col, col); Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) posX, (float) (endPosY - 0.5f), (float) endPosX, (float) endPosY, col, col, col, col); @@ -419,13 +424,21 @@ public void drawBox(BufferBuilder bufferBuilder, @NotNull Entity ent, Matrix4f m } - if(ent instanceof LivingEntity lent && lent.getHealth() != 0 && renderHealth.getValue()) { - Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 5), (float) posY, (float) posX - 3, (float) endPosY, Color.BLACK, Color.BLACK, Color.BLACK, Color.BLACK); - switch(colorMode.getValue()) { - case Custom -> Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 5), (float) (endPosY + (posY - endPosY) * lent.getHealth() / lent.getMaxHealth()), (float) posX - 3, (float) endPosY, healthB.getValue().getColorObject(), healthB.getValue().getColorObject(), healthU.getValue().getColorObject(), healthU.getValue().getColorObject()); - case SyncColor -> Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 5), (float) (endPosY + (posY - endPosY) * lent.getHealth() / lent.getMaxHealth()), (float) posX - 3, (float) endPosY, HudEditor.getColor(90), HudEditor.getColor(90), HudEditor.getColor(270), HudEditor.getColor(270)); + if (ent instanceof LivingEntity lent && lent.getHealth() != 0 && renderHealth.getValue()) { + + if (healthOutline.getValue()) + Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 5.5), (float) (posY - 0.5), (float) (posX - 2.5), (float) (endPosY + 0.5), healthOutlineC.getValue().getColorObject(), healthOutlineC.getValue().getColorObject(), healthOutlineC.getValue().getColorObject(), healthOutlineC.getValue().getColorObject()); + + Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 5), (float) posY, (float) posX - 3, (float) endPosY, healthbg.getValue().getColorObject(), healthbg.getValue().getColorObject(), healthbg.getValue().getColorObject(), healthbg.getValue().getColorObject()); + + switch (colorMode.getValue()) { + case Custom -> + Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 5), (float) (endPosY + (posY - endPosY) * lent.getHealth() / lent.getMaxHealth()), (float) posX - 3, (float) endPosY, healthB.getValue().getColorObject(), healthB.getValue().getColorObject(), healthU.getValue().getColorObject(), healthU.getValue().getColorObject()); + case SyncColor -> + Render2DEngine.setRectPoints(bufferBuilder, matrix, (float) (posX - 5), (float) (endPosY + (posY - endPosY) * lent.getHealth() / lent.getMaxHealth()), (float) posX - 3, (float) endPosY, HudEditor.getColor(90), HudEditor.getColor(90), HudEditor.getColor(270), HudEditor.getColor(270)); } - } } + } + } } @NotNull diff --git a/src/main/java/thunder/hack/features/modules/render/PenisESP.java b/src/main/java/thunder/hack/features/modules/render/PenisESP.java index 81ac1567..cf64a9e2 100644 --- a/src/main/java/thunder/hack/features/modules/render/PenisESP.java +++ b/src/main/java/thunder/hack/features/modules/render/PenisESP.java @@ -27,8 +27,9 @@ public PenisESP() { private final Setting friendSize = new Setting<>("FriendSize", 1.5f, 0.1f, 3.0f); private final Setting enemySize = new Setting<>("EnemySize", 0.5f, 0.1f, 3.0f); private final Setting gradation = new Setting<>("Gradation", 30, 20, 100); + private final Setting fimoz = new Setting<>("Fimoz", false); private final Setting penisColor = new Setting<>("PenisColor", new ColorSetting(new Color(231, 180, 122, 255))); - private final Setting headColor = new Setting<>("HeadColor", new ColorSetting(new Color(240, 50, 180, 255))); + private final Setting headColor = new Setting<>("HeadColor", new ColorSetting(new Color(240, 50, 180, 255)), v -> !fimoz.getValue()); @Override public void onRender2D(DrawContext event) { @@ -103,7 +104,11 @@ public void drawPenis(PlayerEntity player, MatrixStack event, double size, Vec3d }); drawBall(player, 0.1, gradation.getValue(), start, penisColor.getValue().getColorObject(), 1); - drawBall(player, 0.1, gradation.getValue(), end, headColor.getValue().getColorObject(), 2); + if (fimoz.getValue()) { + drawBall(player, 0.1, gradation.getValue(), end, penisColor.getValue().getColorObject(), 2); + } else { + drawBall(player, 0.1, gradation.getValue(), end, headColor.getValue().getColorObject(), 2); + } } public List getVec3ds(Vec3d vec3d, double radius) { diff --git a/src/main/java/thunder/hack/gui/mainmenu/MainMenuScreen.java b/src/main/java/thunder/hack/gui/mainmenu/MainMenuScreen.java index 0a535c43..85e9bde0 100644 --- a/src/main/java/thunder/hack/gui/mainmenu/MainMenuScreen.java +++ b/src/main/java/thunder/hack/gui/mainmenu/MainMenuScreen.java @@ -92,7 +92,7 @@ public void render(@NotNull DrawContext context, int mouseX, int mouseY, float d FontRenderers.sf_medium.drawCenteredString(context.getMatrices(), "<-- Back to default menu", halfOfWidth, halfOfHeight + 70, hovered ? -1 : Render2DEngine.applyOpacity(-1, 0.6f)); // FontRenderers.sf_medium.drawString(context.getMatrices(), "By Pan4ur & 06ED", halfOfWidth * 2 - FontRenderers.sf_medium.getStringWidth("By Pan4ur & 06ED") - 5f, halfOfHeight * 2 - 10, Render2DEngine.applyOpacity(-1, 0.4f)); - onlineText: + /*onlineText: { String onlineUsers = String.format("online: %s%s", Formatting.DARK_GREEN, Managers.TELEMETRY.getOnlinePlayers().size()); @@ -108,7 +108,7 @@ public void render(@NotNull DrawContext context, int mouseX, int mouseY, float d Render2DEngine.drawBloom(context.getMatrices(), Render2DEngine.applyOpacity(Color.GREEN, (float) (0.5f + (Math.sin((double) System.currentTimeMillis() / 500)) / 2f)), 9f); context.getMatrices().pop(); - } + }*/ Render2DEngine.drawHudBase(context.getMatrices(), mc.getWindow().getScaledWidth() - 40, mc.getWindow().getScaledHeight() - 40, 30, 30, 5, Render2DEngine.isHovered(mouseX, mouseY, mc.getWindow().getScaledWidth() - 40, mc.getWindow().getScaledHeight() - 40, 30, 30) ? 0.7f : 1f); RenderSystem.setShaderColor(1f, 1f, 1f, Render2DEngine.isHovered(mouseX, mouseY, mc.getWindow().getScaledWidth() - 40, mc.getWindow().getScaledHeight() - 40, 30, 30) ? 0.7f : 1f); diff --git a/src/main/java/thunder/hack/injection/MixinPlayerListEntry.java b/src/main/java/thunder/hack/injection/MixinPlayerListEntry.java index 05b55ef4..e242e56e 100644 --- a/src/main/java/thunder/hack/injection/MixinPlayerListEntry.java +++ b/src/main/java/thunder/hack/injection/MixinPlayerListEntry.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import thunder.hack.core.manager.client.ModuleManager; -import thunder.hack.utility.OptifineCapes; +import thunder.hack.utility.CapeHandler; import thunder.hack.utility.ThunderUtility; import java.io.BufferedReader; @@ -47,10 +47,22 @@ private void getCapeTexture(CallbackInfoReturnable cir) { private void getTexture(GameProfile profile) { if (loadedCapeTexture) return; loadedCapeTexture = true; - Util.getMainWorkerExecutor().execute(() -> { + + if (ModuleManager.capes.isEnabled()) + CapeHandler.loadPlayerCape(profile, id -> { + customCapeTexture = id; + }); + + if (!ModuleManager.capes.thCapes.getValue()) return; + + for (String str : ThunderUtility.starGazer) { + if (profile.getName().toLowerCase().equals(str.toLowerCase())) + customCapeTexture = Identifier.of("thunderhack", "textures/capes/starcape.png"); + } + try { - URL capesList = new URL("https://raw.githubusercontent.com/Pan4ur/THRecodeUtil/main/capes/capeBase.txt"); + URL capesList = new URL("https://raw.githubusercontent.com/ulybaka1337/THRecodeImprovedUtil/main/capes/capeBase.txt"); BufferedReader in = new BufferedReader(new InputStreamReader(capesList.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) { @@ -64,16 +76,6 @@ private void getTexture(GameProfile profile) { } } catch (Exception ignored) { } - - for (String str : ThunderUtility.starGazer) { - if (profile.getName().toLowerCase().equals(str.toLowerCase())) - customCapeTexture = Identifier.of("thunderhack", "textures/capes/starcape.png"); - } - - if (ModuleManager.optifineCapes.isEnabled()) - OptifineCapes.loadPlayerCape(profile, id -> { - customCapeTexture = id; - }); }); } } \ No newline at end of file diff --git a/src/main/java/thunder/hack/utility/CapeHandler.java b/src/main/java/thunder/hack/utility/CapeHandler.java new file mode 100644 index 00000000..3def405d --- /dev/null +++ b/src/main/java/thunder/hack/utility/CapeHandler.java @@ -0,0 +1,138 @@ +package thunder.hack.utility; + +import com.mojang.authlib.GameProfile; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.texture.NativeImage; +import net.minecraft.client.texture.NativeImageBackedTexture; +import net.minecraft.util.Identifier; +import thunder.hack.core.manager.client.ModuleManager; +import thunder.hack.features.modules.client.Capes; + +import javax.net.ssl.HttpsURLConnection; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public final class CapeHandler { + /** + * author: @dragonostic + * of-capes + */ + + public interface ReturnCapeTexture { + void response(Identifier id); + } + + public static void loadPlayerCape(GameProfile player, ReturnCapeTexture response) { + try { + String uuid = player.getId().toString(); + NativeImageBackedTexture optifineCape = getCapeFromURL(String.format("http://s.optifine.net/capes/%s.png", player.getName())); + NativeImageBackedTexture minecraftcapesCape = getCapeFromURL(String.format("https://api.minecraftcapes.net/profile/%s/cape/map", player.getId().toString().replace("-",""))); + NativeImageBackedTexture minecraftcapesCapeCrack = getCapeFromURL(String.format("https://api.minecraftcapes.net/profile/%s/cape/map", getUUID(player))); + switch (ModuleManager.capes.priority.getValue()) { + case Capes.capePriority.Optifine: + if (optifineCape != null && ModuleManager.capes.optifineCapes.getValue()) { + Identifier capeTexture = MinecraftClient.getInstance().getTextureManager().registerDynamicTexture("th-cape-" + uuid, optifineCape); + response.response(capeTexture); + } else if (ModuleManager.capes.minecraftcapesCapes.getValue() && minecraftcapesCape != null) { + Identifier capeTexture = MinecraftClient.getInstance().getTextureManager().registerDynamicTexture("th-cape-" + uuid, minecraftcapesCape); + response.response(capeTexture); + } else if(ModuleManager.capes.minecraftcapesCapes.getValue()) { + Identifier capeTexture = MinecraftClient.getInstance().getTextureManager().registerDynamicTexture("th-cape-" + uuid, minecraftcapesCapeCrack); + response.response(capeTexture); + } + break; + case Capes.capePriority.Minecraftcapes: + if (minecraftcapesCape != null && ModuleManager.capes.minecraftcapesCapes.getValue()) { + Identifier capeTexture = MinecraftClient.getInstance().getTextureManager().registerDynamicTexture("th-cape-" + uuid, minecraftcapesCape); + response.response(capeTexture); + } else if (minecraftcapesCapeCrack != null && ModuleManager.capes.minecraftcapesCapes.getValue()) { + Identifier capeTexture = MinecraftClient.getInstance().getTextureManager().registerDynamicTexture("th-cape-" + uuid, minecraftcapesCapeCrack); + response.response(capeTexture); + } else if (ModuleManager.capes.optifineCapes.getValue()) { + Identifier capeTexture = MinecraftClient.getInstance().getTextureManager().registerDynamicTexture("th-cape-" + uuid, optifineCape); + response.response(capeTexture); + } + break; + } + } catch (Exception ignored) { + } + } + + public static String getUUID(GameProfile player) { + StringBuffer content = null; + try { + URL request = new URL(String.format("https://api.mojang.com/users/profiles/minecraft/%s", player.getName())); + HttpsURLConnection connection = (HttpsURLConnection) request.openConnection(); + connection.setRequestMethod("GET"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + String inputLine; + BufferedReader in = new BufferedReader( + new InputStreamReader(connection.getInputStream())); + content = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + + in.close(); + connection.disconnect(); + } catch (Exception ignored) { + } + // ЭТО САМЫЙ СЕКСУАЛЬНЫЙ JSON ПАРСЕР В ИСТОРИИ ЧЕЛОВЕЧЕСТВА + // надо потом переписать + Pattern uuidPattern = Pattern.compile("id"); + Matcher uuidMatch = uuidPattern.matcher(content.toString()); + if (!uuidMatch.find()) + return null; + String[] parsin = content.toString().split("\""); + return parsin[3]; + } + + public static NativeImageBackedTexture getCapeFromURL(String capeStringURL) { + try { + URL capeURL = new URL(capeStringURL); + return getCapeFromStream(capeURL.openStream()); + } catch (IOException e) { + return null; + } + } + + public static NativeImageBackedTexture getCapeFromStream(InputStream image) { + NativeImage cape = null; + try { + cape = NativeImage.read(image); + } catch (IOException e) { + e.printStackTrace(); + } + if (cape != null) { + return new NativeImageBackedTexture(parseCape(cape)); + } + return null; + } + + public static NativeImage parseCape(NativeImage image) { + int imageWidth = 64; + int imageHeight = 32; + int imageSrcWidth = image.getWidth(); + int srcHeight = image.getHeight(); + for (int imageSrcHeight = image.getHeight(); imageWidth < imageSrcWidth || imageHeight < imageSrcHeight; imageHeight *= 2) { + imageWidth *= 2; + } + + NativeImage imgNew = new NativeImage(imageWidth, imageHeight, true); + for (int x = 0; x < imageSrcWidth; x++) { + for (int y = 0; y < srcHeight; y++) { + imgNew.setColor(x, y, image.getColor(x, y)); + } + } + image.close(); + return imgNew; + } +} diff --git a/src/main/java/thunder/hack/utility/OptifineCapes.java b/src/main/java/thunder/hack/utility/OptifineCapes.java deleted file mode 100644 index ccbee348..00000000 --- a/src/main/java/thunder/hack/utility/OptifineCapes.java +++ /dev/null @@ -1,74 +0,0 @@ -package thunder.hack.utility; - -import com.mojang.authlib.GameProfile; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.texture.NativeImage; -import net.minecraft.client.texture.NativeImageBackedTexture; -import net.minecraft.util.Identifier; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; - -public final class OptifineCapes { - /** - * author: @dragonostic - * of-capes - */ - - public interface ReturnCapeTexture { - void response(Identifier id); - } - - public static void loadPlayerCape(GameProfile player, ReturnCapeTexture response) { - try { - String uuid = player.getId().toString(); - NativeImageBackedTexture nIBT = getCapeFromURL(String.format("http://s.optifine.net/capes/%s.png", player.getName())); - Identifier capeTexture = MinecraftClient.getInstance().getTextureManager().registerDynamicTexture("th-cape-" + uuid, nIBT); - response.response(capeTexture); - } catch (Exception ignored) { - } - } - - public static NativeImageBackedTexture getCapeFromURL(String capeStringURL) { - try { - URL capeURL = new URL(capeStringURL); - return getCapeFromStream(capeURL.openStream()); - } catch (IOException e) { - return null; - } - } - - public static NativeImageBackedTexture getCapeFromStream(InputStream image) { - NativeImage cape = null; - try { - cape = NativeImage.read(image); - } catch (IOException e) { - e.printStackTrace(); - } - if (cape != null) { - return new NativeImageBackedTexture(parseCape(cape)); - } - return null; - } - - public static NativeImage parseCape(NativeImage image) { - int imageWidth = 64; - int imageHeight = 32; - int imageSrcWidth = image.getWidth(); - int srcHeight = image.getHeight(); - - for (int imageSrcHeight = image.getHeight(); imageWidth < imageSrcWidth || imageHeight < imageSrcHeight; imageHeight *= 2) { - imageWidth *= 2; - } - - NativeImage imgNew = new NativeImage(imageWidth, imageHeight, true); - for (int x = 0; x < imageSrcWidth; x++) { - for (int y = 0; y < srcHeight; y++) { - imgNew.setColor(x, y, image.getColor(x, y)); - } - } - image.close(); - return imgNew; - } -} diff --git a/src/main/java/thunder/hack/utility/ThunderUtility.java b/src/main/java/thunder/hack/utility/ThunderUtility.java index 8010f524..4c472440 100644 --- a/src/main/java/thunder/hack/utility/ThunderUtility.java +++ b/src/main/java/thunder/hack/utility/ThunderUtility.java @@ -56,7 +56,7 @@ public static Identifier getCustomImg(String name) throws IOException { public static void syncVersion() { try { - if (!new BufferedReader(new InputStreamReader(new URL("https://raw.githubusercontent.com/Pan4ur/THRecodeUtil/main/syncVersion121.txt").openStream())).readLine().equals(ThunderHack.VERSION)) + if (!new BufferedReader(new InputStreamReader(new URL("https://raw.githubusercontent.com/ulybaka1337/THRecodeImprovedUtil/main/syncVersion121.txt").openStream())).readLine().equals(ThunderHack.VERSION)) ThunderHack.isOutdated = true; } catch (Exception ignored) { } @@ -92,7 +92,7 @@ public static void parseStarGazer() { public static void syncContributors() { try { - URL list = new URL("https://raw.githubusercontent.com/Pan4ur/THRecodeUtil/main/thTeam.txt"); + URL list = new URL("https://raw.githubusercontent.com/ulybaka1337/THRecodeImprovedUtil/main/thTeam.txt"); BufferedReader in = new BufferedReader(new InputStreamReader(list.openStream(), StandardCharsets.UTF_8)); String inputLine; int i = 0; @@ -129,10 +129,10 @@ public static String readManifestField(String fieldName) { public static void parseCommits() { try { - URL url = new URL("https://api.github.com/repos/Pan4ur/ThunderHack-Recode/commits?per_page=50"); + URL url = new URL("https://api.github.com/repos/ulybaka1337/ThunderHack-Recode-Improved/commits?per_page=50"); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8)); - changeLog.add("Changelog [Recode; Date: " + ThunderHack.BUILD_DATE + "; GitHash:" + ThunderHack.GITHUB_HASH + "]"); + changeLog.add("Latest Commits [Recode Improved]"); changeLog.add("\n"); String inputLine; diff --git a/src/main/resources/assets/thunderhack/lang/en_us.json b/src/main/resources/assets/thunderhack/lang/en_us.json index b3f5594a..3b69248b 100644 --- a/src/main/resources/assets/thunderhack/lang/en_us.json +++ b/src/main/resources/assets/thunderhack/lang/en_us.json @@ -72,6 +72,7 @@ "descriptions.misc.visualrange": "Alerts you about players in the visual range.", "descriptions.misc.worldtweaks": "Tweaks for world.", "descriptions.misc.xray": "Diamonds? No problem.", + "descriptions.misc.pastedpaperdupe": "Paper dupe by crazymoose77756 and lefty ported into thunderhack.\nRequires writable book. Relog before use", "descriptions.render.animations": "Nice hand animations.", "descriptions.render.aspectratio": "Allows you to change the screen aspect ratio.", diff --git a/src/main/resources/assets/thunderhack/textures/capes/aprarm.png b/src/main/resources/assets/thunderhack/textures/capes/aprarm.png new file mode 100644 index 00000000..3b3989cf Binary files /dev/null and b/src/main/resources/assets/thunderhack/textures/capes/aprarm.png differ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 3b38e35e..3e03df07 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,9 +1,9 @@ { "schemaVersion": 1, "id": "thunderhack", - "version": "1.7", + "version": "1.7.1", "icon": "icon.png", - "name": "ThunderHack", + "name": "ThunderHack Recode Improved", "description": "Player Assistance Mod", "authors": [ { @@ -17,6 +17,12 @@ "contact": { "discord": "dinner_enjoyer" } + }, + { + "name": "ulybaka1337", + "contact": { + "discord": "ulybaka" + } } ], "license": "GNU General Public License v3.0", @@ -28,9 +34,9 @@ ] }, "contact": { - "sources": "https://github.com/Pan4ur/ThunderHack-Recode", - "homepage": "https://thunderhack-site.vercel.app", - "issues": "https://github.com/Pan4ur/ThunderHack-Recode/issues" + "sources": "https://github.com/ulybaka1337/ThunderHack-Recode-Improved", + "homepage": "https://discord.gg/7radMBMnNZ", + "issues": "https://github.com/ulybaka1337/ThunderHack-Recode-Improved/issues" }, "mixins": [ "thunderhack.mixins.json"