Иконка ресурса

[Guide] Проверка обновлений

Версия(и) Minecraft
1.16-1.1х
Долго тянуть не буду, начну сразу с главного.

Нам нужен любой репозиторий, с json'ом обновлений(Открытый, обязательно!!!), в моем случае ModUpdateRepo/ex.json at main · AlgorithmLX-Team/ModUpdateRepo .

Теперь нажимаем на такую кнопочку
1638949749740.png
, и копируем ссылку.

Дальше переходим в mods.toml, и добавляем строчку updateJSONURL = "Наш репозиторий"

Выглядеть он должен примерно так:
mods.toml:
modLoader = "javafml"
loaderVersion = "[36,)"
license = "license"

[[mods]]
modId = "examplemod"
version = "${file.jarVersion}"
displayName = "ExampleMod"
updateJSONURL = "https://raw.githubusercontent.com/AlgorithmLX-Team/ModUpdateRepo/main/example/ex.json"
authors = "You"
description = '''
Description
'''

[[dependencies.examplemod]]
modId = "forge"
mandatory = true
versionRange = "[37,)"
ordering = "NONE"
side = "BOTH"

[[dependencies.examplemod]]
modId = "minecraft"
mandatory = true
versionRange = "[1.17.1, 1.18)"
ordering = "NONE"
side = "BOTH"
Всё! теперь в списке модов(в игре), при нажатии на наш мод(если есть обновление), майнкрафт будет пытаться перекинуть на страницу мода.

А как же сделать так, чтобы при появлении обновления, отправлялось сообщение в чат? Всё достаточно просто.
нужно всего 2 класса(ClientSetup и EventHandler(сам проверщик обновлений))


EventHandler:
public class EventHandler {
    public static final EventHandler INSTANCE = new EventHandler();

    @SubscribeEvent
    public void handlePlayerLoggedInEvent(LoggedInEvent event) {
            CheckResult versionRAW = VersionChecker.getResult(ModList.get().getModFileById(DimOre.ModId).getMods().get(0));
            Status result = versionRAW.status;

            if (!(result.equals(Status.UP_TO_DATE) || result.equals(Status.PENDING) || result.equals(Status.AHEAD))) {
                event.getPlayer().displayClientMessage(new TranslationTextComponent("update." + ExampleMod.ModId + ".update_message", versionRAW.target), false);
                event.getPlayer().displayClientMessage(new TranslationTextComponent("update." + ExampleMod.ModId + ".changelog"), false);

                String changes = versionRAW.changes.get(versionRAW.target);
                if (changes != null) {
                    String[] changesFormat = changes.split("\n");

                    for (String change : changesFormat) {
                        event.getPlayer().displayClientMessage(new TranslationTextComponent("update." + ExampleMod.ModId + ".change", change), false);
                    }
                    if (versionRAW.changes.size() > 1) {
                        event.getPlayer().displayClientMessage(new TranslationTextComponent("update." + ExampleMod.ModId + ".update_message2"), false);
                    }
                }
            }
            if (result.equals(Status.AHEAD)) {
                event.getPlayer().displayClientMessage(new TranslationTextComponent("update." + ExampleMod.ModId + ".not_released"), false);
        }
    }
}


ClientSetup:
public class ClientSetup {
    public ClientSetup() {
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::init);
    }
    public void init(FMLClientSetupEvent event) {
        MinecraftForge.EVENT_BUS.register(EventHandler.INSTANCE);
    }
}

Q: А если мне надо, чтобы была возможность отключения автообновления?
A: Хорошо, давайте исправим это!

У каждого есть конфиг мода, поэтому я не буду говорить, как настраивать его.
EventHandler:
public class EventHandler {
    public static final EventHandler INSTANCE = new EventHandler();

    @SubscribeEvent
    public void handlePlayerLoggedInEvent(LoggedInEvent event) {
            CheckResult versionRAW = VersionChecker.getResult(ModList.get().getModFileById(DimOre.ModId).getMods().get(0));
            Status result = versionRAW.status;
            if (MyConfig.ENABLE_AUTOUPDATE.get()) {
                if (!(result.equals(Status.UP_TO_DATE) || result.equals(Status.PENDING) || result.equals(Status.AHEAD))) {
                    event.getPlayer().displayClientMessage(new TranslationTextComponent("update." + ExampleMod.ModId + ".update_message", versionRAW.target), false);
                    event.getPlayer().displayClientMessage(new TranslationTextComponent("update." + ExampleMod.ModId + ".changelog"), false);

                    String changes = versionRAW.changes.get(versionRAW.target);
                    if (changes != null) {
                        String[] changesFormat = changes.split("\n");

                        for (String change : changesFormat) {
                            event.getPlayer().displayClientMessage(new TranslationTextComponent("update." + ExampleMod.ModId + ".change", change), false);
                        }
                        if (versionRAW.changes.size() > 1) {
                            event.getPlayer().displayClientMessage(new TranslationTextComponent("update." + ExampleMod.ModId + ".update_message2"), false);
                        }
                    }
                }
                if (result.equals(Status.AHEAD)) {
                    event.getPlayer().displayClientMessage(new TranslationTextComponent("update." + ExampleMod.ModId + ".not_released"), false);
            }
        }
    }
}

Теперь просто регистрируем ClientSetup в главном классе, строчкой DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> ClientSetup::new);

Добавляем перевод.Это легко сделать, ибо мы уже сделали текст в TranslateTextComponent, поэтому перевод сообщения в lang_lang.json будет примерно таким:

JSON:
{
  "update.examplemod.update_message": "§9[ExampleMod] §fНовая версия уже доступна для обновления (%s), Пожалуйста, обновитесь!",
  "update.examplemod.changelog": "§eСписок изменений: ",
  "update.examplemod.change": "- %s",
  "update.examplemod.update_message2": "Более...",
  "update.examplemod.not_released": "§9[ExampleMod] §fВерсия не была выпущена"
}

Это всё! Всем удачи и пока!
Автор
AlgorithmLX
Просмотры
843
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху