[1.8] Встроенная проверка обновлений мода

329
13
Не так давно, в Forge версии 11.14.3.1549 добавили механизм проверки обновлений модов. Действует он следующим образом:

Допустим я - разработчик мода Shitty World Mod, версии которого я называю исходя из следующей схемы: [major.minor.build.revision] , где
  • major - главный номер версии. Меняется при полной переделке мода либо большом обновлении.
  • minor - вспомогательный номер версии. Меняется при добавлении какого-либо функционала к уже существующей части.
  • build - номер сборки либо ревизия. Меняется после латания дыр \ багов и обнуляется при изменении в первых двух номерах.
  • revision - номер ревизии. Используется при работе с системами контроля версий (SVN), в другом случае может не использоваться вовсе.

Я пишу мод под разные версии Minecraft и в данный момент мод имеет следующие версии:
  • Для Minecraft v1.8 - версия 1.3.5 (исправил 5 ошибок)
  • Для Minecraft v1.8.8 - версия 1.3.2 (исправил 2 ошибки)
  • Для Minecraft v1.9 - версия 1.3.4 (исправил 4 ошибки)

В главном классе мода я пишу следующее:
Код:
@Mod(modid = ShittyWorldMod.MODID, version = ShittyWorldMod.VERSION, updateJSON = ShittyWorldMod.UPDATEJSON)
public class ShittyWorldMod
{
    public static final String MODID = "shittyworld";
    public static final String VERSION = "1.3.2";
    public static final String UPDATEJSON = "http://shitty.ru/update/shittyworld.json";
    
    @EventHandler
    public void init(FMLInitializationEvent event) {}
}
Как вы заметили, в @Mod появился новый параметр updateJSON . В нем мы должны указать путь до JSON-файла с описанием всех новых версий мода. Этот файл имеет следующую структуру:
Код:
{
  "homepage": "ССЫЛКА НА ДОМАШНЮЮ СТРАНИЦУ МОДА",
  "promos": {
    "ВЕРСИЯ_MINECRAFT1-latest": "ВЕРСИЯ_МОДА",
    "ВЕРСИЯ_MINECRAFT1-recommended": "ВЕРСИЯ_МОДА",
    "ВЕРСИЯ_MINECRAFT2-latest": "ВЕРСИЯ_МОДА",
    "ВЕРСИЯ_MINECRAFT2-recommended": "ВЕРСИЯ_МОДА"
  },
  "ВЕРСИЯ_MINECRAFT": {
    "ВЕРСИЯ_МОДА1": "ОПИСАНИЕ",
    "ВЕРСИЯ_МОДА2": "ОПИСАНИЕ",
    "ВЕРСИЯ_МОДА3": "ОПИСАНИЕ"
  }
}
Тут стоит обратить внимание на раздел promos . Здесь, для каждой версии Minecraft мы указываем 2 версии нашего мода. Одна - стабильная версия, вторая - последняя на сегодня.

Теперь я в свой мод добавил еще 20 новых блоков, а потом для версии 1.8 нашел 2 ошибки и исправил их. Поэтому версии стали следующими:
  • Для Minecraft v1.8 - версия 1.4.2 (исправил 2 ошибки)
  • Для Minecraft v1.8.8 - версия 1.4.0
  • Для Minecraft v1.9 - версия 1.4.0
Теперь, чтобы игроки узнали о том, что для их любимого мода вышла новая версия, я создам вот такой конфиг:
Код:
{
  "homepage": "http://shitty.ru/",
  "promos": {
    "1.8-latest": "1.4.2",
    "1.8-recommended": "1.4.2",
    "1.8.8-latest": "1.4.0",
    "1.8.8-recommended": "1.4.0",
    "1.9-latest": "1.4.0",
    "1.9-recommended": "1.4.0"
  },
  "1.8": {
    "1.3.5": "Исправлена ошибка вылета из инвентаря\nОбновлены текстуры блока меди\nУбраны лишние текстуры",
    "1.4.2": "Добавлены 20 новых блоков\nИсправлены ошибки дропа с блока пластика и краша клиента при двойном нажатии в GUI походного котелка"
  },
  "1.8.8": {
    "1.3.2": "Исправлена ошибка вылета из инвентаря\nИсправлен перевод предметов в en_US.lang",
    "1.4.0": "Добавлены 20 новых блоков"
  },
  "1.9": {
    "1.3.4": "Исправлена ошибка вылета из инвентаря\nИсправлен перевод предметов в en_US.lang",
    "1.4.0": "Добавлены 20 новых блоков"
  }
}

В результате Forge подхватит этот файл по тому пути, который указан в главном классе, прочтет его, увидит, что вышла новая версия и отобразит пользователю:

image.png
 
1,087
2
Хм. Интересно. Однако VC мне больше нравится.
Однако, молодец. Нормально описал как сделать такую проверку.
 
Сверху