Skip to content

FAQ

Status: Implemented. The answers describe API 1.4 as it ships.

Can I use CLight today?

Yes. CLight ships with Celestial: mods in Lua, C and C++ (C and C++ compile to WebAssembly), all sandboxed, with the SDK in clight-sdk/ next to the game. Every page says at the top what is Implemented, Partly implemented or Planned. Data packs, resource packs, CEM models and shader packs work too.

Can Celestial run Fabric, Forge, NeoForge or Quilt mods, or Bukkit/Spigot/Paper plugins?

No. Celestial does not load, convert or translate Java mods or plugins, and no such tool or compatibility runtime is planned. Those mods patch or extend the original game’s Java bytecode; Celestial is a native C++ engine with no JVM. Authors can port their own mod by hand (Migration); its data and assets work unchanged.

Which language should I use?

See Choosing a language and runtime. In short: Lua for plugins, gameplay scripts and client tweaks; C++ for heavy logic; C if you prefer it or want the smallest module. The website has a course for each.

Is a mod written in Lua slower?

For event handlers and gameplay logic the difference is rarely noticeable. Heavy maths belongs in a C or C++ mod.

Does CLight make the game slower when I install mods?

Each mod costs what its handlers cost. Unused events and mixin targets cost one branch. With no mods, Celestial is exactly unmodded Celestial.

Can vanilla players join my modded server?

Yes. Mod blocks and items are vanilla-backed, so vanilla clients see the base block or item, and data-pack content (enchantments, damage types, paintings) reaches them as-is. See Registry sync and vanilla clients.

Can my client mod be used on any server?

Yes. Mark it "sync": "client_only" and use only client APIs. It works on vanilla, Paper and older servers through the compat layer. Follow each server’s rules about client modifications.

How do I patch a vanilla method like with a mixin?

Use a CLight mixin on the matching target (Mixins): head, return, named points, values and calls, wrap or overwrite. The game’s targets arrive in batches; Mixin targets lists them, and cl.has("mixin:<name>") checks at run time. For simple cases an event is easier. If no target exists, request one.

Why a C ABI and not C++ classes?

C++ class layouts and name mangling differ between compilers and versions, so a C++ interface would break mods on every update. A C ABI is stable and every language can call it. C++ users still get a modern header-only wrapper.

Do I need to ship builds for every platform?

No. Lua, WebAssembly and data mods are one file for every platform.

Where do I publish my mod?

On the Celestial website: create a project in the dashboard, upload .clmod versions, submit it for review (Distribution). Players install it with the Celestial launcher, per instance.

Are mods allowed to change how the game looks?

Yes, that is what mods are for. For optional client tweaks follow Celestial’s own rule: ship visual changes off by default, so installing a client mod alone never changes the image.