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

Помогите Lore из поднимаемой вещи

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

  1. Автор темы
    Tyzun

    Tyzun Старожил

    Баллы:
    153
    Skype:
    tyzun1997
    Имя в Minecraft:
    _Tyzun_
    Подскажите что я сделал не так:
    Код:
    @EventHandler
    public void nodrop(PlayerPickupItemEvent e){
        if (e.isCancelled()) return;
        Player p = e.getPlayer();
        ItemStack i = (ItemStack) e.getItem();
        List<String> lore = i.getItemMeta().getLore();
        if(!p.hasPermission("vp.vip") && lore.contains("VIP")){
            e.setCancelled(true);
        }
    }
    и можно ли вообше добыть lore в таком эвенте?
     
  2. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Tyzun, в чем проблема? Подозреваю NPE при попытке поднять обычные вещи.
    Нужно проверять существование ItemMeta и Lore:

    i.hasItemMeta()
    i.getItemMeta().hasLore()
     
    ql_Nik_lp нравится это.
  3. Автор темы
    Tyzun

    Tyzun Старожил

    Баллы:
    153
    Skype:
    tyzun1997
    Имя в Minecraft:
    _Tyzun_
    Проблема в том, что игрокбез права может поднимать и то, и то
    Вот полный код:
    Код:
    package ua.tyzun.vp;
    
    import java.util.List;
    
    
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerPickupItemEvent;
    import org.*********ventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class vp extends JavaPlugin implements Listener {
    @Override
    public void onEnable(){
        getServer().getPluginManager().registerEvents(this, this);
    }
    @EventHandler
    public void nodrop(PlayerPickupItemEvent e){
        if (e.isCancelled()) return;
        Player p = e.getPlayer();
        ItemStack i = (ItemStack) e.getItem();
        List<String> lore = i.getItemMeta().getLore();
        if(!p.hasPermission("vp.vip") && lore.contains("VIP")){
            e.setCancelled(true);
        }
    }
    }
     
  4. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Tyzun, виповский предмет как создается? Название "VIP" случайно не в цвете?
     
  5. Автор темы
    Tyzun

    Tyzun Старожил

    Баллы:
    153
    Skype:
    tyzun1997
    Имя в Minecraft:
    _Tyzun_
    Через Essentials, фиолетовый цвет
     
  6. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Код:
        ItemStack i = e.getItem().getItemStack();
     
    Item это сущность.
     
  7. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Значит в сравниваемой строке должен тоже присутствовать цвет. Или же, наоборот, от него перед сравнением нужно избавляться.

    Ну и плюс Ission верно заметил.
     
  8. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Фиолетовый увет -- цвет lore по умолчанию. Так же на сколько я знаю, при contains игнорирует цвет.
    Когда я создавал что-то подобное, я воспользовался тем, что текст распологался на строго фиксированом месте(на нулевой, первой или последней строчке).
     

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