From 86a07695dc86145c8be3ee3800ae54cf742e2110 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 10 Oct 2020 16:39:55 -0500 Subject: [PATCH] Configurable daylight cycle --- .../0136-Configurable-daylight-cycle.patch | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 patches/server/0136-Configurable-daylight-cycle.patch diff --git a/patches/server/0136-Configurable-daylight-cycle.patch b/patches/server/0136-Configurable-daylight-cycle.patch new file mode 100644 index 000000000..ed5b821ee --- /dev/null +++ b/patches/server/0136-Configurable-daylight-cycle.patch @@ -0,0 +1,80 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Sat, 10 Oct 2020 14:29:55 -0500 +Subject: [PATCH] Configurable daylight cycle + + +diff --git a/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java b/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java +index 15af5927f3..c9c2e9774a 100644 +--- a/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java ++++ b/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java +@@ -11,7 +11,7 @@ public class PacketPlayOutUpdateTime implements Packet { + // Time of Day in ticks + // If negative the sun will stop moving at the Math.abs of the time + // Displayed in the debug screen (F3) +- private long b; ++ private long b; public void setPlayerTime(long time) { this.b = time; } // Purpur + + public PacketPlayOutUpdateTime() {} + +diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java +index 0fb41962c8..62b1f09f82 100644 +--- a/src/main/java/net/minecraft/server/WorldServer.java ++++ b/src/main/java/net/minecraft/server/WorldServer.java +@@ -90,6 +90,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { + private final EnderDragonBattle dragonBattle; + private final StructureManager structureManager; + private final boolean Q; ++ private double fakeTime; // Purpur + + + // CraftBukkit start +@@ -371,6 +372,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { + this.getServer().addWorld(this.getWorld()); // CraftBukkit + + this.asyncChunkTaskManager = new com.destroystokyo.paper.io.chunk.ChunkTaskManager(this); // Paper ++ this.fakeTime = this.worldDataServer.getDayTime(); // Purpur + } + + // Tuinity start - optimise collision +@@ -1008,7 +1010,21 @@ public class WorldServer extends World implements GeneratorAccessSeed { + this.nextTickListBlock.nextTick(); // Paper + this.nextTickListFluid.nextTick(); // Paper + this.worldDataServer.u().a(this.server, i); +- if (this.worldData.q().getBoolean(GameRules.DO_DAYLIGHT_CYCLE)) { ++ // Purpur start ++ WorldServer world = this.worldDataServer.world; ++ if (world.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE)) { ++ double incrementTimeBy = 12000.0D / (double) (world.isDay() ? world.purpurConfig.daytimeTicks : world.purpurConfig.nighttimeTicks); ++ if (incrementTimeBy != 1.0D) { ++ this.fakeTime += incrementTimeBy; ++ this.setDayTime((long) this.fakeTime); ++ PacketPlayOutUpdateTime packet = new PacketPlayOutUpdateTime(world.getTime(), world.getDayTime(), true); ++ for (EntityHuman entityhuman : world.players) { ++ EntityPlayer player = (EntityPlayer) entityhuman; ++ packet.setPlayerTime(player.getPlayerTime()); ++ player.playerConnection.sendPacket(packet); ++ } ++ } else ++ // Purpur end + this.setDayTime(this.worldData.getDayTime() + 1L); + } + +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 595a64aee5..b7de516378 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -114,6 +114,13 @@ public class PurpurWorldConfig { + } + } + ++ public int daytimeTicks = 12000; ++ public int nighttimeTicks = 12000; ++ private void daytimeCycleSettings() { ++ daytimeTicks = getInt("gameplay-mechanics.daylight-cycle-ticks.daytime", daytimeTicks); ++ nighttimeTicks = getInt("gameplay-mechanics.daylight-cycle-ticks.nighttime", nighttimeTicks); ++ } ++ + public int entityLifeSpan = 0; + private void entitySettings() { + entityLifeSpan = getInt("gameplay-mechanics.entity-lifespan", entityLifeSpan);