Создание временного предмета

Версия Minecraft
1.7.10
Здравствуйте! На днях задался вопросом по созданию временного предмета с возможностью задавать параметр через конфиг/команду. Но есть вопрос как реализовывать, все таки с помощью NBT, если да то как именно? Или можете предложить иной вариант.
 
Решение
Не обязательно, можно типа просто в предмете через onEntityItemUpdate, а в NBT в с какого времени, по общему времени, он должен исчезнуть.
Потому-что в любом случаи не получиться просто так, чтобы он исчез из инвентаря блока (типа сундука или печки).

timaxa007

Модератор
5,831
409
672
Не обязательно, можно типа просто в предмете через onEntityItemUpdate, а в NBT в с какого времени, по общему времени, он должен исчезнуть.
Потому-что в любом случаи не получиться просто так, чтобы он исчез из инвентаря блока (типа сундука или печки).
 
699
9
53
Не обязательно, можно типа просто в предмете через onEntityItemUpdate, а в NBT в с какого времени, по общему времени, он должен исчезнуть
Верно, об этом я не подумал, но если прям чтоб и в инвентаре работала, а я насколько знаю айтемы даже в просматриваемых игроком сундуках не апдейтятся, то нужно мутить удаление при открытии инвентаря.
 

timaxa007

Модератор
5,831
409
672
Последнее редактирование:

timaxa007

Модератор
5,831
409
672
К примеру так:
Java:
    @Override
    public void onUpdate(ItemStack itemStack, World world, Entity entity, int slotID, boolean isHand) {
        if (itemStack.getItem() == this && itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("delTime", NBT.TAG_LONG)) {
            long delTime = itemStack.getTagCompound().getLong("delTime");
            if (delTime <= world.getTotalWorldTime()) {
                if (entity instanceof EntityPlayer)
                    ((EntityPlayer)entity).inventory.setInventorySlotContents(slotID, null);
                else
                    entity.setCurrentItemOrArmor(slotID, null);
            }
        }
    }

    @Override
    public void onCreated(ItemStack itemStack, World world, EntityPlayer player) {
        if (!itemStack.hasTagCompound()) itemStack.setTagCompound(new NBTTagCompound());
        itemStack.getTagCompound().setLong("delTime", world.getTotalWorldTime() + 3000L);
    }

    @Override
    public boolean onEntityItemUpdate(EntityItem entityItem) {
        if (entityItem.worldObj.isRemote) return super.onEntityItemUpdate(entityItem);
        ItemStack stack = entityItem.getEntityItem();
        if (stack.getItem() == this && stack.hasTagCompound() && stack.getTagCompound().hasKey("delTime", NBT.TAG_LONG)) {
            long delTime = stack.getTagCompound().getLong("delTime");
            if (delTime <= entityItem.worldObj.getTotalWorldTime())
                entityItem.setDead();
        }
        return super.onEntityItemUpdate(entityItem);
    }
 
Последнее редактирование:
7,099
324
1,510
Может, быть не актуально, но в терра фирма крафте еда гниет и после исчезает - точно такая же механика
 
7,099
324
1,510
Если в руку взять потом - проверяется время и сразу уменьшается на нужное значение
 
Сверху