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

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.)

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

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

LG Atomsi

12fragezeichen 
Fragesteller
 22.03.2016, 11:28

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.

0
Atomtoasty  22.03.2016, 13:15

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

0
12fragezeichen 
Fragesteller
 22.03.2016, 20:48
@Atomtoasty

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

0
Atomtoasty  23.03.2016, 10:36

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...

0
Atomtoasty  23.03.2016, 10:36

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

0

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

Gruß.

xanonymouusx  22.03.2016, 16:37

*AsynchronusPlayerTracker

0
12fragezeichen 
Fragesteller
 22.03.2016, 20:59
@xanonymouusx

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?

0