Начинающий
- Статус
- Оффлайн
- Регистрация
- 8 Авг 2025
- Сообщения
- 44
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Салем югейм, давно тем не выкладывал. Сливаю для вас из моего чита(SpookyClient noad) AutoJoiner он помогает с заходом на таких серверах как ReallyWorld, WellMine, SpookyTime. Потому что меня бесят чит-клиенты в которох нету нормального AutoJoiner а поиграть с них хочется. СС думаю не требуется) В тех поддержку димасика(noad) я закинул данный код тоже, надеюсь реально поменяют ибо бесит что в норм чите нету адекватного AutoJoiner. Ну ладно, поменьше воды. Код снизу, скрин в тп димаса(noad) тоже снизу. Всем удачи в начинаниях!
топ AutoJoiner:
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;
}
}