Как проверить metedata у блока или у предмета

318
12
Здравсвуйте, уважаемые читатели данной темы. 
1) world.getBlockMetadata(x,y,z) - работает, но в случае, если блок оказывается сундуком/печкой, т.е ставится в сторону к игроку - этот метод возвращает уже не метадату, а сторону в которую стоит блок. Какие идеи есть, что бы получить metadata(то что после двоеточия у блока) в мире? [ItemStack iStack = new ItemStack(event.world.getBlock(event.x, event.y, event.z));
if iStack.getItemDamage() == meta - решено] 

2) Как проверить у предмета что после двоеточия у предмета? [itemStack.getItemDamage() - решено]
3) Как и куда лучше записывать посоветуете ID'ы предметов которые под запрет. Ибо сейчас не куда не записывается, просто сделал вот так:
public static ArrayList<String> listBlock = Lists.newArrayList();
public void addBlock(String str) {
     listBlock.add(str);

}
addBlock("1:-1");
addBlock("61:-1");

Если интерестно, то пилю свой мод на запрет предметов с GUI и командами
 
1. Не обязательно. У обычного блока всегда метадата 0. Но есть специальные блоки, которые метадаты по своему используются. Сундук/печка метадата используется типа для поворота блока.
2. Если я правельно понял тебя, то проверять какой урон, "getItemDamage()".
3. Не знаю.
 
timaxa007 написал(а):
1. Не обязательно. У обычного блока всегда метадата 0. Но есть специальные блоки, которые метадаты по своему используются. Сундук/печка метадата используется типа для поворота блока.
2. Если я правельно понял тебя, то проверять какой урон, "getItemDamage()".
3. Не знаю.
1. F3 + H - показывает ид:метадату всех предметов когда наводишь курсор. Пытался найти этот кусочек кода, но не нашел. Как тогда можно получить метадату? Ибо я по ней проверяю какой блок запрещать.
2. Спасибо.
 
1. Во-первых есть разница между блоком в мире и блоком в инвентаре.
Блок в инвентаре он типа как предмет в инвентаре.
Блок в мире это блок в мире.
Из мира "world.getBlockMetadata(x,y,z)", из инвентаря "item_stack.getItemDamage()".
 
А не, 2 не решено. Возьмите в пример зелья в MineCraft. У них там разные Metadata. В доступности у меня есть только предмет и мир. Как проверить метадатку?
Ну и в блоке тоже.. не решено.
 
Урон предмета и есть метадата предмета - "item_stack.getItemDamage()".
И как я понял метадата в зельях используется, чтобы узнать бросать или пить зелье, а так-же забиндина к метадате свой эффект и со своими уровнем и временем. И для него
А так-же можно в NBTTagCompound этих зелей храниться какой эффект, сколько времени и какой уровень, а так-же может храниться несколько видов зелий.
[merge_posts_bbcode]Добавлено: 18.03.2016 23:20:09[/merge_posts_bbcode]

И что в блоке не решено?
 
timaxa007 написал(а):
И что в блоке не решено?
То что в некоторых блоках выдает metadata - сторону установленного блока. Т.е если блок кровать/печька/сундук - metadata не верная.
[merge_posts_bbcode]Добавлено: 19.03.2016 03:52:46[/merge_posts_bbcode]

2 - решено.
Осталось только 1 и 3 :)
Спасибо большое..
 
wilah написал(а):
1. Сторона и есть метадата
Дак мне именно не надо получать сторону, мне надо получить грубо говоря, то что после двоеточия. Т.е метадату нормальную у блока который стоит в мире.
 
Ещё раз повторюсь, но более подробно.
world.getBlockMetadata(x,y,z) - показывает метадату.
Некоторые блоки используют метадату для поворотов или ещё для другого. К примеру:
Код:
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack is) {
    int l = MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
    world.setBlockMetadataWithNotify(x, y, z, l, 2);
}
Метадата остаётся метадатой. В метадату сохраняем наши значение, которые выражают якобы поворот блока.
То что в инвентаре одно, то что в мире это другое.
Мы можем изменить значения метадаты этого блока в инвентаре, но в мир будет ставиться, то значение метадата которые мы дадим во время установки.
Измени метадату у печки в инвентаре, а в мир поставит своё значение, так как у него при установки берёт метадату не из инвентарного блока, а даёт своё значение от положения куда смотрит кто ставит этот блок.
К примеру шерсть - измени метадату у шерсти в инвентаре, то и в мир будет ставиться такое-же значение, но метадату можно ставить в мире с разными значениями, но сохраняться и работать будет от 0 до 15.
Yarik написал(а):
Какие идеи есть, что бы получить metadata(то что после двоеточия у блока) в мире?
Нету и не было, чтобы это было в мире. То что отображается в инвентаре "ид:метадата" это письменное сокращение от двух параметров ид и метадата, которые пишутся слитно через знак двоеточие для графического отображения.

3. Куда хочешь. Для каждого свое хранение и изъятия нужных параметров запретов предметов.
 
2. А по каким параметрам сравнивать блоки в мире? Ибо я беру только id:meta и их сравниваю. В инвентаре нормально всё..А вот в мире только id могу сравнивать получается. Т.к по названию блока/и т.п нельзя(одинаковые к пример у того же стекла цветного)
 
Yarik, проверять по иду и создавать дополнительную проверку - "проверять по метадате в мире или нет".
 
timaxa007 написал(а):
Yarik, проверять по иду и создавать дополнительную проверку - "проверять по метадате в мире или нет".
По иду я уже проверяю(event.world.getBlock(event.x, event.y, event.z) == myBlock)... А вот как по метадате или т.п - я без понятия.
 
Урааа, решено. 
ItemStack iStack = new ItemStack(event.world.getBlock(event.x, event.y, event.z));

if iStack.getItemDamage() == meta
Работает. 

Так-же, возможно ли получить дату мира и туда записывать что либо? Если да, то как?
 
Назад
Сверху