Skip to content

Commit 48d05ae

Browse files
committed
Handle WorldDifficultyChangeEvent in WorldListener
Adds support for processing difficulty changes using `WorldDifficultyChangeEvent`. Cleans up TODO and ensures world data updates correctly for difficulty changes.
1 parent 31861fa commit 48d05ae

1 file changed

Lines changed: 15 additions & 9 deletions

File tree

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.thenextlvl.perworlds.listener;
22

3+
import io.papermc.paper.event.world.WorldDifficultyChangeEvent;
34
import io.papermc.paper.event.world.WorldGameRuleChangeEvent;
45
import io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent;
56
import 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

Comments
 (0)