|
27 | 27 | long currentTicks = timeline.value().getCurrentTicks(clockManager); |
28 | 28 | source.sendSuccess(() -> Component.translatable("commands.time.query.timeline", timeline.getRegisteredName(), currentTicks), false); |
29 | 29 | return wrapTime(currentTicks); |
30 | | -@@ -179,36 +_,65 @@ |
| 30 | +@@ -179,34 +_,50 @@ |
31 | 31 | throw ERROR_WRONG_TIMELINE_FOR_CLOCK.create(clock.getRegisteredName(), timeline.getRegisteredName()); |
32 | 32 | } |
33 | 33 |
|
|
84 | 84 | private static int setTimeToTimeMarker(final CommandSourceStack source, final Holder<WorldClock> clock, final ResourceKey<ClockTimeMarker> timeMarkerId) throws CommandSyntaxException { |
85 | 85 | - ServerClockManager clockManager = source.getServer().clockManager(); |
86 | 86 | - 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 |
92 | 89 | String clockName = clock.getRegisteredName(); |
93 | 90 | 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 |
104 | 91 | 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 | + } |
108 | 94 | } |
109 | 95 |
|
| 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 | ++ |
110 | 110 | private static int setPaused(final CommandSourceStack source, final Holder<WorldClock> clock, final boolean paused) throws CommandSyntaxException { |
111 | 111 | - ServerClockManager clockManager = source.getServer().clockManager(); |
112 | 112 | + ServerClockManager clockManager = source.getLevel().clockManager(); // Paper - per-world time |
|
0 commit comments