00 从区块到世界
1 概述
当我们按下 F3+G,地面上出现了彩色网格 —— 那是区块的边界。但这张网格所代表的,远不止 "16×16 的格子" 那么简单。
在 Minecraft 服务端的底层,区块是被精心管理的基本单元。它的生命周期 —— 从无人问津到被请求、从读盘到生成、从升温到强加载、从降温到卸载 —— 每一步都由一个被称为 "区块管理系统" 的复杂机制精确控制。
本章将带你完整走完这个过程。读完本章后,你应该能回答:
- 区块是什么?它在源码中如何被存储和管理?
ChunkStatus和ChunkLevelType有什么区别?为什么 "已生成" 不等于 "正在运算"?- 加载票(Ticket)如何决定一个区块的 "热度"?
ThreadedAnvilChunkStorage这个庞大的调度器到底在做什么?- 一次
getChunk()调用背后,到底发生了什么? ChunkHolder如何像一个温度计一样控制区块的三种 "运行视图"?- 玩家看见的地形和服务端运算的区块,边界在哪里?
2 结构
本章共 7 篇:
- 绪论 —— 区块管理系统的研究背景与基本约定
- —— 区块、子区块、ProtoChunk 与 WorldChunk、客户端管线
- —— 12 步生成管线、外圈依赖、taskMargin、光照与存档升级
- —— ChunkLevels、ChunkLevelType、INACCESSIBLE/FULL/BLOCK_TICKING/ENTITY_TICKING 的本质区别
- —— ThreadedAnvilChunkStorage 的职责、核心表结构、ChunkTaskPrioritySystem
- —— CompletableFuture 在区块管理中的作用、任务队列与执行时机
- —— Ticket 的类型、生命周期、玩家加载、票的传播
- —— 三条核心 Future、tick () 升温降温、区块运行视图切换
3 术语与参考
本章以 Minecraft Java Edition 1.20.1、Yarn Mapping 1.20.1+build.10 为准,部分内容基于 1.16.4 的早期研究。基础概念部分参考了 Discovering Minecraft(CC0 协议)的区块管理系统分析。
4 前置知识
- 重新认识世界
- Java 基本语法与
CompletableFuture概念
