MC百科社群

标题: [CRT]关于NBT标签修改 [打印本页]

作者: DTFuel    时间: 2023-6-18 20:38
标题: [CRT]关于NBT标签修改
本帖最后由 DTFuel 于 2023-6-18 20:38 编辑

众所周知,Zenscript是一门编程语言



Zenscript中,NBT标签是以DataMap这么一个不可变类型储存的。修改其中的内容只能通过合并或者说覆写键值对和删除键值对来完成。DataMap只能转换成String类型,却没有类型可以转换成DataMap。这导致修改nbt成了一个极为麻烦的事。
而匠魂工具又是完全由nbt标签和meta值区分。在写一个通过一次无序合成去除某个指定强化的配方的时候,这玩意的恶心之处就显现出来了:
1.匠魂工具的nbt实在是太长了,长到用/ct hand获取的物品信息根本无法完整复制到剪贴板上,被迫手抄nbt
2.nbt标签中嵌套的几层DataMap非常令我头大,这种情况下对子DataMap的操作很复杂,我的思路是从最下层DataMap开始一层层递归直到拼出整个nbt不知道有没有更简单的办法
3.强化相关的nbt有些类型是未知的,编辑起来根本不知道怎么整




所以有大佬能给点更好的思路或是办法吗?这玩意一层层的快把我脑子给绕进去烧掉了


作者: youyihj    时间: 2023-6-19 21:28
本帖最后由 youyihj 于 2023-6-19 21:34 编辑

向您隆重推荐 ZenUtils
https://github.com/friendlyhj/ZenUtils/wiki/DeepDataUpdate
不过这种匹配复杂 nbt 内容,可能只能用配方函数或自定义物品条件匹配某个工具有没有某个特性,这样就是 IData 一层层的读取,这样也不应该写又臭又长的 withTag,只针对一个 nbt ,而应该整个特殊的对 nbt 的匹配规则。

总之,对于 IData 的读取,可以用 https://github.com/Krutoy242/D.zs,写入用我的 ZenUtils

作者: DTFuel    时间: 2023-6-19 21:50
youyihj 发表于 2023-6-19 21:28
向您隆重推荐 ZenUtils
https://github.com/friendlyhj/ZenUtils/wiki/DeepDataUpdate
不过这 ...

好吧,之前用你这mod只是用来热重载调试用,wiki还没看




欢迎光临 MC百科社群 (https://bbs.mcmod.cn/) MC百科|最大的MineCraft中文模组百科