diff options
author | Dinnerbone <dinnerbone@dinnerbone.com> | 2011-09-27 23:13:58 +0100 |
---|---|---|
committer | Dinnerbone <dinnerbone@dinnerbone.com> | 2011-09-27 23:14:53 +0100 |
commit | 935313dea7bd379e59f83c70c0c8e822324f592a (patch) | |
tree | 6ac7852a3907120680cd6b64720f25a2bf1a7c91 | |
parent | 95666779f85c901081a5007de709cdff0950f2f1 (diff) | |
download | craftbukkit-935313dea7bd379e59f83c70c0c8e822324f592a.tar craftbukkit-935313dea7bd379e59f83c70c0c8e822324f592a.tar.gz craftbukkit-935313dea7bd379e59f83c70c0c8e822324f592a.tar.lz craftbukkit-935313dea7bd379e59f83c70c0c8e822324f592a.tar.xz craftbukkit-935313dea7bd379e59f83c70c0c8e822324f592a.zip |
Fixed players not receiving broadcasts (and other similar issues) after signing out and in rapidly
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index 569a0bd9..88652161 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -1,5 +1,6 @@ package org.bukkit.craftbukkit.entity; +import com.google.common.collect.MapMaker; import net.minecraft.server.*; import org.bukkit.Location; @@ -11,9 +12,12 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.util.Vector; import java.util.List; +import java.util.Map; import java.util.UUID; +import org.bukkit.Bukkit; public abstract class CraftEntity implements org.bukkit.entity.Entity { + private static final Map<String, CraftPlayer> players = new MapMaker().softValues().makeMap(); protected final CraftServer server; protected Entity entity; private EntityDamageEvent lastDamageEvent; @@ -30,7 +34,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { if (entity instanceof EntityLiving) { // Players if (entity instanceof EntityHuman) { - if (entity instanceof EntityPlayer) { return new CraftPlayer(server, (EntityPlayer) entity); } + if (entity instanceof EntityPlayer) { return getPlayer((EntityPlayer)entity); } else { return new CraftHumanEntity(server, (EntityHuman) entity); } } else if (entity instanceof EntityCreature) { @@ -269,4 +273,17 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { public UUID getUniqueId() { return getHandle().uniqueId; } + + private static CraftPlayer getPlayer(EntityPlayer entity) { + CraftPlayer result = players.get(entity.name); + + if (result == null) { + result = new CraftPlayer((CraftServer)Bukkit.getServer(), entity); + players.put(entity.name, result); + } else { + result.setHandle(entity); + } + + return result; + } } |