Как получить блок с определенной метадатой?

Сообщения
14
Лучшие ответы
0
Реакции
0
Версия Minecraft
1.12.2
Добрый день, у меня возникла проблема: я никак не могу понять, как получить Block с учетом метадаты.
Задача такова: у нас есть два типа дерева - дуб и береза, нужно получить блок березы у которого, в данном случае, метадата равна 1.
 
Сообщения
1,386
Лучшие ответы
19
Реакции
137
setDamage(1) или типа такого
 
Сообщения
1,386
Лучшие ответы
19
Реакции
137
можно сделать itemstack
 
Сообщения
1,386
Лучшие ответы
19
Реакции
137
Block.getBlockFromItem(itemstack) попробуй
 
Сообщения
14
Лучшие ответы
0
Реакции
0
setItemDamage возвращает void, есть способы это обойти?
 
Сообщения
1,386
Лучшие ответы
19
Реакции
137
думаю надо сделать так:
Kotlin:
val block = ItemStack(yourBlock)
block.itemDamage = 1
Block.getBlockFromItem(block.item)
 
Сообщения
14
Лучшие ответы
0
Реакции
0
Увы, но походу способ не работает или я просто глупый.

Block.getBlockFromItem(block.getItem()).getLocalizedName() выводит лишь Дерево, а по логике должно быть Берёза.
Если получать нелокализованное имя, то будет tile.log
 
Сообщения
1,386
Лучшие ответы
19
Реакции
137
а остальное как выше?
 

tox1cozZ

aka Agravaine
Модератор
Сообщения
6,820
Лучшие ответы
412
Реакции
1,901
Потому что ты вызываешь метод, который пашет без метадаты.
Нужно так:
Java:
ItemStack itemStack = new ItemStack(Blocks.LOG, 1, metadata);
String name = StatCollector.translateToLocal(itemStack.getUnlocalizedName());
 
Сообщения
4,871
Лучшие ответы
45
Реакции
671
setDamage(1) или типа такого
ахахахха вот ты весь свой профессионализм показал малой. Гулял бы ты отсюда, не дорос советы пока давать!
Отвлекаясь от тролления школоты в тему отвечу:
В 1.12.2 нету меты в твоем восприятии. Там теперь енум тайпы - Blocks.LOG.getDefaultState().withProperty(BlockOldLog.VARIANT, BlockPlanks.EnumType.BIRCH) ; Ну или типо того, не помню точно
Если тебе нужно прям конкретно мета(число) это - BlockPlanks.EnumType.BIRCH.getMetadata();
 
Сообщения
1,386
Лучшие ответы
19
Реакции
137

tox1cozZ

aka Agravaine
Модератор
Сообщения
6,820
Лучшие ответы
412
Реакции
1,901
Гулял бы ты отсюда, не дорос советы пока давать!
А теперь открой класс ItemStack, найди метод setItemDamage(ObelouixServer/Minecraft-1.12) и пойми насколько ты опозорился.
Все эти энумы - просто обертка для удобства, все равно это все конвертируется в обычную метадату.
P.S Ты же сам возился с методами getMetaFromState и getStateFromMeta, когда делал какое-то растение... Они-то как раз и конвертируют энумы в метадату.
 

tox1cozZ

aka Agravaine
Модератор
Сообщения
6,820
Лучшие ответы
412
Реакции
1,901
Я тебе написал решение выше как получить имя блока с метадатой.
 
Сообщения
14
Лучшие ответы
0
Реакции
0
Я тебе написал решение выше как получить имя блока с метадатой.
Да, это работает, но как можно это конвертировать в блок?
Если я вызываю Block.getBlockFromItem(new ItemStack(Blocks.LOG, 1, 0).getItem()), то при getItem() он возвращает имя tile.log
 

tox1cozZ

aka Agravaine
Модератор
Сообщения
6,820
Лучшие ответы
412
Реакции
1,901
Java:
IBlockState state = Blocks.LOG.getStateFromMeta(metadata);
Блок ты никак не получишь с метадатой, ибо метадата хранится в IBlockState.
 
Сообщения
14
Лучшие ответы
0
Реакции
0
Сверху