
Roid's Old Obsidian
Активный0.0
Установок
Последнее обновление
Roid's Old Obsidian
Изначальный мод Jsoned Old Obsidian при использовании большого количества рецептов демонстрировал серьезные проблемы с производительностью, как видно из отчетов профилирования. Именно это побудило меня создать собственную версию этого мода. Хотя у меня нет точных бенчмарков, пользователи, которые ранее жаловались на замедление загрузки чанков (более 80% времени уходило на обработку оригинального мода), сообщили об отсутствии заметного влияния на производительность после перехода на эту версию.
Ключевые возможности
Основная функция мода заключается в автоматическом преобразовании блоков при взаимодействии жидкостей. Когда один блок (назовем его жидкость1) активирует обновление состояния другого блока (пыли), который находится рядом с третьим блоком (жидкость2), пылевой блок превращается в результат, определенный в конфигурации JSON. Примечательно, что жидкость1 и жидкость2 не обязательно должны быть жидкостями в техническом смысле.
Возьмем классический пример: жидкость1 - лава, пыль - красная пыль, жидкость2 - вода. В результате получаем восстановление старого бага превращения красной пыли при контакте с лавой возле воды.
Конфигурация такого преобразования в JSON выглядит следующим образом:
{
"liquid1": "minecraft:flowing_lava",
"liquid2": [
"minecraft:flowing_water",
"minecraft:water"
],
"dust": "minecraft:redstone_wire",
"result": "minecraft:obsidian"
}
Расширенная система сопоставления
Мод поддерживает несколько методов идентификации блоков:
- Сопоставление по конкретному состоянию блока
- Сопоставление по типу блока
- Поддержка словаря руд (ore dictionary using picked block)
- Регулярные выражения (используя формат registryname:meta)
- Любое другое сопоставление через GroovyScript
Добавление новых методов сопоставления осуществляется через нативный доступ к методам GroovyScript. Подробная документация доступна в вики проекта.
Обслуживание и производительность
Перезагрузка конфигурации
Все добавленные через JSON преобразования можно перезагрузить без перезапуска сервера, используя команду /jsonedoldobsidian:conversion_reload
Оптимизация работы
Основная проблема оригинального Jsoned Old Obsidian заключалась в использовании регулярных выражений для каждого события NeighborNotifyEvent, что создавало значительную нагрузку на производительность из-за повторяющихся ресурсоемких операций.
Эта версия включает следующие оптимизации:
- Избегает использования регулярных выражений там, где это не необходимо (например, используется простое сравнение == для сопоставления блоков)
- Выполняет предварительные вычисления для блоков, состояний блоков, идентификаторов руд и компиляции регулярных выражений при добавлении рецептов, а не при их сопоставлении
- Использует хэширование для сопоставления liquid1
Эти улучшения значительно снижают нагрузку на систему и обеспечивают стабильную работу даже при большом количестве зарегистрированных рецептов.