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

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

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

Agravaine :j

Модератор
Сообщения
5,474
Лучшие ответы
269
Реакции
1,183
Потому что ты вызываешь метод, который пашет без метадаты.
Нужно так:
Java:
ItemStack itemStack = new ItemStack(Blocks.LOG, 1, metadata);
String name = StatCollector.translateToLocal(itemStack.getUnlocalizedName());
 
Сообщения
4,659
Лучшие ответы
44
Реакции
598
setDamage(1) или типа такого
ахахахха вот ты весь свой профессионализм показал малой. Гулял бы ты отсюда, не дорос советы пока давать!
Отвлекаясь от тролления школоты в тему отвечу:
В 1.12.2 нету меты в твоем восприятии. Там теперь енум тайпы - Blocks.LOG.getDefaultState().withProperty(BlockOldLog.VARIANT, BlockPlanks.EnumType.BIRCH) ; Ну или типо того, не помню точно
Если тебе нужно прям конкретно мета(число) это - BlockPlanks.EnumType.BIRCH.getMetadata();
 
Сообщения
1,374
Лучшие ответы
19
Реакции
132

Agravaine :j

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

Agravaine :j

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

Agravaine :j

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