Tags
Creators
Details
0.3.1.alpha
Compatibility
Changes
Some back end updated, but most important things are with the change in how manager data is saved means I believe we are save safe now. The other big improment is that chaining multiple inputs and or outputs together now works as I believe it should. This has been fun to work on. Hope you are enjoying it. Full change log below.
###[Added]
-
Modular Plugin API: Introduced a backend plugin system (ISFMFlowPlugin / ISFMFlowClientPlugin) that allows third-party developers to register custom flowchart nodes, settings panels, and capabilities side-safely.
-
Extensible Network Capabilities: Rewrote the network routing system to support custom capabilities (FlowCapability). Cable networks can now support fluid, energy, or chemical transfer integrations seamlessly in the future.
-
Flowchart Wire Buffers: Connection wires now virtually queue items (FlowItemBuffer) as they travel along S-curves, preserving their source block coordinate metadata for downstream evaluation.
-
Server Diagnostic Profiler: Added a /sfmflow profile command for administrators to audit active Manager blocks, displaying performance execution times, queued backlog counts, and click-to-teleport actions.
-
Execution Time Budgets: Added a configurable execution time budget (limits.maxExecutionBudgetUs, defaulting to 1000 microseconds) to clamp the time spent executing transfers per tick, protecting server performance.
-
External Data Storage: Flowchart layouts and configurations are now stored in dedicated .dat files within the world save folder (<world_folder>/sfmflow/managers/) instead of inside the block's NBT. This mitigates chunk NBT bloating, reduces save overhead, and keeps world save sizes stable.
-
Automated Save Cleanup: When a Machine Inventory Manager block is broken, its corresponding external save file is automatically deleted from disk to prevent unreferenced data buildup.
###[Changed]
-
Modular Core Layout: Decoupled built-in triggers and transfers, registering them through the new Vanilla plugin modules.
-
API Promoted Widgets: Elevated BlockPreview3DWidget, InventorySelectorWidget, and ItemFilterWidget to public API packages for developers to reuse.
-
Storage Architecture: Loading and saving processes now fetch layout data asynchronously from the filesystem once the world is loaded.
-
Initial Client Synchronization: Data-sync tags continue to package layouts dynamically on chunk load to ensure visual flowchart canvases update immediately when logging in.
###[Fixed]
- Backward Compatibility: Legacy worlds storing layout data directly inside chunk NBT are automatically parsed, loaded, and migrated to the new external format upon first load.
###[Removed]
- Hardcoded Routines: Removed hardcoded item handler operations from the manager block entity's ticking loop in favor of the registry-backed capability executor loops.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:LTva5BWN:c0tWyz2c"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:LTva5BWN:c0tWyz2c"
}

