Помогите Как давать игроку эффект при нахождении предмета в инвентаре?

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

Den_Blade

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Den_Blade
Ребята,столкнулся с проблемой при написании плагина. Дело в том,что мне нужно ,чтобы игроку давался определенный эффект ,если у него в инвентаре находится определенный предмет,а если данные предмет из инвентаря убрать,то эффект исчезал. Пробовал много раз написать это ,но максимум ,что я смог ,это чтобы эффект давался если ты держишь предмет в руке ,а если убираешь ,то соответственно эффект исчезает,но мне нужно чтобы эффект давался даже когда предмет находится просто в инвентаре,по-этому прошу помогите ! Как мне это написать?
 
ItemStack[] IContents = p.getInventory().getContents();

for (int i = 0; i < IContents.length; i++) {
if (IContents.getType().equlas(Material.ТипНужногоПредмета) )
p.addPotionEffect(new PotionEffect(effect, duration*20, amplifer-1 ));
}
Можешь с ArrayList поэкспериментировать
 
Последнее редактирование:
ItemStack[] IContents = p.getInventory().getContents();

for (int i = 0; i < IContents.length; i++) {
if (IContents[j].getType().equlas(Material.ТипНужногоПредмета) )
p.addPotionEffect(new PotionEffect(effect, duration*20, amplifer-1 ));
}
Можешь с ArrayList поэкспериментировать

Попробовал сделать так,эффект даже не накладывается.
Если можно,то распиши полный код, мб я не так сделал.
 
for (Player p : Bukkit.getOnlinePlayers()) {
ItemStack[] IContents = p.getInventory().getContents();
for (int i = 0; i < IContents.length; i++) {
if (IContents.getType().equlas(Material.DIAMOND) )
p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 20, 1 ));
}
}
закинь его в шедулер
 
Последнее редактирование:
Вот корявый пример работы по названию предмета находящегося в слотах армора
Код:
  public void onSet(Player p){
   
      if(p.getInventory().getHelmet()==null) return;
      if(p.getInventory().getChestplate()==null) return;
      if(p.getInventory().getLeggings() == null) return;
      if(p.getInventory().getBoots()==null) return;
   
      String h = p.getInventory().getHelmet().getItemMeta().getDisplayName();
      String c = p.getInventory().getChestplate().getItemMeta().getDisplayName();
      String l = p.getInventory().getLeggings().getItemMeta().getDisplayName();
      String b = p.getInventory().getBoots().getItemMeta().getDisplayName();
   
      if(h.equalsIgnoreCase("test") && c.equalsIgnoreCase("test") && l.equalsIgnoreCase("test") && b.equalsIgnoreCase("test")){
          p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 750, 2));
          sEffect(p);
      }
  }

    public void setEffect() {
            new BukkitRunnable(){
            @Override
            public void run() {
               for(Player p : Bukkit.getOnlinePlayers()){
                   onSet(p);
               }
            }
        }.runTaskTimer(plugin, 0L, (long)(81)); 
    }
а щедулер можешь воткнуть в тот же onEnable
 
Последнее редактирование:
Вот корявый пример работы по названию предмета находящегося в слотах армора
Код:
  public void onSet(Player p){
  
      if(p.getInventory().getHelmet()==null) return;
      if(p.getInventory().getChestplate()==null) return;
      if(p.getInventory().getLeggings() == null) return;
      if(p.getInventory().getBoots()==null) return;
  
      String h = p.getInventory().getHelmet().getItemMeta().getDisplayName();
      String c = p.getInventory().getChestplate().getItemMeta().getDisplayName();
      String l = p.getInventory().getLeggings().getItemMeta().getDisplayName();
      String b = p.getInventory().getBoots().getItemMeta().getDisplayName();
  
      if(h.equalsIgnoreCase("test") && c.equalsIgnoreCase("test") && l.equalsIgnoreCase("test") && b.equalsIgnoreCase("test")){
          p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 750, 2));
          sEffect(p);
      }
  }

    public void setEffect() {
            new BukkitRunnable(){
            @Override
            public void run() {
               for(Player p : Bukkit.getOnlinePlayers()){
                   onSet(p);
               }
            }
        }.runTaskTimer(plugin, 0L, (long)(81));
    }
а щедулер можешь воткнуть в тот же onEnable

Сяб конечно,но мне нужно ,чтобы определенный предмет ,в моём случае SLIME_BALL ,давал эффект игроку ,если этот айтем просто находится в инвентаре .
 
for (Player p : Bukkit.getOnlinePlayers()) {
ItemStack[] IContents = p.getInventory().getContents();
for (int i = 0; i < IContents.length; i++) {
if (IContents.getType().equlas(Material.DIAMOND) )
p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 20, 1 ));
}
}
закинь его в шедулер
Попробовал ,выдаёт ошибку (подчеркивает красным),в этой строке
if (IContents.getType().equlas(Material.DIAMOND) )
 
Сяб конечно,но мне нужно ,чтобы определенный предмет ,в моём случае SLIME_BALL ,давал эффект игроку ,если этот айтем просто находится в инвентаре .
А сорян, в таком случае вот проверка
Код:
    public static boolean equols(Player p, String i){
       for (int a = 0; a<p.getInventory().getSize(); a++) {
           ItemStack inv = p.getInventory().getItem(a);
           if (inv!=null){
               if(inv.hasItemMeta()){
                   if(inv.getItemMeta().hasDisplayName()){
                        if(inv.getItemMeta().getDisplayName().equalsIgnoreCase(i)){
                            return true;
                        }
                   }
               }
           }
       }
        return false;
    }
Проверка идет так же по названию предмета
 
А сорян, в таком случае вот проверка
Код:
    public static boolean equols(Player p, String i){
       for (int a = 0; a<p.getInventory().getSize(); a++) {
           ItemStack inv = p.getInventory().getItem(a);
           if (inv!=null){
               if(inv.hasItemMeta()){
                   if(inv.getItemMeta().hasDisplayName()){
                        if(inv.getItemMeta().getDisplayName().equalsIgnoreCase(i)){
                            return true;
                        }
                   }
               }
           }
       }
        return false;
    }
Проверка идет так же по названию предмета
Дружище ,спасибо конечно ,но можешь пожалуйста написать полный код, т.к я не профи в написании плагинов.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх