diff --git a/forge/forge_common/net/minecraft/src/forge/ForgeHooks.java b/forge/forge_common/net/minecraft/src/forge/ForgeHooks.java index 77f2a2786..650423abe 100644 --- a/forge/forge_common/net/minecraft/src/forge/ForgeHooks.java +++ b/forge/forge_common/net/minecraft/src/forge/ForgeHooks.java @@ -182,6 +182,18 @@ public class ForgeHooks } return true; } + + public static boolean canUpdateEntity(Entity entity) + { + for(IChunkLoadHandler loader : chunkLoadHandlers) + { + if(loader.canUpdateEntity(entity)) + { + return true; + } + } + return false; + } static LinkedList chunkLoadHandlers = new LinkedList(); public static boolean onEntityInteract(EntityPlayer player, Entity entity, boolean isAttack) diff --git a/forge/forge_common/net/minecraft/src/forge/IChunkLoadHandler.java b/forge/forge_common/net/minecraft/src/forge/IChunkLoadHandler.java index f0d5bf7bd..d4cbf13bc 100644 --- a/forge/forge_common/net/minecraft/src/forge/IChunkLoadHandler.java +++ b/forge/forge_common/net/minecraft/src/forge/IChunkLoadHandler.java @@ -3,6 +3,7 @@ package net.minecraft.src.forge; import java.util.Set; import net.minecraft.src.Chunk; import net.minecraft.src.ChunkCoordIntPair; +import net.minecraft.src.Entity; import net.minecraft.src.World; /** @@ -24,4 +25,11 @@ public interface IChunkLoadHandler * @param chunk The chunk to be unloaded */ public boolean canUnloadChunk(Chunk chunk); + + /** + * Called from World.updateEntityWithOptionalForce. + * Return true to allow this entity to update. + * @param entity The entity to update + */ + public boolean canUpdateEntity(Entity entity); } \ No newline at end of file diff --git a/forge/patches/minecraft/net/minecraft/src/World.java.patch b/forge/patches/minecraft/net/minecraft/src/World.java.patch index e6a9bd4fe..9d94dd525 100644 --- a/forge/patches/minecraft/net/minecraft/src/World.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/World.java.patch @@ -80,6 +80,15 @@ } } +@@ -2148,7 +2151,7 @@ + int var4 = MathHelper.floor_double(par1Entity.posZ); + byte var5 = 32; + +- if (!par2 || this.checkChunksExist(var3 - var5, 0, var4 - var5, var3 + var5, 0, var4 + var5)) ++ if (!par2 || this.checkChunksExist(var3 - var5, 0, var4 - var5, var3 + var5, 0, var4 + var5) || ForgeHooks.canUpdateEntity(par1Entity)) + { + par1Entity.lastTickPosX = par1Entity.posX; + par1Entity.lastTickPosY = par1Entity.posY; @@ -2325,7 +2328,14 @@ if (var11 == Block.fire.blockID || var11 == Block.lavaMoving.blockID || var11 == Block.lavaStill.blockID) { diff --git a/forge/patches/minecraft_server/net/minecraft/src/World.java.patch b/forge/patches/minecraft_server/net/minecraft/src/World.java.patch index 610ac1fd5..8b93310e7 100644 --- a/forge/patches/minecraft_server/net/minecraft/src/World.java.patch +++ b/forge/patches/minecraft_server/net/minecraft/src/World.java.patch @@ -76,6 +76,15 @@ } } +@@ -1680,7 +1685,7 @@ + int var4 = MathHelper.floor_double(par1Entity.posZ); + byte var5 = 32; + +- if (!par2 || this.checkChunksExist(var3 - var5, 0, var4 - var5, var3 + var5, 0, var4 + var5)) ++ if (!par2 || this.checkChunksExist(var3 - var5, 0, var4 - var5, var3 + var5, 0, var4 + var5) || ForgeHooks.canUpdateEntity(par1Entity)) + { + par1Entity.lastTickPosX = par1Entity.posX; + par1Entity.lastTickPosY = par1Entity.posY; @@ -1903,6 +1908,13 @@ if (var11 == Block.fire.blockID || var11 == Block.lavaMoving.blockID || var11 == Block.lavaStill.blockID) {