promotional bannermobile promotional banner

Stored Program Controls [SPC]

Brings industrial logic controls into Minecraft based on Siemens LOGO! Systems.

File Details

Stored Program Controls 0.3.0 (1.21.1)

  • B
  • Apr 19, 2026
  • 1.63 MB
  • 7
  • 1.21.1
  • NeoForge

File Name

storedprogramcontrols-0.3.0.jar

Supported Versions

  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:stored-program-controls-1506323:7949556"
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

Stored Program Controls - Changelog
=====================================

Version 0.3.0 — Python, User Functions & Editor Power-Tools
------------------------------------------------------------

### Embedded Python Block
- New Embedded Python function block: write real Python (a tree-walking subset)
  inline inside a program. Supports `if/elif/else`, `while`, `for ... in range()`,
  `def`, `global`, lists, basic math, and string ops.
- Built-in IDE-style code editor with syntax highlighting (keywords, builtins,
  numbers, strings, comments), line numbers, indent-aware Tab/Shift+Tab, smart
  newline indentation, bracket matching, and mouse-driven selection.
- `input("prompt")` pauses the program and shows a chat prompt to the player.
  Reply via the new `/spc-say <message>` command (or just type in chat while a
  prompt is active) to feed the value back into the script.
- `print(...)` writes to the in-game program log panel. Errors include the
  Python line number and a one-line excerpt of the offending source.
- `global` declarations bind to matching Variable nodes in the same program, so
  Python can read and write the program's persistent Bool/Int/Float/String
  state directly by name.
- `set_signal_type("digital" | "integer" | "decimal" | "text")` switches the
  block's output port type at runtime.

### User-Defined Functions (UDF)
- New Function Input and Function Output blocks let you carve out reusable
  sub-programs. Save a `.mclsc` program into `LOGO Programs/Functions/` and it
  appears in the palette as its own callable function block.
- The new UDF call entries show in their own palette category. Inputs and outputs
  are derived automatically from the Function Input / Function Output blocks
  inside the saved program.
- Functions can be edited like any normal program — saving updates every program
  that uses them on next compile.

### New Memory / Variable Blocks
- Bool Variable, Int Variable, Float Variable, and String Variable blocks store
  a named value across ticks (and across world saves). Each variable also
  exposes itself as a Python global with the same name.
- Variable blocks have a configurable default value; the saved value survives
  world reload, and uninitialized variables now hold their default from tick 1
  (no more "undefined" reads on program start).

### Undo / Redo
- The programming editor now keeps a 50-step undo history. Ctrl+Z undoes,
  Ctrl+Y or Ctrl+Shift+Z redoes. Covers placement, deletion, wiring,
  parameter edits, and bulk operations.

### Copy / Paste / Clipboard
- Standard editor shortcuts:
    Ctrl+A      select all nodes
    Ctrl+C      copy selection
    Ctrl+X      cut selection
    Ctrl+V      paste at cursor
    Ctrl+D      duplicate selection in place
    Delete      remove selection
    Arrow keys  nudge selected nodes one grid cell
- The clipboard persists across closing and reopening the editor and across
  switching between programs, so you can copy nodes from one program straight
  into another.

### Block Icons
- Refreshed every built-in function block icon with Siemens LOGO!-inspired
  vector pixel art. Icons scale cleanly across all editor zoom levels and are
  easier to recognize at a glance in the palette.

### Bug Fixes
- Fixed "done is not defined" (and related NameErrors) in Embedded Python blocks
  whose `global` declarations matched a Variable node in the same program. The
  variable's default value is now visible to Python on the very first tick.
- Variable nodes with a disconnected input no longer overwrite a same-tick write
  coming from a Python `global` assignment.

### For Addon Developers
- API bumped to version 1.1.6: addon function blocks can ship custom PNG icons
  via SpcNodeSchema.iconTexture, and addons can register custom Python builtins
  for the Embedded Python block (com.hypernova.spc.api.python). See
  API_CHANGELOG.txt for the full API change list.