mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-20 09:57:43 +01:00
Fixes #760
Changed to use the inbuilt SetTimePacket in the normal server tick. Also changed some logic around to make the feature slightly more optimized.
This commit is contained in:
@@ -17,58 +17,76 @@ index 689ad22925b2561f7c8db961743eb1f821dbb25f..fa3c960992cc240161817e54659d83fe
|
|||||||
|
|
||||||
public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) {
|
public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) {
|
||||||
this.gameTime = time % 192000; // Paper - fix guardian beam
|
this.gameTime = time % 192000; // Paper - fix guardian beam
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
|
index 70dfa4d3b7a2c9b2a47000bf26100f174ab67d46..9e62e7ba26648d3ffa393f47a1de1d14182ceb36 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
|
@@ -1583,7 +1583,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
|
long worldTime = world.getGameTime();
|
||||||
|
final ClientboundSetTimePacket worldPacket = new ClientboundSetTimePacket(worldTime, dayTime, doDaylight);
|
||||||
|
for (Player entityhuman : world.players()) {
|
||||||
|
- if (!(entityhuman instanceof ServerPlayer) || (tickCount + entityhuman.getId()) % 20 != 0) {
|
||||||
|
+ if (!(entityhuman instanceof ServerPlayer) || (!world.isForceTime() && (tickCount + entityhuman.getId()) % 20 != 0)) { // Purpur
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ServerPlayer entityplayer = (ServerPlayer) entityhuman;
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
index e0d2446a3e203a8980f2b4a8d45f677f5d7a7698..6742a56db677f46004ea8c54e724bc5f2c8b4e00 100644
|
index e0d2446a3e203a8980f2b4a8d45f677f5d7a7698..5e027260743202b69ce348ef5cd04709eca689b0 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -206,6 +206,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -206,6 +206,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
private final StructureFeatureManager structureFeatureManager;
|
private final StructureFeatureManager structureFeatureManager;
|
||||||
private final StructureCheck structureCheck;
|
private final StructureCheck structureCheck;
|
||||||
private final boolean tickTime;
|
private final boolean tickTime;
|
||||||
+ private double fakeTime; // Purpur
|
+ private double preciseTime; // Purpur
|
||||||
|
+ private boolean forceTime; // Purpur
|
||||||
// Paper start - execute chunk tasks mid tick
|
// Paper start - execute chunk tasks mid tick
|
||||||
public long lastMidTickExecuteFailure;
|
public long lastMidTickExecuteFailure;
|
||||||
// Paper end - execute chunk tasks mid tick
|
// Paper end - execute chunk tasks mid tick
|
||||||
@@ -567,6 +568,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -567,6 +569,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit
|
this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit
|
||||||
|
|
||||||
this.asyncChunkTaskManager = new com.destroystokyo.paper.io.chunk.ChunkTaskManager(this); // Paper
|
this.asyncChunkTaskManager = new com.destroystokyo.paper.io.chunk.ChunkTaskManager(this); // Paper
|
||||||
+ this.fakeTime = this.serverLevelData.getDayTime(); // Purpur
|
+ this.preciseTime = this.serverLevelData.getDayTime(); // Purpur
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWeatherParameters(int clearDuration, int rainDuration, boolean raining, boolean thundering) {
|
public void setWeatherParameters(int clearDuration, int rainDuration, boolean raining, boolean thundering) {
|
||||||
@@ -719,6 +721,18 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -719,6 +722,13 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
this.serverLevelData.setGameTime(i);
|
this.serverLevelData.setGameTime(i);
|
||||||
this.serverLevelData.getScheduledEvents().tick(this.server, i);
|
this.serverLevelData.getScheduledEvents().tick(this.server, i);
|
||||||
if (this.levelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) {
|
if (this.levelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) {
|
||||||
+ // Purpur start
|
+ // Purpur start
|
||||||
+ double incrementTimeBy = 12000.0D / (double) (isDay() ? this.purpurConfig.daytimeTicks : this.purpurConfig.nighttimeTicks);
|
+ int incrementTicks = isDay() ? this.purpurConfig.daytimeTicks : this.purpurConfig.nighttimeTicks;
|
||||||
+ if (incrementTimeBy != 1.0D) {
|
+ if (incrementTicks != 12000) {
|
||||||
+ this.fakeTime += incrementTimeBy;
|
+ this.preciseTime += 12000 / (double) incrementTicks;
|
||||||
+ this.setDayTime(this.fakeTime);
|
+ this.setDayTime(this.preciseTime);
|
||||||
+ 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
|
+ } else
|
||||||
+ // Purpur end
|
+ // Purpur end
|
||||||
this.setDayTime(this.levelData.getDayTime() + 1L);
|
this.setDayTime(this.levelData.getDayTime() + 1L);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -727,6 +741,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -727,7 +737,21 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
|
|
||||||
public void setDayTime(long timeOfDay) {
|
public void setDayTime(long timeOfDay) {
|
||||||
this.serverLevelData.setDayTime(timeOfDay);
|
this.serverLevelData.setDayTime(timeOfDay);
|
||||||
+ // Purpur start
|
+ // Purpur start
|
||||||
+ this.fakeTime = timeOfDay;
|
+ this.preciseTime = timeOfDay;
|
||||||
+ }
|
+ this.forceTime = false;
|
||||||
|
}
|
||||||
+ public void setDayTime(double i) {
|
+ public void setDayTime(double i) {
|
||||||
+ this.serverLevelData.setDayTime((long) i);
|
+ this.serverLevelData.setDayTime((long) i);
|
||||||
|
+ this.forceTime = true;
|
||||||
+ // Purpur end
|
+ // Purpur end
|
||||||
}
|
+ }
|
||||||
|
+
|
||||||
|
+ // Purpur start
|
||||||
|
+ public boolean isForceTime() {
|
||||||
|
+ return this.forceTime;
|
||||||
|
+ }
|
||||||
|
+ // Purpur end
|
||||||
|
|
||||||
public void tickCustomSpawners(boolean spawnMonsters, boolean spawnAnimals) {
|
public void tickCustomSpawners(boolean spawnMonsters, boolean spawnAnimals) {
|
||||||
|
Iterator iterator = this.customSpawners.iterator();
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
||||||
index 166d0a44bb5e9f690c740fb278a49471507de8f3..bc7753f9d7b2c6833916a7a7aef97e920a73bac9 100644
|
index 166d0a44bb5e9f690c740fb278a49471507de8f3..bc7753f9d7b2c6833916a7a7aef97e920a73bac9 100644
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
||||||
|
|||||||
@@ -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
|
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
index 6742a56db677f46004ea8c54e724bc5f2c8b4e00..95a2455f53d2615bdc0e7eb8b5366f9a3e369cf5 100644
|
index 5e027260743202b69ce348ef5cd04709eca689b0..fca42bb14e41e7e853af83a2f4b37d586b68c6fa 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -607,7 +607,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -608,7 +608,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
|
int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
|
||||||
long j;
|
long j;
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
index 95a2455f53d2615bdc0e7eb8b5366f9a3e369cf5..2eba2af9bb3fb0aaa9b2f5af6ae5fd207e1db93d 100644
|
index fca42bb14e41e7e853af83a2f4b37d586b68c6fa..474bb004678d9482a3fc5c00b2bcf3f3a293f217 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -896,7 +896,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -900,7 +900,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
return villageplacetype == PoiType.LIGHTNING_ROD;
|
return villageplacetype == PoiType.LIGHTNING_ROD;
|
||||||
}, (blockposition1) -> {
|
}, (blockposition1) -> {
|
||||||
return blockposition1.getY() == this.getLevel().getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1;
|
return blockposition1.getY() == this.getLevel().getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1;
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Customizable sleeping actionbar messages
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
index 2eba2af9bb3fb0aaa9b2f5af6ae5fd207e1db93d..40466cdbd97228662a1eeb3bb08e8172bf344410 100644
|
index 474bb004678d9482a3fc5c00b2bcf3f3a293f217..5a42fde11c219a1572bf31663487ff1fff0d1312 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -945,11 +945,29 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -949,11 +949,29 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
if (this.canSleepThroughNights()) {
|
if (this.canSleepThroughNights()) {
|
||||||
if (!this.getServer().isSingleplayer() || this.getServer().isPublished()) {
|
if (!this.getServer().isSingleplayer() || this.getServer().isPublished()) {
|
||||||
int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
|
int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
|
||||||
@@ -40,7 +40,7 @@ index 2eba2af9bb3fb0aaa9b2f5af6ae5fd207e1db93d..40466cdbd97228662a1eeb3bb08e8172
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
||||||
index 0ccb09e9c00f7434f4158001c983ab547c7b56e0..049bf902e8e77d7eac8dc868593c215bf04838a9 100644
|
index ad8d92f04524fa6e7a7a4c390e8b744889dae968..e230f65d8599f1d6f8c567227859935a905426f8 100644
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
||||||
@@ -168,6 +168,8 @@ public class PurpurConfig {
|
@@ -168,6 +168,8 @@ public class PurpurConfig {
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Option for if rain and thunder should stop on sleep
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
index 40466cdbd97228662a1eeb3bb08e8172bf344410..1eed6e330118954796d4d642bd78c896d95eb496 100644
|
index 5a42fde11c219a1572bf31663487ff1fff0d1312..8994844b6519082244fe95c1ba72dc81ac9f7f64 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -1106,6 +1106,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -1110,6 +1110,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
|
|
||||||
private void resetWeatherCycle() {
|
private void resetWeatherCycle() {
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
@@ -16,7 +16,7 @@ index 40466cdbd97228662a1eeb3bb08e8172bf344410..1eed6e330118954796d4d642bd78c896
|
|||||||
this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - when passing the night
|
this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - when passing the night
|
||||||
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
|
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
|
||||||
// Not that everyone ever manages to get the whole server to sleep at the same time....
|
// Not that everyone ever manages to get the whole server to sleep at the same time....
|
||||||
@@ -1113,6 +1114,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -1117,6 +1118,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
this.serverLevelData.setRainTime(0);
|
this.serverLevelData.setRainTime(0);
|
||||||
}
|
}
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
|
|||||||
Reference in New Issue
Block a user