Failcrafter1998 Posted May 25, 2016 Share Posted May 25, 2016 Guten Tag Liebe Community, Ich versuche momentan ein Plugin zu Programmieren das Folgendes macht: Wenn ich z.b /Supporter [Name] mache soll dieser Befehl pex user... ausführen. Könnte mir vielleicht jemand bei der Umsetzung dieses Plugins Helfen? Mit freundlichen Grüßen Patrick Link to comment Share on other sites More sharing options...
Renel2202 Posted May 25, 2016 Share Posted May 25, 2016 vor 16 Minuten schrieb Starpececraft: Guten Tag Liebe Community, Ich versuche momentan ein Plugin zu Programmieren das Folgendes macht: Wenn ich z.b /Supporter [Name] mache soll dieser Befehl pex user... ausführen. Könnte mir vielleicht jemand bei der Umsetzung dieses Plugins Helfen? Mit freundlichen Grüßen Patrick Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Supporter"); Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 25, 2016 Author Share Posted May 25, 2016 (edited) So habe es jetzt versucht nur leider stimmt anscheinend etwas mit der Plugin.yml nicht weswegen das Plugin nicht laden will. So sieht meine Plugin.yml aus: name: Test version: 0.1 author: Failcrafter1998 main: Me.Failcrafter1998.main commands: test: description: Test usage: permission: test.supporter Kann mir jemand sagen was ich falsch gemacht hab //Edit: Ist Gefixt Edited May 25, 2016 by Starpececraft Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 25, 2016 Author Share Posted May 25, 2016 (edited) Noch Etwas wie kann ich eine Error Message im Chat ausgeben wenn kein Name eingeben wird. Hier mein Code package Me.Failcrafter1998; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; public class main extends JavaPlugin implements Listener { public void onEnable() { } public void onDisable() { } public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args) { Player p = (Player)sender; if (cmd.getName().equalsIgnoreCase("test")) { if (p.hasPermission("test.supporter")) { if (args.length == 1) { Player p2 = getServer().getPlayer(args[0]); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Supporter"); p.sendMessage("Der Spieler " + p2.getName() + " wurde zum Supporter ernnant"); p2.sendMessage("Du wurdest von " +p.getName() + " zum Supporter ernannt"); } } return true; } else { return false; } } } Edited May 25, 2016 by Starpececraft Link to comment Share on other sites More sharing options...
Baustein Posted May 25, 2016 Share Posted May 25, 2016 Du fragst ab ob deine Argumenten-Länge != 1 ist (else). Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 25, 2016 Author Share Posted May 25, 2016 Hab jetzt so geregelt: if (cmd.getName().equalsIgnoreCase("test")) { if (p.hasPermission("test.supporter")) { if (args.length == 1) { Player p2 = getServer().getPlayer(args[0]); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Supporter"); p.sendMessage("Der Spieler " + p2.getName() + " wurde zum Supporter ernnant"); p2.sendMessage("Du wurdest von " +p.getName() + " zum Supporter ernannt"); }else{ p.sendMessage("Test Brah"); } } return true; Link to comment Share on other sites More sharing options...
Baustein Posted May 25, 2016 Share Posted May 25, 2016 Nichts anderes habe ich dir gesagt ^^. Kleiner Tipp, falls du deinen Code noch verbessern möchtest; gib mal dein Kommando ein, aber mit einem Spieler, der nicht online ist. Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 26, 2016 Author Share Posted May 26, 2016 (edited) Folgendes Passiert dann: [21:20:38] [Server thread/INFO]: Failcrafter1998 issued server command: /Supporter Test [21:20:39] [Server thread/INFO]: [0;37;1mUser groups set![m [21:20:39] [Server thread/ERROR]: null org.bukkit.command.CommandException: Unhandled exception executing command 'supporter' in plugin MinePhoenix-System v1.0 at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at org.bukkit.craftbukkit.v1_8_R2.CraftServer.dispatchCommand(CraftServer.java:646) ~[Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at net.minecraft.server.v1_8_R2.PlayerConnection.handleCommand(PlayerConnection.java:1139) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at net.minecraft.server.v1_8_R2.PlayerConnection.a(PlayerConnection.java:974) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at net.minecraft.server.v1_8_R2.PacketPlayInChat.a(PacketPlayInChat.java:45) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at net.minecraft.server.v1_8_R2.PacketPlayInChat.a(PacketPlayInChat.java:1) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at net.minecraft.server.v1_8_R2.PlayerConnectionUtils$1.run(SourceFile:13) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_92] at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_92] at net.minecraft.server.v1_8_R2.SystemUtils.a(SourceFile:60) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at net.minecraft.server.v1_8_R2.MinecraftServer.A(MinecraftServer.java:712) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at net.minecraft.server.v1_8_R2.DedicatedServer.A(DedicatedServer.java:368) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at net.minecraft.server.v1_8_R2.MinecraftServer.z(MinecraftServer.java:651) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at net.minecraft.server.v1_8_R2.MinecraftServer.run(MinecraftServer.java:554) [Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] at java.lang.Thread.run(Unknown Source) [?:1.8.0_92] Caused by: java.lang.NullPointerException at Me.Failcrafter1998mystem.system.onCommand(system.java:60) ~[?:?] at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[Spigot.1.8.3.jar:git-Spigot-870264a-0a645a2] ... 15 more Ich muss wahrscheinlich irgendwo noch etwas einbauen nur wo und was muss ich da einbauen. Bitte nur ein paar Tipps keine Komplett Lösung möchte selbst Lernen. Edited May 26, 2016 by Failcrafter1998 Link to comment Share on other sites More sharing options...
Baustein Posted May 26, 2016 Share Posted May 26, 2016 p2 ist kein Wert zugewiesen, wenn der Spieler nicht gefunden wird. Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Joey Posted May 26, 2016 Share Posted May 26, 2016 Frag am besten ab, ob der Spieler online ist if(Bukkit.getPlayer(String) !=null) Wenn er nicht online ist, kannst du ihn theoretisch als OfflinePlayer deklarieren, dann kannst du auch offline Spieler verwenden Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 27, 2016 Author Share Posted May 27, 2016 (edited) So ich habe es tatsächlich geschafft So sieht es jetzt aus: public boolean onCommand (CommandSender sender, Command cmd, String cmdlabel, String[] args) { Player p = (Player) sender; if (cmd.getName().equalsIgnoreCase("supporter") || cmd.getName().equalsIgnoreCase("Supporter")) { if (p.hasPermission("test.supporter")) { if (args.length == 1) { Player target = Bukkit.getPlayer(args[0]); if (target !=null) { Player p2 = Bukkit.getServer().getPlayer(args[0]); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Sup"); p.sendMessage("§6Der Spieler " + p2.getName() + " §6wurde zum Supporter ernnant!"); p2.sendMessage("§6Du wurdest von" + p.getName() + " §6zum Supporter ernannt!"); } else { p.sendMessage("Spieler ist nicht Online!"); } } } else { p.sendMessage("Bitte gebe einen Spielernamen ein!"); } return true; } else { return false; } } } Ich würde gerne jetzt noch das ganze machen das man den Supporter auch wieder Löschen kann. Nur hätte ich gerne das das Plugin Testet ob der Spieler wirklich in der Gruppe Supporter ist. Wie kann ich das machen. Ich weiß das ich z.b Pex in mein Plugin impotieren muss. Und Folgendes muss ich am Start des Plugins eintrage: PermissionManager pex=null; aber weiter weiß ich nicht. Hier wäre eine bisschen Ausführlichere Erklärung besser. Edited May 27, 2016 by Failcrafter1998 Link to comment Share on other sites More sharing options...
Derya001 Posted May 27, 2016 Share Posted May 27, 2016 Warum hast du 2 mal einen Player aus der Variable args[0] erzeugt, benutzt aber nur den einen? Link to comment Share on other sites More sharing options...
Joey Posted May 27, 2016 Share Posted May 27, 2016 (edited) Schaue dich am besten mal in dem GitHub Repository von Pex um, da findest du die Funktionen, die du suchst Edited May 27, 2016 by Joey Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 27, 2016 Author Share Posted May 27, 2016 Der/Das GitHub Repository hat da nur sehr wenig Infos zu bieten. Link to comment Share on other sites More sharing options...
Joey Posted May 27, 2016 Share Posted May 27, 2016 In dem Repo ist der komplette Sourcecode ? Da steht alles was du brauchst ? Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 27, 2016 Author Share Posted May 27, 2016 Ich weiß jetzt wie ich das Anstellen muss danke für die Hilfe Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 27, 2016 Author Share Posted May 27, 2016 (edited) Noch etwas kleines: Ich habe jetzt einen Command erstellt um den Supporter wieder zu Löschen. Das ganze geht auch soweit nur leider gibt es nen Bug. Wenn der User schon in der Gruppe ist gibt er eine Nachricht aus und dazu noch </command>(Steht so in der Plugin.yml als usage). Ich könnte das </command> einfach Rausnehmen und es wäre gefixt, aber ich möchte gerne meinen Fehler finden. Hier mein Code: public boolean onCommand (CommandSender sender, Command cmd, String cmdlabel, String[] args) { Player p = (Player) sender; PermissionUser user = PermissionsEx.getUser(p); if (cmd.getName().equalsIgnoreCase("supporter")) { if (p.hasPermission("test.supporter")) { if (args.length == 1) { Player target = Bukkit.getPlayer(args[0]); if (target !=null) { Player p2 = Bukkit.getServer().getPlayer(args[0]); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Sup"); p.sendMessage("§6Der Spieler " + p2.getName() + " §6wurde zum Supporter ernnant!"); p2.sendMessage("§6Du wurdest von " + p.getName() + " §6zum Supporter ernannt!"); } else { p.sendMessage("§6Der Spieler§c " + args[0] + "§6 ist nicht Online"); } } else { p.sendMessage("§6Bitte gebe einen Spielernamen an!"); } } } if (cmd.getName().equalsIgnoreCase("rsupporter")) { if (p.hasPermission("test.rsupporer")) { if (user.inGroup("Sup")) { if (args.length == 1) { Player target = Bukkit.getPlayer(args[0]); if (target !=null) { Player p2 = Bukkit.getServer().getPlayer(args[0]); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group remove Sup"); p.sendMessage("§6Der Spieler " + p2.getName() + " §6wurde als Supporter entfernt!"); p2.sendMessage("§6Du wurdest von " + p.getName() + " §6als Supporter entfernt!"); } else { p.sendMessage("§6Der Spieler§c " + args[0] + "§6 ist nicht Online"); } } else { p.sendMessage(" §6Bitte gebe einen Spielernamen an!"); } } else { p.sendMessage("§6Der Spieler ist bereits ein Supporter"); } } } return false; } } Ps: Bei der letzten els klammer sollte folgendes stehen: Spieler ist kein Supporter Edited May 27, 2016 by Failcrafter1998 Link to comment Share on other sites More sharing options...
Joey Posted May 27, 2016 Share Posted May 27, 2016 Dass du immer die "usage Nachricht" bekommst liegt an dem "return false". Deine Code läuft durch und egal wie, am Ende wird false zurückgegeben. Wann dass der Fall ist, gibt Bukkit dir die Nachricht aus. Zu deinem 2ten Problem, du hast bei deinem Code was durcheinander gewürfelt. Du fragst ab, ob der CommandSender in der Gruppe Sup ist, dann holst du dir den Spieler aus deinem Argument und entfernst ihn aus der Gruppe Sup ? Ändere das erstmal und wenn er dir eine Nachricht ausgibt, wäre es sinnvoll, dass du uns die Nachricht mitteilst. PS: Du deklarierst die Variable target, als Spieler und fragst ab, ob dieser on ist, daraufhin deklarierst du ihn wieder als p2 <- Das brauchst du nicht, du kannst mit der Variable target weiter machen Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 28, 2016 Author Share Posted May 28, 2016 Ich bekomme es irgendwie nicht hin wenn ich alles in einen public boolean mache. Ist es den Klug wenn ich jeden Befehl in einen eigenen boolean machen würde oder ehere nicht? Link to comment Share on other sites More sharing options...
Joey Posted May 28, 2016 Share Posted May 28, 2016 Gerade eben schrieb Failcrafter1998: Ich bekomme es irgendwie nicht hin wenn ich alles in einen public boolean mache. Ist es den Klug wenn ich jeden Befehl in einen eigenen boolean machen würde oder ehere nicht? Nein, dann würde A viel zu lang werden und B bin ich mir nicht sicher, ob das überhaupt funktionieren würde. Hier mal ein Beispiel: if (target !=null) { Player p2 = Bukkit.getServer().getPlayer(args[0]); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group remove Sup"); p.sendMessage("§6Der Spieler " + p2.getName() + " §6wurde als Supporter entfernt!"); p2.sendMessage("§6Du wurdest von " + p.getName() + " §6als Supporter entfernt!"); return true; //Hier wird true zurück gegeben -> Der Code wird hier gestoppt (True steht indem Fall für alles ok, daher bekommst du keine usage Nachricht) } else { p.sendMessage("§6Der Spieler§c " + args[0] + "§6 ist nicht Online"); return false; //Hier wird false zurück gegeben -> Der Code wir hier gestoppt und du bekommst eine usage Nachricht (false steht hier für unvollständig oder nicht richtig ausgeführt) } Allerding kannst du (im Beispiel) das letzte return false weglassen, da du ja am Ende des onCommands kein return false stehen hast. Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 28, 2016 Author Share Posted May 28, 2016 (edited) Mir ist gerade aufgefallen das ich if (user.InGroup("Sup)) dann kann man den Befehl nur als Sup ausführen. Und das ist nicht was ich will. Ich möchte nur das der Spieler nur vom Rang Supporter entfernt wenn er auch Sup ist. Was muss ich da anders machen? Und das mit <command> ist weg Edited May 28, 2016 by Failcrafter1998 Link to comment Share on other sites More sharing options...
Joey Posted May 28, 2016 Share Posted May 28, 2016 vor 13 Stunden schrieb Joey: Zu deinem 2ten Problem, du hast bei deinem Code was durcheinander gewürfelt. Du fragst ab, ob der CommandSender in der Gruppe Sup ist, dann holst du dir den Spieler aus deinem Argument und entfernst ihn aus der Gruppe Sup ? Ändere das erstmal und wenn er dir eine Nachricht ausgibt, wäre es sinnvoll, dass du uns die Nachricht mitteilst. Darauf bin ich bereits eingegangen. Vielleicht solltest du dir solche Sachen mal durchlesen. Link to comment Share on other sites More sharing options...
Failcrafter1998 Posted May 28, 2016 Author Share Posted May 28, 2016 Ich habe jetzt einfach mal versucht einen Zweiten target zu erstellen das hat leider nicht so gut geklappt. Bräuchten noch ein Kleines bisschen mehr Hilfe. Hier mein Code mit dem Versuch drin: Player target = Bukkit.getPlayer(args[0]); Player target2 = user.inGroup("Sup"); if (target !=null) { if (target2 !=null) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group remove Sup"); p.sendMessage("§6Der Spieler " + target.getName() + " §6ist nun kein Supporter mehr!"); target.sendMessage("§6Du wurdest von " + p.getName() + " §6als Supporter entfernt!"); } else { p.sendMessage("Kein Sup"); } Link to comment Share on other sites More sharing options...
Derya001 Posted May 28, 2016 Share Posted May 28, 2016 (edited) Dein Problem ist dass du ganz schön viele Player-Variablen erstellst, obwohl du von anfang an nur 2 brauchst: Player commandSender und Player target. Ich habe deinen Code von oben mal modifiziert, auf das wesentliche beschränkt und deine ganzen Variablen und Abfragen sortiert: public boolean onCommand (CommandSender sender, Command cmd, String cmdlabel, String[] args){ Player commandSender = (Player) sender; if (commandSender.hasPermission("test.supporter")) { if (cmd.getName().equalsIgnoreCase("supporter")) { if (args.length == 1) { Player target = Bukkit.getPlayer(args[0]); if (target !=null) { if (!PermissionsEx.getUser(target).inGroup("Sup")) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group set Sup"); commandsender.sendMessage("§6Der Spieler " + target.getName() + " §6wurde zum Supporter ernnant!"); target.sendMessage("§6Du wurdest von " + commandSender.getName() + " §6zum Supporter ernannt!"); return true; }else{ commandSender.sendMessage("§6Der Spieler ist bereits ein Supporter"); return false; } } else { commandSender.sendMessage("§6Der Spieler§c " + args[0] + "§6 ist nicht Online"); return false; } } else { commandSender.sendMessage("§6Bitte gebe einen Spielernamen an!"); return false; } } if (cmd.getName().equalsIgnoreCase("rsupporter")) { if (args.length == 1) { Player target = Bukkit.getPlayer(args[0]); if (target !=null) { if (PermissionsEx.getUser(target).inGroup("Sup")) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "pex user "+args[0]+" group remove Sup"); commandSender.sendMessage("§6Der Spieler " + target.getName() + " §6wurde als Supporter entfernt!"); target.sendMessage("§6Du wurdest von " + commandSender.getName() + " §6als Supporter entfernt!"); return true; } else { commandSender.sendMessage("§6Der Spieler§c " + args[0] + "§6 ist kein Supporter"); return false; } } else { commandSender.sendMessage("§6Der Spieler§c " + args[0] + "§6 ist nicht Online"); return false; } } else { commandSender.sendMessage(" §6Bitte gebe einen Spielernamen an!"); return false; } } }else { commandSender.sendMessage(" §6Du hast nicht die benötigte Berechtigung für diesen Befehl!"); return false; } return false; } Edit: Versuche beim Programmieren deine Variablen und deine Funktionen zu ordnen. Stell dir immer die Frage: Was will ich machen? Mit wem will ich es machen? Was kann schief gehen? In diesem Fall möchtest du nur mit zwei Instanzen der Player-Klasse arbeiten, dem Sender des Commands und dem "Ziel". Also legst du diese Variablen so früh wie Möglich fest und arbeitest darauf hin nur noch mit deiesen, bis ihre Aufgabe erfüllt ist. Das ist der Fall wenn der Command sSupporter oder supporter ausgeführt wurde. Edited May 28, 2016 by Derya001 Link to comment Share on other sites More sharing options...
Joey Posted May 28, 2016 Share Posted May 28, 2016 Mal 2 kleine Anmerkungen: 1. Wenn du eh schon die PermEx API nutzt, kannst du das doch mit dem dispatchCommand lassen und direkt die Methoden der API nutzen oder ? 2. Player target = Bukkit.getPlayer(args[0]); Vielleicht solltest du hier nen OfflinePlayer nehmen, wäre ja blöd, wenn du nur Supporter rausschmeißen kannst, wenn sie online sind. 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