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 21773aea4d5e5f3946202e03afdc00f7bb109618..080b574d28b07e59b234a927a50ba8972d410664 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 1d9ce6dae17ff572d4528971c69c63d0f85b313c..305d9772f2af22e8bdf73235cdb15ea01ac2c3b3 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -257,7 +257,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; }