0%

今 (前? ) 日 MC: 修改了小黑能搬起方块的特性

我实在是被末影人整得受不了了.

末影人只要搬起方块就不会计入刷怪上限, 也不会自然刷掉, 所以它们可以随意传送到别的地方再把方块放下. 游戏用 #minecraft:enderman_holdable 这个标签标明了末影人可以拿起来的方块, 它包含的方块可以在 /data/minecraft/tags/blocks/enderman_holdable.json 中找到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"values": [
"#minecraft:small_flowers",
"#minecraft:dirt",
"minecraft:sand",
"minecraft:red_sand",
"minecraft:gravel",
"minecraft:brown_mushroom",
"minecraft:red_mushroom",
"minecraft:tnt",
"minecraft:cactus",
"minecraft:clay",
"minecraft:pumpkin",
"minecraft:carved_pumpkin",
"minecraft:melon",
"minecraft:crimson_fungus",
"minecraft:crimson_nylium",
"minecraft:crimson_roots",
"minecraft:warped_fungus",
"minecraft:warped_nylium",
"minecraft:warped_roots"
]
}

其中 #minecraft:small_flowers#minecraft:dirt 又是两个另外的标签, 大致就是所有花和所有泥土的衍生方块.

几乎所有的刷怪塔都需要一个挂机的玩家和一个打怪的玩家, 尤其是我们服务器做了好几个双维度的刷怪塔, 做太高的话还要担心串门的问题, 所以没办法避免地狱下层的刷怪. 坐标原点附近刚好是诡异森林, 会刷不少的末影人, 于是它们就会就近搬起各种诡异菌岩和诡异菌索到处乱放, 在附近的下界荒地上创造大量零散的方块.

为了获取下界残骸, 我们在地狱底层的岩浆湖下用床炸出了非常复杂的洞穴, 于是也暴露出了大量的砂砾. bdpq 当时做了一个小型的盾构机, 炸膛之后就没有再动过, 只是用泥土填了一部分. 巧的是砂砾和泥土刚好也是末影人可以搬起来的方块, 于是就更乱了.

不仅如此, 地狱会自然生成一些红蘑菇和灰蘑菇, 并且它们会自然生长. 于是又有越来越多的末影人化身成为蘑菇种植专家, 带着它们的蘑菇走遍地狱, 从而地狱的蘑菇和服务器的 mspt 都得到了指数级的增长:

图片加载失败! 这是第一张图片, 展示了高达 76.9 的 mspt, 其中地狱实体 15ms, 以及大量带着全部家当的末影人扎堆在四格空间内

图片加载失败! 这是第二张图片, 清完一部分末影人后 mspt 迅速降至 50 以下

图片加载失败! 这是第三张图片, 下界荒地的大片空地被蘑菇占领

做了好几次大面积的清理, 每次都能清理出来好几盒蘑菇. 但就算蘑菇能随便清理, 其他的方块, 尤其是菌岩和砂砾, 实在没办法防止末影人搬起来. 末影人不能搬起与脚下方块同一层的方块, 但是能搬起自己身高 3 格范围内的方块, 所以最后地形一定会变得越来越崎岖.

很久以前就想通过数据包的方式限制末影人搬方块, 前天终于把这件事做了, 记录一下. 其实非常简单, 首先在存档的 /datapacks/ 目录下新建文件夹, 这将会是你的数据包名字, 这里以 FWEnderman 为例. 之后进入文件夹, 创建 pack.mcmeta 文件:

1
2
3
4
5
6
{
"pack": {
"pack_format": 26,
"description": "啥比末影人别惦记你那B方块了"
}
}

我们服务器的版本是 1.20.4, 对应的数据包版本号是 26, 这个可以去 https://zh.minecraft.wiki/w/%E6%95%B0%E6%8D%AE%E5%8C%85/%E7%89%88%E6%9C%AC 寻找.

之后需要定位给方块赋予目标标签的 json 文件位置, 也就是我们一开始所做的, 它在 /data/minecraft/tags/blocks/enderman_holdable.json 里面. 为了取消这个标签, 我们同样需要 minecraft 这个命名空间, 所以需要在我们的 FWEnderman 文件夹里面也新建 data 文件夹, 进入后新建 minecraft 文件夹, 以此类推在同样的位置创建 enderman_holdable.json. 与原版文件不同, 这里我填入的是:

1
2
3
4
5
6
7
8
{
"replace": true,
"values": [
"minecraft:pumpkin",
"minecraft:carved_pumpkin",
"minecraft:melon"
]
}

之后进入游戏, 先用 /datapack list 查看待启用的这个数据包, 之后再 /datapack enable xxx 就可以了. 可以检查此时的草方块和蘑菇等确实没有了 #minecraft:enderman_holdable 标签, 末影人也不再能搬起来它们了. 然而南瓜, 雕刻南瓜, 西瓜还是能搬起来, 所以以后也不影响做末影人搬瓜农场.