Skip to content

Commit 3d4f7bc

Browse files
committed
Fix /time overriding player's /ptime setting
When /time changes world time, players with relative ptime had their visible time shift because the stored offset stayed constant while the base world time changed. Now captures each player's intended visible time before the world time change and re-applies the offset afterward. Fixes #6359
1 parent 63e7c4d commit 3d4f7bc

1 file changed

Lines changed: 18 additions & 0 deletions

File tree

Essentials/src/main/java/com/earth2me/essentials/commands/Commandtime.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@
88
import net.ess3.api.TranslatableException;
99
import org.bukkit.Server;
1010
import org.bukkit.World;
11+
import org.bukkit.entity.Player;
1112

1213
import java.util.Arrays;
1314
import java.util.Collection;
1415
import java.util.Collections;
1516
import java.util.Comparator;
17+
import java.util.HashMap;
1618
import java.util.Iterator;
1719
import java.util.List;
1820
import java.util.Locale;
21+
import java.util.Map;
1922
import java.util.Set;
2023
import java.util.StringJoiner;
2124
import java.util.TreeSet;
@@ -82,11 +85,26 @@ public void run(final Server server, final CommandSource sender, final String co
8285

8386
final StringJoiner joiner = new StringJoiner(", ");
8487
for (final World world : worlds) {
88+
// Capture intended visible time for players with relative ptime before world time changes
89+
final Map<Player, Long> ptimePlayers = new HashMap<>();
90+
for (final Player player : world.getPlayers()) {
91+
if (player.getPlayerTimeOffset() != 0 && player.isPlayerTimeRelative()) {
92+
ptimePlayers.put(player, player.getPlayerTime());
93+
}
94+
}
95+
8596
long time = world.getTime();
8697
if (!add) {
8798
time -= time % 24000;
8899
}
89100
world.setTime(time + (add ? 0 : 24000) + timeTick);
101+
102+
// Re-apply ptime offsets so players maintain their intended visible time
103+
final long newWorldTime = world.getTime();
104+
for (final Map.Entry<Player, Long> entry : ptimePlayers.entrySet()) {
105+
entry.getKey().setPlayerTime(entry.getValue() - newWorldTime, true);
106+
}
107+
90108
joiner.add(world.getName());
91109
}
92110

0 commit comments

Comments
 (0)