[1.6.4] Вопрос: Замена итема при условии

Oldestkon написал(а):
Ломание предметов ему не нужно, ему надо чтобы при определенной прочности (которая > 0) предмет менялся на другой.
А onUpdate аутизм, согласен. Лучше онСтоппендЮзинг или что-то вроде того. Но вопрос задан другой - я и отвечаю другое. Какой вопрос, такой и ответ, короче.

а по-подробнее можно про onStoppedUsing? Я подставил то, что показали, ибо разбираюсь в этом где-то приблизительно на уровне нуля) Обязательно возьмусь за учебник, думаю тогда больше понимания происходящего будет, просто сейчас нужно базу сделать для модификации, а потом, не торопясь и изучая джаву уже допиливать всё интереснее и сложнее.

К теме, не совсем понял, как сделать ту самую проверку.
 
В конечном итоге пока-что не вышло у меня с этим, что-то где-то косяк, не понимаю как решить.

Цель такая(вдруг не так объяснил) - дан инструмент(кирка, топор, лопата - не важно), игрок юзает его, когда прочность достигает определённой точки(желательно близко к 0, или совсем ноль), и в этот момент данный инструмент у игрока менялся на другой итем.

Код я не менял с последнего своего сообщения. Прошу помощи по этому вопросу, т.е. что мне надо добавить убрать в коде, чтобы теоретически это могло заработать? Спасибо
 
2,955
12
RaVeN написал(а):
Dragon2488 написал(а):
Опять тупые вопросы по незнанию языка. Как говорится - выучи джаву, потом что то делай на ней.
Сам и учи джаву свою.Если ты не знал была тема и олдестон говорил что джава выучить нельзя а синтаксис можно
Умный сильно? Сам недавно ни-хре-на не знал, не надо везде лезть, не хорошо.

inferno_alien, поищи метод onItemUsing или что то такое, там с помощью itemstack.getItemDamage() доставай дамаг итема, если он меньше лимита меняй на свой слиток, или что у тебя.
 
inferno_alien, поищи метод onItemUsing или что то такое, там с помощью itemstack.getItemDamage() доставай дамаг итема, если он меньше лимита меняй на свой слиток, или что у тебя.
Попробую пороюсь, спасибо)
 
2,955
12
RaVeN написал(а):
Я так думаю сверху максимальный урон забыл еаписать.Какая разницв синтаксис джавы знаю да и скалу выучу скоро существкнного отличия нету
Я уже учу, отличия есть, операторы тоже разные, так что не все так просто.
 
Нашёл onItemUse(...), но ругается что он boolean, когда выполняется вот эта строчка:
Код:
par2EntityPlayer.inventory.changeCurrentItem(TestMod.CopperIngot.itemID);
 
Вот оно как, понял, учту)

Всё равно что-то не так, может в аргументах что-то поменять/подставить, я их по-сути не трогал.

Код:
    @Override
    public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
    {
        if(itemstack.getItemDamage() >= 5)
        {
            entityplayer.inventory.changeCurrentItem(TestMod.CopperIngot.itemID);
        }
        return true;
    }

Выше поставил:   this.setMaxDamage(15); нужно это вообще?
 
1,990
18
105
RaVeN написал(а):
Твои слова да тебе бы в уши.
Не учи, коль не знаешь. Что ты такое несешь вообще?
После if можно ставить точку с запятой, но тогда это будет немного свернутый код, что-то в стиле 

Код:
for (;;doSomething());

А return.. Боже мой, после return всегда ставится точка с запятой.
Про дамаг:
Он вызывает setMaxDamage, а не setDamage.
 
1,990
18
105
Покажи пример. Небось пишешь что-то после return'а без условий, который выполняется всегда и NB тебе помечает его как unreachable code.
 
1,990
18
105
Покажи код с ошибкой уже, и вообще, переливаемся во флуд, ТС не обрадуется нашей беседе.
 
Я в конечном итоге понять не могу, где в коде косяк? Мб не дописано что, или косяк в том, что уже есть?
 
1,990
18
105
Да, логично.  Не видится всё, что после него, во внутренних (круглых, не фигурных) скобках все выполняется.
Алсо, у него в коде нету ; после if'а.
ТСу:
А что не так, не работает вообще, или что?
 
1,990
18
105
Ты уже зафейлил простейший таск с хранением ARGB в одной переменной, тебе этого мало?
 
329
13
Код:
// Эта строчка в конструкторе определит максимальный дамаг у вещи
setMaxDamage(30);

// Не знаю, когда этот метод срабатывает, но в нем мы будем
// проверять, не достиг ли предмет определенного уровня повреждений,
// а если достиг, то заменим его на другой
@Override
public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
{
    // Если предмет накопил 25 урона и более
    if(itemstack.getItemDamage() >= 25)
    {
        // Меняем текущий предмет
        entityplayer.inventory.changeCurrentItem(TestMod.CopperIngot.itemID);
    }
    else
    {
        // А если еще не накопил, то повреждаем предмет на единицу
        // Вроде есть еще метод DamageItem, но нет возможности проверить
        itemstack.setItemDamage(itemstack.getItemDamage() + 1);
    }
    return true;
}

Код не проверял, но думаю, что суть ясна : ты забыл увеличивать урон.
 
2,955
12
TaoGunner написал(а):
Код:
// Эта строчка в конструкторе определит максимальный дамаг у вещи
setMaxDamage(30);

// Не знаю, когда этот метод срабатывает, но в нем мы будем
// проверять, не достиг ли предмет определенного уровня повреждений,
// а если достиг, то заменим его на другой
@Override
public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
{
    // Если предмет накопил 25 урона и более
    if(itemstack.getItemDamage() >= 25)
    {
        // Меняем текущий предмет
        entityplayer.inventory.changeCurrentItem(TestMod.CopperIngot.itemID);
    }
    else
    {
        // А если еще не накопил, то повреждаем предмет на единицу
        // Вроде есть еще метод DamageItem, но нет возможности проверить
        itemstack.setItemDamage(itemstack.getItemDamage() + 1);
    }
    return true;
}

Код не проверял, но думаю, что суть ясна : ты забыл увеличивать урон.
да, есть метод is.damageItem(кол-во, player)
 
Огромная благодарность за столь подробные объяснения, где не понимал - теперь осмыслил)

НО, по-прежнему не хочет работать - в игре ноль реакции. Менял setItemDamage на damageItem, абсолютно тоже самое, значения менял(ну а вдруг?) - тоже нет.
 
2,955
12
У тебя же кирка. Делай это не в onItemUse, а в onBlockDestroyed. Могу даже полный метод с аргументами дать, чтоб тебе не искать.public boolean onBlockDestroyed(ItemStack is, World world, int blockID, int x, int y, int z, EntityLivingBase entity)
 
Сверху