- 236
- 4
- 22
Доброе утро всем. Подскажите пожалуйста, как в Forge можно реализовать "ускорение тайлов"? Я конечно понимаю, что для этого я должен чаще вызывать метод updateEntity() всем тайлам в мире, но вопрос, как получить все тайлы во всех загруженных чанках? На сколько я понял, мне нужно будет ловить ворлд тик ивент и в нём уже нужное кол-во раз вызывать updateEntity() для каждого тайла. Вообще, я нашёл 1 List в World и попробовал пройтись циклом, но в ближайшие 10 минут я получил краш с ошибкой ConcurentModificationExeption.
Других способов получить все активные тайлы я пока, увы, не нашёл . Также, как по мне, код выше - нагрузочный. Можно ли его сделать менее убойным для игры? Заранее всем спасибо за ответы!
TickHandler:
@SubscribeEvent
public void onTick(TickEvent.WorldTickEvent event)
{
if(event.phase == TickEvent.Phase.END || event.world.provider.dimensionId != ConfigurationHandler.dimensionId) return;
for(int count = 0; count<ConfigurationHandler.worldTickSpeed; count++)
{
for (TileEntity tileentity : (Iterable<TileEntity>)event.world.loadedTileEntityList)
{
if (!tileentity.isInvalid() && tileentity.hasWorldObj() && event.world.blockExists(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord))
{
try{tileentity.updateEntity();}catch(Throwable ignore){}
}
}
}
}