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

Помогите Проблема с написанием плагина.

ScReamer18

Участник
Баллы
31
Доброго времени суток, решил создать простенький плагин, который при вводе команды выводит список операторов онлайн, но столкнулся с одной проблемой - проверка на онлайн и оператора происходит только у отправляющего, то есть если отправляющий - оператор, то ему отправится сообщение с его же именем, вне зависимости от того, сколько операторов находится на сервере. Не подскажете, как это пофиксить? P.S. Понял, что в проблема в строчке
Код:
Player player = (Player) sender;
, но не понимаю, как можно сделать по-другому. Сам код:
Код:
package ru;

import java.util.ArrayList;
import org.bukkit.ChatColor;
import org.bukkit.Sound;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{
    ArrayList<String> names = new ArrayList<String>();
    String allops = new String();
    public void onEnable(){
        getLogger().info("Plugin was enabled");
        getServer().getPluginManager().registerEvents(this, this);
    }
    public void onDisable(){
        getLogger().info("Plugin was disabled");
    }
    @EventHandler
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
        Player player = (Player) sender;
        if (player.getPlayer().isOp() == true && player.getPlayer().isOnline() == true){
            names.add(player.getName());
        }else{
            names.remove(player.getName());
        }
        if (cmd.getName().equalsIgnoreCase("admins")){
        for(int i = 0; i < names.size(); i++){
            allops = names.get(i) + " ";
            sender.sendMessage(ChatColor.YELLOW + "Администраторы онлайн: " + ChatColor.RED + allops);
            names.clear();
            }
        }if (names.isEmpty() == true){
            sender.sendMessage(ChatColor.YELLOW + "Нет администраторов онлайн");
        }return true;
    }
}
 
Ужас, Вы подоху java не учили.
Вот так это делается.
Java:
package ru;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {

   @Override
   public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
     if((sender instanceof Player) && !((Player)sender).isOp()){
       sender.sendMessage(ChatColor.RED + "Ошибка доступа.");
       return true;
     }

     int opsCount = 0;
     StringBuilder message = new StringBuilder();
     message.append(ChatColor.YELLOW).append("Администраторы онлайн: ").append(ChatColor.RED);
     for(Player player : Bukkit.getOnlinePlayers()){
       if(player.isOp()){
         message.append(player.getName()).append(", ");
         opsCount++;
       }
     }
     message.delete(message.length() - 2, message.length()); // Удаляем последнюю запятую с пробелом

     if(opsCount > 0){
       sender.sendMessage(message.toString());
     } else {
       sender.sendMessage(ChatColor.YELLOW + "Нет администраторов онлайн");
     }
     return true;
   }

}
 
Ужас, Вы подоху java не учили.
Вот так это делается.
Java учил, но, к сожалению, пока плохо понимаю, как реализовать это всё, например, в тех же плагинах. Очень мало опыта. P.S. Спасибо за код, буду учиться.
 

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

Назад
Верх