[1.6.2] Дроп с блока при активации

Здравствуйте, это моя первая тема. Я новичок в моддинге, и во время создания мода у меня возник вопрос. Как сделать, что бы при нажатии ПКМ на блоке (при активации блока) с топором в руках с блока дропался определенный item?
 
Переопределяешь метод:
Код:
    /**
     * Called upon block activation (right click on the block.)
     */
    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
    {
        return false;
    }
И пишешь проверки в духе:
Код:
@Override
    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
    {
        ItemStack currentItem = par5EntityPlayer.getCurrentEquippedItem();
        if(currentItem.itemID == Item.axeIron.itemID) {
            currentItem.setItemDamage(currentItem.getItemDamage() - 2);
            par1World.spawnEntityInWorld(new EntityItem(par1World, par2, par3, par4, new ItemStack(Block.wood, MathHelper.getRandomIntegerInRange(new Random(), 8, 9))));
            return true;
        }
        
        return false;
    }
 
Собсна java я тоже пока знаю поверхностно, поэтому возникают еще вопросы. Почему при активации блока топор восполняет прочность?
И как поставить статичное количество выпадающей древесины? Ибо выпадает по 8-9 штук.
И плюс выпадают такие же 8-9 штук, но их нельзя подобрать.
 
Kuroi_Light написал(а):
Собсна java я тоже пока знаю поверхностно, поэтому возникают еще вопросы. Почему при активации блока топор восполняет прочность?
И как поставить статичное количество выпадающей древесины? Ибо выпадает по 8-9 штук.
И плюс выпадают такие же 8-9 штук, но их нельзя подобрать.
Во-первых, не стоит копипастить код) Во-вторых, объяснили тебе кривовато)
Код:
@Override
    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
    {
        ItemStack currentItem = par5EntityPlayer.getCurrentEquippedItem();//предмет,который выбрал игрок
        if(currentItem.itemID == Item.axeIron.itemID) {//сравниваем его с железным топором(П.с. на 1.7 надо убрать айди)
            currentItem.setItemDamage(currentItem.getItemDamage() + 2);//убавляем дамаг. Т.е. id:дамаг/ Чтобы использовать предмет надо его увеличивать -___-
            par1World.spawnEntityInWorld(new EntityItem(par1World, par2, par3, par4, new ItemStack(Block.wood, MathHelper.getRandomIntegerInRange(new Random(), 8, 9))));// призываем предмет с колличеством целого числа в районе 8-9,чтобы было как ты хочешь просто замени MathHelper.getRandomIntegerInRange(new Random(), 8, 9) на обычное число
            return true;
        }
        
        return false;
    }
 
Две проблемы осталось.
1) Когда активирую блок с топором в руке, с него дропаеться 1 блок древесины + 1 блок древесины, которую невозможно подобрать. К примеру вот дропнулось 2 штуки, подхожу, а подбирается только одна, а вторая, "призрачная", остается лежать. 
2) Ну и еще как добавить шанс дропа? Чтоб например блок дропался с шансом 25%.

P.S. В коде стер строчку, которая восполняла прочность топора, ни на что не повлияло, зато не мешает.
Код прилагается.
Код:
@Override
        public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
        {
            ItemStack currentItem = par5EntityPlayer.getCurrentEquippedItem();
            if(currentItem.itemID == ToolList.testAxe.itemID) {
                par1World.spawnEntityInWorld(new EntityItem(par1World, par2, par3, par4, new ItemStack(Block.wood, 1)));
                return true;
            }
            return false;
        }
 
Грят же, добавь в самом начале метода проверку:

Код:
if (world.isRemote)
  return false;

Ну или

Код:
if (!world.isRemote)
  return false;

Я не помню уже, лел.
 
Oldestkon написал(а):
Грят же, добавь в самом начале метода проверку:

Код:
if (world.isRemote)
  return false;

Ну или

Код:
if (!world.isRemote)
  return false;

Я не помню уже, лел.
Первое.
 
Ну, например :
Код:
if(MathHelper.getRandomIntegerInRange(new Random(), 0, 100)>25)return false;
 
Чет туплю я сильно. Мне нужно эту строчку изменить чтоб был шанс дропа 25%.
Код:
par1World.spawnEntityInWorld(new EntityItem(par1World, par2, par3, par4, new ItemStack(Block.wood, 1 < 0.25)));
 
Типа так (наверное):
Код:
rand = Math.random();
if (rand >= 0.0D && rand <= 0.25D) {
par1World.spawnEntityInWorld(new EntityItem(par1World, par2, par3, par4, new ItemStack(Block.wood, 1, 0)));
}
Есть разные способы, как подобное сделать.
 
А смысл проверять >= 0? Он и так от нуля до еденицы генерирует.
 
Majestic, привычка у меня такая.
 
Назад
Сверху