Jump to content

Spieler von einer Methode in andere casten


Empfohlene Beiträge

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 :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

 

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

[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 zu diesem Kommentar
Auf anderen Seiten teilen

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B