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

Статус
Закрыто для дальнейших ответов.

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);
                    
                }
            }
В чем собственно заключается проблема. Я добавил к плагину на кислотный дождь специальный шлем, в котором игрока не должно дамажить, но когда шлем на игроке то под дождем он начинает ломаться, и все вроде было хорошо. Но почему то если надеть любой другой шлем, то урон так же не проходит, прочность с других шлемов так же не снимается. Вообщем я опять жестко туплю, надеюсь вы мне поможете)
 
у тебя на других шлемах лор тот самый?
player.getEquipment().getHelmet().getItemMeta().getLore().equals(lore)
 
у тебя на других шлемах лор тот самый?
player.getEquipment().getHelmet().getItemMeta().getLore().equals(lore)
Ну у меня в новом шлеме задан новый лор, плюс он даже не заходит в этот цикл, ибо если я сделаю вот так:
Код:
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 и урон не проходит, тратится прочность
В любом другом шлеме: Ничего не пишет, урон не проходит, прочность не тратится
Я вообще не понял где он из цикла выходит в другом шлеме
 
Ну у меня в новом шлеме задан новый лор, плюс он даже не заходит в этот цикл, ибо если я сделаю вот так:
Код:
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 и урон не проходит, тратится прочность
В любом другом шлеме: Ничего не пишет, урон не проходит, прочность не тратится
Я вообще не понял где он из цикла выходит в другом шлеме
stacks - массив твоих ItemStack'ов
PHP:
                if (p.getInventory().getHelmet() != null)
                    if (Arrays.stream(stacks()).anyMatch(stack -> stack.isSimilar(p.getInventory().getHelmet()))) {
                        //TODO
                    }
 
stacks - массив твоих ItemStack'ов
PHP:
                if (p.getInventory().getHelmet() != null)
                    if (Arrays.stream(stacks()).anyMatch(stack -> stack.isSimilar(p.getInventory().getHelmet()))) {
                        //TODO
                    }
Через isSimillar и так работает, но IsSimillar смотрит на прочность, а мне это не подходит, ибо прочность предмета уменьшается
 
Я бы на твоем месте добавил свой нбт тег и не парился с проверкой по лору
 
+- так
PHP:
    public ItemStack addTags(ItemStack stack, Map<String, String> tags) {
        net.minecraft.server.v1_16_R3.ItemStack nms = CraftItemStack.asNMSCopy(stack);
        NBTTagCompound tagCompound = new NBTTagCompound();
        if (nms.hasTag())
            tagCompound = nms.getTag();
        for (Map.Entry<String, String> entry : tags.entrySet())
            tagCompound.set(entry.getKey(), NBTTagString.a(entry.getValue()));
        return CraftItemStack.asBukkitCopy(nms);
    }
  
    public boolean hasTag(ItemStack stack, String key, String 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);
    }
 
+- так
PHP:
    public ItemStack addTags(ItemStack stack, Map<String, String> tags) {
        net.minecraft.server.v1_16_R3.ItemStack nms = CraftItemStack.asNMSCopy(stack);
        NBTTagCompound tagCompound = new NBTTagCompound();
        if (nms.hasTag())
            tagCompound = nms.getTag();
        for (Map.Entry<String, String> entry : tags.entrySet())
            tagCompound.set(entry.getKey(), NBTTagString.a(entry.getValue()));
        return CraftItemStack.asBukkitCopy(nms);
    }
 
    public boolean hasTag(ItemStack stack, String key, String 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);
    }
Так, ладно выглядит сложно, завтра попробую разобраться
 
Все, я все решил. Оказалось что это просто я тупич и проверял на определенный лор, когда у других шлемов лора просто нет. В общем поставил просто проверку наличия лора и все норм.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх