aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0376-Limit-lightning-strike-effect-distance.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0376-Limit-lightning-strike-effect-distance.patch')
-rw-r--r--Spigot-Server-Patches/0376-Limit-lightning-strike-effect-distance.patch86
1 files changed, 86 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0376-Limit-lightning-strike-effect-distance.patch b/Spigot-Server-Patches/0376-Limit-lightning-strike-effect-distance.patch
new file mode 100644
index 0000000000..6e9d3b7540
--- /dev/null
+++ b/Spigot-Server-Patches/0376-Limit-lightning-strike-effect-distance.patch
@@ -0,0 +1,86 @@
+From baf45e6afa85406637c126b82ac06e48a949e18f Mon Sep 17 00:00:00 2001
+From: Trigary <[email protected]>
+Date: Fri, 14 Sep 2018 17:42:08 +0200
+Subject: [PATCH] Limit lightning strike effect distance
+
+
+diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+index 869bf8a9f9..2a912286b2 100644
+--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
++++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+@@ -246,6 +246,28 @@ public class PaperWorldConfig {
+ skeleHorseSpawnChance = 0.01D; // Vanilla value
+ }
+ }
++
++ public double sqrMaxThunderDistance;
++ public double sqrMaxLightningImpactSoundDistance;
++ public double maxLightningFlashDistance;
++ private void lightningStrikeDistanceLimit() {
++ sqrMaxThunderDistance = getInt("lightning-strike-distance-limit.sound", -1);
++ if (sqrMaxThunderDistance > 0) {
++ sqrMaxThunderDistance *= sqrMaxThunderDistance;
++ }
++
++ sqrMaxLightningImpactSoundDistance = getInt("lightning-strike-distance-limit.impact-sound", -1);
++ if (sqrMaxLightningImpactSoundDistance < 0) {
++ sqrMaxLightningImpactSoundDistance = 32 * 32; //Vanilla value
++ } else {
++ sqrMaxLightningImpactSoundDistance *= sqrMaxLightningImpactSoundDistance;
++ }
++
++ maxLightningFlashDistance = getInt("lightning-strike-distance-limit.flash", -1);
++ if (maxLightningFlashDistance < 0) {
++ maxLightningFlashDistance = 512; // Vanilla value
++ }
++ }
+
+ public boolean firePhysicsEventForRedstone = false;
+ private void firePhysicsEventForRedstone() {
+diff --git a/src/main/java/net/minecraft/server/EntityLightning.java b/src/main/java/net/minecraft/server/EntityLightning.java
+index 7781babf51..50f6200095 100644
+--- a/src/main/java/net/minecraft/server/EntityLightning.java
++++ b/src/main/java/net/minecraft/server/EntityLightning.java
+@@ -60,6 +60,17 @@ public class EntityLightning extends EntityWeather {
+ double deltaX = this.locX - player.locX;
+ double deltaZ = this.locZ - player.locZ;
+ double distanceSquared = deltaX * deltaX + deltaZ * deltaZ;
++ // Paper start - Limit lightning strike effect distance
++ if (distanceSquared <= this.world.paperConfig.sqrMaxLightningImpactSoundDistance) {
++ player.playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect(SoundEffects.ENTITY_LIGHTNING_BOLT_IMPACT,
++ SoundCategory.WEATHER, this.locX, this.locY, this.locZ, 2.0f, 0.5F + this.random.nextFloat() * 0.2F));
++ }
++
++ if (world.paperConfig.sqrMaxThunderDistance != -1 && distanceSquared >= world.paperConfig.sqrMaxThunderDistance) {
++ continue;
++ }
++
++ // Paper end
+ if (distanceSquared > viewDistance * viewDistance) {
+ double deltaLength = Math.sqrt(distanceSquared);
+ double relativeX = player.locX + (deltaX / deltaLength) * viewDistance;
+@@ -70,7 +81,7 @@ public class EntityLightning extends EntityWeather {
+ }
+ }
+ // CraftBukkit end
+- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_LIGHTNING_BOLT_IMPACT, SoundCategory.WEATHER, 2.0F, 0.5F + this.random.nextFloat() * 0.2F);
++ //this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_LIGHTNING_BOLT_IMPACT, SoundCategory.WEATHER, 2.0f, 0.5F + this.random.nextFloat() * 0.2F); // Paper - Limit lightning strike effect distance (the packet is now sent from inside the loop)
+ }
+
+ --this.lifeTicks;
+diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
+index e71a405807..53e7834cca 100644
+--- a/src/main/java/net/minecraft/server/WorldServer.java
++++ b/src/main/java/net/minecraft/server/WorldServer.java
+@@ -1065,7 +1065,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
+ }
+ // CraftBukkit end
+ if (super.strikeLightning(entity)) {
+- this.server.getPlayerList().sendPacketNearby((EntityHuman) null, entity.locX, entity.locY, entity.locZ, 512.0D, this, new PacketPlayOutSpawnEntityWeather(entity)); // CraftBukkit - Use dimension, // Paper - use world instead of dimension
++ this.server.getPlayerList().sendPacketNearby((EntityHuman) null, entity.locX, entity.locY, entity.locZ, this.paperConfig.maxLightningFlashDistance, this, new PacketPlayOutSpawnEntityWeather(entity)); // CraftBukkit - Use dimension, // Paper - use world instead of dimension, limit lightning strike effect distance
+ return true;
+ } else {
+ return false;
+--
+2.21.0
+