• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

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

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
4 Июл 2024
Сообщения
82
Реакции
3
Приветствую, это небольшой гайд о том, как написать свою базу на 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 может и не помочь.
 
я щас пытаюсь сделать по твоему тутору,вот Первое создадим package modules, в нём создадим enum Category и пропишим код: это надо создать пакет packsge modules,modules или module,или вообще класс создать
 
Приветствую, это небольшой гайд о том, как написать свою базу на 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 может и не помочь.
на фордже врядли кто то сидеть будет)
фабрик/mcp намного лучше, как по мне
 
Уж лучше это, чем темы про expnesve
 
Приветствую, это небольшой гайд о том, как написать свою базу на 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 может и не помочь.
Ты создал менеджер для классов и называешь это базой?
 
наелся говна и такой дай на форум вылью базу сделаю ;DxD
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Это такое говно,взяли базу башрута и обосрали ее?
 
Это такое говно,взяли базу башрута и обосрали ее?
Почему многие думают что это база бушрута, если такой вид баз ещё пендосы использовали xD. Да и если я делаю похоже, это не знаxяит то, что это его база.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Почему многие думают что это база бушрута, если такой вид баз ещё пендосы использовали xD. Да и если я делаю похоже, это не знаxяит то, что это его база.
если ты переименовал классы то это не обозначает, что это мега супер селф код база
 
если ты переименовал классы то это не обозначает, что это мега супер селф код база
Если ты так считаешь то, твоё мнение, я делал для тех кто даже такого не может
если ты переименовал классы то это не обозначает, что это мега супер селф код база
Да и если я делал то, что знаю по опыту по типу просмотра башрута, не значит то что я просто взял его базу и переименовал/переделал.
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Если ты так считаешь то, твоё мнение, я делал для тех кто даже такого не может

Да и если я делал то, что знаю по опыту по типу просмотра башрута, не значит то что я просто взял его базу и переименовал/переделал.
вов бро успех добавил категории и то врят-ли ты сам их написал потому что в пхасме такой же код :joycat:
 
Назад
Сверху Снизу