Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Limit lightning strike effect distance
Resolves GH-1436
- Loading branch information
Showing
3 changed files
with
89 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
84 changes: 84 additions & 0 deletions
84
Spigot-Server-Patches/0393-Limit-lightning-strike-effect-distance.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
From 9562e7d3f00411e9426c18af31edd06e519a1ed3 Mon Sep 17 00:00:00 2001 | ||
From: Trigary <trigary0@gmail.com> | ||
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 93bf8c6d3..25246eac5 100644 | ||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java | ||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java | ||
@@ -237,6 +237,30 @@ public class PaperWorldConfig { | ||
skeleHorseSpawnChance = 0.01D; // Vanilla value | ||
} | ||
} | ||
+ | ||
+ public double sqrMaxLightningSoundDistance; | ||
+ public double sqrMaxLightningImpactSoundDistance; | ||
+ public double maxLightningFlashDistance; | ||
+ private void lightningStrikeDistanceLimit() { | ||
+ sqrMaxLightningSoundDistance = getInt("lightning-strike-distance-limit.sound", -1); | ||
+ if (sqrMaxLightningSoundDistance < 0) { | ||
+ sqrMaxLightningSoundDistance = Double.MAX_VALUE; | ||
+ } else { | ||
+ sqrMaxLightningSoundDistance *= sqrMaxLightningSoundDistance; | ||
+ } | ||
+ | ||
+ 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 afbe43dd3..b7e88d346 100644 | ||
--- a/src/main/java/net/minecraft/server/EntityLightning.java | ||
+++ b/src/main/java/net/minecraft/server/EntityLightning.java | ||
@@ -60,6 +60,13 @@ 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 (distanceSquared > this.world.paperConfig.sqrMaxLightningSoundDistance) continue; | ||
+ // Paper end | ||
if (distanceSquared > viewDistance * viewDistance) { | ||
double deltaLength = Math.sqrt(distanceSquared); | ||
double relativeX = player.locX + (deltaX / deltaLength) * viewDistance; | ||
@@ -70,7 +77,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 0a7648263..b41dc3a73 100644 | ||
--- a/src/main/java/net/minecraft/server/WorldServer.java | ||
+++ b/src/main/java/net/minecraft/server/WorldServer.java | ||
@@ -1087,7 +1087,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.19.0 | ||
|