Задержка между спавном частиц (в тиках)

Версия Minecraft
1.7.10
API
Forge
15
0
Привет всем. Пишу мод для сервера, в классе предмета в методе onEaten, т.е. после использования предмета, должны заспавнится 8 партиклов, с задержкой спавна каждого партикла между собой в 2 тика, т.е. "спавн, ждем 2 тика, спавн, ждем 2 тика". Как спавнить частицы я знаю, весь вопрос в самой задержке. Пытался это реализовать тикхандлером через onTick, но не учел что onEaten выполняется 1 раз, т.е. не циклично. while замораживал майн, нбт для меня дремучий лес. Подскажите пожалуйста, как мне это сделать?

Вот кусок кода класса предмета, если надо (там где комментарий "waiting" - там должна быть задержка):
FireExt.java:
public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player) {
        FireExt usedConsumable = getUsedConsumable(player);
        if (player.inventory.consumeInventoryItem(ModItems.match)) {
            this.isParticleSpawn = true;
            Vec3 vec3 = player.getLook(1.0F);
            stack.damageItem(1, player);
            player.worldObj.spawnParticle("explode", player.posX, player.posY, player.posZ, vec3.xCoord / 5, vec3.yCoord / 5, vec3.zCoord / 5);
            //waiting
            player.worldObj.spawnParticle("explode", player.posX, player.posY, player.posZ, vec3.xCoord / 5, vec3.yCoord / 5, vec3.zCoord / 5);
            //waiting
            player.worldObj.spawnParticle("explode", player.posX, player.posY, player.posZ, vec3.xCoord / 5, vec3.yCoord / 5, vec3.zCoord / 5);
            //waiting
            player.worldObj.spawnParticle("explode", player.posX, player.posY, player.posZ, vec3.xCoord / 5, vec3.yCoord / 5, vec3.zCoord / 5);
            //waiting
            player.worldObj.spawnParticle("explode", player.posX, player.posY, player.posZ, vec3.xCoord / 5, vec3.yCoord / 5, vec3.zCoord / 5);
            //waiting
            player.worldObj.spawnParticle("explode", player.posX, player.posY, player.posZ, vec3.xCoord / 5, vec3.yCoord / 5, vec3.zCoord / 5);
            //waiting
            player.worldObj.spawnParticle("explode", player.posX, player.posY, player.posZ, vec3.xCoord / 5, vec3.yCoord / 5, vec3.zCoord / 5);
            //waiting
            player.worldObj.spawnParticle("explode", player.posX, player.posY, player.posZ, vec3.xCoord / 5, vec3.yCoord / 5, vec3.zCoord / 5);
            //waiting
            player.worldObj.spawnParticle("explode", player.posX, player.posY, player.posZ, vec3.xCoord / 5, vec3.yCoord / 5, vec3.zCoord / 5);
            //}
        }else{
            player.addChatMessage((IChatComponent)new ChatComponentText((Object)EnumChatFormatting.RED + "Отладка: предмет не найден!"));
        }

        return stack;
    }
 
Решение
Я бы на твоём месте сделал NBT + onInventoryTick (или как-то так, не помню как уже на старых версиях методы называются).
В NBT пишешь переменную boolean (изначально она false), которую на onEaten ставишь true. Также будет полезно создать переменную int, в которую будешь писать тик. Потом, в onInventoryTick проверяешь значение переменной, и если оно есть, проверяешь на int % 2 == 0, а после прибавляешь int единичку (без усл.). Внутри проверки делимости на 2 и спавнишь партиклы.
1,369
112
241
Я бы на твоём месте сделал NBT + onInventoryTick (или как-то так, не помню как уже на старых версиях методы называются).
В NBT пишешь переменную boolean (изначально она false), которую на onEaten ставишь true. Также будет полезно создать переменную int, в которую будешь писать тик. Потом, в onInventoryTick проверяешь значение переменной, и если оно есть, проверяешь на int % 2 == 0, а после прибавляешь int единичку (без усл.). Внутри проверки делимости на 2 и спавнишь партиклы.
 
Сверху