一. 老规矩现有Item再有工具,先注册一个EXAMPLE_SWORD(示例剑)
二. 创建一个枚举类ExampleTier,实现 Tier 接口
Tier可以用于表示Minecraft中自定义工具的等级或品质
如果想要其他工具实现其他接口就行了,如镐(pickaxe)等等...
public enum ExampleTier implements Tier {
private final int level;
private final int uses;
private final float speed;
private final float damage;
private final int enchantmentValue;
private final Supplier<Ingredient> repairIngredient;
@Override
public int getUses() {
return this.uses;
}
@Override
public float getSpeed() {
return this.speed;
}
@Override
public float getAttackDamageBonus() {
return this.damage;
}
@Override
public int getLevel() {
return this.level;
}
@Override
public int getEnchantmentValue() {
return this.enchantmentValue;
}
@Override
public Ingredient getRepairIngredient() {
return this.repairIngredient.get();
}
}
实现接口的方法及创建需要的变量
三. 创建构造方法
ExampleTier(int level, int uses, float speed, float damage, int enchantmentValue, Supplier<Ingredient> repairIngredient) {
this.level = level;
this.uses = uses;
this.speed = speed;
this.damage = damage;
this.enchantmentValue = enchantmentValue;
this.repairIngredient = repairIngredient;
}
参数含义
- level : 工具等级
- uses : 使用次数(耐久度)
- speed : 挖掘速度
- damage : 伤害
- enchantmentValue : 附魔等级
- repairIngredient : 修复材料
四. 创建实例对象
Example(3,2000,10F,100F,30,() -> Ingredient.of(Registry.EXAMPLE_ITEM_01.get()));
创建了一个等级为3,使用次数为2000,挖掘速度为10,伤害为100,附魔等级为30,修复材料为EXAMPLE_ITEM_01的工具材质
五. 调用实例
将注册改为如下形式
public static final Supplier<Item> EXAMPLE_SWORD=ITEMS.register("example_sword",
() ->new SwordItem(ExampleTier.Example,100,0.1f,new Item.Properties()));
附完整代码
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.crafting.Ingredient;
import java.util.function.Supplier;
public enum ExampleTier implements Tier {
Example(4,2000,10F,100F,30,() -> Ingredient.of(Registry.EXAMPLE_ITEM_01.get()));
private final int level;
private final int uses;
private final float speed;
private final float damage;
private final int enchantmentValue;
private final Supplier<Ingredient> repairIngredient;
ExampleTier(int level, int uses, float speed, float damage, int enchantmentValue, Supplier<Ingredient> repairIngredient) {
this.level = level;
this.uses = uses;
this.speed = speed;
this.damage = damage;
this.enchantmentValue = enchantmentValue;
this.repairIngredient = repairIngredient;
}
@Override
public int getUses() {
return this.uses;
}
@Override
public float getSpeed() {
return this.speed;
}
@Override
public float getAttackDamageBonus() {
return this.damage;
}
@Override
public int getLevel() {
return this.level;
}
@Override
public int getEnchantmentValue() {
return this.enchantmentValue;
}
@Override
public Ingredient getRepairIngredient() {
return this.repairIngredient.get();
}
}