Помогите Пропадают эффекты

  • Автор темы Автор темы Kurumi
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Kurumi

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Kurumi
Мне нужно было сделать так, чтобы если у игрока есть специальный нагрудник, ему давалис эффекты. Реализовал я это путем добавления метода. Я сделал метод, в котором проверяю есть ли у игрока нагрудник и если есть, ему даются какие-то эффекты. Потом чтобы эти эффекты давались игроку я этот метод вписал в разные эвенты (эвенты: BlockPlace, BlockBreak, InventoryClick, MoveEvent, JoinEvent). Все работает, когда игрок попадает в какой-либо их этих эвентов, срабатывает мой метод. Но я заметил такую ошибку - если игрок в нагруднике ему даются эффекты и если он пьет какое-нибудь зелье с эффектом, оно сбивается эффектом брони. Как это можно пофиксить?
 
Мне нужно было сделать так, чтобы если у игрока есть специальный нагрудник, ему давалис эффекты.
Ну так асинхронный Runnable раз на n секунд который проверяет есть ли в игроков нагрудник и даёт эффект, зачем костыли с кучей эвентов?
Ну и давай код этого метода где ты эффект даёшь.
 
Ну так асинхронный Runnable раз на n секунд который проверяет есть ли в игроков нагрудник и даёт эффект, зачем костыли с кучей эвентов?
Ну и давай код этого метода где ты эффект даёшь.
PHP:
 public void AddEffect()
    {
        final ItemStack helm = this.player.getEquipment().getHelmet();
        final ItemStack legs = this.player.getEquipment().getLeggings();
        final ItemStack boot = this.player.getEquipment().getBoots();
        final ItemStack chest = this.player.getEquipment().getChestplate();
        if (helm != null && legs != null && boot != null && chest != null)
        {
            for(String s : plugin.getConfig().getConfigurationSection("Sets").getKeys(false))
            {
            if (helm.getTypeId() == this.plugin.getConfig().getInt("Sets."+s+".helmet") && legs.getTypeId() == this.plugin.getConfig().getInt("Sets."+s+ ".leggings") && boot.getTypeId() == this.plugin.getConfig().getInt("Sets."+s+".boots") && chest.getTypeId() == this.plugin.getConfig().getInt("Sets."+s+".chestplate"))
            {
                for (final String a3 : this.plugin.getConfig().getStringList("Sets."+s+".effects"))
                {
                    final String[] a4 = a3.split(" ");
                    this.player.addPotionEffect(new PotionEffect(PotionEffectType.getByName(a4[0]), 120, Integer.parseInt(a4[1])), true);
                }
            }
            }
        }
В этом коде нужен фулл сет с id из конфига. С нагрудником был пример
 
если он пьет какое-нибудь зелье с эффектом, оно сбивается эффектом брони
Зелье любое сбрасывается или только то что даёт нагрудник? Например нагрудник даёт скорость, и если игрок выпил регенерацию её сбрасывает?
 
Зелье любое сбрасывается или только то что даёт нагрудник? Например нагрудник даёт скорость, и если игрок выпил регенерацию её сбрасывает?
любое сбрасывается
 
Зелье любое сбрасывается или только то что даёт нагрудник? Например нагрудник даёт скорость, и если игрок выпил регенерацию её сбрасывает?
Хотя нет, я напутал. ПРоверил - там то что дает сет, то и сбрасывает зелье
 
Хотя нет, я напутал. ПРоверил - там то что дает сет, то и сбрасывает зелье
Ну тогда перед тем как давать эффект проверяй есть ли в игрока эффект с большим временем или силой.
 
Ну тогда перед тем как давать эффект проверяй есть ли в игрока эффект с большим временем или силой.
Только сейчас смог заняться плагином. Я чет затупил и не могу сделать проверку. Я хочу сделать првоерку таким образом
PHP:
    if(player.hasPotionEffect(PotionEffectType.getByName(a4[0])) && Integer.parseInt(a4[1]))
                    {
                       
                    }
но тут я жестко затупил и не могу понять... Можешь помочь?
 
Только сейчас смог заняться плагином. Я чет затупил и не могу сделать проверку. Я хочу сделать првоерку таким образом
PHP:
    if(player.hasPotionEffect(PotionEffectType.getByName(a4[0])) && Integer.parseInt(a4[1]))
                    {
                      
                    }
но тут я жестко затупил и не могу понять... Можешь помочь?
Что за a4[]?
У меня сегодня отдых от экстрасенсорных способностей программиста.
 
Что за a4[]?
У меня сегодня отдых от экстрасенсорных способностей программиста.
PHP:
  if (helm.getTypeId() == this.plugin.getConfig().getInt("Sets."+s+".helmet") && legs.getTypeId() == this.plugin.getConfig().getInt("Sets."+s+ ".leggings") && boot.getTypeId() == this.plugin.getConfig().getInt("Sets."+s+".boots") && chest.getTypeId() == this.plugin.getConfig().getInt("Sets."+s+".chestplate"))
            {   
                for (final String a3 : this.plugin.getConfig().getStringList("Sets."+s+".effects"))
                {
                    final String[] a4 = a3.split(" ");
                    if(player.hasPotionEffect(PotionEffectType.getByName(a4[0])) && Integer.parseInt(a4[1]) <)
                    {
                        
                    }
                    
                    this.player.addPotionEffect(new PotionEffect(PotionEffectType.getByName(a4[0]), 120, Integer.parseInt(a4[1])), true);
                }
            }
 
TIME - твоё стандартное время длительности эффекта, 120, если судить с кода выше
PHP:
PotionEffectType effect = PotionEffectType.getByName(a4[0]);
Integer amplifier = a4[1]
if(player.hasPotionEffect(effect) && (player.getPotionEffect(effect).getAmplifier()>amplifier || player.getPotionEffect(effect).getDuration()>TIME)) {
//todo, у игрока уже есть эффект
}
 
TIME - твоё стандартное время длительности эффекта, 120, если судить с кода выше
PHP:
PotionEffectType effect = PotionEffectType.getByName(a4[0]);
Integer amplifier = a4[1]
if(player.hasPotionEffect(effect) && (player.getPotionEffect(effect).getAmplifier()>amplifier || player.getPotionEffect(effect).getDuration()>TIME)) {
//todo, у игрока уже есть эффект
}
И если у игрока уже есть эффект, просто return ?
 
TIME - твоё стандартное время длительности эффекта, 120, если судить с кода выше
PHP:
PotionEffectType effect = PotionEffectType.getByName(a4[0]);
Integer amplifier = a4[1]
if(player.hasPotionEffect(effect) && (player.getPotionEffect(effect).getAmplifier()>amplifier || player.getPotionEffect(effect).getDuration()>TIME)) {
//todo, у игрока уже есть эффект
}
upload_2018-2-26_22-14-8.png
 
Мб это из-за того что я сделал игрока в глобале?
Player player;
Под какую версию пишешь?
Если под 1.7 и ниже (проверил по джавадоку) надо проитерировать сквозь .getActivePotionEffects() и найти нужный эффект
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх