Войти или зарегистрироваться

Помогите Значение в PersistentDataContainer предмета не уменьшается

  • Автор темы Автор темы Kapfy12
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Kapfy12

Активный участник
Баллы
61
Когда игрок кликает на наковальню специальным предметом, значение в
PersistentDataContainer не уменьшается, хотя должно.
Код:
Код:
public void hit(ItemStack itemStack, Player player) {
    ItemMeta meta = itemStack.getItemMeta();

    int durability = meta.getPersistentDataContainer().get(NamespacedKey.fromString("hits_num"), PersistentDataType.INTEGER);
    Bukkit.getConsoleSender().sendMessage(String.valueOf(durability));
    if (durability <= 0) {
        player.sendMessage(ChatColor.RED + "Молот сломан");
        return;
    }

    player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_PLACE, 1, 0);
    meta.getPersistentDataContainer().set(NamespacedKey.fromString("hits_num"), PersistentDataType.INTEGER, durability - 1); // Уменьшаем прочность на 1
    Bukkit.getConsoleSender().sendMessage(String.valueOf(durability));

}
 
Последнее редактирование:
поменял
meta.getPersistentDataContainer().set(NamespacedKey.fromString("hits_num"), PersistentDataType.INTEGER, durability - 1);
на просто
Код:
 durability = durability -1;
и увидел потом через консоль, что постоянно durability сначала отнимается. потом снова делается старым значением с новым ударом. сейчас попробую закостылить через счётчик увеличивающий на один отнимаемое число
 
Отменяешь событие, в котором вызывается метод hit()?
 
Отменяешь событие, в котором вызывается метод hit()?
Вот, это единственное событие которое работает с hit() и отменяет оно лишь открытие интерфейса наковальни
Код:
@EventHandler
public void onSmith(PlayerInteractEvent event){
    if (event.getAction() == Action.RIGHT_CLICK_BLOCK ){
        Block clickedBlock = event.getClickedBlock();
        assert clickedBlock != null;
        if (clickedBlock.getType().name().equals("ANVIL")){ // Есть ли наковальня?
            Hammer hammer = Hammer.getHammerFrom(event.getPlayer().getInventory().getItemInMainHand());

            if (hammer != null){
                event.setCancelled(true);
                hammer.hit(event.getPlayer().getInventory().getItemInMainHand(), event.getPlayer());
            }
        }
    }
}
 
1) Стаку не назначается мета
2) В руку не устанавливается актуальный стак
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх