节点流

节点流

一个用于在Minecraft上基于Fabric模组加载器的图编程接口库

基础库

Nodeflow

Nodeflow 是一个用于在 Fabric 模组加载器上为 Minecraft 提供基于图的编程接口的库。

入门

从 jitpack 添加对该库的依赖。你也可以使用 modrinth maven, 但那样你可能最终需要手动添加对 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,不过通常基类对你没什么用处。

如果你使用方块实体来保存你的代码,可以让它除了继承 BlockEntity 之外还实现 GraphProvidingBlockEntity。 该接口已经实现了 ExtendedScreenHandlerFactory,所以你只需要从方块实体打开屏幕即可。 Nodeflow 会在图发生变化时处理同步。

如果你不把图存储在方块中,可以创建 EditorScreen 的子类并自行处理同步(如果你完全是客户端侧的,也可以不处理)。

将来可能会提供完善的 javadocs 和 wiki。