Skip to content

Commit 00ef8bd

Browse files
authored
Fix Entity#isTicking and update Paper entity command (#11590)
fixes #10299
1 parent 99f4bb2 commit 00ef8bd

9 files changed

+30
-47
lines changed

patches/server/0009-MC-Utils.patch

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5344,7 +5344,7 @@ index 019228b1809e3816b0b4dfb9f19b8d42876cc240..6c2339d6a93172e25040c4868a3a4747
53445344

53455345
while (objectiterator.hasNext()) {
53465346
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
5347-
index 9cdcab885a915990a679f3fc9ae6885f7d125bfd..c615510f3f59292715bcff1bd9e4e896c9733436 100644
5347+
index 9cdcab885a915990a679f3fc9ae6885f7d125bfd..a970ceab0176d97f9d274ed257c2f86f3b63e430 100644
53485348
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
53495349
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
53505350
@@ -74,6 +74,10 @@ public class ServerChunkCache extends ChunkSource {
@@ -5422,19 +5422,6 @@ index 9cdcab885a915990a679f3fc9ae6885f7d125bfd..c615510f3f59292715bcff1bd9e4e896
54225422
boolean flag = this.distanceManager.runAllUpdates(this.chunkMap);
54235423
boolean flag1 = this.chunkMap.promoteChunkMap();
54245424

5425-
@@ -312,6 +364,12 @@ public class ServerChunkCache extends ChunkSource {
5426-
}
5427-
}
5428-
5429-
+ // Paper start
5430-
+ public boolean isPositionTicking(Entity entity) {
5431-
+ return this.isPositionTicking(ChunkPos.asLong(net.minecraft.util.Mth.floor(entity.getX()) >> 4, net.minecraft.util.Mth.floor(entity.getZ()) >> 4));
5432-
+ }
5433-
+ // Paper end
5434-
+
5435-
public boolean isPositionTicking(long pos) {
5436-
if (!this.level.shouldTickBlocksAt(pos)) {
5437-
return false;
54385425
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
54395426
index f6a3606b972064c4ec78487374e6197c0c447e27..c6ded1ac73ddbc0336000f77c0f99fa20551a0de 100644
54405427
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java

patches/server/0017-Paper-command.patch

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ index 0000000000000000000000000000000000000000..7e9e0ff8639be135bf8575e375cbada5
332332
+}
333333
diff --git a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java
334334
new file mode 100644
335-
index 0000000000000000000000000000000000000000..67fcba634f8183bb33834ac3b2c3dcfb8d87129e
335+
index 0000000000000000000000000000000000000000..9d9d133e0d973ecda1ef1efc872a51ee10463fd1
336336
--- /dev/null
337337
+++ b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java
338338
@@ -0,0 +1,158 @@
@@ -447,7 +447,7 @@ index 0000000000000000000000000000000000000000..67fcba634f8183bb33834ac3b2c3dcfb
447447
+ ChunkPos chunk = e.chunkPosition();
448448
+ info.left++;
449449
+ info.right.put(chunk, info.right.getOrDefault(chunk, 0) + 1);
450-
+ if (!chunkProviderServer.isPositionTicking(e)) {
450+
+ if (!world.isPositionEntityTicking(e.blockPosition())) {
451451
+ nonEntityTicking.merge(key, 1, Integer::sum);
452452
+ }
453453
+ });
@@ -617,7 +617,7 @@ index a61a92078a8bb4979f231c02ef5aa990b8ab57ad..cd9e4bfdb3f335213001ced27540bb7e
617617
this.setPvpAllowed(dedicatedserverproperties.pvp);
618618
this.setFlightAllowed(dedicatedserverproperties.allowFlight);
619619
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
620-
index 2affb23b83e4368a94345b36410f23139f5d36c8..1b66c5173dd37433d895c0d804257141a3a8c588 100644
620+
index e497da2dba83779c4ad1c45cea133bddadf61446..4ec8731a48f81aff33c7d8bcfe00dea263735e48 100644
621621
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
622622
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
623623
@@ -991,6 +991,7 @@ public final class CraftServer implements Server {

patches/server/0024-Remove-Spigot-timings.patch

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ index 9d6be455c3bbcdbcb9d3d24b0bad79f46ba6a8cb..a129ddfe7b00d6abab94437806a5cfb9
153153

154154
@Override
155155
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
156-
index c615510f3f59292715bcff1bd9e4e896c9733436..ccb6f28689a3cf7da4ea323c5dd8f595036c4b43 100644
156+
index a970ceab0176d97f9d274ed257c2f86f3b63e430..4a0fedff38f12ec87905558a100f1772cee03dd4 100644
157157
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
158158
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
159159
@@ -207,13 +207,11 @@ public class ServerChunkCache extends ChunkSource {
@@ -170,7 +170,7 @@ index c615510f3f59292715bcff1bd9e4e896c9733436..ccb6f28689a3cf7da4ea323c5dd8f595
170170
ChunkResult<ChunkAccess> chunkresult = (ChunkResult) completablefuture.join();
171171
ChunkAccess ichunkaccess1 = (ChunkAccess) chunkresult.orElse(null); // CraftBukkit - decompile error
172172

173-
@@ -420,25 +418,19 @@ public class ServerChunkCache extends ChunkSource {
173+
@@ -414,25 +412,19 @@ public class ServerChunkCache extends ChunkSource {
174174
ProfilerFiller gameprofilerfiller = Profiler.get();
175175

176176
gameprofilerfiller.push("purge");
@@ -196,7 +196,7 @@ index c615510f3f59292715bcff1bd9e4e896c9733436..ccb6f28689a3cf7da4ea323c5dd8f595
196196
gameprofilerfiller.pop();
197197
this.clearCache();
198198
}
199-
@@ -531,9 +523,7 @@ public class ServerChunkCache extends ChunkSource {
199+
@@ -525,9 +517,7 @@ public class ServerChunkCache extends ChunkSource {
200200
}
201201

202202
if (this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) {

patches/server/0164-PlayerNaturallySpawnCreaturesEvent.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ index 261943f1f188643793a72bd239dfc5fe604e3b99..985ba48a5ac027d3c3dcd9b710b53748
4040

4141
return true;
4242
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
43-
index ccb6f28689a3cf7da4ea323c5dd8f595036c4b43..d4eb7608a3e40d2da4c427e9b3a2ce916be86df1 100644
43+
index 4a0fedff38f12ec87905558a100f1772cee03dd4..c9efcb6170e9ecc615ab70594954fae24ba46ac4 100644
4444
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
4545
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
46-
@@ -504,6 +504,15 @@ public class ServerChunkCache extends ChunkSource {
46+
@@ -498,6 +498,15 @@ public class ServerChunkCache extends ChunkSource {
4747
List list1;
4848

4949
if (flag && (this.spawnEnemies || this.spawnFriendlies)) {

patches/server/0410-Entity-isTicking.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Subject: [PATCH] Entity#isTicking
55

66

77
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
8-
index 3f0a44db707176c25e306f55fa63da9314d682a1..4a26795d22c0276980f4d0ad266861389d8471a8 100644
8+
index 3f0a44db707176c25e306f55fa63da9314d682a1..fdb56135274b0cdd31e92a81c9fc40be3ad23c37 100644
99
--- a/src/main/java/net/minecraft/world/entity/Entity.java
1010
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
1111
@@ -4739,5 +4739,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -14,7 +14,7 @@ index 3f0a44db707176c25e306f55fa63da9314d682a1..4a26795d22c0276980f4d0ad26686138
1414
}
1515
+
1616
+ public boolean isTicking() {
17-
+ return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this);
17+
+ return ((net.minecraft.server.level.ServerLevel) this.level).isPositionEntityTicking(this.blockPosition());
1818
+ }
1919
// Paper end - Expose entity id counter
2020
}

patches/server/0694-Don-t-tick-markers.patch

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ list is only used in the tick and tickPassenger methods, so we can safely not ad
1010
markers to it. When the config option is set to true, markers are ticked as normal.
1111

1212
diff --git a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java
13-
index 67fcba634f8183bb33834ac3b2c3dcfb8d87129e..777b789fdcdf297309cfb36fc7f77e3fdb6327ca 100644
13+
index 9d9d133e0d973ecda1ef1efc872a51ee10463fd1..f671b74e4179fc29bc600b52e456ba9f78d8bbd6 100644
1414
--- a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java
1515
+++ b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java
1616
@@ -109,7 +109,7 @@ public final class EntityCommand implements PaperSubcommand {
1717
ChunkPos chunk = e.chunkPosition();
1818
info.left++;
1919
info.right.put(chunk, info.right.getOrDefault(chunk, 0) + 1);
20-
- if (!chunkProviderServer.isPositionTicking(e)) {
21-
+ if (!chunkProviderServer.isPositionTicking(e) || (e instanceof net.minecraft.world.entity.Marker && !world.paperConfig().entities.markers.tick)) { // Paper - Configurable marker ticking
20+
- if (!world.isPositionEntityTicking(e.blockPosition())) {
21+
+ if (!world.isPositionEntityTicking(e.blockPosition()) || (e instanceof net.minecraft.world.entity.Marker && !world.paperConfig().entities.markers.tick)) { // Paper - Configurable marker ticking
2222
nonEntityTicking.merge(key, 1, Integer::sum);
2323
}
2424
});

patches/server/1038-Moonrise-optimisation-patches.patch

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26268,7 +26268,7 @@ index 65206fdfa5b94eaca139e433b4865c16b16641f3..bf4463bcb5dc439ac5a3fa08dd60845a
2626826268
}
2626926269
}
2627026270
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
26271-
index 76cb7ffad02dcc27966ca13da6552edbb696e41f..07dde7dbf4d9e1d2f61426e3f1dc3cd5be55f193 100644
26271+
index ea0e972122abd08c2f822f6ff039ac89994e8c20..1d75ad42bfe9324baafb5d60e2fd44ece660a5cd 100644
2627226272
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
2627326273
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
2627426274
@@ -52,7 +52,7 @@ import net.minecraft.world.level.storage.DimensionDataStorage;
@@ -26580,7 +26580,7 @@ index 76cb7ffad02dcc27966ca13da6552edbb696e41f..07dde7dbf4d9e1d2f61426e3f1dc3cd5
2658026580
}
2658126581

2658226582
@Override
26583-
@@ -331,16 +405,7 @@ public class ServerChunkCache extends ChunkSource {
26583+
@@ -331,30 +405,18 @@ public class ServerChunkCache extends ChunkSource {
2658426584
}
2658526585

2658626586
public boolean runDistanceManagerUpdates() { // Paper - public
@@ -26597,10 +26597,6 @@ index 76cb7ffad02dcc27966ca13da6552edbb696e41f..07dde7dbf4d9e1d2f61426e3f1dc3cd5
2659726597
+ return ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.level).moonrise$getChunkTaskScheduler().chunkHolderManager.processTicketUpdates(); // Paper - rewrite chunk system
2659826598
}
2659926599

26600-
// Paper start
26601-
@@ -350,17 +415,14 @@ public class ServerChunkCache extends ChunkSource {
26602-
// Paper end
26603-
2660426600
public boolean isPositionTicking(long pos) {
2660526601
- if (!this.level.shouldTickBlocksAt(pos)) {
2660626602
- return false;
@@ -26621,7 +26617,7 @@ index 76cb7ffad02dcc27966ca13da6552edbb696e41f..07dde7dbf4d9e1d2f61426e3f1dc3cd5
2662126617
this.chunkMap.saveAllChunks(flush);
2662226618
}
2662326619

26624-
@@ -371,17 +433,15 @@ public class ServerChunkCache extends ChunkSource {
26620+
@@ -365,17 +427,15 @@ public class ServerChunkCache extends ChunkSource {
2662526621
}
2662626622

2662726623
public void close(boolean save) throws IOException {
@@ -26642,15 +26638,15 @@ index 76cb7ffad02dcc27966ca13da6552edbb696e41f..07dde7dbf4d9e1d2f61426e3f1dc3cd5
2664226638
ProfilerFiller gameprofilerfiller = Profiler.get();
2664326639

2664426640
gameprofilerfiller.push("purge");
26645-
@@ -406,6 +466,7 @@ public class ServerChunkCache extends ChunkSource {
26641+
@@ -400,6 +460,7 @@ public class ServerChunkCache extends ChunkSource {
2664626642
this.runDistanceManagerUpdates();
2664726643
gameprofilerfiller.popPush("chunks");
2664826644
if (tickChunks) {
2664926645
+ ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.level).moonrise$getPlayerChunkLoader().tick(); // Paper - rewrite chunk system
2665026646
this.tickChunks();
2665126647
this.chunkMap.tick();
2665226648
}
26653-
@@ -432,7 +493,10 @@ public class ServerChunkCache extends ChunkSource {
26649+
@@ -426,7 +487,10 @@ public class ServerChunkCache extends ChunkSource {
2665426650
gameprofilerfiller.push("filteringTickingChunks");
2665526651
this.collectTickingChunks(list);
2665626652
gameprofilerfiller.popPush("shuffleChunks");
@@ -26662,7 +26658,7 @@ index 76cb7ffad02dcc27966ca13da6552edbb696e41f..07dde7dbf4d9e1d2f61426e3f1dc3cd5
2666226658
this.tickChunks(gameprofilerfiller, j, list);
2666326659
gameprofilerfiller.pop();
2666426660
} finally {
26665-
@@ -463,14 +527,26 @@ public class ServerChunkCache extends ChunkSource {
26661+
@@ -457,14 +521,26 @@ public class ServerChunkCache extends ChunkSource {
2666626662
}
2666726663

2666826664
private void collectTickingChunks(List<LevelChunk> chunks) {
@@ -26694,7 +26690,7 @@ index 76cb7ffad02dcc27966ca13da6552edbb696e41f..07dde7dbf4d9e1d2f61426e3f1dc3cd5
2669426690
}
2669526691

2669626692
private void tickChunks(ProfilerFiller profiler, long timeDelta, List<LevelChunk> chunks) {
26697-
@@ -512,7 +588,7 @@ public class ServerChunkCache extends ChunkSource {
26693+
@@ -506,7 +582,7 @@ public class ServerChunkCache extends ChunkSource {
2669826694
NaturalSpawner.spawnForChunk(this.level, chunk, spawnercreature_d, list1);
2669926695
}
2670026696

@@ -26703,7 +26699,7 @@ index 76cb7ffad02dcc27966ca13da6552edbb696e41f..07dde7dbf4d9e1d2f61426e3f1dc3cd5
2670326699
this.level.tickChunk(chunk, k);
2670426700
}
2670526701
}
26706-
@@ -525,11 +601,13 @@ public class ServerChunkCache extends ChunkSource {
26702+
@@ -519,11 +595,13 @@ public class ServerChunkCache extends ChunkSource {
2670726703
}
2670826704

2670926705
private void getFullChunk(long pos, Consumer<LevelChunk> chunkConsumer) {
@@ -26721,7 +26717,7 @@ index 76cb7ffad02dcc27966ca13da6552edbb696e41f..07dde7dbf4d9e1d2f61426e3f1dc3cd5
2672126717

2672226718
}
2672326719

26724-
@@ -623,6 +701,12 @@ public class ServerChunkCache extends ChunkSource {
26720+
@@ -617,6 +695,12 @@ public class ServerChunkCache extends ChunkSource {
2672526721
this.chunkMap.setServerViewDistance(watchDistance);
2672626722
}
2672726723

@@ -26734,7 +26730,7 @@ index 76cb7ffad02dcc27966ca13da6552edbb696e41f..07dde7dbf4d9e1d2f61426e3f1dc3cd5
2673426730
public void setSimulationDistance(int simulationDistance) {
2673526731
this.distanceManager.updateSimulationDistance(simulationDistance);
2673626732
}
26737-
@@ -714,21 +798,19 @@ public class ServerChunkCache extends ChunkSource {
26733+
@@ -708,21 +792,19 @@ public class ServerChunkCache extends ChunkSource {
2673826734
@Override
2673926735
// CraftBukkit start - process pending Chunk loadCallback() and unloadCallback() after each run task
2674026736
public boolean pollTask() {
@@ -28416,7 +28412,7 @@ index 50040c497a819cd1229042ab3cb057d34a32cacc..1f9c436a632e4f110be61cf76fcfc3b7
2841628412
+ // Paper end - block counting
2841728413
}
2841828414
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
28419-
index ed276c599890d9db11130d8ae0844ca364a824a6..86e3d37ac9b4d5efe240c07289f88a070543b30d 100644
28415+
index 29b2a3ad15f6ce802f1d1d16d519c674f5920b37..7bc32f2e7d8cd8aea6151f73420af91a9413e93a 100644
2842028416
--- a/src/main/java/net/minecraft/world/entity/Entity.java
2842128417
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
2842228418
@@ -176,7 +176,7 @@ import org.bukkit.event.player.PlayerTeleportEvent;

patches/server/1053-Optional-per-player-mob-spawns.patch

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ index f1999729cd1c00071c5e1835ee49ea5fcafa7b05..4896c3ba81ead769972fa9efdbe563d4
3737
// Paper end
3838

3939
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
40-
index 07dde7dbf4d9e1d2f61426e3f1dc3cd5be55f193..12f49deea35ecbaea08869332982c00af7cf99d9 100644
40+
index 1d75ad42bfe9324baafb5d60e2fd44ece660a5cd..6a59b3b98c99e5b1d8a2d4f5970fc782bdd0b29c 100644
4141
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
4242
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
43-
@@ -495,7 +495,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
43+
@@ -489,7 +489,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
4444
gameprofilerfiller.popPush("shuffleChunks");
4545
// Paper start - chunk tick iteration optimisation
4646
this.shuffleRandom.setSeed(this.level.random.nextLong());
@@ -49,7 +49,7 @@ index 07dde7dbf4d9e1d2f61426e3f1dc3cd5be55f193..12f49deea35ecbaea08869332982c00a
4949
// Paper end - chunk tick iteration optimisation
5050
this.tickChunks(gameprofilerfiller, j, list);
5151
gameprofilerfiller.pop();
52-
@@ -552,7 +552,19 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
52+
@@ -546,7 +546,19 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
5353
private void tickChunks(ProfilerFiller profiler, long timeDelta, List<LevelChunk> chunks) {
5454
profiler.popPush("naturalSpawnCount");
5555
int j = this.distanceManager.getNaturalSpawnChunkCount();

patches/server/1054-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ index 4896c3ba81ead769972fa9efdbe563d4006e4401..5b3a886c624b36557cbfaccdc3fb05a4
3737
}
3838
// Paper end
3939
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
40-
index 12f49deea35ecbaea08869332982c00af7cf99d9..3c711e1df57ac5b0f8795ebb12299d275792b1d4 100644
40+
index 6a59b3b98c99e5b1d8a2d4f5970fc782bdd0b29c..381b2535d598094990af532b72b15eadc13208ad 100644
4141
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
4242
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
43-
@@ -558,7 +558,17 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
43+
@@ -552,7 +552,17 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
4444
if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled
4545
// re-set mob counts
4646
for (ServerPlayer player : this.level.players) {

0 commit comments

Comments
 (0)