11package net .thenextlvl .perworlds .listener ;
22
3+ import io .papermc .paper .event .world .WorldDifficultyChangeEvent ;
34import io .papermc .paper .event .world .WorldGameRuleChangeEvent ;
45import io .papermc .paper .event .world .border .WorldBorderBoundsChangeEvent ;
56import io .papermc .paper .event .world .border .WorldBorderCenterChangeEvent ;
@@ -39,11 +40,15 @@ public void onWorldInit(WorldInitEvent event) {
3940 .updateWorldData (event .getWorld ());
4041 }
4142
42- // todo: there is no difficulty change event????
43- // https://github.com/PaperMC/Paper/pull/12471
44-
4543 private final Map <Type , Set <WorldGroup >> lock = new HashMap <>();
4644
45+ @ EventHandler (priority = EventPriority .MONITOR )
46+ public void onWorldDifficultyChange (WorldDifficultyChangeEvent event ) {
47+ processWorldDataUpdate (event .getWorld (), Type .DIFFICULTY , data -> {
48+ data .setDifficulty (event .getDifficulty ());
49+ });
50+ }
51+
4752 @ SuppressWarnings ("unchecked" )
4853 @ EventHandler (priority = EventPriority .MONITOR , ignoreCancelled = true )
4954 public void onWorldGameRuleChange (WorldGameRuleChangeEvent event ) {
@@ -56,8 +61,9 @@ public void onWorldGameRuleChange(WorldGameRuleChangeEvent event) {
5661
5762 @ EventHandler (priority = EventPriority .MONITOR , ignoreCancelled = true )
5863 public void onTimeSkip (TimeSkipEvent event ) {
59- processWorldDataUpdate (event .getWorld (), Type .TIME , data ->
60- data .time (event .getWorld ().getFullTime () + event .getSkipAmount ()));
64+ processWorldDataUpdate (event .getWorld (), Type .TIME , data -> {
65+ data .time (event .getWorld ().getFullTime () + event .getSkipAmount ());
66+ });
6167 }
6268
6369 @ EventHandler (priority = EventPriority .MONITOR , ignoreCancelled = true )
@@ -86,13 +92,13 @@ public void onWorldBorderChange(WorldBorderBoundsChangeEvent event) {
8692
8793 @ EventHandler (priority = EventPriority .MONITOR , ignoreCancelled = true )
8894 public void onWorldBorderChange (WorldBorderCenterChangeEvent event ) {
89- processWorldDataUpdate (event .getWorld (), Type .WORLD_BORDER , data ->
90- data .getWorldBorder ().center (event .getNewCenter ()));
95+ processWorldDataUpdate (event .getWorld (), Type .WORLD_BORDER , data -> {
96+ data .getWorldBorder ().center (event .getNewCenter ());
97+ });
9198 }
9299
93100 private void processWorldDataUpdate (World world , Type type , Consumer <GroupData > process ) {
94- var group = provider .getGroup (world )
95- .orElse (provider .getUnownedWorldGroup ());
101+ var group = provider .getGroup (world ).orElse (provider .getUnownedWorldGroup ());
96102 if (!lock .computeIfAbsent (type , ignored -> new HashSet <>()).add (group )) return ;
97103 process .accept (group .getGroupData ());
98104 group .getWorlds ()
0 commit comments