Java Plugin Problem

KingJoshii1000

Lieutenant
Registriert
Apr. 2010
Beiträge
879
Hallo,
ich bin neu im Bereich Java, und habe deswegen mit etwas "einfachem" angefangen
Code:
package de.aventaris;

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 aventaris_main extends JavaPlugin {
	
	@Override
	public void onEnable() {
		
	}
	
	@Override
	public void onDisable() {
		
	}
	
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		
		if(sender instanceof Player) {
			Player p = (Player) sender; 
			if(cmd.getName().equalsIgnoreCase("kill")) {
				if(args.length == 0) {
					if(p.hasPermission("av.kill.me")) {
						p.setHealth(0);
						p.sendMessage(ChatColor.GREEN + ":(");
					}
					else {
					}
				}
				else if (args.length == 1) {
					if(this.getServer().getPlayer(args[0]).isOnline()) {
						Player target = this.getServer().getPlayer(args[0]);
						if(p.hasPermission("av.kill.other")) {
							target.setHealth(0);
							target.sendMessage(ChatColor.GREEN + "Du wurdest von einem Admin augeschaltet...");
							target.sendMessage(ChatColor.GREEN + "Er wird dich gleich anschreiben und dir den Grund nennen...");	
						}
						else {
						}
					}
					else {
						p.sendMessage(ChatColor.RED + "Der Spieler ist gerade nicht Online");
					}
				}
				else if(args.length != 0 && args.length != 1) {
					p.sendMessage(ChatColor.RED + "Du musst /kill <Target> eingeben.");
				}
			}
		}
		return true; 
	}

}
Mein Problem ist folgendes:
Wenn ein Spieler einen Spieler töten möchte, der nicht online ist gibt es folgenden Fehler in der Console:
20:43:41 [SEVERE] null
org.bukkit.command.CommandException: Unhandled exception executing command 'kill' in plugin Aventaris v0.1
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166)
at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:484)
at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:811)
at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:771)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:754)
at org.getspout.spout.SpoutNetServerHandler.a(SpoutNetServerHandler.java:106)
at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:34)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:246)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:102)
at org.getspout.spout.SpoutNetServerHandler.a(SpoutNetServerHandler.java:172)
at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:82)
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:559)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:451)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
Caused by: java.lang.NullPointerException
at de.aventaris.aventaris_main.onCommand(aventaris_main.java:36)
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
... 14 more

Wo liegt der Fehler?

Mit freundlichen Grüßen ;)
 
Args[0] in Zeile 36 ist eventuell null? Also keinen Parameter an das zu startende Java-Programm übergeben?
 
Überprüfe ob der Spieler überhaupt existiert.

Player target = this.getServer().getPlayer(args[0])

dann nach null abfragen.


Den wenn der Spieler nicht gefunden werden kann, dann funktioniert auch isOnline nicht richtig.
 
Hallo,
ich hab das Args[0] durch null ersetzt, dann funktioniert es auch nicht mehr auf Spieler die Online sind


MFG

(Sorry kenn mich auf diesem Gebiet nicht so gut aus :D)
 
Code:
else if (args.length == 1) {
                                       Player target = this.getServer().getPlayer(args[0]);
                                       if(target != null){
				                if(target.isOnline()) {
						     
						     if(p.hasPermission("av.kill.other")) {
							target.setHealth(0);
							target.sendMessage(ChatColor.GREEN + "Du wurdest von einem Admin augeschaltet...");
							target.sendMessage(ChatColor.GREEN + "Er wird dich gleich anschreiben und dir den Grund nennen...");	
						}
						else {
                                                         p.sendMessage(ChatColor.RED + "Der Spieler ist gerade nicht Online");
						}
					}
					else {
						p.sendMessage(ChatColor.RED + "Der Spieler nicht gefunden");
					}
				}


so ca. hab es mal eben hier in der box getippt.
 
DasBoeseLebt schrieb:
Überprüfe ob der Spieler überhaupt existiert. dann nach null abfragen.
Der Fehler fliegt aber schon in Zeile 36, deshalb ist es egal das Player-Objekt zu prüfen. Denn auf dem Objekt wird gar keine Operation mehr ausgeführt ;) Der Fehler tritt auf, weil null an die getPlayer()-Methode übergeben wird.


KingJoshii1000 schrieb:
Hallo,
ich hab das Args[0] durch null ersetzt, dann funktioniert es auch nicht mehr auf Spieler die Online sind
Das war eigentlich umgedreht gemeint ;) args[0] sollte nicht null sein, das scheint es bei dir aber zu sein und deshalb fliegt der Fehler.


KingJoshii1000 schrieb:
(Sorry kenn mich auf diesem Gebiet nicht so gut aus :D)
fang lieber mit etwas einfacherem an ;)
Um am Minecraft-Server rumzuspielen, solltest du schon gute Java-Erfahrung haben ;)
 
Zuletzt bearbeitet:
Der Funktionsaufruf "getServer()" könnte auch 'null' liefern. Sollte in der Doku stehen. Notfalls im Quellcode nachschauen, sofern vorhanden.

Generell gilt, dass man die Rückgabe einer Funktion entsprechend behandeln muss. Kann eine Funktion 'null' liefern, muss man diesen Fall auch entsprechend kodieren.

Selbiges gilt natürlich auch für die Argumente eines Funktionsaufrufs. Hier z.B. args[0]. Dies darf (offensichtlich) nicht 'null' sein, also muss man dies entsprechend sicherstellen. Wenn Dein Programm beim Aufruf Parameter erwartet, sollte man einen Fehler ausgeben, sofern kein Parameter übermittelt wurde.
 
Hallo,
Habe den Code vom DasBoeseLebt eingebaut (Danke :)).
Jetzt klappt es prima :)
@ice-breaker:
Was würdest du den Vorschlagen um Java richtig zu lernen? :)

MFG
 
Sowas zu machen, lernst doch genug dabei. Vllt. selbst noch Fehler verstehen und lösen ; )

Wobei ich nicht gerade in Großprojekte wie den BukkitServer einsteigen würde, wenn ich das richtige sehe.
 
Zuletzt bearbeitet: (ach, OT OT OT gestrichen)
Zurück
Oben