Deleting a guild does not delete the Name Tag

Discussion in 'Plugin Development' started by BlaquuTM, Feb 18, 2018.

Thread Status:
Not open for further replies.
  1. Offline

    BlaquuTM

    Every time I kick someone out of the guild, or he leaves it, an error pops up in the console:

    Code:
    [11:09:08] [Server thread/ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing 'wyrzuc Kolorovyyy' in pl.endrju.ytcore.commands.guild.KickCommand(wyrzuc)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:148) ~[server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [server.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_141]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_141]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [server.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_141]
    Caused by: java.lang.ClassCastException: pl.blaquutm.mhcore.data.base.user.User cannot be cast to org.bukkit.OfflinePlayer
        at pl.blaquutm.mhcore.commands.guild.KickCommand.onCommand(KickCommand.java:53) ~[?:?]
        at pl.blaquutm.mhcore.commands.PlayerCommand.onExecute(PlayerCommand.java:19) ~[?:?]
        at pl.blaquutm.mhcore.commands.Command.execute(Command.java:29) ~[?:?]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[server.jar:git-Spigot-db6de12-18fbb24]
        ... 14 more
    [11:09:13] [Server thread/WARN]: [mhCore] Error while loading the tag
    [11:09:13] [Server thread/WARN]: [mhCore] Team name 'ESKA' is already in use
    And he does not delete this Name Tag above the nickname, in the game he crashes: An internal error occurred while attempting to perform this command

    Code:
    public class ScoreBoardNameTag implements NameTag
    {
        private static String parse(final String color, final Guild g) {
            if (g == null) {
                return ChatUtil.fixColor(color);
            }
            String msg = Config.TAG_FORMAT;
            msg = msg.replace("{TAG}", g.getTag());
            msg = msg.replace("{COLOR}", color);
            return ChatUtil.fixColor(msg);
        }
     
        @Override
        public void initPlayer(final Player p) {
            final Scoreboard sb = Bukkit.getScoreboardManager().getNewScoreboard();
            final Guild g = GuildManager.getGuild(p);
            for (final Guild o : GuildManager.getGuilds().values()) {
                Team t = sb.getTeam(o.getTag());
                if (t == null) {
                    t = sb.registerNewTeam(o.getTag());
                }
                if (g == null) {
                    t.setPrefix(parse(Config.TAG_COLOR_ENEMY, o));
                }
                else if (g.getTag().equalsIgnoreCase(o.getTag())) {
                    t.setPrefix(parse(Config.TAG_COLOR_FRIEND, o));
                }
                else if (o.getAlly().contains(g.getTag())) {
                    t.setPrefix(parse(Config.TAG_COLOR_ALLIANCE, o));
                }
                else {
                    t.setPrefix(parse(Config.TAG_COLOR_ENEMY, o));
                }
            }
            Team noguild = sb.getTeam("noguild");
            if (noguild == null) {
                noguild = sb.registerNewTeam("noguild");
                noguild.setAllowFriendlyFire(true);
                noguild.setCanSeeFriendlyInvisibles(false);
                noguild.setPrefix(parse(Config.TAG_COLOR_NOGUILD, null));
            }
            p.setScoreboard(sb);
            for (final Player online : Bukkit.getOnlinePlayers()) {
                online.getScoreboard().getTeam((g != null) ? g.getTag() : "noguild").addPlayer((OfflinePlayer)p);
                final Guild onlineguild = GuildManager.getGuild(online);
                p.getScoreboard().getTeam((onlineguild != null) ? onlineguild.getTag() : "noguild").addPlayer((OfflinePlayer)online);
            }
        }
     
        @Override
        public void createGuild(final Guild g, final Player p) {
            for (final Player o : Bukkit.getOnlinePlayers()) {
                final Scoreboard sb = o.getScoreboard();
                final Team t = sb.registerNewTeam(g.getTag());
                if (o == p) {
                    t.setPrefix(parse(Config.TAG_COLOR_FRIEND, g));
                }
                else {
                    t.setPrefix(parse(Config.TAG_COLOR_ENEMY, g));
                }
                t.addPlayer((OfflinePlayer)p);
            }
        }
     
        @Override
        public void removeGuild(final Guild g) {
            for (final Player p : Bukkit.getOnlinePlayers()) {
                final Scoreboard sb = p.getScoreboard();
                sb.getTeam(g.getTag()).unregister();
                final Team noguild = sb.getTeam("noguild");
                for (final Player guildplayer : g.getOnlineMembers()) {
                    noguild.removePlayer((OfflinePlayer)guildplayer);
                }
            }
        }
     
        @Override
        public void joinToGuild(final Guild g, final Player p) {
            for (final Player o : Bukkit.getOnlinePlayers()) {
                o.getScoreboard().getTeam(g.getTag()).addPlayer((OfflinePlayer)p);
            }
            p.getScoreboard().getTeam(g.getTag()).setPrefix(parse(Config.TAG_COLOR_FRIEND, g));
        }
     
        @Override
        public void leaveFromGuild(final Guild g, final OfflinePlayer p) {
            for (final Player o : Bukkit.getOnlinePlayers()) {
                o.getScoreboard().getTeam("noguild").removePlayer(p);
            }
            if (p.isOnline()) {
                p.getPlayer().getScoreboard().getTeam(g.getTag()).setPrefix(parse(Config.TAG_COLOR_ENEMY, g));
            }
        }
     
        @Override
        public void createAlliance(final Guild g, final Guild o) {
            for (final Player p : g.getOnlineMembers()) {
                final Team t = p.getScoreboard().getTeam(o.getTag());
                if (t != null) {
                    t.setPrefix(parse(Config.TAG_COLOR_ALLIANCE, o));
                }
            }
            for (final Player p : o.getOnlineMembers()) {
                final Team t = p.getScoreboard().getTeam(g.getTag());
                if (t != null) {
                    t.setPrefix(parse(Config.TAG_COLOR_ALLIANCE, g));
                }
            }
        }
     
        @Override
        public void removeAlliance(final Guild g, final Guild o) {
            for (final Player p : g.getOnlineMembers()) {
                final Team t = p.getScoreboard().getTeam(o.getTag());
                if (t != null) {
                    t.setPrefix(parse(Config.TAG_COLOR_ENEMY, o));
                }
            }
            for (final Player p : o.getOnlineMembers()) {
                final Team t = p.getScoreboard().getTeam(g.getTag());
                if (t != null) {
                    t.setPrefix(parse(Config.TAG_COLOR_ENEMY, g));
                }
            }
        }
     
        @Override
        public NameTagMode getNameTagMode() {
            return NameTagMode.SCOREBOARD;
        }
    }
    
     
  2. Offline

    timtower Administrator Administrator Moderator

    @BlaquuTM You can't cast a User to an OfflinePlayer, you need to take the long route for it, don't know what it is though as User can reflect many things.
     
  3. Offline

    BlaquuTM

    Can you tell me what to change and where? I would be very grateful.
     
  4. Offline

    timtower Administrator Administrator Moderator

    @BlaquuTM I have no idea what to change, I don't know the User class, if it contains an UUID, then use Bukkit#getOfflinePlayer(uuid)
     
Thread Status:
Not open for further replies.

Share This Page