- Баллы
- 76
- Имя в Minecraft
- jamesg101
Всем привет. Столкнулся с такой проблемой, которую частично решил. Мне необходимо сделать зомби, которые через некоторое время удаляться, но у меня никак не получается хранить того самого зомби. Пробовал Entity, UUID, Location, даже чанк, на котором был Entity.
Сейчас я храню Entity и через его локацию нахожу чанк, а в них всех ентити, сверяю UUID ентити и если он есть - удаляю. Частично - это работает, но иногда это возвращает null, при этом ентити живой.
Помогите мне отыскать и удалить ентити.
Сейчас я храню Entity и через его локацию нахожу чанк, а в них всех ентити, сверяю UUID ентити и если он есть - удаляю. Частично - это работает, но иногда это возвращает null, при этом ентити живой.
Помогите мне отыскать и удалить ентити.
Код:
public class ZombieClass {
public static HashMap<UUID, ZombieClass> zombiesList = new HashMap<>();
private Entity entity;
private ZombieZoneClass zoneClass;
private int deSpawnDelay;
public ZombieClass(Entity entity, ZombieZoneClass zoneClass, int deSpawnDelay) {
this.entity = entity;
this.zoneClass = zoneClass;
this.deSpawnDelay = deSpawnDelay;
runTimer();
}
public Entity getEntity() {
for (Entity entity : entity.getLocation().getChunk().getEntities()) if (entity.getUniqueId().equals(this.entity.getUniqueId())) return entity;
return null;
}
public ZombieZoneClass getZoneClass() {
return zoneClass;
}
public void runTimer() {
BukkitRunnable runnable = new BukkitRunnable() {
@Override
public void run() {
if (!zombiesList.containsKey(entity.getUniqueId())) {
cancel();
return;
}
if (deSpawnDelay != 0) {
deSpawnDelay = deSpawnDelay - 1;
return;
}
if (getEntity() == null) {
Logger.log("Пустой ентити.");
} else getEntity().remove();
zoneClass.setZombieCount(zoneClass.getZombieCount() - 1);
zombiesList.remove(entity.getUniqueId());
cancel();
}
};
runnable.runTaskTimer(Main.plugin, 1, 20);
}
}