ShellForge is a NeoForge addon for Create that lets you package entire machine builds into a single shell block. The internal mechanics run in a remote Sable sublevel, while the main world interacts with them through per-face interfaces for stress, redstone, and fluids.
集成传动 是一个面向 Create 的 NeoForge 模组:将一整段机械结构压缩为一个外壳方块,内部逻辑在 Sable 子关卡中运行,外壳各面通过接口与主世界桥接应力、红石与流体。
| Mod ID | shellforge |
| Minecraft | 1.21.1 |
| Loader | NeoForge 21.1+ |
| Required | Create, Sable |
- Structure packaging — Copy a region into a Shell Blueprint, then place it anywhere as a Shell Block that preserves all internal blocks and block entities.
- Sable sublevels — Packed structures live in an isolated sublevel plot (remote Y), not in the main world chunk space.
- Per-face I/O — Each shell face can expose independent endpoints:
- Stress Interface — Bidirectional Create kinetic / stress bridging (RPM + SU).
- Redstone Interface — Analog redstone in and out (0–15).
- Fluid Interface — Pipe fluids through the shell boundary.
- Automatic direction — Stress flow follows Create's
hasSource()rules: external motor drives the sublevel, otherwise the sublevel drives external consumers. - Multi-face stress — Multiple faces can import or export stress on the same internal network; capacity and load feedback are split across active faces to avoid double-counting.
- Wireless redstone bridge — Create Redstone Links inside a shell can relay to links near the shell block in the main world (and vice versa).
- Kinetic angle sync — Shaft angles stay aligned across the shell boundary, including spring / sequenced gearshift edge cases.
| Block / Item | Purpose |
|---|---|
| Shell Block | The placed shell in the main world. Bridges all bound endpoints each tick. |
| Shell Blueprint | Holds a copied structure definition. Right-click a block face to place the shell. |
| Face Marker | Marks which shell face an adjacent interface belongs to during /shellforge copy. Not copied into the definition. |
| Stress Interface | Sublevel endpoint for Create kinetic networks. Place inside the structure, facing outward. |
| Redstone Interface | Sublevel endpoint for redstone signals. |
| Fluid Interface | Sublevel endpoint for fluid pipes / tanks. |
| Shell Core | Internal shell metadata holder (used by the shell system). |
All items are available in the ShellForge creative tab.
Inside your future shell region:
- Build your Create (or other) machine as usual.
- On each face that should connect to the outside world, place a Stress / Redstone / Fluid Interface on the boundary of the selection (or use a Face Marker next to an interface to assign a face explicitly).
- Face markers are optional but recommended when an interface is not on the outer boundary, or when you need a specific face assignment.
Requires operator permission (level 2):
/shellforge copy <x1> <y1> <z1> <x2> <y2> <z2>
Optional face overrides (when auto-discovery is not enough):
/shellforge copy <x1> <y1> <z1> <x2> <y2> <z2> --north stress --south redstone --up fluid
This gives you a Shell Blueprint item and creates a template sublevel for the copied structure.
Right-click the Shell Blueprint on the block face where the shell should attach. A Shell Block appears in the main world; its internal logic runs in the linked Sable sublevel.
Connect external Create shafts, redstone, or pipes to the corresponding faces of the shell block.
| Command | Description |
|---|---|
/shellforge copy <pos1> <pos2> [face flags] |
Copy a region into a blueprint. Face flags: --<north|south|east|west|up|down> <stress|redstone|fluid> |
/shellforge debug |
Show whether placement debug projection is enabled. |
/shellforge debug on |
Log sublevel projection positions when placing blueprints. |
/shellforge debug off |
Disable placement debug (default). |
All commands require permission level 2 (operator).
Each stress-bound shell face gets a hidden PerFaceStressHub (Create kinetic block entity) on that face. The hub talks to the sublevel Stress Interface:
- Import (external source → sublevel): injects RPM and stress capacity per RPM into the internal network.
- Export (sublevel → external): publishes remaining internal capacity as a generator on the external Create network.
When several faces share the same internal kinetic network, import load feedback and export capacity are split among active faces so totals stay correct.
Shell faces read analog power from external neighbors and forward it to internal Redstone Interfaces. Internal signals aggregate back to the shell face output. Feedback loops on the shell face are suppressed.
Each fluid-bound face exposes a merged IFluidHandler that pipes through to the internal Fluid Interface block(s) on that face.(however not implemented yet)
If the sublevel contains Create Redstone Links, transmitters and receivers inside can merge with links in link-range of the shell block in the main world, relaying frequencies across the boundary.
- JDK 21+
- Git
ShellForge requires these mods at runtime:
- NeoForge for Minecraft 1.21.1
- Create
6.0.10+ - Sable
1.2.2+(with sable-companion)
The dev environment pulls Create and Sable via Gradle localRuntime dependencies. Optional sibling mods (Simulated, Aeronautics) are referenced from build.gradle for local testing only and are not required to run ShellForge.
./gradlew runClientOn Windows:
.\gradlew runClientCompile only:
./gradlew compileJavaBuild the mod JAR:
./gradlew buildOutput: build/libs/shellforge-<version>.jar
src/main/java/com/shellforge/
├── block/ # Shell block, interfaces, face marker
├── block/entity/ # Block entities (shell, stress hub, interfaces)
├── command/ # /shellforge commands
├── content/ # Face-extra kinetic positions, connection forwarding
├── item/ # Shell blueprint
├── mixin/ # Create / Level integration hooks
├── registry/ # Deferred registers
└── shell/ # Copy, sublevel lifecycle, redstone bridge, angle sync
- Dev runs may load other kinetic mixins (e.g. from Simulated) that compete with ShellForge's
KineticNetworkMixin— watch the log if stress behaviour differs between dev and production. - The behavior of spring/sequenced_gearbox inside the shell may have different behavior with the same structure without shell, problem mainly come from stress_interface's stress deliver.(Now usable, just different behavior)
All Rights Reserved (see gradle.properties).