Browse Source

Fix exception thrown when plants fake grow at max world height.

t00thpick1 4 năm trước cách đây
mục cha
commit
e0d85f842b

+ 9 - 3
src/main/java/com/gmail/nossr50/listeners/BlockListener.java

@@ -253,12 +253,18 @@ public class BlockListener implements Listener {
     @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
     public void onBlockGrow(BlockGrowEvent event)
     {
+        Block block = event.getBlock();
+        World world = block.getWorld();
+
         /* WORLD BLACKLIST CHECK */
-        if(WorldBlacklist.isWorldBlacklisted(event.getBlock().getWorld()))
+        if(WorldBlacklist.isWorldBlacklisted(world))
             return;
 
-        BlockState blockState = event.getBlock().getState();
-        mcMMO.getPlaceStore().setFalse(blockState);
+        // Minecraft is dumb, the events still throw when a plant "grows" higher than the max block height.  Even though no new block is created
+        if (block.getY() >= world.getMaxHeight())
+            return;
+
+        mcMMO.getPlaceStore().setFalse(block);
     }
 
     /**

+ 1 - 1
src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java

@@ -82,7 +82,7 @@ public class BitSetChunkStore implements ChunkStore, Serializable {
 
     private int coordToIndex(int x, int y, int z) {
         if (x < 0 || x >= 16 || y < 0 || y >= worldHeight || z < 0 || z >= 16)
-            throw new IndexOutOfBoundsException();
+            throw new IndexOutOfBoundsException(String.format("x: %d y: %d z: %d World Height: %d", x, y, z, worldHeight));
         return (z * 16 + x) + (256 * y);
     }