Помогите Как поменять макс. прочность предмета?

  • Автор темы Автор темы Obelix
  • Дата начала Дата начала

Obelix

Активный участник
Баллы
61
Были две попытки поменять максимальную прочность. 1). Поменять прочность в исходном коде ядра (использую Spigot 1.12.2) в enumeration в Material как напрямую, так и с добавлением сетера для переменной durability. Не помогло. 2). Так и попытка отдельно менять прочность с помощью плагина и встроенного сетера в ItemStack, например, вот код для лука:
Код:
@EventHandler
    public void onPlayerShootBow(EntityShootBowEvent e) {
        if (e.getEntity() instanceof Player) {
            Player p = (Player) e.getEntity();
            breakItem(p, p.getItemInHand(), (short)3 );
        }
    }
private void breakItem(Player p, ItemStack i, short durability) {
        if (i.getDurability() > durability) {
            i.setDurability(durability);
            p.setItemInHand(i);
        }
    }
И это тоже не работает. Помогите, пожалуйста
Или может я что то не так сделал?
 
Максимальная прочность изменяется в клиенте и на сервере.
Но ты можешь имитировать это плагином, устанавливая % прочность твоего предмета от максимальной и записывая свою прочность в лор или в nbt тег предмета. То есть допустим прочность лука 385, а тебе нужно имитировать 1000. Когда у тебя должна быть прочность 500/1000, ты ставишь 385 * (500 / 1000) = 182. В итоге визуально будет видно 50% прочности.
 
Хорошо, допустим, буду использовать % и хранить текущую прочность в лоре. Но как её установить? Вот я изменил метод, чтобы узнать работает ли он вообще. (Моя идея заключалась в том, чтобы ломать предмет до того значения, сколько мне нужно от него прочности, в данном случае я хочу, чтобы лук стрелял только 3 раза). В итоге после выстрела в чате пишется "3", но сам лук имеет обычную прочность. Если в сообщении вместо i написать p.getItemInHand() результат будет аналогичный.
Код:
private void breakItem(Player p, ItemStack i, short durability) {
        if (i.getDurability() > durability) {
            i.setDurability(durability);
            p.setItemInHand(i);
            p.sendMessage(String.valueOf(i.getDurability()));
        }
    }
 
Назад
Верх