From a33022380a4df1a50983244ec38cd2f37e7ba5cc Mon Sep 17 00:00:00 2001 From: Minecon724 Date: Sun, 25 May 2025 08:46:59 +0200 Subject: [PATCH] Split into two events --- README.md | 2 +- .../AsyncGlobalWeatherUpdateEvent.java | 14 +++ .../AsyncPlayerWeatherUpdateEvent.java | 28 ++++++ .../api/weather/AsyncWeatherUpdateEvent.java | 85 ++++++++----------- .../weather/DynamicWeatherRetriever.java | 6 +- .../weather/StaticWeatherRetriever.java | 6 +- .../realweather/weather/WeatherChanger.java | 58 +++++++------ 7 files changed, 115 insertions(+), 84 deletions(-) create mode 100644 src/main/java/eu/m724/realweather/api/weather/AsyncGlobalWeatherUpdateEvent.java create mode 100644 src/main/java/eu/m724/realweather/api/weather/AsyncPlayerWeatherUpdateEvent.java diff --git a/README.md b/README.md index 8018048..6c7e225 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # realweather -For MC 1.19.4+ and Java 21+ +For MC 1.16.5+ and Java 21+ ### Building To compile, clone this repo and `mvn clean package`. \ diff --git a/src/main/java/eu/m724/realweather/api/weather/AsyncGlobalWeatherUpdateEvent.java b/src/main/java/eu/m724/realweather/api/weather/AsyncGlobalWeatherUpdateEvent.java new file mode 100644 index 0000000..acb07b9 --- /dev/null +++ b/src/main/java/eu/m724/realweather/api/weather/AsyncGlobalWeatherUpdateEvent.java @@ -0,0 +1,14 @@ +package eu.m724.realweather.api.weather; + +import eu.m724.wtapi.object.Weather; + +/** + * Called when weather is updated for the server + *
+ * This is only used on static mode. For the dynamic mode counterpart, see {@link AsyncPlayerWeatherUpdateEvent} + */ +public class AsyncGlobalWeatherUpdateEvent extends AsyncWeatherUpdateEvent { + public AsyncGlobalWeatherUpdateEvent(Weather weather) { + super(weather); + } +} diff --git a/src/main/java/eu/m724/realweather/api/weather/AsyncPlayerWeatherUpdateEvent.java b/src/main/java/eu/m724/realweather/api/weather/AsyncPlayerWeatherUpdateEvent.java new file mode 100644 index 0000000..bb4a27a --- /dev/null +++ b/src/main/java/eu/m724/realweather/api/weather/AsyncPlayerWeatherUpdateEvent.java @@ -0,0 +1,28 @@ +package eu.m724.realweather.api.weather; + +import eu.m724.wtapi.object.Weather; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +/** + * Called when weather is updated for a player + *
+ * This is only used on dynamic mode. For the static mode counterpart, see {@link AsyncGlobalWeatherUpdateEvent} + */ +public class AsyncPlayerWeatherUpdateEvent extends AsyncWeatherUpdateEvent { + private static final HandlerList HANDLERS = new HandlerList(); + + private final Player player; + + public AsyncPlayerWeatherUpdateEvent(Player player, Weather weather) { + super(weather); + this.player = player; + } + + /** + * @return The player to update weather for + */ + public Player getPlayer() { + return player; + } +} diff --git a/src/main/java/eu/m724/realweather/api/weather/AsyncWeatherUpdateEvent.java b/src/main/java/eu/m724/realweather/api/weather/AsyncWeatherUpdateEvent.java index 0ba4dea..f93a967 100644 --- a/src/main/java/eu/m724/realweather/api/weather/AsyncWeatherUpdateEvent.java +++ b/src/main/java/eu/m724/realweather/api/weather/AsyncWeatherUpdateEvent.java @@ -1,65 +1,50 @@ package eu.m724.realweather.api.weather; -import org.bukkit.entity.Player; +import eu.m724.wtapi.object.Weather; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; -import eu.m724.wtapi.object.Weather; +class AsyncWeatherUpdateEvent extends Event implements Cancellable { + private static final HandlerList HANDLERS = new HandlerList(); -/** - * Fired when a weather state is retrieved
- * It doesn't mean the weather has changed, just that we retrieved the state
- */ -public class AsyncWeatherUpdateEvent extends Event implements Cancellable { - private static final HandlerList HANDLERS = new HandlerList(); - - private final Player player; - private final Weather weather; + private final Weather weather; - private boolean cancelled; + private boolean cancelled; - public AsyncWeatherUpdateEvent(Player player, Weather weather) { - super(true); - this.player = player; - this.weather = weather; - } + public AsyncWeatherUpdateEvent(Weather weather) { + super(true); + this.weather = weather; + } - /** - * @return a player that the weather is for, null if worldwide (static mode) - */ - public Player getPlayer() { - return player; - } + /** + * @return The new weather + */ + public Weather getWeather() { + return weather; + } - /** - * @return the weather state that was just changed - */ - public Weather getWeather() { - return weather; - } + public static HandlerList getHandlerList() { + return HANDLERS; + } - public static HandlerList getHandlerList() { - return HANDLERS; - } + @Override + public HandlerList getHandlers() { + return HANDLERS; + } - @Override - public HandlerList getHandlers() { - return HANDLERS; - } + @Override + public boolean isCancelled() { + return cancelled; + } - @Override - public boolean isCancelled() { - return cancelled; - } - - /** - * Cancel weather change
- * It will only cancel changing the actual weather by the plugin, not retrieving and caching it - * @param cancelled to cancel or not - */ - @Override - public void setCancelled(boolean cancelled) { - this.cancelled = cancelled; - } + /** + * Cancel the weather change + * + * @param cancelled Whether to cancel + */ + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } } diff --git a/src/main/java/eu/m724/realweather/weather/DynamicWeatherRetriever.java b/src/main/java/eu/m724/realweather/weather/DynamicWeatherRetriever.java index 5118cd0..e84284f 100644 --- a/src/main/java/eu/m724/realweather/weather/DynamicWeatherRetriever.java +++ b/src/main/java/eu/m724/realweather/weather/DynamicWeatherRetriever.java @@ -4,6 +4,7 @@ import java.time.ZoneOffset; import java.util.*; import java.util.concurrent.CompletableFuture; +import eu.m724.realweather.api.weather.AsyncPlayerWeatherUpdateEvent; import eu.m724.wtapi.provider.weather.WeatherQueryResult; import org.bukkit.Server; import org.bukkit.entity.Player; @@ -16,7 +17,6 @@ import org.bukkit.scheduler.BukkitRunnable; import eu.m724.realweather.DebugLogger; import eu.m724.realweather.GlobalConstants; import eu.m724.realweather.mapper.Mapper; -import eu.m724.realweather.api.weather.AsyncWeatherUpdateEvent; import eu.m724.wtapi.object.Coordinates; import eu.m724.wtapi.object.Weather; import eu.m724.wtapi.provider.weather.WeatherProvider; @@ -129,8 +129,8 @@ public class DynamicWeatherRetriever extends BukkitRunnable implements Listener for (Player player : coordinates.coordinatesPlayersMap().get(coordinatesArray[i])) { playerWeatherCache.put(player, weather, weather.timestamp().toEpochSecond(ZoneOffset.UTC)); - AsyncWeatherUpdateEvent event = - new AsyncWeatherUpdateEvent(player, weather); + AsyncPlayerWeatherUpdateEvent event = + new AsyncPlayerWeatherUpdateEvent(player, weather); server.getPluginManager().callEvent(event); } diff --git a/src/main/java/eu/m724/realweather/weather/StaticWeatherRetriever.java b/src/main/java/eu/m724/realweather/weather/StaticWeatherRetriever.java index b2d60b7..f4f624c 100644 --- a/src/main/java/eu/m724/realweather/weather/StaticWeatherRetriever.java +++ b/src/main/java/eu/m724/realweather/weather/StaticWeatherRetriever.java @@ -2,7 +2,7 @@ package eu.m724.realweather.weather; import eu.m724.realweather.DebugLogger; import eu.m724.realweather.GlobalConstants; -import eu.m724.realweather.api.weather.AsyncWeatherUpdateEvent; +import eu.m724.realweather.api.weather.AsyncGlobalWeatherUpdateEvent; import eu.m724.realweather.mapper.Mapper; import eu.m724.wtapi.object.Coordinates; import eu.m724.wtapi.object.Weather; @@ -38,8 +38,8 @@ public class StaticWeatherRetriever extends BukkitRunnable { Weather weather = result.weathers()[0]; - AsyncWeatherUpdateEvent event = - new AsyncWeatherUpdateEvent(null, weather); + AsyncGlobalWeatherUpdateEvent event = + new AsyncGlobalWeatherUpdateEvent(weather); plugin.getServer().getPluginManager().callEvent(event); diff --git a/src/main/java/eu/m724/realweather/weather/WeatherChanger.java b/src/main/java/eu/m724/realweather/weather/WeatherChanger.java index 36456ed..0f2b644 100644 --- a/src/main/java/eu/m724/realweather/weather/WeatherChanger.java +++ b/src/main/java/eu/m724/realweather/weather/WeatherChanger.java @@ -2,7 +2,8 @@ package eu.m724.realweather.weather; import eu.m724.realweather.DebugLogger; import eu.m724.realweather.GlobalConstants; -import eu.m724.realweather.api.weather.AsyncWeatherUpdateEvent; +import eu.m724.realweather.api.weather.AsyncGlobalWeatherUpdateEvent; +import eu.m724.realweather.api.weather.AsyncPlayerWeatherUpdateEvent; import eu.m724.realweather.mapper.Mapper; import eu.m724.wtapi.object.Weather; import org.bukkit.WeatherType; @@ -16,36 +17,39 @@ public class WeatherChanger implements Listener { private final Mapper mapper = GlobalConstants.getMapper(); @EventHandler(priority = EventPriority.LOWEST) - public void onWeatherUpdate(AsyncWeatherUpdateEvent event) { + public void onGlobalWeatherUpdate(AsyncGlobalWeatherUpdateEvent event) { + Weather weather = event.getWeather(); + + DebugLogger.info("Changing weather static", 3); + mapper.getWorlds().forEach(w -> { + DebugLogger.info("Changing weather static in world %s", 2, w.getName()); + if (weather.thundering()) { + w.setClearWeatherDuration(0); + w.setWeatherDuration(120000); + w.setThunderDuration(120000); + } else if (weather.raining() || weather.snowing()) { + w.setClearWeatherDuration(0); + w.setWeatherDuration(120000); + w.setThunderDuration(0); + } else { + w.setClearWeatherDuration(120000); + w.setWeatherDuration(0); + w.setThunderDuration(0); + } + }); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerWeatherUpdate(AsyncPlayerWeatherUpdateEvent event) { Player player = event.getPlayer(); Weather weather = event.getWeather(); - if (player != null) { // dynamic mode - DebugLogger.info("Changing weather for player %s", 2, player.getName()); + DebugLogger.info("Changing weather for player %s", 2, player.getName()); - if (weather.thundering() || weather.snowing() || weather.raining()) { - player.setPlayerWeather(WeatherType.DOWNFALL); - } else { - player.setPlayerWeather(WeatherType.CLEAR); - } - } else { // static mode - DebugLogger.info("Changing weather static", 3); - mapper.getWorlds().forEach(w -> { - DebugLogger.info("Changing weather static in world %s", 2, w.getName()); - if (weather.thundering()) { - w.setClearWeatherDuration(0); - w.setWeatherDuration(120000); - w.setThunderDuration(120000); - } else if (weather.raining() || weather.snowing()) { - w.setClearWeatherDuration(0); - w.setWeatherDuration(120000); - w.setThunderDuration(0); - } else { - w.setClearWeatherDuration(120000); - w.setWeatherDuration(0); - w.setThunderDuration(0); - } - }); + if (weather.thundering() || weather.snowing() || weather.raining()) { + player.setPlayerWeather(WeatherType.DOWNFALL); + } else { + player.setPlayerWeather(WeatherType.CLEAR); } } }