Integrated Scripting Callback
Script your Integrated Dynamics networks with JavaScript and TypeScript.
Integrated Dynamics is powerful but visual: you build logic by dragging operators into the Logic Programmer and stacking Variable Cards. That is fine until you want something like "take everything in this chest that is stackable with a stack size of at least 16, then sort by count" — the cards pile up fast.
Integrated Scripting Callback adds a second way: write code.
Open a Scripting Terminal on your network, write a script, select a name in it, and insert an empty Variable Card. That card now carries your constant — or, if you selected a function, it becomes an Operator Card you can use as a filter or predicate. From there it behaves like any other card in the network: display values on a Display Panel, filter item lists, fill an Integrated Dynamics filter.
This is an unofficial 1.12.2 / Forge port of Integrated Scripting by rubensworks (CyclopsMC). Not affiliated with CyclopsMC — please do not report issues with this port upstream.
Features
- In-game script IDE — the Scripting Terminal edits every
.js/.tsfile on every exposed disk: syntax highlighting, auto-indent, bracket and quote completion, an autocomplete dropdown for members, undo/redo, auto-save. - JavaScript and TypeScript —
.tsscripts are compiled to JavaScript inside the game (Translanguage, shaded into the jar — no Node.js, notsc). Types,interface, generics, parameter properties andenumall work. No type checking is performed; types are for your IDE. - Every value type bridges both ways — integers, longs, doubles, booleans, strings, lists, NBT, items, blocks, fluids and more.
- Full operator access — call the built-in operators through
idContext.ops.*, plus object methods such asitem.stackable()orlist.length(). - Real files on disk — scripts live in
world/integratedscriptingcallback/scripting-disks/<id>/, so you can edit them with an external editor while the game is running; changes are picked up automatically. - Generated typings — a
.d.tsfile is written on every world start, giving your external IDE completion and checks foridContext.opsand object methods. - Log to files —
console.log()andconsole.error()go to<script>.stdout/<script>.stderr. - Sandboxed by default — file I/O, processes, threads and native access are disabled; a statement limit (16384 per evaluation) guards against infinite loops. All evaluation happens server-side.
- Network Refresher — an item that repairs stale networks and desynced Display Panels: right-click a panel or a cable to clear the crashed flag, re-validate the network and force a client resync.
- Addressable Memory — a block holding 16 addressable slots (
a–p), read and written from scripts withmemory.get("a")/memory.set("a", 42). - In-game documentation — a Scripting chapter and a Scripting Tutorial chapter are added to the On the Dynamics of Integration book, with 7 advancements.
Getting started
- Craft Mendesite in a Drying Basin: 1 andesite + 1000 mB menril resin (15 ticks in an electric drying basin, 300 in a regular one).
- Craft Scripting Disks, a Scripting Drive and a Scripting Terminal (recipes are in JEI/NEI and in the in-game book).
- Connect the drive to your network, right-click it and insert a disk — the disk now has a numeric disk ID. Place the terminal on a cable of the same network and right-click it.
- Create a file, type
const myVar = 123;, double-click the namemyVar, and put an empty Variable Card into the slot in the lower-right corner.
The card now equals 123. Put it in a Display Panel and you will see 123.
Requirements
| Component | Version |
|---|---|
| Minecraft | 1.12.2 |
| Forge | 14.23.5.2847 / 2859 |
| Java | 8 |
| Integrated Dynamics | 1.12.2 (developed and tested against 1.1.11) — required |
| CyclopsCore | 1.12.2-1.6.7 — required |
| CommonCapabilities | 1.12.2-2.x — required |
The GraalVM JavaScript runtime (21.3.0) is shaded into the release jar, so no companion runtime
mod is needed. A -slim.jar build is also published; it contains only this mod and additionally
requires integratedscriptingcallbacklibs.
Install on both client and server — the client runs the terminal UI, the server compiles and executes scripts. A client-only install does nothing useful.
Known limitations
- The editor highlights but does not check syntax; errors surface when a Variable Card is evaluated.
letstate is temporary and may be reset at any time.- NBT support covers compound tags only (scalars need
nbtScalarWrapper). - TypeScript is type-erased and
enum-downleveled only: no type checking, and valueimport, re-exports, decorators, runtimenamespaceand JSX are rejected. - No
require,fsor any other Node.js capability. - Anyone who can open a terminal can edit every script exposed on that network; there is no fine-grained permission control.
Credits and license
- Original Integrated Scripting: © rubensworks (CyclopsMC), MIT.
- 1.12.2 port and translation: the maintainers of this repository.
- Integrated Dynamics and CyclopsCore: rubensworks and the CyclopsMC team.
- GraalVM (
graal-sdk,js21.3.0): Universal Permissive License 1.0. - Translanguage 2.0.3: MIT.
- This repository's code and assets: MIT.

