mirror of
https://github.com/MovingBlocks/Terasology
synced 2026-05-24 09:28:22 +00:00
Two bugs in deserialize for private fields: 1. findSetter(field) can return null — no null check (NPE risk) 2. setter.invoke(result) passed no value argument — the setter was called with zero args, silently failing to set the field Fixed to match the serialize side's pattern: null-check the setter, log an error if missing, and pass fieldValue.get() as the argument. CodeRabbit flagged this on PR #5299 (outside-diff-range, critical). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| DiscordRPC | ||
| TypeHandlerLibrary | ||
| build.gradle | ||
| README.MD | ||
| subprojects.settings.gradle.kts | ||
Subsystems
Subsystems provide and extend engine functionality that might not be needed all the time.
A subsystem can provide an API to be implemented by other subsystems (API subsystem). Such an API subsystem does not provide any functionality on its own.
Typical examples for subsystems are:
- platform integration (e.g., Discord)
- native libraries usage
- network activity
⚠️ Subsystems should not extend or provide gameplay features! Use Modules instead.
It is planned to allow combinations of modules with subsystems for new functionality in the future.
Comparation between Module and Subsystem functionality:
| Module | Subsystem | |
|---|---|---|
| Boot | at game start | at game launch |
| Sandbox | Yes | No |
| Installing | Yes, in-game download from server or repository | No, with facade or engine only |
| Dependencies | only another Modules | any, except Modules |
| Build Script | engine-driven | free-style |