Archiviert
13
0

Ensure getEntityModifier is thread safe. FIXES Ticket-6.

Don't use the world's getPlayers-method, as it's enumerating a
collection that's not thread safe. This is important as
getEntityModifier may be called by a client packet listener (which is
async).
Dieser Commit ist enthalten in:
Kristian S. Stangeland 2012-11-02 00:35:35 +01:00
Ursprung aa9616d6b0
Commit 51184dd209

Datei anzeigen

@ -26,6 +26,8 @@ import java.io.Serializable;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.WorldType; import org.bukkit.WorldType;
import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.CraftWorld;
@ -268,7 +270,6 @@ public class PacketContainer implements Serializable {
final Object worldServer = ((CraftWorld) world).getHandle(); final Object worldServer = ((CraftWorld) world).getHandle();
final Class<?> nmsEntityClass = net.minecraft.server.Entity.class; final Class<?> nmsEntityClass = net.minecraft.server.Entity.class;
final World worldCopy = world;
if (getEntity == null) if (getEntity == null)
getEntity = FuzzyReflection.fromObject(worldServer).getMethodByParameters( getEntity = FuzzyReflection.fromObject(worldServer).getMethodByParameters(
@ -296,12 +297,16 @@ public class PacketContainer implements Serializable {
if (nmsEntity != null) { if (nmsEntity != null) {
return nmsEntity.getBukkitEntity(); return nmsEntity.getBukkitEntity();
} else { } else {
// Maybe it's a player that's just logged in? Try a search Server server = Bukkit.getServer();
for (Player player : worldCopy.getPlayers()) {
// Maybe it's a player that has just logged in? Try a search
if (server != null) {
for (Player player : server.getOnlinePlayers()) {
if (player.getEntityId() == id) { if (player.getEntityId() == id) {
return player; return player;
} }
} }
}
return null; return null;
} }