Перейти к содержимому
Mineforgian

Lumen

A modern Minecraft scripting language that compiles scripts into native Java bytecode for near-plugin performance.

Загрузки
55
Подписчики
0
Обновлён
28 апреля 2026 г.
Лицензия
GPL-3.0-only

Опубликован 3 марта 2026 г.

Description Description


Text Form

Lumen — A modern scripting platform for Minecraft servers

Lumen is a scripting platform for Spigot and Paper. It's strict, statically checked, and compiles your .luma files directly to JVM bytecode. The script you write becomes the code your server runs. There is no interpreter, and no implicit type conversion changing your variables behind your back.

If you're coming from Skript, the general feel will be recognizable. The actual syntax and the way you write things is its own thing.

AI Native, designed for AI assistants from day one

Lumen ships with a first-class MCP server. Instead of pulling from outdated wikis or making up syntax, AI assistants go through the real Lumen parser, look up patterns with the same ranker the compiler uses, and read the docs that come with the platform. If something the model writes doesn't parse, it sees the exact error on the exact line and keeps trying until it does. Anything wrong gets caught before it ever reaches you.

Sonnet can write 2000+ line scripts in a single prompt with no human corrections. A nine-page shop GUI with three top-level categories, three subpages each, full navigation, and full purchase logic was generated on the first try in about twelve minutes. The MCP has produced 5000+ line scripts the same way.

A live debugger the AI can use

Once your script is running, the same MCP connects the AI to your live server. There's no pasting logs back and forth, no copying variable values out of the console, no walking through what went wrong. The AI runs your commands as you, fires Bukkit events the same way the game does, changes the world around you, takes full variable snapshots on any line without pausing the tick, and swaps out expressions or branches in memory while the server keeps running.

It can change your health, give you any item with any NBT, place or break blocks, switch your gamemode, teleport you, run commands using the player context from your last action, execute the compiled Java for any line of your script, read internal Bukkit fields through reflection, or trigger any custom event with whatever arguments it needs. Anything a regular plugin can do, to you, in real time.

Server-side support is available today. Client-side is coming. Once that ships, the AI runs code inside your Minecraft client too, not just the server. Test anti-cheats end to end. Simulate real player movement. Swing, click, sprint, crouch, place blocks at exact tick offsets. No other scripting ecosystem is even attempting this.

Native performance

Because Lumen compiles to JVM bytecode, your scripts run at the same speed as a hand-written Spigot plugin. There is no pattern re-parsing on every event, no dynamic type lookup on every variable read, and no interpreter loop between lines. The work happens once when you save the file, and after that it's just Java running on the JVM. On any non-trivial workload, the difference compared to dynamic scripting is significant.

Strict, but inferred

You don't write types. The compiler infers them from how you use the variable. Set something to a number once and it stays a number. Try to assign a string to the same variable later and the script will not load. That one rule eliminates an entire class of bugs that interpreters only catch when a real player triggers them. Every assignment, comparison, and pattern match is checked before the script touches your server.

Nullable as part of the type system

A variable is either nullable or it is not. There is no middle state, and nothing is implicit. Declare it as nullable player and the compiler tracks that wherever the value flows. Pass a possibly-null value to something that does not accept null, and the editor warns you on the line you wrote. Use if x is set and the type narrows to non-null inside the branch. No more silent failures on offline players, missing slots, or empty variables.

Diagnostics that tell you the fix

Good error messages are part of the design, not an afterthought. Unknown patterns, broken globals, broken data classes, type mismatches, and most other mistakes come back with the exact token underlined, a label describing what the compiler expected, and a suggestion for the closest valid pattern. The format is heavily inspired by Rust. The error tells you what to fix, not just that something is broken.

Hot reload, including open inventories

Save the file. There is no /reload command, no restart, and nothing to run. Lumen picks up the change on its own while players stay connected and keep playing. Commands, events, scheduled tasks, and inventories that players currently have open all update live. Title changes, slot layout changes, item changes, lore, and click handlers all apply in place without the inventory closing or flickering. Almost no other Minecraft scripting plugin offers this.

Editor-grade tooling

The VSCode extension runs the actual Lumen engine in the background. Every error, completion, hover, and go-to-definition comes from the same compiler that loads your scripts on the server. The diagnostics are not approximations, they are the real engine reporting back. Inlay hints show the type of every variable next to its name, so you can read through a script and understand it without hovering or scrolling.

500+ entries, fully extendable

Statements, expressions, conditions, blocks. Lumen ships with over five hundred first-party entries, and more are added every release. Need something that doesn't exist yet? The Java addon API is clean. You can write your own statements, expressions, events, and types, and use them alongside the built-in ones.

Get started

Download the jar from your preferred host (Modrinth, SpigotMC, or BuiltByBit). Put it in your plugins/ folder. Start the server. There are no companion plugins, no external libraries, and no extra setup. Place .luma files in the scripts folder and they reload as you save them. That is the whole installation.

Lumen is currently in beta. Some features are missing and bugs do exist, but the platform improves quickly and updates ship often.

License

This project is licensed under the GNU General Public License v3.0.

Ченджлог

1.2.0-BETAРелиз26.1, 26.1.1, 26.1.2 · 28 апреля 2026 г.

Changelog

This release includes major internal rewrites and multiple breaking changes. If you already have existing scripts, they may require updates before working correctly on this version.

Breaking Changes

Type System Overhaul

The type system has been fully redesigned.

  • Exact types are now known throughout parsing
  • Stronger guarantees and clearer validation
  • Legacy type behavior has been removed

Global Variables Rewritten

Global variables have been completely revamped.

  • Improved consistency
  • Better type-awareness
  • Cleaner internal behavior
  • Trying to use the old global syntax will immediately throw

Explicit Nullability

Null handling is now explicit and type-aware.

  • Variables cannot be assigned none unless declared nullable from the start
  • Variables that are meant to be nullable must provide the exact type

Coercion Removed

Automatic coercion has been removed.

Previously, a variable declared as one type could sometimes receive another type. That behavior is gone.

Example:

  • Declared as string → cannot assign int
  • Declared as int → cannot assign unrelated types

This prevents many runtime surprises.

Lists and Maps Updated

Lists and maps have been partially rewritten.

  • Typed collections are now emphasized
  • Legacy untyped collections will immediately throw

Fixes & Improvements

Much Better Error Messages

Almost all diagnostics have been significantly improved.

  • Clearer explanations
  • Better highlights
  • More actionable help messages

Smarter Unknown Pattern Handling

Unknown statements, conditions, expressions, loop sources, and blocks are now handled far better.

Instead of throwing a generic "Unknown X" even when the issue is only a typo, the matcher can now detect:

  • Extra tokens
  • Typos
  • Missing values
  • Type binding failures
  • Closest-match suggestions

Fewer Runtime Surprises

With coercion removed and stronger typing, many issues are now caught earlier instead of failing later at runtime.

Data Classes Expanded

Data classes now support all types instead of being limited to only a small subset.

General Stability Improvements

Many additional fixes, cleanups, and internal improvements were made across the project.

Pattern Changes

Many patterns now use required groups instead of duplicated matching logic.

Performance

Faster Parsing

Parsing performance is now significantly faster (2.5x+ in many cases).

This was achieved through:

  • Parallel parsing of independent blocks
  • Faster pattern indexing
  • Cheaper pattern matching

Experimental Compiler: Vanta

A new experimental compiler backend, Vanta, is available.

Benefits:

  • Much faster startup compilation
  • Up to 35x faster compile times in many scenarios (average about 10x faster)

Vanta is currently in beta.

API Changes

Statement Form Handlers Removed

Statement form handlers have been removed.

Ref Types Removed

Legacy Ref Types and related classes are gone, replaced by unified LumenType.

Single parameter handlers

Instead of inconsistent signatures in statements, expressions, and conditions. All of them now receive a unified HandlerContext.

Final Note

This release is a major step forward in correctness, tooling quality, performance, and long-term architecture. However, keep in mind, this version is more beta than other releases due to the many breaking changes. There will be more edge cases.

1.0.6-BETAРелиз1.21.9, 1.21.10, 1.21.11 · 14 марта 2026 г.

This release fixes minor bugs and improves the overall API.

1.0.5-BETAРелиз1.20.4, 1.20.5, 1.20.6 · 13 марта 2026 г.

Breaking Changes

Support for implicit arguments has been removed.

Previously, it was possible to omit certain arguments, for example:

message "Test"

You must now explicitly provide the variable:

message player "Test"

This change improves determinism in pattern matching and simplifies tooling.

Internal Changes

  • Refactored the type system, including multiple small bug fixes and improvements to inline expression handling.
  • The defaults module has been restructured and split into multiple files.
  • documentation.json has been updated on lumendocs.dev.
1.0.2-BETAРелиз1.21.9, 1.21.10, 1.21.11 · 3 марта 2026 г.

Initial release, this may contain bugs.

Комментарии

Загружаем…