контроль спавнера

66
2
13
Суть такая: есть блок спавнера в моем моде с ванильными корнями и есть блок контроллер для спавнера. Нужно сделать так что-бы при подаче на блок контроллер редстоун сигнала спавнились мобы из спавнера типо, как преждевременный естественный спавн. Как это реализовать я незнаю меня интересует именно часть которая отвечает за вызов спавна мобов ну и возможно проверка стороны с которой находится спавнер ибо мой код:
Код:
public void onNeighborBlockChange(World world, int x, int y, int z, Block b) {


        if(world.isBlockIndirectlyGettingPowered(x, y, z)) {


            if (world.getBlock(x++, y, z) == BlockList.spawner){


                TileEntity spawner = world.getTileEntity(x++, y, z);


                MobSpawnerBaseLogic logic = ((TileEntityMobSpawner)spawner).func_145881_a();


                logic.spawnDelay = 0;


                Minecraft.getMinecraft().thePlayer.sendChatMessage("Попытка вызвать мобов");


            }else if(world.getBlock(x, y, z++) == BlockList.spawner){


                TileEntity spawner = world.getTileEntity(x, y, z++);


                MobSpawnerBaseLogic logic = ((TileEntityMobSpawner)spawner).func_145881_a();


                logic.spawnDelay = 0;


                Minecraft.getMinecraft().thePlayer.sendChatMessage("Попытка вызвать мобов");


            }else if(world.getBlock(x--, y, z) == BlockList.spawner){


                TileEntity spawner = world.getTileEntity(x--, y, z);


                MobSpawnerBaseLogic logic = ((TileEntityMobSpawner)spawner).func_145881_a();


                logic.spawnDelay = 0;


                Minecraft.getMinecraft().thePlayer.sendChatMessage("Попытка вызвать мобов");


            }else if(world.getBlock(x, y, z--) == BlockList.spawner){


                TileEntity spawner = world.getTileEntity(x, y, z--);


                MobSpawnerBaseLogic logic = ((TileEntityMobSpawner)spawner).func_145881_a();


                logic.spawnDelay = 0;


                Minecraft.getMinecraft().thePlayer.sendChatMessage("Попытка вызвать мобов");


            }


        }
Все мои попытки приводят либо к крашу либо ни к чему. Прошу помочь нубу)
p.s. извиняюсь за ошибки(если таковые есть) писал ночью перед сном
p.s.s извиняюсь за код если, что-то не так я совсем недавно начал кодить по более менее серьезному)
 
1,976
68
220
А что сложного? проверяешь в контроллере isBlockReceivingPower, если тру - в блоке-спаунере обнуляешь таймер (ну или ставишь его очень близко к значению, при котором он должен призвать мобов. Profit
 
66
2
13
Извиняюсь за свое нубство оказалось, что попросу нужно было заменить "x++" на "x + 1" и т.д.) Спасибо за ответ
 
1,137
5
3
х++ записывает в старую переменную, а вот х+1 возвращает новое значение.
 
66
2
13
и еще если не трудно раз уж тема про спавнер ответьте на еще один вопрос) мне нужено сделать так, чтобы при клике на спавнер в нем менялся моб последовательно без разницы кто за кем. Моя реализация позволяет менять лишь один раз моба в спавнере. При попытке сделать последовательность через условия entity == "имя моба" моб менялся один раз при этом последующие условие выполнялось. Вот кусок кода отвечающий за это:
Код:
if(entity == "pig"){        
  logic.setEntityName("Zombie");
  NBTTagCompound compound = new NBTTagCompound();
  zombie.writeEntityToNBT(compound);
  NBTTagCompound compound2 = new NBTTagCompound();
  logic.writeToNBT(compound2);
  compound2.setTag("SpawnData", compound);

  logic.readFromNBT(compound2);
}else if(entity == "Zombie"){                
 logic.setEntityName("PigZombie");
 NBTTagCompound compound = new NBTTagCompound();
 pig_zombie.writeEntityToNBT(compound);
 NBTTagCompound compound2 = new NBTTagCompound();
 logic.writeToNBT(compound2);
 compound2.setTag("SpawnData", compound);

 logic.readFromNBT(compound2);
} //и т.д. перебор всех мобов
в данном случае при нажатии на спавнер в нем меняется моб на зомби, при следующем нажатии выполняется следующее условие, но вот моб в спавнере уже не меняется
 
Сверху