Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Нельзя изменить характеристики ItemStack

Статус
Закрыто для дальнейших ответов.

Krongss_fur

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Krong
Здравствуйте, делаю мини системку стрельбы с помощью RayTrace,в прочем не важно. С помощью вот такого кода в отдельном классе делаю ItemStack кастомный уже.

Код:
public class Pistol{



    public static ItemStack Pistol;


    public static void init(){
        Pistolinfo();
    }

    public static void Pistolinfo(){
        ItemStack PistolStack = new ItemStack(Material.STICK, 1);
      
  ItemMeta pistolmeta = PistolStack.getItemMeta();
        PersistentDataContainer pdc = pistolmeta.getPersistentDataContainer();
        pdc.set(NamespacedKey.fromString("gun_name"), PersistentDataType.STRING, "Pistol");
        pdc.set(NamespacedKey.fromString("bullets_default"), PersistentDataType.INTEGER, 12);
        pdc.set(NamespacedKey.fromString("bullets"), PersistentDataType.INTEGER, 12);
        pdc.set(NamespacedKey.fromString("bullet_damage"), PersistentDataType.INTEGER, 10);
        String displayname = ChatColor.RED + pdc.get(NamespacedKey.fromString("gun_name"), PersistentDataType.STRING);
        pistolmeta.setDisplayName(displayname);
        PistolStack.setItemMeta(pistolmeta);
        Pistol = PistolStack;
    }

Потом, при определённом взаимодействие с предметом(с помощью ивента) я из данных PersistendData строки уменьшаю количество пуль. Но в итоге оно не изменяется.
Изменяю с помощью такого кода:

Код:
              Integer bullets = e.getItem().getItemMeta().getPersistentDataContainer().get(
                      NamespacedKey.fromString("bullets"), PersistentDataType.INTEGER);
              Integer bulletsdef = e.getItem().getItemMeta().getPersistentDataContainer().get(
                      NamespacedKey.fromString("bullets_default"), PersistentDataType.INTEGER);
              Integer bulletsdamage = e.getItem().getItemMeta().getPersistentDataContainer().get(
                      NamespacedKey.fromString("bullet_damage"), PersistentDataType.INTEGER);
              Integer resultBullets = bullets;
              resultBullets = resultBullets - 1;

if(bullets > 0){
    e.getItem().getItemMeta().getPersistentDataContainer().set(NamespacedKey.fromString(
            "bullets"), PersistentDataType.INTEGER, resultBullets);

Но я так как не совсем глупый, понимаю что проблема, в том что класс Pistol где ItemStack объявлен как static(void и ItemStack).

Поэтому не меняются значения. Пробовал убирал просто static из значений всех в классе Pistol, на что аналогично получал ошибки, ну так неправильно. Тут я не знаю что делать. Надеюсь подскажите.
 
getItemMeta() выводит копию меты, а значит, итемстаку изменения PersistentDataContainer не присваивается.
 
Понял, просто получаю теперь мету, изменяю её и перезаписываю. Работает, благодарю. :nerd:
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх