Ванильные предметы и блоки с вариантами

Версия Minecraft
1.12.2
API
Forge
198
1
24
Может, вопрос покажется глупым, но как определить, является ли предмет в ItemStack бревном дуба, ёлки или берёзы? Или, например, череп от простого скелета или от иссушителя? Там же есть только Blocks.LOG или Blocks.SKULL, и ничего о разных вариантах...
 
Решение
Варианты блока в виде предмета отличаются по дамагу ItemStack#getDamage.
Есть метод ItemBlock#getMetadata, который принимает дамаг предмета и возвращает метадату блока, который получится после установки итем-блока в мир.
Есть метод Block#getStateFromMeta, который принимает метадату и возвращает стейт блока.
Таким образом, чтобы получить стейт блока из предмета
Java:
Optional<IBlockState> blockStateByStack(ItemStack stack){
    Item item = stack.getItem();
    if(item instanceof ItemBlock){
        return Item.getBlockFromItem(item).getStateFromMeta(
            ((ItemBlock)item).getMetadata(
                stack.getDamage()
            )
        );
    }else
        return Optional.empty();
}
После из стейта можно получить значение...
Варианты блока в виде предмета отличаются по дамагу ItemStack#getDamage.
Есть метод ItemBlock#getMetadata, который принимает дамаг предмета и возвращает метадату блока, который получится после установки итем-блока в мир.
Есть метод Block#getStateFromMeta, который принимает метадату и возвращает стейт блока.
Таким образом, чтобы получить стейт блока из предмета
Java:
Optional<IBlockState> blockStateByStack(ItemStack stack){
    Item item = stack.getItem();
    if(item instanceof ItemBlock){
        return Item.getBlockFromItem(item).getStateFromMeta(
            ((ItemBlock)item).getMetadata(
                stack.getDamage()
            )
        );
    }else
        return Optional.empty();
}
После из стейта можно получить значение нужной проперти

Ник игрока в предметы головы хранится в нбт
 
Назад
Сверху