• 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!

Spigot org.bukkit.command.CommandException

H

Hiddlebimpf

Guest
Hallo,
ich programmiere derzeit ein einfaches /spawn plugin.
Man kann mehrere Spawns und einen Mainspawn setzten.
SpawnOnJoin und SpawnOnDeath sind auch unterstützt.
Wenn man zum MainSpawn will muss man /spawn eingeben.
Wenn man zu einem bestimmten Spawn möchte muss man /spawn <spawn> eingeben.
Nun ist aber das Problem das wenn der Spawn den man eingibt nicht existiert dann bekomme ich einen Error.
Ich habe schon mehrere Lösungen ausprobiert aber ohne Erfolg.
Try & Catch funktioniert auch nicht.
Wie ihr sehen könnt habe ich auch schon etwas mit Arrays rum probiert allerdings habe ich nicht rausfinden können wie ich gucken lasse ob etwas spezielles in dem Array drin steht.

Try&Catch:
try{
[...]
 }catch(CommandException exception){
p.sendMessage("Error")
}

Error:
[14:57:39 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'spawn' in plugin HeySpawn v1.0.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_251]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_251]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_251]
Caused by: java.lang.IllegalArgumentException: Name cannot be null
        at org.apache.commons.lang.Validate.notNull(Validate.java:192) ~[1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.getWorld(CraftServer.java:1014) ~[1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.Bukkit.getWorld(Bukkit.java:496) ~[1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at tv.hiddlebimpf.hey.spawn.main.Main.onCommand(Main.java:183) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[1.8.8.jar:git-Spigot-db6de12-18fbb24]
        ... 15 more
Mein Plugin bei SpigotMC

Mfg. Tom aka. Hiddlebimpf
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Du kannst mit getConfig#contains überprüfen, ob ein Config-Eintrag existiert und kein default-Wert gesetzt ist. isSet überprüft, ob es nicht existiert - egal ob default oder nicht.
Alternativ kannst du natürlich auch einfach schauen, ob getConfig#getString(args[0] ...) == null ist.

Ansonsten:
Nutze doch eine .yml-Datei für deine Nachrichten. Du hast die Nachrichten zwar schon extra als Variablen gespeichert, was das bearbeiten sicher einfacher macht. Der ganze Sinn davon geht jedoch verloren, wenn man trotzdem noch das Plugin neukompilieren muss, nur um eine Nachricht zu ändern. Und bitte sende nicht so unglaublich viele, unnötige Nachrichten beim Server-Start - das arme Log wird ja ganz unlesbar.

Ansonsten halte ich es nicht für elegant, die Spawn-Informationen direkt immer in der Config zu speichern oder aus dieser zu lesen. Das ist nicht sonderlich effizient. Sinnvoller wäre es meine Meinung nach, die Config einmal beim Start zu laden, dann während der Server läuft nur Variablen abzurufen & die (eventuell geänderten) Variablen dann beim Server-Stop wieder in der Config zu speichern.
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Die Fehlermeldung stimmt nicht mit deinem Quellcode überein. Insgesamt würdest du solche Fehler innerhalb kürzester Zeit finden, wenn du Stacktraces lesen kannst.

Außerdem solltest du dir vielleicht mal mein kleines Tutorial zu dem Interface ConfigurationSerializable anschauen, damit könntest du dir jede Menge Code ersparen und somit auch die Fehlergefahr verringern.

Ein weiterer Punkt wäre, dass du deinen Code aufsplitten solltest. Befehle in jeweils eine eigene Klasse, Listener ebenfalls auslagern.


Der ganze Sinn davon geht jedoch verloren, wenn man trotzdem noch das Plugin neukompilieren muss, nur um eine Nachricht zu ändern
Der addDefault-Aufruf entspricht quasi einer Default config.yml. Die Werte werden dadurch nur gespeichert, wenn kein anderer Wert vorhanden ist. Angepasst werden können sie aber trotzdem.
 
Oben