Files
Purpur/patches/server/0135-Configurable-daylight-cycle.patch
William Blake Galbreath d652384e4a Updated Upstream (Paper)
Upstream has released updates that appears to apply and compile correctly

Paper Changes:
1c446c22 Fix CME when adding a passenger during Spawn events (#4616)
f3927b25 Fix "Not a string" Map Conversion spam - Fixes #3901
1b64536b Clarify the JavaDocs for Entity.getEntitySpawnReason() in response to #4361
6b22219c Remove unnecessary space for provided plugins, fixes #4608
3ece9036 [CI-SKIP] [Auto] Rebuild Patches
551fac7e Fix deop kicking non-whitelisted player when white list is not enabled
faf8eb03 Updated Upstream (CraftBukkit) (#4622)
2020-10-10 16:41:13 -05:00

81 lines
4.0 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
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<PacketListenerPlayOut> {
// 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);