50 lines
1.9 KiB
Diff
50 lines
1.9 KiB
Diff
|
From 19d1d25ea22f4d7d817dd9ab4194257099b4f27c Mon Sep 17 00:00:00 2001
|
||
|
From: Aikar <aikar@aikar.co>
|
||
|
Date: Sun, 10 Jun 2018 20:20:15 -0400
|
||
|
Subject: [PATCH] Fix CraftEntity hashCode
|
||
|
|
||
|
hashCodes are not allowed to change, however bukkit used a value
|
||
|
that does change, the entityId.
|
||
|
|
||
|
When an entity is teleported dimensions, the entity reference is
|
||
|
replaced with a new one with a new entity ID.
|
||
|
|
||
|
For hashCode, we can simply use the UUID's hashCode to keep
|
||
|
the hashCode from changing.
|
||
|
|
||
|
equals() is ok to use getEntityId() because equals() should only
|
||
|
be true if both the left and right are the same reference.
|
||
|
|
||
|
Since entity ids can not duplicate during runtime, this
|
||
|
check is essentially the same as this.getHandle() == other.getHandle()
|
||
|
|
||
|
However, replaced it too to make it clearer of intent.
|
||
|
|
||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||
|
index 1571e4eb5..22a1a4965 100644
|
||
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||
|
@@ -503,14 +503,15 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||
|
return false;
|
||
|
}
|
||
|
final CraftEntity other = (CraftEntity) obj;
|
||
|
- return (this.getEntityId() == other.getEntityId());
|
||
|
+ return (this.getHandle() == other.getHandle()); // Paper - while logically the same, this is clearer
|
||
|
}
|
||
|
|
||
|
+ // Paper - Fix hashCode. entity ID's are not static.
|
||
|
+ // A CraftEntity can change reference to a new entity with a new ID, and hash codes should never change
|
||
|
@Override
|
||
|
public int hashCode() {
|
||
|
- int hash = 7;
|
||
|
- hash = 29 * hash + this.getEntityId();
|
||
|
- return hash;
|
||
|
+ return getUniqueId().hashCode();
|
||
|
+ // Paper end
|
||
|
}
|
||
|
|
||
|
public void setMetadata(String metadataKey, MetadataValue newMetadataValue) {
|
||
|
--
|
||
|
2.17.1
|
||
|
|