Skip to content

Commit dd6d7e0

Browse files
committed
Rework some time command diff
Simplify the time command move to marker logic.
1 parent a51ca2c commit dd6d7e0

4 files changed

Lines changed: 59 additions & 34 deletions

File tree

‎paper-server/patches/sources/net/minecraft/server/commands/TimeCommand.java.patch‎

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
long currentTicks = timeline.value().getCurrentTicks(clockManager);
2828
source.sendSuccess(() -> Component.translatable("commands.time.query.timeline", timeline.getRegisteredName(), currentTicks), false);
2929
return wrapTime(currentTicks);
30-
@@ -179,36 +_,65 @@
30+
@@ -179,34 +_,50 @@
3131
throw ERROR_WRONG_TIMELINE_FOR_CLOCK.create(clock.getRegisteredName(), timeline.getRegisteredName());
3232
}
3333

@@ -84,29 +84,29 @@
8484
private static int setTimeToTimeMarker(final CommandSourceStack source, final Holder<WorldClock> clock, final ResourceKey<ClockTimeMarker> timeMarkerId) throws CommandSyntaxException {
8585
- ServerClockManager clockManager = source.getServer().clockManager();
8686
- ServerClockManager.MoveResult moveResult = clockManager.moveToTimeMarker(clock, timeMarkerId);
87-
+ // Paper start - per-world time
88-
+ // TODO - snapshot - need check this later for the changes into ServerClockManager.MoveResult
89-
+ ServerClockManager clockManager = source.getLevel().clockManager();
90-
+ java.util.OptionalLong targetTime = clockManager.getTotalTicksToTimeMarker(clock, timeMarkerId);
91-
+ ServerClockManager.MoveResult moveResult = net.minecraft.world.clock.ServerClockManager.MoveResult.NOT_MOVED;
87+
+ ServerClockManager clockManager = source.getLevel().clockManager(); // Paper - per world time
88+
+ ServerClockManager.MoveResult moveResult = moveToTimeMarker(clock, timeMarkerId, clockManager, source); // Paper - time skip event
9289
String clockName = clock.getRegisteredName();
9390
String timeMarkerName = timeMarkerId.identifier().toString();
94-
+ if (targetTime.isEmpty()) {
95-
+ throw ERROR_NO_TIME_MARKER_FOUND.create(clockName, timeMarkerName);
96-
+ }
97-
+ final long currentTime = clockManager.getInstance(clock).totalTicks();
98-
+ final org.bukkit.event.world.ClockTimeSkipEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.createTimeSkipEvent(source, targetTime.getAsLong() - currentTime);
99-
+ if (event.callEvent()) {
100-
+ moveResult = net.minecraft.world.clock.ServerClockManager.MoveResult.MOVED;
101-
+ clockManager.setTotalTicks(clock, currentTime + event.getSkipAmount());
102-
+ }
103-
+ // Paper end - per-world time
10491
switch (moveResult) {
105-
case NO_TIME_MARKER_FOUND:
106-
throw ERROR_NO_TIME_MARKER_FOUND.create(clockName, timeMarkerName);
107-
@@ -222,7 +_,7 @@
92+
@@ -221,8 +_,22 @@
93+
}
10894
}
10995

96+
+ // Paper start - time skip event
97+
+ private static ServerClockManager.MoveResult moveToTimeMarker(final Holder<WorldClock> clock, final ResourceKey<ClockTimeMarker> timeMarkerId, final ServerClockManager clockManager, final CommandSourceStack source) {
98+
+ final ServerClockManager.TimerMove timerMove = clockManager.resolveTimerMove(clock, timeMarkerId);
99+
+ if (timerMove == null) return ServerClockManager.MoveResult.NO_TIME_MARKER_FOUND;
100+
+
101+
+ // We consider it an attempted move even if the marker occurs at this point in time for event calling purposes.
102+
+ final org.bukkit.event.world.ClockTimeSkipEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.createTimeSkipEvent(source, timerMove.targetTime() - timerMove.currentTime());
103+
+ if (!event.callEvent() || event.getSkipAmount() == 0) return ServerClockManager.MoveResult.NOT_MOVED;
104+
+
105+
+ clockManager.setTotalTicks(clock, timerMove.currentTime() + event.getSkipAmount());
106+
+ return ServerClockManager.MoveResult.MOVED;
107+
+ }
108+
+ // Paper end - time skip event
109+
+
110110
private static int setPaused(final CommandSourceStack source, final Holder<WorldClock> clock, final boolean paused) throws CommandSyntaxException {
111111
- ServerClockManager clockManager = source.getServer().clockManager();
112112
+ ServerClockManager clockManager = source.getLevel().clockManager(); // Paper - per-world time

‎paper-server/patches/sources/net/minecraft/server/level/ServerLevel.java.patch‎

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
--- a/net/minecraft/server/level/ServerLevel.java
22
+++ b/net/minecraft/server/level/ServerLevel.java
3+
@@ -51,7 +_,6 @@
4+
import net.minecraft.network.protocol.game.ClientboundDamageEventPacket;
5+
import net.minecraft.network.protocol.game.ClientboundEntityEventPacket;
6+
import net.minecraft.network.protocol.game.ClientboundExplodePacket;
7+
-import net.minecraft.network.protocol.game.ClientboundGameEventPacket;
8+
import net.minecraft.network.protocol.game.ClientboundLevelEventPacket;
9+
import net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket;
10+
import net.minecraft.network.protocol.game.ClientboundSoundEntityPacket;
11+
@@ -172,7 +_,6 @@
12+
import net.minecraft.world.level.storage.LevelData;
13+
import net.minecraft.world.level.storage.LevelStorageSource;
14+
import net.minecraft.world.level.storage.SavedDataStorage;
15+
-import net.minecraft.world.level.storage.ServerLevelData;
16+
import net.minecraft.world.phys.AABB;
17+
import net.minecraft.world.phys.Vec3;
18+
import net.minecraft.world.phys.shapes.BooleanOp;
319
@@ -196,7 +_,7 @@
420
private final List<ServerPlayer> players = Lists.newArrayList();
521
private final ServerChunkCache chunkSource;
@@ -276,24 +292,25 @@
276292
}
277293

278294
@Override
279-
@@ -373,11 +_,24 @@
295+
@@ -373,11 +_,25 @@
280296
int percentage = this.getGameRules().get(GameRules.PLAYERS_SLEEPING_PERCENTAGE);
281297
if (this.sleepStatus.areEnoughSleeping(percentage) && this.sleepStatus.areEnoughDeepSleeping(percentage, this.players)) {
282298
Optional<Holder<WorldClock>> defaultClock = this.dimensionType().defaultClock();
283299
+ org.bukkit.event.world.ClockTimeSkipEvent event = null; // Paper - per-world time
284300
if (this.getGameRules().get(GameRules.ADVANCE_TIME) && defaultClock.isPresent()) {
285301
- this.server.clockManager().moveToTimeMarker(defaultClock.get(), ClockTimeMarkers.WAKE_UP_FROM_SLEEP);
286302
+ // Paper start - per-world time
287-
+ long currentTime = this.clockManager().getInstance(defaultClock.get()).totalTicks();
288-
+ long delta = this.clockManager().getTotalTicksToTimeMarker(defaultClock.get(), ClockTimeMarkers.WAKE_UP_FROM_SLEEP).orElse(0L) - currentTime;
289-
+ event = new org.bukkit.event.world.TimeSkipEvent(
290-
+ this.getWorld(),
291-
+ org.bukkit.event.world.ClockTimeSkipEvent.SkipReason.NIGHT_SKIP,
292-
+ delta
293-
+ );
294-
+
295-
+ if (event.callEvent()) {
296-
+ this.clockManager().setTotalTicks(defaultClock.get(), currentTime + event.getSkipAmount());
303+
+ final ServerClockManager.TimerMove timerMove = this.clockManager().resolveTimerMove(defaultClock.get(), net.minecraft.world.clock.ClockTimeMarkers.WAKE_UP_FROM_SLEEP);
304+
+ if (timerMove != null) {
305+
+ event = new org.bukkit.event.world.TimeSkipEvent(
306+
+ this.getWorld(),
307+
+ org.bukkit.event.world.ClockTimeSkipEvent.SkipReason.NIGHT_SKIP,
308+
+ timerMove.targetTime() - timerMove.currentTime()
309+
+ );
310+
+
311+
+ if (event.callEvent()) {
312+
+ this.clockManager().setTotalTicks(defaultClock.get(), timerMove.currentTime() + event.getSkipAmount());
313+
+ }
297314
+ }
298315
+ // Paper end - per-world time
299316
}

‎paper-server/patches/sources/net/minecraft/world/clock/ServerClockManager.java.patch‎

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,25 @@
3030
if (advanceTime) {
3131
this.clocks.values().forEach(ServerClockManager.ServerClockInstance::tick);
3232
this.setDirty();
33-
@@ -102,7 +_,16 @@
33+
@@ -102,7 +_,24 @@
3434
return result.get();
3535
}
3636

3737
- public void addTicks(final Holder<WorldClock> clock, final int ticks) {
3838
+ // Paper start - time skip event
39-
+ public java.util.OptionalLong getTotalTicksToTimeMarker(final Holder<WorldClock> clock, final ResourceKey<ClockTimeMarker> timeMarkerId) {
39+
+ public record TimerMove(long currentTime, long targetTime) {
40+
+
41+
+ }
42+
+
43+
+ public @org.jspecify.annotations.Nullable TimerMove resolveTimerMove(final Holder<WorldClock> clock, final ResourceKey<ClockTimeMarker> timeMarkerId) {
4044
+ final ServerClockManager.ServerClockInstance instance = this.getInstance(clock);
4145
+ final ClockTimeMarker timeMarker = instance.timeMarkers.get(timeMarkerId);
46+
+ if (timeMarker == null) return null;
4247
+
43-
+ return timeMarker != null ? java.util.OptionalLong.of(timeMarker.resolveTimeToMoveTo(instance.totalTicks)) : java.util.OptionalLong.empty();
48+
+ return new TimerMove(
49+
+ instance.totalTicks,
50+
+ timeMarker.resolveTimeToMoveTo(instance.totalTicks)
51+
+ );
4452
+ }
4553
+ // Paper end - time skip event
4654
+

‎paper-server/src/main/java/com/destroystokyo/paper/proxy/VelocityProxy.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private static PropertyMap readProperties(final FriendlyByteBuf buf) {
8080
return new PropertyMap(propertiesMap);
8181
}
8282

83-
public static ProfilePublicKey.Data readForwardedKey(ByteBuf buf) { // TODO - snapshot - is even used?
83+
public static ProfilePublicKey.Data readForwardedKey(ByteBuf buf) {
8484
return ProfilePublicKey.Data.STREAM_CODEC.decode(buf);
8585
}
8686

0 commit comments

Comments
 (0)