Maintain first-party addons

Create, Sable and Propulsion are independent Gradle builds under addons/. Their integration code, Guest declarations, ABI locks and tests belong to the owning addon. Use the all-addon stand to verify behavior with the complete pinned physics runtime. For a new third-party mod, start with the public addon SDK.

Create

Run from addons/create with Gradle on JDK 25 and a Java 21 toolchain:

./gradlew-sandbox-dev-parallel-summary check buildProductionJar
./gradlew-sandbox-dev-parallel runGameTestServer

The standalone GameTest server uses real kinetic devices and boilers. The production archive checks reject upstream, base-mod and GameTest implementation classes. Player-facing behavior lives in the Create guide.

Sable

The snapshot adapter is request-only: no background feed, subscriptions or cached body registry. Membership is resolved for each request. The SDK validates bounded immutable record shapes; Rust materializes the reply in budgeted slices without invoking Guest constructors. Structured responses use Runtime ABI 1.13 and bundled native C ABI 20.

Build and test

Run from addons/sable, with Gradle on JDK 25 and a Java 21 toolchain available:

./gradlew-sandbox-dev-parallel-summary check
./gradlew-sandbox-dev-parallel runGameTestServer
./gradlew-sandbox-dev-parallel runClient

For joint Create/Sable runs, use the all-addon development stand. It is a development stand and produces no umbrella mod. The lifecycle GameTest compiles and runs a real Guest program before assembly, on the construction and after return into the world. It checks typed fields, unavailable-operation exceptions, ComputerId retention, runtime replacement and persisted file contents. Full disassembly, split and merge scenarios need separate coverage.

The pinned Sable JAR embeds Companion, Rapier and Veil; Veil embeds additional libraries. The build extracts those exact versions for the development classpath. These extracted files are not copied into this addon archive.

Propulsion

A narrowly scoped mixin marks saves of engines controlled by Compukters and clears unowned digital input/mode on full NBT loading, including assembly copies. Configuration survives; live program ownership does not transfer. Ordinary uncontrolled Propulsion and ComputerCraft saves and client update packets retain their upstream behavior.

state() uses the adapter’s configured kN conversion. In the pinned 1.1.5 binary, getTargetThrustNewtons() actually returns configured kN; its method name is not a units contract. Structured replies use Runtime ABI 1.13 / native C ABI

  1. Existing ordinary-engine operation IDs are 0..4, vector operations are 5..11, and mount() is ID 12 in capability version 1. Changing a release’s x.y version does not automatically change these ABI locks.

Build and test

Run from addons/propulsion with Gradle on JDK 25 and a Java 21 toolchain:

./gradlew-sandbox-dev-parallel-summary check
./gradlew-sandbox-dev-parallel runGameTestServer

For combined Create/Sable/Propulsion and Aeronautics runs, use the all-addon development stand. The standalone build extracts the pinned upstream Sable libraries for Loom; these are not bundled into this addon.

Lifecycle evidence

Standalone check verifies the archive and both ordinary and vector GameTest sources. Real Guest programs exercise exclusive ownership, invalid inputs, typed observations, cable loss, completion, explicit close, tiny input clearing, computer removal, NBT copies and actual Sable assembly. Vector tests also preserve live redstone steering signals and client packets. The shared dev stand composes these scenarios with Create and Sable tests and pinned Aeronautics. Mount observations are checked in the ordinary world and on an assembled four-engine Sable platform with rotated peripheral names, including neutral force directions and read-only ownership. Interactive flight under changing load remains a manual scenario; no additional VM or Propulsion ticks are introduced.

Version and compatibility checks

The shared addon versioning policy keeps the addon’s API line independent of the Compukters target line. Each standalone check validates the remapped production filename, loader version and bounded Compukters dependency through verifyAddonVersioning. The workspace SDK and platform bundle are rebuilt from the same checkout through included-build dependencies.