Здравствуйте. знает ли кто, как можно убрать моба, когда игрок выходит из мира?
Правда есть пару (почти) замечаний:
1) PlayerEvent.PlayerLoggedOutEvent не подходит, тк не работает на интегрированном сервере
2) WorldEvent.Unload также не подходит, тк чанки уже выгружены, и я не могу ничего сделать с мобом
3) WorldEvent.Save хоть и работает, но тоже не подходит. Цель кода - спавнить моба (который не может деспавнится, и будет каждые n тиков телепортироваться к игроку), а WorldEvent.Save срабатывает даже если зайти в меню паузы, а не выйти из мира.
Еще одна важная вещь:
моб должен быть создан только 1 раз в PlayerEvent.PlayerLoggedInEvent, и на протяжении игры оставаться нетронутым (нельзя удалить во время игры, после чего заспавнить еще раз), и может быть удален только после выхода из мира.
Хотя уже даже не знаю что можно использовать, но может быть есть еще способы или ивенты для этого?
Правда есть пару (почти) замечаний:
1) PlayerEvent.PlayerLoggedOutEvent не подходит, тк не работает на интегрированном сервере
2) WorldEvent.Unload также не подходит, тк чанки уже выгружены, и я не могу ничего сделать с мобом
3) WorldEvent.Save хоть и работает, но тоже не подходит. Цель кода - спавнить моба (который не может деспавнится, и будет каждые n тиков телепортироваться к игроку), а WorldEvent.Save срабатывает даже если зайти в меню паузы, а не выйти из мира.
Еще одна важная вещь:
моб должен быть создан только 1 раз в PlayerEvent.PlayerLoggedInEvent, и на протяжении игры оставаться нетронутым (нельзя удалить во время игры, после чего заспавнить еще раз), и может быть удален только после выхода из мира.
Хотя уже даже не знаю что можно использовать, но может быть есть еще способы или ивенты для этого?
Java:
public static final HashMap<UUID, EntityZombie> Entities = new HashMap<>();
@SubscribeEvent
public void PlayerLoggedInEvent(PlayerEvent.PlayerLoggedInEvent event) {
if (!event.player.worldObj.isRemote) {
EntityPlayer player = event.player;
UUID playerID = player.getUniqueID();
EntityZombie newEnt = new EntityZombie(player.worldObj);
newEnt.setPosition(player.posX, player.posY, player.posZ);
player.worldObj.spawnEntityInWorld(newEnt);
Entities.put(playerID, newEnt);
}
}
@SubscribeEvent
public void WorldEventSave(WorldEvent.Save event) {
if (!event.world.isRemote) {
for (Map.Entry<UUID, EntityZombie> entry : Entities.entrySet()) {
EntityZombie acac = entry.getValue();
if (acac != null) {
acac.setDead();
event.world.removeEntity(acac);
Chunk chunk = event.world.getChunkFromBlockCoords((int) acac.posX, (int) acac.posZ);
chunk.isModified = true;
}
}
Entities.clear();
}
}