From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Noah van der Aa Date: Fri, 7 Jan 2022 11:58:26 +0100 Subject: [PATCH] Don't tick markers Fixes https://github.com/PaperMC/Paper/issues/7276 and https://github.com/PaperMC/Paper/issues/8118 by using a config option that, when set to false, does not add markers to the entity tick list at all and ignores them in Spigot's activation range checks. The entity tick list is only used in the tick and tickPassenger methods, so we can safely not add the markers to it. When the config option is set to true, markers are ticked as normal. diff --git a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java index ff99336e0b8131ae161cfa5c4fc83c6905e3dbc8..5f43aedc6596e2b1ac7af9711515714752c262e3 100644 --- a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java +++ b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java @@ -109,7 +109,7 @@ public final class EntityCommand implements PaperSubcommand { ChunkPos chunk = e.chunkPosition(); info.left++; info.right.put(chunk, info.right.getOrDefault(chunk, 0) + 1); - if (!chunkProviderServer.isPositionTicking(e)) { + if (!chunkProviderServer.isPositionTicking(e) || (e instanceof net.minecraft.world.entity.Marker && !world.paperConfig().entities.markers.tick)) { // Configurable marker ticking nonEntityTicking.merge(key, 1, Integer::sum); } }); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java index cae00701c5dbf40be07ea5c2d01ea8929f4fa216..646fb7e4a83e9f9a1b78d8c70f3518b977572fde 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -2605,6 +2605,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } public void onTickingStart(Entity entity) { + if (entity instanceof net.minecraft.world.entity.Marker && !paperConfig().entities.markers.tick) return; // Paper - Configurable marker ticking ServerLevel.this.entityTickList.add(entity); } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java index 3495981419a75efe42bce45a89a32378dd6b8372..2d31752478636bd21bbff5b430e5acb76b5d91c2 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -213,8 +213,14 @@ public class ActivationRange // Paper start java.util.List entities = world.getEntities((Entity)null, ActivationRange.maxBB, null); + boolean tickMarkers = world.paperConfig().entities.markers.tick; // Paper - configurable marker ticking for (int i = 0; i < entities.size(); i++) { Entity entity = entities.get(i); + // Paper start - configurable marker ticking + if (!tickMarkers && entity instanceof net.minecraft.world.entity.Marker) { + continue; + } + // Paper end - configurable marker ticking ActivationRange.activateEntity(entity); } // Paper end