Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Minecraft - Problem z NameTag w ScoreBoardNametag


back292

Pytanie

Opublikowano

Witam, mam mały problem dotyczący samych NameTagów, otóż jak zakładam gildię prefix nadaje mi normalnie lecz jak usuwam gildię lub też z niej odchodzę to nie zabiera mi tego prefixu. W kodzie wywala pojedyncze problemy które nie wiem jak naprawić . Na razie nie podaję żadnego kodu, lecz jeśli ktoś w odpowiedzi poprosi to oczywiście mu podam.

5 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

no to o ile linijki się zgadzają to bład wywala w 

o.getScoreboard().getTeam("noguild").addPlayer(p);

to albo getScoreboard() albo getTeam() zwraca nulla, sprawdz i popraw 

1438614356923701010629.png

 

Opublikowano

Skąd mamy wiedzieć, jak działają gildie czy nametagi w Twoim pluginie? Co to za problemy w kodzie? W tym wypadku nikt Ci nie pomoże, nie widząc kodu...

5226780839.png

Opublikowano
package pl.blaquutm.mhcore.managers;

import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;

import pl.blaquutm.mhcore.GuildPlugin;
import pl.blaquutm.mhcore.NameTag.NameTag;
import pl.blaquutm.mhcore.NameTag.NameTagMode;
import pl.blaquutm.mhcore.NameTag.modes.ScoreBoardNameTag;
import pl.blaquutm.mhcore.data.base.guild.Guild;
import pl.blaquutm.mhcore.utils.Logger;

public class NameTagManager
{
    private static NameTag nameTag;

    public static void enable() {
        new BukkitRunnable() {
            public void run() {
                Logger.warning(new String[]{"Can not find valid TagAPI instance!", "Using ScoreBoard nametags!"});
                NameTagManager.nameTag = new ScoreBoardNameTag();
                Logger.info(new String[]{"Using '" + NameTagManager.nameTag.getClass().getSimpleName().replace("NameTag", "") + "' to support nametags!"});
            }
        }.runTask((Plugin) GuildPlugin.getPlugin());
    }

    public static void initPlayer(final Player p) {
        if (NameTagManager.nameTag == null) {
            return;
        }
        NameTagManager.nameTag.initPlayer(p);
    }

    public static void createGuild(final Guild g, final Player p) {
        if (NameTagManager.nameTag == null) {
            return;
        }
        NameTagManager.nameTag.createGuild(g, p);
    }

    public static void removeGuild(final Guild g) {
        if (NameTagManager.nameTag == null) {
            return;
        }
        NameTagManager.nameTag.removeGuild(g);
    }

    public static void joinToGuild(final Guild g, final Player p) {
        if (NameTagManager.nameTag == null) {
            return;
        }
        NameTagManager.nameTag.joinToGuild(g, p);
    }

    public static void leaveFromGuild(final Guild g, final OfflinePlayer p) {
        if (NameTagManager.nameTag == null) {
            return;
        }
        NameTagManager.nameTag.leaveFromGuild(g, p);
    }

    public static void createAlliance(final Guild g, final Guild o) {
        if (NameTagManager.nameTag == null) {
            return;
        }
        NameTagManager.nameTag.createAlliance(g, o);
    }

    public static void removeAlliance(final Guild g, final Guild o) {
        if (NameTagManager.nameTag == null) {
            return;
        }
        NameTagManager.nameTag.removeAlliance(g, o);
    }

    public static NameTagMode getNameTagMode() {
        if (NameTagManager.nameTag == null) {
            return null;
        }
        return NameTagManager.nameTag.getNameTagMode();
    }

    public static NameTag getNameTag() {
        return NameTagManager.nameTag;
    }

}
package pl.blaquutm.mhcore.NameTag.modes;

import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
import pl.blaquutm.mhcore.api.Config;
import pl.blaquutm.mhcore.NameTag.NameTag;
import pl.blaquutm.mhcore.NameTag.NameTagMode;
import pl.blaquutm.mhcore.data.base.guild.Guild;
import pl.blaquutm.mhcore.managers.GuildManager;
import pl.blaquutm.mhcore.utils.ChatUtil;

@SuppressWarnings("deprecation")
public class ScoreBoardNameTag implements NameTag
{
	private static String parse(final String color, final Guild g, Player p) {
        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);
	}

	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, p));
              
            }
            else if (g.getTag().equalsIgnoreCase(o.getTag())) {
                t.setPrefix(parse(Config.TAG_COLOR_FRIEND, o, p));
            }
            else if (o.getAlly().contains(g.getTag())) {
                t.setPrefix(parse(Config.TAG_COLOR_ALLIANCE, o, p));
            }
            else {
                t.setPrefix(parse(Config.TAG_COLOR_ENEMY, o, p));
            }
        }
        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));
        }
        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);
        }
    }

	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, o));
            }
            else {
                t.setPrefix(parse(Config.TAG_COLOR_ENEMY, g, o));
            }
            t.addPlayer((OfflinePlayer)p);
        }
    }

	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.addPlayer((OfflinePlayer)guildplayer);
            }
        }
    }

	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, p));
    }

	public void leaveFromGuild(final Guild g, final OfflinePlayer p) {
        for (Player o : Bukkit.getOnlinePlayers()) {
            o.getScoreboard().getTeam("noguild").addPlayer(p);
        }
        if (p.isOnline()) {
            p.getPlayer().getScoreboard().getTeam(g.getTag()).setPrefix(parse(Config.TAG_COLOR_ENEMY, g, null));
        }
    }

    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, p));
            }
        }
        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, p));
            }
        }
    }

    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, p));
            }
        }
        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, p));
            }
        }
    }

    public NameTagMode getNameTagMode() {
        return NameTagMode.SCOREBOARD;
    }

}
package pl.blaquutm.mhcore.NameTag;

import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;

import pl.blaquutm.mhcore.data.base.guild.Guild;


public interface NameTag
{
	  public abstract void initPlayer(Player paramPlayer);
	  
	  public abstract void createGuild(Guild paramGuild, Player paramPlayer);
	  
	  public abstract void removeGuild(Guild paramGuild);
	  
	  public abstract void joinToGuild(Guild paramGuild, Player paramPlayer);
	  
	  public abstract void leaveFromGuild(Guild paramGuild, OfflinePlayer paramOfflinePlayer);
	  
	  public abstract void createAlliance(Guild paramGuild1, Guild paramGuild2);
	  
	  public abstract void removeAlliance(Guild paramGuild1, Guild paramGuild2);
	  
	  public abstract NameTagMode getNameTagMode();
	}
package pl.blaquutm.mhcore.NameTag;

public enum NameTagMode
{
  TAG_API("TAG_API", 0, "TAG_API", 0, "TAG_API", 0, "tagapi"),  SCOREBOARD("SCOREBOARD", 1, "SCOREBOARD", 1, "SCOREBOARD", 1, "scoreboard");
  
  private String name;
  
  private NameTagMode(String s3, int n3, String s2, int n2, String s, int n, String name)
  {
    this.name = name;
  }
  
  public static NameTagMode getByName(String name)
  {
    NameTagMode[] values;
    int length = (values = values()).length;
    for (int i = 0; i < length; i++)
    {
      NameTagMode sm = values[i];
      if (sm.getName().equalsIgnoreCase(name)) {
        return sm;
      }
    }
    return null;
  }
  
  public String getName()
  {
    return this.name;
  }
}
package pl.blaquutm.mhcore.commands.guild;

import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import pl.blaquutm.mhcore.commands.PlayerCommand;
import pl.blaquutm.mhcore.data.base.guild.Guild;
import pl.blaquutm.mhcore.managers.GuildManager;
import pl.blaquutm.mhcore.managers.NameTagManager;
import pl.blaquutm.mhcore.utils.ChatUtil;

public class LeaveCommand extends PlayerCommand
{
    public LeaveCommand() {
        super("opusc", "opuszcza gildie", "/opusc", "core.cmd.user", new String[0]);
    }
    
    @Override
    public boolean onCommand(final Player p, final String[] args) {
        final Guild g = GuildManager.getGuild(p);
        if (g == null) {
            return ChatUtil.sendMessage((CommandSender)p, "&8» &cNie posiadasz gildii!");
        }
        if (g.isOwner(p)) {
            return ChatUtil.sendMessage((CommandSender)p, "&8» &cJestes zalozycielem gildii!");
        }
        if (g.isLeader(p.getName())) {
            g.setLeader("Brak");
        }
        g.removeMember(p);
        NameTagManager.leaveFromGuild(g, p);
        return ChatUtil.sendMessage(Bukkit.getOnlinePlayers(), "&2GILDIE &8» &7Gracz: &a" + p.getName() + " &7opuscil gildie: &a" + g.getTag() + "");
    }
}
package pl.blaquutm.mhcore.commands.guild;

import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;

import pl.blaquutm.mhcore.api.Lang;
import pl.blaquutm.mhcore.commands.PlayerCommand;
import pl.blaquutm.mhcore.data.base.guild.Guild;
import pl.blaquutm.mhcore.data.base.user.User;
import pl.blaquutm.mhcore.managers.GuildManager;
import pl.blaquutm.mhcore.managers.NameTagManager;
import pl.blaquutm.mhcore.managers.UserManager;
import pl.blaquutm.mhcore.utils.ChatUtil;

import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class KickCommand extends PlayerCommand
{
    public KickCommand() {
        super("wyrzuc", "wyrzuca gracza z gildii", "/wyrzuc <gracz>", "core.cmd.user", new String[0]);
    }
    
    @Override
    public boolean onCommand(final Player p, final String[] args) {
        final Guild g = GuildManager.getGuild(p);
        if (g == null) {
            return ChatUtil.sendMessage((CommandSender)p, "&8» &cNie posiadasz gildii!");
        }
        if (!g.isLeader(p.getName())) {
            return ChatUtil.sendMessage((CommandSender)p, "&8» &cNie jestes liderem gildii!");
        }
        if (args.length != 1) {
            return ChatUtil.sendMessage((CommandSender)p, Lang.USE(this.getUsage()));
        }
        final User o = UserManager.getUser(args[0]);
        if (o == null) {
            return ChatUtil.sendMessage((CommandSender)p, "&8» &cPodany gracz nie istnieje!");
        }
        if (!g.isMember(o.getName())) {
            return ChatUtil.sendMessage((CommandSender)p, "&8» &cGracz nie jest w twojej gildii!");
        }
        if (g.isOwner(o.getName())) {
            return ChatUtil.sendMessage((CommandSender)p, "&8» &cNie mozesz wyrzuci zalozyciela");
        }
        if (p.getName().equals(o.getName())) {
            return ChatUtil.sendMessage((CommandSender)p, "&8» &cNie mozesz wyrzucic samego siebie!");
        }
        if (g.isLeader(o.getName())) {
            g.setLeader("Brak");
        }
        g.removeMember(o.getName());
        NameTagManager.leaveFromGuild(g, (OfflinePlayer) o);
        return ChatUtil.sendMessage(Bukkit.getOnlinePlayers(), "&2GILDIE &8» &7Gracz: &a" + o.getName() + " &7zostal wyrzucony z gildii: &a" + g.getTag() + "");
    }
}

Wszystkie klasy, które działają z NameTag. W Eclipse nie wywala żadnych błędów więc niby powinno być wszystko dobrze, lecz jak opuszczę gildie lub ktoś mnie z niej wyrzuci to nie usuwa prefix'u nad głową (NameTag'a)

Opublikowano

[17:05:58] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing 'opusc' in pl.blaquutm.mhcore.commands.guild.LeaveCommand(opusc)
    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.NullPointerException
    at pl.blaquutm.mhcore.NameTag.modes.ScoreBoardNameTag.leaveFromGuild(ScoreBoardNameTag.java:99) ~[?:?]
    at pl.blaquutm.mhcore.managers.NameTagManager.leaveFromGuild(NameTagManager.java:61) ~[?:?]
    at pl.blaquutm.mhcorecommands.guild.LeaveCommand.onCommand(LeaveCommand.java:32) ~[?:?]
    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

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...