Alpha_2206 Posted April 17, 2020 Share Posted April 17, 2020 Hallo, ich habe ein problem das wie folgt beschreiben wird Könnt ihr bitte helfen, das Plugin macht nicht das was es soll wenn ich z.b. /baustart eingebe mit oder ohne op zeigt er im chat /baustart an und nicht das was es soll. Core.Java/Main: https://pastebin.com/fy7xpBdV Bautp Java: https://pastebin.com/bUMPSHs1 Baustart Java:; https://pastebin.com/GGf2Ri0v Baustop java: https://pastebin.com/H9x78Qy5 Plugin yml /falls wichtig): https://pastebin.com/V7rsLZCB Das Plugin soll generell bei dem Command /baustart den Spieler auf eine arraylist speichern und den Spieler bau-/Bauchat permission geben und den auf die whitelist setzen. Bei /baustop soll es die Arraylist mit allen Spielernamen löschen und die permission entfernen. Bei /bautp soll es die Spieler der Arraylist zu dem absender Teleportieren. das plugin ist noch nicht ganz fertig ich wollte noch hinzufügen das der bei baustart permission vergibt und bei baustop sie entfernt und das gleiche bei einer whitelist, aber das bekomme ich alleine hin. ps: Bin neu hier auf dem Forum Link to comment Share on other sites More sharing options...
FireSpirit15 Posted April 17, 2020 Share Posted April 17, 2020 (edited) Hey, ich habe mich mit deiner Klasse "Baustart" beschäftigt und einige (kleinere) Fehler im Code korrigiert. Diese sieht nun wie folgt aus: public class CommandBaustart implements CommandExecutor { public List<String> playerlist = new ArrayList<String>(); public boolean onCommand(CommandSender cs, Command cmd, String label, String[] args) { if (cmd.getName().equalsIgnoreCase("baustart")) { if (cs instanceof Player) { Player p = (Player) cs; if (p.hasPermission("bau.baustart")) { if (args.length == 1) { Player pp = Bukkit.getPlayer(args[0]); if (pp != null) { if (!playerlist.contains(pp.getName())) { playerlist.add(pp.getName()); pp.sendMessage(ChatColor.YELLOW + "Du wurdest ins Bauteam geholt!"); } } else { p.sendMessage(ChatColor.DARK_RED + "Der Spieler" + args[0] + "ist nicht Online!"); } } else { p.sendMessage(ChatColor.DARK_RED + "/Baustart [Spieler]"); } } else { p.sendMessage("§a[§4§lAlphaLand§a] §4Du hast keine Rechte um in den Baumodus zu gelangen!"); } } else { cs.sendMessage("§a[§4§lAlphaLand§a] §4Diesen Befehl können nur Spieler ausführen!"); } } return false; } } Die Meldung "/baustart" beim Ausführen erhältst du, weil du bei "usage" in der PluginYML "/<command>" eingetragen hast. Kannst du weglassen, da du dem Spieler bei einer Eingabe von mehr als einem Argument eine entsprechende Nachricht zur Verwendung des Befehls zusendest. Außerdem musst du die Permissions ebenfalls in der PluginYML eintragen, da diese sonst nicht erkannt werden können. Sieht dann so aus: permissions: bau.baustart: description: Baustart default: op Kommen wir nun kurz zu den Änderungen, die ich an deiner Klasse vorgenommen habe: 1.) Die Spieler sollten als "List" abgespeichert werden, dazu musst du jedoch zunächst eine neue Array-List mit "= new ArrayList<String<()" erstellen. Deine verwendete Methode funktioniert hierbei leider nicht. 2.) Zum Abspeichern solltest du den Spielername (pp.getName) oder die Spieleruuid (pp.getUniqueId().toString()) verwenden, mit "pp.getPlayer()" kann das Plugin nicht viel anfangen und es kommt zu Fehlern beim Abspeichern. 3.) Ein "return" benötigst du für deine Zwecke nur am Schluss, also einmal, da dies an den Stellen wo du es eingesetzt hast nicht unbedingt notwendig ist. 4.) "try-catch" kannst du in diesem Falle auslassen, es kam beim Testen nur zu Fehlern. Anstelle dessen kannst du ruhig die IF-Abfragen verwenden, das genügt. Ich hoffe, dass ich dir hiermit weiterhelfen konnte und der von dir angesprochene Fehler nun behoben ist. Bei mir hat der Code nach der Veränderung ohne Probleme funktioniert. Falls du noch weitere Fragen hast, kannst du dich gerne an mich wenden! Mit freundlichen Grüßen FireSpirit15 Edited April 17, 2020 by FireSpirit15 !=Null-Check eingefügt 1 Link to comment Share on other sites More sharing options...
Alpha_2206 Posted April 18, 2020 Author Share Posted April 18, 2020 Ich habe es jetzt so wie sie FireSpirit15, aber habe die arraylist in der Core.java klasse erstellt und die java sieht wie folgt aus; ---------------------------------------------------------------------------------------- package de.alpha_2206.bau; import java.util.ArrayList; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import net.md_5.bungee.api.ChatColor; public class CommandBaustart2 implements CommandExecutor { public boolean onCommand(CommandSender cs, Command cmd, String label, String[] args) { if (cmd.getName().equalsIgnoreCase("baustart")) { if (cs instanceof Player) { Player p = (Player) cs; if (p.hasPermission("bau.baustart")) { if (args.length == 1) { Player pp = Bukkit.getPlayer(args[0]); if (pp != null) { if (!de.alpha_2206.bau.Core.playerlist.contains(pp.getUniqueId())) { de.alpha_2206.bau.Core.playerlist.add(pp.getUniqueId().toString()); pp.sendMessage(ChatColor.YELLOW + "Du wurdest ins Bauteam geholt!"); } } else { p.sendMessage(ChatColor.DARK_RED + "Der Spieler" + args[0] + "ist nicht Online!"); } } else { p.sendMessage(ChatColor.DARK_RED + "/Baustart [Spieler]"); } } else { p.sendMessage("§a[§4§lAlphaLand§a] §4Du hast keine Rechte um in den Baumodus zu gelangen!"); } } else { cs.sendMessage("§a[§4§lAlphaLand§a] §4Diesen Befehl können nur Spieler ausführen!"); } } return false; } } ----------------------------------------------------------------------- und beim versuch diesen auszuführen hat er nichts gemacht... in der Konsole wurde nur angezeigt, dass der spieler diesen befehl ausgeführt hat, aber nicht mehr. Wenn ich versuche den befehl in der Konsole auszuführen macht der auch nichts, im log steht nichts drin Link to comment Share on other sites More sharing options...
FireSpirit15 Posted April 18, 2020 Share Posted April 18, 2020 Hey, wie sieht nach derzeitigem Stand deine Core-Klasse aus? Du musst wahrscheinlich anders auf die Arraylist zugreifen, ich würde an deiner Stelle in der Core-Klasse die Playerlist als Static deklarieren public static List<String> playerlist = new ArrayList<String>(); und dann über if (Core.playerlist.contains(pp.getUniqueId().toString()) { ...} bzw. if (Core.playerlist.contains(pp.getUniqueId()) { ...} auf diese zugreifen. Falls du noch weitere Fragen hast, kannst du dich gerne an mich wenden! Mit freundlichen Grüßen FireSpirit15 2 Link to comment Share on other sites More sharing options...
Alpha_2206 Posted April 18, 2020 Author Share Posted April 18, 2020 (edited) FireSpiriz15 meine Core Klasse sieht wie folgt aus: ----------------------------------- package de.alpha_2206.bau; import java.util.ArrayList; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.command.CommandExecutor; public class Core extends JavaPlugin { public static ArrayList<String> playerlist = new ArrayList<String>(); private static Core instance; public static Core getInstance() { return instance; } public void OnEnable() { instance = this; this.getCommand("baustart").setExecutor(new CommandBaustart2()); this.getCommand("baustop").setExecutor(new CommandBaustop()); this.getCommand("bautp").setExecutor(new CommandBautp()); } public void onDisable() { instance = null; System.out.println("Disable Bausystem by Alpha_2206"); } } -------------------------------------------- Edited April 18, 2020 by Alpha_2206 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now