☘ 可扩展的无网格工艺系统 crafting

英文名称 crafting
中文名称
作者 https://github.com/Qwertymine/crafting
语言 英语
版本 Minetest Minetest Version: 5.5.0
依赖Mode或插件
Mode类型
开源协议
视频 开源世界:可扩展的无网格工艺系统模组_我的世界
代码仓库 https://github.com/Qwertymine/crafting
下载地址 https://github.com/Qwertymine/crafting
下载地址2 https://github.com/FaceDeer/crafting/
下载地址3 https://github.com/minetest-mods/simplecrafting_lib
简历

这个模组添加了一个新的制作系统,与默认的基于网格的系统并行
制作系统或完全替代它。

新的制作系统不关心原材料的排列,只关心
它们的相对比例。实际上,每个食谱现在都是“无形的”。
原材料被放入工作台的输入库存中,
可能的输出显示在输出清单中。只需选择哪个
你想要的产出就拿走,原材料也会相应用完。

您可以继续使用 minetest.register_craft 正常注册工艺品,
这个 mod 连接到它,并将重新解释通过它注册的食谱以使用
以及新的制作系统。

如果“清除默认制作系统”选项设置为 true,那么这个 mod 将
从默认制作系统中删除所有制作配方,除了
此模组中定义的制作表(允许玩家访问制作)。
如果您想将其他物品添加回默认制作系统,请使用
crafting.minetest_register_craft 访问原始 minetest.register_craft
功能。

或者,使用“crafting.register”方法注册新的配方
系统独占。示例如下:

– 制作台

制作.注册(“表”,{
输入 = {
[“组:石头”] = 1,
[“默认:lava_source”] = 1,
},
输出 = {
[“默认:黑曜石”] = 2,
},
– 制作配方生产的物品,但不是
– 正式用于制作,例如返回一个空桶
– 来自使用水桶的食谱
返回 = {
[“默认:石头”] = 1,
},
})

– 熔炉

Crafting.register(“熔炉”,{
输入 = {
– 必须只有一种输入类型,否则会被熔炉忽略
– 菜谱不能通过输入的数量来区分,只有
– 燃料等级和输入名称
[“默认:石头”] = 1,

	-- 如果一个项目在具有有效配方的多个组中,则输出
	-- 将是第一个找到的有效配方(基本上是随机的)
},
输出 = {
	-- 必须只有一种输入类型,否则会被熔炉忽略
	[“默认:黑曜石”] = 2,
},
烹饪时间 = 5.6,
-- 这是允许的燃料质量
-- 等级如下:
-- 0 - 这怎么燃烧?
-- 1 - 非常差 - 树苗、灌木等。
-- 2 - 贫瘠 - 干燥的灌木等。
-- 3 - 好的 - 木头等
-- 4 - 平均 - 干木等。
-- 5 - 好 - 煤等。
-- 6 - 非常好 - 木炭、熔岩等。
-- 7 - 优秀 - 模组添加的非魔法更好的燃料
-- 8+ - 由模组添加的魔法等级

-- 如果稍后定义了更具体的配方,它将重新定义
-- 这个食谱的范围
燃料等级= {
	-- 如果为 nil,则默认为 0
	最小值 = 1,
	-- 如果设为 nil,则默认为 math.huge
	最大值 = 3,
},

})

  • 汽油

Crafting.register(“燃料”,{
– 允许组名
– 如果没有特定项目的配方,那么它将采用
– 最长燃烧组的定义
输入= {“默认:树”},
燃烧时间 = 25.4,
等级= 3,
})

还有一个“crafting.register_reversible”方法采用相同的方法
参数为 crafting.register。

它注册提供的制作配方,并自动创建
并注册了同一类型的“反向”工艺。这一般应该
只能通过将一种类型的物品变成另一种类型的工艺来完成
物品(例如,金属锭 <-> 金属块),但它仍然会
如果有多个输入,则工作。

如果有不止一种输入类型,它将使用“返回”将它们提供给
反向工艺的玩家。

不要使用带有“组:”输入的配方,因为显然
不能变成输出。如果您尝试这样做,mod 将断言。



这个模组提供了一个函数库,使其他模组可以轻松地使用一种不依赖于传统“制作网格”的新型制作系统。它基本上使每个制作配方“无形”,仅取决于输入的数量,并且不需要用户记住将它们放入的特定安排。可以创建任意数量的制作“类型”,允许模组定义具有特定的专业制作站配方的子集和任意附加数据可以与制作配方相关联,以允许模组轻松地做其他花哨的事情。

包括一组高度可控的导入功能,能够导入默认 Minetest 的基于网格的制作配方,在此过程中可选择将它们从默认制作系统中删除。此导入系统不需要声明任何依赖项,它能够处理任何 mod 注册的任何配方。

由于这个模组只是一个库,它本身安装在游戏中时不会做任何事情。它旨在成为使用其功能的其他 mod 的依赖项。也就是说,有几个 WIP 模组展示了它的一些功能。例如:

Qwertymine3 的工作台模型的这个叉子向 Minetest 添加了一个工作表,可以导入所有现有的配方,并允许用户使用 simplecrafting 系统来制作它们。工作台的界面显示了它是如何工作的:

图片

原材料被放置在窗口左侧的十个库存槽块中。原材料的安排并不重要。窗口右侧的 8*6 大网格显示了所有可能由右侧原材料制成的产品。玩家所要做的就是从桌子上取出可能的产品堆栈并将其放入自己的库存中,所需的原材料将从原材料供应中扣除。

一个更复杂、更专业的例子是我的 WIP“研讨会”模式中的冶炼厂:

图片

这有点像熔炉,除了它允许将多个物品放置在“输入”和“燃料”库存中。可能的输出显示在右下方的按钮网格中,当存在燃料并选择输出时,冶炼厂处理类似于熔炉的配方。但是,这种安排允许使用默认熔炉所不具备的多种配方类型,例如实际的合金化反应(锡 + 3 铜 → 4 青铜)或需要熔剂的熔炼反应。

冶炼厂的配方导入功能展示了该系统传统工艺配方支持的灵活性。为冶炼厂定义了两个导入过滤器:

  • 第一个仅导入生产金属锭的“烹饪”配方作为输出,并在此过程中将它们从默认制作系统中删除。所以默认的熔炉仍然可以煮面包,但不能再将铜块煮成铜锭——你需要冶炼厂。
  • 第二个分析所有需要金属锭作为输入材料的“正常”工艺配方,并自动创建和注册一个冶炼厂配方,将该配方的输出转回金属锭 - 但不返回任何其他组件。因此,您可以将钢镐插入冶炼厂并将其熔化成三个铁锭,但您无法将棍子取回。此过滤器不会从默认制作系统中删除任何内容,它只会从头开始创建新配方。任何其他定义金属消耗配方的模组都将自动以这种方式创建回收配方,无需特定操作来支持它。

最后,simplecrafting_lib 包括一个基本的制作指南,可以通过单个 API 调用向用户显示。It lists all of the possible outputs that can be made for a given crafting type in the upper grid, and when an output is selected it shows all possible combinations of inputs that can be used to craft it in the lower half. 此屏幕截图显示了制作台的制作指南:

图片