SchemFlow
PluginApache-2.0

SchemFlow

Lightning‑fast schematic management for Minecraft servers (S3/MinIO-backed).

188
Downloads
1
Followers
3 weeks ago
Updated
📦
11
Versions

📖About SchemFlow

🌊 SchemFlow

SchemFlow Logo

License
Release
Java
Paper

⚡ Cloud-native schematic manager with local support, lightning-fast tab completion, and an on-demand world-provisioning API

Purpose-built for multi-server networks — build servers, creative networks, and minigame hosts alike

📥 Download📖 Wiki🐛 Issues💬 Discord


🚀 Why SchemFlow?

Stop copying .schem files between servers by hand. SchemFlow stores every schematic in S3-compatible object storage (AWS S3, MinIO, Cloudflare R2, Wasabi, DigitalOcean Spaces…) and serves it to any server on demand — with groups, trash & restore, undo/redo, smart cached tab-completion, and now a developer API that lets other plugins provision and tear down worlds on the fly. Fully compatible with native WorldEdit / FastAsyncWorldEdit formats.

⚡ What's New in v0.5.13

  • 🔌 Developer API — provision and dispose worlds on demand from your own plugin, fully async, with a completion signal. Purpose-built for per-round minigame maps.
  • 🎯 Absolute-Origin Paste — restore a schematic at its exact authored coordinates, so named locations (spawns, corners, regions) stay valid in the freshly created world.
  • 🧱 Map Builder Hook — save a pos1/pos2 selection straight to S3 preserving the absolute origin for later one-call provisioning.
  • 🧹 One-Call World Teardown — unload (no save) and delete an ephemeral world in a single call.

⚡ What's New in v0.5.12

  • 🏠 Local Schematic Support — work offline with local:name syntax for downloaded schematics
  • ⚡ Lightning-Fast Tab Completion — smart caching eliminates network delays (90% fewer S3 calls)
  • 🛡️ Safe Update Command — dedicated /schemflow update with mandatory --confirm
  • 🎯 Optimized Performance — cached data for instant completion and duplicate prevention

✨ Feature Showcase

🎮 Hybrid Schematic Management

  • Cloud Storage: S3/MinIO for cross-server sync
  • Local Support: offline access via local:name
  • Smart Caching: instant cached tab-completion
  • Safe Updates: dedicated update command with confirmation
  • Groups: organize schematics by group:name

🔧 Advanced WorldEdit Support

  • FastAsyncWorldEdit fully compatible
  • Entity handling with -e
  • Air block control with -a
  • Biome preservation with -b (default on)
  • Large schematic optimization

🤖 Automation & Developer API

  • On-demand world provisioning API (reflection-friendly, zero compile-time dependency)
  • Absolute-origin paste for valid authored coordinates
  • Skript integration with custom syntax
  • Trash & Restore + Undo/Redo
  • Group lifecycle (create / delete / rename)

🌐 Cloud Storage Integration

  • MinIO self-hosted
  • AWS S3 enterprise-grade
  • Compatible providers: Cloudflare R2, DO Spaces, Wasabi…
  • Ephemeral cache with automatic cleanup

🎯 Perfect For

🏢 Build Servers 🎮 Creative Networks 🏆 Minigame Hosts 🌍 Survival Servers
Template management Plot schematic storage Per-round map loading Structure backups
Build preservation Player submissions Arena distribution Town planning
Collaboration tools Contest archives Rapid deploy & teardown Restoration tools

📋 Requirements

  • Minecraft: 1.21 – 1.21.11 (Paper / Purpur)
  • Java: 21+
  • WorldEdit 7.2.18+ or FastAsyncWorldEdit
  • (optional) Skript 2.7+ for automation

⚡ Quick Start

  1. Drop SchemFlow-x.y.z-all.jar into plugins/ and start the server once.
  2. Edit plugins/SchemFlow/config.yml with your S3/MinIO endpoint, accessKey, secretKey, and bucket.
  3. Run /schemflow reload — done.

🎮 Commands

Command Description
/schemflow pos1 · pos2 Set selection corners
/schemflow upload <name> [-eab] [-group g] Export selection → S3
/schemflow update <name> --confirm Safely overwrite an existing schematic
/schemflow paste [group:]name [-eab] · paste local:name Paste from S3 or local cache
/schemflow fetch [group:]name Download to local cache
/schemflow list · local List server / local schematics
/schemflow delete [group:]name · restore name · trash clear --confirm Trash & restore
/schemflow undo · redo Undo/redo last paste or delete
/schemflow groups · group create/delete/rename Group management
/schemflow provision <world> · cache · reload World provisioning, cache, hot reload

Permissions are granular (schemflow.<command>); schemflow.admin grants everything.


🔌 Developer API

Other plugins can drive SchemFlow on demand — provision a fresh world, paste a map at its exact authored coordinates, and get a completion signal — without a compile-time dependency. Everything hangs off WorldProvisioner and is safe to call from any thread.

Method Returns Purpose
provisionRoundWorld(world, group, schematic, pasteAtOrigin, gamerules) CompletableFuture<World> Create a void world, async-fetch from S3, paste, apply gamerules. Completes only once fully pasted. Idempotent.
disposeWorld(world) CompletableFuture<Void> Unload (no save) + delete folder.
inspect(group, schematic) SchematicInfo Dimensions + authored min corner (for fixed-point pasting).
saveSelectionAsMap(player, group, name) CompletableFuture<Void> Save a pos1/pos2 selection to S3 preserving the absolute origin.
Object plugin = Class.forName("com.c4g7.schemflow.SchemFlowPlugin")
        .getMethod("getInstance").invoke(null);
Object prov = plugin.getClass().getMethod("getProvisioner").invoke(plugin);

CompletableFuture<?> future = (CompletableFuture<?>) prov.getClass()
        .getMethod("provisionRoundWorld", String.class, String.class, String.class, boolean.class, java.util.Map.class)
        .invoke(prov, "round_42", "blockparty", "W-BLOCKPARTY-regular-Island", true, null);

future.whenComplete((world, error) -> {
    if (error != null) return;          // handle failure
    // (org.bukkit.World) world is fully pasted — safe to teleport players in
});

Paste-at-origin restores blocks at their authored coordinates and requires maps saved via saveSelectionAsMap; schematics from /schemflow upload paste relatively. The method signatures are a stable reflection contract.


⚙️ Configuration

endpoint: "minio.example.com:9000"   # host:port, or full http(s):// URL
secure: true
accessKey: "YOUR_ACCESS_KEY"
secretKey: "YOUR_SECRET_KEY"
bucket: "schematics"
extension: "schem"                    # schem (recommended) or schematic

storage:
  rootDir: "FlowStack/SchemFlow"      # object-key prefix in the bucket
  defaultGroup: "default"

downloadDir: "plugins/SchemFlow/schematics"
cacheRefreshSeconds: 30               # 0 disables periodic refresh

🌊 SchemFlow v0.5.13 — On-demand world provisioning for build & game networks

⭐ GitHub🚀 Download💬 Discord

Open source • MIT-style license • Built for the Minecraft community