MC百科社群

标题: AttackEntityEvent中的.getTarget()导致的游戏崩溃问题 [打印本页]

作者: FireDragon    时间: 2023-1-6 14:58
标题: AttackEntityEvent中的.getTarget()导致的游戏崩溃问题
想问一下大佬为什么我在使用.getTarget()选取末影龙为目标时游戏会崩溃

作者: xm94732568960    时间: 2023-1-6 16:52
版本呢?代码呢?.getTarget()方法肯定没问题,很大可能是你给末影龙执行了其他代码才使游戏崩溃
作者: FireDragon    时间: 2023-1-6 23:14
标题: RE: AttackEntityEvent中的.getTarget()导致的游戏崩溃问题
xm94732568960 发表于 2023-1-6 16:52
版本呢?代码呢?.getTarget()方法肯定没问题,很大可能是你给末影龙执行了其他代码才使游戏崩溃 ...

版本1.12.2,forge2847,已经解决了,原因我认为可能是在将Entity类型转为EntityLiving时导致的,请大佬看看是不是,不方便展示所有代码。
        EntityLiving entity = (EntityLiving) event.getTarget();
                                if (!(entity.getHealth()==0.0f)) {
                                        if ((EntityLivingBase)entity instanceof EntityPlayer) {
                                                CoreEvent.killPlayer((EntityLivingBase)entity);
                                        }else {
                                                CoreEvent.killEntity(entity);
作者: xm94732568960    时间: 2023-1-7 08:51
FireDragon 发表于 2023-1-6 23:14
版本1.12.2,forge2847,已经解决了,原因我认为可能是在将Entity类型转为EntityLiving时导致的,请大佬 ...

是的,第一行不能直接转
作者: FireDragon    时间: 2023-1-7 20:57
xm94732568960 发表于 2023-1-7 08:51
是的,第一行不能直接转

谢谢大佬,但我还是想知道如何选末影龙为目标qwq
作者: xm94732568960    时间: 2023-1-7 21:25
本帖最后由 xm94732568960 于 2023-1-7 21:29 编辑
FireDragon 发表于 2023-1-7 20:57
谢谢大佬,但我还是想知道如何选末影龙为目标qwq

原来你的意思时想改变攻击目标为末影龙,这个要用mixin,用事件不行,就算你把事件的target强行改了也没用,因为它不会在事件结束时被使用来替换掉原来的攻击目标,只是告诉你玩家攻击了什么实体(整个AttackEntityEvent事件仅起到提醒+使用setCanceled()取消攻击的作用)
作者: FireDragon    时间: 2023-1-7 21:37
xm94732568960 发表于 2023-1-7 21:25
原来你的意思时想改变攻击目标为末影龙,这个要用mixin,用事件不行,就算你把事件的target强行改了也没用 ...

谢谢大佬,谢谢大佬
作者: xm94732568960    时间: 2023-1-7 22:11
FireDragon 发表于 2023-1-7 21:37
谢谢大佬,谢谢大佬

其实也有其他的解决方法哦,在LivingAttackEvent里setCanceled(true)取消此次攻击,然后再用LivingEntity.hurt(DamageSource p_70097_1_, float p_70097_2_)对想要的目标发动攻击
作者: FireDragon    时间: 2023-1-7 23:20
xm94732568960 发表于 2023-1-7 22:11
其实也有其他的解决方法哦,在LivingAttackEvent里setCanceled(true)取消此次攻击,然后再用LivingEntity ...

意思是我不能用AttackEntityEvent吗
作者: FireDragon    时间: 2023-1-8 00:52
xm94732568960 发表于 2023-1-7 22:11
其实也有其他的解决方法哦,在LivingAttackEvent里setCanceled(true)取消此次攻击,然后再用LivingEntity ...

想问一下是不是1.12.2没有LivingEntity类型呢,看1.16好像有
作者: xm94732568960    时间: 2023-1-8 08:54
FireDragon 发表于 2023-1-8 00:52
想问一下是不是1.12.2没有LivingEntity类型呢,看1.16好像有

都有,1.12.2反过来叫,EntityLiving
作者: xm94732568960    时间: 2023-1-8 13:21
本帖最后由 xm94732568960 于 2023-1-8 13:27 编辑

不用mixin,使用事件系统改变攻击目标,把玩家的攻击反弹到自己身上的例子:
为什么要加个第139行?这是因为不这么做攻击反弹到自己身上又会无限反弹让游戏崩溃
那个try catch语句是用来标记这个伤害源属于反弹



作者: xm94732568960    时间: 2023-1-8 15:36
这样写更好
作者: FireDragon    时间: 2023-1-8 23:45
xm94732568960 发表于 2023-1-8 15:36
这样写更好

虽然不是特别懂,但看代码意思应该是从getSource获得目标是吧应该,谢谢了大佬




欢迎光临 MC百科社群 (https://bbs.mcmod.cn/) MC百科|最大的MineCraft中文模组百科