Короче показываю 1 раз. Вот есть у вас к примеру мод на тот же Forge 1.16.5 (апи классное, всем мазохистам рекомендую) У вас 100% имеется проверка на хвид и все прочее. Как же можно попытаться сделать так чтобы вам какой нибудь сын леансани не перехукал все что только возможно? 1) Создаем массив с аргументами private static final String[] bald = { "-XBootclasspath", "-javaagent", "-Xdebug", "-agentlib", "-Xrunjdwp", "-Xnoagent", "-verbose", "-DproxySet", "-DproxyHost", "-DproxyPort", "-Djavax.net.ssl.trustStore", "-Djavax.net.ssl.trustStorePassword", "-noverify", "-patch-module" }; 2) Пишем наш сверх мега крутейший метод который будет все это чекать (соут желательно убираем), метод вызываем в нашем мейн классе -> init() public static void check() { try { Field jvmField = ManagementFactory.getRuntimeMXBean().getClass().getDeclaredField("jvm"); jvmField.setAccessible(true); VMManagement jvm = (VMManagement) jvmField.get(ManagementFactory.getRuntimeMXBean()); List<String> inputArguments = jvm.getVmArguments(); for (String arg : bald) { for (String inputArgument : inputArguments) { if (AHook.contains(inputArgument, arg)) { System.out.println("Idi nahuy!"); nuclear_strike(); } } } } catch (Throwable e) { nuclear_strike(); } } 3) По быстрому накидываем хуйню для моментального отправления нахуй private static final Unsafe unsafe; private static void nuclear_strike() { try { unsafe.putAddress(0, 0); } catch (Exception ignored) { } annihilate(); } private static void annihilate() { mc.execute(() -> { forceExit(); System.exit(87566); }); } private static void forceExit() { try { Thread.sleep(100); Runtime.getRuntime().halt(1); } catch (InterruptedException e) { Runtime.getRuntime().halt(1); } } 4) И для нашего чек метода создаем отдельный класс (который в дальнейшем должен быть кинут под нативку, в противном случае смысла от него как от этого поста) public class AHook { private AHook() { } public static boolean contains(CharSequence source, CharSequence target) { return indexOf(source.toString(), target.toString()) > -1; } public static int indexOf(String source, String target) { return indexOf(source, target, 0); } public static int indexOf(String source, String target, int fromIndex) { if (source == null || target == null) { return -1; } return indexOf(source.toCharArray(), 0, source.length(), target.toCharArray(), 0, target.length(), fromIndex); } private static int indexOf(char[] source, int sourceOffset, int sourceCount, char[] target, int targetOffset, int targetCount, int fromIndex) { if (fromIndex >= sourceCount) { return (targetCount == 0 ? sourceCount : -1); } if (fromIndex < 0) { fromIndex = 0; } if (targetCount == 0) { return fromIndex; } char first = target[targetOffset]; int max = sourceOffset + (sourceCount - targetCount); for (int i = sourceOffset + fromIndex; i <= max; i++) { if (source[i] != first) { while (++i <= max && source[i] != first); } if (i <= max) { int j = i + 1; int end = j + targetCount - 1; for (int k = targetOffset + 1; j < end && source[j] == target[k]; j++, k++); if (j == end) { return i - sourceOffset; } } } return -1; } public static boolean equals(CharSequence cs1, CharSequence cs2) { if (cs1 == cs2) { return true; } if (cs1 == null || cs2 == null) { return false; } if (cs1.length() != cs2.length()) { return false; } if (cs1 instanceof String && cs2 instanceof String) { return cs1.equals(cs2); } return charSequenceEquals(cs1, cs2); } private static boolean charSequenceEquals(CharSequence cs1, CharSequence cs2) { for (int i = 0; i < cs1.length(); i++) { if (cs1.charAt(i) != cs2.charAt(i)) { return false; } } return true; } }проще говоря реализуем жава методы у себя в отдельном классе чтобы кинуть их под нативку и юзать в своих методах. делается это как раз для того чтобы их не хукнули и не переписали. главный класс как вы могли догадаться (у ваш iq больше чем у огурца) должен быть под нативкой) если вы бедний школьник юзаем радиегор и не жалуемся вот такая вот темка для усложнения жизни любителям тройничка надеюсь меня не сватнут за этот пост всем пака