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

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

Discussion in 'Разработка плагинов для новичков' started by imDaniX, Jan 28, 2017.

Thread Status:
Not open for further replies.
  1. Автор темы
    imDaniX

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

    Trophy Points:
    66
    Имя в Minecraft:
    imDaniX
    Здрасте!

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

    Вот часть кода:
    Code:
        @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 Активный участник Пользователь

    Trophy Points:
    76
    Skype:
    luckyzeero
    Имя в Minecraft:
    LuckyZeeRo_
    Code:
    int slot = e.getView().convertSlot(e.getRawSlot());
    Слот, по которому кликаем, если инвентарь - Наковальня.
    Дальше, 0 - первый слот, 1 - второй, 2 - результат
    Получить предмет по слоту e.getInventory().getItem(slot);
    Чтобы переименовать имя результата, такой код:
    Code:
    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 Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Есть же PrepareAnvilEvent.
     
  5. LuckyZeeRo

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

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

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

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

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

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

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

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


    Code:
        @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;
            }
        }

    Code:
        @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 Администратор

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

    Code:
        @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 Активный участник Пользователь

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

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

    Trophy Points:
    173
    Skype:
    alexandr0116
    На все идет.
     
Thread Status:
Not open for further replies.

Share This Page