lishid / OpenInv

Open anyone's inventory as a chest, real-time!
GNU General Public License v3.0
119 stars 94 forks source link

PlayerChangedWorldEvent Exception #63

Closed Kakifrucht closed 7 years ago

Kakifrucht commented 7 years ago

This has happened three times, twice directly after teleports (cannot confirm if the world was changed) and once without apparent reason. I wasn't able to reproduce the issue anymore after that, even trying some more scenarios out. In the teleport cases two players were teleported on the same tick.

2017-02-12 16:05:35 [ERROR] Could not pass event PlayerChangedWorldEvent to OpenInv v3.1.1
org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot.jar:git-Spigot-65a0347-a552117]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-65a0347-a552117]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot.jar:git-Spigot-65a0347-a552117]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.PlayerList.moveToWorld(PlayerList.java:682) [spigot.jar:git-Spigot-65a0347-a552117]
    at org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer.teleport(CraftPlayer.java:506) [spigot.jar:git-Spigot-65a0347-a552117]
    at com.earth2me.essentials.Teleport.now(Teleport.java:134) [EssentialsX.jar:?]
    at com.earth2me.essentials.TimedTeleport$1DelayedTeleportTask.run(TimedTeleport.java:109) [EssentialsX.jar:?]
    at org.bukkit.craftbukkit.v1_11_R1.scheduler.CraftTask.run(CraftTask.java:71) [spigot.jar:git-Spigot-65a0347-a552117]
    at org.bukkit.craftbukkit.v1_11_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:353) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:738) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot.jar:git-Spigot-65a0347-a552117]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]
Caused by: java.util.ConcurrentModificationException
    at java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1211) ~[?:1.8.0_101]
    at java.util.TreeMap$EntryIterator.next(TreeMap.java:1247) ~[?:1.8.0_101]
    at java.util.TreeMap$EntryIterator.next(TreeMap.java:1242) ~[?:1.8.0_101]
    at com.lishid.openinv.util.Cache.lazyCheck(Cache.java:137) ~[?:?]
    at com.google.common.collect.AbstractMapBasedMultimap$Itr.next(AbstractMapBasedMultimap.java:1145) ~[spigot.jar:git-Spigot-65a0347-a552117]
    at com.lishid.openinv.util.Cache.containsKey(Cache.java:87) ~[?:?]
    at com.lishid.openinv.OpenInv.changeWorld(OpenInv.java:630) ~[?:?]
    at com.lishid.openinv.listeners.PlayerListener.onWorldChange(PlayerListener.java:53) ~[?:?]
    at sun.reflect.GeneratedMethodAccessor415.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_101]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_101]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot.jar:git-Spigot-65a0347-a552117]
    ... 14 more

After it happened I reloaded the plugin and the issue hasn't occurred since then, however this stacktrace popped up;

2017-02-12 16:25:28 [ERROR] Error occurred while disabling OpenInv v3.1.1 (Is it up to date?)
java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) ~[?:1.8.0_101]
    at java.util.ArrayList$Itr.next(ArrayList.java:851) ~[?:1.8.0_101]
    at com.lishid.openinv.OpenInv$2.run(OpenInv.java:95) ~[?:?]
    at com.lishid.openinv.OpenInv$2.run(OpenInv.java:87) ~[?:?]
    at com.lishid.openinv.util.Cache.invalidateAll(Cache.java:123) ~[?:?]
    at com.lishid.openinv.OpenInv.onDisable(OpenInv.java:166) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:273) ~[spigot.jar:git-Spigot-65a0347-a552117]
    at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:361) [spigot.jar:git-Spigot-65a0347-a552117]
    at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:424) [spigot.jar:git-Spigot-65a0347-a552117]
    at com.rylinaux.plugman.util.PluginUtil.unload(PluginUtil.java:415) [PlugMan.jar:?]
    at com.rylinaux.plugman.util.PluginUtil.reload(PluginUtil.java:376) [PlugMan.jar:?]
    at com.rylinaux.plugman.command.ReloadCommand.execute(ReloadCommand.java:122) [PlugMan.jar:?]
    at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:95) [PlugMan.jar:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) [spigot.jar:git-Spigot-65a0347-a552117]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [spigot.jar:git-Spigot-65a0347-a552117]
    at org.bukkit.craftbukkit.v1_11_R1.CraftServer.dispatchCommand(CraftServer.java:650) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.PlayerConnection.handleCommand(PlayerConnection.java:1344) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1179) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-65a0347-a552117]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_101]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_101]
    at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot.jar:git-Spigot-65a0347-a552117]
    at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot.jar:git-Spigot-65a0347-a552117]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]
Jikoo commented 7 years ago

Ah, whoops, the cache isn't synchronized. Probably happens when a lookup occurs right before world change/shutdown. I'll take a crack at it tomorrow, unfortunately I didn't see the ticket until past bedtime.