Nodeflow
Активный0.0
Установок
Последнее обновление
Версии
Nodeflow
Nodeflow представляет собой библиотеку для создания интерфейсов программирования на основе графов в Minecraft, работающую на загрузчике модов Fabric.
Начало работы
Для подключения библиотеки добавьте зависимость через JitPack. Также можно использовать Maven от Modrinth, но в этом случае может потребоваться дополнительно добавить зависимость на Mixin Extras.
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.mattidragon:nodeflow:$nodeflow_version'
}
Первым шагом является создание GraphEnvironment. Большинству модов потребуется только одна такая среда, но если набор доступных узлов изменяется, можно создавать новую при необходимости.
public static final GraphEnvironment ENVIRONMENT = GraphEnvironment.builder()
// Добавляет контекст, необходимый узлам для выполнения. Остается неизменным при каждой оценке
.addContextTypes(ContextType.SERVER_WORLD, ContextType.BLOCK_POS, ContextType.SERVER)
// Типы данных, которые разрешено использовать. Нужно для узлов, которые могут работать с любым типом данных, чтобы знать, какие разрешены
.addDataTypes(DataType.BOOLEAN, DataType.NUMBER, DataType.STRING)
// Добавляет группы узлов. Также используются для группировки в редакторе
.addNodeGroups(new TagNodeGroup(NodeGroup.MATH), new TagNodeGroup(NodeGroup.ADVANCED_MATH), new TagNodeGroup(NodeGroup.LOGIC), new TagNodeGroup(ModNodeTypes.REDSTONE_GROUP))
// Добавляет отдельные узлы. Они будут помещены в группу "разное"
.addNodeTypes(NodeType.TIME)
.build();
Используя эту среду, можно создать EditorScreen, хотя базовый класс обычно не используется напрямую.
Если вы используете блок-сущность для хранения кода, она может реализовывать интерфейс GraphProvidingBlockEntity в дополнение к наследованию от BlockEntity. Этот интерфейс уже реализует ExtendedScreenHandlerFactory, поэтому все, что нужно сделать - открыть экран из блок-сущности. Nodeflow автоматически обработает синхронизацию графа при изменениях.
Если граф не хранится в блоке, можно создать подкласс EditorScreen и самостоятельно обрабатывать синхронизацию (или не делать этого, если работа полностью на стороне клиента).
В будущем могут появиться подробная документация и вики.