从源码运行需 JDK 17,使用更新版本可能出问题;工作区是多仓库结构,modules/ 下每个子目录都是独立 Git 仓库;通过启动器下载需联网,之后可离线游玩

Terasology
MovingBlocksApache-2.0活跃维护一款用 Java 开发的开源体素沙盒游戏,支持模块化扩展,适合想研究 3D 游戏引擎或参与开源游戏开发的玩家。
Terasology - open source voxel world
从 https://terasology.org/downloads/ 下载启动器安装;或直接下载 release 包,需 JDK 17最低要求为 64 位 Windows、macOS 或 Linux,双核 CPU,4 GB 内存,1 GB 硬盘;GPU 需支持 OpenGL 3.3,例如 Intel HD Graphics (Gen 7)、GeForce 8xxx 或更高、Radeon HD 2000 或更高;若同时有核显和独显,需确保使用独显运行。
开源体素世界游戏平台,源自 Minecraft 风格技术演示,可承载多种玩法
一款用 Java 开发的开源体素沙盒游戏,支持模块化扩展,适合想研究 3D 游戏引擎或参与开源游戏开发的玩家。
核心能力
- 以体素世界为基础搭建可扩展的游戏平台
- 代码采用 Apache 2.0 许可,美术资源采用 CC BY 4.0 许可
- 模块化多仓库工作区,各模块独立 Git 仓库
- 提供启动器,可一键下载并安装游戏
- 社区活跃,提供教程模块与新手入门 issue
容易踩的坑
- v5.4.0Terasology v5.4.0最新正式版2026-10-31 · 2026-10-31 19:54 UTC
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
- v5.4.0-rc.1Preview Engine 5.4.0 / Alpha 24 (Release Candidate 1)pre-release2024-06-16 · 2024-06-16 20:57 UTC
查看更新说明
:warning: Important Note :warning:
This pre-release is not expected to work with Terasology Launcher <= 4.8.0 due to the included upgrade to Java 17
Special thanks to everyone that contributed to this pre-release: @BenjaminAmos @Cervator @DarkWeird @engiValk @F14V10 @jdrueckert @Imitater967 @kaen @keturn @Khaled-Dridi @manumafe98 @MrGizmo123 @NikitasMaragkos @pollend @priya4991 @rzats @Sabo2k @sfavello @skaldarnar @soloturn @spookynutz @subjectnull
Changelog
:rocket: Features
- #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)
- #5208 feat: prevent serialisation of private component fields (@BenjaminAmos)
- #5168 test: split and improve ObjectFieldMapTypeHandlerFactoryTests (@jdrueckert)
- #5160 perf(rendering): use MONO rendering stage (@skaldarnar)
- #5156 Update Ukrainian locale with current strings (@rzats)
- #5128 feat: fix ExecutorCompletionService workaround in ChunkProcessingPipeline (@BenjaminAmos)
- #5107 Java 18 - do not set SecurityManager if unsupported (@BenjaminAmos)
- #5089 Update menu_en.lang (@NikitasMaragkos)
- #5073 feat: add check for facet provider requirements (@MrGizmo123)
:bug: Bug Fixes
- #5252 fix(Movement): water super jump bug (@engiValk)
- #5250 fix: fix server crash when executing console commands (@BenjaminAmos)
- #5245 fix(facades): fix command line args not working (@Imitater967)
- #5243 Windowedfullscreen fix (@Khaled-Dridi)
- #5211 Part fix for M1 support (@priya4991)
- #5163 fix: move readme images back into docs folder (@jdrueckert)
- #5158 Fix crash when system locale is complex (@rzats)
- #5145 fix: make entity dump filename windows compatible (@jdrueckert)
- #5083 fix: remove Rendering Module Settings screen (@skaldarnar)
:heavy_check_mark: Quality
- #5217 test: add private serialisation cases to type serialiser tests (@BenjaminAmos)
- #5209 qa: address PMD GuardLogStatement warnings (@soloturn)
- #5192 Terasology engine (@soloturn)
- #5181 qa: parametrize logger usages (@jdrueckert)
- #5180 revert: "qa: parametrize logger usages" (@jdrueckert)
- #5179 qa: consume TeraConfig v2.2.0 (@jdrueckert)
- #5178 Qa/engine tests (@soloturn)
- #5173 qa: parametrize logger usages (@jdrueckert)
- #5170 logger qa, use parameterized logger. (@soloturn)
- #5154 qa: fix typehandlerlibrary spotbugs findings (@soloturn)
- #5146 fix pmd warnings, codemetrics-2.1.0, gradle-8.4 (@soloturn)
- #5117 test(TypeHandler): More tests for empty collections (@skaldarnar)
- #5046 test(MTE): IntegrationEnvironment is the only annotation you need (maybe) (@keturn)
- #5045 test(StorageManager): Convert TTE tests to MTE (@keturn)
:toolbox: Maintenance
- #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)
- #5221 chore: remove year from idea copyright template (@jdrueckert)
- #5210 chore: consume gestalt v7.2.0 (@jdrueckert)
- #5193 remove logback RegexFilterAction, not supported any more. (@soloturn)
- #5191 refactor: component field visibility public (@jdrueckert)
- #5188 refactor: use logger instead of
System.out.println(@soloturn) - #5175 refactor: remove unused local var for artifactview (@jdrueckert)
- #5165 chore: init metrics only if monitoring enabled (@jdrueckert)
- #5149 refactor: address IntelliJ QAPlug plugin findings (@jdrueckert)
- #5131 chore: consume CrashReporter v5.0.0 (@jdrueckert)
- #5122 refactor: merge universe setup into world pregen screen (@jdrueckert)
- #5118 refactor: merge spawn preview screen into world pre generation screen (@jdrueckert)
- #5116 refactor!: remove multi-world support (@skaldarnar)
- #5115 refactor!: remove TeraEd facade (@skaldarn
- v5.3.0Preview Engine 5.3.0 / Alpha 232022-09-03 · 2022-09-03 10:51 UTC
查看更新说明
Special thanks to everyone that contributed to this release: @Cervator, @DarkWeird, @dragonempire96, @Jacob-Rueckert, @jdrueckert, @keturn, @kvaithin, @mohamedation, @MrGizmo123, @pollend, @shadowasphodel2919, @sid2002CN, @skaldarnar, @ujjman.
Changelog
🚀 Features
- #5061 feat: add type handlers for SimpleUri and BlockUri (@jdrueckert)
- #5028 feat(InjectionHelper): inject() returns the object for chaining (@keturn)
- #5025 feat(#4948): restrict default memory settings (@jdrueckert)
- #5000 feat: add ball mesh (@jdrueckert)
- #4996 feat: add convenience method PhyiscEngine#recomputeCharacterCollider(entity) (@skaldarnar)
- #4947 feat: micrometer metrics over JMX (@keturn)
- #4898 feat(gestaltv7-eventsystem): Migration Event and @ReceiveEvent to gestalt's (@DarkWeird)
- #4621 feat: Add BlockAreac#distanceSquared (@shadowasphodel2919)
🐛 Bug Fixes
- #5066 fix(rendering): Don't try to set window icon on macOS (@skaldarnar)
- #5062 fix: do not crash on unexpected map format in GenericMapTypeHandler (@jdrueckert)
- #5054 fix: do not run behavior simulation while paused (@keturn)
- #5053 fix(facade): fix broken --load-last-game (@keturn)
- #5048 fix(TypeHandlerLibrary): fix error-during-error-logging in GenericMap (@keturn)
- #5043 fixup! test(MTE)! set default NetworkMode to NONE (#5041) (@skaldarnar)
- #5036 fix(PathManager): allow paths to be symlinks (@keturn)
- #5035 fix(templates): replace perlin with simplex as the default override.cfg (@keturn)
- #5017 fix(Context)!: correct signature of Context.get (@keturn)
- #5014 fix(ChunkProcessingPipeline): base thread pool size on available processors (@keturn)
- #5013 fix(test): set jacoco excludes for engine-test's unitTest and integrationTest tasks (@keturn)
- #5008 fix(SelectionScreen): be more robust in the face of save files with incomplete manifests (@keturn)
- #5006 fix: path quirk on an M1 Mac using Azul JDK 11 (@Cervator)
- #4980 fix: fix game screen goes black bug (@sid2002CN)
- #4973 bugfix: resolve BlockSelectionRenderer (@pollend)
🧰 Maintenance
- #5067 chore(world): improve logging for BlockManager (@skaldarnar)
- #5064 chore: simplify implementation in Assets to one-liners (@skaldarnar)
- #5063 chore(subsystems/discord): catch runtime exception and log only message (@skaldarnar)
- #5052 chore(EntityPool): workaround "unchecked generics array creation" for getEntitiesWith (@keturn)
- #5033 chore: CoreRegistry removal from engine.network (@keturn)
- #5026 chore(#4908): match IntelliJ and Checkstyle formatting rules (@jdrueckert)
- #5016 chore: remove unused ByteCodeReflectFactory (@keturn)
- #5009 chore(StorageManager): typos and minor code cleanups (@keturn)
- #5002 chore: Update lwjgl version to 3.3.1 (@DarkWeird)
- #4992 chore: remove no longer existing CharacterMovement fields from prefabs (@jdrueckert)
- #4989 refactor(Chunk): provide default implementations of methods where possible (@keturn)
- #4984 chore: add security policy (@jdrueckert)
- #4972 refactor: split out chunk work as a seperate helper class (@pollend)
- #4970 chore: remove TessellatorHelper (@pollend)
- #4965 chore: remove deprecated method in Block (@pollend)
- #4964 chore: remove usage of Tesselator for BlockSelectionRenderer (@pollend)
- #4888 chore: remove deprecated Chunk#getPosition(Vector3i) (@pollend)
- #4786 chore(rendering): migrate chunk mesh generation Flux (@pollend)
- #4768 chore: move SideBitFlags into Side (@pollend)
🧪 Tests
- #5044 test(MTE): allow a test to add its own EngineSubsystem (@keturn)
- #5041 test(MTE)! set default NetworkMode to NONE (@keturn)
- #5040 test: add info logs to help track down sporadic (@jdrueckert)
- #5039 test(MTE): replace IsolatedMTEExtension with JUnit's TestInstance.Lifecycle (@keturn)
- #5037 test: add NetworkMode setting to MTE (@keturn)
- #5022 test: reducing logspam (@keturn)
- #5010 test: Move ModuleTestingEnvironment to engine-tests (@keturn)
- #4987 test(C
- v5.3.0-rc.2Preview Engine 5.3.0 / Alpha 23 (Release Candidate 2)pre-release2022-08-23 · 2022-08-23 21:13 UTC
查看更新说明
Changes
:rocket: Features
- #5061 feat: add type handlers for SimpleUri and BlockUri (@jdrueckert)
:bug: Bug Fixes
- #5062 fix: do not crash on unexpected map format in GenericMapTypeHandler (@jdrueckert)
- #5066 fix(rendering): Don't try to set window icon on macOS (@skaldarnar)
- #5065 build(idea): fix parameters in run configurations (@skaldarnar)
:toolbox: Maintenance
- #5067 chore(world): improve logging for BlockManager (@skaldarnar)
- #5066 fix(rendering): Don't try to set window icon on macOS (@skaldarnar)
- #5064 chore: simplify implementation in Assets to one-liners (@skaldarnar)
:gear: Logistics
- #5062 fix: do not crash on unexpected map format in GenericMapTypeHandler (@jdrueckert)
- #5068 build(idea): exclude some things from import suggestions (@keturn)
- #5065 build(idea): fix parameters in run configurations (@skaldarnar)
- v5.3.0-rc.1Preview Engine 5.3.0 / Alpha 23 (Release Candidate 1)pre-release2022-08-21 · 2022-08-21 12:09 UTC
查看更新说明
Changes
- #5029 performance(network): shutdown faster with parallelization (@keturn)
- #5044 test(MTE): allow a test to add its own EngineSubsystem (@keturn)
- #5039 test(MTE): replace IsolatedMTEExtension with JUnit's TestInstance.Lifecycle (@keturn)
- #5041 test(MTE)! set default NetworkMode to NONE (@keturn)
- #5010 test: Move ModuleTestingEnvironment to engine-tests (@keturn)
- #4987 test(ChunkMeshWorker): initial attempt at using reactor-test (@keturn)
- #4999 made changes in BlockCommands.java to prevent adding of wrong number … (@ujjman)
- #4980 fix: fix game screen goes black bug (@sid2002CN)
:rocket: Features
- #5037 test: add NetworkMode setting to MTE (@keturn)
- #5022 test: reducing logspam (@keturn)
- #5028 feat(InjectionHelper): inject() returns the object for chaining (@keturn)
- #5025 feat(#4948): restrict default memory settings (@jdrueckert)
- #4621 feat: Add BlockAreac#distanceSquared (@shadowasphodel2919)
- #5000 feat: add ball mesh (@jdrueckert)
- #4996 feat: add convenience method PhyiscEngine#recomputeCharacterCollider(entity) (@skaldarnar)
- #4994 doc: update README (@jdrueckert)
- #4947 feat: micrometer metrics over JMX (@keturn)
- #4898 feat(gestaltv7-eventsystem): Migration Event and @ReceiveEvent to gestalt's (@DarkWeird)
:bug: Bug Fixes
- #5053 fix(facade): fix broken --load-last-game (@keturn)
- #5054 fix: do not run behavior simulation while paused (@keturn)
- #5048 fix(TypeHandlerLibrary): fix error-during-error-logging in GenericMap (@keturn)
- #5043 fixup! test(MTE)! set default NetworkMode to NONE (#5041) (@skaldarnar)
- #5036 fix(PathManager): allow paths to be symlinks (@keturn)
- #5035 fix(templates): replace perlin with simplex as the default override.cfg (@keturn)
- #5017 fix(Context)!: correct signature of Context.get (@keturn)
- #5013 fix(test): set jacoco excludes for engine-test's unitTest and integrationTest tasks (@keturn)
- #5014 fix(ChunkProcessingPipeline): base thread pool size on available processors (@keturn)
- #5008 fix(SelectionScreen): be more robust in the face of save files with incomplete manifests (@keturn)
- #5006 fix: path quirk on an M1 Mac using Azul JDK 11 (@Cervator)
- #4973 bugfix: resolve BlockSelectionRenderer (@pollend)
:toolbox: Maintenance
- #5053 fix(facade): fix broken --load-last-game (@keturn)
- #5052 chore(EntityPool): workaround "unchecked generics array creation" for getEntitiesWith (@keturn)
- #5048 fix(TypeHandlerLibrary): fix error-during-error-logging in GenericMap (@keturn)
- #5033 chore: CoreRegistry removal from engine.network (@keturn)
- #5027 build(checkstyle): update to version 10.2, update .idea to match (@keturn)
- #5040 test: add info logs to help track down sporadic (@jdrueckert)
- #5026 chore(#4908): match IntelliJ and Checkstyle formatting rules (@jdrueckert)
- #5021 security: upgrade dependencies (@keturn)
- #5016 chore: remove unused ByteCodeReflectFactory (@keturn)
- #5009 chore(StorageManager): typos and minor code cleanups (@keturn)
- #4786 chore(rendering): migrate chunk mesh generation Flux (@pollend)
- #5007 build(idea): update dictionary and gitignores (@keturn)
- #4768 chore: move SideBitFlags into Side (@pollend)
- #5002 chore: Update lwjgl version to 3.3.1 (@DarkWeird)
- #4970 chore: remove TessellatorHelper (@pollend)
- #4992 chore: remove no longer existing CharacterMovement fields from prefabs (@jdrueckert)
- #4989 refactor(Chunk): provide default implementations of methods where possible (@keturn)
- #4972 refactor: split out chunk work as a seperate helper class (@pollend)
- #4984 chore: add security policy (@jdrueckert)
- #4888 chore: remove deprecated Chunk#getPosition(Vector3i) (@pollend)
- #4965 chore: remove deprecated method in Block (@pollend)
- #4898 feat(gestaltv7-eventsystem): Migration Event and @ReceiveEvent to gestalt's (@DarkWeird)
:books: Documentation
- #5019 doc: replace IRC link with Discord (@keturn)
- #4994
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
The Terasology project was born from a Minecraft-inspired tech demo and is becoming a stable platform for various types of gameplay settings in a voxel world. The creators and maintainers are a diverse mix of software developers, designers, game testers, graphic artists, and musicians. We encourage others to join! We encourage contributions from anybody and try to keep a warm and friendly community and maintain a code of conduct.
Community
If you want to get in contact with the Terasology community and the whole MovingBlocks team, you can easily connect with us, share your ideas, report and solve problems. We are present in nearly the complete round-up of social networks. Follow/friend us wherever you want, chat with us and tell the world.
Installation
* Please note, that if you have both integrated (chip) and dedicated (card) graphics, you should make sure that you're actually using your dedicated graphics when running Terasology.
Internet connectivity is required for downloading Terasology via the Launcher, afterwards playing offline is possible.
For easy game setup (recommended) you can use our launcher - download it here.
For more information about playing, like hot keys or server hosting, see the dedicated page or check out the modules.
Alternative Installation Methods
If you already have a Java Development Kit (JDK) installed, you may use a direct download release as an alternative to using the launcher. Java version 17 is required.
ßDirect download stable builds are uploaded to our release section here on GitHub while the cutting-edge develop version can be downloaded direct here from our Jenkins.
Development
Development is possible on all common platforms (Windows, Linux, MacOS) as long as the JDK is properly set up.
Requirements
Technical Requirements:
- Java SE Development Kit (JDK) 17. The CI will verify against this baseline version. Using newer Java versions may cause issues (see #3976).
- Git to clone the repo and commit changes.
Non-Technical Requirements:
- familiarity with Git. Have a look at https://learngitbranching.js.org/ if you're not familiar with Git yet.
- familiarity with GitHub, especially forks. Have a look at GitHub's "Working with Forks" Guide if you don't know how to work with forks yet.
Workspace Setup
To be able to run Terasology from source, you'll need to setup your workspace. Follow the Contributor Quick Start Guide. This guide is designed for IntelliJ IDEA (you can use the free community edition), but alternative setups are possible.
:warning: Note, that a Terasology workspace is a multi-repo workspace.
While your workspace itself is a clone of MovingBlocks/Terasology, every subdirectory in your workspace directory ./modules/ is a clone of a Terasology module repo.
Accordingly, if you want to contribute to modules, you'll need to navigate into the respective subdirectory and work with Git from in there. Any Git commands executed in your workspace root will target MovingBlocks/Terasology.
For more information, see our wiki entry on Understanding Terasology's Git Setup.
Contributing
Detailed information on how to contribute can be found in CONTRIBUTING.md. Remember, that all submissions must be licensed under Apache License, Version 2.0.
Terasology has a rather steep learning curve in the beginning. To help you with the learning process, our Terasology Knowledge Base, formerly known as the Terasology Engine wiki, helps you find the resources you need according to the field of contribution you're interested in. Additional learning resources can be found in our tutorial modules.
If you find errors or issues in any of our resources, please report them using GitHub issues and help fix them.
For developers that have not worked with complex software systems or dealt with the intricacies of Java yet, we recommend to start with Good First Issues in Module Land.
Developers with previous experience in rendering, physics and other less trivial aspects of game development are welcome to give the Good First Issues in Engine a go.
License
Terasology is fully open source and licensed Apache License, Version 2.0 for code and Creative Commons Attribution License, Version 4.0 for artwork (unless indicated otherwise - see credits for minor exceptions).