Как дропать из одного блока с meta другой блок с meta?

Led

291
3
0
В какой раз уже обращаюсь к Вам, Уважаемые со-форумцы!
Мне кажется название описывает суть проблемы.

У меня есть блок с метадатой, а мне нужно из него (при разбивании) дропать замшелый каменный кирпич (stonebrick 1).

Логичны для меня метод не работает:

Код:
    @Override
    public Item getItemDropped(int par1, Random par2Random, int par3)
    {
        return Blocks.stonebrick (1, par2Random, par3);
    }



Нашел на форуме способ, но мне почему-то (почему? - чисто визуально (по сравнению с дропом итема без мета из блока)) он кажется не самым удачным. Но он работает, но хотелось бы лучше.

Код:
  //Очень хитрая (и мне непонятная) штука, позволяющая дропать один блок из другого блока с meta
  public int quantityDropped(Random random) {
      return 0;
  }

  
  public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
      ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
      ret.add(new ItemStack(Blocks.stonebrick, 1, 1));
      return ret;
  }


Прошу дать мне наставления, в какую сторону копошиться, а желательно и помочь с проблемой.

Решил подглядеть, как это сделано у травы. Сделал так:

Код:
  public Item getItemDropped(int par1, Random par2Random, int par3)
  {
      return Blocks.stonebrick.getItemDropped(1, par2Random, 1);
  }

Но, к сожалению, падает простой каменный кирпич, не замшелый.

а за что вообще отвечают par1, par2Random, par3?

С Уважением, Led.

P.S: Может мне стоит создать одну тему и там спрашивать вопросы? Дабы не засорять форум?
 
"getItemDropped" - мы возвращаем Item, не ItemStack, а значит не указываем метудату при дропе.
Если не ошибаюсь, то нужно ещё использовать метод "damageDropped".
[merge_posts_bbcode]Добавлено: 29.03.2016 04:40:00[/merge_posts_bbcode]

Led написал(а):
P.S: Может мне стоит создать одну тему и там спрашивать вопросы? Дабы не засорять форум?
Правила 1.1.9.

[merge_posts_bbcode]Добавлено: 29.03.2016 04:44:44[/merge_posts_bbcode]

Led написал(а):
У меня есть блок с метадатой, а мне нужно из него (при разбивании) дропать замшелый каменный кирпич (stonebrick 1).
Возможно, тебе надо, что-то вроде этого:
Код:
@Override
public Item getItemDropped(int par1, Random par2Random, int par3) {
    return Item.getItemFromBlock(Blocks.stonebrick);
}

@Override
public int damageDropped(int metadata) {
    return 1;
}
[merge_posts_bbcode]Добавлено: 29.03.2016 04:49:51[/merge_posts_bbcode]

Led написал(а):
а за что вообще отвечают par1, par2Random, par3?
Если не ошибаюсь, то:
par1 - Метадата,
par2Random - Рандом,
par3 - Фортуна у инструмента.
 
Спасибо за ответ!
А если усложнить задачу?
Допустим у меня есть 11 каменно-кирпичных блоков, у всех один айди, разные метадаты (LegendaCore:BlockStoneBrick(meta:0) - LegendaCore:BlockStoneBrick(meta:11)).
Мне нужно из некоторых (блок:0, блок:1, блок:3) дропать, допустим замшелый каменный кирпич из ванили (Block.stonebrick (meta 1)), из других (блок:4, блок:5, блок:6, блок:7) дропать блок из моего мода (LegendaCore:BlockStoneBrick(meta:4)), а из третьих (блок:8, блок:9, блок:10, блок:11) дропать резной каменный кирпич из моего мода (LegendaCore:BlockStoneBrick(meta:8)).

Как такое можно организовать?

Разный дроп в зависимости от метадаты.
 
Что-то типа этого:
Код:
    @Override
    public Item getItemDropped(int metadata, Random random, int fortune) {
        switch(metadata) {
        case 0:
        case 1:
        case 3:return Item.getItemFromBlock(Blocks.stonebrick);
        default:return Item.getItemFromBlock(LegendaCore:BlockStoneBrick);
        }
    }

    @Override
    public int damageDropped(int metadata) {
        switch(metadata) {
        case 0:
        case 1:
        case 3:return 1;
        case 4:
        case 5:
        case 6:
        case 7:return 4;
        case 8:
        case 9:
        case 10:
        case 11:return 8;
        default:return metadata;
        }
    }
Я не знаю какой LegendaCore:BlockStoneBrick виде переменной.
 
Спасибо большое за ответ, но все же
Упс, это не переменная, это класс
LegendaCore.BlockStoneBrick

Ещё один вопрос назрел:
как показывать в вкладке креатива только блоки с определённым мета? То есть мне надо, допустим, что бы блоков с мета 2,3,5,6,7,9,10 не было в инвентаре креатива. Заранее спасибо, с Уважением, Led
 
Код:
    @SideOnly(Side.CLIENT)
    public void getSubBlocks(Item id, CreativeTabs table, List list) {
        list.add(new ItemStack(id, 1, 0));
        list.add(new ItemStack(id, 1, 1));
        list.add(new ItemStack(id, 1, 4));
        list.add(new ItemStack(id, 1, 8));
        list.add(new ItemStack(id, 1, 11));
    }
 
Пожалуйста.
 
Назад
Сверху