• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Scoreboard Problem

Sn0wBlizz4rd

Braumeister
Registriert
26 September 2012
Beiträge
418
Diamanten
1
Minecraft
Sn0wBlizz4rd
Hey, ich code grade ein Scoreboard plugin.
Jedoch habe ich ein Problem; Es funktioniert zwar alles,
und der Score etc. wird rechts angezeigt, aber ich versuche
nun die Werte rechts zu updaten. Mein Code ist folgender:

Code:
	public void showScoreboard(final Player player) {
		getServer().getScheduler().runTask(this, new Runnable() {
		@Override
		public void run() {
		int k = getConfig().getInt(player.getName() + ".Kills");
		int d = getConfig().getInt(player.getName() + ".Deaths");
			
		String name = "§c§lScore";
		 
		Scoreboard sb = new Scoreboard();
		sb.registerObjective(name, new ScoreboardBaseCriteria(name));
		 
		Packet206SetScoreboardObjective packet = new Packet206SetScoreboardObjective(sb.getObjective(name), 0);
		Packet208SetScoreboardDisplayObjective display = new Packet208SetScoreboardDisplayObjective(1, sb.getObjective(name));
		 
		sendPacket(player, packet);
		sendPacket(player, display);
		 
		ScoreboardScore scoreItem1 = sb.getPlayerScoreForObjective("§7Kills§r", sb.getObjective(name));
		ScoreboardScore scoreItem2 = sb.getPlayerScoreForObjective("§7Deaths§r", sb.getObjective(name));
		scoreItem1.setScore(k);
		scoreItem2.setScore(d);
		 
		Packet207SetScoreboardScore pScoreItem1 = new Packet207SetScoreboardScore(scoreItem1, 0);
		Packet207SetScoreboardScore pScoreItem2 = new Packet207SetScoreboardScore(scoreItem2, 0);
		sendPacket(player, pScoreItem1);
		sendPacket(player, pScoreItem2);
		 
		}
		 
		});
		}
	
	public static void sendPacket(Player player, Packet packet) {
		((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
	}

Wenn ich einfach versuche, die Packets neu zu senden, erhalte ich eine NullPointerException.
Deswegen bitte ich um eure Hilfe.

PS: Mir ist aufgefallen, wenn man vom Server geht, wird das Scoreboard von diesem
Spieler entfernt, also wäre es warscheinlich die beste Lösung dies ausnutzen(Scoreboard
löschen, dann neu erstellen) - nur wie das geht, weiß ich nicht so recht.

Danke im Voraus, Cubos.
 
G

games6471

Guest
Das Scoreboard entfernt sich automatisch, da es nirgends speicherst sondern nur mit Packeten arbeitest.

Außerdem wäre es hilfreich die Exception ebenfalls zu posten, um damit eine schnelle Fehlerfindung zu profitieren.
 
Zuletzt bearbeitet von einem Moderator:

Sn0wBlizz4rd

Braumeister
Registriert
26 September 2012
Beiträge
418
Diamanten
1
Minecraft
Sn0wBlizz4rd
Wie gesagt kriege ich eine Java-NullPointerException, falls du den Fehlercode willst, oder den Code den ich versucht habe um die Packets zu updaten (Ich habe den gleichen Code genommen wie oben!), sag bescheid :) Ich poste ihn dann gleich hier.
 

Sn0wBlizz4rd

Braumeister
Registriert
26 September 2012
Beiträge
418
Diamanten
1
Minecraft
Sn0wBlizz4rd
Also:
Code zum Updaten:

Code:
public void updateScoreboard(Player player) {
		int k = getConfig().getInt(player.getName() + ".Kills");
		int d = getConfig().getInt(player.getName() + ".Deaths");
		String name = "§c§lStats";
		Scoreboard sb = new Scoreboard();
		ScoreboardScore scoreItem1 = sb.getPlayerScoreForObjective("§7Kills§r", sb.getObjective(name));
		ScoreboardScore scoreItem2 = sb.getPlayerScoreForObjective("§7Tode§r", sb.getObjective(name));
		scoreItem1.setScore(k);
		scoreItem2.setScore(d);
		Packet207SetScoreboardScore pScoreItem1 = new Packet207SetScoreboardScore(scoreItem1, 0);
		Packet207SetScoreboardScore pScoreItem2 = new Packet207SetScoreboardScore(scoreItem2, 0);
		sendPacket(player, pScoreItem1);
		sendPacket(player, pScoreItem2);
	}


Und das ist die Fehlermeldung wenn geupdatet wird:
Code:
2013-04-01 16:57:43 [SEVERE] Could not pass event PlayerDeathEvent to SkelsisKills v1.0
org.bukkit.event.EventException
	at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
	at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
	at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
	at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
	at org.bukkit.craftbukkit.v1_5_R2.event.CraftEventFactory.callPlayerDeathEvent(CraftEventFactory.java:335)
	at net.minecraft.server.v1_5_R2.EntityPlayer.die(EntityPlayer.java:285)
	at org.bukkit.craftbukkit.v1_5_R2.entity.CraftLivingEntity.setHealth(CraftLivingEntity.java:77)
	at org.bukkit.command.defaults.KillCommand.execute(KillCommand.java:33)
	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:188)
	at org.bukkit.craftbukkit.v1_5_R2.CraftServer.dispatchCommand(CraftServer.java:523)
	at net.minecraft.server.v1_5_R2.PlayerConnection.handleCommand(PlayerConnection.java:966)
	at net.minecraft.server.v1_5_R2.PlayerConnection.chat(PlayerConnection.java:884)
	at net.minecraft.server.v1_5_R2.PlayerConnection.a(PlayerConnection.java:841)
	at net.minecraft.server.v1_5_R2.Packet3Chat.handle(Packet3Chat.java:44)
	at net.minecraft.server.v1_5_R2.NetworkManager.b(NetworkManager.java:292)
	at net.minecraft.server.v1_5_R2.PlayerConnection.d(PlayerConnection.java:110)
	at net.minecraft.server.v1_5_R2.ServerConnection.b(SourceFile:35)
	at net.minecraft.server.v1_5_R2.DedicatedServerConnection.b(SourceFile:30)
	at net.minecraft.server.v1_5_R2.MinecraftServer.r(MinecraftServer.java:578)
	at net.minecraft.server.v1_5_R2.DedicatedServer.r(DedicatedServer.java:225)
	at net.minecraft.server.v1_5_R2.MinecraftServer.q(MinecraftServer.java:474)
	at net.minecraft.server.v1_5_R2.MinecraftServer.run(MinecraftServer.java:407)
	at net.minecraft.server.v1_5_R2.ThreadServerApplication.run(SourceFile:573)
Caused by: java.lang.NullPointerException
	at net.minecraft.server.v1_5_R2.Packet207SetScoreboardScore.<init>(SourceFile:25)
	at de.Sn0wBlizz4rd.SkelsisKills.SkelsisKills.updateScoreboard(SkelsisKills.java:77)
	at de.Sn0wBlizz4rd.SkelsisKills.SkelsisKills.onDeath(SkelsisKills.java:64)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
	... 22 more

PS: Die void updateScoreboard() wird beim PlayerDeathEvent aufgerufen.
PPS: Wenn ich den gleichen Code aufrufe den ich beim JoinEvent Aufrufe(Der Code der oben steht, beim ersten Kommentar!),
schmiert Minecraft ab. Da gibt's dann nur ne Error Meldung von wegen Fehler in Welten Ticks.
Siehe hier:
Code:
Minecraft has stopped running because it encountered a problem; Exception in world tick

Und nochmal die Minecraft-Error Log:
http://pastebin.com/NmLWbcMQ
 
Zuletzt bearbeitet:
Oben