SPIGOT-7137: StructureGrowEvent isFromBonemeal and getPlayer have incorrect values

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot 2022-08-14 10:54:23 +10:00
parent 5fa8a6d631
commit 8b2749a446

View File

@ -21,30 +21,33 @@
protected BlockSapling(WorldGenTreeProvider worldgentreeprovider, BlockBase.Info blockbase_info) { protected BlockSapling(WorldGenTreeProvider worldgentreeprovider, BlockBase.Info blockbase_info) {
super(blockbase_info); super(blockbase_info);
@@ -44,7 +52,30 @@ @@ -44,7 +52,32 @@
if ((Integer) iblockdata.getValue(BlockSapling.STAGE) == 0) { if ((Integer) iblockdata.getValue(BlockSapling.STAGE) == 0) {
worldserver.setBlock(blockposition, (IBlockData) iblockdata.cycle(BlockSapling.STAGE), 4); worldserver.setBlock(blockposition, (IBlockData) iblockdata.cycle(BlockSapling.STAGE), 4);
} else { } else {
- this.treeGrower.growTree(worldserver, worldserver.getChunkSource().getGenerator(), blockposition, iblockdata, randomsource);
+ // CraftBukkit start + // CraftBukkit start
+ worldserver.captureTreeGeneration = true; + if (worldserver.captureTreeGeneration) {
+ // CraftBukkit end + this.treeGrower.growTree(worldserver, worldserver.getChunkSource().getGenerator(), blockposition, iblockdata, randomsource);
this.treeGrower.growTree(worldserver, worldserver.getChunkSource().getGenerator(), blockposition, iblockdata, randomsource); + } else {
+ // CraftBukkit start + worldserver.captureTreeGeneration = true;
+ worldserver.captureTreeGeneration = false; + this.treeGrower.growTree(worldserver, worldserver.getChunkSource().getGenerator(), blockposition, iblockdata, randomsource);
+ if (worldserver.capturedBlockStates.size() > 0) { + worldserver.captureTreeGeneration = false;
+ TreeType treeType = BlockSapling.treeType; + if (worldserver.capturedBlockStates.size() > 0) {
+ BlockSapling.treeType = null; + TreeType treeType = BlockSapling.treeType;
+ Location location = new Location(worldserver.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); + BlockSapling.treeType = null;
+ java.util.List<BlockState> blocks = new java.util.ArrayList<>(worldserver.capturedBlockStates.values()); + Location location = new Location(worldserver.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ());
+ worldserver.capturedBlockStates.clear(); + java.util.List<BlockState> blocks = new java.util.ArrayList<>(worldserver.capturedBlockStates.values());
+ StructureGrowEvent event = null; + worldserver.capturedBlockStates.clear();
+ if (treeType != null) { + StructureGrowEvent event = null;
+ event = new StructureGrowEvent(location, treeType, false, null, blocks); + if (treeType != null) {
+ org.bukkit.Bukkit.getPluginManager().callEvent(event); + event = new StructureGrowEvent(location, treeType, false, null, blocks);
+ } + org.bukkit.Bukkit.getPluginManager().callEvent(event);
+ if (event == null || !event.isCancelled()) { + }
+ for (BlockState blockstate : blocks) { + if (event == null || !event.isCancelled()) {
+ blockstate.update(true); + for (BlockState blockstate : blocks) {
+ blockstate.update(true);
+ }
+ } + }
+ } + }
+ } + }