Added block handler destroy/place listener

This commit is contained in:
TheMode 2021-05-29 01:05:12 +02:00
parent e62a837bf0
commit 5a485a3aab

View File

@ -9,6 +9,7 @@ import net.minestom.server.event.instance.InstanceChunkUnloadEvent;
import net.minestom.server.event.player.PlayerBlockBreakEvent; import net.minestom.server.event.player.PlayerBlockBreakEvent;
import net.minestom.server.instance.batch.ChunkGenerationBatch; import net.minestom.server.instance.batch.ChunkGenerationBatch;
import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.Block;
import net.minestom.server.instance.block.BlockHandler;
import net.minestom.server.instance.block.rule.BlockPlacementRule; import net.minestom.server.instance.block.rule.BlockPlacementRule;
import net.minestom.server.network.packet.server.play.BlockChangePacket; import net.minestom.server.network.packet.server.play.BlockChangePacket;
import net.minestom.server.network.packet.server.play.EffectPacket; import net.minestom.server.network.packet.server.play.EffectPacket;
@ -146,6 +147,9 @@ public class InstanceContainer extends Instance {
} }
setAlreadyChanged(blockPosition, block); setAlreadyChanged(blockPosition, block);
final Block previousBlock = chunk.getBlock(blockPosition);
final BlockHandler previousHandler = previousBlock.getHandler();
// Change id based on neighbors // Change id based on neighbors
block = executeBlockPlacementRule(block, blockPosition); block = executeBlockPlacementRule(block, blockPosition);
@ -157,6 +161,16 @@ public class InstanceContainer extends Instance {
// Refresh player chunk block // Refresh player chunk block
sendBlockChange(chunk, blockPosition, block); sendBlockChange(chunk, blockPosition, block);
if (previousHandler != null) {
// Previous destroy
previousHandler.onDestroy(this, previousBlock, blockPosition);
}
final BlockHandler handler = block.getHandler();
if (handler != null) {
// New placement
handler.onPlace(this, block, blockPosition);
}
} }
} }