From 94fc60328ebb8efe82bade3c1693d51852bc4b0b Mon Sep 17 00:00:00 2001
From: drXor <mcyoungsota@gmail.com>
Date: Sun, 23 Feb 2014 16:16:59 -0400
Subject: [PATCH] Implement Silenceable Lightning API


diff --git a/src/main/java/net/minecraft/world/entity/EntityLightning.java b/src/main/java/net/minecraft/world/entity/EntityLightning.java
index 95985a722..9170b85e3 100644
--- a/src/main/java/net/minecraft/world/entity/EntityLightning.java
+++ b/src/main/java/net/minecraft/world/entity/EntityLightning.java
@@ -48,6 +48,7 @@ public class EntityLightning extends Entity {
     private EntityPlayer cause;
     private final Set<Entity> hitEntities = Sets.newHashSet();
     private int blocksSetOnFire;
+    public boolean isSilent = false; // Spigot
 
     public EntityLightning(EntityTypes<? extends EntityLightning> entitytypes, World world) {
         super(entitytypes, world);
@@ -88,7 +89,7 @@ public class EntityLightning extends Entity {
     @Override
     public void tick() {
         super.tick();
-        if (this.life == 2) {
+        if (!isSilent && this.life == 2) { // Spigot
             if (this.level.isClientSide()) {
                 this.level.playLocalSound(this.getX(), this.getY(), this.getZ(), SoundEffects.LIGHTNING_BOLT_THUNDER, SoundCategory.WEATHER, 10000.0F, 0.8F + this.random.nextFloat() * 0.2F, false);
                 this.level.playLocalSound(this.getX(), this.getY(), this.getZ(), SoundEffects.LIGHTNING_BOLT_IMPACT, SoundCategory.WEATHER, 2.0F, 0.5F + this.random.nextFloat() * 0.2F, false);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 6912ece1e..ba8c02f65 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -1921,6 +1921,26 @@ public class CraftWorld extends CraftRegionAccessor implements World {
     // Spigot start
     private final org.bukkit.World.Spigot spigot = new org.bukkit.World.Spigot()
     {
+
+        @Override
+        public LightningStrike strikeLightning(Location loc, boolean isSilent)
+        {
+            EntityLightning lightning = EntityTypes.LIGHTNING_BOLT.create( world );
+            lightning.moveTo( loc.getX(), loc.getY(), loc.getZ() );
+            lightning.isSilent = isSilent;
+            world.strikeLightning( lightning );
+            return (LightningStrike) lightning.getBukkitEntity();
+        }
+
+        @Override
+        public LightningStrike strikeLightningEffect(Location loc, boolean isSilent)
+        {
+            EntityLightning lightning = EntityTypes.LIGHTNING_BOLT.create( world );
+            lightning.moveTo( loc.getX(), loc.getY(), loc.getZ() );
+            lightning.visualOnly = true;
+            lightning.isSilent = isSilent;
+            return (LightningStrike) lightning.getBukkitEntity();
+        }
     };
 
     public org.bukkit.World.Spigot spigot()
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
index e63833dcd..8819f7684 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
@@ -33,6 +33,11 @@ public class CraftLightningStrike extends CraftEntity implements LightningStrike
     // Spigot start
     private final LightningStrike.Spigot spigot = new LightningStrike.Spigot() {
 
+        @Override
+        public boolean isSilent()
+        {
+            return getHandle().isSilent;
+        }
     };
 
     @Override
-- 
2.34.1