1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Kapfy12, 5 фев 2023.

Статус темы:
Закрыта.
  1. Автор темы
    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));
    
    }
    
     
    Последнее редактирование: 5 фев 2023
  2. Автор темы
    Kapfy12

    Kapfy12 Активный участник

    Баллы:
    61
    поменял
    на просто
    Код:
     durability = durability -1; 
    и увидел потом через консоль, что постоянно durability сначала отнимается. потом снова делается старым значением с новым ударом. сейчас попробую закостылить через счётчик увеличивающий на один отнимаемое число
     
  3. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Отменяешь событие, в котором вызывается метод hit()?
     
  4. Автор темы
    Kapfy12

    Kapfy12 Активный участник

    Баллы:
    61
    Вот, это единственное событие которое работает с 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());
                }
            }
        }
    }
    
     
  5. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    1) Стаку не назначается мета
    2) В руку не устанавливается актуальный стак
     
Статус темы:
Закрыта.

Поделиться этой страницей