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

Read Only
Статус
Оффлайн
Регистрация
31 Авг 2023
Сообщения
700
Реакции[?]
6
Поинты[?]
5K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
То есть тебе в дс показать что я сам эту базу писал?
Скрытое содержимое
зачем мне смотреть на то как чел пишет самую банальную фордж базу который напишет любой человек и то база на половину башрута?
 
Начинающий
Статус
Оффлайн
Регистрация
4 Июл 2024
Сообщения
83
Реакции[?]
3
Поинты[?]
2K
зачем мне смотреть на то как чел пишет самую банальную фордж базу который напишет любой человек и то база на половину башрута?
Ну так если я пишу похожий код лишь помня его не значит что я пишу его базу. Да и ты сам до хуйни докапался и сказал что это база бушрута засратая, но там с "его" базы максимум в моментах похожий код. Если я пишу по памяти или по тому, что помню не значит что это чьё-то, я ведь в тупую с его видео не делаю, а пишу сам
я щас пытаюсь сделать по твоему тутору,вот Первое создадим package modules, в нём создадим enum Category и пропишим код: это надо создать пакет packsge modules,modules или module,или вообще класс создать
package - пакет, та же папка в которой хранятся файлы, только там хранятся классы. А класс тебе нужно внутри пакеты modules/module создать
 
Начинающий
Статус
Оффлайн
Регистрация
21 Авг 2023
Сообщения
56
Реакции[?]
0
Поинты[?]
0
я щас пытаюсь сделать по твоему тутору,вот Первое создадим package modules, в нём создадим enum Category и пропишим код: это надо создать пакет packsge modules,modules или module,или вообще класс создать
Module это класс нужно создать, для меня(как я понял) он нужен для удобства писания функций, типо чтобы не переписывать по 100 раз класс Module, проще с него уже наследовать и дальше расписывать
Приветствую, это небольшой гайд о том, как написать свою базу на Forge 1.16.5.

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


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

3. Настроим наш главный класс, у меня это Extend
Extend.java:
@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:
public enum Category {
    COMBAT,
    MOVEMENT,
    RENDER,
    UTILS,
    CLIENT
}
Далее создадим класс Module:
Module.java:
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:
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:
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:
@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 может и не помочь.
Красава бро, какие источники могли бы помочь начинающим людям в изучении синтаксиса(final, public, void, static), чтобы им было понятно?
на фордже врядли кто то сидеть будет)
фабрик/mcp намного лучше, как по мне
Как минимум я хз как писать на MCP, мне легче на mcp тока окно менять(название) и то что все в твоем распоряжении, можешь кинуть что-то для mcp?
 
Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2022
Сообщения
48
Реакции[?]
0
Поинты[?]
0
Module это класс нужно создать, для меня(как я понял) он нужен для удобства писания функций, типо чтобы не переписывать по 100 раз класс Module, проще с него уже наследовать и дальше расписывать

Красава бро, какие источники могли бы помочь начинающим людям в изучении синтаксиса(final, public, void, static), чтобы им было понятно?

Как минимум я хз как писать на MCP, мне легче на mcp тока окно менять(название) и то что все в твоем распоряжении, можешь кинуть что-то для mcp?
книги,ютуб
 
Начинающий
Статус
Оффлайн
Регистрация
17 Июл 2022
Сообщения
40
Реакции[?]
4
Поинты[?]
0
Гайд просто полный мусор, объясню, о каком ООП идет речь, когда у тебя буквально везде СТАТИКИ, да даже взять
Java:
   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;

    }
Почему нельзя создать единственный объект, приватизировать все переменные внутри него и через геттеры обращаться к переменным внутри, дальше, реализация Енама Categories ПРОСТО УЖАСНА, ты мог сделать конструктор, где каждый объект хранил бы Массив Модулей, но нет, ты будешь регистрировать все модули вручную, нежели чем через иттерацию пройти по каждому объекту Енама, получить модули из списка и зарегистрировать их. Примерно так должен выглядеть нормальный код, а не этот пиздец, который ты тут наворотил:


Java:
public enum Category {
    COMBAT(Модули Категории COMBAT),
    MOVEMENT(Модули Категории Movement),
    RENDER(Модули Категории RENDER),
    UTILS(Модули Категории UTILS),
    CLIENT(Модули Категории CLIENT)

private List<Module> modules;

Category (Module... modules) {
    this.modules = Arrays.asList(modules);
}

}

С пустыми методами в главном классе вообще мем, про отсутствие банальных гуард клаузесов молчу, одним словом код - полный мусор, реализация тоже ужасна, миллион моментов которые нужно рефакторить
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
15 Янв 2023
Сообщения
47
Реакции[?]
2
Поинты[?]
2K
mc.player.sendMessage(ITextComponent.nullToEmpty(TextFormatting.GREEN + getName() + TextFormatting.RESET + " was Enabled!"), mc.player.getUUID());
НУ ЭТО ...
как можно такую дичь сморозить даже не проверив как это вообще работает
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) { }
зачем оставлять часть не юзабельного кода? (доёб)
Use Mixins обязательно
нет, не обязательно, но если нужно изменить какой то класс, то можно ими воспользоваться
Приветствую, это небольшой гайд о том, как написать свою базу на Forge 1.16.5.

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


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

3. Настроим наш главный класс, у меня это Extend
Extend.java:
@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:
public enum Category {
    COMBAT,
    MOVEMENT,
    RENDER,
    UTILS,
    CLIENT
}
Далее создадим класс Module:
Module.java:
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:
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:
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:
@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 может и не помочь.
тема такая се (люблю заходить на югейм, чтобы посмотреть на высеры челов)
 
Начинающий
Статус
Оффлайн
Регистрация
4 Июл 2024
Сообщения
83
Реакции[?]
3
Поинты[?]
2K
НУ ЭТО ...
как можно такую дичь сморозить даже не проверив как это вообще работает

зачем оставлять часть не юзабельного кода? (доёб)

нет, не обязательно, но если нужно изменить какой то класс, то можно ими воспользоваться

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

зачем оставлять часть не юзабельного кода? (доёб)

нет, не обязательно, но если нужно изменить какой то класс, то можно ими воспользоваться

тема такая се (люблю заходить на югейм, чтобы посмотреть на высеры челов)
Всё понимаю, осеннее обострение и охота доебаться за просто так, но меру тоже знать надо :)
Гайд просто полный мусор, объясню, о каком ООП идет речь, когда у тебя буквально везде СТАТИКИ, да даже взять
Java:
   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;

    }
Почему нельзя создать единственный объект, приватизировать все переменные внутри него и через геттеры обращаться к переменным внутри, дальше, реализация Енама Categories ПРОСТО УЖАСНА, ты мог сделать конструктор, где каждый объект хранил бы Массив Модулей, но нет, ты будешь регистрировать все модули вручную, нежели чем через иттерацию пройти по каждому объекту Енама, получить модули из списка и зарегистрировать их. Примерно так должен выглядеть нормальный код, а не этот пиздец, который ты тут наворотил:


Java:
public enum Category {
    COMBAT(Модули Категории COMBAT),
    MOVEMENT(Модули Категории Movement),
    RENDER(Модули Категории RENDER),
    UTILS(Модули Категории UTILS),
    CLIENT(Модули Категории CLIENT)

private List<Module> modules;

Category (Module... modules) {
    this.modules = Arrays.asList(modules);
}

}

С пустыми методами в главном классе вообще мем, про отсутствие банальных гуард клаузесов молчу, одним словом код - полный мусор, реализация тоже ужасна, миллион моментов которые нужно рефакторить
Вы ребятки все не понимаете одного, всё что я написал в этом кале (гайде), я и сам осознаю что это полное дерьмище. Учитывая тот факт что когда я это писал мне было нечего делать, я просто решил постнуть недо-гайд. В вашем случае вы очень строго относитесь к тому, что делается на этом форуме. А как известно в данный момент именно в разделе по кубам, адекватных тем по пальцам пересчитать и зная это всё равно критикуете темы, которые делаются не в серьёз, а абы как.
 
Начинающий
Статус
Оффлайн
Регистрация
17 Июл 2022
Сообщения
40
Реакции[?]
4
Поинты[?]
0
В каком плане
а кто сказал что я должен всё до мельчайшей детали прорабатывать? Тем более на таком форуме, где по кд каллище позорное и постится. И на счет sendMessage - я проверял как это работает и оно всё делает так, как мне и нужно было. Твой доёб считай пустословие, тебе тупо некуда время тратить и ты решил доебнуться до темы, которая была сделана в развлекательных целях (для себя).

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

Вы ребятки все не понимаете одного, всё что я написал в этом кале (гайде), я и сам осознаю что это полное дерьмище. Учитывая тот факт что когда я это писал мне было нечего делать, я просто решил постнуть недо-гайд. В вашем случае вы очень строго относитесь к тому, что делается на этом форуме. А как известно в данный момент именно в разделе по кубам, адекватных тем по пальцам пересчитать и зная это всё равно критикуете темы, которые делаются не в серьёз, а абы как.
В каком плане АБЫ КАК? Я конкретную критику дал тебе, иди исправь, залей импрувнутый гайд, именно из-за таких как ты, которые ищут оправдания в том что "НА ФОРУМЕ СИДЯТ ТОК ТУПЫЕ ШКОЛЬНИКИ ОНИ И ТАК СХАВАЮТ" форум является хуевым, если ты хочешь что-то исправить, начни с себя

UPD: Посмотрел твой гитхаб, чет не воодушевило меня и я все больше стал сомневаться в том, что ты залил этот кусок кода не от нехуй делать, а намеренно сидел и писал его своими лапками для этого форума1729613385118.png
 
ППХУДЕР
Начинающий
Статус
Оффлайн
Регистрация
10 Фев 2020
Сообщения
409
Реакции[?]
23
Поинты[?]
6K
Для просмотра содержимого вам необходимо авторизоваться.

В каком плане

В каком плане АБЫ КАК? Я конкретную критику дал тебе, иди исправь, залей импрувнутый гайд, именно из-за таких как ты, которые ищут оправдания в том что "НА ФОРУМЕ СИДЯТ ТОК ТУПЫЕ ШКОЛЬНИКИ ОНИ И ТАК СХАВАЮТ" форум является хуевым, если ты хочешь что-то исправить, начни с себя

UPD: Посмотрел твой гитхаб, чет не воодушевило меня и я все больше стал сомневаться в том, что ты залил этот кусок кода не от нехуй делать, а намеренно сидел и писал его своими лапками для этого форумаПосмотреть вложение 288542
реально, зачем засорять форум, в нем и так полно говна, не надо смотреть на других =)
 
Начинающий
Статус
Оффлайн
Регистрация
22 Мар 2022
Сообщения
147
Реакции[?]
6
Поинты[?]
6K
Приветствую, это небольшой гайд о том, как написать свою базу на Forge 1.16.5.

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


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

3. Настроим наш главный класс, у меня это Extend
Extend.java:
@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:
public enum Category {
    COMBAT,
    MOVEMENT,
    RENDER,
    UTILS,
    CLIENT
}
Далее создадим класс Module:
Module.java:
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:
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:
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:
@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 может и не помочь.
я захотел какать, пока.
 
Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2022
Сообщения
48
Реакции[?]
0
Поинты[?]
0
Ютуб там нету ничего про Читы, даже англо смотрел и то там 3 гайда было на MCP, но не на Mdk
bush1root и много всяких типов уже появилось лол ты где ищешь там всякие пастеры плодятся еще
 
Начинающий
Статус
Оффлайн
Регистрация
21 Авг 2023
Сообщения
56
Реакции[?]
0
Поинты[?]
0
bush1root и много всяких типов уже появилось лол ты где ищешь там всякие пастеры плодятся еще
я не пастеров смотрю, я смотрел башрута чела Programmer X, 3 видоса была и забросил, и еще челик, который моды пишет
 
Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2022
Сообщения
48
Реакции[?]
0
Поинты[?]
0
Сверху Снизу