斧 + 镐 1.20.1 Forge 长线教程计划
本篇教程的视频
本篇教程的源代码
GitHub地址:TutorialMod-1.20.1-Forge-PickaxeAxeItem
注册物品类
通过上一期的工具教程,大家应该对工具有了一定的理解
那么,本期教程我们来制作一个组合型的工具,我们来制作一个斧头 + 镐子的组合型工具,让它既有镐子的功能又有斧头的功能
那么首先,我们需要新建一个物品类,PickaxeAxeItem,然后让它继承AxeItem,并创建相应的构造函数
1 | public class PickaxeAxeItem extends AxeItem { |
可能有的同学会一上来就选择直接继承Item类,但不妨多想一想,斧头本身有哪些功能?
斧头不仅可以砍树挖木头对吧?它还有给原木去皮、给生锈或上蜡的铜块抛光或者去蜡
而斧头的这部分逻辑,是Item类本身没有的,它是在AxeItem类里面编写的(当然这里另外说一句,Forge这里对原版的源代码进行了特化处理,感兴趣的同学可以去看看Forge这里的源码和Fabric那边的源码有什么不同)
所以如果我们直接继承Item类,那么这部分逻辑我们就得自己去写了,所以为了简化我们的逻辑,我们可以直接继承AxeItem
这里呢也就是告诉大家,有时候我们想实现某些物品、方块相应的功能时,不妨先想想有没有已经实现的相似功能的物品、方块,如果有,那么就可以拿过来借用一下,也可以简化代码
好,那么接下来我们需要重写一些方法,来实现我们的逻辑
1 |
|
这里我们重写getDestroySpeed和isCorrectToolForDrops方法,显而易见,一个方法是获取破坏方块时的速度,一个是判断它是否是该工具能够采集并掉落的方块
两个方法都是使用Tag来判断,原版也是利用Tag进行判断的,还记得我们在很早之前写战利品列表时写的Tag吗?
这里我们用到了自定义的Tag,待会到ModBlockTags里面注册我们的新标签,并在数据生成中写具体的内容
那么到这里为止,我们的物品类就写好了
方块标签注册
这里我们先把自定义的标签给注册了
1 | public static final TagKey<Block> PICKAXE_AXE_MINEABLE = createForgeTag("tools/pickaxe_axe_mineable"); |
而后我们来注册物品
物品注册
1 | public static final RegistryObject<Item> PICKAXE_AXE_ITEM = ITEMS.register("pickaxe_axe_item", |
注意注册物品时,使用的物品类是我们刚刚写的PickaxeAxeItem类,写法与工具类似,也要写它的攻击伤害和攻击速度,毕竟它本质还是工具
另外,在物品属性编写时,我们还加上了fireResistant方法,这个是让我们的物品掉落物具有抗火保护,掉火里或者岩浆里都不会被烧毁
原版只有下界合金类的工具有这个抗火保护
然后不要忘了将它添加到物品栏里
1 | pOutput.accept(ModItems.PICKAXE_AXE_ITEM.get()); |
数据文件
那么最后就是一堆数据文件
方块标签
我们为新的自定义标签添加具体的方块
1 | tag(ModBlockTags.PICKAXE_AXE_MINEABLE) |
这里我们可以将原版的斧头和镐子的标签合并到一起,这样我们的工具既可以挖斧头能挖的,又能挖镐子能挖的了
语言文件
1 | add(ModItems.PICKAXE_AXE_ITEM.get(), "Pickaxe Axe"); |
物品模型文件
1 | handheldItem(ModItems.PICKAXE_AXE_ITEM); |
同样我们还是和工具一样使用手持物品的模型
那么最后不要忘记物品的贴图,之后就可以进入游戏进行测试了







