Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Часть функционала AutoJoiner RW, WM, ST | base 1.21.4 exosware

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
8 Авг 2025
Сообщения
44
Реакции
0
Выберите загрузчик игры
  1. Fabric
Салем югейм, давно тем не выкладывал. Сливаю для вас из моего чита(SpookyClient noad) AutoJoiner он помогает с заходом на таких серверах как ReallyWorld, WellMine, SpookyTime. Потому что меня бесят чит-клиенты в которох нету нормального AutoJoiner а поиграть с них хочется. СС думаю не требуется) В тех поддержку димасика(noad) я закинул данный код тоже, надеюсь реально поменяют ибо бесит что в норм чите нету адекватного AutoJoiner. Ну ладно, поменьше воды. Код снизу, скрин в тп димаса(noad) тоже снизу. Всем удачи в начинаниях!
топ AutoJoiner:
Expand Collapse Copy
package Spooky.fun.modules.misc;

import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket;
import net.minecraft.screen.GenericContainerScreenHandler;
import net.minecraft.screen.slot.Slot;
import net.minecraft.screen.slot.SlotActionType;
import net.minecraft.text.Text;
import net.minecraft.util.Hand;
import Spooky.fun.events.Event;
import Spooky.fun.events.impl.EventPacket;
import Spooky.fun.events.impl.EventUpdate;
import Spooky.fun.modules.Function;
import Spooky.fun.modules.FunctionAnnotation;
import Spooky.fun.modules.Type;
import Spooky.fun.modules.setting.ModeSetting;
import Spooky.fun.modules.setting.SliderSetting;
import Spooky.fun.util.player.TimerUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

@FunctionAnnotation(name = "AutoJoiner", desc = "Автоподключение к серверам (WellMine / SpookyTime / ReallyWorld)", type = Type.Misc)
public class AutoJoiner extends Function {

    private final ModeSetting mode = new ModeSetting("Режим",
            "SpookyTime",
            "SpookyTime",
            "ReallyWorld",
            "WellMine"
    );
    // Номер грифа для ReallyWorld
    private final SliderSetting rwGriefNumber = new SliderSetting("Номер грифа (RW)", 1.0f, 1.0f, 60.0f, 1.0f, () -> mode.is("ReallyWorld"));
    // Номер грифа для WellMine
    private final SliderSetting wmGriefNumber = new SliderSetting("Номер грифа (WellMine)", 1.0f, 1.0f, 3.0f, 1.0f, () -> mode.is("WellMine"));
    private final SliderSetting delay = new SliderSetting("Задержка клика (мс)", 200.0f, 50.0f, 1000.0f, 10.0f);

    private final TimerUtil timer = new TimerUtil();

    // Переменные для SpookyTime / ReallyWorld
    private boolean isConnecting = false;
    private long lastClickTime = 0L;
    private int currentPage = 0;
    private String griefOnline = "";
    private boolean needNextPage = false;
    private int lastMenuSyncId = -1;

    public AutoJoiner() {
        addSettings(mode, rwGriefNumber, wmGriefNumber, delay);
    }

    @Override
    protected void onEnable() {
        timer.reset();
        isConnecting = false;
        currentPage = 0;
        needNextPage = false;
        griefOnline = "";
        lastMenuSyncId = -1;
        super.onEnable();
    }

    @Override
    public void onEvent(Event event) {
        if (event instanceof EventUpdate) {
            if (mc.player == null || mc.world == null) return;

            // Режимы SpookyTime / ReallyWorld работают по своей логике
            if (mode.is("SpookyTime")) {
                handleSpookyTime();
            } else if (mode.is("ReallyWorld")) {
                handleReallyWorld();
            } else if (mode.is("WellMine")) {
                handleTickWellMine();
            }
        }

        if (event instanceof EventPacket packetEvent && packetEvent.isReceivePacket()) {
            var packet = packetEvent.getPacket();

            if (packet instanceof GameMessageS2CPacket messagePacket) {
                String text = messagePacket.content().getString();
                if (text.contains("Кикнут")) {
                    // можно добавить повторное включение модуля при необходимости
                }
            }

            if (packet instanceof GameJoinS2CPacket) {
                // Подключение прошло успешно, выключаем модуль
                setState(false);
                if (mc.player != null) {
                    mc.player.sendMessage(Text.of("§a[AutoJoiner] Подключено! Модуль выключен."), false);
                }
            }
        }
    }

    // ---- Логика WellMine (старый AutoJoiner) ----
    private void handleTickWellMine() {
        if (!timer.hasTimeElapsed((long) delay.get().doubleValue())) return;

        if (mc.player.currentScreenHandler instanceof GenericContainerScreenHandler container) {
            handleMenuWellMine(container);
        } else {
            openCompassWellMine();
        }
    }

    private void openCompassWellMine() {
        int compassSlot = findCompassSlot();
        if (compassSlot == -1) return;

        mc.player.getInventory().selectedSlot = compassSlot;

        if (mc.interactionManager != null) {
            mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
            timer.reset();
        }
    }

    private int findCompassSlot() {
        for (int i = 0; i < 9; i++) {
            ItemStack stack = mc.player.getInventory().getStack(i);
            if (stack.getItem() == Items.COMPASS || stack.getItem() == Items.RECOVERY_COMPASS) {
                return i;
            }
        }
        return -1;
    }

    // ---- Логика SpookyTime  ----
    private void handleSpookyTime() {
        if (System.currentTimeMillis() - lastClickTime < 30L) return;

        if (mc.player.getInventory().selectedSlot != 4) {
            mc.player.getInventory().selectedSlot = 4;
            lastClickTime = System.currentTimeMillis();
            return;
        }

        ItemStack compass = mc.player.getInventory().getStack(4);
        if (compass.getItem() == Items.COMPASS && mc.currentScreen == null) {
            if (mc.interactionManager != null) {
                mc.interactionManager.interactItem(mc.player, mc.player.getActiveHand());
                lastClickTime = System.currentTimeMillis();
            }
            return;
        }

        if (mc.currentScreen instanceof GenericContainerScreen screen) {
            for (Slot slot : screen.getScreenHandler().slots) {
                ItemStack stack = slot.getStack();
                if (!stack.isEmpty() && stack.getName() != null) {
                    String name = stack.getName().getString();
                    if (name.contains("Дуэли")) {
                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, slot.id, 0, SlotActionType.PICKUP, mc.player);
                            isConnecting = true;
                            lastClickTime = System.currentTimeMillis();
                            mc.currentScreen.close();
                        }
                        return;
                    }
                }
            }
        }
    }

    // ---- Логика ReallyWorld (порт с ExosWare) ----
    private void handleReallyWorld() {
        if (System.currentTimeMillis() - lastClickTime < 50L) return;

        if (mc.player.getInventory().selectedSlot != 0) {
            mc.player.getInventory().selectedSlot = 0;
            lastClickTime = System.currentTimeMillis();
            return;
        }

        ItemStack compass = mc.player.getInventory().getStack(0);
        if (compass.getItem() == Items.COMPASS && mc.currentScreen == null) {
            if (mc.interactionManager != null) {
                mc.interactionManager.interactItem(mc.player, mc.player.getActiveHand());
                lastClickTime = System.currentTimeMillis();
            }
            return;
        }

        if (mc.currentScreen instanceof GenericContainerScreen screen) {
            if (screen.getScreenHandler().syncId != lastMenuSyncId) {
                lastMenuSyncId = screen.getScreenHandler().syncId;
                currentPage = 0;
                needNextPage = false;
            }

            String targetGrief = "ГРИФ #" + rwGriefNumber.get().intValue();
            boolean foundGrief = false;
            boolean foundGriefSurvival = false;

            if (needNextPage) {
                Slot lastSlot = screen.getScreenHandler().slots.get(screen.getScreenHandler().slots.size() - 1);
                ItemStack lastStack = lastSlot.getStack();
                if (!lastStack.isEmpty()) {
                    String lastName = lastStack.getName() != null ? lastStack.getName().getString() : "";
                    if (lastStack.getItem() == Items.ARROW || lastName.contains("Следующая страница")) {
                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, lastSlot.id, 0, SlotActionType.PICKUP, mc.player);
                            currentPage++;
                            lastClickTime = System.currentTimeMillis();
                        }
                        return;
                    }
                }
            }

            for (Slot slot : screen.getScreenHandler().slots) {
                ItemStack stack = slot.getStack();
                if (!stack.isEmpty() && stack.getName() != null) {
                    String name = stack.getName().getString();

                    if (stack.getItem() == Items.ENCHANTING_TABLE) {
                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, slot.id, 0, SlotActionType.PICKUP, mc.player);
                            lastClickTime = System.currentTimeMillis();
                        }
                        return;
                    }

                    if (name.contains("ГРИФЕРСКОЕ ВЫЖИВАНИЕ (1.16.5-1.20.4)")) {
                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, slot.id, 0, SlotActionType.PICKUP, mc.player);
                            lastClickTime = System.currentTimeMillis();
                            foundGriefSurvival = true;
                        }
                        return;
                    }

                    if (name.contains("Следующая страница") && needNextPage) {
                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, slot.id, 0, SlotActionType.PICKUP, mc.player);
                            currentPage++;
                            lastClickTime = System.currentTimeMillis();
                        }
                        return;
                    }

                    if (name.contains(targetGrief)) {
                        extractOnlineInfo(stack);

                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, slot.id, 0, SlotActionType.PICKUP, mc.player);
                            isConnecting = true;
                            foundGrief = true;
                            lastClickTime = System.currentTimeMillis();
                            mc.currentScreen.close();
                        }
                        return;
                    }
                }
            }

            if (!foundGrief && !foundGriefSurvival && currentPage < 5) {
                needNextPage = true;
            }
        }
    }

    private void extractOnlineInfo(ItemStack stack) {
        griefOnline = "";

        if (!stack.isEmpty() && stack.getName() != null) {
            String name = stack.getName().getString();
            Pattern pattern = Pattern.compile("(\\d+)/(\\d+)");
            Matcher matcher = pattern.matcher(name);
            if (matcher.find()) {
                griefOnline = matcher.group(1) + "/" + matcher.group(2);
            }
        }
    }

    private void handleMenuWellMine(GenericContainerScreenHandler container) {
        int targetGrief = wmGriefNumber.get().intValue();

        for (int i = 0; i < container.getInventory().size(); i++) {
            String name = container.getInventory().getStack(i).getName().getString();

            if (mode.is("WellMine") && name.contains(String.valueOf(targetGrief))) {
                clickSlot(container.syncId, i);
                timer.reset();
                return;
            }
        }
    }

    private void clickSlot(int syncId, int slotId) {
        if (mc.interactionManager != null) {
            mc.interactionManager.clickSlot(syncId, slotId, 0, SlotActionType.PICKUP, mc.player);
        }
    }

    @Override
    protected void onDisable() {
        super.onDisable();
        isConnecting = false;
        lastMenuSyncId = -1;
    }
}
1773064241761.png
 
Салем югейм, давно тем не выкладывал. Сливаю для вас из моего чита(SpookyClient noad) AutoJoiner он помогает с заходом на таких серверах как ReallyWorld, WellMine, SpookyTime. Потому что меня бесят чит-клиенты в которох нету нормального AutoJoiner а поиграть с них хочется. СС думаю не требуется) В тех поддержку димасика(noad) я закинул данный код тоже, надеюсь реально поменяют ибо бесит что в норм чите нету адекватного AutoJoiner. Ну ладно, поменьше воды. Код снизу, скрин в тп димаса(noad) тоже снизу. Всем удачи в начинаниях!
топ AutoJoiner:
Expand Collapse Copy
package Spooky.fun.modules.misc;

import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket;
import net.minecraft.screen.GenericContainerScreenHandler;
import net.minecraft.screen.slot.Slot;
import net.minecraft.screen.slot.SlotActionType;
import net.minecraft.text.Text;
import net.minecraft.util.Hand;
import Spooky.fun.events.Event;
import Spooky.fun.events.impl.EventPacket;
import Spooky.fun.events.impl.EventUpdate;
import Spooky.fun.modules.Function;
import Spooky.fun.modules.FunctionAnnotation;
import Spooky.fun.modules.Type;
import Spooky.fun.modules.setting.ModeSetting;
import Spooky.fun.modules.setting.SliderSetting;
import Spooky.fun.util.player.TimerUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

@FunctionAnnotation(name = "AutoJoiner", desc = "Автоподключение к серверам (WellMine / SpookyTime / ReallyWorld)", type = Type.Misc)
public class AutoJoiner extends Function {

    private final ModeSetting mode = new ModeSetting("Режим",
            "SpookyTime",
            "SpookyTime",
            "ReallyWorld",
            "WellMine"
    );
    // Номер грифа для ReallyWorld
    private final SliderSetting rwGriefNumber = new SliderSetting("Номер грифа (RW)", 1.0f, 1.0f, 60.0f, 1.0f, () -> mode.is("ReallyWorld"));
    // Номер грифа для WellMine
    private final SliderSetting wmGriefNumber = new SliderSetting("Номер грифа (WellMine)", 1.0f, 1.0f, 3.0f, 1.0f, () -> mode.is("WellMine"));
    private final SliderSetting delay = new SliderSetting("Задержка клика (мс)", 200.0f, 50.0f, 1000.0f, 10.0f);

    private final TimerUtil timer = new TimerUtil();

    // Переменные для SpookyTime / ReallyWorld
    private boolean isConnecting = false;
    private long lastClickTime = 0L;
    private int currentPage = 0;
    private String griefOnline = "";
    private boolean needNextPage = false;
    private int lastMenuSyncId = -1;

    public AutoJoiner() {
        addSettings(mode, rwGriefNumber, wmGriefNumber, delay);
    }

    @Override
    protected void onEnable() {
        timer.reset();
        isConnecting = false;
        currentPage = 0;
        needNextPage = false;
        griefOnline = "";
        lastMenuSyncId = -1;
        super.onEnable();
    }

    @Override
    public void onEvent(Event event) {
        if (event instanceof EventUpdate) {
            if (mc.player == null || mc.world == null) return;

            // Режимы SpookyTime / ReallyWorld работают по своей логике
            if (mode.is("SpookyTime")) {
                handleSpookyTime();
            } else if (mode.is("ReallyWorld")) {
                handleReallyWorld();
            } else if (mode.is("WellMine")) {
                handleTickWellMine();
            }
        }

        if (event instanceof EventPacket packetEvent && packetEvent.isReceivePacket()) {
            var packet = packetEvent.getPacket();

            if (packet instanceof GameMessageS2CPacket messagePacket) {
                String text = messagePacket.content().getString();
                if (text.contains("Кикнут")) {
                    // можно добавить повторное включение модуля при необходимости
                }
            }

            if (packet instanceof GameJoinS2CPacket) {
                // Подключение прошло успешно, выключаем модуль
                setState(false);
                if (mc.player != null) {
                    mc.player.sendMessage(Text.of("§a[AutoJoiner] Подключено! Модуль выключен."), false);
                }
            }
        }
    }

    // ---- Логика WellMine (старый AutoJoiner) ----
    private void handleTickWellMine() {
        if (!timer.hasTimeElapsed((long) delay.get().doubleValue())) return;

        if (mc.player.currentScreenHandler instanceof GenericContainerScreenHandler container) {
            handleMenuWellMine(container);
        } else {
            openCompassWellMine();
        }
    }

    private void openCompassWellMine() {
        int compassSlot = findCompassSlot();
        if (compassSlot == -1) return;

        mc.player.getInventory().selectedSlot = compassSlot;

        if (mc.interactionManager != null) {
            mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
            timer.reset();
        }
    }

    private int findCompassSlot() {
        for (int i = 0; i < 9; i++) {
            ItemStack stack = mc.player.getInventory().getStack(i);
            if (stack.getItem() == Items.COMPASS || stack.getItem() == Items.RECOVERY_COMPASS) {
                return i;
            }
        }
        return -1;
    }

    // ---- Логика SpookyTime  ----
    private void handleSpookyTime() {
        if (System.currentTimeMillis() - lastClickTime < 30L) return;

        if (mc.player.getInventory().selectedSlot != 4) {
            mc.player.getInventory().selectedSlot = 4;
            lastClickTime = System.currentTimeMillis();
            return;
        }

        ItemStack compass = mc.player.getInventory().getStack(4);
        if (compass.getItem() == Items.COMPASS && mc.currentScreen == null) {
            if (mc.interactionManager != null) {
                mc.interactionManager.interactItem(mc.player, mc.player.getActiveHand());
                lastClickTime = System.currentTimeMillis();
            }
            return;
        }

        if (mc.currentScreen instanceof GenericContainerScreen screen) {
            for (Slot slot : screen.getScreenHandler().slots) {
                ItemStack stack = slot.getStack();
                if (!stack.isEmpty() && stack.getName() != null) {
                    String name = stack.getName().getString();
                    if (name.contains("Дуэли")) {
                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, slot.id, 0, SlotActionType.PICKUP, mc.player);
                            isConnecting = true;
                            lastClickTime = System.currentTimeMillis();
                            mc.currentScreen.close();
                        }
                        return;
                    }
                }
            }
        }
    }

    // ---- Логика ReallyWorld (порт с ExosWare) ----
    private void handleReallyWorld() {
        if (System.currentTimeMillis() - lastClickTime < 50L) return;

        if (mc.player.getInventory().selectedSlot != 0) {
            mc.player.getInventory().selectedSlot = 0;
            lastClickTime = System.currentTimeMillis();
            return;
        }

        ItemStack compass = mc.player.getInventory().getStack(0);
        if (compass.getItem() == Items.COMPASS && mc.currentScreen == null) {
            if (mc.interactionManager != null) {
                mc.interactionManager.interactItem(mc.player, mc.player.getActiveHand());
                lastClickTime = System.currentTimeMillis();
            }
            return;
        }

        if (mc.currentScreen instanceof GenericContainerScreen screen) {
            if (screen.getScreenHandler().syncId != lastMenuSyncId) {
                lastMenuSyncId = screen.getScreenHandler().syncId;
                currentPage = 0;
                needNextPage = false;
            }

            String targetGrief = "ГРИФ #" + rwGriefNumber.get().intValue();
            boolean foundGrief = false;
            boolean foundGriefSurvival = false;

            if (needNextPage) {
                Slot lastSlot = screen.getScreenHandler().slots.get(screen.getScreenHandler().slots.size() - 1);
                ItemStack lastStack = lastSlot.getStack();
                if (!lastStack.isEmpty()) {
                    String lastName = lastStack.getName() != null ? lastStack.getName().getString() : "";
                    if (lastStack.getItem() == Items.ARROW || lastName.contains("Следующая страница")) {
                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, lastSlot.id, 0, SlotActionType.PICKUP, mc.player);
                            currentPage++;
                            lastClickTime = System.currentTimeMillis();
                        }
                        return;
                    }
                }
            }

            for (Slot slot : screen.getScreenHandler().slots) {
                ItemStack stack = slot.getStack();
                if (!stack.isEmpty() && stack.getName() != null) {
                    String name = stack.getName().getString();

                    if (stack.getItem() == Items.ENCHANTING_TABLE) {
                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, slot.id, 0, SlotActionType.PICKUP, mc.player);
                            lastClickTime = System.currentTimeMillis();
                        }
                        return;
                    }

                    if (name.contains("ГРИФЕРСКОЕ ВЫЖИВАНИЕ (1.16.5-1.20.4)")) {
                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, slot.id, 0, SlotActionType.PICKUP, mc.player);
                            lastClickTime = System.currentTimeMillis();
                            foundGriefSurvival = true;
                        }
                        return;
                    }

                    if (name.contains("Следующая страница") && needNextPage) {
                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, slot.id, 0, SlotActionType.PICKUP, mc.player);
                            currentPage++;
                            lastClickTime = System.currentTimeMillis();
                        }
                        return;
                    }

                    if (name.contains(targetGrief)) {
                        extractOnlineInfo(stack);

                        if (mc.interactionManager != null) {
                            mc.interactionManager.clickSlot(screen.getScreenHandler().syncId, slot.id, 0, SlotActionType.PICKUP, mc.player);
                            isConnecting = true;
                            foundGrief = true;
                            lastClickTime = System.currentTimeMillis();
                            mc.currentScreen.close();
                        }
                        return;
                    }
                }
            }

            if (!foundGrief && !foundGriefSurvival && currentPage < 5) {
                needNextPage = true;
            }
        }
    }

    private void extractOnlineInfo(ItemStack stack) {
        griefOnline = "";

        if (!stack.isEmpty() && stack.getName() != null) {
            String name = stack.getName().getString();
            Pattern pattern = Pattern.compile("(\\d+)/(\\d+)");
            Matcher matcher = pattern.matcher(name);
            if (matcher.find()) {
                griefOnline = matcher.group(1) + "/" + matcher.group(2);
            }
        }
    }

    private void handleMenuWellMine(GenericContainerScreenHandler container) {
        int targetGrief = wmGriefNumber.get().intValue();

        for (int i = 0; i < container.getInventory().size(); i++) {
            String name = container.getInventory().getStack(i).getName().getString();

            if (mode.is("WellMine") && name.contains(String.valueOf(targetGrief))) {
                clickSlot(container.syncId, i);
                timer.reset();
                return;
            }
        }
    }

    private void clickSlot(int syncId, int slotId) {
        if (mc.interactionManager != null) {
            mc.interactionManager.clickSlot(syncId, slotId, 0, SlotActionType.PICKUP, mc.player);
        }
    }

    @Override
    protected void onDisable() {
        super.onDisable();
        isConnecting = false;
        lastMenuSyncId = -1;
    }
}
Посмотреть вложение 329861
гпт хуетень, ты блять банальнейший модуль написать не можешь который будет по слотам кликать или что?
 
Назад
Сверху Снизу