- Fixed NullPointerExceptions on the teleport functions of the Phase check. This is caused by a concurrency issue where I didn't set the Location object as a final constant and it would get updated to null by another thread.
- Added a Cache on the XMaterial#matchXMaterial(Material) method so it isn't running the logic repeatedly. This improved performance.
- Instead of using an object as a key in BlockUpdateHandler, we use an Integer array. This should theoretically improve performance by reducing the amount of hashing required. However, we shall see how this works in practice.
- Reduced the amounts of instructions needed to run in the getCollidingBlocks() method for the Emulator in APlayer by removing the use of a Stream and just replacing it with a for() loop.