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

Гайд Пишем базу Forge 1.16.5

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а кто сказал что я должен всё до мельчайшей детали прорабатывать? Тем более на таком форуме, где по кд каллище позорное и постится. И на счет sendMessage - я проверял как это работает и оно всё делает так, как мне и нужно было. Твой доёб считай пустословие, тебе тупо некуда время тратить и ты решил доебнуться до темы, которая была сделана в развлекательных целях (для себя).

Всё понимаю, осеннее обострение и охота доебаться за просто так, но меру тоже знать надо :)

Вы ребятки все не понимаете одного, всё что я написал в этом кале (гайде), я и сам осознаю что это полное дерьмище. Учитывая тот факт что когда я это писал мне было нечего делать, я просто решил постнуть недо-гайд. В вашем случае вы очень строго относитесь к тому, что делается на этом форуме. А как известно в данный момент именно в разделе по кубам, адекватных тем по пальцам пересчитать и зная это всё равно критикуете темы, которые делаются не в серьёз, а абы как.
Доебы как раз таки нормальные, если ты это дерьмо выставляешь на этот форум. "Развлекательная" тема же все оправдает? Наверное...
 
Приветствую, это небольшой гайд о том, как написать свою базу на Forge 1.16.5.

И так, давайте начнём:
1. Установим в нашу idea плагин -
Пожалуйста, авторизуйтесь для просмотра ссылки.


2. После установки выбираем File > New > Project > Minecraft (в самом низу). И настраиваем под себя (Use Mixins обязательно)

3. Настроим наш главный класс, у меня это Extend
Extend.java:
Expand Collapse Copy
@Mod("extend")
public class Extend {

    public Extend() {
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);

        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event) {
    }

    private void doClientStuff(final FMLClientSetupEvent event) {
    }
}
ваш главный класс должен выглядить примерно так, но в поле @Mod("вашмод") заместо "вашмод", должно быть ваше название мода/чита.

4. Создадим модули и бинд (при нажатии на клавиатуре кнопки вкл/выкл функции):
Первое создадим package modules, в нём создадим enum Category и пропишим код:
Category.java:
Expand Collapse Copy
public enum Category {
    COMBAT,
    MOVEMENT,
    RENDER,
    UTILS,
    CLIENT
}

Далее создадим класс Module:
Module.java:
Expand Collapse Copy
public class Module {
    private final String name;
    private int binding;
    private boolean enable;
    private final Category category;

    public static Minecraft mc = Minecraft.getInstance();

    public Module(String name, Category category, int binding) {
        this.name = name;
        this.category = category;
        this.binding = binding;
    }

    public String getName() {
        return name;
    }

    public int getBinding() {
        return binding;
    }

    public void setBinding(int binding) {
        this.binding = binding;
    }

    public boolean isEnable() {
        return enable;
    }

    public void setEnable(boolean enable) {
        this.enable = enable;
        if (enable) {
            this.onEnable();
        } else {
            this.onDisable();
        }
    }

    public Category getCategory() {
        return category;
    }

    public void onEnable() {
        mc.player.sendMessage(ITextComponent.nullToEmpty(TextFormatting.GREEN + getName() + TextFormatting.RESET + " was Enabled!"), mc.player.getUUID());

        MinecraftForge.EVENT_BUS.register(this);
    }

    public void onDisable() {
        mc.player.sendMessage(ITextComponent.nullToEmpty(TextFormatting.RED + getName() + TextFormatting.RESET + " was Disabled!"), mc.player.getUUID());

        MinecraftForge.EVENT_BUS.unregister(this);
    }

    public void toggle() {
        setEnable(! enable);
    }
}

Пояснение кода:
name, binding, category и enable - переменные для работы с будущими функциями, название, бинд, категория и т.д.

get...и set... думаю по названиям понятно, что getter (get...) передаёт уже имеющиеся значения, а setter (set...) устанавливает значение.

onEnable и onDisable отвечают за регистрацию вкл и выкл функции, например в моём коде видны строки, которые выводят текст в чат при вкл и выкл функции.

toggle сама реализация того, чтобы при включении функция работала, а при выключении нет.

Думаю с этим закончили, остались Key и ModuleManager.


5. Напишем ModuleManager для инициализации функций:
ModuleManager.java:
Expand Collapse Copy
public class ModuleManager {
    public static ArrayList<Module> modules = new ArrayList<>();

    public static void list() {
        add(new Speed());
        add(new NoFall());
    }

    public static void add(Module m) {
        modules.add(m);
    }

    public static ArrayList<Module> getModules() {
        return modules;
    }

    public static void keyPressed(int key, int action) {
        if (action == 1) {
            for (Module m : getModules()) {
                if (m.getBinding() == key) {
                    m.toggle();
                }
            }
        }
    }
}

опишем что за что отвечает и делает.
ArrayList<Module> создаёт список, который будет хранить наши функции.

public static void list() метод в котором будет инициализировать наши функции.

public static ArrayList<Module> getModules() гетает все наши фукнции.

public static void add(Module m) сокращение чтобы не писать modules.add() мы пишем просто add()

public static void keyPressed(int key, int action) логика нажатия на клавишу и действия при нажатии.



6. Почти конец, остался Key и инициализация всего в гл.классе:
Key.java:
Expand Collapse Copy
public class Key {
    private final Minecraft mc = Minecraft.getInstance();

    @SubscribeEvent
    public void onKeyPress(InputEvent.KeyInputEvent e) {
        if (mc.player != null && mc.level != null && mc.screen == null) {
            ModuleManager.keyPressed(e.getKey(), e.getAction());
        }
    }
}

что делает каждая часть.

@SubscribeEvent ну думаю по названию будет понятно, что это нужно для работы ивентов.
public void onKeyPress(InputEvent.KeyInputEvent e) создаём метод и в параметрах задаём ивент для наших нажатий.
if (mc.player != null && mc.level != null && mc.screen == null) проверки на то чтобы игрок находился в мире или на сервере и чтобы не было открыто настроек и чата.
ModuleManager.keyPressed(e.getKey(), e.getAction()); финальная строчка для работы нажатий, без неё вряд ли бы у вас работали забинженые функции (работали бы, но вкл и выкл вы их не смогли бы).


7. Финал, инициализация всего:
Extend.java:
Expand Collapse Copy
@Mod("extend")
public class Extend {

    public Extend() {
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);

        MinecraftForge.EVENT_BUS.register(this);
        MinecraftForge.EVENT_BUS.register(new Key());

        ModuleManager.list();
    }

    private void setup(final FMLCommonSetupEvent event) {
    }

    private void doClientStuff(final FMLClientSetupEvent event) {
    }
}

Думаю тут всем понятно что мы инициализируем Key и ModuleManager.list(); для их работы.





Вот и конец гайда, я бы не сказал что это сложно но, советую немного изучить основы языка программирования Java и основные понятия ООП. В дальнейшем без них будет довольно трудно, да и многих любимый ChatGPT может и не помочь.
уже было такое, /del
 
Назад
Сверху Снизу