diff --git a/fabric/src/main/java/ca/spottedleaf/moonrise/fabric/FabricHooks.java b/fabric/src/main/java/ca/spottedleaf/moonrise/fabric/FabricHooks.java index 96bb532..d27f181 100644 --- a/fabric/src/main/java/ca/spottedleaf/moonrise/fabric/FabricHooks.java +++ b/fabric/src/main/java/ca/spottedleaf/moonrise/fabric/FabricHooks.java @@ -273,7 +273,7 @@ public final class FabricHooks extends BaseChunkSystemHooks implements PlatformH } @Override - public boolean addTicketForEnderPearls() { + public boolean addTicketForEnderPearls(final ServerLevel world) { return true; } } diff --git a/neoforge/src/main/java/ca/spottedleaf/moonrise/neoforge/NeoForgeHooks.java b/neoforge/src/main/java/ca/spottedleaf/moonrise/neoforge/NeoForgeHooks.java index 6efff26..ff43b3c 100644 --- a/neoforge/src/main/java/ca/spottedleaf/moonrise/neoforge/NeoForgeHooks.java +++ b/neoforge/src/main/java/ca/spottedleaf/moonrise/neoforge/NeoForgeHooks.java @@ -288,7 +288,7 @@ public final class NeoForgeHooks extends BaseChunkSystemHooks implements Platfor } @Override - public boolean addTicketForEnderPearls() { + public boolean addTicketForEnderPearls(final ServerLevel world) { return true; } } diff --git a/src/main/java/ca/spottedleaf/moonrise/common/PlatformHooks.java b/src/main/java/ca/spottedleaf/moonrise/common/PlatformHooks.java index 3f55b5c..654a84e 100644 --- a/src/main/java/ca/spottedleaf/moonrise/common/PlatformHooks.java +++ b/src/main/java/ca/spottedleaf/moonrise/common/PlatformHooks.java @@ -102,7 +102,7 @@ public interface PlatformHooks extends ChunkSystemHooks { public int modifyEntityTrackingRange(final Entity entity, final int currentRange); - public boolean addTicketForEnderPearls(); + public boolean addTicketForEnderPearls(final ServerLevel world); public static final class Holder { private Holder() { diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/server/ServerEntityLookup.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/server/ServerEntityLookup.java index e472520..5f2deeb 100644 --- a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/server/ServerEntityLookup.java +++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/server/ServerEntityLookup.java @@ -30,10 +30,12 @@ public final class ServerEntityLookup extends EntityLookup { // been implemented, but I don't think Vanilla has proper entity add/remove hooks like we do. Fixes MC-297591 private static final TicketType ENDER_PEARL_TICKER = ChunkSystemTicketType.create("chunk_system:ender_pearl_ticker", null); private final Long2IntOpenHashMap enderPearlChunkCount = new Long2IntOpenHashMap(); + private final boolean keepEnderPearlsTicking; public ServerEntityLookup(final ServerLevel world, final LevelCallback worldCallback) { super(world, worldCallback); this.serverWorld = world; + this.keepEnderPearlsTicking = PlatformHooks.get().addTicketForEnderPearls(world); } @Override @@ -136,6 +138,10 @@ public final class ServerEntityLookup extends EntityLookup { } private void addEnderPearl(final long coordinate) { + if (!this.keepEnderPearlsTicking) { + return; + } + final int oldCount = this.enderPearlChunkCount.addTo(coordinate, 1); if (oldCount != 0) { return; @@ -145,6 +151,10 @@ public final class ServerEntityLookup extends EntityLookup { } private void removeEnderPearl(final long coordinate) { + if (!this.keepEnderPearlsTicking) { + return; + } + final int oldCount = this.enderPearlChunkCount.addTo(coordinate, -1); if (oldCount != 1) { return;