Начинающий
- Статус
- Онлайн
- Регистрация
- 23 Сен 2024
- Сообщения
- 386
- Реакции
- 3
- Выберите загрузчик игры
- Прочие моды
Всем привет, так как на рилик добавили новые грифы и старые AutoJoin'ы уже не работают нормально, я попросил у кодекса сделать нормально, знаю что хуйня и бесполезно и легко, но все же, мне просто нехуй делать
chat $pt $olutions:
package vesence.modules.impl.player;
import com.google.common.eventbus.Subscribe;
import net.minecraft.client.gui.screen.inventory.ChestScreen;
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
import net.minecraft.inventory.container.ChestContainer;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.network.play.server.SChatPacket;
import net.minecraft.network.play.server.SJoinGamePacket;
import net.minecraft.util.Hand;
import net.minecraft.util.text.TextFormatting;
import vesence.events.Event;
import vesence.events.EventPacket;
import vesence.events.EventUpdate;
import vesence.modules.api.Category;
import vesence.modules.api.Module;
import vesence.modules.api.ModuleInfo;
import vesence.modules.api.impl.ModeSetting;
import vesence.modules.api.impl.SliderSetting;
import vesence.util.client.main.IMinecraft;
import vesence.util.client.main.PlayerUtil;
import vesence.util.math.main.StopWatch;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ModuleInfo(name = "AutoJoin", type = Category.Player, desc = "Автоматически заходит на сервер")
public class Joiner extends Module {
private static final String REALLYWORLD_GRIEF_MENU_TITLE = "\u0412\u044B\u0431\u043E\u0440 \u043C\u0438\u0440\u0430 \u0433\u0440\u0438\u0444\u0430";
private static final Pattern PAGE_PATTERN = Pattern.compile("(\\d+)/(\\d+)");
private static final int PREVIOUS_PAGE_SLOT = 36;
private static final int NEXT_PAGE_SLOT = 44;
private static final int PAGE_SWITCH_TIMEOUT = 500;
private static final int[] GRIEF_PAGE_SLOTS = {
0, 1, 2, 3, 5, 6, 7, 8,
9, 10, 11, 12, 14, 15, 16, 17,
18, 19, 20, 21, 23, 24, 25, 26,
27, 28, 29, 30, 32, 33, 34, 35
};
private static final int[] LAST_GRIEF_PAGE_SLOTS = {0, 1, 2, 3, 5, 6, 7, 8, 9, 10};
public final ModeSetting mode = new ModeSetting("Режим", "ReallyWorld", "ReallyWorld", "Spooky дуэли");
private final SliderSetting griefSelection = new SliderSetting("Гриферский мир", 1, 1, 74, 1).setVisible(() -> mode.is("ReallyWorld"));
private final SliderSetting speed = new SliderSetting("Скорость", 3, 1, 10, 1).setVisible(() -> mode.is("ReallyWorld"));
private final StopWatch timerUtil = new StopWatch();
private final StopWatch pageSwitchWatch = new StopWatch();
private int waitingForPage = -1;
public Joiner() {
addSettings(mode, griefSelection, speed);
}
@Override
public boolean onEnable() {
waitingForPage = -1;
timerUtil.reset();
pageSwitchWatch.reset();
PlayerUtil.selectCompass();
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));
super.onEnable();
return false;
}
@Subscribe
public boolean onEvent(Event event) {
if (event instanceof EventUpdate) {
handleEventUpdate();
}
if (event instanceof EventPacket eventPacket) {
if (eventPacket.getPacket() instanceof SJoinGamePacket) {
try {
if (IMinecraft.mc.ingameGUI.getTabList().header == null) {
return false;
}
String string = TextFormatting.getTextWithoutFormattingCodes(IMinecraft.mc.ingameGUI.getTabList().header.getString());
if (!string.contains("Lobby")) {
return false;
}
} catch (Exception ignored) {
}
}
if (eventPacket.getPacket() instanceof SChatPacket packet) {
String message = TextFormatting.getTextWithoutFormattingCodes(packet.getChatComponent().getString());
if (message.contains("К сожалению сервер переполнен") || message.contains("Подождите 20 секунд!") || message.contains("большой поток игроков")) {
PlayerUtil.selectCompass();
IMinecraft.mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));
}
}
}
return false;
}
private void handleEventUpdate() {
if (IMinecraft.mc.currentScreen == null) {
waitingForPage = -1;
if (IMinecraft.mc.player.ticksExisted < 3) {
IMinecraft.mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));
}
} else if (IMinecraft.mc.currentScreen instanceof ChestScreen) {
try {
if (mode.is("ReallyWorld") && handleReallyWorldChest((ChestScreen) IMinecraft.mc.currentScreen)) {
return;
}
ContainerScreen container = (ContainerScreen) IMinecraft.mc.currentScreen;
for (int i = 0; i < container.getContainer().inventorySlots.size(); i++) {
String s = container.getContainer().inventorySlots.get(i).getStack().getDisplayName().getString();
if (mode.is("ReallyWorld")) {
int numberGrief = griefSelection.get().intValue();
if (s.contains("ГРИФЕРСКОЕ ВЫЖИВАНИЕ") || s.contains("ГРИФ #" + numberGrief + " (1.16.5+)")) {
if (timerUtil.hasTimeElapsed(speed.get().intValue())) {
IMinecraft.mc.playerController.windowClick(IMinecraft.mc.player.openContainer.windowId, i, 0, ClickType.PICKUP, IMinecraft.mc.player);
timerUtil.reset();
}
}
} else if (mode.is("Spooky дуэли")) {
if (s.contains("Дуэли")) {
if (timerUtil.hasTimeElapsed(speed.get().intValue())) {
IMinecraft.mc.playerController.windowClick(IMinecraft.mc.player.openContainer.windowId, i, 0, ClickType.PICKUP, IMinecraft.mc.player);
timerUtil.reset();
}
}
}
}
} catch (Exception ignored) {
}
}
}
private boolean handleReallyWorldChest(ChestScreen screen) {
if (!(IMinecraft.mc.player.openContainer instanceof ChestContainer chest)) {
waitingForPage = -1;
return false;
}
String title = TextFormatting.getTextWithoutFormattingCodes(screen.getTitle().getString());
if (!title.contains(REALLYWORLD_GRIEF_MENU_TITLE)) {
waitingForPage = -1;
return false;
}
int currentPage = extractCurrentPage(title);
if (currentPage == -1) {
return true;
}
if (waitingForPage != -1) {
if (currentPage == waitingForPage) {
waitingForPage = -1;
} else if (!pageSwitchWatch.hasTimeElapsed(PAGE_SWITCH_TIMEOUT)) {
return true;
} else {
waitingForPage = -1;
}
}
int targetGrief = griefSelection.get().intValue();
int targetPage = getTargetPage(targetGrief);
int targetSlot = getTargetSlot(targetGrief);
if (targetSlot == -1) {
return true;
}
if (currentPage != targetPage) {
if (!timerUtil.hasTimeElapsed(speed.get().intValue())) {
return true;
}
int pageButtonSlot = currentPage < targetPage ? NEXT_PAGE_SLOT : PREVIOUS_PAGE_SLOT;
IMinecraft.mc.playerController.windowClick(chest.windowId, pageButtonSlot, 0, ClickType.PICKUP, IMinecraft.mc.player);
waitingForPage = currentPage < targetPage ? currentPage + 1 : currentPage - 1;
pageSwitchWatch.reset();
timerUtil.reset();
return true;
}
if (timerUtil.hasTimeElapsed(speed.get().intValue())) {
IMinecraft.mc.playerController.windowClick(chest.windowId, targetSlot, 0, ClickType.PICKUP, IMinecraft.mc.player);
timerUtil.reset();
}
return true;
}
private int extractCurrentPage(String title) {
Matcher matcher = PAGE_PATTERN.matcher(title);
if (!matcher.find()) {
return -1;
}
return Integer.parseInt(matcher.group(1));
}
private int getTargetPage(int grief) {
if (grief <= 32) {
return 1;
}
if (grief <= 64) {
return 2;
}
return 3;
}
private int getTargetSlot(int grief) {
if (grief < 1 || grief > 74) {
return -1;
}
if (grief <= 32) {
return GRIEF_PAGE_SLOTS[grief - 1];
}
if (grief <= 64) {
return GRIEF_PAGE_SLOTS[grief - 33];
}
return LAST_GRIEF_PAGE_SLOTS[grief - 65];
}
}