44import io .papermc .paper .event .world .WorldGameRuleChangeEvent ;
55import io .papermc .paper .event .world .border .WorldBorderBoundsChangeEvent ;
66import io .papermc .paper .event .world .border .WorldBorderCenterChangeEvent ;
7+ import net .kyori .adventure .key .Key ;
78import net .thenextlvl .perworlds .GroupData ;
89import net .thenextlvl .perworlds .GroupData .Type ;
910import net .thenextlvl .perworlds .WorldGroup ;
1718import org .bukkit .event .weather .WeatherChangeEvent ;
1819import org .bukkit .event .world .TimeSkipEvent ;
1920import org .bukkit .event .world .WorldInitEvent ;
21+ import org .bukkit .event .world .WorldUnloadEvent ;
2022import org .jspecify .annotations .NullMarked ;
2123
2224import java .util .HashMap ;
2931public 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