Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

[Решено] Как изменить название предмета в результате наковальни

Тема в разделе "Разработка плагинов для новичков", создана пользователем imDaniX, 28 янв 2017.

Статус темы:
Закрыта.
  1. Автор темы
    imDaniX

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

    Баллы:
    66
    Имя в Minecraft:
    imDaniX
    Здрасте!

    Нужна помощь: не могу никак изменить результат предмета в наковальне.
    Пытаюсь сделать так, чтобы итоговый предмет не изменял своего имени, если оно окрашено в зеленый.

    Вот часть кода:
    Код:
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e){
            if ((e.getInventory() instanceof AnvilInventory)) {
                if (e.getRawSlot()==e.getView().convertSlot(e.getRawSlot())) return;
                if (e.getSlotType()==InventoryType.SlotType.RESULT) return;
                if (e.getRawSlot()==2) return;
                ItemStack item = e.getInventory().getItem(0);
                ItemStack item2 = e.getCursor();
                if (item2!=null && item!=null && item.getItemMeta()!=null && item.getItemMeta().hasDisplayName()){
                    if (item.getItemMeta().getDisplayName().startsWith("§a"))
                        item2.getItemMeta().setDisplayName(item.getItemMeta().getDisplayName());
                } else return;
            }
        }
    Иии... Ничего. Предмет спокойно переименовывается. Уж не знаю что сделать. Также менял e.getCursor() на e.getCurrentItem(), результат такой-же.
    Помогите нубу ;-; Заранее спасибо
     
  2. Хостинг MineCraft
    <
  3. LuckyZeeRo

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

    Баллы:
    76
    Skype:
    luckyzeero
    Имя в Minecraft:
    LuckyZeeRo_
    Код:
    int slot = e.getView().convertSlot(e.getRawSlot());
    Слот, по которому кликаем, если инвентарь - Наковальня.
    Дальше, 0 - первый слот, 1 - второй, 2 - результат
    Получить предмет по слоту e.getInventory().getItem(slot);
    Чтобы переименовать имя результата, такой код:
    Код:
    String name = originalItem.getItemMeta().getDisplayName();
    ItemMeta meta = resultItem.getItemMeta();
    meta.setDisplayName(name);
    resultItem.setItemMeta(meta);
    Тоесть переименовываешь предмет в третьем слоте.
    Теперь про то, что ты получал предметы с курсора. Когда вызывается событие на клик инвентаря, то считай, что оно еще не произошло, это только событие перед тем, как ты кликнул. Тоесть если ты кликаешь по предмету пустым курсором, то на момент ивента курсор пуст, а предмет на своем же месте.[DOUBLEPOST=1485632891,1485632722][/DOUBLEPOST]И да
    item.getItemMeta().setDisplayName("Name") не проканает.
    Тоесть ты должен установить на предмет уже новую мету с новым именем.
     
  4. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Есть же PrepareAnvilEvent.
     
  5. LuckyZeeRo

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

    Баллы:
    76
    Skype:
    luckyzeero
    Имя в Minecraft:
    LuckyZeeRo_
    Но это когда ложишь вещь, а ты ложишь, переименовуешь и забираешь.
     
  6. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Этот ивент отслеживает все действия.
     
  7. Автор темы
    imDaniX

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

    Баллы:
    66
    Имя в Minecraft:
    imDaniX
    Большое спасибо за помощь с метой :)

    Спасибо за наводку - не знал про этот ивент.

    *вдруг кому пригодится*


    Код:
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e){
            if ((e.getInventory() instanceof AnvilInventory)) {
                if (e.getSlotType()!=InventoryType.SlotType.RESULT) return;
                if (e.getView().convertSlot(e.getRawSlot())!=2) return;
                ItemStack item = e.getInventory().getItem(0);
                ItemStack item2 = e.getInventory().getItem(2);
                if (item2!=null && item!=null && item.getItemMeta()!=null && item.getItemMeta().hasDisplayName()){
                    if (item.getItemMeta().getDisplayName().startsWith("§a")){
                    String name = item.getItemMeta().getDisplayName();
                    ItemMeta meta = item2.getItemMeta();
                    meta.setDisplayName(name);
                    item2.setItemMeta(meta);}
                } else return;
            }
        }

    Код:
        @EventHandler
        public void onAnvilResult(PrepareAnvilEvent e){
            ItemStack item = e.getInventory().getItem(0);
            ItemStack item2 = e.getResult();
            if (item2!=null && item!=null && item.getItemMeta()!=null && item.getItemMeta().hasDisplayName()){
                if (item.getItemMeta().getDisplayName().startsWith("§a")){
                String name = item.getItemMeta().getDisplayName();
                ItemMeta meta = item2.getItemMeta();
                meta.setDisplayName(name);
                item2.setItemMeta(meta);}
            } else return;
        }
     
  8. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Вот вам с анвил ивентом.

    Код:
        @EventHandler
        public void on(PrepareAnvilEvent e) {
            ItemStack item = e.getInventory().getItem(0);
            ItemStack result = e.getResult();
            if(item != null && item.hasItemMeta() && item.getItemMeta().hasDisplayName() && result.getType()!=Material.AIR && e.getInventory().getRenameText()!=null) {
                String name = item.getItemMeta().getDisplayName();
                if(name.contains("§a")) {
                    ItemMeta meta = result.getItemMeta();
                    meta.setDisplayName(name);
                    result.setItemMeta(meta);
                }
            }
        }
     
  9. LuckyZeeRo

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

    Баллы:
    76
    Skype:
    luckyzeero
    Имя в Minecraft:
    LuckyZeeRo_
    И когда меняешь каждую букву при переименовании, то каждый раз ивент идет?
     
  10. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    На все идет.
     
Статус темы:
Закрыта.

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