From c6effafca83abf30b1dc0d4ac56adcbd8ef5aa83 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Thu, 8 Nov 2018 05:37:12 +0000 Subject: [PATCH] Extend BlockStateListPopulator extends BlockStateListPopulator to suppport checking block types in the physical world it's representing, allowing for blocks making modifications to the world to maintain proper state. --- .../0406-Extend-BlockStateListPopulator.patch | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Spigot-Server-Patches/0406-Extend-BlockStateListPopulator.patch diff --git a/Spigot-Server-Patches/0406-Extend-BlockStateListPopulator.patch b/Spigot-Server-Patches/0406-Extend-BlockStateListPopulator.patch new file mode 100644 index 000000000..36d60209c --- /dev/null +++ b/Spigot-Server-Patches/0406-Extend-BlockStateListPopulator.patch @@ -0,0 +1,61 @@ +From f63c14ecabe179632247452f7f7e8e97c141dfc7 Mon Sep 17 00:00:00 2001 +From: Shane Freeder +Date: Thu, 8 Nov 2018 04:53:00 +0000 +Subject: [PATCH] Extend BlockStateListPopulator + +extends BlockStateListPopulator to suppport checking block types in the +physical world it's representing, allowing for blocks making modifications +to the world to maintain proper state. + +diff --git a/src/main/java/net/minecraft/server/BlockSponge.java b/src/main/java/net/minecraft/server/BlockSponge.java +index 987af9c3de..6e52d46952 100644 +--- a/src/main/java/net/minecraft/server/BlockSponge.java ++++ b/src/main/java/net/minecraft/server/BlockSponge.java +@@ -68,7 +68,7 @@ public class BlockSponge extends Block { + linkedlist.add(new Tuple(blockposition2, Integer.valueOf(j + 1))); + } + } else if (material == Material.WATER_PLANT || material == Material.REPLACEABLE_WATER_PLANT) { +- // iblockdata.a(world, blockposition2, 0); ++ iblockdata.a(blockList, blockposition2, 0); // Paper + blockList.setTypeAndData(blockposition2, Blocks.AIR.getBlockData(), 3); // CraftBukkit + ++i; + if (j < 6) { +@@ -96,12 +96,14 @@ public class BlockSponge extends Block { + + for (CraftBlockState block : blocks) { + BlockPosition blockposition2 = new BlockPosition(block.getX(), block.getY(), block.getZ()); ++ /* // Paper start + IBlockData iblockdata = world.getType(blockposition2); + Material material = iblockdata.getMaterial(); + + if (material == Material.WATER_PLANT || material == Material.REPLACEABLE_WATER_PLANT) { + iblockdata.a(world, blockposition2, 0); + } ++ */ // Paper end + + world.setTypeAndData(blockposition2, block.getHandle(), block.getFlag()); + } +diff --git a/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java b/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java +index 165843ddfe..c5612b2f43 100644 +--- a/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java +@@ -45,4 +45,16 @@ public class BlockStateListPopulator extends DummyGeneratorAccess { + public World getWorld() { + return world; + } ++ ++ // Paper start ++ @Override ++ public IBlockData getType(BlockPosition bp) { ++ CraftBlockState craftState = list.get(bp); ++ if (craftState != null) { ++ return craftState.getHandle(); ++ } else { ++ return world.getType(bp); ++ } ++ } ++ // paper end + } +-- +2.19.1 +