SuccessChanges

Summary

  1. Properly remove entities on dimension teleport (commit: ca0ec24) (details)
  2. Fix CraftEntity hashCode (commit: 84d350c) (details)
Commit ca0ec24d6482115e75a547115a75ed0ef4bae724 by aikar
Properly remove entities on dimension teleport
To teleport an entity between dimensions, the server makes a copy and
puts the copy in the new location, and marks the old one dead.
If this method got called for the same world in the same tick, the
entity would not have been removed from the UUID map, and the world
readd would fail.
This can be triggered even with a plugin if the entity is teleported
twice in the same tick, from world A to B, then back from B to A.
The re-add to A will fail to add the entity to the world. It will
actually be there, but it will not be visible on the client until the
server is restarted to re-try the add to world process again.
This bug was unlikely to be seen by many due to the double teleport
requirement, but plugins (such as my own) use this method to trigger a
"reload" of the entity on the client.
(commit: ca0ec24)
The file was addedSpigot-Server-Patches/0305-Properly-remove-entities-on-dimension-teleport.patch
Commit 84d350c24c95742f6e8552c91f34c2b6beb5b51a by aikar
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.
(commit: 84d350c)
The file was addedSpigot-Server-Patches/0306-Fix-CraftEntity-hashCode.patch