2020-01-28 20:43:57 +01:00
From cb12a917cc83d97e3290ad2ba868745f2f6c3b95 Mon Sep 17 00:00:00 2001
2018-08-18 00:05:00 +02:00
From: Mystiflow <mystiflow@gmail.com>
Date: Fri, 6 Jul 2018 13:21:30 +0100
Subject: [PATCH] Send nearby packets from world player list not server list
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
2020-01-28 01:16:53 +01:00
index fd0f5c6f29..e46436623c 100644
2018-08-18 00:05:00 +02:00
--- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java
2019-12-12 01:03:31 +01:00
@@ -923,8 +923,25 @@ public abstract class PlayerList {
2018-08-18 00:05:00 +02:00
}
2018-08-26 20:11:49 +02:00
public void sendPacketNearby(@Nullable EntityHuman entityhuman, double d0, double d1, double d2, double d3, DimensionManager dimensionmanager, Packet<?> packet) {
- for (int i = 0; i < this.players.size(); ++i) {
- EntityPlayer entityplayer = (EntityPlayer) this.players.get(i);
2018-08-18 00:05:00 +02:00
+ // Paper start - Use world list instead of server list where preferable
2018-08-26 20:11:49 +02:00
+ sendPacketNearby(entityhuman, d0, d1, d2, d3, dimensionmanager, null, packet); // Retained for compatibility
2018-08-18 00:05:00 +02:00
+ }
+
+ public void sendPacketNearby(@Nullable EntityHuman entityhuman, double d0, double d1, double d2, double d3, WorldServer world, Packet<?> packet) {
2019-05-14 04:20:58 +02:00
+ sendPacketNearby(entityhuman, d0, d1, d2, d3, world.worldProvider.getDimensionManager(), world, packet);
2018-08-18 00:05:00 +02:00
+ }
+
2018-08-26 20:11:49 +02:00
+ public void sendPacketNearby(@Nullable EntityHuman entityhuman, double d0, double d1, double d2, double d3, DimensionManager dimensionmanager, @Nullable WorldServer world, Packet<?> packet) {
2018-08-18 00:05:00 +02:00
+ if (world == null && entityhuman != null && entityhuman.world instanceof WorldServer) {
+ world = (WorldServer) entityhuman.world;
+ }
+
+ List<? extends EntityHuman> players1 = world == null ? players : world.players;
+ for (int j = 0; j < players1.size(); ++j) {
+ EntityHuman entity = players1.get(j);
+ if (!(entity instanceof EntityPlayer)) continue;
2018-08-26 20:11:49 +02:00
+ EntityPlayer entityplayer = (EntityPlayer) entity;
2018-08-18 00:05:00 +02:00
+ // Paper end
// CraftBukkit start - Test if player receiving packet can see the source of the packet
if (entityhuman != null && entityhuman instanceof EntityPlayer && !entityplayer.getBukkitEntity().canSee(((EntityPlayer) entityhuman).getBukkitEntity())) {
2019-12-12 01:03:31 +01:00
@@ -932,7 +949,7 @@ public abstract class PlayerList {
2018-08-18 00:05:00 +02:00
}
// CraftBukkit end
2018-08-26 20:11:49 +02:00
- if (entityplayer != entityhuman && entityplayer.dimension == dimensionmanager) {
+ if (entityplayer != entityhuman && (world != null || entityplayer.dimension == dimensionmanager)) { // Paper
2019-12-12 01:03:31 +01:00
double d4 = d0 - entityplayer.locX();
double d5 = d1 - entityplayer.locY();
double d6 = d2 - entityplayer.locZ();
2018-08-18 00:05:00 +02:00
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
2020-01-28 01:16:53 +01:00
index 12cdb0cc9a..f12cadc735 100644
2018-08-18 00:05:00 +02:00
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
2020-01-28 01:16:53 +01:00
@@ -1271,7 +1271,7 @@ public class WorldServer extends World {
2018-08-18 00:05:00 +02:00
}
// CraftBukkit end
2019-05-05 04:23:25 +02:00
this.globalEntityList.add(entitylightning);
2019-12-12 01:03:31 +01:00
- this.server.getPlayerList().sendPacketNearby((EntityHuman) null, entitylightning.locX(), entitylightning.locY(), entitylightning.locZ(), 512.0D, this.worldProvider.getDimensionManager(), new PacketPlayOutSpawnEntityWeather(entitylightning));
+ this.server.getPlayerList().sendPacketNearby((EntityHuman) null, entitylightning.locX(), entitylightning.locY(), entitylightning.locZ(), 512.0D, this, new PacketPlayOutSpawnEntityWeather(entitylightning)); // Paper - use world instead of dimension
2019-05-05 04:23:25 +02:00
}
@Override
2020-01-28 01:16:53 +01:00
@@ -1403,7 +1403,7 @@ public class WorldServer extends World {
2019-07-20 06:01:24 +02:00
BlockActionData blockactiondata = (BlockActionData) this.I.removeFirst();
2018-08-18 00:05:00 +02:00
2018-08-18 10:59:57 +02:00
if (this.a(blockactiondata)) {
2019-05-14 04:20:58 +02:00
- this.server.getPlayerList().sendPacketNearby((EntityHuman) null, (double) blockactiondata.a().getX(), (double) blockactiondata.a().getY(), (double) blockactiondata.a().getZ(), 64.0D, this.worldProvider.getDimensionManager(), new PacketPlayOutBlockAction(blockactiondata.a(), blockactiondata.b(), blockactiondata.c(), blockactiondata.d()));
2018-08-18 10:59:57 +02:00
+ this.server.getPlayerList().sendPacketNearby((EntityHuman) null, (double) blockactiondata.a().getX(), (double) blockactiondata.a().getY(), (double) blockactiondata.a().getZ(), 64.0D, this, new PacketPlayOutBlockAction(blockactiondata.a(), blockactiondata.b(), blockactiondata.c(), blockactiondata.d()));
2018-08-18 00:05:00 +02:00
}
2018-08-18 10:59:57 +02:00
}
2018-08-18 00:05:00 +02:00
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
2020-01-28 20:43:57 +01:00
index fe91e08f22..bb908f0712 100644
2018-08-18 00:05:00 +02:00
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
2020-01-28 20:43:57 +01:00
@@ -2080,7 +2080,7 @@ public class CraftWorld implements World {
2018-08-18 00:05:00 +02:00
double z = loc.getZ();
2018-08-18 10:59:57 +02:00
PacketPlayOutCustomSoundEffect packet = new PacketPlayOutCustomSoundEffect(new MinecraftKey(sound), SoundCategory.valueOf(category.name()), new Vec3D(x, y, z), volume, pitch);
2019-05-14 04:20:58 +02:00
- world.getMinecraftServer().getPlayerList().sendPacketNearby(null, x, y, z, volume > 1.0F ? 16.0F * volume : 16.0D, this.world.getWorldProvider().getDimensionManager(), packet);
2018-08-18 00:05:00 +02:00
+ world.getMinecraftServer().getPlayerList().sendPacketNearby(null, x, y, z, volume > 1.0F ? 16.0F * volume : 16.0D, this.world, packet); // Paper - this.world.dimension -> this.world
}
2019-06-25 03:47:58 +02:00
private static Map<String, GameRules.GameRuleKey<?>> gamerules;
2018-08-18 00:05:00 +02:00
--
2020-01-28 20:43:57 +01:00
2.25.0
2018-08-18 00:05:00 +02:00