如果做到击退玩家的效果
在bukkit中检索下了没发现
是不是要用entity.teleport(Location location)去做到这样的效果?
在bukkit中检索下了没发现
是不是要用entity.teleport(Location location)去做到这样的效果?
参考这帖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是被攻击的目标= =?
感觉代码是把发动攻击的人给唯一了...
凉凉丶 发表于 2021-6-30 11:11
Vector direction = target.getLocation().toVector().subtract(damager.getLocation().toVector();
dire ...
实践出真理
代码可以根据自己的需求修改啊
1434534534
41564724343
检测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;
将此矢量转换为单位向量(模调整为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;