Frage von 12fragezeichen, 52

Gamemode "Bug oder Fehler" bei AsyncPlayerChatEvent, Weiß jmd. eine Lösung?

Hallo, Ich habe mit dem AsyncPlayerChatEvent versucht, dass bei der nachricht "gm" der Creative Mode Aktiviert wird und wieder deaktivert wird. Dazu haben ich folgenden Code verwendet:

@EventHandler
public void gamemode(AsyncPlayerChatEvent e) {
    if (e.getMessage().startsWith("gm")) {
        if (e.getPlayer().getGameMode() == GameMode.SURVIVAL) {
            e.getPlayer().setGameMode(GameMode.CREATIVE);
        } else {
            e.getPlayer().setGameMode(GameMode.SURVIVAL);
        }
    }
}

Das Problem: Der Gamemode wird nur "halb" geändert. Ich hab noch das Survival Inventar aber kann fliegen, mit Mausrad Blöcke nehmen, Blöcke sofort zerstören. Wenn ich aber Blöcke setze, werden sie aus dem Inventar abgezogen Weiß jemand wie man diesen Bug beheben kann? Schonmal Danke im voraus!

Antwort
von Atomtoasty, 43

Du hast soweit alles richtig programmiert, das müsste an einem anderen Plugin liegen.

Ansonsten Versuch das Event über 'PlayerChangeGamemode' abzugreifen...

LG Atomsi

Kommentar von 12fragezeichen ,

Danke für deine Antwort, 

ich habe einen Testserver gemacht und dort dieses Plugin alleine laden lassen und alle Methoden außer dieser deaktiviert. Leider ist besteht immer noch das gleiche Problem :c

Das ist der log:


[XX:XX:XX] [Async Chat Thread - #15/ERROR]: Could not pass event AsyncPlayerChatEvent to XXX vXX
org.bukkit.event.EventException
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot.jar:git-Spigot-db6de12-07c3001]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-db6de12-07c3001]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot.jar:git-Spigot-db6de12-07c3001]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot.jar:git-Spigot-db6de12-07c3001]
at net.minecraft.server.v1_8_R3.PlayerConnection.chat(PlayerConnection.java:1084) [spigot.jar:git-Spigot-db6de12-07c3001]
at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1022) [spigot.jar:git-Spigot-db6de12-07c3001]
at net.minecraft.server.v1_8_R3.PacketPlayInChat$1.run(PacketPlayInChat.java:39) [spigot.jar:git-Spigot-db6de12-07c3001]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_74]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_74]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_74]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_74]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_74]
Caused by: java.lang.IllegalStateException: Asynchronous player tracker update!
at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:14) ~[spigot.jar:git-Spigot-db6de12-07c3001]
at net.minecraft.server.v1_8_R3.EntityTrackerEntry.updatePlayer(EntityTrackerEntry.java:313) ~[spigot.jar:git-Spigot-db6de12-07c3001]
at net.minecraft.server.v1_8_R3.EntityTracker.a(EntityTracker.java:207) ~[spigot.jar:git-Spigot-db6de12-07c3001]
at net.minecraft.server.v1_8_R3.EntityPlayer.B(EntityPlayer.java:1041) ~[spigot.jar:git-Spigot-db6de12-07c3001]
at net.minecraft.server.v1_8_R3.EntityPlayer.updateAbilities(EntityPlayer.java:934) ~[spigot.jar:git-Spigot-db6de12-07c3001]
at net.minecraft.server.v1_8_R3.PlayerInteractManager.setGameMode(PlayerInteractManager.java:36) ~[spigot.jar:git-Spigot-db6de12-07c3001]
at org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer.setGameMode(CraftPlayer.java:759) ~[spigot.jar:git-Spigot-db6de12-07c3001]
at xxx.xxx.xxx.xxx.xxx(main.java:217) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_74]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_74]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_74]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_74]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot.jar:git-Spigot-db6de12-07c3001]
... 11 more

Letzteres werde ich mal versuchen.

Kommentar von Atomtoasty ,

Okay... Ich kann dir noch empfehlen das ganze einfach als Befehl zu machen (/gm) da das dann sicher funktioniert... Welches Plugin soll das denn werden (weil bei einem griefplugin usw. Geht das mit /gm nicht gut...)

LG Atomsi

Kommentar von 12fragezeichen ,

Hm, des wird schwierig xD, des sieht man ja in der Konsole, du weißt, was ich damit machen will ? xD

Kommentar von Atomtoasty ,

Ja war irgendwie klar... Würdest du normal FÜR einen Server entwickeln, hätte es keinen Sinn das über ein Chat Event zu machen :D

Aber mal im Ernst, hast du Skype oder so? Weil damit hatte ich mich schonmal länger beschäftigt. Aber eher um meine APIs usw sicher gegen sowas zu machen...

Kommentar von Atomtoasty ,

*hust hust* ich will natürlich auf keinen Fall mithelfen *hust hust*

Antwort
von Actron, 23

Weißt du, was "Async" bedeutet ? Das bedeutet, dass es nicht auf dem Hauptthread (Ist sowas wie ein Prozess gaub' ich [Google hilft]), sondern auf einen eigenen, extra dafür erstellten Thread ausgeführt wird. Deshalb bekommst du auch die Fehlermeldung

Asynchronous player tracker update!

. Versuch das mal:

[...]
public void gamemode(AsyncPlayerChatEvent e)
{
gm(e.getPlayer());
}

void gm(Player p)
{
if(p.getGameMode() == GameMode.SURVIVAL)
{
p.setGameMode(GameMode.CREATIVE);
}else{
p.setGameMode(GameMode.SURVIVAL);
}
}
[...]

(Außerdem gibt es extra Foren für solche Fragen.)

Antwort
von xanonymouusx, 28

Mach mal Try/Catch um getMessage() und lass den Error broadcasten. Ich glaube das ist ein 'AsynchronPlayerTracker' oder so.

Gruß.

Kommentar von xanonymouusx ,

*AsynchronusPlayerTracker

Kommentar von 12fragezeichen ,

Wenn ich es in eine Try/ Catch "Methode bzw. Block" einbaue, bekomme ich:

 Asynchronous player tracker update!

Also, das stimmt, aber wie kann ich das fixen?

Keine passende Antwort gefunden?

Fragen Sie die Community