geforkt von Mirrors/Paper
f956f185c8
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 47b9cf30 SPIGOT-4372: LightningStrikeEvent cause API a9ceda75 Include the plugin channel name in the exception message CraftBukkit Changes:a4bdecff
SPIGOT-4372: LightningStrikeEvent cause API34caaf6d
SPIGOT-4371: Trident damaged when event cancelled97315374
SPIGOT-4369: Handle cancelled trident eventbf1c8273
SPIGOT-4370: Remove vehicle if its passenger spawn event was cancelled Spigot Changes: 6b015b4b SPIGOT-4370: Remove vehicle if its passenger spawn event was cancelled
137 Zeilen
8.8 KiB
Diff
137 Zeilen
8.8 KiB
Diff
From 8a7c8360a348229b1e81432124ea1093dc29bc70 Mon Sep 17 00:00:00 2001
|
|
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
|
|
index 6d511b6230..d8eb2e9864 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
|
@@ -1201,8 +1201,25 @@ public abstract class PlayerList {
|
|
}
|
|
|
|
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);
|
|
+ // Paper start - Use world list instead of server list where preferable
|
|
+ sendPacketNearby(entityhuman, d0, d1, d2, d3, dimensionmanager, null, packet); // Retained for compatibility
|
|
+ }
|
|
+
|
|
+ public void sendPacketNearby(@Nullable EntityHuman entityhuman, double d0, double d1, double d2, double d3, WorldServer world, Packet<?> packet) {
|
|
+ sendPacketNearby(entityhuman, d0, d1, d2, d3, world.dimension, world, packet);
|
|
+ }
|
|
+
|
|
+ public void sendPacketNearby(@Nullable EntityHuman entityhuman, double d0, double d1, double d2, double d3, DimensionManager dimensionmanager, @Nullable WorldServer world, Packet<?> packet) {
|
|
+ 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;
|
|
+ EntityPlayer entityplayer = (EntityPlayer) entity;
|
|
+ // 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())) {
|
|
@@ -1210,7 +1227,7 @@ public abstract class PlayerList {
|
|
}
|
|
// CraftBukkit end
|
|
|
|
- if (entityplayer != entityhuman && entityplayer.dimension == dimensionmanager) {
|
|
+ if (entityplayer != entityhuman && (world != null || entityplayer.dimension == dimensionmanager)) { // Paper
|
|
double d4 = d0 - entityplayer.locX;
|
|
double d5 = d1 - entityplayer.locY;
|
|
double d6 = d2 - entityplayer.locZ;
|
|
diff --git a/src/main/java/net/minecraft/server/WorldManager.java b/src/main/java/net/minecraft/server/WorldManager.java
|
|
index e26405d341..23f390c221 100644
|
|
--- a/src/main/java/net/minecraft/server/WorldManager.java
|
|
+++ b/src/main/java/net/minecraft/server/WorldManager.java
|
|
@@ -35,8 +35,8 @@ public class WorldManager implements IWorldAccess {
|
|
}
|
|
|
|
public void a(@Nullable EntityHuman entityhuman, SoundEffect soundeffect, SoundCategory soundcategory, double d0, double d1, double d2, float f, float f1) {
|
|
- // CraftBukkit - this.world.dimension
|
|
- this.a.getPlayerList().sendPacketNearby(entityhuman, d0, d1, d2, f > 1.0F ? (double) (16.0F * f) : 16.0D, this.world.dimension, new PacketPlayOutNamedSoundEffect(soundeffect, soundcategory, d0, d1, d2, f, f1));
|
|
+ // CraftBukkit - this.world.dimension, // Paper - this.world.dimension -> this.world
|
|
+ this.a.getPlayerList().sendPacketNearby(entityhuman, d0, d1, d2, f > 1.0F ? (double) (16.0F * f) : 16.0D, this.world, new PacketPlayOutNamedSoundEffect(soundeffect, soundcategory, d0, d1, d2, f, f1));
|
|
}
|
|
|
|
public void a(int i, int j, int k, int l, int i1, int j1) {}
|
|
@@ -51,7 +51,7 @@ public class WorldManager implements IWorldAccess {
|
|
|
|
public void a(EntityHuman entityhuman, int i, BlockPosition blockposition, int j) {
|
|
// CraftBukkit - this.world.dimension
|
|
- this.a.getPlayerList().sendPacketNearby(entityhuman, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), 64.0D, this.world.dimension, new PacketPlayOutWorldEvent(i, blockposition, j, false));
|
|
+ this.a.getPlayerList().sendPacketNearby(entityhuman, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), 64.0D, this.world, new PacketPlayOutWorldEvent(i, blockposition, j, false));
|
|
}
|
|
|
|
public void a(int i, BlockPosition blockposition, int j) {
|
|
@@ -59,7 +59,7 @@ public class WorldManager implements IWorldAccess {
|
|
}
|
|
|
|
public void b(int i, BlockPosition blockposition, int j) {
|
|
- Iterator iterator = this.a.getPlayerList().v().iterator();
|
|
+ // Iterator iterator = this.a.getPlayerList().v().iterator(); // Paper
|
|
|
|
// CraftBukkit start
|
|
EntityHuman entityhuman = null;
|
|
@@ -67,8 +67,14 @@ public class WorldManager implements IWorldAccess {
|
|
if (entity instanceof EntityHuman) entityhuman = (EntityHuman) entity;
|
|
// CraftBukkit end
|
|
|
|
+ // Paper start
|
|
+ java.util.List<? extends EntityHuman> list = entity != null ? entity.world.players : this.a.getPlayerList().v();
|
|
+ Iterator<? extends EntityHuman> iterator = list.iterator();
|
|
while (iterator.hasNext()) {
|
|
- EntityPlayer entityplayer = (EntityPlayer) iterator.next();
|
|
+ EntityHuman human = iterator.next();
|
|
+ if (!(human instanceof EntityPlayer)) continue;
|
|
+ EntityPlayer entityplayer = (EntityPlayer) human;
|
|
+ // Paper end
|
|
|
|
if (entityplayer != null && entityplayer.world == this.world && entityplayer.getId() != i) {
|
|
double d0 = (double) blockposition.getX() - entityplayer.locX;
|
|
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
|
index 911d03c70b..f837e6c36c 100644
|
|
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
|
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
|
@@ -1086,7 +1086,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, dimension, new PacketPlayOutSpawnEntityWeather(entity)); // CraftBukkit - Use dimension
|
|
+ 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
|
|
return true;
|
|
} else {
|
|
return false;
|
|
@@ -1146,8 +1146,8 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
BlockActionData blockactiondata = (BlockActionData) this.d.removeFirst();
|
|
|
|
if (this.a(blockactiondata)) {
|
|
- // CraftBukkit - this.worldProvider.dimension -> this.dimension
|
|
- this.server.getPlayerList().sendPacketNearby((EntityHuman) null, (double) blockactiondata.a().getX(), (double) blockactiondata.a().getY(), (double) blockactiondata.a().getZ(), 64.0D, dimension, new PacketPlayOutBlockAction(blockactiondata.a(), blockactiondata.b(), blockactiondata.c(), blockactiondata.d()));
|
|
+ // CraftBukkit - this.worldProvider.dimension -> this.dimension, // Paper - dimension -> world
|
|
+ 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()));
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index 80fd49b6e1..ba2e768594 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -1512,7 +1512,7 @@ public class CraftWorld implements World {
|
|
double z = loc.getZ();
|
|
|
|
PacketPlayOutCustomSoundEffect packet = new PacketPlayOutCustomSoundEffect(new MinecraftKey(sound), SoundCategory.valueOf(category.name()), new Vec3D(x, y, z), volume, pitch);
|
|
- world.getMinecraftServer().getPlayerList().sendPacketNearby(null, x, y, z, volume > 1.0F ? 16.0F * volume : 16.0D, this.world.dimension, packet);
|
|
+ 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
|
|
}
|
|
|
|
public String getGameRuleValue(String rule) {
|
|
--
|
|
2.19.0
|
|
|