Помогите Помогите с привязкой определенного предмета

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

Dima150

Новичок
Баллы
6
Имя в Minecraft
Dimon179
Суть в том что хочу когда игрок нажимает определенным предметом правой кнопкой мыши по блоку или воздуху то он получает сет брони, как сделать так чтобы при нажатии он получал вещь я понял, но подскажите как сделать так чтобы этот самый предмет игрок не мог просто скрафтить или получить просто так в выживании и использовать его для получения сета я написал примерно так :
@EventHandler
public void onItemClick(PlayerInteractEvent e){
if( e.getAction() != Action.RIGHT_CLICK_BLOCK && e.getAction() != Action.RightCLICK_AIR) return;

Я слышал что то что я хочу можнр сделать через persistentdatacontainer не могли бы вы скинуть код
 
Суть в том что хочу когда игрок нажимает определенным предметом правой кнопкой мыши по блоку или воздуху то он получает сет брони, как сделать так чтобы при нажатии он получал вещь я понял, но подскажите как сделать так чтобы этот самый предмет игрок не мог просто скрафтить или получить просто так в выживании и использовать его для получения сета я написал примерно так :
@EventHandler
public void onItemClick(PlayerInteractEvent e){
if( e.getAction() != Action.RIGHT_CLICK_BLOCK && e.getAction() != Action.RightCLICK_AIR) return;

Я слышал что то что я хочу можнр сделать через persistentdatacontainer не могли бы вы скинуть код
Код:
        //проверка на правый клик, клик по воздуху
        
        ItemStack item = //твое получение предмета
        
        if(!item.hasItemMeta()) return;

        ItemMeta itemMeta = item.getItemMeta();
        
        assert itemMeta != null;
        if(itemMeta.getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', "&cСупер вещь"))) {
            //todo
        } else {
            //todo
        }

        
        //Чтобы установить имя предмету

        itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&cСупер вещь"));
        
        item.setItemMeta(itemMeta);
 
Код:
        //проверка на правый клик, клик по воздуху
    
        ItemStack item = //твое получение предмета
    
        if(!item.hasItemMeta()) return;

        ItemMeta itemMeta = item.getItemMeta();
    
        assert itemMeta != null;
        if(itemMeta.getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', "&cСупер вещь"))) {
            //todo
        } else {
            //todo
        }

    
        //Чтобы установить имя предмету

        itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&cСупер вещь"));
    
        item.setItemMeta(itemMeta);
Переименовал человек предмет в наковальне и полетел твой код в небытьё )


Суть в том что хочу когда игрок нажимает определенным предметом правой кнопкой мыши по блоку или воздуху то он получает сет брони, как сделать так чтобы при нажатии он получал вещь я понял, но подскажите как сделать так чтобы этот самый предмет игрок не мог просто скрафтить или получить просто так в выживании и использовать его для получения сета я написал примерно так :
@EventHandler
public void onItemClick(PlayerInteractEvent e){
if( e.getAction() != Action.RIGHT_CLICK_BLOCK && e.getAction() != Action.RightCLICK_AIR) return;

Я слышал что то что я хочу можнр сделать через persistentdatacontainer не могли бы вы скинуть код

Если хочешь через PersistentDataContainer можешь попробовать так:


Код:
ItemStack item = ...;
ItemMeta meta = item.getItemMeta();

if(meta == null ) return;

PersistentDataContainer container = meta.getPersistentDataContainer();

//Если надо добавить значение:
container.set(new NamespacedKey(plugin, key), PersistentDataType какой тебе подходит, само значение)

//Если надо проверить
container.has(new NamespacedKey(plugin, key), PersistentDataType такой же как и у установленного значения

//Ну и не забываем сохранить мету предмету если ты устанавливал значение
item.setItemMeta(meta);

Правда учти что этой фишки нет на старых версиях
 
Переименовал человек предмет в наковальне и полетел твой код в небытьё )




Если хочешь через PersistentDataContainer можешь попробовать так:


Код:
ItemStack item = ...;
ItemMeta meta = item.getItemMeta();

if(meta == null ) return;

PersistentDataContainer container = meta.getPersistentDataContainer();

//Если надо добавить значение:
container.set(new NamespacedKey(plugin, key), PersistentDataType какой тебе подходит, само значение)

//Если надо проверить
container.has(new NamespacedKey(plugin, key), PersistentDataType такой же как и у установленного значения

//Ну и не забываем сохранить мету предмету если ты устанавливал значение
item.setItemMeta(meta);

Правда учти что этой фишки нет на старых версиях
Спасибо огромное проверил все работает
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх