1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Проверка Permissions и ошибки

Тема в разделе "Разработка плагинов для новичков", создана пользователем obana3, 24 апр 2013.

  1. Автор темы
    obana3

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

    Баллы:
    88
    Всем привет. Решил тут написать небольшой плагин по показу онлайна и игроков с правами.
    Видел на ensemplix такое, очень понравилось. (не сочтите за воровство :) )
    Код:
    package test.server.chat;
     
    import org.bukkit.Bukkit;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.Command;
    import org.bukkit.entity.Player;
     
    public class whocmd implements CommandExecutor {
     
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(command.getName().equalsIgnoreCase("who")){
          sender.sendMessage("Онлайн: " + Bukkit.getOnlinePlayers()+("/80"));
          Player[] admins;
          for(Player player : admins + getServer().getOnlinePlayers()){
          if (player.hasPermission("Admin")) {
              sender.sendMessage("Администраторы: " +admins + (", "));
          }
          Player[] mod + getServer().getOnlinePlayers();
          if (player.hasPermission("Moderator")) {
              sender.sendMessage("Модераторы: "+ mod + (", "));
          }
          Player[] help + getServer().getOnlinePlayers();
          if (player.hasPermission("Helper")) {
              sender.sendMessage("Помощники: " +help +(", "));
          }
          Player[] Default + getServer().getOnlinePlayers();
          if (player.hasPermission("Default")) {
              sender.sendMessage("Игроки: " +Default +(", "));
          }
          }
        }
    Т.к. я пока изучаю java, сразу вопрос. Почему ошибка в get.Server()?
    И вообще правильно ли написан код? Возможны ли какие нибуть исправления/дополнения?
     
  2. Jampire

    Jampire Старожил Пользователь

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    используй Bukkit.getOnlinePlayers()
    Но и логика кода не правильно.
    Тебе нужно создать несколько строковых значений, и поочередно забить в них циклами игроков с правами разделяя , к примеру.

    В конце у всех строк можно убрать лишние запятые в конце (последствия цикла) используя substring
    [​IMG]
    не буду объяснять почему красный - это тестовый сервер)
     
  3. VaNnOrus

    VaNnOrus Старожил Пользователь

    Баллы:
    123
    Используйте StringBuilder, при больших объемах он работает быстрее(что не так важно, в принципе, при 100-200 операциях, но все же) и потребляет меньше памяти.
    Пример:
    Код:
    StringBuilder sb = new StringBuilder();
    sb.append("word").append(",").append("word");
    player.sendMessage(sb.toString());
    Или просто не ставить последний разделитель в цикле, что тоже не проблемно сделать.
     
  4. Jampire

    Jampire Старожил Пользователь

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    мм.. если уж дело зашло о скорости:
    Хочешь сказать что:
    Код:
    String s = "";
    s += "123123, ";
    s += "234234, ";
    s = s.substring(0, s.length - 2);
    затратнее твоего?
    в обоих случаях как ни крути - цикл для заполнения использовать придется, его отбросим.

    Ну а удаление последней запятой выглядит более компактно через substring
     
  5. VaNnOrus

    VaNnOrus Старожил Пользователь

    Баллы:
    123
    Естественно, почитайте о том что делает StringBuilder и в чем его преимущества. Правда на маленьких объемах данных это не столь важно(о скорости можно говорить при 10 тысячах итераций, к примеру), но все же.
     
    Jampire нравится это.
  6. Jampire

    Jampire Старожил Пользователь

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Погуглил и понял что это действительно так, спасибо за наводку:)
     
  7. VaNnOrus

    VaNnOrus Старожил Пользователь

    Баллы:
    123
    Да не за что :)
     

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