From 335be8910e1a48be0c5675aa60603aa71aeeeea1 Mon Sep 17 00:00:00 2001 From: Amine Kacimi Date: Sun, 21 Jun 2026 22:04:38 +0100 Subject: [PATCH] fix configurable daylight cycle not working (#1788) --- .../features/0001-Ridables.patch | 4 +-- .../server/level/ServerLevel.java.patch | 17 ----------- .../world/clock/ServerClockManager.java.patch | 30 ++++++++++--------- 3 files changed, 18 insertions(+), 33 deletions(-) diff --git a/purpur-server/minecraft-patches/features/0001-Ridables.patch b/purpur-server/minecraft-patches/features/0001-Ridables.patch index b16433f0a..0847aa5ec 100644 --- a/purpur-server/minecraft-patches/features/0001-Ridables.patch +++ b/purpur-server/minecraft-patches/features/0001-Ridables.patch @@ -30,10 +30,10 @@ index 80e694615ff8f81c8cbda9684ef96cce65f5abd7..f9cf876c5031e20b209c5de991982dbe net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = level.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers profiler.push(() -> level + " " + level.dimension().identifier()); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 72ce2b03561af86db2059dfa05f381278af56f64..ca39cddc5d7bccbea4ce8ed95354c7529dd93072 100644 +index 9a5be73c618c4c8572aad4ca2673def65658eeee..50a1fe6bd9f7e6cf79e48e1420fbe153c902bddb 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -239,6 +239,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet +@@ -237,6 +237,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet private static final org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry(); public final org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer persistentDataContainer = new org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer(DATA_TYPE_REGISTRY); private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch index 9dda6c946..a2ebd9c91 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch @@ -1,14 +1,5 @@ --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -220,6 +_,8 @@ - private final StructureManager structureManager; - private final StructureCheck structureCheck; - private final boolean tickTime; -+ private double preciseTime; // Purpur - Configurable daylight cycle -+ private boolean forceTime; // Purpur - Configurable daylight cycle - private final LevelDebugSynchronizers debugSynchronizers = new LevelDebugSynchronizers(this); - - // CraftBukkit start @@ -646,8 +_,25 @@ // CraftBukkit end this.tickTime = tickTime; @@ -36,14 +27,6 @@ ChunkGenerator generator = levelStem.generator(); // CraftBukkit start // Paper start - per-world time -@@ -741,6 +_,7 @@ - this.chunkDataController = new ca.spottedleaf.moonrise.patches.chunk_system.io.datacontroller.ChunkDataController((ServerLevel)(Object)this, this.chunkTaskScheduler); - // Paper end - rewrite chunk system - this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit -+ this.preciseTime = this.serverLevelData.getGameTime(); // Purpur - Configurable daylight cycle - } - - // Paper start @@ -809,7 +_,7 @@ } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/clock/ServerClockManager.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/clock/ServerClockManager.java.patch index 17784c292..69470ccc8 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/clock/ServerClockManager.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/clock/ServerClockManager.java.patch @@ -1,17 +1,19 @@ --- a/net/minecraft/world/clock/ServerClockManager.java +++ b/net/minecraft/world/clock/ServerClockManager.java -@@ -149,12 +_,12 @@ - - public ClientboundSetTimePacket createFullSyncPacket() { - // Paper start - per-player time -- return this.createFullSyncPacket(null); -+ return this.createFullSyncPacket(null); // Purpur - TODO: Configurable daylight cycle - } - - public ClientboundSetTimePacket createFullSyncPacket(final net.minecraft.server.level.ServerPlayer player) { - final Map, ClockNetworkState> updates = new HashMap<>(this.clocks.size()); -- this.clocks.forEach((clock, instance) -> updates.put(clock, this.packNetworkState(clock, instance, player))); -+ this.clocks.forEach((clock, instance) -> updates.put(clock, this.packNetworkState(clock, instance, player))); // Purpur - TODO: Configurable daylight cycle - return new ClientboundSetTimePacket(this.getGameTime(), updates); - // Paper end - per-player time +@@ -70,7 +_,15 @@ + public void tick() { + boolean advanceTime = this.advanceTime(); // Paper - per-world time + if (advanceTime) { +- this.clocks.values().forEach(ServerClockManager.ClockInstance::tick); ++ this.clocks.forEach(((worldClockHolder, clockInstance) -> { // Purpur start - Configurable daylight cycle ++ ServerLevel l = level != null ? level : server.overworld(); ++ int incrementTicks = 12000 / (l.isBrightOutside() ? l.purpurConfig.daytimeTicks : l.purpurConfig.nighttimeTicks); ++ float rate = clockInstance.rate; ++ clockInstance.rate *= incrementTicks; ++ clockInstance.tick(); ++ clockInstance.rate = rate; ++ this.broadcastUpdates(worldClockHolder, clockInstance); ++ })); // Purpur end - Configurable daylight cycle + this.setDirty(); + } }