MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针。
如果在编辑的过程中遇到了什么问题,可以去讨论板提问。
为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证。
MCBBS Wiki GitHub群组已上线!
您可以在回声洞中发表吐槽!
服务器状态监控。点击进入
本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>
用户:MashKJo/1.12.2模组开发教程/5.第一个物品:修订间差异
(// Edit via Wikiplus) |
(// Edit via Wikiplus) |
||
第16行: | 第16行: | ||
如,笔者这里添加了一个红宝石(Ruby)物品: |
如,笔者这里添加了一个红宝石(Ruby)物品: |
||
<code>src/main/java/net/tutorial_mod/item/TutorialModItems.java:</code> |
<code>src/main/java/net/tutorial_mod/item/TutorialModItems.java:</code> |
||
public static Item RUBY = new Item().setRegistryName(TutorialMod.MODID, "ruby") |
public static Item RUBY = new Item().setRegistryName(TutorialMod.MODID, "ruby") |
||
.setUnlocalizedName("ruby") |
.setUnlocalizedName("ruby") |
||
.setCreativeTabs(CreativeTabs.MISC); |
.setCreativeTabs(CreativeTabs.MISC); |
||
笔者这里新建了一个类:TutorialModItems,来统一存放模组添加的所有物品实例——这是一个好习惯,建议读者也这么做。 |
|||
最后,再通过监听RegistryEvent.Register<Item>事件注册: |
|||
<code>src/main/java/net/tutorial_mod/item/ItemRegistryHandler.java:</code> |
|||
package net.tutorial_mod.item; |
|||
import static net.tutorial_mod.item.TutorialModItems.*; |
|||
import net.minecraft.item.Item; |
|||
import net.minecraftforge.event.RegistryEvent; |
|||
import net.minecraftforge.fml.common.Mod; |
|||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; |
|||
import net.tutorial_mod.TutorialMod; |
|||
@Mod.EventBusSubscriber(modid = TutorialMod.MODID) |
|||
public class ItemRegistryHandler { |
|||
@SubscribeEvent |
|||
public static void registerItems(RegistryEvent.Register<Item> event){ |
|||
event.getRegistry().register(RUBY); |
|||
} |
|||
} |
2024年12月5日 (四) 17:13的版本
所有物品都是net.minecraft.item.Item
类的实例。要加入一个新物品,可以直接实例化Item类,也可以先继承Item类再实例化。
对于没有什么额外行为的物品(一般这种物品会被设计为合成材料或生物掉落物),一般都选择前者;反之则选择后者。Item类有许多setter和getter。限于我们目前的知识水平,getter笔者暂且不讲(后面就知道为什么了),先讲setter。
Item类包括但不限于如下的一些setter:
- setCreativeTab:用于设定物品所在的创造模式物品栏(CreativeTabs),传入一个CreativeTabs对象,原版所有的创造模式物品栏都在CreativeTabs类中以静态字段的方式存在
- setUnlocalizedName:用于设定物品在lang文件中所使用的本地化键名,传入一个字符串,如传入
"example_item"
这个字符串,那么它在lang文件中的本地化键名就是item.example_item.name
- setMaxStackSize:用于设定物品在格子中的最大堆叠数(默认为64)
- setMaxDamage:这个setter的含义有些复杂,在一定情况下,用于设定物品能被损耗的最大次数——其实就是耐久值
- setNoRepair:用于设定物品不可被修复
- setContainerItem:用于设定该物品的“容器物品”——传入一个Item对象,实际效果为在工作台中参与合成后,设定的这个“ContainerItem”会留在工作台格子中
此外,不要忘了还要调用setRegistryName这一setter——这是Item类实现IForgeRegistryEntry<V>获得的方法。
上述setter的返回值是Item类型的,因此这代表着我们可以new完Item之后直接通过链式调用这些setter来设定该Item对象的一些属性;如果你是先继承了Item类,这些一般在构造方法中被调用:
如,笔者这里添加了一个红宝石(Ruby)物品:
src/main/java/net/tutorial_mod/item/TutorialModItems.java:
public static Item RUBY = new Item().setRegistryName(TutorialMod.MODID, "ruby") .setUnlocalizedName("ruby") .setCreativeTabs(CreativeTabs.MISC);
笔者这里新建了一个类:TutorialModItems,来统一存放模组添加的所有物品实例——这是一个好习惯,建议读者也这么做。
最后,再通过监听RegistryEvent.Register<Item>事件注册:
src/main/java/net/tutorial_mod/item/ItemRegistryHandler.java:
package net.tutorial_mod.item; import static net.tutorial_mod.item.TutorialModItems.*; import net.minecraft.item.Item; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.tutorial_mod.TutorialMod; @Mod.EventBusSubscriber(modid = TutorialMod.MODID) public class ItemRegistryHandler { @SubscribeEvent public static void registerItems(RegistryEvent.Register<Item> event){ event.getRegistry().register(RUBY); } }