凉凉丶
如果做到击退玩家的效果
在bukkit中检索下了没发现
是不是要用entity.teleport(Location location)去做到这样的效果?


enderman_JC
参考这帖https://www.mcbbs.net/thread-1124877-1-1.html
已经用铲子砸开

凉凉丶
enderman_JC 发表于 2021-6-30 10:42
参考这帖https://www.mcbbs.net/thread-1124877-1-1.html
已经用铲子砸开

Vector direction = target.getLocation().toVector().subtract(damager.getLocation().toVector();
direction.divide(direction.length()); // 击退方向(单位向量)
target.setVelocity(target.getVelocity().add(direction.multiply(0.2)));
这个代码中 target是发动攻击的目标,damager是被攻击的目标= =?
感觉代码是把发动攻击的人给唯一了...

enderman_JC
凉凉丶 发表于 2021-6-30 11:11
Vector direction = target.getLocation().toVector().subtract(damager.getLocation().toVector();
dire ...

实践出真理
代码可以根据自己的需求修改啊

awadw
1434534534

awadw
41564724343

冗沉静
awadw 发表于 2021-6-30 11:15
**** 作者被禁止或删除 内容自动屏蔽 ****

这是什么东西,灌水?

Pistol_Pangan
检测EntityDamageByEnittyEvent,构建一个从攻击者到受害者方向的矢量,调整该矢量的y轴分量,将其向y轴正方向做小幅度的调整
将此矢量转换为单位向量(模调整为1但方向不变)
然后将此矢量与受害者当前的运动矢量相加。
代码如下
LivingEntity e1 = null;
        LivingEntity e2 = null;
        //必须两个实体都实现了LivingEntity接口才可执行后续运算
        if((entityDamageByEntityEvent.getDamager()) instanceof LivingEntity && (entityDamageByEntityEvent.getEntity()) instanceof LivingEntity){
            e1 =(LivingEntity) entityDamageByEntityEvent.getDamager();
            e2 = (LivingEntity) entityDamageByEntityEvent.getEntity();
        }else{
            return;
        }
        //构建一个从攻击者到受害者方向的向量(受害者坐标-攻击者坐标,再转换成矢量)
        Vector v =  e2.getLocation().subtract(e1.getLocation()).toVector();
        //将此向量的y方向分量在正方向+1
        v.setY(v.getY()+1);
        //将此向量转换为单位向量
        v = v.normalize();
        //将本向量与受害者的运动向量相加,击退倍率设定为4
        e2.setVelocity(e2.getVelocity().add(v.multiply(4)));
        return;

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