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
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.

