GravitLauncher / Launcher

Улучшеный Minecraft лаунчер на основе sashok's742 v3
https://gravitlauncher.com
GNU General Public License v3.0
132 stars 105 forks source link

Фикс зависимостей и возможность взаимоисключения для опциональных модов #663

Closed Anon8281 closed 1 year ago

Anon8281 commented 1 year ago

Feature: Позволяет сделать моды конфликтующими по принципу XOR. Пример использования: создание профиля клиента с возможностью выбора строго одного из двух(или более) взаимоисключающих модов.

Юзкейс:

Есть два набора модов:

  1. Optifine
  2. Soidum и некоторые альтернативы фич optifine(CIT)

Optifabric работает менее стабильно, чем Sodium и альтернативы, однако, запускается на большем количестве устройств за счет более мягких требований к OpenGL(требуется OpenGL 3.2), в то время как Sodium(как и альтернативы CIT) работает шустрее, но требует OpenGL 4.3, соответственно запускается на меньшем количестве компьютеров.

Как итог, есть необходимость заставить игрока установить 1 из 2 модов, чтобы обеспечить поддержку CIT

Пример конфига:

"updateOptional": [
    {
      "actions": [
        {
          "files": {
            "mods/optifine.jar": "",
        "mods/optifabric.jar": ""
          },
          "type": "file"
        }
      ],
      "name": "Optifine",
      "info": "Оптимизационный мод для старых ПК",
      "visible": true,
      "xorConflictFile": [{"name":"Sodium"}],
      "mark": false,
      "limited": false
    },
    {
      "actions": [
        {
          "files": {
            "mods/sodium.jar": ""
          },
          "type": "file"
        }
      ],
      "name": "Sodium",
      "info": "Оптимизационный мод для новых ПК",
      "xorConflictFile": [{"name":"Optifine"}],
      "visible": true,
      "mark": true,
      "limited": false
     }
]

Fix: Исправляет возможный краш клиента, если добавить мод в опциональные, но забыть про его зависимости и закидывать их уже задним числом. (Также фиксит требование XOR на активацию хотя бы одного мода).

microwin7 commented 1 year ago
"updateOptional": [
  {
    "actions":[
      {
        "files":{
          "mods/optifine.jar":"",
          "mods/optifabric.jar":""
        },
        "type":"file"
      }
    ],
    "name":"Optifine",
    "info":"Оптимизационный мод для старых ПК",
    "visible":true,
    "xorConflictFile":[
      {
        "name":"Sodium"
      }
    ],
    "mark":false,
    "limited":false
  },
  {
    "actions":[
      {
        "files":{
          "mods/sodium.jar":""
        },
        "type":"file"
      }
    ],
    "name":"Sodium",
    "info":"Оптимизационный мод для новых ПК",
    "xorConflictFile":[
      {
        "name":"Optifine"
      }
    ],
    "visible":true,
    "mark":true,
    "limited":false
  }
]

а то не понятно

gravit0 commented 1 year ago

xorConflict стоит переименовать во что то более подходящее. Многие не знаю что такое xor

Anon8281 commented 1 year ago

xorConflict стоит переименовать во что то более подходящее. Многие не знаю что такое xor

mutuallyExclusive?

Anon8281 commented 1 year ago

Теперь примерно так:

"updateOptional": [
  {
    "actions":[
      {
        "files":{
          "mods/optifine.jar":"",
          "mods/optifabric.jar":""
        },
        "type":"file"
      }
    ],
    "name":"Optifine",
    "info":"Оптимизационный мод для старых ПК",
    "visible":true,
    "groupFile":[
      {
        "name":"Sodium"
      }
    ],
    "mark":false,
    "limited":false
  },
  {
    "actions":[
      {
        "files":{
          "mods/sodium.jar":""
        },
        "type":"file"
      }
    ],
    "name":"Sodium",
    "info":"Оптимизационный мод для новых ПК",
    "groupFile":[
      {
        "name":"Optifine"
      }
    ],
    "visible":true,
    "mark":true,
    "limited":false
  }
]