Помогите Не работает сравнение локации с локации игрока

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

adodvstudios

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Jenka20091
Код:
static Location platform = new Location(Bukkit.getWorld("map"), 3000, 16, 31);

PHP:
@EventHandler
    public void onMove(PlayerMoveEvent e)
    {
        for(Player k : GameStates.king)
        {
            if(k.getLocation() == platform)
            {
                k.sendMessage("Работает");
            }
        }
    }

Я телепортируюсь на координаты и получаю ничего(и в консоли пусто)
 
Код:
public class KingGame implements Listener {
    
    static ItemStack stick = new ItemStack(Material.STICK, 1);
    static Location platform = new Location(Bukkit.getWorld("map"), 3000, 16, 31);
    
    public static void start(Player p)
    {
        if(GameStates.kingState == true)
        {
            for(Player kings : GameStates.king)
            {
                kings.teleport(Config.Map);
                kings.sendMessage(Config.send("&a&lAdodv говорит: &e&lМини-игра &6&lЦарь горы"));
                kings.sendMessage(Config.send("&6&lДоберитесь &e&lдо платформы!"));
                stickEnchant();
                kings.getInventory().addItem(stick);
                if(kings.getLocation() == platform)
                {
                    p.sendMessage("123");
                }
            }
        }
    }
    
    public static ItemStack stickEnchant()
    {
        ItemMeta stickMeta = stick.getItemMeta();
        stickMeta.addEnchant(Enchantment.KNOCKBACK, 3, true);
        stickMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
        stickMeta.setDisplayName(Config.send("&6&lПалочка &e&lотдачи"));
        return stick;
    }
    
    @EventHandler
    public void onMove(PlayerMoveEvent e)
    {
        for(Player k : GameStates.king)
        {
            if(k.getLocation() == platform)
            {
                k.sendMessage("Работает");
            }
        }
    }

}
KingGame
Код:
public void onEnable() {
        loadclass(new KingGame());
        getCommand("test").setExecutor(new test());
    }
    
    public void loadclass(Listener c)
    {
        Bukkit.getPluginManager().registerEvents(c, this);
    }
Main
Код:
public class test implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] arg3) {
        Player p = Bukkit.getPlayer(sender.getName());
        
        GameStates.kingState = true;
        GameStates.king.add(p);
        KingGame.start(p);
        return true;
    }

}
test
Код:
public class GameStates {
    
    public static ArrayList<Player> playersInGame = new ArrayList<Player>();
    
    public static ArrayList<Player> king = new ArrayList<Player>();
    public static ArrayList<Player> knockball = new ArrayList<Player>();
    public static ArrayList<Player> waterPlatform = new ArrayList<Player>();
    public static ArrayList<Player> pvpShields = new ArrayList<Player>();

    public static boolean kingState = false;
    public static boolean knockballState = false;
    public static boolean waterPlatformState = false;
    public static boolean pvpShieldsState = false;
    
    public static boolean waiting = false;
    public static boolean InGame = false;
    
}
gamestates


Plugin.yml
name: AdodvSays
main: plugin.adodvstudios.adodvsays.Main
version: 1.0
commands:
test:
usage: "/test"
 
Код:
public class KingGame implements Listener {
   
    static ItemStack stick = new ItemStack(Material.STICK, 1);
    static Location platform = new Location(Bukkit.getWorld("map"), 3000, 16, 31);
   
    public static void start(Player p)
    {
        if(GameStates.kingState == true)
        {
            for(Player kings : GameStates.king)
            {
                kings.teleport(Config.Map);
                kings.sendMessage(Config.send("&a&lAdodv говорит: &e&lМини-игра &6&lЦарь горы"));
                kings.sendMessage(Config.send("&6&lДоберитесь &e&lдо платформы!"));
                stickEnchant();
                kings.getInventory().addItem(stick);
                if(kings.getLocation() == platform)
                {
                    p.sendMessage("123");
                }
            }
        }
    }
   
    public static ItemStack stickEnchant()
    {
        ItemMeta stickMeta = stick.getItemMeta();
        stickMeta.addEnchant(Enchantment.KNOCKBACK, 3, true);
        stickMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
        stickMeta.setDisplayName(Config.send("&6&lПалочка &e&lотдачи"));
        return stick;
    }
   
    @EventHandler
    public void onMove(PlayerMoveEvent e)
    {
        for(Player k : GameStates.king)
        {
            if(k.getLocation() == platform)
            {
                k.sendMessage("Работает");
            }
        }
    }

}
KingGame
Код:
public void onEnable() {
        loadclass(new KingGame());
        getCommand("test").setExecutor(new test());
    }
   
    public void loadclass(Listener c)
    {
        Bukkit.getPluginManager().registerEvents(c, this);
    }
Main
Код:
public class test implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] arg3) {
        Player p = Bukkit.getPlayer(sender.getName());
       
        GameStates.kingState = true;
        GameStates.king.add(p);
        KingGame.start(p);
        return true;
    }

}
test
Код:
public class GameStates {
   
    public static ArrayList<Player> playersInGame = new ArrayList<Player>();
   
    public static ArrayList<Player> king = new ArrayList<Player>();
    public static ArrayList<Player> knockball = new ArrayList<Player>();
    public static ArrayList<Player> waterPlatform = new ArrayList<Player>();
    public static ArrayList<Player> pvpShields = new ArrayList<Player>();

    public static boolean kingState = false;
    public static boolean knockballState = false;
    public static boolean waterPlatformState = false;
    public static boolean pvpShieldsState = false;
   
    public static boolean waiting = false;
    public static boolean InGame = false;
   
}
gamestates


Plugin.yml
name: AdodvSays
main: plugin.adodvstudios.adodvsays.Main
version: 1.0
commands:
test:
usage: "/test"
Сравнивай не объекты Location, а конкретные x y и z координаты
 
Ты сравниваешь ссылку на объект, Player#getLocation каждый раз создаёт новый объект, соответственно ссылки разные. Используй .equals
 
Ты сравниваешь ссылку на объект, Player#getLocation каждый раз создаёт новый объект, соответственно ссылки разные. Используй .equals
Equals оказался одним из предателей.

Сравнивай не объекты Location, а конкретные x y и z координаты
Этот ответ помог. Тема закрыта
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх