添加各种功能物品
1. 添加食物
-
食物物品的添加比较简单,在实例化物品对象时,设置Setting参数就可以注册为食物
public static final Item GREEN_APPLE_FOOD = new Item(new Item.Settings() .food((new FoodComponent.Builder()) .hunger(4) .saturationModifier(0.3F) .build()) .maxCount(64)); -
然后像注册物品一样注册食物就可以
Registry.register(Registry.ITEM, new Identifier("demo", "green_apple_food"), GREEN_APPLE_FOOD); -
添加相应的模型和翻译词条后,进入游戏测试是否添加成功。
-
FoodComponent.Builder()的方法:hunger(int hunger)设置回复饥饿值。saturationModifier(float saturationModifier)设置回复饱食度。meat()设置是否为肉食,也就是是否能给狗食用。alwaysEdible()设置是否能在任何时候食用,还是只能在饥饿值不满时食用。snack()设置是否为小吃 (不了解作用,原版只有干海带有这个属性)调整食物食用速度,原版中除了干海带之外的食物食用速度都是一样的,干海带较快(感谢评论区Amoyensis同学的纠正)。statusEffect(StatusEffectInstance effect, float chance)添加药水效果。StatusEffectInstance effect参数:药水效果。float chance获取药水效果的概率(1.0F 为100%获取)。
build()构建食物,必须调用,必须最后调用。
2. 添加护甲
-
添加护甲最重要的是设置护甲的材料属性,这里新建一个类,实现
ArmorMaterial接口 (参考原版ArmorMaterials类)-
新建一个枚举类,实现
ArmorMaterial接口,代码如下:public enum DemoArmorMaterial implements ArmorMaterial { WOOL("wool", 5, new int[]{1,3,2,1}, 15, SoundEvents.BLOCK_WOOL_PLACE, 0.0F, () -> { return Ingredient.ofItems(Items.WHITE_WOOL); }); private static final int[] BASE_DURABILITY = new int[]{13, 15, 16, 11}; private final String name; private final int durabilityMultiplier; private final int[] protectionAmounts; private final int enchantAbility; private final SoundEvent equipSound; private final float toughness; private final Lazy<Ingredient> repairIngredientSupplier; private WoolArmorMaterial(String name, int durabilityMultiplier, int[] protectionAmounts, int enchantAbility, SoundEvent equipSound, float toughness, Supplier<Ingredient> ingredientSupplier) { this.name = name; this.durabilityMultiplier = durabilityMultiplier; this.protectionAmounts = protectionAmounts; this.enchantAbility = enchantAbility; this.equipSound = equipSound; this.toughness = toughness; this.repairIngredientSupplier = new Lazy(ingredientSupplier); } @Override public int getDurability(EquipmentSlot slot) { return BASE_DURABILITY[slot.getEntitySlotId()] * this.durabilityMultiplier; } @Override public int getProtectionAmount(EquipmentSlot slot) { return this.protectionAmounts[slot.getEntitySlotId()]; } @Override public int getEnchantability() { return this.enchantAbility; } @Override public SoundEvent getEquipSound() { return this.equipSound; } @Override public Ingredient getRepairIngredient() { return (Ingredient)this.repairIngredientSupplier.get(); } @Override @Environment(EnvType.CLIENT) public String getName() { return this.name; } @Override public float getToughness() { return this.toughness; } }- 名称(
name),稍后会用做“护甲标签”。 - 耐久因子(
durabilityMultiplier),基础数值乘以耐久因子即为最终耐久。 - 护甲值(
armorValues),或者原版代码中的“保护点数(Protection Amounts)” ,这是个整型数组。 - 附魔能力(
EnchantAbility),代表了护甲在附魔时得到高级附魔或者多个附魔的概率。 - 声音事件(
equipSound),用在原版护甲的声音事件是SoundEvents.ITEM.EQUIP.ARMOR.X, X是护甲的类型。 - 护甲韧性(
toughness). 这是第二个保护值,遭受高伤害时护甲会更加坚韧,掉耐久少(译注:只有钻石护甲有这个参数)。 - 修复材料(
repairIngredient),这是一个Supplier<Ingredient>实例而不是物品(Item)。 - 基础耐久值(
BASE_DURABILITY), 这里采用原版的{13, 15, 16, 11}。
- 名称(
-
-
创建护甲四件套物品,添加到自定义创造标签栏中(若要添加自定义功能,可新建继承自
ArmorItem的类)public static final Item WOOL_HELMET = new ArmorItem(DemoArmorMaterial.WOOL, EquipmentSlot.HEAD, (new Item.Settings().group(DEMO_GROUP))); public static final Item WOOL_CHESTPLATE = new ArmorItem(DemoArmorMaterial.WOOL, EquipmentSlot.CHEST, (new Item.Settings().group(DEMO_GROUP))); public static final Item WOOL_LEGGINGS = new ArmorItem(DemoArmorMaterial.WOOL, EquipmentSlot.LEGS, (new Item.Settings().group(DEMO_GROUP))); public static final Item WOOL_BOOTS = new ArmorItem(DemoArmorMaterial.WOOL, EquipmentSlot.FEET, (new Item.Settings().group(DEMO_GROUP))); -
注册护甲四件套物品
Registry.register(Registry.ITEM, new Identifier("demo", "wool_helmet"), WOOL_HELMET); Registry.register(Registry.ITEM, new Identifier("demo", "wool_chestplate"), WOOL_CHESTPLATE); Registry.register(Registry.ITEM, new Identifier("demo", "wool_leggings"), WOOL_LEGGINGS); Registry.register(Registry.ITEM, new Identifier("demo", "wool_boots"), WOOL_BOOTS); -
添加材质
- 像添加其他物品材质一样添加护甲四件套的物品材质。
- 新建目录
\resources\assets\minecraft\textures\models\armor - 在armor目录添加护甲的穿戴材质
wool_layer_1.png和wool_layer_2.png,材质可参考原版材质。(ctrl+shift+n查找goldern_layer_1.png和goldern_layer_2.png)
-
添加翻译词条
"item.demo.wool_helmet": "Wool Helmet", "item.demo.wool_chestplate": "Wool Chestplate", "item.demo.wool_leggings": "Wool Leggings", "item.demo.wool_boots": "Wool Boots", -
运行游戏,查看效果
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BZFIJS2G-1584852239996)(./Resource/image/15.png)]](https://i-blog.csdnimg.cn/blog_migrate/2d5a2a1065782691c020c65a2882d8b7.png)
3. 添加工具(武器)
添加工具最重要的是设置工具的材料属性,这里新建一个类,实现ToolMaterial接口 (参考原版ToolMaterials类)
-
新建一个枚举类,实现
ToolMaterial接口,代码如下:public enum DemoToolMaterials implements ToolMaterial { WOOL(0, 30, 1.0F, 0.0F, 20, () -> { return Ingredient.fromTag(ItemTags.WOOL); }); private final int miningLevel; private final int itemDurability; private final float miningSpeed; private final float attackDamage; private final int enchantability; private final Lazy<Ingredient> repairIngredient; private DemoToolMaterials(int miningLevel, int itemDurability, float miningSpeed, float attackDamage, int enchantibility, Supplier<Ingredient> repairIngredient) { this.miningLevel = miningLevel; this.itemDurability = itemDurability; this.miningSpeed = miningSpeed; this.attackDamage = attackDamage; this.enchantability = enchantibility; this.repairIngredient = new Lazy(repairIngredient); } @Override public int getDurability() { return this.itemDurability; } @Override public float getMiningSpeed() { return this.miningSpeed; } @Override public float getAttackDamage() { return this.attackDamage; } @Override public int getMiningLevel() { return this.miningLevel; } @Override public int getEnchantability() { return this.enchantability; } @Override public Ingredient getRepairIngredient() { return (Ingredient) this.repairIngredient.get(); } }miningLevel:挖掘等级itemDurability:工具耐久miningSpeed:挖掘速度attackDamage:攻击伤害enchantability:附魔能力repairIngredient:修复材料
-
创建工具(以斧头为例,其他工具和武器类似)
-
由于
AxeItem类的构造函数是protected修饰的,不能在包外实例化,所以新建一个类,继承自AxeItem类,同样的还有PackaxeItem类。public class WoolAxeItem extends AxeItem { public WoolAxeItem(Settings settings) { super(DemoToolMaterials.WOOL, 6.0F, -3.2F, settings); } }AxeItem第二个参数为攻击伤害,工具总伤害还要加上材料基础伤害AxeItem第三个参数为攻击速度
-
实例化对象
public static final Item WOOL_AXE = new WoolAxeItem((new Item.Settings().group(DEMO_GROUP))); -
注册物品对象
Registry.register(Registry.ITEM, new Identifier("demo", "wool_axe"), WOOL_AXE);
-
-
添加材质
{ "parent": "item/handheld", //手持工具样式 "textures": { "layer0": "demo:item/wool_axe" } } -
添加翻译词条
"item.demo.wool_sword": "Wool Sword", "item.demo.wool_axe": "Wool Axe", "item.demo.wool_pickaxe": "Wool Pickaxe", "item.demo.wool_shovel": "Wool Shovel", "item.demo.wool_hoe": "Wool Hoe", -
运行游戏,查看效果
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9VnlEjM3-1584852240006)(./Resource/image/16.png)]](https://i-blog.csdnimg.cn/blog_migrate/09c41d96465d357dd6bbf8bb5650f827.png)
本文详细介绍如何在Minecraft中自定义添加食物、护甲和工具,包括设置食物回复值、护甲属性及工具材料特性,提供代码示例并指导模型与翻译词条的添加。
5054

被折叠的 条评论
为什么被折叠?



