我们本次在1.18.1中制作属于自己的工具物品
1.在模组包下新建一个items文件夹 -> 在文件夹中新建一个CustomItemTier.java文件(表示我们的自定义工具等级)
在原版的Minecraft中我们的工具等级大致为木头 -> 石头 -> 铁 -> 金 -> 钻石 -> 下界合金
:
每个工具等级的参数从左到右分别为:等级、耐久、挖掘速度、攻击力、附魔值(越大附到的平均属性越好)。
在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中的名称保持一致:
注:其他工具的做法完全类似,只不过在第二步中继承不同工具罢了(斧头:AxeItem,镐子:PickaxeItem,锄头:HoeItem,铲子:ShovelItem)
5.刷新项目,启动游戏测试