- 235
- 3
- 21
интелект ломания блоков из прошлой темы в многопоточности работает хорошо, ничего не ломается, но после пары реальных тестов, стало ясно, что сервер по прежнему плохо справляется с таким количеством мобов
немного расскажу про своего моба, это по сути сильно переписанный зомби, с новыми ai и переписанными старыми, а также сотней других правок
пойдя дальше, я подумал, ну вот ломание блоков вынес, хорошо, но у зомби то еще с 20 частей ai, которые сумарно гораздо тяжелее моего ломания блоков
в EntityLiving происходит обработка всех алгоритмов, в EntityCreature и EntityMob метод не дополняется
посмотрев на это, почему бы просто не вынести это все в обработку на отдельный пул потоков
и все хорошо, в одиночке в среде работает на ура, в связке сервера и одиночки в среде вместе тоже работает, собрал, залил на лаунчер и термос, не работает ни на термосе, ни в одиночке, они просто стоят, из всех System.out.println("mark"); выдается только 1, хотя если заспавнить 1000 мобов, то нагрузка видна на всех ядрах, что значит пул работает
у меня вообще нет идей, мжб кто сможет помочь?
немного расскажу про своего моба, это по сути сильно переписанный зомби, с новыми ai и переписанными старыми, а также сотней других правок
пойдя дальше, я подумал, ну вот ломание блоков вынес, хорошо, но у зомби то еще с 20 частей ai, которые сумарно гораздо тяжелее моего ломания блоков
в EntityLiving происходит обработка всех алгоритмов, в EntityCreature и EntityMob метод не дополняется
EntityStrong:
protected void updateAITasks()
{
++this.entityAge;
this.worldObj.theProfiler.startSection("checkDespawn");
this.despawnEntity();
this.worldObj.theProfiler.endSection();
this.worldObj.theProfiler.startSection("sensing");
this.senses.clearSensingCache();
this.worldObj.theProfiler.endSection();
this.worldObj.theProfiler.startSection("targetSelector");
this.targetTasks.onUpdateTasks();
this.worldObj.theProfiler.endSection();
this.worldObj.theProfiler.startSection("goalSelector");
this.tasks.onUpdateTasks();
this.worldObj.theProfiler.endSection();
this.worldObj.theProfiler.startSection("navigation");
this.navigator.onUpdateNavigation();
this.worldObj.theProfiler.endSection();
this.worldObj.theProfiler.startSection("mob tick");
this.updateAITick();
this.worldObj.theProfiler.endSection();
this.worldObj.theProfiler.startSection("controls");
this.worldObj.theProfiler.startSection("move");
this.moveHelper.onUpdateMoveHelper();
this.worldObj.theProfiler.endStartSection("look");
this.lookHelper.onUpdateLook();
this.worldObj.theProfiler.endStartSection("jump");
this.jumpHelper.doJump();
this.worldObj.theProfiler.endSection();
this.worldObj.theProfiler.endSection();
}
EntityStrongZombieEngine:
@Override
protected void updateAITasks()
{
PoolController.instance.addTask(new UpdateAITask(this));
}
UpdateAITask:
public class UpdateAITask implements Runnable
{
private final Random rand = new Random();
private EntityStrongZombieEngine updatingEntity;
public UpdateAITask(EntityStrongZombieEngine updatingEntity)
{
this.updatingEntity = updatingEntity;
}
@Override
public void run()
{
//updatingEntity.updatings++;
System.out.println("mark1");
updatingEntity.entityAge++;
System.out.println("mark2");
updatingEntity.publicDespawnEntity();
System.out.println("mark3");
updatingEntity.senses.clearSensingCache();
System.out.println("mark4");
updatingEntity.targetTasks.onUpdateTasks();
System.out.println("mark5");
updatingEntity.tasks.onUpdateTasks();
System.out.println("mark6");
updatingEntity.navigator.onUpdateNavigation();
System.out.println("mark7");
updatingEntity.publicUpdateAITick();
System.out.println("mark8");
updatingEntity.moveHelper.onUpdateMoveHelper();
System.out.println("mark9");
updatingEntity.lookHelper.onUpdateLook();
System.out.println("mark10");
updatingEntity.jumpHelper.doJump();
System.out.println("mark11");
PoolController.instance.finishTask();
}
}
у меня вообще нет идей, мжб кто сможет помочь?
Последнее редактирование: