Commits

DerFrZocker authored and md_5 committed aeaeb359317
SPIGOT-6496: /time functions affect entire server, not just the origin world
No tags

nms-patches/net/minecraft/server/commands/CommandTime.patch

Modified
5 5 import net.minecraft.server.level.WorldServer;
6 6
7 7 +// CraftBukkit start
8 8 +import org.bukkit.Bukkit;
9 9 +import org.bukkit.event.world.TimeSkipEvent;
10 10 +// CraftBukkit end
11 11 +
12 12 public class CommandTime {
13 13
14 14 public CommandTime() {}
15 -@@ -52,7 +57,13 @@
15 +@@ -47,12 +52,18 @@
16 + }
17 +
18 + public static int setTime(CommandListenerWrapper commandlistenerwrapper, int i) {
19 +- Iterator iterator = commandlistenerwrapper.getServer().getAllLevels().iterator();
20 ++ Iterator iterator = com.google.common.collect.Iterators.singletonIterator(commandlistenerwrapper.getLevel()); // CraftBukkit - SPIGOT-6496: Only set the time for the world the command originates in
21 +
16 22 while (iterator.hasNext()) {
17 23 WorldServer worldserver = (WorldServer) iterator.next();
18 24
19 25 - worldserver.setDayTime((long) i);
20 26 + // CraftBukkit start
21 27 + TimeSkipEvent event = new TimeSkipEvent(worldserver.getWorld(), TimeSkipEvent.SkipReason.COMMAND, i - worldserver.getDayTime());
22 28 + Bukkit.getPluginManager().callEvent(event);
23 29 + if (!event.isCancelled()) {
24 30 + worldserver.setDayTime((long) worldserver.getDayTime() + event.getSkipAmount());
25 31 + }
26 32 + // CraftBukkit end
27 33 }
28 34
29 35 commandlistenerwrapper.sendSuccess(new ChatMessage("commands.time.set", new Object[]{i}), true);
30 -@@ -65,7 +76,13 @@
36 +@@ -60,12 +71,18 @@
37 + }
38 +
39 + public static int addTime(CommandListenerWrapper commandlistenerwrapper, int i) {
40 +- Iterator iterator = commandlistenerwrapper.getServer().getAllLevels().iterator();
41 ++ Iterator iterator = com.google.common.collect.Iterators.singletonIterator(commandlistenerwrapper.getLevel()); // CraftBukkit - SPIGOT-6496: Only set the time for the world the command originates in
42 +
31 43 while (iterator.hasNext()) {
32 44 WorldServer worldserver = (WorldServer) iterator.next();
33 45
34 46 - worldserver.setDayTime(worldserver.getDayTime() + (long) i);
35 47 + // CraftBukkit start
36 48 + TimeSkipEvent event = new TimeSkipEvent(worldserver.getWorld(), TimeSkipEvent.SkipReason.COMMAND, i);
37 49 + Bukkit.getPluginManager().callEvent(event);
38 50 + if (!event.isCancelled()) {
39 51 + worldserver.setDayTime(worldserver.getDayTime() + event.getSkipAmount());
40 52 + }

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut