I'm reporting this under SC rather than SF as most of the relevant logic (MixinWorldServer, etc...) appears in SC. Sorry if this is incorrect!
Neither are technically needed to reproduce, but provide a useful visual indicator of the problem.
All test plugins present in a SpongeForge development environment
I originally reported this as MinecraftPortCentral/GriefPrevention#896, but have been able to isolate this to just Sponge.
When a plugin subscribes to ChangeBlockEvent (and so ShouldFire.CHANGE_BLOCK_EVENT is true), tile entities are present within the world after changing the block state (while they would be if CHANGE_BLOCK_EVENT was false).
As a result, blocks which perform logic within neighbour updates do not see a tile at the changed position, and so may end up in an incorrect state.
ChangeBlockEvent, or some subclass.BlockFurnace.setState, and configure it to log world.getTileEntity(blockPos).This can be seen more visually by placing a wired modem next to a furnace. Any time the furnace starts or stops smelting, the wired modems would deactivate as the tile is not present when receiving neighbour updates, and so no peripheral is present.
Can confirm this fixes the problem, thank you!
Can confirm this fixes the problem, thank you!
Thank you for the detailed report! It really did make finding the bug all that much easier, knowing where to look pretty much exactly!
Most helpful comment
Can confirm this fixes the problem, thank you!