diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java index 53458d1b..6e87d2ab 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java @@ -119,6 +119,12 @@ public class DefaultMMOLoader extends MMOLoader { if (config.getKey().equals("permission")) return new PermissionCondition(config); + if (config.getKey().equals("weather")) + return new WeatherCondition(config); + + if (config.getKey().equals("time")) + return new TimeCondition(config); + return null; } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/chest/condition/TimeCondition.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/chest/condition/TimeCondition.java new file mode 100644 index 00000000..1e0fc82e --- /dev/null +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/chest/condition/TimeCondition.java @@ -0,0 +1,37 @@ +package net.Indyuce.mmocore.loot.chest.condition; + +import io.lumine.mythic.lib.api.MMOLineConfig; +import org.apache.commons.lang.Validate; +import org.bukkit.entity.Player; + +public class TimeCondition extends Condition { + + private final int min; + private final int max; + + public TimeCondition(MMOLineConfig config) { + super(config); + + Validate.isTrue(config.contains("min")); + Validate.isTrue(config.contains("max")); + + min = config.getInt("min"); + max = config.getInt("max"); + } + + @Override + public boolean isMet(ConditionInstance entity) { + if (entity.getEntity() instanceof Player player) { + long time = player.getWorld().getTime(); + + if (min < max) { + return time > min && time < max; + } else { + // Allows for wrapping times, such as min=20000 max=6000 + return time > min || time < max; + } + } + + return false; + } +} diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/chest/condition/WeatherCondition.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/chest/condition/WeatherCondition.java new file mode 100644 index 00000000..37285a1f --- /dev/null +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/chest/condition/WeatherCondition.java @@ -0,0 +1,34 @@ +package net.Indyuce.mmocore.loot.chest.condition; + +import io.lumine.mythic.lib.api.MMOLineConfig; +import org.apache.commons.lang.Validate; +import org.bukkit.entity.Player; + +public class WeatherCondition extends Condition { + + private final String condition; + + public WeatherCondition(MMOLineConfig config) { + super(config); + + Validate.isTrue(config.contains("condition")); + + condition = config.getString("condition"); + } + + @Override + public boolean isMet(ConditionInstance entity) { + if (entity.getEntity() instanceof Player player) { + boolean isClear = player.getWorld().isClearWeather(); + boolean hasStorm = player.getWorld().hasStorm(); + + if (condition.equalsIgnoreCase("clear")) { + return isClear; + } else if (condition.equalsIgnoreCase("stormy")) { + return hasStorm; + } + } + + return false; + } +}