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);
}
}
}