From e2c23475b5a90376e927a73e37e1ea6421fc72fe Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Wed, 6 May 2020 09:31:29 -0700 Subject: [PATCH] Revert loaded entity list (#3304) --- ...list-iteration-requiring-entities-be.patch | 232 ------------------ ...ance-map-to-optimise-entity-tracker.patch} | 31 +-- ...isOutsideRange-to-use-distance-maps.patch} | 2 +- ...e-operations-for-updating-light-dat.patch} | 0 ...o-Tick-view-distance-implementation.patch} | 10 +- ...=> 0506-Add-villager-reputation-API.patch} | 0 6 files changed, 16 insertions(+), 259 deletions(-) delete mode 100644 Spigot-Server-Patches/0502-Optimize-entity-list-iteration-requiring-entities-be.patch rename Spigot-Server-Patches/{0503-Use-distance-map-to-optimise-entity-tracker.patch => 0502-Use-distance-map-to-optimise-entity-tracker.patch} (93%) rename Spigot-Server-Patches/{0504-Optimize-isOutsideRange-to-use-distance-maps.patch => 0503-Optimize-isOutsideRange-to-use-distance-maps.patch} (99%) rename Spigot-Server-Patches/{0505-Stop-copy-on-write-operations-for-updating-light-dat.patch => 0504-Stop-copy-on-write-operations-for-updating-light-dat.patch} (100%) rename Spigot-Server-Patches/{0506-No-Tick-view-distance-implementation.patch => 0505-No-Tick-view-distance-implementation.patch} (98%) rename Spigot-Server-Patches/{0507-Add-villager-reputation-API.patch => 0506-Add-villager-reputation-API.patch} (100%) diff --git a/Spigot-Server-Patches/0502-Optimize-entity-list-iteration-requiring-entities-be.patch b/Spigot-Server-Patches/0502-Optimize-entity-list-iteration-requiring-entities-be.patch deleted file mode 100644 index 75731a78e..000000000 --- a/Spigot-Server-Patches/0502-Optimize-entity-list-iteration-requiring-entities-be.patch +++ /dev/null @@ -1,232 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Spottedleaf -Date: Tue, 5 May 2020 19:49:23 -0700 -Subject: [PATCH] Optimize entity list iteration requiring entities be in - loaded chunks - -We retain a list of loaded entities specifically for this usage - -diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 750fb07756f7e40b21f8ab0925f2e842aae50f7b..21918ab101b423eadff5c00530f7a7c8e40cde9a 100644 ---- a/src/main/java/net/minecraft/server/Chunk.java -+++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -588,6 +588,13 @@ public class Chunk implements IChunkAccess { - entity.chunkZ = this.loc.z; - this.entities.add(entity); // Paper - per chunk entity list - this.entitySlices[k].add(entity); if (entity.hardCollides()) this.hardCollidingEntities[k].add(entity); // Paper - optimise hard colliding entities -+ // Paper start - world loaded entity list -+ if (this.loadedTicketLevel) { -+ ((WorldServer)this.world).loadedEntities.add(entity); -+ } else { -+ ((WorldServer)this.world).loadedEntities.remove(entity); -+ } -+ // Paper end - world loaded entity list - // Paper start - if (entity instanceof EntityItem) { - itemCounts[k]++; -@@ -627,6 +634,9 @@ public class Chunk implements IChunkAccess { - if (entity.hardCollides()) this.hardCollidingEntities[i].remove(entity); if (!this.entitySlices[i].remove(entity)) { // Paper - optimise hard colliding entities - return; - } -+ // Paper start - world loaded entity list -+ ((WorldServer)this.world).loadedEntities.remove(entity); -+ // Paper end - world loaded entity list - if (entity instanceof EntityItem) { - itemCounts[i]--; - } else if (entity instanceof IInventory) { -@@ -801,6 +811,7 @@ public class Chunk implements IChunkAccess { - this.setNeighbourLoaded(0, 0, this); - this.loadedTicketLevel = true; - // Paper end - neighbour cache -+ ((WorldServer)this.world).onChunkLoad(this); // Paper - optimise entity list iteration - org.bukkit.Server server = this.world.getServer(); - ((WorldServer)this.world).getChunkProvider().addLoadedChunk(this); // Paper - if (server != null) { -@@ -859,6 +870,7 @@ public class Chunk implements IChunkAccess { - this.loadedTicketLevel = false; - this.resetNeighbours(); - // Paper end -+ ((WorldServer)this.world).onChunkUnload(this); // Paper - optimise entity list iteration - } - // CraftBukkit end - -diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index b3785775ecd8e3c13e7829f641f2c1b5fd0d9d47..d9b3aa285a7b187f692088bab320f1de2160300b 100644 ---- a/src/main/java/net/minecraft/server/WorldServer.java -+++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -189,6 +189,25 @@ public class WorldServer extends World { - } - // Paper end - rewrite ticklistserver - -+ // Paper start - Optimize entity list iteration requiring entities be in loaded chunks -+ public final com.destroystokyo.paper.util.maplist.EntityList loadedEntities = new com.destroystokyo.paper.util.maplist.EntityList(); -+ void onChunkLoad(final Chunk chunk) { -+ final com.destroystokyo.paper.util.maplist.EntityList list = chunk.entities; -+ final Entity[] entities = list.getRawData(); -+ for (int i = 0, size = list.size(); i < size; ++i) { -+ this.loadedEntities.add(entities[i]); -+ } -+ } -+ -+ void onChunkUnload(final Chunk chunk) { -+ final com.destroystokyo.paper.util.maplist.EntityList list = chunk.entities; -+ final Entity[] entities = list.getRawData(); -+ for (int i = 0, size = list.size(); i < size; ++i) { -+ this.loadedEntities.remove(entities[i]); -+ } -+ } -+ // Paper end - Optimize entity list iteration requiring entities be in loaded chunks -+ - // Add env and gen to constructor - public WorldServer(MinecraftServer minecraftserver, Executor executor, WorldNBTStorage worldnbtstorage, WorldData worlddata, DimensionManager dimensionmanager, GameProfilerFiller gameprofilerfiller, WorldLoadListener worldloadlistener, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen) { - super(worlddata, dimensionmanager, (world, worldprovider) -> { -@@ -489,14 +508,13 @@ public class WorldServer extends World { - - gameprofilerfiller.exitEnter("regular"); - this.tickingEntities = true; -- ObjectIterator objectiterator = this.entitiesById.int2ObjectEntrySet().iterator(); -+ Iterator entityiterator = this.loadedEntities.iterator(); // Paper - use loaded entity list - change var name to compile fail on usage change, we need to hook remove() calls here - - org.spigotmc.ActivationRange.activateEntities(this); // Spigot - timings.entityTick.startTiming(); // Spigot - TimingHistory.entityTicks += this.globalEntityList.size(); // Paper -- while (objectiterator.hasNext()) { -- Entry entry = (Entry) objectiterator.next(); -- Entity entity1 = (Entity) entry.getValue(); -+ while (entityiterator.hasNext()) { // Paper - use loaded entity list -+ Entity entity1 = entityiterator.next(); // Paper - use loaded entity list - Entity entity2 = entity1.getVehicle(); - - /* CraftBukkit start - We prevent spawning in general, so this butchering is not needed -@@ -532,7 +550,7 @@ public class WorldServer extends World { - gameprofilerfiller.enter("remove"); - if (entity1.dead) { - this.removeEntityFromChunk(entity1); -- objectiterator.remove(); -+ entityiterator.remove(); this.entitiesById.remove(entity1.getId()); // Paper - use loaded entity list - this.unregisterEntity(entity1); - } - -@@ -1445,6 +1463,7 @@ public class WorldServer extends World { - if (entity instanceof EntityInsentient) { - this.navigators.remove(((EntityInsentient) entity).getNavigation()); - } -+ this.loadedEntities.remove(entity); // Paper - loaded entity list - new com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent(entity.getBukkitEntity()).callEvent(); // Paper - fire while valid - entity.valid = false; // CraftBukkit - } -@@ -1514,6 +1533,11 @@ public class WorldServer extends World { - } - // Paper end - entity.shouldBeRemoved = false; // Paper - shouldn't be removed after being re-added -+ // Paper start - loaded entity list -+ if (this.isChunkLoaded(net.minecraft.server.MCUtil.getChunkCoordinate(entity.locX()), net.minecraft.server.MCUtil.getChunkCoordinate(entity.locZ()))) { -+ this.loadedEntities.add(entity); -+ } -+ // Paper end - loaded entity list - new com.destroystokyo.paper.event.entity.EntityAddToWorldEvent(entity.getBukkitEntity()).callEvent(); // Paper - fire while valid - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index ac257d50dea8f42a515f19bbae12ab5680e26bb4..995f706678fa0f4e88078d5a15c62dcac25f5fca 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -1110,16 +1110,16 @@ public class CraftWorld implements World { - - @Override - public List getEntities() { -- List list = new ArrayList(); -+ List list = new ArrayList(world.loadedEntities.size()); // Paper - optimize this call - -- for (Object o : world.entitiesById.values()) { -+ for (Object o : world.loadedEntities) { // Paper - optimize this call - if (o instanceof net.minecraft.server.Entity) { - net.minecraft.server.Entity mcEnt = (net.minecraft.server.Entity) o; - if (mcEnt.shouldBeRemoved) continue; // Paper - Entity bukkitEntity = mcEnt.getBukkitEntity(); - - // Assuming that bukkitEntity isn't null -- if (bukkitEntity != null && bukkitEntity.isValid()) { -+ if (bukkitEntity != null && CraftEntity.canBeSeenByPlugins(bukkitEntity)) { // Paper - optimize this call - list.add(bukkitEntity); - } - } -@@ -1130,16 +1130,16 @@ public class CraftWorld implements World { - - @Override - public List getLivingEntities() { -- List list = new ArrayList(); -+ List list = new ArrayList(world.loadedEntities.size()); // Paper - optimize this call - -- for (Object o : world.entitiesById.values()) { -+ for (Object o : world.loadedEntities) { // Paper - optimize this call - if (o instanceof net.minecraft.server.Entity) { - net.minecraft.server.Entity mcEnt = (net.minecraft.server.Entity) o; - if (mcEnt.shouldBeRemoved) continue; // Paper - Entity bukkitEntity = mcEnt.getBukkitEntity(); - - // Assuming that bukkitEntity isn't null -- if (bukkitEntity != null && bukkitEntity instanceof LivingEntity && bukkitEntity.isValid()) { -+ if (bukkitEntity != null && bukkitEntity instanceof LivingEntity && CraftEntity.canBeSeenByPlugins(bukkitEntity)) { // Paper - optimize this call - list.add((LivingEntity) bukkitEntity); - } - } -@@ -1160,7 +1160,7 @@ public class CraftWorld implements World { - public Collection getEntitiesByClass(Class clazz) { - Collection list = new ArrayList(); - -- for (Object entity: world.entitiesById.values()) { -+ for (Object entity: world.loadedEntities) { // Paper - optimize this call - if (entity instanceof net.minecraft.server.Entity) { - if (((net.minecraft.server.Entity) entity).shouldBeRemoved) continue; // Paper - Entity bukkitEntity = ((net.minecraft.server.Entity) entity).getBukkitEntity(); -@@ -1171,7 +1171,7 @@ public class CraftWorld implements World { - - Class bukkitClass = bukkitEntity.getClass(); - -- if (clazz.isAssignableFrom(bukkitClass) && bukkitEntity.isValid()) { -+ if (clazz.isAssignableFrom(bukkitClass) && CraftEntity.canBeSeenByPlugins(bukkitEntity)) { // Paper - optimize this call - list.add((T) bukkitEntity); - } - } -@@ -1184,7 +1184,7 @@ public class CraftWorld implements World { - public Collection getEntitiesByClasses(Class... classes) { - Collection list = new ArrayList(); - -- for (Object entity: world.entitiesById.values()) { -+ for (Object entity: world.loadedEntities) { // Paper - optimize this call - if (entity instanceof net.minecraft.server.Entity) { - if (((net.minecraft.server.Entity) entity).shouldBeRemoved) continue; // Paper - Entity bukkitEntity = ((net.minecraft.server.Entity) entity).getBukkitEntity(); -@@ -1197,7 +1197,7 @@ public class CraftWorld implements World { - - for (Class clazz : classes) { - if (clazz.isAssignableFrom(bukkitClass)) { -- if (bukkitEntity.isValid()) { -+ if (CraftEntity.canBeSeenByPlugins(bukkitEntity)) { // Paper - optimize this call - list.add(bukkitEntity); - } - break; -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index ff60568ce4320e6ebfa50489a564538b0f57da82..f3771121617ad6ad256562dc72a50f241f530929 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -180,6 +180,18 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { - this.entity = entity; - } - -+ // Paper start -+ // note: this does not check isChunkLoaded, use Entity#isValid to do that -+ public static boolean canBeSeenByPlugins(org.bukkit.entity.Entity entity) { -+ Entity handle = ((CraftEntity)entity).getHandle(); -+ // TODO -+ // isAlive is a dumb choice, given living entities aren't alive (but are in the world) if health < 0 -+ // this needs to be brought up to spigot to fix though, we are NOT breaking api implementation, especially -+ // if no-one's complained. -+ return !handle.shouldBeRemoved && handle.isAlive() && handle.valid; -+ } -+ // Paper end -+ - @Override - public Chunk getChunk() { - net.minecraft.server.Chunk currentChunk = entity.getCurrentChunk(); diff --git a/Spigot-Server-Patches/0503-Use-distance-map-to-optimise-entity-tracker.patch b/Spigot-Server-Patches/0502-Use-distance-map-to-optimise-entity-tracker.patch similarity index 93% rename from Spigot-Server-Patches/0503-Use-distance-map-to-optimise-entity-tracker.patch rename to Spigot-Server-Patches/0502-Use-distance-map-to-optimise-entity-tracker.patch index df38f4969..8eecf7244 100644 --- a/Spigot-Server-Patches/0503-Use-distance-map-to-optimise-entity-tracker.patch +++ b/Spigot-Server-Patches/0502-Use-distance-map-to-optimise-entity-tracker.patch @@ -44,7 +44,7 @@ index 3a88c9a67062eb73ad8257ea786efca7e7e99f65..6d3b34ead9cc95dcc1152dffa8c6c4a8 List list = this.tracker.getPassengers(); diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index bdf835397aa691c41280f65a7785e777791b2891..d460bc62b8d89582457c1b6ab530b0ddc9971526 100644 +index bdf835397aa691c41280f65a7785e777791b2891..3d31f00a22233bd885496d7aac34eb2b634c40e8 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java @@ -120,21 +120,51 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { @@ -173,7 +173,7 @@ index bdf835397aa691c41280f65a7785e777791b2891..d460bc62b8d89582457c1b6ab530b0dd if (entity instanceof EntityPlayer) { EntityPlayer entityplayer = (EntityPlayer) entity; -@@ -1594,7 +1652,48 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1594,7 +1652,37 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { entity.tracker = null; // Paper - We're no longer tracked } @@ -181,15 +181,9 @@ index bdf835397aa691c41280f65a7785e777791b2891..d460bc62b8d89582457c1b6ab530b0dd + private final void processTrackQueue() { + this.world.timings.tracker1.startTiming(); + try { -+ Entity[] entities = this.world.loadedEntities.getRawData(); -+ for (int i = 0, len = this.world.loadedEntities.size(); i < len; ++i) { -+ Entity tracked = entities[i]; ++ for (EntityTracker tracker : this.trackedEntities.values()) { + // update tracker entry -+ EntityTracker tracker = this.trackedEntities.get(tracked.getId()); -+ if (tracker == null) { -+ continue; -+ } -+ tracker.updatePlayers(tracked.getPlayersInTrackRange()); ++ tracker.updatePlayers(tracker.tracker.getPlayersInTrackRange()); + } + } finally { + this.world.timings.tracker1.stopTiming(); @@ -198,13 +192,8 @@ index bdf835397aa691c41280f65a7785e777791b2891..d460bc62b8d89582457c1b6ab530b0dd + + this.world.timings.tracker2.startTiming(); + try { -+ Entity[] entities = this.world.loadedEntities.getRawData(); -+ for (int i = 0, len = this.world.loadedEntities.size(); i < len; ++i) { -+ Entity tracked = entities[i]; -+ EntityTracker tracker = this.trackedEntities.get(tracked.getId()); -+ if (tracker != null) { -+ tracker.trackerEntry.tick(); -+ } ++ for (EntityTracker tracker : this.trackedEntities.values()) { ++ tracker.trackerEntry.tick(); + } + } finally { + this.world.timings.tracker2.stopTiming(); @@ -222,7 +211,7 @@ index bdf835397aa691c41280f65a7785e777791b2891..d460bc62b8d89582457c1b6ab530b0dd List list = Lists.newArrayList(); List list1 = this.world.getPlayers(); -@@ -1662,23 +1761,31 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1662,23 +1750,31 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { PacketDebug.a(this.world, chunk.getPos()); List list = Lists.newArrayList(); List list1 = Lists.newArrayList(); @@ -266,7 +255,7 @@ index bdf835397aa691c41280f65a7785e777791b2891..d460bc62b8d89582457c1b6ab530b0dd Iterator iterator; Entity entity1; -@@ -1716,7 +1823,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1716,7 +1812,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public class EntityTracker { @@ -275,7 +264,7 @@ index bdf835397aa691c41280f65a7785e777791b2891..d460bc62b8d89582457c1b6ab530b0dd private final Entity tracker; private final int trackingDistance; private SectionPosition e; -@@ -1733,6 +1840,42 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1733,6 +1829,42 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.e = SectionPosition.a(entity); } @@ -318,7 +307,7 @@ index bdf835397aa691c41280f65a7785e777791b2891..d460bc62b8d89582457c1b6ab530b0dd public boolean equals(Object object) { return object instanceof PlayerChunkMap.EntityTracker ? ((PlayerChunkMap.EntityTracker) object).tracker.getId() == this.tracker.getId() : false; } -@@ -1829,7 +1972,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1829,7 +1961,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { int j = entity.getEntityType().getChunkRange() * 16; j = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, j); // Paper diff --git a/Spigot-Server-Patches/0504-Optimize-isOutsideRange-to-use-distance-maps.patch b/Spigot-Server-Patches/0503-Optimize-isOutsideRange-to-use-distance-maps.patch similarity index 99% rename from Spigot-Server-Patches/0504-Optimize-isOutsideRange-to-use-distance-maps.patch rename to Spigot-Server-Patches/0503-Optimize-isOutsideRange-to-use-distance-maps.patch index 069e7d1ef..0a9f29790 100644 --- a/Spigot-Server-Patches/0504-Optimize-isOutsideRange-to-use-distance-maps.patch +++ b/Spigot-Server-Patches/0503-Optimize-isOutsideRange-to-use-distance-maps.patch @@ -192,7 +192,7 @@ index 4b341c81fc97076a69aede729008c54674fa7adf..bae9371a1e220f4fc78a3905cad24a2e // Paper start diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index d460bc62b8d89582457c1b6ab530b0ddc9971526..4317d9b98e4a8a994bc7d215aa71489c0de3a14e 100644 +index 3d31f00a22233bd885496d7aac34eb2b634c40e8..b3c9cb67664491c3a8c83a67ac0e79d48561f3fe 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java @@ -130,6 +130,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { diff --git a/Spigot-Server-Patches/0505-Stop-copy-on-write-operations-for-updating-light-dat.patch b/Spigot-Server-Patches/0504-Stop-copy-on-write-operations-for-updating-light-dat.patch similarity index 100% rename from Spigot-Server-Patches/0505-Stop-copy-on-write-operations-for-updating-light-dat.patch rename to Spigot-Server-Patches/0504-Stop-copy-on-write-operations-for-updating-light-dat.patch diff --git a/Spigot-Server-Patches/0506-No-Tick-view-distance-implementation.patch b/Spigot-Server-Patches/0505-No-Tick-view-distance-implementation.patch similarity index 98% rename from Spigot-Server-Patches/0506-No-Tick-view-distance-implementation.patch rename to Spigot-Server-Patches/0505-No-Tick-view-distance-implementation.patch index 9aa4d596b..482f0635c 100644 --- a/Spigot-Server-Patches/0506-No-Tick-view-distance-implementation.patch +++ b/Spigot-Server-Patches/0505-No-Tick-view-distance-implementation.patch @@ -23,7 +23,7 @@ index 4612697569fd6e3683b0e58453b61a9a8d077229..5c8a946d5c895fc2622c7df656cc462c + } } diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 69bfece7d43bc9e0c4cf7f71bffec9a44c2b9a67..2332f126f73d9914ade140fa78f18921787e90b3 100644 +index 750fb07756f7e40b21f8ab0925f2e842aae50f7b..8c1f3290d23795b58a30274c9437dc7dc43fa3a1 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -245,7 +245,51 @@ public class Chunk implements IChunkAccess { @@ -207,7 +207,7 @@ index bae9371a1e220f4fc78a3905cad24a2e7f88771c..9d71c4c455d68bcc82dc56b0706c7305 public CompletableFuture> a(ChunkStatus chunkstatus, PlayerChunkMap playerchunkmap) { diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 4317d9b98e4a8a994bc7d215aa71489c0de3a14e..a3abad95a11be9ff802063e88a5cc7daadb627bb 100644 +index b3c9cb67664491c3a8c83a67ac0e79d48561f3fe..ce7462283873635ad0d3bce2395346ed9c3637a9 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java @@ -71,7 +71,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { @@ -532,7 +532,7 @@ index 4317d9b98e4a8a994bc7d215aa71489c0de3a14e..a3abad95a11be9ff802063e88a5cc7da } protected void addEntity(Entity entity) { -@@ -1829,6 +1959,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1818,6 +1948,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @@ -540,7 +540,7 @@ index 4317d9b98e4a8a994bc7d215aa71489c0de3a14e..a3abad95a11be9ff802063e88a5cc7da private void a(EntityPlayer entityplayer, Packet[] apacket, Chunk chunk) { if (apacket[0] == null) { apacket[0] = new PacketPlayOutMapChunk(chunk, 65535); -@@ -2014,7 +2145,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2003,7 +2134,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(this.tracker.chunkX, this.tracker.chunkZ); PlayerChunk playerchunk = PlayerChunkMap.this.getVisibleChunk(chunkcoordintpair.pair()); @@ -600,7 +600,7 @@ index 899c535c4056cd2375ab8f834f03267d405f4bda..0e6368d0fb3beccb492ae3867fb4e228 if (!this.isClientSide && (i & 1) != 0) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 995f706678fa0f4e88078d5a15c62dcac25f5fca..ee7ae4638981ab372f65734fb560157cc06c18e9 100644 +index ac257d50dea8f42a515f19bbae12ab5680e26bb4..4aafad0762df44990ed9d610a59f3862bd3fe3b0 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -2483,10 +2483,39 @@ public class CraftWorld implements World { diff --git a/Spigot-Server-Patches/0507-Add-villager-reputation-API.patch b/Spigot-Server-Patches/0506-Add-villager-reputation-API.patch similarity index 100% rename from Spigot-Server-Patches/0507-Add-villager-reputation-API.patch rename to Spigot-Server-Patches/0506-Add-villager-reputation-API.patch