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

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

obana3

Активный участник
Пользователь
Баллы
88
Всем привет. Решил тут написать небольшой плагин по показу онлайна и игроков с правами.
Видел на ensemplix такое, очень понравилось. (не сочтите за воровство :) )
Java:
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()?
И вообще правильно ли написан код? Возможны ли какие нибуть исправления/дополнения?
 
используй Bukkit.getOnlinePlayers()
Но и логика кода не правильно.
Тебе нужно создать несколько строковых значений, и поочередно забить в них циклами игроков с правами разделяя , к примеру.

В конце у всех строк можно убрать лишние запятые в конце (последствия цикла) используя substring
9w3UVppi.png

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

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

Ну а удаление последней запятой выглядит более компактно через substring
 
мм.. если уж дело зашло о скорости:
Хочешь сказать что:
Код:
String s = "";
s += "123123, ";
s += "234234, ";
s = s.substring(0, s.length - 2);
затратнее твоего?
в обоих случаях как ни крути - цикл для заполнения использовать придется, его отбросим.
Естественно, почитайте о том что делает StringBuilder и в чем его преимущества. Правда на маленьких объемах данных это не столь важно(о скорости можно говорить при 10 тысячах итераций, к примеру), но все же.
 
Естественно, почитайте о том что делает StringBuilder и в чем его преимущества. Правда на маленьких объемах данных это не столь важно(о скорости можно говорить при 10 тысячах итераций, к примеру), но все же.
Погуглил и понял что это действительно так, спасибо за наводку:)
 

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

Назад
Верх