关于minecraft地图扁平化转档(1.12.2>1.15.2)函数修改的记录15-32(完结篇)
本文目的
给自己写个参考;
记录地图更新过程;
加深记忆改变自己的书写习惯;
如果能帮到其他需要转档的玩家也是极好的。
要不是我在wiki上找不到指令修改的归纳总结......
文章中提到的内容都是在国际版上进行的,修改针对在网易开局域网(租赁服)的情况,但也适用于其他启动器。

15.修改effect命令
effect [玩家] [状态] [时间] [等级] [模式] > effect give [玩家] [状态] [时间] [等级] [模式]
effect [玩家] clear > effect clear [玩家]
effect [玩家] [状态] 0 > effect clear [玩家] [状态]
effect中状态效果的数字id需改成英文id

16.修改particle命令颗粒名称

iconcrack > item [物品id](删去原句末物品id)

17.修改replaceitem命令槽位名称
删去“slot.”
物品的[数据值]部分删去

18.修改gamemode数值

19.修改spawnpoint命令坐标
扁平化后spawnpoint的x、z坐标不再允许小数
20.修改方块ID
由于数量过多,请参考下方wiki链接中的方块与物品ID部分:
https://minecraft-zh.gamepedia.com/Java%E7%89%881.13/%E6%89%81%E5%B9%B3%E5%8C%96
方块类型数据值由不同方块名称区分 而方块状态改为在方块名后定义数据值:
setblock -59 6 -15 minecraft:stone_button 3 > setblock -59 6 -15 minecraft:stone_button[facing=south]
21.修改entitydata命令
原entitydata [实体] [数据标签]等价于data merge entity [实体] [数据标签]或data modify entity [实体] [数据标签名称] set value [数据标签值]
但data命令中的选择器只允许选择一个实体 所以选择多个实体时需要搭配execute(只是一种方法)
如:
entitydata @e[type=arrow] {pickup:2b}
改为
execute as @e[type=arrow,limit=1] run data merge entity @s {pickup:2b}
或
execute as @e[type=arrow,limit=1] run data modify entity @s pickup set value 2
22.修改命令中的后置数据标签条件
如
tag @e[type=minecraft:item_frame] add 1 {ItemRotation:1b}
改为
tag @e[type=minecraft:item_frame,nbt={ItemRotation:1b}] add ResetItemRotation
23.修改实体ID

24.修改xp命令
如:
xp 1L @a 改为 xp add @a 1 levels
xp 1 @a 改为 xp add @a 1 points
负数同理
25.修改replaceitem命令
replaceitem槽位名称变化
"slot."被删除
26.修改物品数据标签位置并删除数据值
如:
replaceitem entity @a[scores={Joined=1},gamemode=!spectator] container.0 written_book 1 0 {resolved:1,author:"Runwill(Creator2005)",title:"镜像决斗规则",generation:0,pages:["[{\"text\":\"玩家分场次决斗, 剩余一人未被击败则游戏结束; 所有玩家使用相同的镜像决斗特定装备。\"}]"]}
改为
replaceitem entity @a[scores={Joined=1},gamemode=!spectator] container.0 written_book{resolved:1,author:"Runwill(Creator2005)",title:"镜像决斗规则",generation:0,pages:["[{\"text\":\"玩家分场次决斗, 剩余一人未被击败则游戏结束; 所有玩家使用相同的镜像决斗特定装备。\"}]"]} 1
由于使用物品数据标签的地方实在太多,我使用正则来进行替换:


27.修改选择器r、rm参数
r=1 > distance=1
rm=1 > distance=1..(由于distance参数对取值范围的端点取等 所以需要用如tag的其他方法排除r=的实体 如rm=0)
如:


28.修改数据标签ench


29.修改含中文的数据标签Name、Lore
Name:"中文" > Name:"[{\"text\":\"中文\"}]"
Lore:["中文"] > Lore:["{\"text\":\"中文\"}"]


30.修改声音事件名称(playsound)
由于数量过多,请参考下方wiki链接中的声音事件部分:
https://minecraft-zh.gamepedia.com/Java%E7%89%881.13/%E6%89%81%E5%B9%B3%E5%8C%96
31.修改有包含@s选择器的JSON文本的命令(tellraw、title等)
扁平化后tellraw等带有JSON文本的命令执行时,其中的@s不再选择命令的目标,而是命令的执行者,所以需要进行以下修改(此处用score元素演示):
tellraw @a [{"score":{"name":"@s","objective":"GuanZhu"}]
改为
execute as @a run tellraw @s [{"score":{"name":"@s","objective":"GuanZhu"}]
32.修改地图内独立于函数的部分(命令方块、告示牌事件、实体已拥有的标签)

到此为止,地图的扁平化就结束啦(终于)
很多旧版本的命令到了高版本可以进一步优化,比如用give给予药水可以一次写多瓶 不需要写一堆一次给一瓶的give了,祝各位游戏愉快(^・ω・^ )

特别鸣谢 MC_himcd QAQxianyuQAQ