Помогите Как работает радиус getNearbyEntities

Exception_Prototype

Активный участник
Пользователь
Баллы
96
По поводу player.getNearbyEntities(x, x, x);
Может кто объяснить или нарисовать в паинте, как именно указанные координаты берут область вокруг игрока? Просто не понятно не много.
 
В примере было сказано, что все аргументы вводятся одинаковые. Это правильно?
 
В примере было сказано, что все аргументы вводятся одинаковые. Это правильно?
ну первое это допустимое отклонение по X второе по Y третье по Z

т.е. допустим есть локация 1 1 1 (xyz соответственно). теперь ты пишешь .getNearbyEntities(1 1 2)

это значит что будут взяты все кто есть в промежутке от [0-2 по иксу (+-1), 0-2 по игрку (+-1) -1-3 по зед (+-2)]
 
Допустим, если аргумент будет 200к, то у меня будет достаточно большой шанс получить достаточно большое количество существ?
 
Допустим, если аргумент будет 200к, то у меня будет достаточно большой шанс получить достаточно большое количество существ?
Это получится шар с радиусом 200к, не все чанки будут прогружены (только 1% их этого примерно)
 
А если я получу всех существ так:
Java:
Bukkit.getServer().getWorlds().get(0).getEntities();
То всё равно это будет тоже самое? Так как не все чанки прогружены?
 
Иногда полезно смотреть документацию:
List<Entity> getNearbyEntities(double x,double y,double z)
Returns a list of entities within a bounding box centered around this entity
Parameters:
x - 1/2 the size of the box along x axis
y - 1/2 the size of the box along y axis
z - 1/2 the size of the box along z axis
Returns:
List List of entities nearby
 
А если я получу всех существ так:
Java:
Bukkit.getServer().getWorlds().get(0).getEntities();
То всё равно это будет тоже самое? Так как не все чанки прогружены?

Попробуй
Java:
for (Chunk chunk : Bukkit.getServer().getWorld(world).getLoadedChunks()) {
Entity[] entity = chunk.getEntities();
}
 
А вот теперь такая задача.
Требуется получить не просто всех entity со всех прогруженных чанков, но и не прогруженны.
Ладно, из загруженных чанков панятно как.
А вот допустим:
1. Получить ВСЕ чанки.
2. Проверить. загружен ли он на данный момент, если да, то получить entity и сделать то что нужно, в противном случае подгрузить чанк и сделать то что нужно и выгрузить.
Как такое можно сделать и как правильно оформить это через потоки?

P.S. Хотелось бы самому сделать. Прошу, просто дайте наводку на правильный путь в плане потоков и возможности проверки чанков на загружен ли или нет, ну и конечно же ручная загрузка и выгрузка чанка.
Как это понять ? "Иногда" :D
 
А вот теперь такая задача.
Требуется получить не просто всех entity со всех прогруженных чанков, но и не прогруженны.
Ладно, из загруженных чанков панятно как.
А вот допустим:
1. Получить ВСЕ чанки.
2. Проверить. загружен ли он на данный момент, если да, то получить entity и сделать то что нужно, в противном случае подгрузить чанк и сделать то что нужно и выгрузить.
Как такое можно сделать и как правильно оформить это через потоки?

P.S. Хотелось бы самому сделать. Прошу, просто дайте наводку на правильный путь в плане потоков и возможности проверки чанков на загружен ли или нет, ну и конечно же ручная загрузка и выгрузка чанка.

Как это понять ? "Иногда" :D
ChunkUnloadEvent
А вот теперь такая задача.
Требуется получить не просто всех entity со всех прогруженных чанков, но и не прогруженны.
Ладно, из загруженных чанков панятно как.
А вот допустим:
1. Получить ВСЕ чанки.
2. Проверить. загружен ли он на данный момент, если да, то получить entity и сделать то что нужно, в противном случае подгрузить чанк и сделать то что нужно и выгрузить.
Как такое можно сделать и как правильно оформить это через потоки?

P.S. Хотелось бы самому сделать. Прошу, просто дайте наводку на правильный путь в плане потоков и возможности проверки чанков на загружен ли или нет, ну и конечно же ручная загрузка и выгрузка чанка.

Как это понять ? "Иногда" :D
ArrayList<Chunk> chunks = Bukkit.getWorld("kek").getChunks().stream()
.filter((chunk) -> {
return !chunk.isLoaded();
}).map((chunk) -> {
return (Chunk) chunk;
}).collect(Collectors.toCollection(ArrayList::new));
 
Это к какому вопросу ответ?) Большому или "Иногда"?
И как понятно из названия, это эвент при выгрузке чанка.
Что можете подсказать по ручной загрузке и выгрузке?
Location loc = new Location(....);
loc.getChunk().load(); // loc.getChunk().unload(true, true);
1st true - сохранить чанк
2 true - "безопасно" сорханить чанк
Скорее всего чтобы сервер не крашнулся, в редких случаях такое наверное бывает
 
ChunkUnloadEvent

ArrayList<Chunk> chunks = Bukkit.getWorld("kek").getChunks().stream()
.filter((chunk) -> {
return !chunk.isLoaded();
}).map((chunk) -> {
return (Chunk) chunk;
}).collect(Collectors.toCollection(ArrayList::new));
-> - Java 8, сервер Java 7. Не затруднит ли Вас переделать под java7?
Location loc = new Location(....);
loc.getChunk().load(); // loc.getChunk().unload(true, true);
1st true - сохранить чанк
2 true - "безопасно" сорханить чанк
Скорее всего чтобы сервер не крашнулся, в редких случаях такое наверное бывает
А можно ли загрузить чанк который как раз !chunk.isLoaded(); таким же способом?
 
Назад
Верх