MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

用户:MashKJo/1.12.2模组开发笔记/IRecipe接口详解:修订间差异

来自MCBBS Wiki
跳到导航 跳到搜索
无编辑摘要
第7行: 第7行:
== IRecipe接口中的方法 ==
== IRecipe接口中的方法 ==
=== boolean matches(InventoryCrafting inv, World worldIn) ===
=== boolean matches(InventoryCrafting inv, World worldIn) ===
这个方法用于判断合成原料是否“匹配上了”——换言之,就是判断玩家放入合成界面的物品及它们的摆放方式是否可以合成一个新物品。

这个方法传入了两个参数:第一个是InventoryCrafting类型的,你可以把这个类理解为“合成容器”,原版MC中合成容器有两种:一是工作台中9×9大小的合成容器,二是玩家背包里的4×4大小的合成容器。第二个参数是World类型的,代表玩家当前所处的world,这没什么好说的。


=== ItemStack getCraftingResult(InventoryCrafting inv) ===
=== ItemStack getCraftingResult(InventoryCrafting inv) ===

2024年10月24日 (四) 13:44的版本

几乎所有1.12.2的模组开发教程都会介绍新的自定义工作台配方(广义)的添加方法——只需要在resources/assets/modid/recipes路径下撰写一些.json文件就好了。实际上这说明这块内容确实很简单——因为大部分教程别说讲到方块实体了,能讲到附魔、药水效果这种比物品、方块稍微难一点的东西就算是谢天谢地了。毕竟照着规定的格式写.json文件谁不会呢?

不过你有没有想过——原版当中某些配方似乎并不是简单地通过撰写.json文件来实现的。比如你可以将两把不是满耐久的钻石镐叠加,合成为一把新的钻石镐,其耐久结合了合成前那两把钻石镐的耐久[1]。这种配方的实现显然并非依靠.json文件吧?

这就要请出我们今天的主角了——IRecipe接口(net.minecraft.item.crafting.IRecipe)。

IRecipe接口中的方法

boolean matches(InventoryCrafting inv, World worldIn)

这个方法用于判断合成原料是否“匹配上了”——换言之,就是判断玩家放入合成界面的物品及它们的摆放方式是否可以合成一个新物品。

这个方法传入了两个参数:第一个是InventoryCrafting类型的,你可以把这个类理解为“合成容器”,原版MC中合成容器有两种:一是工作台中9×9大小的合成容器,二是玩家背包里的4×4大小的合成容器。第二个参数是World类型的,代表玩家当前所处的world,这没什么好说的。

ItemStack getCraftingResult(InventoryCrafting inv)

boolean canFit(int width, int height)

ItemStack getRecipeOutput()

default NonNullList<ItemStack> getRemainingItems(InventoryCrafting inv)

default NonNullList<Ingredient> getIngredients()

default boolean isDynamic()

default String getGroup()

实战:自己实现IRecipe接口

注释与外部链接

  1. 当然,三个耐久值之间的关系并不是简单的a + b = c这种关系。