fa9c5e0f95
Previously, Entity Activation Range only applied to the root entity of a vehicle chain. If that vehicle is active, every entity as it's passenger would then tick. This creates scenarios where EAR does not apply your desired ranges to passengers. Additionally, any entity that was a passenger never had its inactiveTick method called when the parent was inactive, creating behavioral desyncs. This could of been a source of many villager issues when those villagers were in minecarts as players commonly do. Now we will process passengers checking their activation state independently of their vehicle and if they are inactive, call their inactiveTick() method to ensure state remains consistent. This also helps improve any desync issues with entity position of passengers too. This also removes immunity for passenger/vehicles, so it should improve performance of these minecart villagers too for EAR.
28 lines
1.5 KiB
Diff
28 lines
1.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: AJMFactsheets <AJMFactsheets@gmail.com>
|
|
Date: Wed, 22 Jan 2020 19:52:28 -0600
|
|
Subject: [PATCH] Fix items vanishing through end portal
|
|
|
|
If the Paper configuration option "keep-spawn-loaded" is set to false,
|
|
items entering the overworld from the end will spawn at Y = 0.
|
|
|
|
This is due to logic in the getHighestBlockYAt method in World.java
|
|
only searching the heightmap if the chunk is loaded.
|
|
|
|
Quickly loading the exact world spawn chunk before searching the
|
|
heightmap resolves the issue without having to load all spawn chunks.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
|
index 5263e219ab6c334e55fa4188e7f71594ec764e91..8691592c64dc0a93e6de7fbd12ad53402919e6b5 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -2621,6 +2621,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
|
BlockPosition blockposition1;
|
|
|
|
if (flag1) {
|
|
+ // Paper start - Ensure spawn chunk is always loaded before calculating Y coordinate
|
|
+ this.world.getChunkAtWorldCoords(this.world.getSpawn());
|
|
+ // Paper end
|
|
blockposition1 = WorldServer.a;
|
|
} else {
|
|
blockposition1 = worldserver.getHighestBlockYAt(HeightMap.Type.MOTION_BLOCKING_NO_LEAVES, worldserver.getSpawn());
|