Помогите BlockIterator крашит сервер

Bezobrazie

Активный участник
Пользователь
Баллы
46
Имя в Minecraft
MySoulIsCry
пытаюсь создать стену из партиклов при телепортации игрока перлом(некий луч который должен идти от локации откуда игрок его кинул до локации приземления) но какаято проблема с BlockIterator
Мой код
[php=]
public class Test extends JavaPlugin implements Listener{
HashMap<Player, Location> map = new HashMap<>();
public Test() {
// TODO Auto-generated constructor stub
}
@Override
public void onEnable(){
Bukkit.getPluginManager().registerEvents(this, this);
}

@EventHandler
public void projectileLaunchEvent(ProjectileLaunchEvent e) {
if(e.getEntity().getShooter() instanceof Player && e.getEntity() instanceof EnderPearl) {
Player player = (Player) e.getEntity().getShooter();
map.put(player, player.getLocation());
}
}



@EventHandler
public void projectileHitEvent(ProjectileHitEvent e) {

if(e.getEntity().getShooter() instanceof Player && e.getEntity() instanceof EnderPearl) {
Player player = (Player) e.getEntity().getShooter();
if(map.containsKey(player)) {
Location perlLoc = e.getEntity().getLocation();
Location playerLoc = map.get(player);
map.remove(player);
playerLoc.setDirection(perlLoc.toVector().subtract(playerLoc.toVector()));
BlockIterator iter = new BlockIterator(perlLoc, playerLoc.distance(perlLoc));
while(iter.hasNext()) {
Block block = iter.next();
Location bloc = block.getLocation();
bloc.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, bloc, 0);

}
}
}

}


}
[/php]
ошибка
Код:
[18:00:17 ERROR]: Current Thread: Chunk I/O Executor Thread-2
[18:00:17 ERROR]:       PID: 117 | Suspended: false | Native: false | State: WAITING
[18:00:17 ERROR]:       Stack:
[18:00:17 ERROR]:               [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:505)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3137)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1614)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1056)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1116)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
[18:00:17 ERROR]:               [email protected]/java.lang.Thread.run(Thread.java:831)
[18:00:17 ERROR]: ------------------------------
[18:00:17 ERROR]: Current Thread: pool-12-thread-1
[18:00:17 ERROR]:       PID: 118 | Suspended: false | Native: false | State: WAITING
[18:00:17 ERROR]:       Stack:
[18:00:17 ERROR]:               [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:505)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3137)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1614)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1056)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1116)
[18:00:17 ERROR]:               [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
[18:00:17 ERROR]:               [email protected]/java.lang.Thread.run(Thread.java:831)
ошибка длинная если надо скину всю а так только по моему выжную часть скинул
 
Во-первых, конструктор BlockIterator, который ты используешь, принмает вторым аргументом оффсет Y, а не дистанцию. То бишь, если расстояние между игроком и перлом, например, 100, BlockIterator начнет на 100 блоков выше. Во-вторых, т.к. лимит не указан, итератор будет пытаться идти до тех пор, пока его не остановят (через, например, break) - отсюда у тебя бесконечная загрузка чанков, и, соответственно, краш.
Если ты пытаешься создать частицы от локации игрока до перла - это должно делаться не так.
 
Во-первых, конструктор BlockIterator, который ты используешь, принмает вторым аргументом оффсет Y, а не дистанцию. То бишь, если расстояние между игроком и перлом, например, 100, BlockIterator начнет на 100 блоков выше. Во-вторых, т.к. лимит не указан, итератор будет пытаться идти до тех пор, пока его не остановят (через, например, break) - отсюда у тебя бесконечная загрузка чанков, и, соответственно, краш.
Если ты пытаешься создать частицы от локации игрока до перла - это должно делаться не так.
Какой конструктор тогда юзать?
 
Назад
Верх