Summary
Terasology v5.4.0 improves engine stability, multiplayer reliability, and module handling while updating the build toolchain. It adds configurable chunk processing and expands validation and test coverage. Download the Omega package below; MD5 and SHA-256 checksums are included for verification.
Changes
- #5404 Chunk reactor survives a stray interrupt; runUntil(future) takes a timeout; merge queue builds skip an already-tested tree (@agent-refr)
- #5406 Fix two multiplayer crash/error bugs (BlockManager recursion, disconnect thread violation) (@prog66)
- #5403 build: failing tests fail the task locally, and stay findings on Jenkins (@agent-refr)
- #5263 Improvements IO-API-for-Modules doc (fixes #3654) (@PauloCactus)
- #5326 build(gradle): add build-time validation for prefabs and JSON assets #4986 (@mmruii)
- #5356 fix(module): guard getModuleProviding where null throws or fails quietly (@agent-refr)
- #5352 fix(module): attribute classes to the module that actually provides them (@agent-refr)
- #5350 fix: destroy replaced bone entities and keep logging alive on reconfigure failure (@agent-refr)
- #5340 MTE follow-ups: review leftovers, awaitClients, and safety-timeout diagnostics (@agent-refr)
- #5325 test: add MTE network and multiplayer integration tests (@agent-refr)
- #5323 review: fix test context chaining and Environment CoreRegistry (@agent-refr)
- #5330 load a saved game failed to initialise WorldGenerator (@soloturn)
- #5322 review: safe JoinServer handoff, ScreenGrabber visibility, deprecate CoreRegistry constructor (@agent-refr)
- #5320 review: remove null CoreRegistry, guard null binds/providers, fix Mermaid (@agent-refr)
- #5324 refactor: replace blacklist/whitelist terminology with denylist/allowlist (@decker757)
- #5313 DI PR post-review follow-up 1 (@Cervator)
- #5318 review: fix deserialize bugs, duplicate handlers, type safety, and Javadoc (@agent-refr)
- #5315 DI PR post-review follow-up 2 - 4 code quality tweaks (@Cervator)
- #5317 review: safeguard implicit type casts and fail-fast on null singletons (@agent-refr)
- #5314 fix: skip project-autoadd workflow for fork PRs (@Cervator)
- #5299 feat!: gestalt-di migration (@BenjaminAmos)
- #5285 centralize version declaration of jna, junit, protobuf (@soloturn)
- #5282 permit install into windows program files (@soloturn)
- #5279 update to gradle-8.10.2 (@soloturn)
- #5268 gradle-8.9 permit java-22 (@soloturn)
- #5262 Fixed typo in Home.md (@kangxi333)
- #5259 compilejava should create versioninfo file (@soloturn)
- #5252 fix(Movement): water super jump bug (@engiValk)
- #5209 qa: address PMD GuardLogStatement warnings (@soloturn)
- #5243 Windowedfullscreen fix (@Khaled-Dridi)
- #5230 update gradle to support java-22 (@soloturn)
- #5231 introduce JUnit tag "flaky", to exclude tests from running. (@soloturn)
- #5217 test: add private serialisation cases to type serialiser tests (@BenjaminAmos)
- #5211 Part fix for M1 support (@priya4991)
- #5207 slf4j 1.7.x --> 2.0.11 (@soloturn)
- #5193 remove logback RegexFilterAction, not supported any more. (@soloturn)
- #5204 prepare subprojects.settings.gradle for kotlin (@soloturn)
- #5192 Terasology engine (@soloturn)
- #5195 prepare switch over to kotlin, "new" java date formatting (@soloturn)
- #5181 qa: parametrize logger usages (@jdrueckert)
- #5189 gradle-8.5, full java-21 support. (@soloturn)
- #5178 Qa/engine tests (@soloturn)
- #5180 revert: "qa: parametrize logger usages" (@jdrueckert)
- #5179 qa: consume TeraConfig v2.2.0 (@jdrueckert)
- #5154 qa: fix typehandlerlibrary spotbugs findings (@soloturn)
- #5162 Compile against Java 17 (@BenjaminAmos)
- #5158 Fix crash when system locale is complex (@rzats)
- #5160 perf(rendering): use MONO rendering stage (@skaldarnar)
- #5156 Update Ukrainian locale with current strings (@rzats)
- #5153 Gradle deprecations (@soloturn)
- #5147 convert settings.gradle to kotlin (@soloturn)
- #5146 fix pmd warnings, codemetrics-2.1.0, gradle-8.4 (@soloturn)
- #5138 gradle 8.3, supporting java-21 via its kotlin dependency (@soloturn)
- #5142 New Artifactory URL (@Cervator)
- #5107 Java 18 - do not set SecurityManager if unsupported (@BenjaminAmos)
- #5095 doc: update README (@sfavello)
- #5089 Update menu_en.lang (@NikitasMaragkos)
- #5046 test(MTE): IntegrationEnvironment is the only annotation you need (maybe) (@keturn)
- #5073 feat: add check for facet provider requirements (@MrGizmo123)
- #5045 test(StorageManager): Convert TTE tests to MTE (@keturn)
🚀 Features
- #5390 feat(templates): convert crash-bug-report.md to an issue form (@soloturn)
- #5077 feat: send BeforeDisconnectEvent before disconnecting clients (@jdrueckert)
- #5271 Revert "Revert "feat: upgrade to Gestalt 8"" (@jdrueckert)
- #5270 Revert "feat: upgrade to Gestalt 8" (@jdrueckert)
- #5267 feat: upgrade to Gestalt 8 (@BenjaminAmos)
- #5248 ui: reduce button height to text field height (@jdrueckert)
- #5237 feat: make number of chunk processing threads configurable (@BenjaminAmos)
- #5238 feat: throttle chunk processing based on deadline (@BenjaminAmos)
- #5233 feat: make WorldConfigurator subscribable (@jdrueckert)
- #5220 doc: guidance on PMD guard log statement warning (@jdrueckert)
- #5208 feat: prevent serialisation of private component fields (@BenjaminAmos)
- #5184 doc: Contributor Quick Start JDK 17 (@jdrueckert)
- #5173 qa: parametrize logger usages (@jdrueckert)
- #5168 test: split and improve ObjectFieldMapTypeHandlerFactoryTests (@jdrueckert)
- #5164 doc: add link to docsified engine wiki (@jdrueckert)
- #5165 chore: init metrics only if monitoring enabled (@jdrueckert)
- #5128 feat: fix ExecutorCompletionService workaround in ChunkProcessingPipeline (@BenjaminAmos)
- #5106 refactor(netork)!: rewrite ping logic (@skaldarnar)
- #5119 ci: configure jenkins to abort builds if new builds are triggered (@jdrueckert)
- #5079 doc: document restrictions for BindButtonEvent (@skaldarnar)
- #5071 ci: add workflow autoclosing issues with unresponsive authors (@jdrueckert)
- #5070 ci: add workflow to auto-add issues and PRs to projects (@jdrueckert)
🐛 Bug Fixes
- #5407 fix(persistence): keep UniverseConfig in sync so saving after a load doesn't drop the world (@soloturn)
- #5408 fix(network): actually add ClientConnectionHandler.channelInactive (fixup #5406) (@soloturn)
- #5365 fix(persistence): resolve EntityRef fields lazily to survive forward references (@soloturn)
- #5385 fix(core): wait for in-flight save before shutting down systems (@soloturn)
- #5379 fix(persistence): stop ProtobufPersistedData.isArray() lying for maps (@soloturn)
- #5377 fix(headless): actually check readiness in pregenerateChunks (@soloturn)
- #5376 fix(input): stop crash when pressing Ctrl/Tab with no default bind (@soloturn)
- #5389 fix(TypeHandlerLibrary): move StringRepresentationTypeHandlerTest's inner class to the end (@soloturn)
- #5360 fix: guard against null in SimpleUri(String) and StringRepresentationTypeHandler (@soloturn)
- #5335 fix: stop sending movement input when the window is unfocused (@soloturn)
- #5348 fix(world): resolve chunk-processing-pipeline deadlock on unrequested neighbours (#5150) (@soloturn)
- #5353 fix(module): stop scanning modules APIScanner can never resolve (@soloturn)
- #5349 fix(world): skip prefab components with no registered metadata instead of NPEing (@soloturn)
- #5347 fix: upgrade crash reporter to 5.1.0 to resolve macOS issues (@BenjaminAmos)
- #5343 fix: reset Logback once the real log folder is known + upgrade to 1.6.0 (@soloturn)
- #5336 fix: three bugs found by a broad code sweep (claude-fable-5) (@soloturn)
- #5334 fix: character prediction freeze and toggle-inventory NPE (@soloturn)
- #5338 fix: move remaining CrashReporter.report() calls off-thread (@soloturn)
- #5337 report bug button makes GUI unsresponsive (@soloturn)
- #5333 fix: register ComponentClassTypeHandlerFactory in module-environment TypeHandlerLibrary (@soloturn)
- #5288 fix: switch typo in ConditionAction (@jdrueckert)
- #5260 fix(rendering): avoid glBindFramebufferEXT to fix MacOS crash (@skaldarnar)
- #5250 fix: fix server crash when executing console commands (@BenjaminAmos)
- #5249 doc: fix broken forum links (@jdrueckert)
- #5245 fix(facades): fix command line args not working (@Imitater967)
- #5172 doc: fix broken links (@jdrueckert)
- #5163 fix: move readme images back into docs folder (@jdrueckert)
- #5145 fix: make entity dump filename windows compatible (@jdrueckert)
- #5128 feat: fix ExecutorCompletionService workaround in ChunkProcessingPipeline (@BenjaminAmos)
- #5083 fix: remove Rendering Module Settings screen (@skaldarnar)
- #5080 ci: fix project-autoadd github action (@jdrueckert)
🧰 Maintenance
- #5274 qa: address pmd findings (@jdrueckert)
- #5278 test: mark flaky tests with flaky tag (@jdrueckert)
- #5273 ci: enable PMD checks (@jdrueckert)
- #5270 Revert "feat: upgrade to Gestalt 8" (@jdrueckert)
- #5261 chore: add Checkstyle and Pmd gradle tasks to verification group (@jdrueckert)
- #5257 build(idea): base run configs on Gradle (@skaldarnar)
- #5241 chore: screen merge follow-ups (@jdrueckert)
- #5226 refactor: merge world config in setup screen (@jdrueckert)
- #5225 chore: update JNBullet to 1.0.4 (@skaldarnar)
- #5222 doc: link TypeHandlerLibrary readme (@jdrueckert)
- #5221 chore: remove year from idea copyright template (@jdrueckert)
- #5210 chore: consume gestalt v7.2.0 (@jdrueckert)
- #5188 refactor: use logger instead of
System.out.println(@soloturn) - #5191 refactor: component field visibility public (@jdrueckert)
- #5173 qa: parametrize logger usages (@jdrueckert)
- #5172 doc: fix broken links (@jdrueckert)
- #5175 refactor: remove unused local var for artifactview (@jdrueckert)
- #5122 refactor: merge universe setup into world pregen screen (@jdrueckert)
- #5168 test: split and improve ObjectFieldMapTypeHandlerFactoryTests (@jdrueckert)
- #5149 refactor: address IntelliJ QAPlug plugin findings (@jdrueckert)
- #5170 logger qa, use parameterized logger. (@soloturn)
- #5165 chore: init metrics only if monitoring enabled (@jdrueckert)
- #5145 fix: make entity dump filename windows compatible (@jdrueckert)
- #5131 chore: consume CrashReporter v5.0.0 (@jdrueckert)
- #5118 refactor: merge spawn preview screen into world pre generation screen (@jdrueckert)
- #5116 refactor!: remove multi-world support (@skaldarnar)
- #5117 test(TypeHandler): More tests for empty collections (@skaldarnar)
- #5106 refactor(netork)!: rewrite ping logic (@skaldarnar)
- #5115 refactor!: remove TeraEd facade (@skaldarnar)
- #5112 refactor: remove vr support (@jdrueckert)
- #5079 doc: document restrictions for BindButtonEvent (@skaldarnar)
- #5080 ci: fix project-autoadd github action (@jdrueckert)
- #4800 chore(persistence): replace transaction manager with Reactor (@pollend)
📚 Documentation
- #5249 doc: fix broken forum links (@jdrueckert)
- #5222 doc: link TypeHandlerLibrary readme (@jdrueckert)
- #5220 doc: guidance on PMD guard log statement warning (@jdrueckert)
- #5218 doc: remove gooey tour link (@jdrueckert)
- #5199 remove double javadoc, static is uppercase (@soloturn)
- #5184 doc: Contributor Quick Start JDK 17 (@jdrueckert)
- #5172 doc: fix broken links (@jdrueckert)
- #5164 doc: add link to docsified engine wiki (@jdrueckert)
- #5163 fix: move readme images back into docs folder (@jdrueckert)
- #5155 doc: move wiki content to docsify page (@skaldarnar)
- #5123 doc(facade/PC): add README (@skaldarnar)
- #5079 doc: document restrictions for BindButtonEvent (@skaldarnar)
⚙️ Logistics
- #5411 build: bump CrashReporter to 5.2.0 (@soloturn)
- #5405 build: bump gestalt and jnbullet to their released versions (@soloturn)
- #5362 build: clear Gradle 10 deprecations, bump wrapper to 9.7.1 (@soloturn)
- #5359 build: bump gestalt to 8.0.2-SNAPSHOT, JNBullet to 1.0.5-SNAPSHOT; add Windows/ARM64 LWJGL natives (@soloturn)
- #5329 make it build with newest gradle and prepare for new java (@soloturn)
- #5293 Prerequisites for Artifactory & Jenkins migration/upgrade (@Cervator)
- #5283 gradle versions catalog, not yet for build-logic (@soloturn)
- #5273 ci: enable PMD checks (@jdrueckert)
- #5261 chore: add Checkstyle and Pmd gradle tasks to verification group (@jdrueckert)
- #5257 build(idea): base run configs on Gradle (@skaldarnar)
- #5196 convert engine build to kotlin (@soloturn)
- #5194 sonar upgrade to 5.0.0 (@soloturn)
- #5210 chore: consume gestalt v7.2.0 (@jdrueckert)
- #5202 convert engine-tests build.gradle to kotlin (@soloturn)
- #5197 convert main build.gradle to kotlin (@soloturn)
- #5203 migrate subprojects.build.grade to kotlin (@soloturn)
- #5141 build: update groovy wrapper (@jdrueckert)
- #5137 build: Add Gradle task to assemble module build harness (@skaldarnar)
- #5109 build(gradle): upgrade gradle 6.4.2 >>> 8.2.1 (@DarkWeird)
- #5131 chore: consume CrashReporter v5.0.0 (@jdrueckert)
- #5119 ci: configure jenkins to abort builds if new builds are triggered (@jdrueckert)
- #5097 ci: update autoclose file version and fix github username (@sfavello)
- #5091 build(distribution): re-enable SecurityManager in distributions running under Java 18 and above (@BenjaminAmos)
- #5080 ci: fix project-autoadd github action (@jdrueckert)
- #5071 ci: add workflow autoclosing issues with unresponsive authors (@jdrueckert)
- #5070 ci: add workflow to auto-add issues and PRs to projects (@jdrueckert)