OP1115
本帖最后由 OP1115 于 2018-12-1 19:25 编辑

像原版的力量2的药水效果是如何做到增加伤害的呢
我试图通过事件来设置打出去的伤害值
但是貌似攻击事件中不允许设置

找了半天也没找到力量2相关药水的类
请问各位大佬哪里出了问题呢,或者给个原版力量 或 事件类 我参考一下。
先在此多谢各位大佬了

GiNYAi
net.minecraft.potion.PotionAttackDamage

清晨w
原版力量药水增加伤害是通过给实体添加Attribute实现的(毕竟原版没事件)
详见net.minecraft.potion.Potion.registerPotions()方法的第5行(Forge 1.12.2-14.23.4.2705/MCP snapshot_20171003)

OP1115
GiNYAi 发表于 2018-11-10 11:30
net.minecraft.potion.PotionAttackDamage

我在自己的药水类重写了PotionAttackDamage下唯一的一个方法getAttributeModifierAmount()并修改了它的返回值,发现并没有什么用处

OP1115
清晨w 发表于 2018-11-10 11:19
原版力量药水增加伤害是通过给实体添加Attribute实现的(毕竟原版没事件)
详见net.minecraft.potion.Potion. ...

我看了一下您说的指定方法的第五行 感觉也没有什么名堂 或者说不太懂

雪尼
使用 LivingHurtEvent 就好了

OP1115
雪尼 发表于 2018-11-12 09:38
使用 LivingHurtEvent 就好了

我在你说的这个事件里event.getEntityLiving().getAttackingEntity().getActivePotionEffect(PotionLoader.SuperArmor);
然后判断攻击者实体的药水效果
在event.setAmount(2);
直接崩溃

清晨w
很抱歉这么长时间没有回复,我所在的高中两周放一次假
那个方法的第五行在注册力量药水,仿照它即可
另外在编写mod之前,请确保您有一定的代码分析能力

tt36999
本帖最后由 tt36999 于 2018-12-1 17:21 编辑

除了使用事件的方法以外,你还可以使用registerPotionAttributeModifier在你的Potion构造方法内注册registerPotionAttributeModifier(SharedMonsterAttributes.ATTACK_DAMAGE,Uid,Amount,operation)
然后再Potion类内重载getAttributeModifierAmount
则可以直接修改玩家攻击伤害

如果你想要修改实体承受的伤害(比如  抗性提升附魔,原版抗性提升附魔就是直接在onLivingUpdate处理的)
你需要在事件处理器中监听onLivingHurt事件(该事件为处理其他伤害附加时的伤害,比如护甲,减伤)
或者监听onLivingDamage事件(该事件的伤害为已经完成附加附加的计算,该数值是将要在实体上减去血量的最终值)

OP1115
本帖最后由 OP1115 于 2018-12-1 19:24 编辑
tt36999 发表于 2018-12-1 17:14
除了使用事件的方法以外,你还可以使用registerPotionAttributeModifier在你的Potion构造方法内注册registe ...

除了使用事件的方法以外,你还可以使用registerPotionAttributeModifier在你的Potion构造方法内注册registerPotionAttributeModifier(SharedMonsterAttributes.ATTACK_DAMAGE,Uid,Amount,operation)
然后再Potion类内重载getAttributeModifierAmount
则可以直接修改玩家攻击伤害

上面这一段没看太明白


我曾尝试过在LivingDamageEvent事件中 获取攻击者的实体 然后再获取药水 然后再尝试修改伤害
代码如下

utmm.jpg

但是红线处代码存在问题 进游戏会直接崩溃
请问大佬我是不是哪里写错了呢
第一次接触药水这一方面 不太懂 希望大佬可以通熟的讲解一下 多谢

OP1115
本帖最后由 OP1115 于 2018-12-1 19:27 编辑
tt36999 发表于 2018-12-1 17:14
除了使用事件的方法以外,你还可以使用registerPotionAttributeModifier在你的Potion构造方法内注册registe ...

哈哈哈 我成功了!!!!
原因是 在被伤害事件中 我没判断被伤害事件的攻击实体是否是null
我加了一条实体判断 就不蹦了
然后再获取其实体的药水效果
完美解决问题

第一页 上一页 下一页 最后一页