距离显示结果还剩5票~
暂无日志..
暂无管理组..
暂无编辑组..
暂无开发组..
概述
这个模组给多模组的 Minecraft 添加了一些工具。
需要服务器和客户端都安装以生效。
链接物品到聊天栏
Quark 有一个 shift-T 命令,可以将物品链接到聊天栏中,但无法在 JEI 的配方和书签里使用。
这个模组添加了一个新的快捷键(可配置,默认为 Shift + /,即问号),可以在物品栏,JEI 的配方和书签中使用。
发送后文本也是可点击的,点击后将打开物品栏(也就打开了 JEI 界面),并帮你在 JEI 中填写搜索这个物品的文本(由于 NBT 的存在,可能结果不会和原物品等效)。
因为是按 Resource ID 搜索,所以需要 JEI 客户端配置中的 Resource ID 搜索设置为“REQUIRE_PREFIX”,才能使搜索起作用。
JEI 不是强依赖,如果没有 JEI 本模组还是可以加载的。
打开 JEI 搜索命令
/the-toolkits jei <search_term>
这个命令用来实现上面链接物品点击的功能,正常来说对用户没用。
打印物品 NBT
/the-toolkits nbt get
如其名,这个命令将物品的 NBT 打印到聊天中。需要持有物品,然后运行此命令即可。
另外可以通过点击文本将内容复制。你需要是 OP 才能使用这个 OP 的命令(权限等级 2)。
打印玩家属性
/the-toolkits attributes get
这个命令打印玩家属性,例如速度等。
通过 API 可以获取两种类型的属性(syncable 和 dirty),作者也不知它们有什么区别,反正都打印出来了(看上去它们内容是一样的)。
作者个人使用它来理解神化的实现原理(神化模组中很多效果,如宝石的穿甲,生命百分比伤害等,是通过给人物增加额外的属性来实现的)。
考虑到看到属性值也会影响平衡,现在和 NBT 命令一样也是权限等级 2(需要 OP 才能用)。
导出配方到 json 文件
它的实现值得多说一点(如果你有要导出配方的需求,那么应该可以理解下面的)。
首先,配方都有一个 Serializer,Serializer 的名称是一个 Resource ID,类似于 minecraft:crafting_shaped(所有工作台配方),和 create:mechanical_crafting(机械动力的动力合成器的配方)。
Resource ID 前面的部分称作 namespace,后面的部分称作 path。这个功能就基于 namespace 和 path 对配方分类。
配方命令示例
导出某一类下所有配方:
/the-toolkits recipe <namespace> <path> dump
列出所有 namespace(此外,在你输入 list 这一位置的参数时,可以自动补全所有 namespace):
/the-toolkits recipe list
列出所有属于某 namespace 的 path(此外,在你输入 list 这一位置的参数时,可以自动补全所有 path):
/the-toolkits recipe <namespace> list
统计这个 <namespace>:<path> 下配方的数量:
/the-toolkits <namespace> <path> count
随机打印 <namespace>:<path> 下的一个配方(以一种比较随意的方式展示):
/the-toolkits <namespace> <path> random
列出 <namespace>:<path> 下的配方 ID(最多 50 个):
/the-toolkits <namespace> <path> list
显示某个配方 ID 的配方内容:
/the-toolkits <namespace> <path> print <recipe_id>
配方属性
关于导出的格式,如果输出有 NBT,则尽量地将 NBT 转换成了 json 输出。
另外,在 1.16.5 中这个功能通过 RecipeManager 获取到 IRecipe 类型的配方,这是一个接口。
如果只用它,能获取到 id, group, type, ingredients(材料), result(成品)等属性,所以输出的 json,每一个配方一定会有这几个属性。
但是对于有序合成这种工作台的配方,它们真正实现的类还有 width, height 属性(表示宽、高,如 2x3)。
如果少了它们,只靠 IRecipe 的属性没有办法完全“复原”这些工作台的配方。
这种导出的数据无法完全和原配方等同的现象可能对其他的类型也存在。
一种解决方式是对一些已知的配方类型做特殊处理,如工作台这种的配方,来补上额外的属性。
当前唯一有特殊处理的就只有工作台的有序配方,增加了 height/width 字段。
由于可能有很多其它模组在增加配方时也继承了这个类(如机械动力的动力合成器),那么 create:mechanical_crafting 就也会有 height/width 字段。
下面是两个例子,第一个是工作台配方的例子(高炉),第二个是 E6E 中 create:mechanical_crafting 的一个配方示例:
{
"id": "minecraft:blast_furnace",
"group": "",
"type": "crafting",
"isSpecial": false,
"result": {
"id": "minecraft:blast_furnace",
"num": 1,
"nbt": {}
},
"width": 3,
"height": 3,
"ingredients": [
{
"tag": "forge:ingots/iron"
},
{
"tag": "forge:ingots/iron"
},
{
"tag": "forge:ingots/iron"
},
{
"tag": "forge:ingots/iron"
},
{
"item": "minecraft:furnace"
},
{
"tag": "forge:ingots/iron"
},
{
"item": "minecraft:smooth_stone"
},
{
"item": "minecraft:smooth_stone"
},
{
"item": "minecraft:smooth_stone"
}
]
},
{
"id": "enigmatica:expert/create/mechanical_crafting/compact_machine_maximum",
"group": "",
"type": "create:mechanical_crafting",
"isSpecial": true,
"result": {
"id": "compactmachines:machine_maximum",
"num": 1,
"nbt": {}
},
"width": 5,
"height": 5,
"ingredients": [
{
"item": "compactmachines:wall"
},
{
"item": "compactmachines:wall"
},
{
"item": "portality:module_energy"
},
{
"item": "compactmachines:wall"
},
{
"item": "compactmachines:wall"
},
{
"item": "compactmachines:wall"
},
{
"item": "resourcefulbees:industrious_honeycomb_block"
},
{
"item": "resourcefulbees:industrious_honeycomb_block"
},
{
"item": "resourcefulbees:industrious_honeycomb_block"
},
{
"item": "compactmachines:wall"
},
{
"item": "portality:module_items"
},
{
"item": "resourcefulbees:industrious_honeycomb_block"
},
{
"item": "portality:controller"
},
{
"item": "resourcefulbees:industrious_honeycomb_block"
},
{
"item": "portality:module_fluids"
},
{
"item": "compactmachines:wall"
},
{
"item": "resourcefulbees:industrious_honeycomb_block"
},
{
"item": "resourcefulbees:industrious_honeycomb_block"
},
{
"item": "resourcefulbees:industrious_honeycomb_block"
},
{
"item": "compactmachines:wall"
},
{
"item": "compactmachines:wall"
},
{
"item": "compactmachines:wall"
},
{
"item": "portality:module_interdimensional"
},
{
"item": "compactmachines:wall"
},
{
"item": "compactmachines:wall"
}
]
},
备注
当前的实现是服务端向客户端发送消息(包含 namespace 和 path,不包含 json 数据),客户端收到后自行再获取 RecipeManager 进行后续逻辑,所以请保证客户端和服务端配方一致,否则可能会有意料之外的事发生;
如果发现某个配方少了,可以用 recipe search "recipe_id" 来搜索 Serializer 名(例如有一些工作台的配方可能会被放到 KubeJS 这个 namespace 下)。
列出所有的实体/方块实体
/the-toolkits entity summary classname/name/registry_name # have a summary of all the entities count
/the-toolkits entity locations classname/name/registry_name name # dump the locations of them
把实体替换为方块实体则是其相应的命令,不过不能选 classname/name/registry_name,默认都是 registry_name(注册名)。