Регистрация addon через PoliticalWorldAPI
✅ Source verified Political World GitHub snapshot ce0c917 API source generation 1.9.0
До подписки на события и регистрации собственного контента addon должен зарегистрировать identity:
PoliticalWorldAPI.RegisterAddon(...)Definition
Заголовок раздела «Definition»Public definition:
public sealed class AddonDefinition{ public string Id; public string Name; public string Version; public string Description; public string Author;}Минимальный пример:
private const string AddonId = "YourName.MyAddon";
bool ok = PoliticalWorldAPI.RegisterAddon( new PoliticalWorldAPI.AddonDefinition { Id = AddonId, Name = "My Addon", Version = "0.1.0", Author = "YourName", Description = "Example addon" });Проверка Addon ID
Заголовок раздела «Проверка Addon ID»В проверенном source валидируется:
- ID не пустой;
- длина от 3 до 96 символов;
- разрешены буквы, цифры,
.,_,-; - первый и последний символ — буква или цифра;
- core ID
Lous12.PoliticalWorldзарезервирован; - duplicate addon ID отклоняется;
- Name обязателен.
Отсутствие . namespace separator сейчас создаёт warning, а не hard failure.
Рекомендуемый формат:
AuthorOrOrg.ProjectNameНапример:
YourName.MyPoliticalAddonСначала addon, потом content
Заголовок раздела «Сначала addon, потом content»Обычный порядок:
1. Проверить API compatibility.2. RegisterAddon.3. При необходимости проверить capabilities.4. Зарегистрировать localization/content/events/actions.5. Вывести diagnostics.Именно такой порядок используется в repository getting-started example.
Ownership контента
Заголовок раздела «Ownership контента»Political World проверяет, что content ID принадлежит namespace зарегистрированного addon.
Примеры:
YourName.MyAddon.technocracyYourName.MyAddon:event_palace_crisisYourName.MyAddon_action_exampleВ проверенном validation после addon ID принимаются ownership separators:
.:_У конкретного content type могут быть дополнительные правила.
Зачем ownership
Заголовок раздела «Зачем ownership»Без ownership check addon A мог бы зарегистрировать:
OtherAddon.some_contentПолучаем collisions, сломанные migrations и непонятные diagnostics.
Public registry должен уметь ответить:
Кто владеет этим content ID?Registration видна в diagnostics
Заголовок раздела «Registration видна в diagnostics»Успешный RegisterAddon создаёт diagnostics state и записывает:
PWDIAG001То есть registration становится наблюдаемой support tooling.
Получение зарегистрированных addons
Заголовок раздела «Получение зарегистрированных addons»API предоставляет:
PoliticalWorldAPI.IsAddonRegistered(addonId)PoliticalWorldAPI.GetAddon(addonId)PoliticalWorldAPI.GetRegisteredAddons()Публичные методы возвращают копии DTO, а не дают напрямую mutable internal registry entry.
Stable ID — это compatibility data
Заголовок раздела «Stable ID — это compatibility data»Addon ID нельзя считать просто красивым названием.
Он может стать частью:
- content IDs;
- localization keys;
- addon-private kingdom data namespaces;
- tags;
- diagnostics;
- save-compatible references.
Позднее переименование может потребовать migration.
Общий вывод
Заголовок раздела «Общий вывод»Addon framework должен сначала установить identity, а уже потом принимать контент.
Identity даёт устойчивую единицу для:
- ownership;
- diagnostics;
- collision prevention;
- правил;
- migrations;
- capabilities;
- support reports.