mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Configurable daylight cycle
This commit is contained in:
committed by
granny
parent
13ce5ce283
commit
2baf951200
@@ -1,94 +0,0 @@
|
|||||||
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/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
|
||||||
index 75ef1a4f80449e87affbd9ba62f5f9447ef9db87..d55390d725f8798becb0b7b04485c99611e0e527 100644
|
|
||||||
--- a/net/minecraft/server/MinecraftServer.java
|
|
||||||
+++ b/net/minecraft/server/MinecraftServer.java
|
|
||||||
@@ -1858,7 +1858,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
||||||
long worldTime = level.getGameTime();
|
|
||||||
final ClientboundSetTimePacket worldPacket = new ClientboundSetTimePacket(worldTime, dayTime, doDaylight);
|
|
||||||
for (Player entityhuman : level.players()) {
|
|
||||||
- if (!(entityhuman instanceof ServerPlayer) || (tickCount + entityhuman.getId()) % 20 != 0) {
|
|
||||||
+ if (!(entityhuman instanceof ServerPlayer) || (!level.isForceTime() && (tickCount + entityhuman.getId()) % 20 != 0)) { // Purpur - Configurable daylight cycle
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ServerPlayer entityplayer = (ServerPlayer) entityhuman;
|
|
||||||
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
|
|
||||||
index 3442ace00904b73f4384760d42c9385697132bc9..6585e0d72b2fbb8af5c62ceba57eef2fb7794e87 100644
|
|
||||||
--- a/net/minecraft/server/level/ServerLevel.java
|
|
||||||
+++ b/net/minecraft/server/level/ServerLevel.java
|
|
||||||
@@ -224,6 +224,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
|
||||||
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 RandomSequences randomSequences;
|
|
||||||
|
|
||||||
// CraftBukkit start
|
|
||||||
@@ -695,6 +697,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
|
||||||
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.getDayTime(); // Purpur - Configurable daylight cycle
|
|
||||||
}
|
|
||||||
|
|
||||||
// Paper start
|
|
||||||
@@ -860,6 +863,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
|
||||||
this.serverLevelData.getScheduledEvents().tick(this.server, i);
|
|
||||||
Profiler.get().pop();
|
|
||||||
if (this.serverLevelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) {
|
|
||||||
+ // Purpur start - Configurable daylight cycle
|
|
||||||
+ int incrementTicks = isDay() ? this.purpurConfig.daytimeTicks : this.purpurConfig.nighttimeTicks;
|
|
||||||
+ if (incrementTicks != 12000) {
|
|
||||||
+ this.preciseTime += 12000 / (double) incrementTicks;
|
|
||||||
+ this.setDayTime(this.preciseTime);
|
|
||||||
+ } else
|
|
||||||
+ // Purpur end - Configurable daylight cycle
|
|
||||||
this.setDayTime(this.levelData.getDayTime() + 1L);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -868,7 +878,21 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
|
||||||
|
|
||||||
public void setDayTime(long timeOfDay) {
|
|
||||||
this.serverLevelData.setDayTime(timeOfDay);
|
|
||||||
+ // Purpur start - Configurable daylight cycle
|
|
||||||
+ this.preciseTime = timeOfDay;
|
|
||||||
+ this.forceTime = false;
|
|
||||||
}
|
|
||||||
+ public void setDayTime(double i) {
|
|
||||||
+ this.serverLevelData.setDayTime((long) i);
|
|
||||||
+ this.forceTime = true;
|
|
||||||
+ // Purpur end - Configurable daylight cycle
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Purpur start - Configurable daylight cycle
|
|
||||||
+ public boolean isForceTime() {
|
|
||||||
+ return this.forceTime;
|
|
||||||
+ }
|
|
||||||
+ // Purpur end - Configurable daylight cycle
|
|
||||||
|
|
||||||
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
|
|
||||||
index 0716bd2728be4fcaa4f13485591008ce270ecf82..1060208faaa18020c5762a2eb4851f6148b5f215 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
@@ -119,6 +119,13 @@ public class PurpurWorldConfig {
|
|
||||||
raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ 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 elytraDamagePerSecond = 1;
|
|
||||||
public double elytraDamageMultiplyBySpeed = 0;
|
|
||||||
public int elytraDamagePerFireworkBoost = 0;
|
|
||||||
@@ -18,7 +18,7 @@ index 29d402620d2e1cbed94f941f933ae8eb5d786e7f..ec0998369158286fccb38c8e10c3cfa2
|
|||||||
public boolean isLocalPlayer() {
|
public boolean isLocalPlayer() {
|
||||||
return true;
|
return true;
|
||||||
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
||||||
index da4b7400d6148ff5e412076bdccab295aaa72bad..b5011af774484b6ed35ee83b4a562ddd4425c22f 100644
|
index d68d453a668a7767e5c115095df114b2dbb87d68..13c3d5377581bb82970aa99ca4a4f647f17f78e8 100644
|
||||||
--- a/net/minecraft/server/MinecraftServer.java
|
--- a/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/net/minecraft/server/MinecraftServer.java
|
+++ b/net/minecraft/server/MinecraftServer.java
|
||||||
@@ -1721,6 +1721,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -1721,6 +1721,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
@@ -30,10 +30,10 @@ index da4b7400d6148ff5e412076bdccab295aaa72bad..b5011af774484b6ed35ee83b4a562ddd
|
|||||||
/* Drop global time updates
|
/* Drop global time updates
|
||||||
if (this.tickCount % 20 == 0) {
|
if (this.tickCount % 20 == 0) {
|
||||||
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
|
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
|
||||||
index c322c2cb659824c3568d1ef49462d8d5ee88cf41..86b308a7d83e9072feffc45cc9d7ad7d95a78e8d 100644
|
index 7f136e044a243814372beef1400d3b6a148d2cbf..5e730cdde960603d5fa0fa7d1b70ec56c4fa8145 100644
|
||||||
--- a/net/minecraft/server/level/ServerLevel.java
|
--- a/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/net/minecraft/server/level/ServerLevel.java
|
+++ b/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -215,6 +215,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
@@ -217,6 +217,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
||||||
public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent
|
public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent
|
||||||
public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent
|
public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent
|
||||||
private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current)
|
private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current)
|
||||||
|
|||||||
@@ -61,6 +61,15 @@
|
|||||||
this.startMeasuringTaskExecutionTime();
|
this.startMeasuringTaskExecutionTime();
|
||||||
this.waitUntilNextTick();
|
this.waitUntilNextTick();
|
||||||
this.finishMeasuringTaskExecutionTime();
|
this.finishMeasuringTaskExecutionTime();
|
||||||
|
@@ -1690,7 +_,7 @@
|
||||||
|
long worldTime = level.getGameTime();
|
||||||
|
final ClientboundSetTimePacket worldPacket = new ClientboundSetTimePacket(worldTime, dayTime, doDaylight);
|
||||||
|
for (Player entityhuman : level.players()) {
|
||||||
|
- if (!(entityhuman instanceof ServerPlayer) || (tickCount + entityhuman.getId()) % 20 != 0) {
|
||||||
|
+ if (!(entityhuman instanceof ServerPlayer) || (!level.isForceTime() && (tickCount + entityhuman.getId()) % 20 != 0)) { // Purpur - Configurable daylight cycle
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ServerPlayer entityplayer = (ServerPlayer) entityhuman;
|
||||||
@@ -1854,7 +_,7 @@
|
@@ -1854,7 +_,7 @@
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
|
|||||||
@@ -1,5 +1,14 @@
|
|||||||
--- a/net/minecraft/server/level/ServerLevel.java
|
--- a/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/net/minecraft/server/level/ServerLevel.java
|
+++ b/net/minecraft/server/level/ServerLevel.java
|
||||||
|
@@ -207,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 RandomSequences randomSequences;
|
||||||
|
|
||||||
|
// CraftBukkit start
|
||||||
@@ -595,7 +_,24 @@
|
@@ -595,7 +_,24 @@
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
this.tickTime = tickTime;
|
this.tickTime = tickTime;
|
||||||
@@ -26,6 +35,51 @@
|
|||||||
this.serverLevelData = serverLevelData;
|
this.serverLevelData = serverLevelData;
|
||||||
ChunkGenerator chunkGenerator = levelStem.generator();
|
ChunkGenerator chunkGenerator = levelStem.generator();
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
|
@@ -681,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.getDayTime(); // Purpur - Configurable daylight cycle
|
||||||
|
}
|
||||||
|
|
||||||
|
// Paper start
|
||||||
|
@@ -846,6 +_,13 @@
|
||||||
|
this.serverLevelData.getScheduledEvents().tick(this.server, l);
|
||||||
|
Profiler.get().pop();
|
||||||
|
if (this.serverLevelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) {
|
||||||
|
+ // Purpur start - Configurable daylight cycle
|
||||||
|
+ int incrementTicks = isDay() ? this.purpurConfig.daytimeTicks : this.purpurConfig.nighttimeTicks;
|
||||||
|
+ if (incrementTicks != 12000) {
|
||||||
|
+ this.preciseTime += 12000 / (double) incrementTicks;
|
||||||
|
+ this.setDayTime(this.preciseTime);
|
||||||
|
+ } else
|
||||||
|
+ // Purpur end - Configurable daylight cycle
|
||||||
|
this.setDayTime(this.levelData.getDayTime() + 1L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -853,7 +_,21 @@
|
||||||
|
|
||||||
|
public void setDayTime(long time) {
|
||||||
|
this.serverLevelData.setDayTime(time);
|
||||||
|
- }
|
||||||
|
+ // Purpur start - Configurable daylight cycle
|
||||||
|
+ this.preciseTime = time;
|
||||||
|
+ this.forceTime = false;
|
||||||
|
+ }
|
||||||
|
+ public void setDayTime(double i) {
|
||||||
|
+ this.serverLevelData.setDayTime((long) i);
|
||||||
|
+ this.forceTime = true;
|
||||||
|
+ // Purpur end - Configurable daylight cycle
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Purpur start - Configurable daylight cycle
|
||||||
|
+ public boolean isForceTime() {
|
||||||
|
+ return this.forceTime;
|
||||||
|
+ }
|
||||||
|
+ // Purpur end - Configurable daylight cycle
|
||||||
|
|
||||||
|
public void tickCustomSpawners(boolean spawnEnemies, boolean spawnFriendlies) {
|
||||||
|
for (CustomSpawner customSpawner : this.customSpawners) {
|
||||||
@@ -934,9 +_,18 @@
|
@@ -934,9 +_,18 @@
|
||||||
&& this.random.nextDouble() < currentDifficultyAt.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01) // Paper - Configurable spawn chances for skeleton horses
|
&& this.random.nextDouble() < currentDifficultyAt.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01) // Paper - Configurable spawn chances for skeleton horses
|
||||||
&& !this.getBlockState(blockPos.below()).is(Blocks.LIGHTNING_ROD);
|
&& !this.getBlockState(blockPos.below()).is(Blocks.LIGHTNING_ROD);
|
||||||
|
|||||||
@@ -110,6 +110,13 @@ public class PurpurWorldConfig {
|
|||||||
raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds);
|
raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 elytraDamagePerSecond = 1;
|
public int elytraDamagePerSecond = 1;
|
||||||
public double elytraDamageMultiplyBySpeed = 0;
|
public double elytraDamageMultiplyBySpeed = 0;
|
||||||
public int elytraDamagePerFireworkBoost = 0;
|
public int elytraDamagePerFireworkBoost = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user