我使用自定义法术插件运行服务器。下面这个函数是一个单一的咒语。它应该做的是,对它击中的任何物体给予 2 颗心,并治愈施法者 2 颗心(每个目标命中)。然而,它总是将施法者设置为十颗心!
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);
}
}
}
任何人都可以看到任何问题吗?
最佳答案
List<Block> targets = player.getLineOfSight((Set)null, 20);
for (final Block target : targets)
这里,这个循环调用 Runnable 的次数与可见 block 的数量一样多。因此,他们每次施法都会得到多次治疗,自然会达到十心上限,因为你设置了这么宽的视线。
关于java - 为什么这个法术能给施法者带来满血?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32547247/