我的世界Java版1.21.4的Fabric模组开发教程(四)创建高级物品:武器

这是适用于Minecraft Java版1.21.4的Fabric模组开发系列教程专栏第四章——创建高级物品:武器。想要阅读其他内容,请查看或订阅上面的专栏。

创建自定义武器与创建食物的写法比较相似,都是在自定义类中创建一些物品的自定义行为,然后在注册物品时应用。此外,常规的物品创建流程依然不变,详细内容请参考我的世界Java版1.21.4的Fabric模组开发教程(二)创建物品

创建武器的物品类、纹理、模型文件和模型描述文件并在语言文件中添加对应的翻译键

在本章中,我们创建一个名为究极神剑(best_sword)的武器,它重要特点就是拥有高达100点的伤害

这是常规的物品创建流程。已经在本系列教程第二章进行了详细讲解,此处不再过多赘述。

1.创建com/example/test/item/BestSword.java作为物品类,使其继承SwordItem类并实现相关方法;

public class BestSword extends SwordItem {
    public BestSword(ToolMaterial material, float attackDamage, float attackSpeed, Settings settings) {
        super(material, attackDamage, attackSpeed, settings);
    }
    @Override
    public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
        tooltip.add(Text.literal("锋利无比!").formatted(Formatting.GRAY));
    }
}

注意,此处物品类继承了Item的子类SwordItemSwordItem类提供了构造剑类物品的构造器,可以简化创建剑类物品的过程;

2.创建物品纹理文件assets/test/textures/item/best_sword.png
在这里插入图片描述
3.创建模型文件assets/test/models/item/best_sword.json

{
	"parent": "minecraft:item/handheld",
	"textures": {
		"layer0": "test:item/best_sword"
	}
}

4.创建模型描述文件assets/test/items/best_sword.json

{
	"model":{
		"type": "minecraft:model",
		"model": "test:item/best_sword"
	}
}

5.编辑语言文件,添加一对键值。

{
	...
	"item.test.best_sword":"究极神剑"
}

为武器添加自定义属性和行为

在游戏中,剑和镐、斧、锹、锄等均属于工具类物品。通常,在注册这些物品时使用ToolMatetrial对象设置物品的耐久度、修复材料、挖掘速度等公共属性。


工具材料记录ToolMatetrial

ToolMatetrial记录用于设置工具类物品的基础属性。在创建ToolMatetrial对象时,可以直接使用它的构造方法;

public ToolMaterial(TagKey<Block> tagKey, int i, float f, float g, int j, TagKey<Item> tagKey2) {
    this.incorrectBlocksForDrops = tagKey;
    this.durability = i;
    this.speed = f;
    this.attackDamageBonus = g;
    this.enchantmentValue = j;
    this.repairItems = tagKey2;
}

其中传递了很多参数,包括:

  • TagKey<Block> tagKey:指定可挖掘方块标签,可以定义工具可以有效挖掘的方块类型,传递一个方块标签;
  • int i:指定耐久度,即工具彻底损坏前的使用次数。参考:钻石剑耐久度为1561;
  • float f:指定挖掘速度倍率,即物品破坏方块的速度。参考:钻石镐的挖掘速度倍率为8.0;
  • float g:指定额外攻击加成,在物品本身攻击力的基础上添加额外攻击力;
  • int j:指定附魔权重,指的是使用附魔台给工具附魔时,出现高等级的附魔条目的概率;
  • TagKey<Item> tagKey2:指定修复材料,指的使用铁砧修复工具时使用的材料。传递一个物品标签。

在BestSword.java中声明静态成员变量BEST_SWORD_TOOL_MATERIAL,类型为ToolMatetrial。使用ToolMatetrial类的构造方法初始化变量;

public static final ToolMaterial BEST_SWORD_TOOL_MATERIAL = new ToolMaterial(null,455,0,2,22,ItemTags.REPAIRS_IRON_ARMOR);

由于剑类物品不可破坏方块,因此第一个参数可以为null;第二个参数到最后一个参数分别设置了:耐久度为455、挖掘速度倍率为0、额外攻击加成为2、附魔权重22以及修复材料为ItemTags.REPAIRS_IRON_ARMOR,即铁锭。查看更多物品标签请参考ItemTags.java


剑物品类SwordItem

SwordItem类是Item类的子类,专门用于配置剑类武器的其他独有属性。在自定义物品类中重写SwordItem类的构造方法后,注册物品时需要调用此构造方法,来为剑类武器设置更多属性;

public SwordItem(ToolMaterial material, float attackDamage, float attackSpeed, Item.Settings settings) {
	super(material.applySwordSettings(settings, attackDamage, attackSpeed));
}

构造方法传递了四个参数,包括:

  • ToolMaterial material:工具材料对象;
  • float attackDamage:指定武器攻击力,传递一个浮点(float)型数据,从0开始计算;
  • float attackSpeed:指定攻击速度,传递一个浮点(float)类型数据,此处有值为4的基础攻击速度;
  • Item.Settings settings:物品基本配置对象。

只有使用此构造方法,才能设置剑类武器的攻击力和攻击速度,而ToolMatetrial类的构造方法无法设置。


在游戏注册表中注册武器并将其添加到物品栏中

现在需要将写好的“究极神剑”在游戏注册表中注册,然后将其添加到物品组中。

1.在入口点类声明静态成员变量BEST_SWORD,此处的类型为自定义物品类的父类SwordItem,然后使用ModItems.register()方法将其注册到游戏注册表中;

public static final SwordItem BEST_SWORD = (SwordItem) ModItems.register(
			"best_sword",
			settings -> new BestSword(BestSword.BEST_SWORD_TOOL_MATERIAL,97f,1f,settings),
			new Item.Settings());

此处需要强制类型转换。在第二个参数使用自定义类的构造方法和默认配置对象的函数式,传递工具材料类ToolMaterial的对象并设置攻击力为100(武器伤害97+1+额外伤害加成2),攻击速度为5(基础攻击速度4+武器攻击速度1)。

2.在onInitialize()方法中,将“究极神剑”添加到“战斗用品”物品组中;

ItemGroupEvents.modifyEntriesEvent(ItemGroups.COMBAT).register(entries -> entries.add(BEST_SWORD));

此处使用的物品组注册键为ItemGroups.COMBAT

启动游戏测试

1.打开游戏测试“究极神剑”所在物品组;
在这里插入图片描述
可以看到“究极神剑”在“战斗用品”物品组结尾。

2.鼠标悬停在“究极神剑”上,可以看到攻击力为100,攻击速度为5。
在这里插入图片描述

本章小结

本章详细阐述了在游戏中添加自定义武器物品的具体流程,需要提前学习创建常规自定义物品的基础知识。总的来说,本章内容难度不大,篇幅较短,对新手模组开发者比较友好。感谢各位的阅读,有兴趣可以订阅此专栏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值