Henrik Schumacher Posted November 2, 2016 Share Posted November 2, 2016 Ich habe mich ran gesetzt und versucht eine BannGUI Plugin zu programmieren. Ich habe eine onCommand Methode erstellt die Überprüfen soll ob der Spieler /b [Spieler] eingeben hat. Diese erstellt dann ein Inventar "admin" mit Items drinne. Dann habe ich in dieser Methode den Spieler "victim" zum args[0] gemacht: Player victim = Bukkit.getPlayer(args[0]); . Das hat auch alles funktioniert. Danach habe ich eine InventoryClickEvent Methode erstellt. Ich habe die Items die ich im Inventar "admin" da eingetragen um wenn auf ein bestimmtes Item geklickt wird eine Nachricht oder etwas anderes Auszuführen. Nun möchte ich aber in dieser Methode den Spieler "victim" eine Nachricht schicken da er aber in der onCommand Methode gecastet ist geht das nicht. Habt ihr ne Idee wie ich den Spieler victim also args[0] in die InventoryClickEvent Methode bekomme? Sorry für den langen Text Link to comment Share on other sites More sharing options...
Joey Posted November 2, 2016 Share Posted November 2, 2016 Theoretisch könntest du eine HashMap anlegen und dort den Namen des Spieler angeben (Als Key nimmst du einfach den Admin der das Gui öffnet), dann holst du dir den Namen in dem InventoryClickEvent und castest ihn als Player. Link to comment Share on other sites More sharing options...
Henrik Schumacher Posted November 2, 2016 Author Share Posted November 2, 2016 Könntest du mir einen Beispiel Code machen? Kenne mich mit HashMaps nicht aus Link to comment Share on other sites More sharing options...
Joey Posted November 2, 2016 Share Posted November 2, 2016 Als erstes erstellst du ne HashMap public HashMap<String,String> Ban = new HashMap<String,String>(); Dann fügst du wenn der Admin /b [Spieler] macht Ban.put("Hier der Name des Admins", "Hier der Name des Spielers"); den Spieler Namen in die HashMap. Als Key nutzt du den Admin Name (Damit du A den Spieler Namen wiederbekommst und B mehrere Leute gleichzeitig /b [Spieler] nutzen können) In dem InventoryClickEvent kannst du dir dann den Spielernamen so wieder holen: String playername = Ban.get("Hier der Name des Admins"); Wenn du den wieder zum Player casten möchtest, vergess nicht, vorher abzufragen ob der Spieler noch on ist, damit es keine Fehler gibt, falls der offline geht Am Ende kannst du den Eintrag clearen Ban.remove("Hier der Name des Admins"); edit: Ka warum der Code Editor HTML als Syntax genommen hat, sieht jetzt ein bisschen blöd aus Link to comment Share on other sites More sharing options...
Henrik Schumacher Posted November 2, 2016 Author Share Posted November 2, 2016 Ich hab jetzt das hier: public HashMap<Player, Player> victim = new HashMap<Player, Player>(); @EventHandler public void onClick(InventoryClickEvent e){ Player p = (Player) e.getWhoClicked(); Player v = (Player) victim.get(p.getName()); if(e.getInventory().getTitle().equals("§cBannGUI")){ e.setCancelled(true); public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){ Player p = (Player)sender; Player v = Bukkit.getPlayer(args[0]); victim.put(p.getPlayer(), v.getPlayer()); if(cmd.getName().equalsIgnoreCase("b")){ dazwischen ist natürlich was. Stimmt das so? Link to comment Share on other sites More sharing options...
Joey Posted November 2, 2016 Share Posted November 2, 2016 Ich würde immer nen String benutzen, da es zu Fehlern kommt, wenn der Player offline geht und du ihn dann aus der HashMap nutzt. Nur als kleine Anmerkung Mach bei deiner onClick Methode erst die Abfrage if(e.getInventory().getTitle().equals("§cBannGUI")){ und dann deklarier Player v, ansonsten sucht er immer, wenn jemand in seinem Inventar rumklickt nen Spieler in der HashMap. Genau das gleiche in der onCommand Methode, so würdest du immer jemanden in die HashMap packen (Egal ob er /b oder einen anderen registrierten cmd benutzt ). Außerdem überprüfst du nicht ob der Spieler online ist, ändre das mal: if (Bukkit.getPlayer(player) != null){ //Spieler ist online Player v = Bukkit.getPlayer(args[0]); }else{ //Spieler ist offline } Link to comment Share on other sites More sharing options...
Henrik Schumacher Posted November 2, 2016 Author Share Posted November 2, 2016 Funktioniert immer noch nicht Link to comment Share on other sites More sharing options...
Henrik Schumacher Posted November 2, 2016 Author Share Posted November 2, 2016 (edited) . Edited November 2, 2016 by Henrik Schumacher Link to comment Share on other sites More sharing options...
Joey Posted November 2, 2016 Share Posted November 2, 2016 Was funktioniert denn nicht? Link to comment Share on other sites More sharing options...
Henrik Schumacher Posted November 2, 2016 Author Share Posted November 2, 2016 Wenn ich jetzt /b DoktorMedRasen eingebe öffnet sich das Inventar aber wenn ich ein Item anklicke passiert nichts und er nimmt es einfach raus Link to comment Share on other sites More sharing options...
Joey Posted November 2, 2016 Share Posted November 2, 2016 Dann muss dass ja was mit deiner onClick Methode zu tun haben. Pack mal ein paar debug Outputs in deinen code Link to comment Share on other sites More sharing options...
Henrik Schumacher Posted November 2, 2016 Author Share Posted November 2, 2016 Hast du Skype? Das geht vllt schneller mit Fehler finden PS: Das mit dem Code einfügen habe ich jetzt gefunden Link to comment Share on other sites More sharing options...
Joey Posted November 2, 2016 Share Posted November 2, 2016 Mein Skype Name steht bei meinem Profil Link to comment Share on other sites More sharing options...
Henrik Schumacher Posted November 2, 2016 Author Share Posted November 2, 2016 [18:58:54 ERROR]: Could not pass event InventoryClickEvent to Netzwerk v1.0.1 org.bukkit.event.EventException at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[craftbukkit.jar:git-Bukkit-e1ebe52] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-e1ebe52] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-e1ebe52] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-e1ebe52] at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1564) [craftbukkit.jar:git-Bukkit-e1ebe52] at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:31) [craftbukkit.jar:git-Bukkit-e1ebe52] at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:9) [craftbukkit.jar:git-Bukkit-e1ebe52] at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit.jar:git-Bukkit-e1ebe52] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_77] at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_77] at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [craftbukkit.jar:git-Bukkit-e1ebe52] at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:673) [craftbukkit.jar:git-Bukkit-e1ebe52] at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit.jar:git-Bukkit-e1ebe52] at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:629) [craftbukkit.jar:git-Bukkit-e1ebe52] at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:537) [craftbukkit.jar:git-Bukkit-e1ebe52] at java.lang.Thread.run(Unknown Source) [?:1.8.0_77] Caused by: java.lang.IllegalArgumentException: Name cannot be null at org.apache.commons.lang.Validate.notNull(Validate.java:192) ~[craftbukkit.jar:git-Bukkit-e1ebe52] at org.bukkit.craftbukkit.v1_8_R3.CraftServer.getPlayer(CraftServer.java:388) ~[craftbukkit.jar:git-Bukkit-e1ebe52] at org.bukkit.Bukkit.getPlayer(Bukkit.java:383) ~[craftbukkit.jar:git-Bukkit-e1ebe52] at Netzwerk.BannGUI.BGUImain.onClick(BGUImain.java:26) ~[?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_77] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_77] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:300) ~[craftbukkit.jar:git-Bukkit-e1ebe52] ... 15 more > 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