summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorDinnerbone <dinnerbone@dinnerbone.com>2011-09-27 23:13:58 +0100
committerDinnerbone <dinnerbone@dinnerbone.com>2011-09-27 23:14:53 +0100
commit935313dea7bd379e59f83c70c0c8e822324f592a (patch)
tree6ac7852a3907120680cd6b64720f25a2bf1a7c91 /src/main/java
parent95666779f85c901081a5007de709cdff0950f2f1 (diff)
downloadcraftbukkit-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
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java19
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;
+ }
}