准备工作
需要创建的目录
基础目录
第一步,按照build.gradle
文件中com.lcl.godstick
创建目录,当然这里只是我自己的路径,你可以按照自己的需求修改
在该路径下创建一个主类
其中代码如下
@Mod(ModBaseInfoUtil.MOD_ID)
public class Main {
private static final Logger LOGGER = LogUtils.getLogger();
public Main() {
// 总线
IEventBus modEvenBus = FMLJavaModLoadingContext.get().getModEventBus();
}
}
代码解析
@Mod(ModBaseInfoUtil.MOD_ID)
中的ModBaseInfoUtil.MOD_ID
为build.gradle
文件中godstick
,当然这里只是我自己的名称,你可以按照自己的需求修改
private static final Logger LOGGER = LogUtils.getLogger();
这个是在控制台输出日志的,通过使用LOGGER.
在idea中可以看到其中可以使用的方法,常用的有LOGGER.info
:正常级别日志打印
LOGGER.debug
:调试级别日志打印
LOGGER.error
:错误日志打印
定义一个Main的无参构造,其中加入代码
IEventBus modEvenBus = FMLJavaModLoadingContext.get().getModEventBus();
物品目录
com.lcl.godstick
下创建items
目录,并在items
中创建ModItems
类,我代码中的godstick
和tab
目录可以不用创建,我只是为了区分是那个类目,看个人需求创建
resources
中创建assets
下创建godstick
,在godstick
中创建
lang
:放语言文件(en_us.json:英文;zh_cn.json:简体中文)
models
:放定义物品模型json(为了区分是方块还是物品,在其中创建block
和item
)
textures
:放物品模型(为了区分是方块还是物品,在其中创建block
和item
)
到这里,准备工作就正式完成了,可以开始开发自己的第一个物品
正式开始
物品注册类
找到目录java.com.lcl.godstick.items
中刚刚创建ModItems
类,添加代码
public class ModItems {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ModBaseInfoUtil.MOD_ID);
}
并且修改Main类中的无参构造代码
public Main() {
IEventBus modEvenBus = FMLJavaModLoadingContext.get().getModEventBus();
ModItems.ITEMS.register(modEvenBus);
}
物品注册类代码解析
DeferredRegister.create()
使用这个方法在我们的mod(ModBaseInfoUtil.MOD_ID
)中创建一个ForgeRegistries.ITEMS
的注册实体
Main类代码解析
将物品注册类加入到总线中
物品类
在java.com.lcl.godstick.items
中创建GodStickItem
类,并且继承Item,继承之后会有红色波浪下划线,光标在红色波浪下划线上,Alt+Enter自动生成构造构造方法
之后代码如下
public class GodStickItem extends Item {
public GodStickItem(Properties p_41383_) {
super(p_41383_);
}
}
然后修改注册类中的代码将我们自己的物品注册进去
public class ModItems {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ModBaseInfoUtil.MOD_ID);
public static final RegistryObject<Item> GodStickItem = ITEMS.register("god_stick_item", () -> new GodStickItem(new Item.Properties().defaultDurability(20).tab(CreativeModeTab.TAB_TOOLS).fireResistant().rarity(Rarity.COMMON)));
}
物品注册类代码解析
ITEMS.register()
方法中第一个参数为我们物品的注册名,第二个参数是我们的物品,由于我们的物品类中有构造方法,所以在new的时候需要入参即new Item.Properties()
,它代表我们物品拥有的特性
.defaultDurability()
:默认耐久
.tab()
:在那个栏目,我这里是放在了工具栏
.fireResistant()
:抗火
.rarity()
:稀有度,我这里的稀有度是普通
具体还有那些枚举可以看我的枚举整理:https://blog.csdn.net/weixin_51187178/article/details/131961809
语言文件
en_us.json:
{
"item.godstick.god_stick_item" : "GodStick"
}
zh_cn.json:
{
"item.godstick.god_stick_item" : "神棍"
}
语言文件解析
item.godstick.god_stick_item
中,后面的是物品展示的名称
item
:代表是物品
godstick
:代表一开始配置的mod_id
god_stick_item
:代表物品的注册名
物品模型json
在item下创建一个注册名.json的文件,内容如下
{
"parent" : "minecraft:item/generated",
"textures" : {
"layer0" : "godstick:item/god_stick_item"
}
}
物品模型
存放PNG格式的图片,图片名为物品模型json中god_stick_item
,该图片为物品在游戏中展示的模型
注意每个文件的名字,模型json中订单的模型文件名一定要对应,不然可能出现物品没有模型的情况,语言文件中的名字和注册名要对应,不然会展示item.godstick.god_stick_item
结束!!!运行runClient体验吧
扩展
除了以上的操作可以新增自己的物品外,还有其他方法
创建物品
直接在我们的物品注册类中新建
public static final RegistryObject<Item> GodStickItem = ITEMS.register("god_stick_item", () -> new Item(new Item.Properties().defaultDurability(20).tab(CreativeModeTab.TAB_TOOLS).fireResistant().rarity(Rarity.COMMON)));
其中new Item()
还可以使用其他mc自带的item,例如SwordItem(剑)等,这种的话就不需要自己手动配置模型等内容,游戏中出现的模型为mc原版模型