ClassCastException in DoubleChest.getLocation when called on a chest block connected to two other chest blocks

    • Type: Bug
    • Resolution: Fixed
    • Priority: Minor
    • None
    • Affects Version/s: None
    • None

      Triple chests are not a feature of minecraft but can be created by irresponsible use of mcedit or similar. If you try to call DoubleChest.getLocation on the middle chest block of a triple (whether in a straight line or corner-shaped), I get the following error:

      [14:27:24 ERROR]: Could not pass event InventoryOpenEvent to LogBlock v1.94-dev-SNAPSHOT (build #258)
      org.bukkit.event.EventException
              at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:36) ~[craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callInventoryOpenEvent(CraftEventFactory.java:698) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.EntityPlayer.openContainer(EntityPlayer.java:648) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.BlockChest.interact(SourceFile:339) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.PlayerInteractManager.interact(PlayerInteractManager.java:495) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:705) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:52) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:1) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_45]
              at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_45]
              at net.minecraft.server.v1_8_R3.SystemUtils.a(SystemUtils.java:19) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:676) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:632) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:540) [craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at java.lang.Thread.run(Unknown Source) [?:1.8.0_45]
      Caused by: java.lang.ClassCastException: org.bukkit.block.DoubleChest cannot be cast to org.bukkit.block.Chest
              at org.bukkit.block.DoubleChest.getX(DoubleChest.java:40) ~[craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at org.bukkit.block.DoubleChest.getLocation(DoubleChest.java:32) ~[craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              at de.diddiz.util.BukkitUtils.getInventoryHolderType(BukkitUtils.java:207) ~[?:?]
              at de.diddiz.LogBlock.listeners.ChestAccessLogging.onInventoryOpen(ChestAccessLogging.java:61) ~[?:?]
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_45]
              at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_45]
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_45]
              at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_45]
              at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:300) ~[craftbukkit-1.8.7.jar:git-Bukkit-a03743b]
              ... 20 more
      

      The corresponding plugin code is here

      I understand that well-behaved code should not be creating these triple chests and am not asking for support for them; I am only concerned with innocent plugins that come along afterwards and try to call getLocation (and presumably others) on the chest

      See also https://github.com/LogBlock/LogBlock/issues/558 for a further example

            Assignee:
            Unassigned
            Reporter:
            Philip Cass
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: