- Баллы
- 76
- Имя в Minecraft
- Jon
Как правильно проверить наличие чего либо в регионе?
У меня есть фукция, которая проверят на пересечение региона:
Но допустим у меня 1000 регионов. При каждом движении игрока получается мне нужно сделать проверку на ВСЕ регионы?! Нет, так не пойдет.
У меня еще была идея связать все регионы с чанками массивом HashMap <Chunk, ArrayList<Region>> chunks. В этом случае, проверка будет выглядеть так:
Но это все равно будет нагружать сервер, например, в этом месте:
Ведь, чтобы проверить на наличие в массиве, нужно пройтись по всему массиву, напоминаю, что у нас 1000 регионов.
Какой у вас способ упростить задачу?
У меня есть фукция, которая проверят на пересечение региона:
Код:
public boolean isVhodit(Location loc)
{
if (loc.getY() >= min.getBlockY()
&& loc.getY() <= max.getBlockY()
&& loc.getX() >= min.getBlockX()
&& loc.getX() <= max.getBlockX()
&& loc.getZ() >= min.getBlockZ()
&& loc.getZ() <= max.getBlockZ()
)
{
return true;
}
return false;
}
У меня еще была идея связать все регионы с чанками массивом HashMap <Chunk, ArrayList<Region>> chunks. В этом случае, проверка будет выглядеть так:
Код:
public void onMovePlayer(PlayerMoveEvent event)
{
Player p = event.getPlayer();
Chunk c = p.getLocation().getChunk();
if (chunks.containsKey(c))
{
for (Region r : chunks.get(c))
{
if (r.isVhodit(p.getLocation))
{
//Код, если игрок пересек регион
}
}
}
}
Код:
(chunks.containsKey(c))
Какой у вас способ упростить задачу?
Последнее редактирование: