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

Помогите Плагин не определяет иные шлема

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

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

    RIPEX Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    RIPEX_RU
    И снова здравствуйте великие разумы с форума, я опять пришел к вам за помощью)
    Код:
                public void run() {
    
                    short durab = 275;
                    for(Player player: Bukkit.getOnlinePlayers()) {
                        
                        player.sendMessage("0");
                        
                        World w = player.getWorld();
                        
                        if(!w.hasStorm()) {
                            continue;   
                        }
                        
                        if(w.getHighestBlockAt(player.getLocation()).getY() > player.getLocation().getY() + 1) {
                            player.sendMessage("2");
                            continue;
                        }
                        
                        if( player.getInventory().getHelmet() != null && player.getEquipment().getHelmet().getItemMeta().getLore().equals(lore) ){
                            durab = (short) (player.getInventory().getHelmet().getDurability() + 1);
                            player.getInventory().getHelmet().setDurability(durab);
                            if(player.getInventory().getHelmet().getDurability()>275) {
                                player.getInventory().getHelmet().setAmount(0);
                            }
                            continue;
                        }
                        player.damage(2);
                        player.addPotionEffect(blind);
                        player.addPotionEffect(poison);
                        
                    }
                }
    В чем собственно заключается проблема. Я добавил к плагину на кислотный дождь специальный шлем, в котором игрока не должно дамажить, но когда шлем на игроке то под дождем он начинает ломаться, и все вроде было хорошо. Но почему то если надеть любой другой шлем, то урон так же не проходит, прочность с других шлемов так же не снимается. Вообщем я опять жестко туплю, надеюсь вы мне поможете)
     
  2. Zuif

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

    Баллы:
    76
    у тебя на других шлемах лор тот самый?
    player.getEquipment().getHelmet().getItemMeta().getLore().equals(lore)
     
  3. Автор темы
    RIPEX

    RIPEX Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    RIPEX_RU
    Ну у меня в новом шлеме задан новый лор, плюс он даже не заходит в этот цикл, ибо если я сделаю вот так:
    Код:
    if( player.getInventory().getHelmet() != null && player.getEquipment().getHelmet().getItemMeta().getLore().equals(lore) ){
                            player.sendMessage("1");
                            durab = (short) (player.getInventory().getHelmet().getDurability() + 1);
                            player.getInventory().getHelmet().setDurability(durab);
                            if(player.getInventory().getHelmet().getDurability()>275) {
                                player.getInventory().getHelmet().setAmount(0);
                            }
                            continue;
    То без шлема: Будет урон
    В нужном шлеме: Пишет 1 и урон не проходит, тратится прочность
    В любом другом шлеме: Ничего не пишет, урон не проходит, прочность не тратится
    Я вообще не понял где он из цикла выходит в другом шлеме
     
  4. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    stacks - массив твоих ItemStack'ов
    PHP:
                    if (p.getInventory().getHelmet() != null)
                        if (
    Arrays.stream(stacks()).anyMatch(stack -> stack.isSimilar(p.getInventory().getHelmet()))) {
                            
    //TODO
                        
    }
     
  5. Автор темы
    RIPEX

    RIPEX Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    RIPEX_RU
    Через isSimillar и так работает, но IsSimillar смотрит на прочность, а мне это не подходит, ибо прочность предмета уменьшается
     
  6. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Ну смотри черел лор, какая разница?
     
  7. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Я бы на твоем месте добавил свой нбт тег и не парился с проверкой по лору
     
  8. Автор темы
    RIPEX

    RIPEX Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    RIPEX_RU
    Так я ушел гуглить что такое NBT tag и как оно работает. Спасибо за идею
     
  9. Автор темы
    RIPEX

    RIPEX Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    RIPEX_RU
    Можно пример такой работы с НБТ тэгом?
     
  10. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    +- так
    PHP:
        public ItemStack addTags(ItemStack stackMap<StringStringtags) {
            
    net.minecraft.server.v1_16_R3.ItemStack nms CraftItemStack.asNMSCopy(stack);
            
    NBTTagCompound tagCompound = new NBTTagCompound();
            if (
    nms.hasTag())
                
    tagCompound nms.getTag();
            for (
    Map.Entry<StringStringentry tags.entrySet())
                
    tagCompound.set(entry.getKey(), NBTTagString.a(entry.getValue()));
            return 
    CraftItemStack.asBukkitCopy(nms);
        }
      
        public 
    boolean hasTag(ItemStack stackString keyString value) {
            
    net.minecraft.server.v1_16_R3.ItemStack nms CraftItemStack.asNMSCopy(stack);
            if (!
    nms.hasTag())
                return 
    false;
            
    NBTTagCompound tagCompound nms.getTag();
            if (!
    tagCompound.hasKey(key))
                return 
    false;
            return 
    tagCompound.getString(key).equals(value);
        }
     
  11. Автор темы
    RIPEX

    RIPEX Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    RIPEX_RU
    Так, ладно выглядит сложно, завтра попробую разобраться
     
  12. Автор темы
    RIPEX

    RIPEX Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    RIPEX_RU
    Все, я все решил. Оказалось что это просто я тупич и проверял на определенный лор, когда у других шлемов лора просто нет. В общем поставил просто проверку наличия лора и все норм.
     
Статус темы:
Закрыта.

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