一个真正的食物
目前的钻石苹果只是一个普通的物品,只能看不能吃,这就非常蛋疼了。所以我们要将他变成一个真正的食物
——知识点1————————————————————
在MC中,并不是所有物品的父类都是Item。一般工具继承自ItemTool类,护甲继承自ItemArmor类,自然食物要继承ItemFood。(事实上,不管是ItemFood还是ItemArmor都派生自Item类)
当上一讲中,Item的构造方法是没有参数的。而ItemFood类则有三个:
super(amount, saturation, isWolfFood);
- 参数一 amount:int类型。该食物所恢复的饥饿值
- 参数二 saturation:单精度浮点。增加饱和度,2 * amount * saturation(不知道饱和度是什么请自行百度)
- 参数三 isWolfFood:boolean。狼是否能食用
——————————————————————————
打开DiamondApple.java,修改一下:
嗯,真香~
添加药水效果
——知识点1————————————————————
作为一个钻石苹果,当然要自带Buff啦
Forge为我们提供了这样一个方法:
setPotionEffect(Potion.XXX.id, duration, amplifier, probability);
- 参数一:药水类型。在MC中一共有二十三种类型,可以翻看net.minecraft.potion.Potion类
- 参数二 duration:int,作用时间。单位:s
- 参数三 amplifier:int,对应的药水等级。注意:Java是零基的!!
- 参数四 probability:float,触发几率。1.0为百分之百
算了,我还是把各种Potion ID列一下吧:
- 速度:moveSpeed
- 缓慢:moveSlowdown
- 急迫:digSpeed
- 挖掘疲劳:digSlowDown
- 力量:damageBoost
- 瞬间治疗:heal
- 瞬间伤害:harm
- 跳跃提升:jump
- 反胃:confusion
- 生命恢复:regeneration
- 抗性提升:resistance
- 防火:fireResistance
- 水下呼吸:waterBreathing
- 隐身:invisibility
- 失明:blindness
- 夜视:nightVision
- 饥饿:hunger
- 虚弱:weakness
- 中毒:poison
- 凋零:wither
- 生命提升:healthBoost
- 伤害吸收:absorption
- 饱和:saturation
在满饥饿值时食用,Forge默认不会同意的。我们可以添加语句,保证任何时候都可以吃:
this.setAlwaysEdible();
——————————————————————————
添加如下代码,我这里是伤害吸收:
赶紧运行一下试试!!
——知识点2————————————————————
一些读者可能会意识到,像金苹果这样的食物光一个setPotionEffect方法是实现不了的。这里我们就要用到ItemFood类里的onFoodEaten方法
原方法如下(摘自ItemFood类):
protected void onFoodEaten(ItemStack stack, World worldIn, EntityPlayer player)
{