Minecraft 1.18.1、1.18.2模组开发 04.工具物品

我们本次在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

我们的这把剑就成功显示了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay_fearless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值