--- a/net/minecraft/world/level/block/SculkSensorBlock.java +++ b/net/minecraft/world/level/block/SculkSensorBlock.java @@ -38,6 +38,11 @@ import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShapeCollision; +// CraftBukkit start +import org.bukkit.craftbukkit.block.CraftBlock; +import org.bukkit.event.block.BlockRedstoneEvent; +// CraftBukkit end + public class SculkSensorBlock extends BlockTileEntity implements IBlockWaterlogged { public static final int ACTIVE_TICKS = 40; @@ -216,6 +221,15 @@ } public static void deactivate(World world, BlockPosition blockposition, IBlockData iblockdata) { + // CraftBukkit start + BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(CraftBlock.at(world, blockposition), iblockdata.getValue(SculkSensorBlock.POWER), 0); + world.getCraftServer().getPluginManager().callEvent(eventRedstone); + + if (eventRedstone.getNewCurrent() > 0) { + world.setBlock(blockposition, iblockdata.setValue(SculkSensorBlock.POWER, eventRedstone.getNewCurrent()), 3); + return; + } + // CraftBukkit end world.setBlock(blockposition, (IBlockData) ((IBlockData) iblockdata.setValue(SculkSensorBlock.PHASE, SculkSensorPhase.COOLDOWN)).setValue(SculkSensorBlock.POWER, 0), 3); world.scheduleTick(new BlockPosition(blockposition), iblockdata.getBlock(), 1); if (!(Boolean) iblockdata.getValue(SculkSensorBlock.WATERLOGGED)) { @@ -226,6 +240,15 @@ } public static void activate(World world, BlockPosition blockposition, IBlockData iblockdata, int i) { + // CraftBukkit start + BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(CraftBlock.at(world, blockposition), iblockdata.getValue(SculkSensorBlock.POWER), i); + world.getCraftServer().getPluginManager().callEvent(eventRedstone); + + if (eventRedstone.getNewCurrent() <= 0) { + return; + } + i = eventRedstone.getNewCurrent(); + // CraftBukkit end world.setBlock(blockposition, (IBlockData) ((IBlockData) iblockdata.setValue(SculkSensorBlock.PHASE, SculkSensorPhase.ACTIVE)).setValue(SculkSensorBlock.POWER, i), 3); world.scheduleTick(new BlockPosition(blockposition), iblockdata.getBlock(), 40); updateNeighbours(world, blockposition);