Помогите Бан оффлайн

  • Автор темы Автор темы Kurumi
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Kurumi

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Kurumi
Скорее всего, я чего-то не дописал в коде. Как оно должно работать: Если я прописываю /p <nickname> <пункт правил> игрока должно банить. Всё работает. Но есть проблема, если игрока нету на сервере, плагин выдает ошибку, гуглил, была похожая проблема у чувака на зарубежном форуме, решение мне не помогло. Прошу помощи тут.

P.S. Все те, кто родились с фулл знаниями по яве и бакит апи, которые любят обосрать человека когда тот просит помочь, можете не писать. На сколько я знаю, этот отдел был создан специально для помощи новичкам, а не высмеиванию их проблемы.

Код:
Код:
package Lemar98.me;

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

public class Main extends JavaPlugin
{
       
    public void onEnable()
    {
        getLogger().info("BannedWorld is enabled!");
        getCommand("punishment").setExecutor(this);
        getCommand("p").setExecutor(this);
    }
   
    public void onDisable()
    {
        getLogger().info("BannedWorld is disabled!");
    }
   
    @SuppressWarnings("deprecation")
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    {
        Player b = (Player) sender;
        if(cmd.getName().equalsIgnoreCase("punishment") || cmd.getName().equalsIgnoreCase("p"))
        {
          if(!sender.hasPermission("bawo.ban"))
          {
              sender.sendMessage(ChatColor.RED + "У вас недостаточно прав");
              return true;
          }
            if(args.length == 0)
            {
               return false;
            }
            if(args.length == 1)
            {
                return false;
            }
             Player p = Bukkit.getPlayer(args[0]);
             String reason = args[1];
             {
             if(args.length == 2)
             {
             if(p.isOnline() || !p.isOnline() && args[1] == reason)
                {
                 p.kickPlayer(ChatColor.RED + "Вы были забанены игроком " + ChatColor.GREEN + b.getName() + ChatColor.RED + " по пункту правил " + ChatColor.GOLD + reason);
                 p.setBanned(true);
                 Bukkit.getOfflinePlayer(args[0]).setBanned(true);
                 b.sendTitle("§4Вы наказали игрока " + ChatColor.RED + args[0], "§9По пункту правил " + ChatColor.RED + reason);
                 return true;
                }
              }
          }
        return true;
    }
}
Ошибка консоли:
Код:
 [Server thread/INFO]: Kurumi issued server command: /p Lemar98 1.1
 [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'p' in plugin BannedWorld v1.0
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at org.bukkit.craftbukkit.v1_11_R1.CraftServer.dispatchCommand(CraftServer.java:650) ~[spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.PlayerConnection.handleCommand(PlayerConnection.java:1354) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1189) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_121]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_121]
    at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
Caused by: java.lang.NullPointerException
    at Lemar98.me.Main.onCommand(Main.java:51) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-3fb9445-6e3cec8]
    ... 15 more
UP
 
Последнее редактирование:
Код:
public boolean onCommand(CommandSender sender,Command cmd,String label,String[] args) {
        if (cmd.getName().equalsIgnoreCase("punishment")) { //plugin.yml -> aliases: [p]
            if (!sender.hasPermission("bawo.ban")) {
                sender.sendMessage("no perms!");
            } else {
                
                if (args.length>=1) {
                    Player victim = Bukkit.getPlayer(args[0]);
                    
                    if (victim!=null) {
                        victim.setBanned(true);
                        //TODO
                    } else {
                        OfflinePlayer offlineVictim = Bukkit.getOfflinePlayer(args[0]);
                        offlineVictim.setBanned(true);
                        //TODO
                    }
                } else {
                    sender.sendMessage("Use: /punishment <player>");
                }
            }
        }
        return true;
    }
 
Теперь в консоли старая ошибка и все равно не работает.
PHP:
 @SuppressWarnings("deprecation")
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    {
        Player b = (Player) sender;
        if(cmd.getName().equalsIgnoreCase("punishment") || cmd.getName().equalsIgnoreCase("p"))
        {
          if(!sender.hasPermission("bawo.ban"))
          {
              sender.sendMessage(ChatColor.RED + "У вас недостаточно прав");
              return true;
          }
            if(args.length == 0)
            {
               return false;
            }
            if(args.length == 1)
            {
                return false;
            }
            Player p = Bukkit.getPlayer(args[0]);
             String reason = args[1];
             if(args.length == 2)
             {
             if(p.isOnline() || !p.isOnline() && args[1] == reason)
                {
                 if (Bukkit.getPlayer(args[0]) == null){
                     OfflinePlayer pp = Bukkit.getOfflinePlayer(args[0]);
                     pp.setBanned(true);
                     b.sendTitle("§4Вы наказали игрока " + ChatColor.RED + args[0], "§9По пункту правил " + ChatColor.RED + reason);
                 return true;
                }
                }
             else
             {
                  p.kickPlayer(ChatColor.RED + "Вы были забанены игроком " + ChatColor.GREEN + b.getName() + ChatColor.RED + " по пункту правил " + ChatColor.GOLD + reason);
                  p.setBanned(true);
                  b.sendTitle("§4Вы наказали игрока " + ChatColor.RED + args[0], "§9По пункту правил " + ChatColor.RED + reason);
             }
              return true;
          }
          }
        return true;
    }
}
Код:
[Server thread/INFO]: Kurumi issued server command: /p Lemar98 1.1
[Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'p' in plugin BannedWorld v1.0
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at org.bukkit.craftbukkit.v1_11_R1.CraftServer.dispatchCommand(CraftServer.java:650) ~[spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.PlayerConnection.handleCommand(PlayerConnection.java:1354) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1189) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_121]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_121]
    at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot.jar:git-Spigot-3fb9445-6e3cec8]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
Caused by: java.lang.NullPointerException
    at Lemar98.me.Main.onCommand(Main.java:50) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-3fb9445-6e3cec8]
    ... 15 more
null.isOnline() Серьезно?
 
Попробовал все что вы скидывали, скорее всего, что-то делаю не так я. Если не трудно, можете объяснить именно в чем заключается ошибка?
 
Пссс ребят, вы тут под чем? Зачем такое говно громоздить? Зачем вам тут офлайн плееры? Для чего вам uuid и ник?
Код:
... Тут пишем данные о бане куда нибудь, типо yaml(не надо), gson(более менее), бд (ну нормулик)

Player p  = Bukkit.getPlayer(args[0]);
if(p != null){
p.kick();
}


@EventHandler
public void onJoin(PlayerLoginEvent e){
if(где-то есть данные){
     if(данные не исекли){
       e.setResult(PlayerLoginEvent.Result.KICK_BANNED);
       e.setKickMessage("ну тот че то забанили");
     } else{
         removePlayerfromdb();
     }
}
}
 
Пссс ребят, вы тут под чем? Зачем такое говно громоздить? Зачем вам тут офлайн плееры? Для чего вам uuid и ник?
Код:
... Тут пишем данные о бане куда нибудь, типо yaml(не надо), gson(более менее), бд (ну нормулик)

Player p  = Bukkit.getPlayer(args[0]);
if(p != null){
p.kick();
}


@EventHandler
public void onJoin(PlayerLoginEvent e){
if(где-то есть данные){
     if(данные не исекли){
       e.setResult(PlayerLoginEvent.Result.KICK_BANNED);
       e.setKickMessage("ну тот че то забанили");
     } else{
         removePlayerfromdb();
     }
}
}
Зачем свой файл с банами, если в ведре он уже есть? И может лучше AsyncPlayerPreLoginEvent? С PlayerLoginEvent напишет что игрок присоединился и вышел сразу.
UPD. Кажется затупил, не напишет, но прелогин лучше.
 
Последнее редактирование:
Попробовал все что вы скидывали, скорее всего, что-то делаю не так я. Если не трудно, можете объяснить именно в чем заключается ошибка?
Проверяй игрока на null.
 
Зачем свой файл с банами, если в ведре он уже есть? И может лучше AsyncPlayerPreLoginEvent? С PlayerLoginEvent напишет что игрок присоединился и вышел сразу.
UPD. Кажется затупил, не напишет, но прелогин лучше.
Поймешь, когда станешь писать плагин на баны.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх