Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

String to Player, не используя устаревшие функции

Тема в разделе "Управление сервером Bukkit", создана пользователем lolifrag, 15 фев 2015.

Статус темы:
Закрыта.
  1. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    Добрый вечер. Столкнулся с задачей - нужно получить игрока по нику, если он есть в сети.

    Сначала я пробовал перебором:
    Код:
    for (Player tempplayer : Bukkit.getOnlinePlayers()) {
        if (tempplayer.getName() == arg[0]) {
            player = tempplayer;
        }
    }
    Потом конвертировал String в UUID и по UUID уже искал
    Код:
    Player player = this.getServer().getPlayer((UUID) UUID.fromString(arg[0]));
    Потом пробовал несколько разных вариацих обоих методов, с одинаковым результатом:
    An internal error occurred while attemting to perform this command
    Остальной код отдельно по частям проверял - работает, а вот здесь такая кака.


    В итоге ошибка пропала, когда я вернулся к устаревшей .getPlayer(String)
    В чём я ошибся? Подскажите, пожалуйста.
     
  2. Хостинг MineCraft
    <
  3. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    getName возвращает строку. А строки проверяются вот так:

    player.getName().equalsIgnoreCase(args[0])
     
  4. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    Всё равно ошибка осталась та же.
     
  5. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    В логе что пишет?
     
  6. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    Что-то страшное
    [​IMG]
     
  7. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    Bukkit.getServer().getOnlinePlayers()
     
  8. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    [​IMG]
     
  9. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    Да как так?
    Покажите этот участок кода
     
  10. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    Код:
    Player player = null;
    for (Player tempplayer : Bukkit.getServer().getOnlinePlayers()) {
    if (tempplayer.getName().equalsIgnoreCase(arg[0])) {
        player = tempplayer;
        }
    }
    
    if (player != null) {
    
    if (arg.length < 2) {
        player.setFlySpeed(0.2f);
        player.setWalkSpeed(0.2f);
        sender.sendMessage(player.getName() + "'s movement speed back to default!");
    } else if (this.isInt(arg[1])) {
    
        player.setFlySpeed(doCalcSpeedCmd(arg[1]));
        player.setWalkSpeed(doCalcSpeedCmd(arg[1]));
    
        sender.sendMessage(player.getName()    + "'s has been speed changed!");
        }
    }

    Как только я возвращаю Deprecated, всё работает
     
  11. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    Я не понимаю, почему не работает. Всё верно написано. В чём пишете?
     
  12. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    ecliplse
     
  13. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    Полностью можете код дать? У себя попробую собрать.
     
  14. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    Код:
    package ru.artificaloli;
    
    import org.bukkit.event.EventHandler;
    import org.bukkit.entity.Player;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Speedy extends JavaPlugin {
    
        public static Player check(Player sender, String name) {
            for (Player pl : sender.getServer().getOnlinePlayers()) {
                if (pl.getCustomName().equals(name)) {
                    return pl;
                }
            }
            return null;
        }
    
        public boolean isInt(String source) {
            try {
                Integer.parseInt(source);
            } catch (NumberFormatException e) {
                return false;
            }
            return true;
        }
    
        private float doCalcSpeedCmd(String source) {
            float amount = Float.parseFloat(source) / 10.0f;
            if (amount > 1.0f) {
                amount = 1.0f;
            }
            if (amount < -1.0f) {
                amount = -1.0f;
            }
    
            return amount;
        }
    
        @EventHandler
        public boolean onCommand(CommandSender p, Command com, String label,
                String[] arg) {
            if (p instanceof Player) {
                Player sender = (Player) p;
                if (com.getName().equalsIgnoreCase("speed")) {
                    if (sender.hasPermission("speedy.use")) {
                        if (arg.length > 0) {
                            if (arg[0].equals("help") || arg[0].equals("?")) {
                                sender.sendMessage("How it work? /speed [player] [count]. Number can be between -10 and 10. Default 2");
                            } else if (this.isInt(arg[0])) {
    
                                sender.setFlySpeed(doCalcSpeedCmd(arg[0]));
                                sender.setWalkSpeed(doCalcSpeedCmd(arg[0]));
    
                                sender.sendMessage("Your movement speed changed!");
                            } else {
                                @SuppressWarnings("deprecation")
                                Player player = sender.getServer()
                                        .getPlayer(arg[0]);
    
                                if (player != null) {
    
                                    if (arg.length < 2) {
                                        player.setFlySpeed(0.2f);
                                        player.setWalkSpeed(0.2f);
                                        sender.sendMessage(player.getName()
                                                + "'s movement speed back to default!");
                                    } else if (this.isInt(arg[1])) {
    
                                        player.setFlySpeed(doCalcSpeedCmd(arg[1]));
                                        player.setWalkSpeed(doCalcSpeedCmd(arg[1]));
    
                                        sender.sendMessage(player.getName()
                                                + "'s has been speed changed!");
                                    }
                                } else {
                                    sender.sendMessage("Cannot find player "
                                            + arg[0] + " !");
                                }
                            }
                        } else {
                            sender.setFlySpeed(0.2f);
                            sender.setWalkSpeed(0.2f);
                            sender.sendMessage("Your movement speed back to default!");
                        }
                    } else {
                        sender.sendMessage("You don't have permissions to do this!");
                    }
                }
            } else {
                p.sendMessage("Command can not be executed from console!");
            }
            return true;
        }
    }
    
     
  15. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    Я имею в виду весь плагин.
     
  16. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    это весь
     
  17. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    У меня работает. Правда, собирал на 1.7.2
     
  18. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    Значит пора мне апать версию сервера.. у меня 1.6.4, а api на 1.7.10
    Спасибо за помощь
     
  19. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    Пересобрал на 1.6.4
    Проблем не наблюдаю
     
  20. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    Я даже не знаю, что у меня в таком случае не так..))
     
  21. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    Попробуйте API на 1.6 поменять, что ли...
     
Статус темы:
Закрыта.

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