Developer:Minecraft/LimitsHeight

众所周知，Minecraft 的世界限制高度为 **-64 ~ 319** (21w06a ~ 21w15a, 1.8 exp1 ~ present )或 **0 ~ 255** (1.2.1 12w07a ~ 21w06a,, 21w15a ~ 1.17.1)，一般这样的高度已经满足绝大多数建筑的要求，但是在某些方面，可能会需要突破高度限制，虽然可以借助诸如 Open Cubic Chunks Mod 来突破高度限制，但是这样的方案的前提是：Forge客户端，对于原版要求，显然无法做到这一点。

不过，在 20w49a 这个版本开始，对自定义世界生成进行了一些改变，其中最大的改变莫属于世界高度限制的调整，可以借助数据包对世界的高度进行调整。

案例文件可以在该链接查看：https://github.com/Rosalina129/Minecraft\_Everything/tree/main/Datapacks/Height%20Limit

## 准备工作

Minecraft 20w49a 以上版本，这里以 1.19.3 为例。

File:4cb7f1fc-2ddd-488f-a999-3378d16724de.png

一个代码编写工具，建议 VSCode（Notepad++强烈不推荐Template:Hide）。

开始
--

Template:Warning
首先，创建一个数据包，最好在一个比较干净的空文件夹里进行。

数据包的文件结构应该是这样子：

File:670a8cad-f32f-4324-b6c9-640df6b2c23f.png

然后创建一个 pack.mcmeta 文件，在里面填写：

```
{
 "pack": {
 "pack\_format": 10,
 "description": "Height Limits"
 }
}

```
一般情况下，默认的数据包一般为这样：此为Template:Code下的目录（来自 1.19.3.jar 内部的文件结构）。

File:3f56f2fe-c032-4916-9ec4-8f5ceafdd9f2.png

而控制世界生成的大部分文件，在Template:Code文件夹里，但是我们不管这个，我们的重点对象是控制这个世界的一个维度的高度限制。

维度的数据存储格式为：Template:Code。

主世界在 Minecraft 中的**维度ID**为Template:Code，这里用到的方案是：https://github.com/slicedlime/examples/raw/d766a7028865fc210bef3ddcffb54886cdaf4860/vanilla\_worldgen.zip

此文件里面会有一个文件夹：File:6c36ccb5-bc98-4caf-9e7a-cc90f3a34a2f.png，而里面的File:Bcf6b248-5c37-42d1-b425-0556c46d4068.png正是一个目标，后续如果有能力自己建一个维度世界也可以不借助该文件自己编写（大雾）

当然，原版的世界生成那边的文件内部结构为：

```
{
 "ambient\_light": 0.0,
 "bed\_works": true,
 "coordinate\_scale": 1.0,
 "effects": "minecraft:overworld",
 "has\_ceiling": false,
 "has\_raids": true,
 "has\_skylight": true,
 "height": 384,
 "infiniburn": "#minecraft:infiniburn\_overworld",
 "logical\_height": 384,
 "min\_y": -64,
 "monster\_spawn\_block\_light\_limit": 0,
 "monster\_spawn\_light\_level": {
 "type": "minecraft:uniform",
 "value": {
 "max\_inclusive": 7,
 "min\_inclusive": 0
 }
 },
 "natural": true,
 "piglin\_safe": false,
 "respawn\_anchor\_works": false,
 "ultrawarm": false
}

```
这其中绝大部分的数据可以不用管，重点在Template:Code和Template:Code这两个参数上。（当然Template:Code参数也可以和高度一样。它的作用是：玩家使用紫颂果或下界传送门可以到达的总高度。不会影响超过该限制高度的既有传送门。取值范围为0~4064（同时小于Template:Code。））

其中：

Template:Code的意思是：该维度中可以存在方块的最低高度。数值必须在-2032至2031之间且为16的整数倍（也就是说，-2032是最小有效值，2016是最大有效值）。

Template:Code的意思是：该维度中可以存在方块的总高度。数值必须在16至4064之间且为16的整数倍。维度中可以存在方块的最大高度值为`min_y`与`height`值之和减去1，不能超过2031。（公式为：Template:Code）

Minecraft 默认世界维度
 Nether 下界
 The End 末地

值得注意的是，这两个参数不是随便调就能生效的，由于 Minecraft 存档数据的机制缘故，这使得两个数值只能为Template:Code，如果调味其他的数，则进入世界时，就会变成这样：

File:9d03cffd-59e6-443d-9fb3-d87b06e747ce.png

此时数据包将不会生效。

正确的做法是：在决定最小高度时，必须取16的倍数为整，比如你想把世界最低高度调整到-1125左右，则正确的数值为-1136或-1120，而不是-1125。

向上延伸高度也是同理。

这里有一个例子：（基于原来的数据在部分片段进行修改。（注意代码行标数。））

```
 "height": 1024,
 "infiniburn": "#minecraft:infiniburn\_overworld",
 "logical\_height": 1024,
 "min\_y": -1136,

```
此时世界高度限制就变成了：-1136 ~ -113（-1136 + 1024 - 1）。

然而，这项功能为实验性功能，尝试在已经修改数据包的世界加载会提示这个：

File:De5f64ba-8502-4ca4-a02e-a0bf8b6acb88.png

请确保效果设定正确，不放心的话建议将当前存档备份。

同理，下界的数据和末地的世界高度限制数据也可以进行更改，注意名字即可。（the\_nether.json 或 the\_end.json）

效果
--

 File:Cd6e619a-7d62-483d-898d-1d4ba47c7e52.png
 File:A8631562-ec25-4588-99bf-73bbc3dce96d.png
 File:Aabc902b-9576-4a01-ad2d-016a53e28227.png
## 可能造成的问题

Template:Warning
当设定好高度之后，请不要轻易尝试随便调整Template:Code和Template:Code的参数，否则在设定的世界高度限制范围之外的所有方块都会被自动清除（抹除）掉，这是一个不可逆的过程！！！

注：该地图使用的世界种子为：实验 1：7639140523948991424 （1.19.3）

实验 2：-8217533536196758661（1.17.1）

### 实验 1

找一个地方，建造一个从地面到世界高度限制顶层的石头塔，并且在 Y 191 处用醒目的方块进行标记，如下图：

 File:17a29868-6622-44fc-a798-c4f070816977.png
随后对数据包进行修改，将Template:Code设为256，效果如下图：

 File:942388ab-ca34-42dd-a51b-eb9f845edf6c.png
### 实验 2

这一个可能是一个 Bug 或者特性，新版经测试仅仅是将世界高度限制以外的区块进行抹除，而不对当前区块进行重置。

这一次我们把版本回到 1.17.1，创建一个新地图。

随便在一个结构体上方用同样的方式建造高塔，同时在该结构进行一定的修改。

可以先把Template:Code参数调味更高，比如512.（本案例）如下图：

 File:9181aea8-f727-42c4-b23f-a22188345cd2.png
随后保存世界，将Template:Code参数调为原版（256），你会发现如下状况。

 File:F6a744eb-9203-42d1-b72a-e1b9c4fd0995.png
所以这样的方式还是有一些风险的。

引用
--

https://minecraft.fandom.com/zh/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%B4%E5%BA%A6