diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index 0480fbeff..d6241e2db 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -437,7 +437,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @Override public UUID getUniqueId() { - return this.getHandle().getUUID(); + return this.entity.getUUID(); } @Override @@ -496,21 +496,17 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @Override public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (this.getClass() != obj.getClass()) { - return false; - } + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + final CraftEntity other = (CraftEntity) obj; - return (this.getEntityId() == other.getEntityId()); + return this.entity == other.entity; // There should never be duplicate entities with differing references } @Override public int hashCode() { - int hash = 7; - hash = 29 * hash + this.getEntityId(); - return hash; + // The UUID and thus hash code should never change (unlike the entity id) + return this.getUniqueId().hashCode(); } @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index ce22bf772..6538a3ee3 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -626,22 +626,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean equals(Object obj) { - if (!(obj instanceof OfflinePlayer)) { - return false; - } - OfflinePlayer other = (OfflinePlayer) obj; - if ((this.getUniqueId() == null) || (other.getUniqueId() == null)) { - return false; - } - - boolean uuidEquals = this.getUniqueId().equals(other.getUniqueId()); - boolean idEquals = true; - - if (other instanceof CraftPlayer) { - idEquals = this.getEntityId() == ((CraftPlayer) other).getEntityId(); - } - - return uuidEquals && idEquals; + // Long-term, this should just use the super equals... for now, check the UUID + if (obj == this) return true; + if (!(obj instanceof OfflinePlayer other)) return false; + return this.getUniqueId().equals(other.getUniqueId()); } @Override @@ -2052,7 +2040,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public int hashCode() { if (this.hash == 0 || this.hash == 485) { - this.hash = 97 * 5 + (this.getUniqueId() != null ? this.getUniqueId().hashCode() : 0); + this.hash = 97 * 5 + this.getUniqueId().hashCode(); } return this.hash; }