--- a/net/minecraft/world/level/block/LightningRodBlock.java +++ b/net/minecraft/world/level/block/LightningRodBlock.java @@ -32,6 +32,11 @@ import net.minecraft.world.phys.MovingObjectPositionBlock; import net.minecraft.world.phys.Vec3D; +// CraftBukkit start +import org.bukkit.craftbukkit.block.CraftBlock; +import org.bukkit.event.block.BlockRedstoneEvent; +// CraftBukkit end + public class LightningRodBlock extends RodBlock implements IBlockWaterlogged { public static final BlockStateBoolean WATERLOGGED = BlockProperties.WATERLOGGED; @@ -78,6 +83,18 @@ } public void onLightningStrike(IBlockData iblockdata, World world, BlockPosition blockposition) { + // CraftBukkit start + boolean powered = iblockdata.getValue(LightningRodBlock.POWERED); + int old = (powered) ? 15 : 0; + int current = (!powered) ? 15 : 0; + + BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(CraftBlock.at(world, blockposition), old, current); + world.getCraftServer().getPluginManager().callEvent(eventRedstone); + + if (eventRedstone.getNewCurrent() <= 0) { + return; + } + // CraftBukkit end world.setBlock(blockposition, (IBlockData) iblockdata.setValue(LightningRodBlock.POWERED, true), 3); this.updateNeighbours(iblockdata, world, blockposition); world.scheduleTick(blockposition, (Block) this, 8); @@ -134,7 +151,7 @@ Entity entity = iprojectile.getOwner(); entitylightning.setCause(entity instanceof EntityPlayer ? (EntityPlayer) entity : null); - world.addFreshEntity(entitylightning); + ((WorldServer) world).strikeLightning(entitylightning, org.bukkit.event.weather.LightningStrikeEvent.Cause.TRIDENT); // CraftBukkit world.playSound((EntityHuman) null, blockposition, SoundEffects.TRIDENT_THUNDER, SoundCategory.WEATHER, 5.0F, 1.0F); } }