-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix global sound event gamerule not being respected (#8727)
- Loading branch information
1 parent
c081104
commit 8221b08
Showing
11 changed files
with
125 additions
and
69 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Jake Potrebic <jake.m.potrebic@gmail.com> | ||
Date: Tue, 31 May 2016 22:53:50 -0400 | ||
Subject: [PATCH] Fix global sound handling | ||
|
||
* Only send global sounds to same world if limiting radius | ||
* respect global sound events gamerule | ||
|
||
Co-authored-by: Evan McCarthy <evanmccarthy@outlook.com> | ||
Co-authored-by: lexikiq <noellekiq@gmail.com> | ||
Co-authored-by: Aikar <aikar@aikar.co> | ||
|
||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java | ||
index cc3a34afddac429b1ce75e54fdb284d7683a4310..90340d70d0a43987dddcd4f627ace76139f07245 100644 | ||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java | ||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java | ||
@@ -1553,7 +1553,7 @@ public class ServerLevel extends Level implements WorldGenLevel { | ||
|
||
@Override | ||
public void levelEvent(@Nullable Player player, int eventId, BlockPos pos, int data) { | ||
- this.server.getPlayerList().broadcast(player, (double) pos.getX(), (double) pos.getY(), (double) pos.getZ(), 64.0D, this.dimension(), new ClientboundLevelEventPacket(eventId, pos, data, false)); | ||
+ this.server.getPlayerList().broadcast(player, (double) pos.getX(), (double) pos.getY(), (double) pos.getZ(), 64.0D, this.dimension(), new ClientboundLevelEventPacket(eventId, pos, data, false)); // Paper - diff on change (the 64.0 distance is used as defaults for sound ranges in spigot config for ender dragon, end portal and wither) | ||
} | ||
|
||
public int getLogicalHeight() { | ||
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java | ||
index aea9366215973555de88e67310b7fbe033f45cd5..2471800014d1661c2f422e5a24f0f3b00fa838f2 100644 | ||
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java | ||
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java | ||
@@ -680,11 +680,12 @@ public class EnderDragon extends Mob implements Enemy { | ||
// CraftBukkit start - Use relative location for far away sounds | ||
// this.level().globalLevelEvent(1028, this.blockPosition(), 0); | ||
int viewDistance = ((ServerLevel) this.level()).getCraftServer().getViewDistance() * 16; | ||
- for (net.minecraft.server.level.ServerPlayer player : this.level().getServer().getPlayerList().players) { | ||
+ for (net.minecraft.server.level.ServerPlayer player : this.level().getPlayersForGlobalSoundGamerule()) { // Paper - respect global sound events gamerule | ||
double deltaX = this.getX() - player.getX(); | ||
double deltaZ = this.getZ() - player.getZ(); | ||
double distanceSquared = deltaX * deltaX + deltaZ * deltaZ; | ||
- if ( this.level().spigotConfig.dragonDeathSoundRadius > 0 && distanceSquared > this.level().spigotConfig.dragonDeathSoundRadius * this.level().spigotConfig.dragonDeathSoundRadius ) continue; // Spigot | ||
+ final double soundRadiusSquared = this.level().getGlobalSoundRangeSquared(config -> config.dragonDeathSoundRadius); // Paper - respect global sound events gamerule | ||
+ if ( !this.level().getGameRules().getBoolean(GameRules.RULE_GLOBAL_SOUND_EVENTS) && distanceSquared > soundRadiusSquared ) continue; // Spigot // Paper - respect global sound events gamerule | ||
if (distanceSquared > viewDistance * viewDistance) { | ||
double deltaLength = Math.sqrt(distanceSquared); | ||
double relativeX = player.getX() + (deltaX / deltaLength) * viewDistance; | ||
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java | ||
index 8d3f3987f2a6816752bdb2e477338d6dbdd6b7b7..14b09adeb9222600c24f3fb846ea8aee467952e6 100644 | ||
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java | ||
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java | ||
@@ -271,11 +271,12 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob | ||
// CraftBukkit start - Use relative location for far away sounds | ||
// this.level().globalLevelEvent(1023, new BlockPosition(this), 0); | ||
int viewDistance = ((ServerLevel) this.level()).getCraftServer().getViewDistance() * 16; | ||
- for (ServerPlayer player : (List<ServerPlayer>) MinecraftServer.getServer().getPlayerList().players) { | ||
+ for (ServerPlayer player : this.level().getPlayersForGlobalSoundGamerule()) { // Paper - respect global sound events gamerule | ||
double deltaX = this.getX() - player.getX(); | ||
double deltaZ = this.getZ() - player.getZ(); | ||
double distanceSquared = deltaX * deltaX + deltaZ * deltaZ; | ||
- if ( this.level().spigotConfig.witherSpawnSoundRadius > 0 && distanceSquared > this.level().spigotConfig.witherSpawnSoundRadius * this.level().spigotConfig.witherSpawnSoundRadius ) continue; // Spigot | ||
+ final double soundRadiusSquared = this.level().getGlobalSoundRangeSquared(config -> config.witherSpawnSoundRadius); // Paper - respect global sound events gamerule | ||
+ if ( !this.level().getGameRules().getBoolean(GameRules.RULE_GLOBAL_SOUND_EVENTS) && distanceSquared > soundRadiusSquared ) continue; // Spigot // Paper - respect global sound events gamerule | ||
if (distanceSquared > viewDistance * viewDistance) { | ||
double deltaLength = Math.sqrt(distanceSquared); | ||
double relativeX = player.getX() + (deltaX / deltaLength) * viewDistance; | ||
diff --git a/src/main/java/net/minecraft/world/item/EnderEyeItem.java b/src/main/java/net/minecraft/world/item/EnderEyeItem.java | ||
index 5bc68514a1e8a212e2681f06b918548c0ec565b6..1977e702f6af39ebf100c1f2f2edc2d1c4d003b0 100644 | ||
--- a/src/main/java/net/minecraft/world/item/EnderEyeItem.java | ||
+++ b/src/main/java/net/minecraft/world/item/EnderEyeItem.java | ||
@@ -64,11 +64,12 @@ public class EnderEyeItem extends Item { | ||
// world.b(1038, blockposition1.c(1, 0, 1), 0); | ||
int viewDistance = world.getCraftServer().getViewDistance() * 16; | ||
BlockPos soundPos = blockposition1.offset(1, 0, 1); | ||
- for (ServerPlayer player : world.getServer().getPlayerList().players) { | ||
+ for (ServerPlayer player : world.getPlayersForGlobalSoundGamerule()) { // Paper - respect global sound events gamerule | ||
double deltaX = soundPos.getX() - player.getX(); | ||
double deltaZ = soundPos.getZ() - player.getZ(); | ||
double distanceSquared = deltaX * deltaX + deltaZ * deltaZ; | ||
- if (world.spigotConfig.endPortalSoundRadius > 0 && distanceSquared > world.spigotConfig.endPortalSoundRadius * world.spigotConfig.endPortalSoundRadius) continue; // Spigot | ||
+ final double soundRadiusSquared = world.getGlobalSoundRangeSquared(config -> config.endPortalSoundRadius); // Paper - respect global sound events gamerule | ||
+ if (!world.getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_GLOBAL_SOUND_EVENTS) && distanceSquared > soundRadiusSquared) continue; // Spigot // Paper - respect global sound events gamerule | ||
if (distanceSquared > viewDistance * viewDistance) { | ||
double deltaLength = Math.sqrt(distanceSquared); | ||
double relativeX = player.getX() + (deltaX / deltaLength) * viewDistance; | ||
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java | ||
index f093a271cc0b5a0e1f55930d2b3b48161abc9185..cbb531c7993bd5062255564e6e6546afb948f6ed 100644 | ||
--- a/src/main/java/net/minecraft/world/level/Level.java | ||
+++ b/src/main/java/net/minecraft/world/level/Level.java | ||
@@ -1366,4 +1366,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { | ||
return ret; | ||
} | ||
// Paper end | ||
+ | ||
+ // Paper start - respect global sound events gamerule | ||
+ public List<net.minecraft.server.level.ServerPlayer> getPlayersForGlobalSoundGamerule() { | ||
+ return this.getGameRules().getBoolean(GameRules.RULE_GLOBAL_SOUND_EVENTS) ? ((ServerLevel) this).getServer().getPlayerList().players : ((ServerLevel) this).players(); | ||
+ } | ||
+ | ||
+ public double getGlobalSoundRangeSquared(java.util.function.Function<org.spigotmc.SpigotWorldConfig, Integer> rangeFunction) { | ||
+ final double range = rangeFunction.apply(this.spigotConfig); | ||
+ return range <= 0 ? 64.0 * 64.0 : range * range; // 64 is taken from default in ServerLevel#levelEvent | ||
+ } | ||
+ // Paper end - respect global sound events gamerule | ||
} |
47 changes: 0 additions & 47 deletions
47
patches/server/0102-Only-send-global-sounds-to-same-world-if-limiting-ra.patch
This file was deleted.
Oops, something went wrong.
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
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
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
Oops, something went wrong.