Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 12 Янв 2026
- Сообщения
- 3
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Хай YouGame
Я новый пастер вот решил с вами поделиться часть функционала ну для какой то пасты либо в свой проект то самое то
Я новый пастер вот решил с вами поделиться часть функционала ну для какой то пасты либо в свой проект то самое то
Java:
package client.main.module.impl.misc;
import client.events.EventUpdate;
import client.main.module.api.Category;
import client.main.module.api.Feature;
import client.main.module.api.FeatureInfo;
import client.main.module.settings.implObjects.CheckBoxObject;
import client.main.module.settings.implObjects.SelectObject;
import client.main.module.settings.implObjects.SliderObject;
import client.util.math.StopWatch;
import com.google.common.eventbus.Subscribe;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.text.TextFormatting;
@FeatureInfo(name = "ReallyWorld Joiner", type = Category.Misc, desc = "Автоматически заходит на ReallyWorld сервера ")
public class ReallyWorldJoiner extends Feature {
private final SelectObject serverMode = new SelectObject("Режим сервера", "Гриф",
"Анархия", "Гриф", "Мега Гриф", "Гриферские выживания (RU)");
private final SliderObject serverNumber = new SliderObject("Номер сервера", 1f, 1f, 54f, 1f)
.setVisible(() -> !serverMode.is("Гриферские выживания (RU)") && !serverMode.is("Мега Гриф") && !serverMode.is("Анархия"));
private final SliderObject survivalNumber = new SliderObject("Номер выживания", 1f, 1f, 6f, 1f)
.setVisible(() -> serverMode.is("Гриферские выживания (RU)"));
private final SliderObject clickDelay = new SliderObject("Задержка клика (мс)", 800f, 5f, 2000f, 50f);
private final SliderObject spamSpeed = new SliderObject("Скорость спама (мс)", 50f, 1f, 500f, 10f);
private final CheckBoxObject autoDisable = new CheckBoxObject("Автовыключение", true);
private final CheckBoxObject autoOpen = new CheckBoxObject("Авто-открытие компаса", true);
private final CheckBoxObject randomServer = new CheckBoxObject("Случайный сервер", false);
private final CheckBoxObject notifyActions = new CheckBoxObject("Уведомления", true);
private final StopWatch clickTimer = new StopWatch();
private boolean compassOpened = false;
private boolean modeClicked = false;
private boolean worldClicked = false;
private int stage = 0;
private int lastClickedSlot = -1;
private net.minecraft.world.World lastWorld;
public ReallyWorldJoiner() {
addSettings(serverMode, serverNumber, survivalNumber, clickDelay, spamSpeed, autoOpen, randomServer, autoDisable, notifyActions);
}
@Override
public boolean onEnable() {
super.onEnable();
stage = 0;
compassOpened = false;
modeClicked = false;
worldClicked = false;
lastClickedSlot = -1;
lastWorld = mc.world;
clickTimer.reset();
if (notifyActions.get()) {
if (randomServer.get()) {
print("Ищем компас для подключения к случайному " + serverMode.get() + "...");
} else {
if (needsSecondMenu()) {
if (serverMode.is("Гриферские выживания (RU)")) {
print("Ищем компас для подключения к " + serverMode.get() + " #" + (int)survivalNumber.get().floatValue() + "...");
} else {
print("Ищем компас для подключения к " + serverMode.get() + " #" + (int)serverNumber.get().floatValue() + "...");
}
} else {
print("Ищем компас для подключения к " + serverMode.get() + "...");
}
}
}
return false;
}
@Subscribe
private void onUpdate(EventUpdate event) {
if (mc.player == null || mc.world == null) return;
if (stage == 0 && autoOpen.get()) {
int compassSlot = findCompassInInventory();
if (compassSlot != -1) {
if (notifyActions.get()) {
print("Компас найден в слоте " + (compassSlot + 1) + ". Открываем...");
}
mc.player.inventory.currentItem = compassSlot;
mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
stage = 1;
clickTimer.reset();
} else {
if (notifyActions.get() && clickTimer.isReached(1000)) {
print(TextFormatting.RED + "Компас не найден в хотбаре!");
clickTimer.reset();
}
}
}
if (stage == 1) {
if (mc.currentScreen != null && mc.player.openContainer != null &&
mc.player.openContainer != mc.player.container) {
compassOpened = true;
stage = 2;
if (notifyActions.get()) {
print("Меню компаса открыто. Ищем режим " + serverMode.get() + "...");
}
clickTimer.reset();
}
}
if (stage == 2 && mc.currentScreen != null && mc.player.openContainer != null) {
Container container = mc.player.openContainer;
int modeSlot = findModeSlot(container);
if (modeSlot != -1 && lastClickedSlot != modeSlot) {
Slot slot = container.getSlot(modeSlot);
if (slot == null || slot.getStack().isEmpty()) {
if (notifyActions.get() && clickTimer.isReached(500)) {
print(TextFormatting.RED + "Слот режима пуст! Повторная попытка...");
clickTimer.reset();
}
return;
}
if (notifyActions.get()) {
String modeName = slot.getStack().getDisplayName().getString();
print("Выбираем режим: " + TextFormatting.AQUA + modeName);
}
mc.playerController.windowClick(
container.windowId,
modeSlot,
0,
ClickType.PICKUP,
mc.player
);
lastClickedSlot = modeSlot;
modeClicked = true;
if (needsSecondMenu()) {
stage = 3;
lastClickedSlot = -1;
if (notifyActions.get()) {
print("Ожидаем меню выбора мира...");
}
} else {
stage = 4;
lastClickedSlot = -1;
if (notifyActions.get()) {
print("Подключаемся к " + serverMode.get() + "...");
}
}
clickTimer.reset();
} else if (modeSlot == -1 && clickTimer.isReached(500)) {
if (notifyActions.get()) {
print(TextFormatting.RED + "Режим " + serverMode.get() + " не найден в меню! Повторная попытка...");
}
stage = 0;
clickTimer.reset();
}
}
if (stage == 3 && mc.currentScreen != null && mc.player.openContainer != null) {
Container container = mc.player.openContainer;
PageInfo pageInfo = parsePageFromTitle(container);
int currentPage = pageInfo.currentPage;
int totalPages = pageInfo.totalPages;
int targetPage = getTargetPage();
int worldSlot = findWorldSlot(container);
if (worldSlot != -1 && lastClickedSlot != worldSlot) {
Slot slot = container.getSlot(worldSlot);
ItemStack stack = slot.getStack();
if (slot == null || stack.isEmpty()) {
if (notifyActions.get() && clickTimer.isReached(500)) {
print(TextFormatting.RED + "Слот мира пуст! Повторная попытка...");
clickTimer.reset();
}
return;
}
if (stack.getItem() == Items.BARRIER ||
stack.getItem() == Items.RED_STAINED_GLASS_PANE ||
stack.getDisplayName().getString().contains("Закрыт") ||
stack.getDisplayName().getString().contains("закрыт")) {
int targetNum = serverMode.is("Гриферские выживания (RU)")
? (int)survivalNumber.get().floatValue()
: (int)serverNumber.get().floatValue();
if (notifyActions.get()) {
print(TextFormatting.RED + "Сервер #" + targetNum + " заблокирован! Повторная попытка...");
}
stage = 0;
clickTimer.reset();
return;
}
String worldName = stack.getDisplayName().getString();
int worldNum = extractNumberFromName(worldName);
if (notifyActions.get()) {
print("Подключаемся к миру #" + worldNum + " (" + TextFormatting.AQUA + worldName + TextFormatting.WHITE + ")");
}
mc.playerController.windowClick(
container.windowId,
worldSlot,
0,
ClickType.PICKUP,
mc.player
);
lastClickedSlot = worldSlot;
worldClicked = true;
stage = 4;
clickTimer.reset();
return;
}
if (currentPage < targetPage && currentPage < totalPages) {
int nextButton = findPageButton(container, "next");
if (nextButton != -1) {
if (notifyActions.get()) {
print("Листаем на страницу " + (currentPage + 1) + "...");
}
mc.playerController.windowClick(
container.windowId,
nextButton,
0,
ClickType.PICKUP,
mc.player
);
lastClickedSlot = -1;
clickTimer.reset();
return;
}
}
if (currentPage > targetPage) {
int prevButton = findPageButton(container, "prev");
if (prevButton != -1) {
if (notifyActions.get()) {
print("Возвращаемся на страницу " + (currentPage - 1) + "...");
}
mc.playerController.windowClick(
container.windowId,
prevButton,
0,
ClickType.PICKUP,
mc.player
);
lastClickedSlot = -1;
clickTimer.reset();
return;
}
}
if (clickTimer.isReached(1000)) {
int targetNum = serverMode.is("Гриферские выживания (RU)")
? (int)survivalNumber.get().floatValue()
: (int)serverNumber.get().floatValue();
if (notifyActions.get()) {
print(TextFormatting.RED + "Мир #" + targetNum + " не найден! Повторная попытка...");
}
stage = 0;
clickTimer.reset();
}
}
if (stage == 4 && mc.currentScreen != null && mc.player.openContainer != null) {
if (clickTimer.isReached(spamSpeed.get().longValue())) {
Container container = mc.player.openContainer;
int targetSlot = -1;
if (needsSecondMenu()) {
targetSlot = findWorldSlot(container);
} else {
targetSlot = findModeSlot(container);
}
if (targetSlot != -1) {
Slot slot = container.getSlot(targetSlot);
if (slot != null && !slot.getStack().isEmpty()) {
mc.playerController.windowClick(
container.windowId,
targetSlot,
0,
ClickType.PICKUP,
mc.player
);
clickTimer.reset();
}
} else {
if (notifyActions.get() && clickTimer.isReached(1000)) {
print(TextFormatting.GREEN + "Подключение к серверу...");
clickTimer.reset();
}
}
}
}
if (stage >= 2 && mc.world != lastWorld && mc.world != null) {
if (notifyActions.get()) {
print(TextFormatting.GREEN + "Успешно подключились к серверу!");
}
if (autoDisable.get()) {
toggle();
} else {
stage = 0;
lastWorld = mc.world;
}
}
if (stage == 4 && mc.currentScreen == null && clickTimer.isReached(2000)) {
if (notifyActions.get()) {
print(TextFormatting.GREEN + "Меню закрылось - возможно подключились!");
}
if (autoDisable.get()) {
toggle();
} else {
stage = 0;
}
}
}
private int findCompassInInventory() {
for (int i = 0; i < 9; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (!stack.isEmpty() && stack.getItem() == Items.COMPASS) {
return i;
}
}
return -1;
}
private int findModeSlot(Container container) {
for (int i = 0; i < container.inventorySlots.size(); i++) {
ItemStack stack = container.getSlot(i).getStack();
if (stack.isEmpty()) continue;
String displayName = stack.getDisplayName().getString().toLowerCase();
switch (serverMode.get()) {
case "Гриф":
if (displayName.contains("гриф") && !displayName.contains("мега") ||
stack.getItem() == Items.CRAFTING_TABLE) {
return i;
}
break;
case "Мега Гриф":
if (displayName.contains("мега") ||
(stack.getItem() == Items.PLAYER_HEAD && displayName.contains("гриф"))) {
return i;
}
break;
case "Анархия":
if (displayName.contains("анархия") ||
stack.getItem() == Items.NETHER_STAR) {
return i;
}
break;
case "Гриферские выживания (RU)":
if (stack.getItem() == Items.FURNACE) {
return i;
}
if (displayName.contains("печь") || displayName.contains("furnace")) {
return i;
}
break;
}
}
return -1;
}
private int getTargetPage() {
if (serverMode.is("Гриферские выживания (RU)")) {
return 1;
}
int num = (int) serverNumber.get().floatValue();
if (num <= 36) return 1;
if (num <= 54) return 2;
return 1;
}
private int extractNumberFromName(String displayName) {
String clean = displayName.replaceAll("§[0-9a-fk-or]", "");
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("\\d+");
java.util.regex.Matcher matcher = pattern.matcher(clean);
if (matcher.find()) {
try {
return Integer.parseInt(matcher.group());
} catch (NumberFormatException e) {
return -1;
}
}
return -1;
}
private static class PageInfo {
int currentPage;
int totalPages;
PageInfo(int current, int total) {
this.currentPage = current;
this.totalPages = total;
}
}
private PageInfo parsePageFromTitle(Container container) {
String title = "";
if (mc.currentScreen != null) {
title = mc.currentScreen.getTitle().getString();
}
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("(\\d+)/(\\d+)");
java.util.regex.Matcher matcher = pattern.matcher(title);
if (matcher.find()) {
int current = Integer.parseInt(matcher.group(1));
int total = Integer.parseInt(matcher.group(2));
return new PageInfo(current, total);
}
return new PageInfo(1, 1);
}
private int findPageButton(Container container, String direction) {
for (int i = 0; i < container.inventorySlots.size(); i++) {
Slot slot = container.getSlot(i);
ItemStack stack = slot.getStack();
if (stack.isEmpty()) continue;
if (stack.getItem() == Items.ARROW) {
return i;
}
}
if (container.inventorySlots.size() > 53) {
Slot slot = container.getSlot(53);
if (!slot.getStack().isEmpty()) {
return 53;
}
}
if (container.inventorySlots.size() > 45) {
Slot slot = container.getSlot(45);
if (!slot.getStack().isEmpty()) {
return 45;
}
}
return -1;
}
private int findWorldSlot(Container container) {
String mode = serverMode.get();
boolean isGriffMode = mode.equals("Гриф") || mode.equals("Гриферские выживания (RU)") ||
mode.equals("Грифовское выживание");
if (randomServer.get()) {
return findRandomWorldSlot(container, isGriffMode);
} else {
return findSpecificWorldSlot(container, isGriffMode);
}
}
private int findSpecificWorldSlot(Container container, boolean isGriffMode) {
int targetNumber;
if (serverMode.is("Гриферские выживания (RU)")) {
targetNumber = (int) survivalNumber.get().floatValue();
} else {
targetNumber = (int) serverNumber.get().floatValue();
}
for (int i = 0; i < container.inventorySlots.size(); i++) {
Slot slot = container.getSlot(i);
ItemStack stack = slot.getStack();
if (stack.isEmpty()) continue;
if (stack.getItem() != Items.PLAYER_HEAD) continue;
if (stack.getItem() == Items.BARRIER || stack.getItem() == Items.RED_STAINED_GLASS_PANE) continue;
String displayName = stack.getDisplayName().getString();
int foundNumber = extractNumberFromName(displayName);
if (foundNumber == targetNumber) {
return i;
}
}
return -1;
}
private int findRandomWorldSlot(Container container, boolean isGriffMode) {
java.util.List<Integer> validSlots = new java.util.ArrayList<>();
for (int i = 0; i < container.inventorySlots.size(); i++) {
Slot slot = container.getSlot(i);
ItemStack stack = slot.getStack();
if (stack.isEmpty()) continue;
boolean isWorldItem = false;
if (isGriffMode) {
isWorldItem = stack.getItem() == Items.PLAYER_HEAD;
} else {
isWorldItem = stack.getItem() == Items.NETHER_STAR || stack.getItem() == Items.PLAYER_HEAD;
}
if (isWorldItem) {
String name = stack.getDisplayName().getString();
if (!name.contains("стрелка") && !name.contains("Стрелка") &&
!name.contains("Вперед") && !name.contains("Назад") &&
stack.getItem() != Items.BARRIER &&
stack.getItem() != Items.RED_STAINED_GLASS_PANE) {
validSlots.add(i);
}
}
}
if (!validSlots.isEmpty()) {
int randomIndex = (int) (Math.random() * validSlots.size());
return validSlots.get(randomIndex);
}
return -1;
}
private boolean needsSecondMenu() {
String mode = serverMode.get();
return mode.equals("Гриф") ||
mode.equals("Мега Гриф") ||
mode.equals("Гриферские выживания (RU)");
}
@Override
public boolean onDisable() {
super.onDisable();
stage = 0;
compassOpened = false;
modeClicked = false;
worldClicked = false;
lastClickedSlot = -1;
lastWorld = null;
return false;
}
}