Skip to content

Commit 6c157cc

Browse files
authored
Merge pull request #9 from TheNextLvl-net/sync-fix
Added a world tracking mechanism to fix synchronization issues
2 parents 6a8e84c + 3643195 commit 6c157cc

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

src/main/java/net/thenextlvl/perworlds/listener/WorldListener.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.papermc.paper.event.world.WorldGameRuleChangeEvent;
55
import io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent;
66
import io.papermc.paper.event.world.border.WorldBorderCenterChangeEvent;
7+
import net.kyori.adventure.key.Key;
78
import net.thenextlvl.perworlds.GroupData;
89
import net.thenextlvl.perworlds.GroupData.Type;
910
import net.thenextlvl.perworlds.WorldGroup;
@@ -17,6 +18,7 @@
1718
import org.bukkit.event.weather.WeatherChangeEvent;
1819
import org.bukkit.event.world.TimeSkipEvent;
1920
import org.bukkit.event.world.WorldInitEvent;
21+
import org.bukkit.event.world.WorldUnloadEvent;
2022
import org.jspecify.annotations.NullMarked;
2123

2224
import java.util.HashMap;
@@ -29,6 +31,9 @@
2931
public class WorldListener implements Listener {
3032
private final PaperGroupProvider provider;
3133

34+
private final Map<Type, Set<WorldGroup>> lock = new HashMap<>();
35+
private final Set<Key> allowed = new HashSet<>();
36+
3237
public WorldListener(PaperGroupProvider provider) {
3338
this.provider = provider;
3439
}
@@ -38,9 +43,13 @@ public void onWorldInit(WorldInitEvent event) {
3843
provider.getGroup(event.getWorld())
3944
.orElse(provider.getUnownedWorldGroup())
4045
.updateWorldData(event.getWorld());
46+
allowed.add(event.getWorld().key());
4147
}
4248

43-
private final Map<Type, Set<WorldGroup>> lock = new HashMap<>();
49+
@EventHandler(priority = EventPriority.LOWEST)
50+
public void onWorldUnload(WorldUnloadEvent event) {
51+
allowed.remove(event.getWorld().key());
52+
}
4453

4554
@EventHandler(priority = EventPriority.MONITOR)
4655
public void onWorldDifficultyChange(WorldDifficultyChangeEvent event) {
@@ -97,6 +106,7 @@ public void onWorldBorderChange(WorldBorderCenterChangeEvent event) {
97106
}
98107

99108
private void processWorldDataUpdate(World world, Type type, Consumer<GroupData> process) {
109+
if (!allowed.contains(world.key())) return;
100110
var group = provider.getGroup(world).orElse(provider.getUnownedWorldGroup());
101111
if (!lock.computeIfAbsent(type, ignored -> new HashSet<>()).add(group)) return;
102112
process.accept(group.getGroupData());

0 commit comments

Comments
 (0)