Клиентские GameRules и помощники GUI
| Класс помощника | Среда выполнения | Назначение |
|---|---|---|
ClientGameRuleHelper | Клиент / Встроенный сервер | Запрос значений GameRules в потоке клиента |
ConfigHelper | Common (Клиент/Сервер) | Атомарная загрузка, сохранение и бэкап конфигурации JSON |
GuiHelper | Клиент | Помощники экранов для ModMenu / Cloth Config |
🖥️ Безопасность выделенного сервера от сбоев загрузки классов
Чтобы обеспечить 100% совместимость с выделенным сервером и избежать вылетов из-за обращения к классам клиента, все GUI-помощники защищены ленивой проверкой (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT).
ascii
DynamicGameRuleManager.getInt(level, ruleKey)
│
┌───────────────────┴───────────────────┐
▼ ▼
[ level instanceof ServerLevel ] [ Client Environment ]
│ │
▼ ▼
Direct Level Lookup ClientGameRuleHelper
(Queries Integrated Server)📄 Атомарная замена JSON в ConfigHelper
ConfigHelper гарантирует надежное сохранение файлов конфигурации без риска повреждения при выключении питания:
- Записывает новые данные во временный файл
config.json.tmp. - Проверяет структуру JSON и размер файла.
- Создает резервную копию
config.json.bak. - Выполняет атомарную замену
config.json.tmp->config.jsonчерезFiles.move(..., StandardCopyOption.ATOMIC_MOVE).
