-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Думаю, пастерам понравится
RWJoiner.java:
package im.expensive.functions.impl.misc;
import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import im.expensive.utils.client.ClientUtil;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.container.ChestContainer;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.ITextComponent;
@FieldDefaults(level = AccessLevel.PRIVATE)
@FunctionRegister(name = "RWJoiner", type = Category.Misc)
public class RWJoiner extends Function {
ModeSetting mode = new ModeSetting("Тип", "Гриф", "Гриф", "Мега-гриф", "Анархия");
SliderSetting grief = new SliderSetting("Гриф", 1.0f, 1.0f, 42.0f, 1.0f).setVisible(() -> mode.is("Гриф"));
SliderSetting anarchy = new SliderSetting("Анархия", 1.0f, 1.0f, 7.0f, 1.0f).setVisible(() -> mode.is("Анархия"));
public RWJoiner() {
addSettings(mode, grief, anarchy);
}
@Override
public void onEnable() {
super.onEnable();
if (!ClientUtil.isConnectedToServer("reallyworld")) {
print("Данная функция работает только на ReallyWorld!");
toggle();
}
}
@Subscribe
public void onUpdate(EventUpdate e) {
if (!(mc.player.openContainer instanceof ChestContainer container)) return;
if (mode.is("Гриф")) {
if (isTitle(container, "Выбор сервера")) {
clickItem(container, 21);
} else if (isTitle(container, "Выбор мира грифа")) {
clickItemSlot(container, grief.get().intValue());
toggle();
}
} else if (mode.is("Мега-гриф")) {
if (isTitle(container, "Выбор сервера")) {
clickItem(container, 19);
toggle();
}
} else if (mode.is("Анархия")) {
if (isTitle(container, "Выбор сервера")) {
clickItem(container, 25);
} else if (isTitle(container, "Выбор мира")) {
clickItemSlot(container, anarchy.get().intValue());
toggle();
}
}
}
private void clickItem(ChestContainer container, int slotIndex) {
ItemStack stack = container.getLowerChestInventory().getStackInSlot(slotIndex);
if (!stack.isEmpty()) {
mc.playerController.windowClick(container.windowId, slotIndex, 0, ClickType.QUICK_MOVE, mc.player);
}
}
private boolean isTitle(ChestContainer container, String phrase) {
Screen currentScreen = mc.currentScreen;
if (currentScreen instanceof ContainerScreen) {
ITextComponent title = ((ContainerScreen<?>) currentScreen).getTitle();
return title.getString().contains(phrase);
}
return false;
}
private void clickItemSlot(ChestContainer container, int targetCount) {
IInventory lowerChestInventory = container.getLowerChestInventory();
for (int index = 0; index < lowerChestInventory.getSizeInventory(); ++index) {
ItemStack stack = lowerChestInventory.getStackInSlot(index);
if (!stack.isEmpty() && stack.getCount() == targetCount) {
mc.playerController.windowClick(container.windowId, index, 0, ClickType.PICKUP, mc.player);
break;
}
}
}
}