Java 为什么这个法术会给施法者全生命?
我用我的自定义拼写插件运行服务器。下面这个函数是一个单独的咒语。它应该做的是,对它击中的任何东西发2颗心,并治疗施法者2颗心(每击中一个目标)。然而,它总是将施法者设置为十颗心Java 为什么这个法术会给施法者全生命?,java,bukkit,Java,Bukkit,我用我的自定义拼写插件运行服务器。下面这个函数是一个单独的咒语。它应该做的是,对它击中的任何东西发2颗心,并治疗施法者2颗心(每击中一个目标)。然而,它总是将施法者设置为十颗心 public void onPlayerInteractBlockLifeSteal(final Player player) { if (worldChecker(player)){ if (player.getFoodLevel() > 12){
public void onPlayerInteractBlockLifeSteal(final Player player) {
if (worldChecker(player)){
if (player.getFoodLevel() > 12){
List<Block> targets = player.getLineOfSight((Set)null, 20);
float pathway = 0;
for (final Block target : targets){
Bukkit.getScheduler().runTaskLater(MagictgCraft.that, new Runnable(){
@Override
public void run(){
int count = 0;
if (target.getType() != Material.AIR){
player.getWorld().playSound(target.getLocation(), Sound.SUCCESSFUL_HIT, 10, 1);
}
while (count < 5){
player.getWorld().playEffect(target.getLocation().clone().add(0.5,0.5,0.5), Effect.WITCH_MAGIC, 10);
player.getWorld().playEffect(target.getLocation().clone().add(0.5,0.5,0.5), Effect.SMOKE, 10);
count = count + 1;
}
List<Entity> victims = (List<Entity>) target.getWorld().getNearbyEntities(target.getLocation(),1,1,1);
for (Entity victim2 : victims){
if (victim2 instanceof LivingEntity){
LivingEntity victim = (LivingEntity) victim2;
if (victim != player){
victim.damage(4,player);
double health = player.getHealth();
health = health + 4;
if (health > 20){
health = 20;
}
player.setHealth(health);
}
}
}
}
},(long) pathway);
pathway = (float) (pathway + 0.5);
}
int manaused = player.getFoodLevel();
manaused = manaused - 12;
player.setFoodLevel(manaused);
}
}
}
public void onPlayerInteractBlockLifeSteal(最终玩家){
if(世界棋手(玩家)){
如果(player.getFoodLevel()>12){
List targets=player.getLineOfSight((Set)null,20);
浮动路径=0;
用于(最终块目标:目标){
Bukkit.getScheduler().runTaskLater(MagictgCraft.that,new Runnable()){
@凌驾
公开募捐{
整数计数=0;
if(target.getType()!=Material.AIR){
player.getWorld().playSound(target.getLocation(),Sound.SUCCESSFUL_HIT,10,1);
}
同时(计数<5){
player.getWorld().playEffect(target.getLocation().clone().add(0.5,0.5,0.5),Effect.WITCH_MAGIC,10);
player.getWorld().playEffect(target.getLocation().clone().add(0.5,0.5,0.5),Effect.SMOKE,10);
计数=计数+1;
}
列表受害者=(列表)target.getWorld().getNearbyEntities(target.getLocation(),1,1,1);
针对(实体受害者2:受害者){
如果(受害者2生命实例){
生存能力受害者=(生存能力)受害者2;
如果(受害者!=玩家){
受害者。伤害(4,玩家);
double health=player.getHealth();
健康=健康+4;
如果(健康>20){
健康=20;
}
player.setHealth(health);
}
}
}
}
}(长)通路);
路径=(浮动)(路径+0.5);
}
int manaused=player.getFoodLevel();
manaused=manaused-12;
player.setFoodLevel(已使用);
}
}
}
有人看到问题了吗?List targets=player.getLineOfSight((Set)null,20);
List<Block> targets = player.getLineOfSight((Set)null, 20);
for (final Block target : targets)
用于(最终块目标:目标)
在这里,这个循环调用Runnable的次数与看到的块的数量相同。因此,他们在每次施放时都会被多次治愈,并且自然地击中十颗心的上限,因为你设置了如此广阔的视线