1. 熔炉配方基础入门
在Minecraft数据包开发中,熔炉配方是最基础也最实用的功能之一。我刚开始接触数据包时,第一个尝试修改的就是熔炉配方,因为它直观又简单。现在游戏中有三种主要的熔炉设备:普通熔炉、高炉和烟熏炉,它们各自对应不同的烧炼配方类型。
这三种熔炉的配方文件都存放在data/<命名空间>/recipes目录下(注意:从MC1.21开始,文件夹名称从复数形式"recipes"改为单数"recipe")。每个配方都是一个独立的JSON文件,命名规则建议遵循原版的风格。比如原版中煤炭的烧制配方命名为"coal_from_smelting_coal_ore",这种命名方式清晰表明了原料和产物的关系。
熔炉配方最棒的地方在于它的参数非常直观。你只需要定义好原料(ingredient)、产物(result)、获得的经验值(experience)和烧制时间(cookingtime)这几个关键参数,就能创建一个全新的烧炼配方。烧制时间以游戏刻(tick)为单位,20tick等于现实中的1秒,这个比例关系一定要记住。
2. 三种熔炉的配方设置
2.1 普通熔炉配方
普通熔炉的配方类型是"minecraft:smelting"。这是我用得最多的一种,因为它适用性最广。创建一个让金矿石烧炼出2个金锭的配方可以这样写:
{ "type": "minecraft:smelting", "category": "blocks", "ingredient": { "item": "minecraft:gold_ore" }, "result": { "id": "minecraft:gold_ingot", "count": 2 }, "experience": 1.5, "cookingtime": 200 }这里有几个实用技巧:category参数虽然不影响功能,但能帮助整理配方;count参数可以设置产出数量;experience设置的经验值支持小数,这对于平衡游戏很重要。
2.2 高炉配方开发
高炉(Blast Furnace)的配方类型是"minecraft:blasting"。高炉的特点是烧制速度是普通熔炉的两倍,但只能处理矿物类物品。下面是一个让铁矿石在高炉中快速烧炼的例子:
{ "type": "minecraft:blasting", "category": "blocks", "ingredient": { "item": "minecraft:iron_ore" }, "result": { "id": "minecraft:iron_ingot" }, "experience": 0.7, "cookingtime": 100 }注意高炉的cookingtime设置的是100tick(5秒),但因为高炉有速度加成,实际烧制时间会减半。这是很多新手容易忽略的细节。
2.3 烟熏炉配方技巧
烟熏炉(Smoker)使用"minecraft:smoking"类型,专用于食物类物品。我特别喜欢用它来做一些有趣的食谱修改,比如:
{ "type": "minecraft:smoking", "category": "food", "ingredient": { "item": "minecraft:potato" }, "result": { "id": "minecraft:baked_potato", "count": 2 }, "experience": 0.35, "cookingtime": 30 }这个配方让土豆在烟熏炉中快速烤制(仅1.5秒),而且产量翻倍。烟熏炉的烧制速度也是普通熔炉的两倍,但仅限于食物类物品。
3. 高级配方参数详解
3.1 复合原料与标签使用
熔炉配方不仅支持单一物品作为原料,还可以使用物品标签(tag)。这个功能非常强大,可以一次性为多个物品添加相同的烧炼配方。比如让所有木头都能烧制成木炭:
{ "type": "minecraft:smelting", "category": "blocks", "ingredient": { "tag": "minecraft:logs" }, "result": { "id": "minecraft:charcoal" }, "experience": 0.15, "cookingtime": 200 }使用tag后,所有被标记为"minecraft:logs"的木头都会适用这个配方。这在制作大型模组时能大大减少重复工作。
3.2 精确控制烧制参数
cookingtime参数虽然简单,但用好它能创造很多有趣的效果。比如制作一个需要长时间烧制但回报丰厚的配方:
{ "type": "minecraft:smelting", "category": "misc", "ingredient": { "item": "minecraft:netherrack" }, "result": { "id": "minecraft:nether_brick", "count": 4 }, "experience": 2.0, "cookingtime": 800 }这个配方需要40秒来烧制,但会产出4个下界砖和大量经验。这种设计可以用来平衡游戏中的资源获取。
4. 特殊熔炼设备配方
4.1 营火烹饪配方
营火使用"minecraft:campfire_cooking"类型,它的工作方式类似熔炉但不需要燃料。我常用它来做一些野外生存相关的配方:
{ "type": "minecraft:campfire_cooking", "category": "food", "ingredient": { "item": "minecraft:beef" }, "result": { "id": "minecraft:cooked_beef" }, "experience": 0.35, "cookingtime": 600 }营火配方的烧制时间通常较长(这里设置的是30秒),但胜在可以同时烧制多个物品且无需燃料。
4.2 切石机配方实例
虽然切石机不是熔炉,但它的配方系统也很相似,使用"minecraft:stonecutting"类型。一个实用的例子:
{ "type": "minecraft:stonecutting", "ingredient": { "item": "minecraft:stone" }, "result": { "id": "minecraft:stone_slab", "count": 2 } }切石机配方不需要设置时间和经验值,但可以通过count参数控制产出数量。这种配方在建筑类数据包中非常实用。
5. 实际开发中的经验分享
在开发熔炉配方数据包时,我踩过不少坑。第一个教训是命名空间问题 - 一定要确保你的命名空间是唯一的,不要使用"minecraft"作为自定义配方的命名空间,这会导致冲突。我建议使用你的数据包名称或作者名作为命名空间。
第二个常见问题是文件编码。JSON文件必须使用UTF-8编码保存,否则游戏无法正确读取。特别是在Windows系统上,记事本默认的编码可能会导致问题,推荐使用专业的代码编辑器如VS Code。
测试时,我习惯先创建一个简单的配方验证数据包是否加载成功,然后再逐步添加复杂内容。记得每次修改后都要使用/reload命令重新加载数据包,或者完全重启游戏以确保更改生效。
最后分享一个实用技巧:你可以利用原版的advancement系统来解锁特定的熔炉配方,实现科技树或进度解锁的效果。这需要配合谓词(predicate)使用,但能为你的数据包增加更多玩法深度。