From a99b5229622222dd9c7b101eb24283efdc27adfd Mon Sep 17 00:00:00 2001 From: Daniil Zao Date: Tue, 25 Jun 2024 22:32:12 +0300 Subject: [PATCH] Fix potion meta --- pom.xml | 13 +- reactions/pom.xml | 14 +- .../java/fun/reactions/commands/CmdSet.java | 2 +- .../module/basic/ContextManager.java | 2 +- .../module/basic/actions/CooldownActions.java | 2 +- .../basic/actions/DynamicActionAction.java | 2 +- .../module/basic/actions/ExecuteAction.java | 2 +- .../module/basic/actions/MessageAction.java | 2 +- .../basic/actions/PotionEffectAction.java | 2 +- .../module/basic/actions/WaitAction.java | 2 +- .../reactions/module/basic/flags/PvpFlag.java | 2 +- .../basic/placeholders/TimePlaceholders.java | 4 +- .../fun/reactions/time/CooldownManager.java | 2 +- .../java/fun/reactions/time/timers/Timer.java | 2 +- .../reactions/time/timers/TimersManager.java | 2 +- .../reactions/time/wait/WaitingManager.java | 6 +- .../main/java/fun/reactions/util/Utils.java | 10 +- .../fun/reactions/util/item/ItemUtils.java | 10 -- .../util/item/aspects/EnchantmentsAspect.java | 11 +- .../util/item/aspects/PotionAspect.java | 122 +++++++++--------- .../reactions/util/parameter/Parameters.java | 2 +- .../reactions/util/{ => time}/TimeUtils.java | 2 +- .../util/{ => num}/NumberUtilsTest.java | 4 +- .../util/{ => time}/TimeUtilsTest.java | 4 +- 24 files changed, 106 insertions(+), 120 deletions(-) rename reactions/src/main/java/fun/reactions/util/{ => time}/TimeUtils.java (99%) rename reactions/src/test/java/fun/reactions/util/{ => num}/NumberUtilsTest.java (92%) rename reactions/src/test/java/fun/reactions/util/{ => time}/TimeUtilsTest.java (95%) diff --git a/pom.xml b/pom.xml index f44ab11f..50374301 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ Simplest scripting engine for Paper -custom - 17 + 21 UTF-8 @@ -38,11 +38,18 @@ clean package + + + org.apache.maven.extensions + maven-build-cache-extension + 1.2.0 + + org.apache.maven.plugins maven-compiler-plugin - 3.11.0 + 3.13.0 ${java.version} ${java.version} @@ -101,7 +108,7 @@ io.papermc.paper paper-api - 1.20.1-R0.1-SNAPSHOT + 1.20.6-R0.1-SNAPSHOT provided diff --git a/reactions/pom.xml b/reactions/pom.xml index fd4581ae..7fcbdfbb 100644 --- a/reactions/pom.xml +++ b/reactions/pom.xml @@ -22,7 +22,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.0 + 3.6.0 package @@ -33,23 +33,19 @@ org.bstats - fun.reactions.external.bstats + fun.reactions.metrics org.quartz - fun.reactions.external.time + fun.reactions.util.time.cron ink.glowing.math - fun.reactions.external.math + fun.reactions.util.num.math ink.glowing.text - fun.reactions.external.text - - - org.spongepowered.configurate - fun.reactions.external.config + fun.reactions.util.text false diff --git a/reactions/src/main/java/fun/reactions/commands/CmdSet.java b/reactions/src/main/java/fun/reactions/commands/CmdSet.java index ff8a5e86..50c92be7 100644 --- a/reactions/src/main/java/fun/reactions/commands/CmdSet.java +++ b/reactions/src/main/java/fun/reactions/commands/CmdSet.java @@ -3,9 +3,9 @@ import fun.reactions.ReActions; import fun.reactions.menu.InventoryMenu; import fun.reactions.time.CooldownManager; -import fun.reactions.util.TimeUtils; import fun.reactions.util.message.Msg; import fun.reactions.util.parameter.Parameters; +import fun.reactions.util.time.TimeUtils; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/reactions/src/main/java/fun/reactions/module/basic/ContextManager.java b/reactions/src/main/java/fun/reactions/module/basic/ContextManager.java index 138dfe7c..36a479ed 100644 --- a/reactions/src/main/java/fun/reactions/module/basic/ContextManager.java +++ b/reactions/src/main/java/fun/reactions/module/basic/ContextManager.java @@ -33,11 +33,11 @@ import fun.reactions.module.worldguard.activators.RegionLeaveActivator; import fun.reactions.module.worldguard.external.RaWorldGuard; import fun.reactions.util.BlockUtils; -import fun.reactions.util.TimeUtils; import fun.reactions.util.enums.DeathCause; import fun.reactions.util.message.Msg; import fun.reactions.util.mob.EntityUtils; import fun.reactions.util.parameter.Parameters; +import fun.reactions.util.time.TimeUtils; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.data.type.Switch; diff --git a/reactions/src/main/java/fun/reactions/module/basic/actions/CooldownActions.java b/reactions/src/main/java/fun/reactions/module/basic/actions/CooldownActions.java index 1cd86da1..89fa845e 100644 --- a/reactions/src/main/java/fun/reactions/module/basic/actions/CooldownActions.java +++ b/reactions/src/main/java/fun/reactions/module/basic/actions/CooldownActions.java @@ -25,9 +25,9 @@ import fun.reactions.model.activity.actions.Action; import fun.reactions.model.environment.Environment; import fun.reactions.time.CooldownManager; -import fun.reactions.util.TimeUtils; import fun.reactions.util.naming.Aliased; import fun.reactions.util.parameter.Parameters; +import fun.reactions.util.time.TimeUtils; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; diff --git a/reactions/src/main/java/fun/reactions/module/basic/actions/DynamicActionAction.java b/reactions/src/main/java/fun/reactions/module/basic/actions/DynamicActionAction.java index 3c67be8d..3311e8a4 100644 --- a/reactions/src/main/java/fun/reactions/module/basic/actions/DynamicActionAction.java +++ b/reactions/src/main/java/fun/reactions/module/basic/actions/DynamicActionAction.java @@ -10,7 +10,7 @@ import java.util.List; -import static fun.reactions.util.TimeUtils.addOffset; +import static fun.reactions.util.time.TimeUtils.addOffset; @Aliased.Names({ "ACTDELAY", "DELAYED_ACTION", "ACTION_DELAYED", diff --git a/reactions/src/main/java/fun/reactions/module/basic/actions/ExecuteAction.java b/reactions/src/main/java/fun/reactions/module/basic/actions/ExecuteAction.java index 45b825b9..2684ab1a 100644 --- a/reactions/src/main/java/fun/reactions/module/basic/actions/ExecuteAction.java +++ b/reactions/src/main/java/fun/reactions/module/basic/actions/ExecuteAction.java @@ -35,7 +35,7 @@ import java.util.ArrayList; import java.util.List; -import static fun.reactions.util.TimeUtils.addOffset; +import static fun.reactions.util.time.TimeUtils.addOffset; @Aliased.Names({"RUN", "EXEC"}) public class ExecuteAction implements Action { diff --git a/reactions/src/main/java/fun/reactions/module/basic/actions/MessageAction.java b/reactions/src/main/java/fun/reactions/module/basic/actions/MessageAction.java index e749dffc..04930b5c 100644 --- a/reactions/src/main/java/fun/reactions/module/basic/actions/MessageAction.java +++ b/reactions/src/main/java/fun/reactions/module/basic/actions/MessageAction.java @@ -24,10 +24,10 @@ import fun.reactions.model.activity.actions.Action; import fun.reactions.model.environment.Environment; -import fun.reactions.util.TimeUtils; import fun.reactions.util.message.Msg; import fun.reactions.util.naming.Aliased; import fun.reactions.util.parameter.Parameters; +import fun.reactions.util.time.TimeUtils; import org.bukkit.entity.Player; import org.bukkit.metadata.FixedMetadataValue; import org.jetbrains.annotations.NotNull; diff --git a/reactions/src/main/java/fun/reactions/module/basic/actions/PotionEffectAction.java b/reactions/src/main/java/fun/reactions/module/basic/actions/PotionEffectAction.java index e64817c6..961c92a7 100644 --- a/reactions/src/main/java/fun/reactions/module/basic/actions/PotionEffectAction.java +++ b/reactions/src/main/java/fun/reactions/module/basic/actions/PotionEffectAction.java @@ -24,12 +24,12 @@ import fun.reactions.model.activity.actions.Action; import fun.reactions.model.environment.Environment; -import fun.reactions.util.TimeUtils; import fun.reactions.util.message.Msg; import fun.reactions.util.naming.Aliased; import fun.reactions.util.num.Is; import fun.reactions.util.num.NumberUtils; import fun.reactions.util.parameter.Parameters; +import fun.reactions.util.time.TimeUtils; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; diff --git a/reactions/src/main/java/fun/reactions/module/basic/actions/WaitAction.java b/reactions/src/main/java/fun/reactions/module/basic/actions/WaitAction.java index 016c213e..bdd2adef 100644 --- a/reactions/src/main/java/fun/reactions/module/basic/actions/WaitAction.java +++ b/reactions/src/main/java/fun/reactions/module/basic/actions/WaitAction.java @@ -10,7 +10,7 @@ import java.util.List; -import static fun.reactions.util.TimeUtils.addOffset; +import static fun.reactions.util.time.TimeUtils.addOffset; @Aliased.Names("PAUSE") public class WaitAction implements Action, Interrupting { diff --git a/reactions/src/main/java/fun/reactions/module/basic/flags/PvpFlag.java b/reactions/src/main/java/fun/reactions/module/basic/flags/PvpFlag.java index 65fe68ee..29a074e8 100644 --- a/reactions/src/main/java/fun/reactions/module/basic/flags/PvpFlag.java +++ b/reactions/src/main/java/fun/reactions/module/basic/flags/PvpFlag.java @@ -25,8 +25,8 @@ import fun.reactions.model.activity.Activity; import fun.reactions.model.activity.flags.Flag; import fun.reactions.model.environment.Environment; -import fun.reactions.util.TimeUtils; import fun.reactions.util.parameter.Parameters; +import fun.reactions.util.time.TimeUtils; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; diff --git a/reactions/src/main/java/fun/reactions/module/basic/placeholders/TimePlaceholders.java b/reactions/src/main/java/fun/reactions/module/basic/placeholders/TimePlaceholders.java index 0434b56c..be246460 100644 --- a/reactions/src/main/java/fun/reactions/module/basic/placeholders/TimePlaceholders.java +++ b/reactions/src/main/java/fun/reactions/module/basic/placeholders/TimePlaceholders.java @@ -7,8 +7,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static fun.reactions.util.TimeUtils.formatIngameTime; -import static fun.reactions.util.TimeUtils.formatTime; +import static fun.reactions.util.time.TimeUtils.formatIngameTime; +import static fun.reactions.util.time.TimeUtils.formatTime; @Aliased.Names({"time_ingame", "curtime", "time_server", "servertime", "timestamp", "stamp"}) public class TimePlaceholders implements Placeholder { // TODO World selection diff --git a/reactions/src/main/java/fun/reactions/time/CooldownManager.java b/reactions/src/main/java/fun/reactions/time/CooldownManager.java index c3be1332..0afaf90b 100644 --- a/reactions/src/main/java/fun/reactions/time/CooldownManager.java +++ b/reactions/src/main/java/fun/reactions/time/CooldownManager.java @@ -25,8 +25,8 @@ import fun.reactions.ReActions; import fun.reactions.model.environment.Environment; import fun.reactions.util.ConfigUtils; -import fun.reactions.util.TimeUtils; import fun.reactions.util.message.Msg; +import fun.reactions.util.time.TimeUtils; import it.unimi.dsi.fastutil.objects.Object2LongMap; import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; import org.bukkit.command.CommandSender; diff --git a/reactions/src/main/java/fun/reactions/time/timers/Timer.java b/reactions/src/main/java/fun/reactions/time/timers/Timer.java index 17a0ea54..83438a29 100644 --- a/reactions/src/main/java/fun/reactions/time/timers/Timer.java +++ b/reactions/src/main/java/fun/reactions/time/timers/Timer.java @@ -22,9 +22,9 @@ package fun.reactions.time.timers; -import fun.reactions.util.TimeUtils; import fun.reactions.util.message.Msg; import fun.reactions.util.parameter.Parameters; +import fun.reactions.util.time.TimeUtils; import org.quartz.CronExpression; import java.text.ParseException; diff --git a/reactions/src/main/java/fun/reactions/time/timers/TimersManager.java b/reactions/src/main/java/fun/reactions/time/timers/TimersManager.java index c116a528..e29ac97d 100644 --- a/reactions/src/main/java/fun/reactions/time/timers/TimersManager.java +++ b/reactions/src/main/java/fun/reactions/time/timers/TimersManager.java @@ -25,10 +25,10 @@ import fun.reactions.ReActions; import fun.reactions.module.basic.ContextManager; import fun.reactions.util.ConfigUtils; -import fun.reactions.util.TimeUtils; import fun.reactions.util.collections.CaseInsensitiveMap; import fun.reactions.util.message.Msg; import fun.reactions.util.parameter.Parameters; +import fun.reactions.util.time.TimeUtils; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; diff --git a/reactions/src/main/java/fun/reactions/time/wait/WaitingManager.java b/reactions/src/main/java/fun/reactions/time/wait/WaitingManager.java index b30020f1..ec49f81c 100644 --- a/reactions/src/main/java/fun/reactions/time/wait/WaitingManager.java +++ b/reactions/src/main/java/fun/reactions/time/wait/WaitingManager.java @@ -6,7 +6,7 @@ import fun.reactions.model.environment.Variables; import fun.reactions.save.Saveable; import fun.reactions.util.ConfigUtils; -import fun.reactions.util.TimeUtils; +import fun.reactions.util.time.TimeUtils; import org.bukkit.OfflinePlayer; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.scheduler.BukkitTask; @@ -18,8 +18,8 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import static fun.reactions.util.TimeUtils.offsetUntil; -import static fun.reactions.util.TimeUtils.timeToTicks; +import static fun.reactions.util.time.TimeUtils.offsetUntil; +import static fun.reactions.util.time.TimeUtils.timeToTicks; public class WaitingManager implements Saveable { private final ReActions.Platform rea; diff --git a/reactions/src/main/java/fun/reactions/util/Utils.java b/reactions/src/main/java/fun/reactions/util/Utils.java index 562fec54..40cf959f 100644 --- a/reactions/src/main/java/fun/reactions/util/Utils.java +++ b/reactions/src/main/java/fun/reactions/util/Utils.java @@ -28,10 +28,7 @@ import fun.reactions.util.parameter.Parameters; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextColor; -import org.bukkit.Bukkit; -import org.bukkit.Color; -import org.bukkit.Location; -import org.bukkit.Sound; +import org.bukkit.*; import org.bukkit.entity.Player; import org.bukkit.permissions.Permissible; import org.jetbrains.annotations.Contract; @@ -314,4 +311,9 @@ public static T searchNotNull(@Nullable T def, @Nullable T @NotNull ... obj) return null; } } + + public static @Nullable T searchRegistry(@NotNull String keyStr, @NotNull Registry registry) { + NamespacedKey key = NamespacedKey.fromString(keyStr.toLowerCase(Locale.ROOT)); + return key == null ? null : registry.get(key); + } } diff --git a/reactions/src/main/java/fun/reactions/util/item/ItemUtils.java b/reactions/src/main/java/fun/reactions/util/item/ItemUtils.java index 002c1504..9edd2ea8 100644 --- a/reactions/src/main/java/fun/reactions/util/item/ItemUtils.java +++ b/reactions/src/main/java/fun/reactions/util/item/ItemUtils.java @@ -6,7 +6,6 @@ import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; @@ -18,19 +17,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -import java.util.function.Function; public final class ItemUtils { private ItemUtils() {} - public static @Nullable T searchByKey(@NotNull String key, @NotNull Function search) { - try { - return search.apply(NamespacedKey.minecraft(key.toLowerCase(Locale.ROOT))); - } catch (Exception ignored) { - return null; - } - } - public static int getDurability(@NotNull ItemStack item) { return item.hasItemMeta() && item.getItemMeta() instanceof Damageable damageMeta ? damageMeta.getDamage() diff --git a/reactions/src/main/java/fun/reactions/util/item/aspects/EnchantmentsAspect.java b/reactions/src/main/java/fun/reactions/util/item/aspects/EnchantmentsAspect.java index a819664d..2fe15666 100644 --- a/reactions/src/main/java/fun/reactions/util/item/aspects/EnchantmentsAspect.java +++ b/reactions/src/main/java/fun/reactions/util/item/aspects/EnchantmentsAspect.java @@ -1,15 +1,15 @@ package fun.reactions.util.item.aspects; -import fun.reactions.util.item.ItemUtils; +import fun.reactions.util.Utils; import fun.reactions.util.naming.Aliased; import fun.reactions.util.num.NumberUtils; +import org.bukkit.Registry; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import java.util.HashMap; -import java.util.Locale; import java.util.Map; import java.util.function.ToIntFunction; @@ -41,11 +41,8 @@ public class EnchantmentsAspect implements MetaAspect { enchKey = enchValue.substring(0, index); levelStr = enchValue.substring(index + 1); } - Enchantment enchantment = ItemUtils.searchByKey(enchKey, Enchantment::getByKey); - if (enchantment == null) { - enchantment = Enchantment.getByName(enchKey.toUpperCase(Locale.ROOT)); - if (enchantment == null) continue; - } + Enchantment enchantment = Utils.searchRegistry(enchKey, Registry.ENCHANTMENT); + if (enchantment == null) continue; int level = NumberUtils.asInteger(levelStr, 0); enchantments.put(enchantment, level > 0 ? level : null); } diff --git a/reactions/src/main/java/fun/reactions/util/item/aspects/PotionAspect.java b/reactions/src/main/java/fun/reactions/util/item/aspects/PotionAspect.java index aef7e2ce..c618fa7c 100644 --- a/reactions/src/main/java/fun/reactions/util/item/aspects/PotionAspect.java +++ b/reactions/src/main/java/fun/reactions/util/item/aspects/PotionAspect.java @@ -1,23 +1,22 @@ package fun.reactions.util.item.aspects; -import fun.reactions.util.TimeUtils; import fun.reactions.util.Utils; -import fun.reactions.util.item.ItemUtils; import fun.reactions.util.num.NumberUtils; import fun.reactions.util.parameter.Parameters; +import fun.reactions.util.time.TimeUtils; +import org.bukkit.Registry; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.HashSet; import java.util.List; -import java.util.Locale; +import java.util.Objects; +import java.util.Set; public class PotionAspect implements MetaAspect { private final boolean base; @@ -44,79 +43,28 @@ public PotionAspect(boolean base) { public @Nullable MetaAspect.Instance fromItem(@NotNull ItemMeta meta) { if (meta instanceof PotionMeta potionMeta) { return base - ? new Base(potionMeta.getBasePotionData()) + ? potionMeta.hasBasePotionType() ? new Base(potionMeta.getBasePotionType()) : null : potionMeta.hasCustomEffects() ? new Effects(potionMeta.getCustomEffects()) : null; } return null; } - private static final class Base implements MetaAspect.Instance { - private final PotionData potionData; - private final String potionDataStr; - - public Base(@NotNull PotionData potionData) { - this.potionData = potionData; - StringBuilder builder = new StringBuilder(); - builder.append("base-type:").append(potionData.getType().name()); - if (potionData.isExtended()) builder.append(" extended:true"); - if (potionData.isUpgraded()) builder.append(" upgraded:true"); - this.potionDataStr = builder.toString(); - } - - public Base(@NotNull String potionDataStr) { - this.potionDataStr = potionDataStr; - Parameters params = Parameters.fromString(potionDataStr); - PotionType type = params.getEnum("base-type", PotionType.UNCRAFTABLE); - boolean extended = type.isExtendable() && params.getBoolean("extended", false); - boolean upgraded = type.isUpgradeable() && params.getBoolean("upgraded", false); - this.potionData = new PotionData(type, extended, upgraded); - } - - @Override - public void apply(@NotNull ItemMeta meta) { - if (meta instanceof PotionMeta potionMeta) { - potionMeta.setBasePotionData(potionData); - } - } - - @Override - public boolean isSimilar(@NotNull ItemMeta meta) { - if (meta instanceof PotionMeta potionMeta) { - return potionMeta.getBasePotionData().equals(potionData); - } - return false; - } - - @Override - public @NotNull String getName() { - return "potion-base"; - } - - @Override - public @NotNull String asString() { - return potionDataStr; - } - } - private static final class Effects implements MetaAspect.Instance { // TODO Particles, etc public static final Effects EMPTY = new Effects(List.of()); - private final List effects; + private final Set effects; private final String effectsStr; public Effects(@NotNull String value) { this.effectsStr = value; String[] split = value.split(";"); - this.effects = new ArrayList<>(split.length); + this.effects = new HashSet<>(split.length); for (String effectStr : split) { effectStr = effectStr.trim(); String[] effectData = effectStr.split(":"); if (effectData.length < 3) continue; - PotionEffectType type = ItemUtils.searchByKey(effectData[0], PotionEffectType::getByKey); - if (type == null) { - type = PotionEffectType.getByName(effectData[0].toUpperCase(Locale.ROOT)); - if (type == null) continue; - } + PotionEffectType type = Utils.searchRegistry(effectData[0], Registry.POTION_EFFECT_TYPE); + if (type == null) continue; int level = Math.max(NumberUtils.asInteger(effectData[1], 0), 0); long duration = TimeUtils.parseTime(effectData[2]) / 50L; this.effects.add(new PotionEffect(type, NumberUtils.compactLong(duration), level)); @@ -124,10 +72,11 @@ public Effects(@NotNull String value) { } public Effects(@NotNull List effects) { - this.effects = effects; if (effects.isEmpty()) { + this.effects = Set.of(); this.effectsStr = ""; } else { + this.effects = new HashSet<>(effects); StringBuilder builder = new StringBuilder(); for (PotionEffect effect : effects) { builder.append(effect.getType().getKey().getKey()) @@ -151,7 +100,8 @@ public void apply(@NotNull ItemMeta meta) { public boolean isSimilar(@NotNull ItemMeta meta) { if (meta instanceof PotionMeta potionMeta) { if (effects.isEmpty()) return !potionMeta.hasCustomEffects(); - return new HashSet<>(potionMeta.getCustomEffects()).containsAll(effects); + List itemEffects = potionMeta.getCustomEffects(); + return effects.size() == itemEffects.size() && effects.containsAll(itemEffects); } return false; } @@ -166,4 +116,50 @@ public boolean isSimilar(@NotNull ItemMeta meta) { return effectsStr; } } + + private static final class Base implements MetaAspect.Instance { + private final PotionType potionType; + private final String potionTypeStr; + + public Base(@NotNull PotionType potionType) { + this.potionType = potionType; + this.potionTypeStr = potionType.name(); + } + + public Base(@NotNull String potionTypeStr) { + this.potionTypeStr = potionTypeStr; + if (potionTypeStr.isEmpty()) { + this.potionType = null; + } else if (potionTypeStr.startsWith("base-type:")) { + this.potionType = Parameters.fromString(potionTypeStr).getEnum("base-type", PotionType.class); + } else { + this.potionType = Utils.getEnum(PotionType.class, potionTypeStr); + } + } + + @Override + public void apply(@NotNull ItemMeta meta) { + if (meta instanceof PotionMeta potionMeta) { + potionMeta.setBasePotionType(potionType); + } + } + + @Override + public boolean isSimilar(@NotNull ItemMeta meta) { + if (meta instanceof PotionMeta potionMeta) { + return Objects.equals(potionMeta.getBasePotionType(), potionType); + } + return false; + } + + @Override + public @NotNull String getName() { + return "potion-base"; + } + + @Override + public @NotNull String asString() { + return potionTypeStr; + } + } } diff --git a/reactions/src/main/java/fun/reactions/util/parameter/Parameters.java b/reactions/src/main/java/fun/reactions/util/parameter/Parameters.java index 1af1b446..dcff921a 100644 --- a/reactions/src/main/java/fun/reactions/util/parameter/Parameters.java +++ b/reactions/src/main/java/fun/reactions/util/parameter/Parameters.java @@ -1,7 +1,6 @@ package fun.reactions.util.parameter; import fun.reactions.util.RichOptional; -import fun.reactions.util.TimeUtils; import fun.reactions.util.Utils; import fun.reactions.util.bool.TriBoolean; import fun.reactions.util.collections.CaseInsensitiveMap; @@ -9,6 +8,7 @@ import fun.reactions.util.function.SafeSupplier; import fun.reactions.util.item.VirtualItem; import fun.reactions.util.num.NumberUtils; +import fun.reactions.util.time.TimeUtils; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Contract; diff --git a/reactions/src/main/java/fun/reactions/util/TimeUtils.java b/reactions/src/main/java/fun/reactions/util/time/TimeUtils.java similarity index 99% rename from reactions/src/main/java/fun/reactions/util/TimeUtils.java rename to reactions/src/main/java/fun/reactions/util/time/TimeUtils.java index 2a222b32..550a2767 100644 --- a/reactions/src/main/java/fun/reactions/util/TimeUtils.java +++ b/reactions/src/main/java/fun/reactions/util/time/TimeUtils.java @@ -20,7 +20,7 @@ * */ -package fun.reactions.util; +package fun.reactions.util.time; import org.bukkit.Bukkit; import org.bukkit.World; diff --git a/reactions/src/test/java/fun/reactions/util/NumberUtilsTest.java b/reactions/src/test/java/fun/reactions/util/num/NumberUtilsTest.java similarity index 92% rename from reactions/src/test/java/fun/reactions/util/NumberUtilsTest.java rename to reactions/src/test/java/fun/reactions/util/num/NumberUtilsTest.java index 243f74b9..d0a9385d 100644 --- a/reactions/src/test/java/fun/reactions/util/NumberUtilsTest.java +++ b/reactions/src/test/java/fun/reactions/util/num/NumberUtilsTest.java @@ -1,7 +1,5 @@ -package fun.reactions.util; +package fun.reactions.util.num; -import fun.reactions.util.num.Is; -import fun.reactions.util.num.NumberUtils; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; diff --git a/reactions/src/test/java/fun/reactions/util/TimeUtilsTest.java b/reactions/src/test/java/fun/reactions/util/time/TimeUtilsTest.java similarity index 95% rename from reactions/src/test/java/fun/reactions/util/TimeUtilsTest.java rename to reactions/src/test/java/fun/reactions/util/time/TimeUtilsTest.java index ef364751..ee703a8c 100644 --- a/reactions/src/test/java/fun/reactions/util/TimeUtilsTest.java +++ b/reactions/src/test/java/fun/reactions/util/time/TimeUtilsTest.java @@ -1,4 +1,4 @@ -package fun.reactions.util; +package fun.reactions.util.time; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @@ -7,7 +7,7 @@ import java.util.Arrays; import java.util.List; -import static fun.reactions.util.TimeUtils.*; +import static fun.reactions.util.time.TimeUtils.*; import static org.testng.Assert.assertEquals; public class TimeUtilsTest {