tasse Geschrieben 2. April 2020 Share Geschrieben 2. April 2020 Hey leute, Ich bin neu in dem ganzen Programmier Business und übe zur Zeit, indem ich Plugins programmiere. Im Moment ist mein Projekt ein simples /setspawn zum setzten des spawnpoints und ein /spawn Command um dort hin zu gelangen. Mein Code sieht wie folgt aus: public class spawn implements CommandExecutor { Location spawn; public boolean onCommand(CommandSender cs, Command c, String s, String[] args) { if (cs instanceof Player){ Player p = (Player)cs; if (p.isOp()){ if (s.equalsIgnoreCase("setspawn")){ double xcordinate = p.getLocation().getX(); double ycordinate = p.getLocation().getY() + 3; double zcordinate = p.getLocation().getZ(); spawn = new Location(Bukkit.getWorld("Lobby"), xcordinate, ycordinate, zcordinate); p.sendMessage(ChatColor.GOLD + "Die neuen Spawn coordinaten sind: " + xcordinate + ycordinate + zcordinate); } }else {cs.sendMessage(ChatColor.RED + "Du besitzt nicht die benötigten Rechte!");} if (s.equalsIgnoreCase("spawn")){ p.teleport(spawn); } }else {System.out.println("Der Command ist ausschließlich für Spieler geeignet");} return false; } } Wenn ich /setspawn eingebe klappt alles, jedoch bekomme ich dann bei /spawn ein Internal Error. Wo ist mein Denkfehler? Liebe Grüße Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Bedrock Geschrieben 3. April 2020 Share Geschrieben 3. April 2020 Was gibt den die Console dabei aus? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
tasse Geschrieben 3. April 2020 Autor Share Geschrieben 3. April 2020 (bearbeitet) [20:14:45] [Server thread/INFO]: Dinozaurier issued server command: /spawn [20:14:45] [Server thread/ERROR]: null org.bukkit.command.CommandException: Unhandled exception executing command 'spawn' in plugin BasicTees v0.2 at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at org.bukkit.craftbukkit.v1_14_R1.CraftServer.dispatchCommand(CraftServer.java:710) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.PlayerConnection.handleCommand(PlayerConnection.java:1641) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.PlayerConnection.a(PlayerConnection.java:1481) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.TickTask.run(SourceFile:18) [spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeTask(SourceFile:144) [spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) [spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeNext(SourceFile:118) [spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.MinecraftServer.aX(MinecraftServer.java:909) [spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.MinecraftServer.executeNext(MinecraftServer.java:902) [spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.awaitTasks(SourceFile:127) [spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.MinecraftServer.sleepForTick(MinecraftServer.java:886) [spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:819) [spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at java.lang.Thread.run(Thread.java:830) [?:?] Caused by: java.lang.IllegalArgumentException: location at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer.teleport(CraftPlayer.java:616) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at org.bukkit.craftbukkit.v1_14_R1.entity.CraftEntity.teleport(CraftEntity.java:451) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] at com.Commands.spawn.onCommand(spawn.java:40) ~[?:?] at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-1.14.4.jar:git-Spigot-cbd1a1b-009d8af] ... 17 more @Bedrock bearbeitet 3. April 2020 von tasse Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Bedrock Geschrieben 3. April 2020 Share Geschrieben 3. April 2020 (bearbeitet) Also die Ursache ist, dass Location im spawn-Command null ist. setspawn und spawn sind ja zwei verschiedene Befehle - sozusagen weiß der spawn-Befehl nicht, was der setspawn-Befehl gemacht hat. Daher wird Location im spawn-Befehl nicht aktualisiert und bleibt daher null. Die einfachste und geläufigste Methode wäre, die Location über den setspawn-Befehl in eine Config zu speichern und mit dem spawn-Befehl wieder abzurufen. Ohne Config wäre der setspawn nach einem Serverneustart auch wieder weg. Zuerst legt man eine Config-Datei an - im Code einfach unter "Location spawn;" packen public void saveLocation (Player p) { UUID id = p.getUniqueId(); File locationData = new File (Bukkit.getServer().getPluginManager().getPlugin("PLUGINNAME").getDataFolder(), File.separator + "PlayerLocation"); File file = new File(locationData, File.separator + id + ".yml"); FileConfiguration fc = YamlConfiguration.loadConfiguration(file); if (!file.exists()) { try { fc.set("location", spawn); fc.save(file); } catch (IOException exception) { exception.printStackTrace(); } } else { try { fc.set("location", spawn); fc.save(file); } catch (IOException exception) { exception.printStackTrace(); } } } Nachdem du die Koordinaten mit dem setspawn-Befehl abgegriffen hast, führst du saveLocation(p) aus - damit wird die "Location spawn" in eine .yml-Datei gespeichert. Die wird sich dann in deinem Plugin-Config-Ordner unter "PlayerLocation" befinden. ... spawn = new Location(Bukkit.getWorld("WELTNAME"), xcordinate, ycordinate, zcordinate); saveLocation(p); Über die UUID des Spielers wird sozusagen für jeden, der den Befehl nutzen kann, eine eigene Datei im Ordner angelegt. Im spawn-Befehl holt man dann die Location zurück: if (s.equalsIgnoreCase("spawn")){ Location spawn = null; UUID id = p.getUniqueId(); File locationData = new File (Bukkit.getServer().getPluginManager().getPlugin("PLUGINNAME").getDataFolder(), File.separator + "PlayerLocation"); File file = new File(locationData, File.separator + id + ".yml"); FileConfiguration fc = YamlConfiguration.loadConfiguration(file); spawn = (Location) fc.get("location"); p.teleport(spawn); } Das war es dann auch schon 🙂 Im Code musst du noch PLUGINNAME und WELTNAME ersetzen. Dann sollte alles funktionieren. Wegen der Chatausgabe vom setspawn-Befehl: Da würde es sich anbieten, die Koordinaten als Integer abzugreifen - es sieht im Chat besser aus, als die ewig langen Zahlen 😉 int xcordinate = (int) p.getLocation().getX(); int ycordinate = (int) (p.getLocation().getY() + 3); int zcordinate = (int) p.getLocation().getZ(); spawn = new Location(Bukkit.getWorld("WELTNAME"), xcordinate, ycordinate, zcordinate); saveLocation(p); p.sendMessage(ChatColor.GOLD + "Die neuen Spawn-Koordinaten sind: " + ChatColor.GREEN + xcordinate + " " + ycordinate + " " + zcordinate); bearbeitet 4. April 2020 von Bedrock Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden