From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AJMFactsheets Date: Fri, 17 Jan 2020 17:17:54 -0600 Subject: [PATCH] Fix items not falling correctly Since 1.14, Mojang has added an optimization which skips checking if an item should fall every fourth tick. However, Spigot's entity activation range class also has an optimization which skips ticking active entities every fourth tick. This can result in a state where an item will never properly fall due to its move method never being called. This patch resolves the conflict by offsetting checking Spigot's entity activation range check from an item's move method. diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java index 6938f996e7e6d394a54ef6dda2e09acb2021d87f..b85d0c7252a32210e4cb29c3e4fff4c080537451 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java @@ -149,7 +149,7 @@ public class ItemEntity extends Entity implements TraceableEntity { } } - if (!this.onGround() || this.getDeltaMovement().horizontalDistanceSqr() > 9.999999747378752E-6D || (this.tickCount + this.getId()) % 4 == 0) { + if (!this.onGround() || this.getDeltaMovement().horizontalDistanceSqr() > 9.999999747378752E-6D || (this.tickCount + this.getId()) % 4 == 0) { // Paper - Diff on change this.move(MoverType.SELF, this.getDeltaMovement()); float f1 = 0.98F; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java index 66dbfabdb104d272d48588a4773d198d3938f1ef..9527b702fa823f00852e409a53cae772943dbe09 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -251,7 +251,7 @@ public class ActivationRange isActive = true; } // Add a little performance juice to active entities. Skip 1/4 if not immune. - } else if ( !entity.defaultActivationState && entity.tickCount % 4 == 0 && !ActivationRange.checkEntityImmunities( entity ) ) + } else if ( !entity.defaultActivationState && (entity.tickCount + entity.getId()) % 4 == 0 && !ActivationRange.checkEntityImmunities( entity ) ) // Paper - Ensure checking item movement is offset from Spigot's entity activation range check { isActive = false; }