区块(Chunk)是
Minecraft(
我的世界)地图里面的一个片段。每个区块由16×16×384(1.17及以前版本则为16×16×256),共计98304(1.17及以前版本则为65536)个
方块组成。当
玩家第一次出生在世界时会在其周围生成区块,而随着玩家对世界的探索,相邻的区块也会继续生成。
提示
1.本
词条创建于1.18版本更新之前,内容虽已经过更新,但依旧会有部分内容与游戏相出入,有出入的地方请以
2.本词条只是笼统的介绍“区块”,若想研究探查其运行逻辑,请移步至
Minecraft WiKi的“区块”词条、“区块格式”词条、“调试屏幕”词条和“高度”词条
3.本词条主要说明的是
主世界区块,
下界和
末路之地的区块与主世界区块又有些许差异,详请见
Minecraft WiKi的“区块”词条
区块详情
区块宽16格,长16格,高384格(1.17及以前版本为256格),因此一个区块共有98304个
方块(1.17及以前版本为65536个
方块)。当玩家第一次出生在世界时会在其周围生成区块(出生点区块),而随着玩家对世界的探索,相邻的区块也会被生成。一个世界可生成14万亿(14,062,500,000,000)个真区块。每个区块有7.46×10244700种可能的区块(此项数据已过时),不包括
实体。
在单人游戏中所生成区块的确切数字往往与视野距离和玩家的移动有关。而在多人游戏里,在每位玩家周围会生成一个以玩家为中心,半径为10的二维区块网格(一共21×21总计441个区块),尽管这可以被更改为3-15之间的一个值,通常只会在连接不良的家用服务器里调低此数值。在指定范围内的区块会有活动(
生物生成、树木生长、
水流动、掉落的物品消失等),而不在范围内的区块不会有交互,并会存储在硬盘里(这个“按需加载”内存管理机制被广泛用于程序化的地形生成,以便玩家的电脑不需要同时跟踪并更新成百上千个植物和
生物)。区块每次存储的时间间隔最小为30秒。
史莱姆可以只生成在特定区块里,这些区块由根据区块坐标执行的计算而决定。有许多工具和
Mod允许告知玩家可生成
史莱姆的区块。
Minecraft的渲染器将一个区块分为24个(1.17及以前版本为16个)16x16x16的渲染区块(即子区块),并编译到
OpenGL显示名单里用于加快渲染速率。任意一个渲染区块内的
方块发生变动的话,渲染区块均需要重建。
区块是通过地图
种子进行创建的,这也意味着如果每次使用的地图
种子相同的话,所生成的区块也会相同,前提是
Minecraft和世界生成器的版本要一致。
区块加载
由于一个世界极大并且包含极多区块,因此游戏仅加载部分区块以使游戏可玩,游戏不会运算已卸载的区块。
Java版
加载标签
每个区块的加载都来源于一个“加载标签”。
每个加载标签具有3个属性:加载等级,标签类型和存活时间(可选属性)。
加载等级
加载等级用于决定了这个区块中哪些游戏内容能够被运算。
加载等级的范围是22-44。只会在22-33的范围里有常规的游戏运算。理论上小于22的加载等级是可能的(不过在原版中不可行)。加载等级44以上是不可能的。
一个区块如果获得多个加载等级,只有最小的加载等级是有效的。加载等级越小,游戏会运算更多内容。
加载等级可以分为以下有四种加载等级类型:
等级传播
带有加载标签的区块,会相邻(8个)的区块传播加载等级。对于每张“标签”使用“flood fills”算法从“标签”的位置传播,每向外传播一次就加载等级增加一,直到达到上限44。
标签类型
不同来源的标签有不同的类型,用于确定不同加载等级。
玩家
由玩家加载的标签。“玩家”标签的加载等级为31。玩家的加载范围内的区块都会获得“玩家”标签。
强制加载
使用/forceload
指令可以让区块获得“强制”类型的加载标签。加载等级为31。
“强制”类型的加载标签在游戏重启后依然有效。
出生点区块
“出生点”加载标签的等级传播
世界出生点所在的区块(即出生点区块)会获得“出生点”加载标签。使用/setworldspawn改变世界出生点时,加载标签会同时改变。加载等级为22,是游戏中最小的加载等级。
下界传送门
当实体通过
下界传送门传送时,在即将到达的
下界传送门所在的区块会获得传送门标签,加载等级为30。
“传送门”加载标签本身没有“存活时间”,不过如果
下界传送门300游戏刻(不卡顿则300游戏刻=15秒)内没有使用过,传送门系统会移除这个的加载标签。【区块加载器就是根据这一原理制造和工作的: 】
屠龙战
“龙”加载类型的加载等级为24。在屠龙战开始时,在
末路之地维度的(0,0)区块创建,并在屠龙战停止或结束后移除。
瞬移
实体瞬移后在瞬移到的区块创建的加载标签,包括使用/tp
指令、/spreadplayers
指令,通过
末地传送门,
末地折跃门。对于/tp命令,加载等级为32,而/spreadplayers
指令和
末地传送门的加载等级为33。
具有“存活时间”属性,为5游戏刻,也就是说它在5个游戏刻后失效。
区块加载临时标签
在任意游戏代码调用“getChunk”方法时创建的标签。如果游戏认为这个区块应该被加载,它就会把这个“临时”标签赋给那个区块(可能在创建它之后)。
加载等级与区块是否已经完成世界生成有关。它的等级至少会是33,但在许多情况下会大于33。
例如:生物游荡AI执行时,它将会检查某个
方块是否有完整上表面。作为检查的一部分,这个区块会获得等级为33的“临时”类型的加载标签。
它的“存活时间”为1游戏刻。
局限性
在加载区块中并不是所有游戏内容永远会运算,因为它们可能还有其他条件,其中包括:
特殊情况
一个区块中的事件可能会影响外部的区块。如果外部的区块处于非活动状态,则在大多数情况下会立即暂停。特别地,
基岩版
在已加载区块里,所有游戏内容都能够被运算。在未加载的区块里几乎各种游戏内容都不会运算。
种类
命令加载
局限性
特殊情况
一个区块中的事件可能会影响外部的区块。如果外部的区块处于非活动状态,则在大多数情况下会立即暂停。特别地,
区块刻
作为游戏刻的一部分,每个游戏刻都会对特定的区块执行区块刻。(红石刻等请移步至“
刻”词条)
在
Java版中,在每个游戏刻中,加载等级在31级或以下、区块中心与最近的玩家的水平距离小于128的区块会执行区块刻。
在基岩版中,在每个游戏刻中,所有已加载区块都会执行区块刻。
区块刻有许多影响:
史莱姆区块
史莱姆区块指的是一些在Y=40以下能够忽略亮度生成史莱姆的区块。这些区块在其他方面与所有其他区块相同。
Java版生成
史莱姆区块在世界各地都存在(
蘑菇岛除外)。有十分之一的区块都是史莱姆区块。这些史莱姆区块是通过将它们的区块坐标与世界的
种子相结合,通过
伪随机算法确定的。
使用区块坐标和世界
种子来生成介于0和9之间(含0和9)的随机整数,如果该数字为0,则该区块是史莱姆区块。请注意:“xPosition”和“zPosition”是32位整数(INT)。
基岩版生成
基岩版中的史莱姆区块算法与Java版中的算法不同。该算法不依赖于世界
种子,因此,每个世界中的史莱姆区块位置是相同的。
参考资料
区块.Minecraft Wiki.2012\u5e746\u670829\u65e5