我们首先在com.zunipe.item下创建一个名为MItemTier的枚举类
让这个类实现IItemTier接口
package com.zunipe.items.tier;
import com.zunipe.items.ItemLoader;
import net.minecraft.item.IItemTier;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.LazyValue;
import java.util.function.Supplier;
public enum MItemTier implements IItemTier
{
GRASS(0, 100, 1.6F, 0.0F, 15, () -> {
return Ingredient.of(ItemLoader.grassIngot.get());
});
private final int level;
private final int uses;
private final float speed;
private final float damage;
private final int enchantmentValue;
private final LazyValue<Ingredient> repairIngredient;
private MItemTier(int p_i48458_3_, int p_i48458_4_, float p_i48458_5_, float p_i48458_6_, int p_i48458_7_, Supplier<Ingredient> p_i48458_8_)
{
this.level = p_i48458_3_;
this.uses = p_i48458_4_;
this.speed = p_i48458_5_;
this.damage = p_i48458_6_;
this.enchantmentValue = p_i48458_7_;
this.repairIngredient = new LazyValue<>(p_i48458_8_);
}
@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();
}
}
我们看到这一段代码
GRASS(0, 100, 1.6F, 0.0F, 15, () -> {
return Ingredient.of(ItemLoader.grassIngot.get());
});
这里有6个参数,第一个是工具的等级,在原版中木头和金是0级,石头则是1,铁是2,钻石是3,下界合金是4。
第二个参数则是工具的耐久,第三个是攻击的速度,第四个则是攻击伤害,第五个是有关附魔的能力值,能力值越高附魔得到的属性就越好,在原版中金的附魔属性最高,有22,这里我则设置为15和原版中木头的一样。
第六个则是维修这个工具或武器所需要的材料。
我们有了草锭,肯定少不了草剑,新建ItemGrassSword类
ItemGrassSword
package com.zunipe.items;
import com.zunipe.groups.GroupLoader;
import com.zunipe.items.tier.MItemTier;
import net.minecraft.item.Item;
import net.minecraft.item.SwordItem;
public class ItemGrassSword extends SwordItem
{
public ItemGrassSword()
{
super(MItemTier.GRASS, 2, 1.0F, new Item.Properties().tab(GroupLoader.moreItemGroup));
}
}
构造函数中设置了武器的属性,攻击力,攻击速度以及创造物品栏。
可以发现,关于这个攻击力我们在MItemTier里面也有设置,为什么会存在两个呢?
我们进入继承的SwordItem里看看就会发现,武器真正的攻击力是二者的和。
this.attackDamage = (float)p_i48460_2_ + p_i48460_1_.getAttackDamageBonus();
所以我们的草剑的攻击力则是0+2+1=3(这里的1为物品的基础攻击力)
我们同样在ItemLoader里面注册我们的草剑。
public class ItemLoader
{
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, Utils.MODID);
public static final RegistryObject<Item> grassIngot = ITEMS.register("grass_ingot", ItemGrassIngot::new);
public static final RegistryObject<Item> grassSword = ITEMS.register("grass_sword", ItemGrassSword::new);
}
并且添加语言文件
{
"item.moreitem.grass_ingot": "草锭",
"itemGroup.moreItemGroup": "更多物品",
"item.moreitem.grass_sword" : "草剑"
}
让我们进游戏看看
武器的材质可以自己添加。