我们本次在1.18.1中制作属于自己的工具物品
1.在模组包下新建一个items文件夹 -> 在文件夹中新建一个CustomItemTier.java文件(表示我们的自定义工具等级)

cr3.jpg

在原版的Minecraft中我们的工具等级大致为木头 -> 石头 -> 铁 -> 金 -> 钻石 -> 下界合金

cr0.jpg

每个工具等级的参数从左到右分别为:等级、耐久、挖掘速度、攻击力、附魔值(越大附到的平均属性越好)。
在CustomItemTier.java中编辑:
package com.joy187.re8joymod.items;

import java.util.function.Supplier;

import net.minecraft.util.LazyLoadedValue;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.crafting.Ingredient;

public enum CustomItemTier implements Tier{
	    
	    //这是我们的自定义的工具等级,可以往下续写...
	    exampleToolTire(10, 120, 8.0F, 10.0F, 100,() -> {
	        return Ingredient.of(Items.DIAMOND);
	    }),
	    PreciseAttack(3, 2, 8.0F, 10.0F, 100,() -> {
	        return Ingredient.of(Items.DIAMOND);
	    });


	   private final int level;
	   private final int uses;
	   private final float speed;
	   private final float damage;
	   private final int enchantmentValue;
	   private final LazyLoadedValue<Ingredient> repairIngredient;

	   private CustomItemTier(int p_43332_, int p_43333_, float p_43334_, float p_43335_, int p_43336_, Supplier<Ingredient> p_43337_) {
	      this.level = p_43332_;
	      this.uses = p_43333_;
	      this.speed = p_43334_;
	      this.damage = p_43335_;
	      this.enchantmentValue = p_43336_;
	      this.repairIngredient = new LazyLoadedValue<>(p_43337_);
	   }

	   public int getUses() {
	      return this.uses;
	   }

	   public float getSpeed() {
	      return this.speed;
	   }

	   public float getAttackDamageBonus() {
	      return this.damage;
	   }

	   public int getLevel() {
	      return this.level;
	   }

	   public int getEnchantmentValue() {
	      return this.enchantmentValue;
	   }

	   public Ingredient getRepairIngredient() {
	      return this.repairIngredient.get();
	   }

//	   @javax.annotation.Nullable public net.minecraft.tags.Tag<net.minecraft.world.level.block.Block> getTag() { return net.minecraftforge.common.ForgeHooks.getTagFromVanillaTier(this); }
}
2.在items文件夹下新建一个.java文件用于制作一把剑(ItemPreAttack.java为例):

ItemPreAttack.java

package com.joy187.re8joymod.items;

import com.joy187.re8joymod.Main;

import net.minecraft.world.item.Item;
import net.minecraft.world.item.SwordItem;
                                    //我们要做一把剑,就继承原版的剑
public class ItemPreAttack extends SwordItem{
    public ItemPreAttack() {
            //各参数:工具等级,伤害,攻速,放在哪个物品栏
        super(CustomItemTier.PreciseAttack,1000000001,-2,new Item.Properties().tab(Main.TUTORIAL_TAB));
    }
}
3.在ItemInit中添加物品的注册信息:
    public static RegistryObject<Item> PREATTACK = register("preciseattack",()->
    {
        return new ItemPreAttack();
    });
4.在resources/assets/lang文件夹中的en_us.json添加物品语言信息:
	"item.re8joymod.preciseattack": "Precise Strike",
在assets/models/item中新建我们物品的模型.json文件(命名与之前ItemInit.java中的名称字符串保持一致):

preciseattack.json

{
	"parent": "item/handheld",
	"textures": {
		"layer0": "re8joymod:item/special_strike"
	}
}
在textures/item中添加我们的贴图文件,名称与上面.json中layer0中的名称保持一致:

cr1.jpg

注:其他工具的做法完全类似,只不过在第二步中继承不同工具罢了(斧头:AxeItem,镐子:PickaxeItem,锄头:HoeItem,铲子:ShovelItem)
5.刷新项目,启动游戏测试

2022-02-27_16.17.59.png

我们的这把剑就成功显示了!
本内容为合法授权发布,文章内容为作者独立观点,不代表开发云立场,未经允许不得转载。

CSDN开发云