Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Как отследить предмет в слоте головы

Titanoriym

Активный участник
Пользователь
Баллы
66
Не могу правильно написать скрипт в отслеживании шлема. Исправьте где я ошибся ,и как надо правильно написать.

JavaScript:
@EventHandler
    public void onPlayerInventory(org.bukkit.event.player.PlayerInventoryEvent e){
        Player player = e.getPlayer();
        if(player.getEquipment().getHelmet() == NightHelmet.Helmet()){
            player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION,200,100, true));
        }
 
NightHelmet.Helmet() - возможно просто предмет на голове не соответствует этому
скинь метод NightHelmet
 
JavaScript:
package superItem;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.*********ventory.ItemFlag;
import org.*********ventory.ItemStack;
import org.*********ventory.meta.ItemMeta;

public class NightHelmit {  
    static List<String> sList = new ArrayList<String>(Arrays.asList("Ночное виденье"));
    public static ItemStack Helmet(){
        ItemStack b1 = new ItemStack(Material.GOLD_HELMET, 1);
         ItemMeta b2 = b1.getItemMeta();
            String Name =ChatColor.GOLD + "Night Helmet";
            b2.addItemFlags(ItemFlag.HIDE_UNBREAKABLE);
            b2.setDisplayName(Name);
            b2.setLore(sList);
            b1.setItemMeta(b2);
            b1.addUnsafeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 5);
            return b1;
    }
}
 
Последнее редактирование:
  1. раньше я делал что-то подобное и проблема была вот в чём : DisplayName с цветом нельзя сравнивать т.е.
  2. если ты сравниваешь шлем,который у тебя на голове , с твоим новым NightHelmet.Helmet, в котором DisplayName с цветом , то if(player.getEquipment().getHelmet()== NightHelmet.Helmet()) просто не пройдёт проверку....
 
а правильно я написал public void onPlayerInventory(PlayerInventoryEvent e)
может public void PlayerInventoryEvent(Player player, Inventory inventory)
 
Проверяй getHelment().getId() == NightHelment.Helment().getId()
 
у меня получилось через hashCode и место onPlayerInventory я написал
JavaScript:
    @EventHandler
      public void onPlayerJoin(PlayerJoinEvent event)
      {
        Player pl = event.getPlayer();
         if(pl.getEquipment().getHelmet()==null){
              return;
          }else{
        if(pl.getEquipment().getHelmet().hashCode() == NightHelmit.Helmit().hashCode()){
            pl.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION,200,100, true));
        }
        }
      }
     
      @EventHandler
      public void onPlayerMove(PlayerMoveEvent event){
          Player pl = event.getPlayer();
          if(pl.getEquipment().getHelmet()==null){
              return;
          }else{
              if(pl.getEquipment().getHelmet().hashCode() == NightHelmit.Helmit().hashCode()){
                  pl.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION,200,100, true));
            }
        }
      }

    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent e){
         Player pl = e.getPlayer();
         if(pl.getEquipment().getHelmet()==null){
              return;
          }else{
        if(pl.getEquipment().getHelmet().hashCode() == NightHelmit.Helmit().hashCode()){
            pl.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION,200,100, true));
        }
     }
    }
 
Через InventoryClickEvent по-моему можно отловить надевание чего-либо в слот головы/нагрудника/понож/ног.
 
Отследить та можно ,но эффект нужно обновлять постоянно при надетом шлеме
 

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

Назад
Верх