Fix daylight cycle patch

This commit is contained in:
William Blake Galbreath
2021-06-30 02:03:51 -05:00
parent 545766cf6b
commit 34c829547a
3 changed files with 32 additions and 43 deletions

View File

@@ -18,56 +18,45 @@ index 689ad22925b2561f7c8db961743eb1f821dbb25f..fa3c960992cc240161817e54659d83fe
public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) {
this.gameTime = time % 192000; // Paper - fix guardian beam
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 13bee6ce45fd718484a9cf08645556717c9934e8..dbdaadfaeea555904556136a7cca02aa59b85369 100644
index 13bee6ce45fd718484a9cf08645556717c9934e8..07e6d7b7a6d275010797c991be977d6136478c8b 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -55,6 +55,7 @@ import net.minecraft.network.protocol.game.ClientboundExplodePacket;
import net.minecraft.network.protocol.game.ClientboundLevelEventPacket;
import net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket;
import net.minecraft.network.protocol.game.ClientboundSetDefaultSpawnPositionPacket;
+import net.minecraft.network.protocol.game.ClientboundSetTimePacket;
import net.minecraft.network.protocol.game.ClientboundSoundEntityPacket;
import net.minecraft.network.protocol.game.ClientboundSoundPacket;
import net.minecraft.network.protocol.game.DebugPackets;
@@ -205,6 +206,8 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
@@ -201,6 +201,7 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
final Int2ObjectMap<EnderDragonPart> dragonParts;
private final StructureFeatureManager structureFeatureManager;
private final boolean tickTime;
+ private double fakeTime; // Purpur
// Tuinity start - execute chunk tasks mid tick
public long lastMidTickExecuteFailure;
// Tuinity end - execute chunk tasks mid tick
+ private double fakeTime; // Purpur
+
// CraftBukkit start
private int tickPosition;
public final LevelStorageSource.LevelStorageAccess convertable;
@@ -578,6 +581,7 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
@@ -578,6 +579,7 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit
this.asyncChunkTaskManager = new com.destroystokyo.paper.io.chunk.ChunkTaskManager(this); // Paper
+ this.fakeTime = this.serverLevelData.getDayTime();
+ this.fakeTime = this.serverLevelData.getDayTime(); // Purpur
}
// Tuinity start - optimise collision
@@ -763,9 +767,20 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
// CraftBukkit start
long l = this.levelData.getDayTime() + 24000L;
TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (l - l % 24000L) - this.getDayTime());
+ ServerLevel level = this.serverLevelData.world;
if (this.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) {
getCraftServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
+ double incrementTimeBy = 12000.0D / (double) (level.isDay() ? level.purpurConfig.daytimeTicks : level.purpurConfig.nighttimeTicks);
+ if (incrementTimeBy != 1.0D) {
+ this.fakeTime += incrementTimeBy;
+ this.setDayTime(this.fakeTime);
+ ClientboundSetTimePacket packet = new ClientboundSetTimePacket(level.getGameTime(), level.getDayTime(), true);
+ for (ServerPlayer player : level.players) {
+ packet.setDayTime(player.getPlayerTime());
+ player.connection.send(packet);
+ }
+ } else
this.setDayTime(this.getDayTime() + event.getSkipAmount());
}
@@ -869,6 +871,18 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
this.liquidTicks.nextTick(); // Paper
this.serverLevelData.getScheduledEvents().tick(this.server, i);
if (this.levelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) {
+ // Purpur start
+ double incrementTimeBy = 12000.0D / (double) (isDay() ? this.purpurConfig.daytimeTicks : this.purpurConfig.nighttimeTicks);
+ if (incrementTimeBy != 1.0D) {
+ this.fakeTime += incrementTimeBy;
+ this.setDayTime(this.fakeTime);
+ net.minecraft.network.protocol.game.ClientboundSetTimePacket packet = new net.minecraft.network.protocol.game.ClientboundSetTimePacket(getGameTime(), getDayTime(), true);
+ for (ServerPlayer player : this.players) {
+ packet.setDayTime(player.getPlayerTime());
+ player.connection.send(packet);
+ }
+ } else
+ // Purpur end
this.setDayTime(this.levelData.getDayTime() + 1L);
}
@@ -877,6 +892,12 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
@@ -877,6 +891,12 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
public void setDayTime(long timeOfDay) {
this.serverLevelData.setDayTime(timeOfDay);

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Config for skipping night
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index dbdaadfaeea555904556136a7cca02aa59b85369..04b9a36d978b085d9cb35030c6e6395e41c8c758 100644
index 07e6d7b7a6d275010797c991be977d6136478c8b..f94c1b943488806d1336bd28ac9e8efd9e1fedbd 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -763,7 +763,7 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
@@ -761,7 +761,7 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
// CraftBukkit end
i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Make lightning rod range configurable
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 04b9a36d978b085d9cb35030c6e6395e41c8c758..c4d583c21cd95e02ff04dfa7cdd3ed1a001ee10a 100644
index f94c1b943488806d1336bd28ac9e8efd9e1fedbd..84febe41f4b1bb8a7117ed4212b10388e4eff9fe 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1045,7 +1045,7 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
@@ -1044,7 +1044,7 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl
return villageplacetype == PoiType.LIGHTNING_ROD;
}, (blockposition1) -> {
return blockposition1.getY() == this.getLevel().getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1;