From 97a1114f80519b2475834e865b32a1868eee066a Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Thu, 2 Apr 2015 15:22:20 -0500 Subject: [PATCH] Backport EntityActivationRange fixes diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java index 28749c15b..48e28fac7 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -104,7 +104,7 @@ public abstract class Entity { protected DataWatcher datawatcher; private double g; private double h; - public boolean ag; + public boolean ag; public boolean isAddedToChunk() { return ag; } // PaperSpigot - EAR backport public int ah; public int ai; public int aj; @@ -126,7 +126,7 @@ public abstract class Entity { public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getEntityTimings(this); // Spigot public final byte activationType = org.spigotmc.ActivationRange.initializeEntityActivationType(this); public final boolean defaultActivationState; - public long activatedTick = 0; + public long activatedTick = Integer.MIN_VALUE; // PaperSpigot - EAR backport public boolean fromMobSpawner; public void inactiveTick() { } // Spigot end diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java index a61e91a17..97830f357 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java @@ -137,6 +137,28 @@ public class EntityItem extends Entity { } } + // PaperSpigot start - copied from above + @Override + public void inactiveTick() { + // CraftBukkit start - Use wall time for pickup and despawn timers + int elapsedTicks = MinecraftServer.currentTick - this.lastTick; + this.pickupDelay -= elapsedTicks; + this.age += elapsedTicks; + this.lastTick = MinecraftServer.currentTick; + // CraftBukkit end + + if (!this.world.isStatic && this.age >= world.spigotConfig.itemDespawnRate) { // Spigot + // CraftBukkit start - fire ItemDespawnEvent + if (org.bukkit.craftbukkit.event.CraftEventFactory.callItemDespawnEvent(this).isCancelled()) { + this.age = 0; + return; + } + // CraftBukkit end + this.die(); + } + } + // PaperSpigot end + private void k() { // Spigot start double radius = world.spigotConfig.itemMerge; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java index 903172a93..6fea40336 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -12,6 +12,7 @@ import net.minecraft.server.EntityComplexPart; import net.minecraft.server.EntityCreature; import net.minecraft.server.EntityEnderCrystal; import net.minecraft.server.EntityEnderDragon; +import net.minecraft.server.EntityFallingBlock; // PaperSpigot import net.minecraft.server.EntityFireball; import net.minecraft.server.EntityFireworks; import net.minecraft.server.EntityHuman; @@ -262,6 +263,15 @@ public class ActivationRange public static boolean checkIfActive(Entity entity) { SpigotTimings.checkIfActiveTimer.startTiming(); + + // PaperSpigot start - EAR backport + // Never safe to skip fireworks or entities not yet added to chunk and we don't skip falling blocks + if ( !entity.isAddedToChunk() || entity instanceof EntityFireworks || entity instanceof EntityFallingBlock ) { + SpigotTimings.checkIfActiveTimer.stopTiming(); + return true; + } + // PaperSpigot end + boolean isActive = entity.activatedTick >= MinecraftServer.currentTick || entity.defaultActivationState; // Should this entity tick? -- 2.13.3