diff --git a/.gitignore b/.gitignore index 3506388e..c7cb74dc 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,4 @@ opencode.json CLAUDE.md .claude/settings.local.json build-and-deploy.sh +GEMINI.md \ No newline at end of file diff --git a/API/src/main/java/fr/maxlego08/menu/api/annotations/AutoListener.java b/API/src/main/java/fr/maxlego08/menu/api/annotations/AutoListener.java new file mode 100644 index 00000000..e3a0c549 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/annotations/AutoListener.java @@ -0,0 +1,11 @@ +package fr.maxlego08.menu.api.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface AutoListener { +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/annotations/ComponentLoader.java b/API/src/main/java/fr/maxlego08/menu/api/annotations/ComponentLoader.java new file mode 100644 index 00000000..7f3ba552 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/annotations/ComponentLoader.java @@ -0,0 +1,11 @@ +package fr.maxlego08.menu.api.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ComponentLoader { +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/annotations/PaperOnly.java b/API/src/main/java/fr/maxlego08/menu/api/annotations/PaperOnly.java new file mode 100644 index 00000000..51913f3d --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/annotations/PaperOnly.java @@ -0,0 +1,11 @@ +package fr.maxlego08.menu.api.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface PaperOnly { +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/annotations/SinceVersion.java b/API/src/main/java/fr/maxlego08/menu/api/annotations/SinceVersion.java new file mode 100644 index 00000000..2d2a3c3c --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/annotations/SinceVersion.java @@ -0,0 +1,15 @@ +package fr.maxlego08.menu.api.annotations; + +import org.jetbrains.annotations.NotNull; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface SinceVersion { + @NotNull + String value(); +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/annotations/SpigotOnly.java b/API/src/main/java/fr/maxlego08/menu/api/annotations/SpigotOnly.java new file mode 100644 index 00000000..986a8f68 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/annotations/SpigotOnly.java @@ -0,0 +1,12 @@ +package fr.maxlego08.menu.api.annotations; + + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface SpigotOnly { +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/annotations/UntilVersion.java b/API/src/main/java/fr/maxlego08/menu/api/annotations/UntilVersion.java new file mode 100644 index 00000000..b5739a7b --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/annotations/UntilVersion.java @@ -0,0 +1,16 @@ +package fr.maxlego08.menu.api.annotations; + +import org.jetbrains.annotations.NotNull; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface UntilVersion { + + @NotNull + String value(); +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/command/Command.java b/API/src/main/java/fr/maxlego08/menu/api/command/Command.java index a5c081ad..7322d983 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/command/Command.java +++ b/API/src/main/java/fr/maxlego08/menu/api/command/Command.java @@ -1,6 +1,7 @@ package fr.maxlego08.menu.api.command; import fr.maxlego08.menu.api.requirement.Action; +import fr.maxlego08.menu.api.requirement.Requirement; import org.bukkit.plugin.Plugin; import java.io.File; @@ -102,6 +103,12 @@ public interface Command { */ List subCommands(); + /** + * Gets the list of requirements that must be met for the command's actions to be executed. + * @return The list of requirements that must be met for the command's actions to be executed. + */ + List actions_requirements(); + /** * Gets the message to display when the player does not have the required permission. * diff --git a/API/src/main/java/fr/maxlego08/menu/api/itemstack/components/AttackRangeComponent.java b/API/src/main/java/fr/maxlego08/menu/api/itemstack/components/AttackRangeComponent.java index c8ead34f..bdc139eb 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/itemstack/components/AttackRangeComponent.java +++ b/API/src/main/java/fr/maxlego08/menu/api/itemstack/components/AttackRangeComponent.java @@ -1,24 +1,17 @@ package fr.maxlego08.menu.api.itemstack.components; -import fr.maxlego08.menu.api.context.BuildContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -@SuppressWarnings("unused") -public class AttackRangeComponent extends ItemComponent { +public abstract class AttackRangeComponent extends ItemComponent { + protected final float minReach; + protected final float maxReach; + protected final float minCreativeReach; + protected final float maxCreativeReach; + protected final float hitboxMargin; + protected final float mobFactor; - private final float minReach; - private final float maxReach; - private final float minCreativeReach; - private final float maxCreativeReach; - private final float hitboxMargin; - private final float mobFactor; - public AttackRangeComponent(float minReach, float maxReach, float minCreativeReach, float maxCreativeReach, float hitboxMargin, float mobFactor) { + protected AttackRangeComponent(float minReach, float maxReach, float minCreativeReach, float maxCreativeReach, float hitboxMargin, float mobFactor) { this.minReach = minReach; this.maxReach = maxReach; this.minCreativeReach = minCreativeReach; @@ -50,19 +43,4 @@ public float getHitboxMargin() { public float getMobFactor() { return this.mobFactor; } - - @Override - public void apply(@NotNull BuildContext context, @NotNull ItemStack itemStack, @Nullable Player player) { - ItemMeta itemMeta = itemStack.getItemMeta(); - if (itemMeta == null) return; - org.bukkit.inventory.meta.components.AttackRangeComponent attackRange = itemMeta.getAttackRange(); - attackRange.setMinReach(this.minReach); - attackRange.setMaxReach(this.maxReach); - attackRange.setMinCreativeReach(this.minCreativeReach); - attackRange.setMaxCreativeReach(this.maxCreativeReach); - attackRange.setHitboxMargin(this.hitboxMargin); - attackRange.setMobFactor(this.mobFactor); - itemStack.setItemMeta(itemMeta); - } - } diff --git a/API/src/main/java/fr/maxlego08/menu/api/itemstack/components/MaxStackSizeComponent.java b/API/src/main/java/fr/maxlego08/menu/api/itemstack/components/MaxStackSizeComponent.java index 55f612f7..b019a9d5 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/itemstack/components/MaxStackSizeComponent.java +++ b/API/src/main/java/fr/maxlego08/menu/api/itemstack/components/MaxStackSizeComponent.java @@ -1,16 +1,9 @@ package fr.maxlego08.menu.api.itemstack.components; -import fr.maxlego08.menu.api.context.BuildContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -@SuppressWarnings("unused") -public class MaxStackSizeComponent extends ItemComponent { - private final int maxStackSize; +public abstract class MaxStackSizeComponent extends ItemComponent { + protected final int maxStackSize; public MaxStackSizeComponent(int maxStackSize) { this.maxStackSize = maxStackSize; @@ -19,14 +12,4 @@ public MaxStackSizeComponent(int maxStackSize) { public int getMaxStackSize() { return this.maxStackSize; } - - @Override - public void apply(@NotNull BuildContext context, @NotNull ItemStack itemStack, @Nullable Player player) { - ItemMeta itemMeta = itemStack.getItemMeta(); - if (itemMeta != null) { - itemMeta.setMaxStackSize(this.maxStackSize); - itemStack.setItemMeta(itemMeta); - } - } } - diff --git a/API/src/main/java/fr/maxlego08/menu/api/loader/ButtonLoader.java b/API/src/main/java/fr/maxlego08/menu/api/loader/ButtonLoader.java index bb2707c5..8ec07446 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/loader/ButtonLoader.java +++ b/API/src/main/java/fr/maxlego08/menu/api/loader/ButtonLoader.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.stream.IntStream; @@ -31,9 +32,12 @@ public abstract class ButtonLoader { protected final Plugin plugin; protected final String name; - public ButtonLoader(@NotNull Plugin plugin,@NotNull String name) { + protected final List aliases = new ArrayList<>(); + + public ButtonLoader(@NotNull Plugin plugin,@NotNull String name, String... aliases) { this.plugin = plugin; this.name = name; + this.aliases.addAll(List.of(aliases)); } /** @@ -78,6 +82,17 @@ public String getName() { return this.name; } + /** + * Gets the list of aliases for the button. + * + * @return An unmodifiable list of aliases. + */ + @Contract(pure = true) + @NotNull + public List getAliases() { + return Collections.unmodifiableList(this.aliases); + } + /** * Gets the plugin from which the button loader originates. * diff --git a/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoriesPlayer.java b/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoriesPlayer.java index d7c9f12a..33b84acc 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoriesPlayer.java +++ b/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoriesPlayer.java @@ -28,6 +28,8 @@ public interface InventoriesPlayer extends Listener { */ void storeInventoryTemporary(@NonNull Player player); + void storeInventoryTemporaryOrClear(@NotNull Player player); + /** * Allows giving the inventory back to the player * diff --git a/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoryPlayer.java b/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoryPlayer.java index e0ba743e..5e3a7752 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoryPlayer.java +++ b/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoryPlayer.java @@ -3,6 +3,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import org.jspecify.annotations.NonNull; import java.util.List; import java.util.Map; @@ -19,6 +20,8 @@ public interface InventoryPlayer { */ void storeInventory(@NotNull Player player); + void clearInventory(@NonNull Player player); + /** * Allows giving the inventory back to the player * diff --git a/API/src/main/java/fr/maxlego08/menu/api/requirement/Action.java b/API/src/main/java/fr/maxlego08/menu/api/requirement/Action.java index b9e1f95d..d18731d0 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/requirement/Action.java +++ b/API/src/main/java/fr/maxlego08/menu/api/requirement/Action.java @@ -25,6 +25,7 @@ public abstract class Action { */ private int delay; private float chance; + protected boolean debug = false; /** * The type of the action. @@ -64,6 +65,14 @@ public void setDelay(int delay) { this.delay = delay; } + public boolean isDebug() { + return this.debug; + } + + public void setDebug(boolean debug) { + this.debug = debug; + } + @Contract(pure= true) public float getChance() { return this.chance; diff --git a/API/src/main/java/fr/maxlego08/menu/api/utils/Message.java b/API/src/main/java/fr/maxlego08/menu/api/utils/Message.java index 716bbc5b..f54cf1a9 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/utils/Message.java +++ b/API/src/main/java/fr/maxlego08/menu/api/utils/Message.java @@ -79,7 +79,7 @@ public enum Message implements IMessage { DESCRIPTION_OPEN("Allows you to open an inventory"), DESCRIPTION_SAVE("Allows you to save the item in your hand"), DESCRIPTION_RELOAD("Allows you to reload configuration files"), - DESCRIPTION_VERSION("Show plugin version"), + DESCRIPTION_VERSION("Show plugin value"), DESCRIPTION_LIST("Inventory list"), DESCRIPTION_TEST_DUPE("Test dupe"), DESCRIPTION_OPEN_ITEM("Give open item"), diff --git a/API/src/main/java/fr/maxlego08/menu/api/utils/PlatformType.java b/API/src/main/java/fr/maxlego08/menu/api/utils/PlatformType.java new file mode 100644 index 00000000..c6d38500 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/utils/PlatformType.java @@ -0,0 +1,60 @@ +package fr.maxlego08.menu.api.utils; + +public enum PlatformType { + /** + * Paper server with native Adventure API support. + */ + PAPER, + + /** + * Spigot server requiring Adventure Platform wrapper. + */ + SPIGOT; + + private static PlatformType detectedType; + + /** + * Detects the server platform type by checking for Paper-specific classes. + * + * @return The detected platform type + */ + public static PlatformType detect() { + if (detectedType == null) { + try { + Class.forName("io.papermc.paper.text.PaperComponents"); + detectedType = PAPER; + } catch (ClassNotFoundException e) { + detectedType = SPIGOT; + } + } + return detectedType; + } + + /** + * Gets the detected platform type. + * If detection hasn't been run yet, it will be performed. + * + * @return The platform type + */ + public static PlatformType get() { + return detect(); + } + + /** + * Checks if the current platform is Paper. + * + * @return true if running on Paper, false otherwise + */ + public static boolean isPaper() { + return get() == PAPER; + } + + /** + * Checks if the current platform is Spigot. + * + * @return true if running on Spigot, false otherwise + */ + public static boolean isSpigot() { + return get() == SPIGOT; + } +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/utils/ReflectionsCache.java b/API/src/main/java/fr/maxlego08/menu/api/utils/ReflectionsCache.java new file mode 100644 index 00000000..a3ea6974 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/utils/ReflectionsCache.java @@ -0,0 +1,51 @@ +package fr.maxlego08.menu.api.utils; + +import org.bukkit.plugin.java.JavaPlugin; +import org.reflections.Reflections; +import org.reflections.scanners.Scanners; +import org.reflections.util.ConfigurationBuilder; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class ReflectionsCache { + + private static ReflectionsCache instance; + + private final Map cache; + + private ReflectionsCache() { + this.cache = new ConcurrentHashMap<>(); + } + + public static synchronized ReflectionsCache getInstance() { + if (instance == null) { + instance = new ReflectionsCache(); + } + return instance; + } + + public Reflections getOrCreate(JavaPlugin plugin, String packageName) { + if (packageName == null || packageName.trim().isEmpty()) { + throw new IllegalArgumentException("Package name cannot be null or empty"); + } + + ClassLoader classLoader = plugin.getClass().getClassLoader(); + CacheKey key = new CacheKey(packageName, classLoader); + + return cache.computeIfAbsent(key, k -> createReflections(classLoader, packageName)); + } + + private Reflections createReflections(ClassLoader classLoader, String packageName) { + return new Reflections(new ConfigurationBuilder() + .forPackage(packageName, classLoader) + .addClassLoaders(classLoader) + .setScanners(Scanners.TypesAnnotated, Scanners.SubTypes)); + } + + private record CacheKey(String packageName, int classLoaderHash) { + CacheKey(String packageName, ClassLoader classLoader) { + this(packageName, System.identityHashCode(classLoader)); + } + } +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/utils/TypedMapAccessor.java b/API/src/main/java/fr/maxlego08/menu/api/utils/TypedMapAccessor.java index 2e0978cf..500b8aaa 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/utils/TypedMapAccessor.java +++ b/API/src/main/java/fr/maxlego08/menu/api/utils/TypedMapAccessor.java @@ -25,6 +25,11 @@ public TypedMapAccessor(@NotNull Map map) { this.map = map; } + + public Map getMap() { + return map; + } + /** * Retrieves a string value from the map based on the provided key. * diff --git a/API/src/main/java/fr/maxlego08/menu/api/utils/cuboid/Cuboid.java b/API/src/main/java/fr/maxlego08/menu/api/utils/cuboid/Cuboid.java index 9049c097..0792bbcf 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/utils/cuboid/Cuboid.java +++ b/API/src/main/java/fr/maxlego08/menu/api/utils/cuboid/Cuboid.java @@ -593,7 +593,7 @@ public Block getRelativeBlock(int x, int y, int z) { /** * Get a block relative to the lower NE point of the Cuboid in the given - * World. This version of getRelativeBlock() should be used if being called + * World. This value of getRelativeBlock() should be used if being called * many times, to avoid excessive calls to getWorld(). * * @param w - The world diff --git a/Common/src/main/java/fr/maxlego08/menu/ZMenuItemStack.java b/Common/src/main/java/fr/maxlego08/menu/ZMenuItemStack.java index 11db451b..3175dc16 100644 --- a/Common/src/main/java/fr/maxlego08/menu/ZMenuItemStack.java +++ b/Common/src/main/java/fr/maxlego08/menu/ZMenuItemStack.java @@ -19,9 +19,9 @@ import fr.maxlego08.menu.api.utils.MapConfiguration; import fr.maxlego08.menu.api.utils.OfflinePlayerCache; import fr.maxlego08.menu.api.utils.Placeholders; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.common.utils.ZUtils; import fr.maxlego08.menu.common.utils.itemstack.MenuItemStackFromItemStack; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; import fr.maxlego08.menu.zcore.logger.Logger; import fr.maxlego08.menu.zcore.utils.PerformanceDebug; import org.bukkit.*; @@ -144,7 +144,8 @@ public ItemStack build(BuildContext context) { performanceDebug.end(); performanceDebug.start("build.createItemStack"); - ItemStack itemStack = this.applySpecialItemStack(player, offlinePlayer, placeholders, amount, context.getItemStack() != null ? context.getItemStack() : this.createItemStack(player, placeholders, offlinePlayer, amount)); + boolean editContextItem = context.getItemStack() != null; + ItemStack itemStack = this.applySpecialItemStack(player, offlinePlayer, placeholders, amount, editContextItem ? context.getItemStack() : this.createItemStack(player, placeholders, offlinePlayer, amount)); performanceDebug.end(); performanceDebug.start("build.applyItemMeta"); @@ -172,6 +173,13 @@ public ItemStack build(BuildContext context) { } performanceDebug.end(); + performanceDebug.start("build.setStackSize"); + if (!editContextItem) { + itemStack.setAmount(Math.max(1 , amount)); + } + performanceDebug.end(); + + if (!this.needPlaceholderAPI && Configuration.enableCacheItemStack) { this.cacheItemStack = itemStack; } @@ -278,7 +286,6 @@ private ItemStack applySpecialItemStack(Player player, OfflinePlayer offlinePlay if (this.leatherArmor != null) { itemStack = this.leatherArmor.toItemStack(amount); } - itemStack.setAmount(Math.max(1 , amount)); if (this.durability != null) { int dura = this.parseDura(offlinePlayer == null ? player : offlinePlayer, placeholders); @@ -346,15 +353,15 @@ private void applyFlags(ItemMeta itemMeta) { } private void applyVersionSpecificMeta(ItemStack itemStack, ItemMeta itemMeta, Player player, Placeholders placeholders) { - if (NmsVersion.getCurrentVersion().isNewItemStackAPI()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21"))) { this.buildNewItemStackAPI(itemStack, itemMeta, player, placeholders); } - if (NmsVersion.getCurrentVersion().isNewHeadApi()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.20"))) { this.buildTrimAPI(itemStack, itemMeta, player, placeholders); } - if (this.clearDefaultAttributes && this.attributes.isEmpty() && NmsVersion.getCurrentVersion().getVersion() >= NmsVersion.V_1_20_4.getVersion()) { + if (this.clearDefaultAttributes && this.attributes.isEmpty() && MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.20.4"))) { itemMeta.setAttributeModifiers(ArrayListMultimap.create()); } } diff --git a/Common/src/main/java/fr/maxlego08/menu/common/MinecraftVersion.java b/Common/src/main/java/fr/maxlego08/menu/common/MinecraftVersion.java new file mode 100644 index 00000000..040220f9 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/common/MinecraftVersion.java @@ -0,0 +1,114 @@ +package fr.maxlego08.menu.common; + +import fr.maxlego08.menu.zcore.logger.Logger; +import org.bukkit.Bukkit; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public final class MinecraftVersion implements Comparable { + private static final Map PARSE_CACHE = new ConcurrentHashMap<>(); + + private static MinecraftVersion currentVersion; + + private final int major; + private final int minor; + private final int patch; + + private MinecraftVersion(int major, int minor, int patch) { + this.major = major; + this.minor = minor; + this.patch = patch; + } + + public static MinecraftVersion getCurrentVersion() { + if (currentVersion == null) { + currentVersion = parse(Bukkit.getBukkitVersion()); + } + return currentVersion; + } + + @NotNull + public static MinecraftVersion parse(@Nullable String rawVersion) { + if (rawVersion == null || rawVersion.isBlank()) { + return new MinecraftVersion(0, 0, 0); + } + return PARSE_CACHE.computeIfAbsent(rawVersion, raw -> { + String clean = raw.contains("-") ? raw.substring(0, raw.indexOf('-')) : raw; + String[] parts = clean.split("\\."); + try { + int major = parts.length > 0 ? Integer.parseInt(parts[0]) : 0; + int minor = parts.length > 1 ? Integer.parseInt(parts[1]) : 0; + int patch = parts.length > 2 ? Integer.parseInt(parts[2]) : 0; + return new MinecraftVersion(major, minor, patch); + } catch (NumberFormatException e) { + Logger.info("Could not parse Minecraft value '" + raw + "'. Version-gated classes will be skipped. (" + e.getMessage() + ")", Logger.LogType.WARNING); + return new MinecraftVersion(0, 0, 0); + } + }); + } + + /** + * Returns {@code true} if this value is greater than or equal to {@code other}. + */ + public boolean isAtLeast(MinecraftVersion other) { + return compareTo(other) >= 0; + } + + /** + * Returns {@code true} if this value is less than or equal to {@code other}. + */ + public boolean isAtMost(MinecraftVersion other) { + return compareTo(other) <= 0; + } + + public boolean isBefore(MinecraftVersion other) { + return compareTo(other) < 0; + } + + public boolean isAfter(MinecraftVersion other) { + return compareTo(other) > 0; + } + + public int getMajor() { + return this.major; + } + + public int getMinor() { + return this.minor; + } + + public int getPatch() { + return this.patch; + } + + @Override + public int compareTo(MinecraftVersion other) { + if (this.major != other.major) { + return Integer.compare(this.major, other.major); + } + if (this.minor != other.minor) { + return Integer.compare(this.minor, other.minor); + } + return Integer.compare(this.patch, other.patch); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof MinecraftVersion other)) return false; + return this.major == other.major && this.minor == other.minor && this.patch == other.patch; + } + + @Override + public int hashCode() { + return 31 * (31 * major + minor) + patch; + } + + @Override + public String toString() { + return major + "." + minor + (patch != 0 ? "." + patch : ""); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/common/VersionFilter.java b/Common/src/main/java/fr/maxlego08/menu/common/VersionFilter.java new file mode 100644 index 00000000..3a7296b7 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/common/VersionFilter.java @@ -0,0 +1,42 @@ +package fr.maxlego08.menu.common; + +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.api.annotations.SpigotOnly; +import fr.maxlego08.menu.api.annotations.UntilVersion; +import fr.maxlego08.menu.api.utils.PlatformType; +import org.jetbrains.annotations.NotNull; + +public class VersionFilter { + + private VersionFilter() {} + + public static boolean passes(@NotNull Class clazz) { + if (clazz.isAnnotationPresent(PaperOnly.class) && !PlatformType.isPaper()) { + return false; + } + if (clazz.isAnnotationPresent(SpigotOnly.class) && PlatformType.isPaper()) { + return false; + } + + MinecraftVersion serverVersion = MinecraftVersion.getCurrentVersion(); + + SinceVersion since = clazz.getAnnotation(SinceVersion.class); + if (since != null) { + MinecraftVersion minimum = MinecraftVersion.parse(since.value()); + if (!serverVersion.isAtLeast(minimum)) { + return false; + } + } + + UntilVersion until = clazz.getAnnotation(UntilVersion.class); + if (until != null) { + MinecraftVersion maximum = MinecraftVersion.parse(until.value()); + return serverVersion.isAtMost(maximum); + } + + return true; + + } + +} diff --git a/Common/src/main/java/fr/maxlego08/menu/common/factory/VariantItemComponentLoaderFactory.java b/Common/src/main/java/fr/maxlego08/menu/common/factory/VariantItemComponentLoaderFactory.java deleted file mode 100644 index 905d90f4..00000000 --- a/Common/src/main/java/fr/maxlego08/menu/common/factory/VariantItemComponentLoaderFactory.java +++ /dev/null @@ -1,124 +0,0 @@ -package fr.maxlego08.menu.common.factory; - -import fr.maxlego08.menu.api.loader.ItemComponentLoader; -import org.jetbrains.annotations.NotNull; - -/** - * Factory interface for platform-specific ItemComponentLoaders for all supported variants. - * Each method returns a loader for a specific entity type/variant. - * If a loader cannot be provided, it may return null but all supported loaders should be implemented in factories. - **/ -public interface VariantItemComponentLoaderFactory { - /** - * Loader for Axolotl variant. Never null if the platform supports Axolotl. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderAxolotl(); - /** - * Loader for Cat collar color. May be null if not supported. - * - * @return @Nullable ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderCatCollar(); - /** - * Loader for Cat variant. Never null if supported by the platform. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderCatVariant(); - /** - * Loader for Chicken variant (regardless of underlying Paper/Bukkit differences). - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderChicken(); - /** - * Loader for Cow variant (handles Paper/Bukkit differences). - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderCow(); - /** - * Loader for Fox variant. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderFox(); - /** - * Loader for Frog variant. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderFrog(); - /** - * Loader for Horse variant. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderHorse(); - /** - * Loader for Llama variant. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderLlama(); - /** - * Loader for MushroomCow (Mooshroom) variant. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderMushroomCow(); - /** - * Loader for Painting variant. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderPainting(); - /** - * Loader for Parrot variant. - * - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderParrot(); - /** - * Loader for Pig variant. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderPig(); - /** - * Loader for Rabbit variant. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderRabbit(); - /** - * Loader for Salmon variant. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderSalmon(); - /** - * Loader for Sheep variant (dye color). - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderSheep(); - /** - * Loader for ShulkerBox variant (dye color). - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderShulkerBox(); - /** - * Loader for TropicalFish base color. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderTropicalFishBaseColor(); - /** - * Loader for TropicalFish pattern color. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderTropicalFishPatternColor(); - /** - * Loader for Villager variant. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderVillager(); - /** - * Loader for Wolf collar color. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderWolfCollar(); - /** - * Loader for Wolf variant type. - * @return @NotNull ItemComponentLoader - */ - @NotNull ItemComponentLoader getLoaderWolfVariant(); -} diff --git a/Common/src/main/java/fr/maxlego08/menu/common/utils/MessageUtils.java b/Common/src/main/java/fr/maxlego08/menu/common/utils/MessageUtils.java index ce9596bf..7081e740 100644 --- a/Common/src/main/java/fr/maxlego08/menu/common/utils/MessageUtils.java +++ b/Common/src/main/java/fr/maxlego08/menu/common/utils/MessageUtils.java @@ -3,7 +3,7 @@ import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.utils.IMessage; import fr.maxlego08.menu.api.utils.Message; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; +import fr.maxlego08.menu.common.MinecraftVersion; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -130,7 +130,7 @@ protected final Class getNMSClass(String name) { protected void title(Player player, String title, String subtitle, int fadeInTime, int showTime, int fadeOutTime) { - if (NmsVersion.nmsVersion.isNewMaterial()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.13"))) { player.sendTitle(title, subtitle, fadeInTime, showTime, fadeOutTime); return; } diff --git a/Common/src/main/java/fr/maxlego08/menu/common/utils/ZUtils.java b/Common/src/main/java/fr/maxlego08/menu/common/utils/ZUtils.java index 6ac42804..329581ac 100644 --- a/Common/src/main/java/fr/maxlego08/menu/common/utils/ZUtils.java +++ b/Common/src/main/java/fr/maxlego08/menu/common/utils/ZUtils.java @@ -3,9 +3,9 @@ import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.utils.EnumInventory; import fr.maxlego08.menu.api.utils.Message; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.common.enums.Permission; import fr.maxlego08.menu.common.utils.nms.NMSUtils; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; import fr.maxlego08.menu.zcore.logger.Logger; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ClickEvent; @@ -45,7 +45,7 @@ public abstract class ZUtils extends MessageUtils { private static Material[] byId; static { - if (!NmsVersion.nmsVersion.isNewMaterial()) { + if (!MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.13"))) { byId = new Material[0]; for (Material material : Material.values()) { if (byId.length <= material.getId()) { @@ -57,7 +57,7 @@ public abstract class ZUtils extends MessageUtils { } protected String findPlayerLocale(Player player) { - if (NmsVersion.getCurrentVersion().getVersion() >= NmsVersion.V_1_13.getVersion()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.13"))) { try { return player != null ? player.getLocale() : null; } catch (Exception exception) { @@ -452,7 +452,7 @@ private void applyTextureUrl(ItemStack itemStack, String url) { protected Object getPrivateField(Object object, String field) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { Class clazz = object.getClass(); - Field objectField = field.equals("commandMap") ? clazz.getDeclaredField(field) : field.equals("knownCommands") ? NmsVersion.nmsVersion.isNewMaterial() ? clazz.getSuperclass().getDeclaredField(field) : clazz.getDeclaredField(field) : null; + Field objectField = field.equals("commandMap") ? clazz.getDeclaredField(field) : field.equals("knownCommands") ? MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.13")) ? clazz.getSuperclass().getDeclaredField(field) : clazz.getDeclaredField(field) : null; objectField.setAccessible(true); Object result = objectField.get(object); objectField.setAccessible(false); diff --git a/Common/src/main/java/fr/maxlego08/menu/common/utils/itemstack/MenuItemStackFromItemStack.java b/Common/src/main/java/fr/maxlego08/menu/common/utils/itemstack/MenuItemStackFromItemStack.java index 5edc1a38..d2739d16 100644 --- a/Common/src/main/java/fr/maxlego08/menu/common/utils/itemstack/MenuItemStackFromItemStack.java +++ b/Common/src/main/java/fr/maxlego08/menu/common/utils/itemstack/MenuItemStackFromItemStack.java @@ -4,8 +4,8 @@ import fr.maxlego08.menu.api.InventoryManager; import fr.maxlego08.menu.api.itemstack.Firework; import fr.maxlego08.menu.api.itemstack.Potion; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.common.utils.nms.ItemStackUtils; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; import org.bukkit.FireworkEffect; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.*; @@ -24,7 +24,7 @@ public static ZMenuItemStack fromItemStack(InventoryManager manager, ItemStack i menuItemStack.setMaterial(itemStack.getType().name()); int amount = itemStack.getAmount(); if (amount > 1) menuItemStack.setAmount(String.valueOf(itemStack.getAmount())); - if (NmsVersion.getCurrentVersion().isItemLegacy()) { + if (MinecraftVersion.getCurrentVersion().isBefore(MinecraftVersion.parse("1.13"))) { int durability = itemStack.getDurability(); if (durability > 0) menuItemStack.setDurability(durability); int data = itemStack.getData().getData(); @@ -45,7 +45,7 @@ public static ZMenuItemStack fromItemStack(InventoryManager manager, ItemStack i menuItemStack.setFlags(new ArrayList<>(itemMeta.getItemFlags())); menuItemStack.setEnchantments(itemMeta.getEnchants()); - if (NmsVersion.getCurrentVersion().isCustomModelData() && itemMeta.hasCustomModelData()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.14")) && itemMeta.hasCustomModelData()) { menuItemStack.setModelID(itemMeta.getCustomModelData()); } diff --git a/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/ItemStackCompound.java b/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/ItemStackCompound.java index c6e796eb..197f15dc 100644 --- a/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/ItemStackCompound.java +++ b/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/ItemStackCompound.java @@ -1,5 +1,6 @@ package fr.maxlego08.menu.common.utils.nms; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.common.utils.nms.ItemStackUtils.EnumReflectionItemStack; import org.bukkit.inventory.ItemStack; @@ -12,14 +13,14 @@ public class ItemStackCompound { // Static block to initialize the itemStackCompound based on the NmsVersion static { - fr.maxlego08.menu.common.utils.nms.NmsVersion nmsVersion = fr.maxlego08.menu.common.utils.nms.NmsVersion.nmsVersion; - if (nmsVersion == fr.maxlego08.menu.common.utils.nms.NmsVersion.V_1_18_2) { + MinecraftVersion currentVersion = MinecraftVersion.getCurrentVersion(); + if (currentVersion.equals(MinecraftVersion.parse("1.18.2"))) { itemStackCompound = new ItemStackCompound(EnumReflectionCompound.V1_18_2); - } else if (nmsVersion.getVersion() >= 1200) { + } else if (currentVersion.isAtLeast(MinecraftVersion.parse("1.12"))) { itemStackCompound = new ItemStackCompound(EnumReflectionCompound.V1_12); - } else if (nmsVersion.getVersion() >= 1190) { + } else if (currentVersion.isAtLeast(MinecraftVersion.parse("1.19"))) { itemStackCompound = new ItemStackCompound(EnumReflectionCompound.V1_19); - } else if (nmsVersion.getVersion() >= 1170) { + } else if (currentVersion.isAtLeast(MinecraftVersion.parse("1.17"))) { itemStackCompound = new ItemStackCompound(EnumReflectionCompound.V1_17); } else itemStackCompound = new ItemStackCompound(EnumReflectionCompound.V1_8_8); } @@ -29,7 +30,7 @@ public class ItemStackCompound { /** * Constructs an ItemStackCompound instance based on the given EnumReflectionCompound. * - * @param reflection The EnumReflectionCompound representing the NBT tag reflection version. + * @param reflection The EnumReflectionCompound representing the NBT tag reflection value. */ public ItemStackCompound(EnumReflectionCompound reflection) { super(); diff --git a/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/ItemStackUtils.java b/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/ItemStackUtils.java index cdd70f66..be1e9cfc 100644 --- a/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/ItemStackUtils.java +++ b/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/ItemStackUtils.java @@ -1,6 +1,7 @@ package fr.maxlego08.menu.common.utils.nms; import fr.maxlego08.menu.api.configuration.Configuration; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.common.utils.Base64; import org.bukkit.Bukkit; import org.bukkit.inventory.ItemStack; @@ -15,6 +16,7 @@ public class ItemStackUtils { private static final fr.maxlego08.menu.common.utils.nms.NmsVersion NMS_VERSION = fr.maxlego08.menu.common.utils.nms.NmsVersion.nmsVersion; private static final Map itemStackSerialized = new HashMap<>(); + private static final MinecraftVersion MINECRAFT_VERSION = MinecraftVersion.getCurrentVersion(); public static String serializeItemStack(ItemStack paramItemStack) { @@ -26,7 +28,7 @@ public static String serializeItemStack(ItemStack paramItemStack) { return itemStackSerialized.get(paramItemStack); } - if (fr.maxlego08.menu.common.utils.nms.NmsVersion.getCurrentVersion().isAttributItemStack()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.20.5"))) { return Base64ItemStack.encode(paramItemStack); } @@ -67,7 +69,7 @@ public static ItemStack deserializeItemStack(String paramString) { return null; } - if (fr.maxlego08.menu.common.utils.nms.NmsVersion.getCurrentVersion().isAttributItemStack()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.20.5"))) { return Base64ItemStack.decode(paramString); } @@ -99,7 +101,7 @@ public static ItemStack deserializeItemStack(String paramString) { if (NMS_VERSION == fr.maxlego08.menu.common.utils.nms.NmsVersion.V_1_11 || NMS_VERSION == fr.maxlego08.menu.common.utils.nms.NmsVersion.V_1_12) { Constructor localConstructor = localClass2.getConstructor(localClass1); localObject2 = localConstructor.newInstance(localObject1); - } else if (!NMS_VERSION.isItemLegacy()) { + } else if (MINECRAFT_VERSION.isAtMost(MinecraftVersion.parse("1.13"))) { localObject2 = localClass2.getMethod("a", new Class[]{localClass1}).invoke(null, localObject1); } else { diff --git a/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/NMSUtils.java b/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/NMSUtils.java index df76458f..90642df9 100644 --- a/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/NMSUtils.java +++ b/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/NMSUtils.java @@ -5,9 +5,9 @@ public class NMSUtils { /** - * Get minecraft serveur version + * Get minecraft serveur value * - * @return version + * @return value */ public static double getNMSVersion() { if (version != 0) @@ -24,7 +24,7 @@ public static double getNMSVersion() { } /** - * Check if minecraft version has shulker + * Check if minecraft value has shulker * * @return boolean */ @@ -33,7 +33,7 @@ public static boolean hasShulker() { } /** - * Check if minecraft version has barrel + * Check if minecraft value has barrel * * @return booleab */ @@ -44,7 +44,7 @@ public static boolean hasBarrel() { } /** - * check if version is granther than 1.13 + * check if value is granther than 1.13 * * @return boolean */ @@ -53,7 +53,7 @@ public static boolean isNewVersion() { } /** - * Check if version has one hand + * Check if value has one hand * * @return boolean */ @@ -62,7 +62,7 @@ public static boolean isOneHand() { } /** - * Check is version is minecraft 1.7 + * Check is value is minecraft 1.7 * * @return boolean */ @@ -71,7 +71,7 @@ public static boolean isVeryOldVersion() { } public static double version = getNMSVersion(); /** - * Check if version has itemmeta unbreakable + * Check if value has itemmeta unbreakable * * @return boolean */ @@ -80,7 +80,7 @@ public static boolean isUnbreakable() { } /** - * Check if version is old version of minecraft with old material system + * Check if value is old value of minecraft with old material system * * @return boolean */ @@ -90,7 +90,7 @@ public static boolean isOldVersion() { } /** - * Check if server vesion is new version + * Check if server vesion is new value * * @return boolean */ @@ -101,7 +101,7 @@ public static boolean isNewNMSVersion() { } /** - * Allows to check if the version has the colors in hex + * Allows to check if the value has the colors in hex * * @return boolean */ @@ -111,7 +111,7 @@ public static boolean isHexColor() { } /** - * Allows to check if the version has the colors in hex + * Allows to check if the value has the colors in hex * * @return boolean */ @@ -121,7 +121,7 @@ public static boolean isComponentColor() { } /** - * Check if server version is new version + * Check if server value is new value * * @return boolean */ @@ -133,7 +133,7 @@ public static boolean isNewNBTVersion() { } /** - * Check if server version is new version + * Check if server value is new value * * @return boolean */ diff --git a/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/NmsVersion.java b/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/NmsVersion.java index 9d27dc7e..aadb88d6 100644 --- a/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/NmsVersion.java +++ b/Common/src/main/java/fr/maxlego08/menu/common/utils/nms/NmsVersion.java @@ -1,5 +1,6 @@ package fr.maxlego08.menu.common.utils.nms; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.zcore.logger.Logger; import org.bukkit.Bukkit; @@ -60,9 +61,7 @@ public enum NmsVersion { V_1_21_10(12110), V_1_21_11(12111), - UNKNOWN(Integer.MAX_VALUE) - - ; + UNKNOWN(Integer.MAX_VALUE); public static final NmsVersion nmsVersion = getNmsVersion(); private final int version; @@ -75,12 +74,14 @@ public enum NmsVersion { * Gets the current version of the Bukkit server. * * @return The NmsVersion instance corresponding to the current version. + * @deprecated Use {@link MinecraftVersion#getCurrentVersion()} instead. */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public static NmsVersion getCurrentVersion() { return nmsVersion; } - private static NmsVersion getNmsVersion(){ + private static NmsVersion getNmsVersion() { Matcher matcher = Pattern.compile("(?\\d+\\.\\d+)(?\\.\\d+)?").matcher(Bukkit.getBukkitVersion()); int currentVersion = matcher.find() ? Integer.parseInt(matcher.group("version").replace(".", "") + (matcher.group("patch") != null ? matcher.group("patch").replace(".", "") : "0")) : 0; @@ -93,11 +94,11 @@ private static NmsVersion getNmsVersion(){ if (currentVersion > highestSupportedVersionEnum.version) { Logger.info(String.format( - "Running Minecraft %s (newer than highest supported version %s). " + - "Please report this version to help us add support. " + - "Check for plugin updates if you experience issues.", - currentVersion, - highestSupportedVersionEnum.name() + "Running Minecraft %s (newer than highest supported version %s). " + + "Please report this version to help us add support. " + + "Check for plugin updates if you experience issues.", + currentVersion, + highestSupportedVersionEnum.name() ), Logger.LogType.WARNING); return UNKNOWN; } @@ -116,161 +117,218 @@ private static NmsVersion getNmsVersion(){ } /** - * Checks if the current version supports PlayerProfiles. - * - * @return True if PlayerProfiles are supported, else False. + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.18.1"))} instead. */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean hasPlayerProfiles() { return this.version >= NmsVersion.V_1_18_1.version; } /** - * Checks if the current version uses obfuscated names. - * - * @return True if names are obfuscated, else False. + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.17"))} instead. */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean hasObfuscatedNames() { return this.version >= NmsVersion.V_1_17.version; } /** - * Checks if the current version supports components. - * - * @param isPaper True if the server uses Paper, else False. - * @return True if components are supported, else False. + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.16.5"))} instead (combined with your Paper check). */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isComponent(boolean isPaper) { return isPaper && this.version >= NmsVersion.V_1_16_5.version; } /** - * Checks if the current version is a legacy item version. - * - * @return True if the version is legacy, else False. + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isBefore(MinecraftVersion.parse("1.13"))} instead. */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isItemLegacy() { return this.version < NmsVersion.V_1_13.version; } /** - * Checks if the current version supports PersistentDataContainer. - * - * @return True if PersistentDataContainer is supported, else False. + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.14"))} instead. */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isPdcVersion() { return this.version >= NmsVersion.V_1_14.version; } /** - * Checks if the current version is a legacy version for Skull owners. - * - * @return True if the version is legacy, else False. + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtMost(MinecraftVersion.parse("1.12"))} instead. */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isSkullOwnerLegacy() { return this.version <= NmsVersion.V_1_12.version; } /** - * Checks if the current version supports CustomModelData. - * - * @return True if CustomModelData is supported, else False. + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.14"))} instead. */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isCustomModelData() { return this.version >= NmsVersion.V_1_14.version; } /** - * Checks if the current version is a hexadecimal version. - * - * @return True if the version is hexadecimal, else False. + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.16"))} instead. */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isHexVersion() { return this.version >= NmsVersion.V_1_16.version; } /** - * Checks if the current version is an Attribute version. - * - * @return True if the version is Attribute, else False. + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAfter(MinecraftVersion.parse("1.8.8"))} instead. */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isAttributeVersion() { return this.version != NmsVersion.V_1_8_8.version; } /** - * Gets the version number associated with the enumeration. - * - * @return The version number. + * @deprecated Use {@link MinecraftVersion#getMinor()} or comparisons via {@link MinecraftVersion} instead. */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public int getVersion() { return this.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.20.5"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isAttributItemStack() { return this.version >= NmsVersion.V_1_20_5.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().equals(MinecraftVersion.parse("1.8.8"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isOneHand() { return this.version == NmsVersion.V_1_8_8.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.14"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isBarrel() { return this.version >= V_1_14.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.9"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isShulker() { return this.version >= V_1_9.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.13"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isNewMaterial() { return this.version >= V_1_13.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.18"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isNewNBTVersion() { return this.version >= V_1_18.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.20"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isNewHeadApi() { return this.version >= V_1_20.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.17"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isNewNMSVersion() { return this.version >= V_1_17.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.11"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean is1_11OrNewer() { return this.version >= V_1_11.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.12"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean is1_12OrNewer() { return this.version >= V_1_12.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isNewItemStackAPI() { return this.version >= V_1_21.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.4"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isNewItemModelAPI() { return this.version >= V_1_21_4.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.7"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean isDialogsVersion() { return this.version >= V_1_21_7.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.2"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean is1_21_2OrNewer() { return this.version >= V_1_21_2.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.5"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean is1_21_5OrNewer() { return this.version >= V_1_21_5.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.9"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean is1_21_9OrNewer() { return this.version >= V_1_21_9.version; } + /** + * @deprecated Use {@code MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.11"))} instead. + */ + @Deprecated(since = "1.1.1.4", forRemoval = true) public boolean is1_21_11OrNewer() { return this.version >= V_1_21_11.version; } -} +} \ No newline at end of file diff --git a/Common/src/main/java/fr/maxlego08/menu/itemstack/components/spigot/SpigotAttackRangeComponent.java b/Common/src/main/java/fr/maxlego08/menu/itemstack/components/spigot/SpigotAttackRangeComponent.java new file mode 100644 index 00000000..549b605f --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/itemstack/components/spigot/SpigotAttackRangeComponent.java @@ -0,0 +1,32 @@ +package fr.maxlego08.menu.itemstack.components.spigot; + +import fr.maxlego08.menu.api.context.BuildContext; +import fr.maxlego08.menu.api.itemstack.components.AttackRangeComponent; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +@SuppressWarnings("unused") +public class SpigotAttackRangeComponent extends AttackRangeComponent { + + public SpigotAttackRangeComponent(float minReach, float maxReach, float minCreativeReach, float maxCreativeReach, float hitboxMargin, float mobFactor) { + super(minReach, maxReach, minCreativeReach, maxCreativeReach, hitboxMargin, mobFactor); + } + + @Override + public void apply(@NotNull BuildContext context, @NotNull ItemStack itemStack, @Nullable Player player) { + ItemMeta itemMeta = itemStack.getItemMeta(); + if (itemMeta == null) return; + org.bukkit.inventory.meta.components.AttackRangeComponent attackRange = itemMeta.getAttackRange(); + attackRange.setMinReach(this.minReach); + attackRange.setMaxReach(this.maxReach); + attackRange.setMinCreativeReach(this.minCreativeReach); + attackRange.setMaxCreativeReach(this.maxCreativeReach); + attackRange.setHitboxMargin(this.hitboxMargin); + attackRange.setMobFactor(this.mobFactor); + itemStack.setItemMeta(itemMeta); + } + +} diff --git a/Common/src/main/java/fr/maxlego08/menu/itemstack/components/spigot/SpigotAttackRangeItemComponentLoader.java b/Common/src/main/java/fr/maxlego08/menu/itemstack/components/spigot/SpigotAttackRangeItemComponentLoader.java new file mode 100644 index 00000000..c3474b9a --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/itemstack/components/spigot/SpigotAttackRangeItemComponentLoader.java @@ -0,0 +1,41 @@ +package fr.maxlego08.menu.itemstack.components.spigot; + +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.api.annotations.SpigotOnly; +import fr.maxlego08.menu.api.context.MenuItemStackContext; +import fr.maxlego08.menu.api.itemstack.ItemComponent; +import fr.maxlego08.menu.loader.components.AbstractAttackRangeItemComponentLoader; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; + +@ComponentLoader +@SinceVersion("1.21.11") +@SpigotOnly +public class SpigotAttackRangeItemComponentLoader extends AbstractAttackRangeItemComponentLoader { + + @Override + public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { + if (componentSection == null) { + return null; + } + float minReach = getMinReach(componentSection, path); + float maxReach = getMaxReach(componentSection, path); + float minCreativeReach = getMinCreativeReach(componentSection, path); + float maxCreativeReach = getMaxCreativeReach(componentSection, path); + float hitboxMargin = getHitboxMargin(componentSection, path); + float mobFactor = getMobFactor(componentSection, path); + return new SpigotAttackRangeComponent( + minReach, + maxReach, + minCreativeReach, + maxCreativeReach, + hitboxMargin, + mobFactor + ); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/itemstack/components/spigot/SpigotMaxStackSizeComponent.java b/Common/src/main/java/fr/maxlego08/menu/itemstack/components/spigot/SpigotMaxStackSizeComponent.java new file mode 100644 index 00000000..d4aff75d --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/itemstack/components/spigot/SpigotMaxStackSizeComponent.java @@ -0,0 +1,27 @@ +package fr.maxlego08.menu.itemstack.components.spigot; + +import fr.maxlego08.menu.api.context.BuildContext; +import fr.maxlego08.menu.api.itemstack.components.MaxStackSizeComponent; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +@SuppressWarnings("unused") +public class SpigotMaxStackSizeComponent extends MaxStackSizeComponent { + + public SpigotMaxStackSizeComponent(int maxStackSize) { + super(maxStackSize); + } + + @Override + public void apply(@NotNull BuildContext context, @NotNull ItemStack itemStack, @Nullable Player player) { + ItemMeta itemMeta = itemStack.getItemMeta(); + if (itemMeta != null) { + itemMeta.setMaxStackSize(this.maxStackSize); + itemStack.setItemMeta(itemMeta); + } + } +} + diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotAttackRangeItemComponentLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/AbstractAttackRangeItemComponentLoader.java similarity index 58% rename from src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotAttackRangeItemComponentLoader.java rename to Common/src/main/java/fr/maxlego08/menu/loader/components/AbstractAttackRangeItemComponentLoader.java index 00f75342..4a469a33 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotAttackRangeItemComponentLoader.java +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/AbstractAttackRangeItemComponentLoader.java @@ -1,72 +1,73 @@ -package fr.maxlego08.menu.loader.components.spigot; +package fr.maxlego08.menu.loader.components; import fr.maxlego08.menu.api.configuration.Configuration; -import fr.maxlego08.menu.api.context.MenuItemStackContext; -import fr.maxlego08.menu.api.itemstack.ItemComponent; -import fr.maxlego08.menu.api.itemstack.components.AttackRangeComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; import fr.maxlego08.menu.zcore.logger.Logger; import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import java.io.File; +public abstract class AbstractAttackRangeItemComponentLoader extends ItemComponentLoader { -public class SpigotAttackRangeItemComponentLoader extends ItemComponentLoader { - - public SpigotAttackRangeItemComponentLoader() { + public AbstractAttackRangeItemComponentLoader() { super("attack-range"); } - @Override - public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { - if (componentSection == null) { - return null; - } - double minReach = componentSection.getDouble("min-reach", 0f); + protected float getMinReach(ConfigurationSection section, String path) { + double minReach = section.getDouble("min-reach", 0f); if (minReach > 64f || minReach < 0f) { if (Configuration.enableDebug) Logger.info("Invalid min-reach value in attack-range component at path: " + path + ". Value: " + minReach + ". It must be between 0 and 64. Using default value 0f."); minReach = 0f; } - double maxReach = componentSection.getDouble("max-reach", 3f); + return (float) minReach; + } + + protected float getMaxReach(ConfigurationSection section, String path) { + double maxReach = section.getDouble("max-reach", 3f); if (maxReach > 64f || maxReach < 0f) { if (Configuration.enableDebug) Logger.info("Invalid max-reach value in attack-range component at path: " + path + ". Value: " + maxReach + ". It must be between 0 and 64. Using default value 3f."); maxReach = 3f; } - double minCreativeReach = componentSection.getDouble("min-creative-reach", 0f); + return (float) maxReach; + } + + protected float getMinCreativeReach(ConfigurationSection section, String path) { + double minCreativeReach = section.getDouble("min-creative-reach", 0f); if (minCreativeReach > 64f || minCreativeReach < 0f) { if (Configuration.enableDebug) Logger.info("Invalid min-creative-reach value in attack-range component at path: " + path + ". Value: " + minCreativeReach + ". It must be between 0 and 64. Using default value 0f."); minCreativeReach = 0f; } - double maxCreativeReach = componentSection.getDouble("max-creative-reach", 5f); + return (float) minCreativeReach; + } + + protected float getMaxCreativeReach(ConfigurationSection section, String path) { + double maxCreativeReach = section.getDouble("max-creative-reach", 5f); if (maxCreativeReach > 64f || maxCreativeReach < 0f) { if (Configuration.enableDebug) Logger.info("Invalid max-creative-reach value in attack-range component at path: " + path + ". Value: " + maxCreativeReach + ". It must be between 0 and 64. Using default value 5f."); maxCreativeReach = 5f; } - double hitboxMargin = componentSection.getDouble("hitbox-margin", 0.3f); + return (float) maxCreativeReach; + } + + protected float getHitboxMargin(ConfigurationSection section, String path) { + double hitboxMargin = section.getDouble("hitbox-margin", 0.3f); if (hitboxMargin < 0f || hitboxMargin > 1f) { if (Configuration.enableDebug) Logger.info("Invalid hitbox-margin value in attack-range component at path: " + path + ". Value: " + hitboxMargin + ". It must be between 0 and 1. Using default value 0.3f."); hitboxMargin = 0.3f; } - double mobFactor = componentSection.getDouble("mob-factor", 1f); + return (float) hitboxMargin; + } + + protected float getMobFactor(ConfigurationSection section, String path) { + double mobFactor = section.getDouble("mob-factor", 1f); if (mobFactor < 0f || mobFactor > 2f) { if (Configuration.enableDebug) Logger.info("Invalid mob-factor value in attack-range component at path: " + path + ". Value: " + mobFactor + ". It must be between 0 and 2. Using default value 1f."); mobFactor = 1f; } - return new AttackRangeComponent( - (float) minReach, - (float) maxReach, - (float) minCreativeReach, - (float) maxCreativeReach, - (float) hitboxMargin, - (float) mobFactor - ); + return (float) mobFactor; } } diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotCustomModelDataItemComponentLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotCustomModelDataItemComponentLoader.java index 0443b04c..84a2f708 100644 --- a/Common/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotCustomModelDataItemComponentLoader.java +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotCustomModelDataItemComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.api.annotations.SpigotOnly; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.CustomModelDataComponent; @@ -14,6 +17,9 @@ import java.util.ArrayList; import java.util.List; +@ComponentLoader +@SinceVersion("1.20.5") +@SpigotOnly public class SpigotCustomModelDataItemComponentLoader extends AbstractColorItemComponentLoader { public SpigotCustomModelDataItemComponentLoader(){ diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotVariantItemComponentLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotVariantItemComponentLoader.java deleted file mode 100644 index c6c61cff..00000000 --- a/Common/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotVariantItemComponentLoader.java +++ /dev/null @@ -1,411 +0,0 @@ -package fr.maxlego08.menu.loader.components.spigot; - -import fr.maxlego08.menu.api.context.MenuItemStackContext; -import fr.maxlego08.menu.api.itemstack.ItemComponent; -import fr.maxlego08.menu.api.loader.ItemComponentLoader; -import fr.maxlego08.menu.common.factory.VariantItemComponentLoaderFactory; -import fr.maxlego08.menu.common.interfaces.VariantComponent; -import fr.maxlego08.menu.loader.components.AbstractColorItemComponentLoader; -import org.bukkit.*; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jspecify.annotations.NonNull; - -import java.io.File; -import java.util.function.Function; - -public class SpigotVariantItemComponentLoader implements VariantItemComponentLoaderFactory { - - protected final VariantComponent variantFactory; - - public SpigotVariantItemComponentLoader(VariantComponent variantFactory) { - this.variantFactory = variantFactory; - } - - @Override - public @NonNull ItemComponentLoader getLoaderAxolotl() { - return new Axolotl(); - } - - - @Override - public @NotNull ItemComponentLoader getLoaderCatCollar() { - return new Cat(this.variantFactory).new Collar(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderCatVariant() { - return new Cat(this.variantFactory).new Variant(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderChicken() { - return new Chicken(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderCow() { - return new Cow(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderFox() { - return new Fox(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderFrog() { - return new Frog(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderHorse() { - return new Horse(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderLlama() { - return new Llama(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderMushroomCow() { - return new MushroomCow(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderPainting() { - return new Painting(); - } - - - @Override - public @NotNull ItemComponentLoader getLoaderParrot() { - return new Parrot(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderPig() { - return new Pig(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderRabbit() { - return new Rabbit(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderSalmon() { - return new Salmon(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderSheep() { - return new Sheep(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderShulkerBox() { - return new ShulkerBox(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderTropicalFishBaseColor() { - return new TropicalFish(this.variantFactory).new BaseColor(); - } - - @Override - public @NonNull ItemComponentLoader getLoaderTropicalFishPatternColor() { - return new TropicalFish(this.variantFactory).new PatternColor(); - } - - @Override - public @NonNull ItemComponentLoader getLoaderVillager() { - return new Villager(); - } - - - @Override - public @NonNull ItemComponentLoader getLoaderWolfCollar() { - return new Wolf(this.variantFactory).new Collar(); - } - - @Override - public @NonNull ItemComponentLoader getLoaderWolfVariant() { - return new Wolf(this.variantFactory).new Variant(); - } - - private static abstract class EnumVariantLoader> extends ItemComponentLoader { - private final Class enumClass; - private final Function componentFactory; - - protected EnumVariantLoader(String path, Class enumClass, Function componentFactory) { - super(path); - this.enumClass = enumClass; - this.componentFactory = componentFactory; - } - - @Override - public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { - path = this.normalizePath(path); - String value = configuration.getString(path); - if (value == null) return null; - try { - T variant = Enum.valueOf(this.enumClass, value.toUpperCase()); - return this.componentFactory.apply(variant); - } catch (IllegalArgumentException e) { - return null; - } - } - } - - protected static abstract class RegistryVariantLoader extends ItemComponentLoader { - private final Registry registry; - private final Function componentFactory; - - protected RegistryVariantLoader(String path, Registry registry, Function componentFactory) { - super(path); - this.registry = registry; - this.componentFactory = componentFactory; - } - - @Override - public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { - path = this.normalizePath(path); - String value = configuration.getString(path); - if (value == null) return null; - NamespacedKey key = NamespacedKey.fromString(value.toLowerCase()); - if (key == null) return null; - try { - return this.componentFactory.apply(this.registry.getOrThrow(key)); - } catch (IllegalArgumentException e) { - return null; - } - } - } - - private static abstract class DyeColorVariantLoader extends ItemComponentLoader { - private final Function componentFactory; - - protected DyeColorVariantLoader(String path, Function componentFactory) { - super(path); - this.componentFactory = componentFactory; - } - - @Override - public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { - path = this.normalizePath(path); - String value = configuration.getString(path); - if (value == null) return null; - try { - DyeColor dyeColor = DyeColor.valueOf(value.toUpperCase()); - return this.componentFactory.apply(dyeColor); - } catch (IllegalArgumentException e) { - return null; - } - } - } - - private static abstract class CollarColorLoader extends AbstractColorItemComponentLoader { - private final Function componentFactory; - - protected CollarColorLoader(String path, Function componentFactory) { - super(path); - this.componentFactory = componentFactory; - } - - @Override - public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { - path = this.normalizePath(path); - Object rawColor = configuration.get(path); - if (rawColor == null) return null; - Color color = this.parseColor(rawColor); - DyeColor dyeColor; - if (color == null) { - try { - dyeColor = DyeColor.valueOf(rawColor.toString().toUpperCase()); - } catch (IllegalArgumentException e) { - return null; - } - } else { - dyeColor = DyeColor.getByColor(color); - } - if (dyeColor == null) return null; - return this.componentFactory.apply(dyeColor); - } - } - - // Specific loaders - public class Axolotl extends EnumVariantLoader { - public Axolotl() { - super("axolotl/variant", org.bukkit.entity.Axolotl.Variant.class, SpigotVariantItemComponentLoader.this.variantFactory::createAxolotl); - } - } - - public static class Cat { - private final VariantComponent variantFactory; - - public Cat(VariantComponent variantFactory) { - this.variantFactory = variantFactory; - } - - public class Collar extends CollarColorLoader { - public Collar() { - super("cat/collar", Cat.this.variantFactory::createCatCollar); - } - } - - public class Variant extends RegistryVariantLoader { - public Variant() { - super("cat/variant", Registry.CAT_VARIANT, Cat.this.variantFactory::createCatVariant); - } - } - } - - public class Chicken extends RegistryVariantLoader { - public Chicken() { - super("chicken/variant", Registry.CHICKEN_VARIANT, SpigotVariantItemComponentLoader.this.variantFactory::createChicken); - } - } - - public class Cow extends RegistryVariantLoader { - public Cow() { - super("cow/variant", Registry.COW_VARIANT, SpigotVariantItemComponentLoader.this.variantFactory::createCow); - } - } - - public class Fox extends EnumVariantLoader { - public Fox() { - super("fox/variant", org.bukkit.entity.Fox.Type.class, SpigotVariantItemComponentLoader.this.variantFactory::createFox); - } - } - - public class Frog extends RegistryVariantLoader { - public Frog() { - super("frog/variant", Registry.FROG_VARIANT, SpigotVariantItemComponentLoader.this.variantFactory::createFrog); - } - } - - public class Horse extends EnumVariantLoader { - public Horse() { - super("horse/variant", org.bukkit.entity.Horse.Color.class, SpigotVariantItemComponentLoader.this.variantFactory::createHorse); - } - } - - public class Llama extends EnumVariantLoader { - public Llama() { - super("llama/variant", org.bukkit.entity.Llama.Color.class, SpigotVariantItemComponentLoader.this.variantFactory::createLlama); - } - } - - public class MushroomCow extends EnumVariantLoader { - public MushroomCow() { - super("mooshroom/variant", org.bukkit.entity.MushroomCow.Variant.class, SpigotVariantItemComponentLoader.this.variantFactory::createMushroomCow); - } - } - - public class Painting extends RegistryVariantLoader { - public Painting() { - super("painting/variant", Registry.ART, SpigotVariantItemComponentLoader.this.variantFactory::createPainting); - } - } - - public class Parrot extends EnumVariantLoader { - public Parrot() { - super("parrot/variant", org.bukkit.entity.Parrot.Variant.class, SpigotVariantItemComponentLoader.this.variantFactory::createParrot); - } - } - - public class Pig extends RegistryVariantLoader { - public Pig() { - super("pig/variant", Registry.PIG_VARIANT, SpigotVariantItemComponentLoader.this.variantFactory::createPig); - } - } - - public class Rabbit extends EnumVariantLoader { - public Rabbit() { - super("rabbit/variant", org.bukkit.entity.Rabbit.Type.class, SpigotVariantItemComponentLoader.this.variantFactory::createRabbit); - } - } - - public class Salmon extends EnumVariantLoader { - public Salmon() { - super("salmon/size", org.bukkit.entity.Salmon.Variant.class, SpigotVariantItemComponentLoader.this.variantFactory::createSalmon); - } - } - - public class Sheep extends DyeColorVariantLoader { - public Sheep() { - super("sheep/color", SpigotVariantItemComponentLoader.this.variantFactory::createSheep); - } - } - - public class ShulkerBox extends DyeColorVariantLoader { - public ShulkerBox() { - super("shulker/color", SpigotVariantItemComponentLoader.this.variantFactory::createShulkerBox); - } - } - - public static class TropicalFish { - private final VariantComponent variantFactory; - - public TropicalFish(VariantComponent variantFactory) { - this.variantFactory = variantFactory; - } - - public class BaseColor extends DyeColorVariantLoader { - public BaseColor() { - super("tropical_fish/base_color", TropicalFish.this.variantFactory::createTropicalFishBaseColor); - } - } - - public class PatternColor extends DyeColorVariantLoader { - public PatternColor() { - super("tropical_fish/pattern_color", TropicalFish.this.variantFactory::createTropicalFishPatternColor); - } - } - } - - public class Villager extends RegistryVariantLoader { - public Villager() { - super("villager/variant", Registry.VILLAGER_TYPE, SpigotVariantItemComponentLoader.this.variantFactory::createVillager); - } - } - - public static class Wolf { - private final VariantComponent variantFactory; - - public Wolf(VariantComponent variantFactory) { - this.variantFactory = variantFactory; - } - - public class Collar extends CollarColorLoader { - public Collar() { - super("wolf/collar", Wolf.this.variantFactory::createWolfCollar); - } - } - - public class Variant extends RegistryVariantLoader { - public Variant() { - super("wolf/variant", Registry.WOLF_VARIANT, Wolf.this.variantFactory::createWolfVariant); - } - } - } -} \ No newline at end of file diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/AxolotlVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/AxolotlVariantLoader.java new file mode 100644 index 00000000..ee49cb04 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/AxolotlVariantLoader.java @@ -0,0 +1,16 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.EnumVariantLoader; +import org.bukkit.entity.Axolotl; + +@ComponentLoader +@SinceVersion("1.17") +public class AxolotlVariantLoader extends EnumVariantLoader { + public AxolotlVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("axolotl/variant", Axolotl.Variant.class, variantFactory::createAxolotl); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/CatCollarVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/CatCollarVariantLoader.java new file mode 100644 index 00000000..01260992 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/CatCollarVariantLoader.java @@ -0,0 +1,15 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.CollarColorLoader; + +@ComponentLoader +@SinceVersion("1.20.5") +public class CatCollarVariantLoader extends CollarColorLoader { + public CatCollarVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("cat/collar", variantFactory::createCatCollar); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/CatVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/CatVariantLoader.java new file mode 100644 index 00000000..db92b92b --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/CatVariantLoader.java @@ -0,0 +1,17 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.RegistryVariantLoader; +import org.bukkit.Registry; +import org.bukkit.entity.Cat; + +@ComponentLoader +@SinceVersion("1.20.5") +public class CatVariantLoader extends RegistryVariantLoader { + public CatVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("cat/variant", Registry.CAT_VARIANT, variantFactory::createCatVariant); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/FoxVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/FoxVariantLoader.java new file mode 100644 index 00000000..e496ba06 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/FoxVariantLoader.java @@ -0,0 +1,16 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.EnumVariantLoader; +import org.bukkit.entity.Fox; + +@ComponentLoader +@SinceVersion("1.13") +public class FoxVariantLoader extends EnumVariantLoader { + public FoxVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("fox/variant", Fox.Type.class, variantFactory::createFox); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/FrogVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/FrogVariantLoader.java new file mode 100644 index 00000000..4173235c --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/FrogVariantLoader.java @@ -0,0 +1,17 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.RegistryVariantLoader; +import org.bukkit.Registry; +import org.bukkit.entity.Frog; + +@ComponentLoader +@SinceVersion("1.18") +public class FrogVariantLoader extends RegistryVariantLoader { + public FrogVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("frog/variant", Registry.FROG_VARIANT, variantFactory::createFrog); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/HorseVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/HorseVariantLoader.java new file mode 100644 index 00000000..32e93935 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/HorseVariantLoader.java @@ -0,0 +1,16 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.EnumVariantLoader; +import org.bukkit.entity.Horse; + +@ComponentLoader +@SinceVersion("1.20.5") +public class HorseVariantLoader extends EnumVariantLoader { + public HorseVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("horse/variant", Horse.Color.class, variantFactory::createHorse); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/LlamaVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/LlamaVariantLoader.java new file mode 100644 index 00000000..91d8af0e --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/LlamaVariantLoader.java @@ -0,0 +1,16 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.EnumVariantLoader; +import org.bukkit.entity.Llama; + +@ComponentLoader +@SinceVersion("1.11") +public class LlamaVariantLoader extends EnumVariantLoader { + public LlamaVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("llama/variant", Llama.Color.class, variantFactory::createLlama); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/MushroomCowVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/MushroomCowVariantLoader.java new file mode 100644 index 00000000..c7a7462b --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/MushroomCowVariantLoader.java @@ -0,0 +1,16 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.EnumVariantLoader; +import org.bukkit.entity.MushroomCow; + +@ComponentLoader +@SinceVersion("1.13") +public class MushroomCowVariantLoader extends EnumVariantLoader { + public MushroomCowVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("mooshroom/variant", MushroomCow.Variant.class, variantFactory::createMushroomCow); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/PaintingVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/PaintingVariantLoader.java new file mode 100644 index 00000000..b051858c --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/PaintingVariantLoader.java @@ -0,0 +1,17 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.RegistryVariantLoader; +import org.bukkit.Art; +import org.bukkit.Registry; + +@ComponentLoader +@SinceVersion("1.20.5") +public class PaintingVariantLoader extends RegistryVariantLoader { + public PaintingVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("painting/variant", Registry.ART, variantFactory::createPainting); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/ParrotVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/ParrotVariantLoader.java new file mode 100644 index 00000000..3679f750 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/ParrotVariantLoader.java @@ -0,0 +1,16 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.EnumVariantLoader; +import org.bukkit.entity.Parrot; + +@ComponentLoader +@SinceVersion("1.12") +public class ParrotVariantLoader extends EnumVariantLoader { + public ParrotVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("parrot/variant", Parrot.Variant.class, variantFactory::createParrot); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/RabbitVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/RabbitVariantLoader.java new file mode 100644 index 00000000..0873916b --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/RabbitVariantLoader.java @@ -0,0 +1,16 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.EnumVariantLoader; +import org.bukkit.entity.Rabbit; + +@ComponentLoader +@SinceVersion("1.20.5") +public class RabbitVariantLoader extends EnumVariantLoader { + public RabbitVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("rabbit/variant", Rabbit.Type.class, variantFactory::createRabbit); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SalmonVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SalmonVariantLoader.java new file mode 100644 index 00000000..74534bdf --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SalmonVariantLoader.java @@ -0,0 +1,16 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.EnumVariantLoader; +import org.bukkit.entity.Salmon; + +@ComponentLoader +@SinceVersion("1.21.5") +public class SalmonVariantLoader extends EnumVariantLoader { + public SalmonVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("salmon/size", Salmon.Variant.class, variantFactory::createSalmon); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SheepColorVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SheepColorVariantLoader.java new file mode 100644 index 00000000..44834783 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SheepColorVariantLoader.java @@ -0,0 +1,15 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.DyeColorVariantLoader; + +@ComponentLoader +@SinceVersion("1.20.5") +public class SheepColorVariantLoader extends DyeColorVariantLoader { + public SheepColorVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("sheep/color", variantFactory::createSheep); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/ShulkerBoxColorVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/ShulkerBoxColorVariantLoader.java new file mode 100644 index 00000000..0d05701e --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/ShulkerBoxColorVariantLoader.java @@ -0,0 +1,15 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.DyeColorVariantLoader; + +@ComponentLoader +@SinceVersion("1.11") +public class ShulkerBoxColorVariantLoader extends DyeColorVariantLoader { + public ShulkerBoxColorVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("shulker/color", variantFactory::createShulkerBox); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SpigotChickenVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SpigotChickenVariantLoader.java new file mode 100644 index 00000000..c664e6c0 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SpigotChickenVariantLoader.java @@ -0,0 +1,19 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.api.annotations.SpigotOnly; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.RegistryVariantLoader; +import org.bukkit.Registry; +import org.bukkit.entity.Chicken; + +@ComponentLoader +@SpigotOnly +@SinceVersion("1.21.5") +public class SpigotChickenVariantLoader extends RegistryVariantLoader { + public SpigotChickenVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("chicken/variant", Registry.CHICKEN_VARIANT, variantFactory::createChicken); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SpigotCowVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SpigotCowVariantLoader.java new file mode 100644 index 00000000..7fbfffd3 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SpigotCowVariantLoader.java @@ -0,0 +1,19 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.api.annotations.SpigotOnly; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.RegistryVariantLoader; +import org.bukkit.Registry; +import org.bukkit.entity.Cow; + +@ComponentLoader +@SpigotOnly +@SinceVersion("1.21.5") +public class SpigotCowVariantLoader extends RegistryVariantLoader { + public SpigotCowVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("cow/variant", Registry.COW_VARIANT, variantFactory::createCow); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SpigotPigVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SpigotPigVariantLoader.java new file mode 100644 index 00000000..a7b327ee --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/SpigotPigVariantLoader.java @@ -0,0 +1,19 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.api.annotations.SpigotOnly; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.RegistryVariantLoader; +import org.bukkit.Registry; +import org.bukkit.entity.Pig; + +@ComponentLoader +@SpigotOnly +@SinceVersion("1.21.5") +public class SpigotPigVariantLoader extends RegistryVariantLoader { + public SpigotPigVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("pig/variant", Registry.PIG_VARIANT, variantFactory::createPig); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/TropicalFishBaseColorVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/TropicalFishBaseColorVariantLoader.java new file mode 100644 index 00000000..d4730bea --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/TropicalFishBaseColorVariantLoader.java @@ -0,0 +1,15 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.DyeColorVariantLoader; + +@ComponentLoader +@SinceVersion("1.20.5") +public class TropicalFishBaseColorVariantLoader extends DyeColorVariantLoader { + public TropicalFishBaseColorVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("tropical_fish/base_color", variantFactory::createTropicalFishBaseColor); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/TropicalFishPatternColorVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/TropicalFishPatternColorVariantLoader.java new file mode 100644 index 00000000..4e69c954 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/TropicalFishPatternColorVariantLoader.java @@ -0,0 +1,15 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.DyeColorVariantLoader; + +@ComponentLoader +@SinceVersion("1.20.5") +public class TropicalFishPatternColorVariantLoader extends DyeColorVariantLoader { + public TropicalFishPatternColorVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("tropical_fish/pattern_color", variantFactory::createTropicalFishPatternColor); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/VillagerVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/VillagerVariantLoader.java new file mode 100644 index 00000000..7ae6228b --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/VillagerVariantLoader.java @@ -0,0 +1,17 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.RegistryVariantLoader; +import org.bukkit.Registry; +import org.bukkit.entity.Villager; + +@ComponentLoader +@SinceVersion("1.20.5") +public class VillagerVariantLoader extends RegistryVariantLoader { + public VillagerVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("villager/variant", Registry.VILLAGER_TYPE, variantFactory::createVillager); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/WolfCollarVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/WolfCollarVariantLoader.java new file mode 100644 index 00000000..42a107a0 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/WolfCollarVariantLoader.java @@ -0,0 +1,15 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.CollarColorLoader; + +@ComponentLoader +@SinceVersion("1.20.5") +public class WolfCollarVariantLoader extends CollarColorLoader { + public WolfCollarVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("wolf/collar", variantFactory::createWolfCollar); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/WolfVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/WolfVariantLoader.java new file mode 100644 index 00000000..e3cce42f --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/WolfVariantLoader.java @@ -0,0 +1,17 @@ +package fr.maxlego08.menu.loader.components.variants; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.RegistryVariantLoader; +import org.bukkit.Registry; +import org.bukkit.entity.Wolf; + +@ComponentLoader +@SinceVersion("1.20.5") +public class WolfVariantLoader extends RegistryVariantLoader { + public WolfVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("wolf/variant", Registry.WOLF_VARIANT, variantFactory::createWolfVariant); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/CollarColorLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/CollarColorLoader.java new file mode 100644 index 00000000..0d49c8ce --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/CollarColorLoader.java @@ -0,0 +1,43 @@ +package fr.maxlego08.menu.loader.components.variants.base; + +import fr.maxlego08.menu.api.context.MenuItemStackContext; +import fr.maxlego08.menu.api.itemstack.ItemComponent; +import fr.maxlego08.menu.loader.components.AbstractColorItemComponentLoader; +import org.bukkit.Color; +import org.bukkit.DyeColor; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.function.Function; + +public abstract class CollarColorLoader extends AbstractColorItemComponentLoader { + private final Function componentFactory; + + protected CollarColorLoader(String path, Function componentFactory) { + super(path); + this.componentFactory = componentFactory; + } + + @Override + public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { + path = normalizePath(path); + Object rawColor = configuration.get(path); + if (rawColor == null) return null; + Color color = parseColor(rawColor); + DyeColor dyeColor; + if (color == null) { + try { + dyeColor = DyeColor.valueOf(rawColor.toString().toUpperCase()); + } catch (IllegalArgumentException e) { + return null; + } + } else { + dyeColor = DyeColor.getByColor(color); + } + if (dyeColor == null) return null; + return componentFactory.apply(dyeColor); + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/DyeColorVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/DyeColorVariantLoader.java new file mode 100644 index 00000000..5714771f --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/DyeColorVariantLoader.java @@ -0,0 +1,35 @@ +package fr.maxlego08.menu.loader.components.variants.base; + +import fr.maxlego08.menu.api.context.MenuItemStackContext; +import fr.maxlego08.menu.api.itemstack.ItemComponent; +import fr.maxlego08.menu.api.loader.ItemComponentLoader; +import org.bukkit.DyeColor; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.function.Function; + +public abstract class DyeColorVariantLoader extends ItemComponentLoader { + private final Function componentFactory; + + protected DyeColorVariantLoader(String path, Function componentFactory) { + super(path); + this.componentFactory = componentFactory; + } + + @Override + public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { + path = normalizePath(path); + String value = configuration.getString(path); + if (value == null) return null; + try { + DyeColor dyeColor = DyeColor.valueOf(value.toUpperCase()); + return componentFactory.apply(dyeColor); + } catch (IllegalArgumentException e) { + return null; + } + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/EnumVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/EnumVariantLoader.java new file mode 100644 index 00000000..9fdef0f3 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/EnumVariantLoader.java @@ -0,0 +1,36 @@ +package fr.maxlego08.menu.loader.components.variants.base; + +import fr.maxlego08.menu.api.context.MenuItemStackContext; +import fr.maxlego08.menu.api.itemstack.ItemComponent; +import fr.maxlego08.menu.api.loader.ItemComponentLoader; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.function.Function; + +public abstract class EnumVariantLoader> extends ItemComponentLoader { + private final Class enumClass; + private final Function componentFactory; + + protected EnumVariantLoader(String path, Class enumClass, Function componentFactory) { + super(path); + this.enumClass = enumClass; + this.componentFactory = componentFactory; + } + + @Override + public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { + path = normalizePath(path); + String value = configuration.getString(path); + if (value == null) return null; + try { + T variant = Enum.valueOf(enumClass, value.toUpperCase()); + return componentFactory.apply(variant); + } catch (IllegalArgumentException e) { + return null; + } + } +} diff --git a/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/RegistryVariantLoader.java b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/RegistryVariantLoader.java new file mode 100644 index 00000000..2016af75 --- /dev/null +++ b/Common/src/main/java/fr/maxlego08/menu/loader/components/variants/base/RegistryVariantLoader.java @@ -0,0 +1,40 @@ +package fr.maxlego08.menu.loader.components.variants.base; + +import fr.maxlego08.menu.api.context.MenuItemStackContext; +import fr.maxlego08.menu.api.itemstack.ItemComponent; +import fr.maxlego08.menu.api.loader.ItemComponentLoader; +import org.bukkit.Keyed; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.function.Function; + +public abstract class RegistryVariantLoader extends ItemComponentLoader { + private final Registry registry; + private final Function componentFactory; + + protected RegistryVariantLoader(String path, Registry registry, Function componentFactory) { + super(path); + this.registry = registry; + this.componentFactory = componentFactory; + } + + @Override + public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { + path = normalizePath(path); + String value = configuration.getString(path); + if (value == null) return null; + NamespacedKey key = NamespacedKey.fromString(value.toLowerCase()); + if (key == null) return null; + try { + return componentFactory.apply(registry.getOrThrow(key)); + } catch (IllegalArgumentException e) { + return null; + } + } +} diff --git a/Hooks/MMOItems/src/main/java/fr/maxlego08/menu/hooks/mmoitems/MMOItemsLoader.java b/Hooks/MMOItems/src/main/java/fr/maxlego08/menu/hooks/mmoitems/MMOItemsLoader.java index cde9cdb6..b5be3f8e 100644 --- a/Hooks/MMOItems/src/main/java/fr/maxlego08/menu/hooks/mmoitems/MMOItemsLoader.java +++ b/Hooks/MMOItems/src/main/java/fr/maxlego08/menu/hooks/mmoitems/MMOItemsLoader.java @@ -1,6 +1,8 @@ package fr.maxlego08.menu.hooks.mmoitems; +import fr.maxlego08.menu.api.configuration.Configuration; import fr.maxlego08.menu.api.loader.MaterialLoader; +import fr.maxlego08.menu.zcore.logger.Logger; import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.api.Type; import org.bukkit.configuration.file.YamlConfiguration; @@ -21,9 +23,21 @@ public MMOItemsLoader() { if (split.length != 2) return null; try { final Type type = MMOItems.plugin.getTypes().get(split[0]); - if (type == null) return null; - return MMOItems.plugin.getItem(type, split[1]); + if (type == null) { + if (Configuration.enableDebug) + Logger.info(String.format("Invalid MMOItems type '%s' for material '%s', available types: %s", split[0], materialString, MMOItems.plugin.getTypes().getAllTypeNames())); + return null; + } + ItemStack item = MMOItems.plugin.getItem(type, split[1]); + if (item == null) { + if (Configuration.enableDebug) + Logger.info(String.format("Invalid MMOItems item '%s' for type '%s', available items: %s", split[1], split[0], MMOItems.plugin.getTemplates().getTemplateNames(type))); + return null; + } + return item; } catch (Exception e) { + if (Configuration.enableDebug) + Logger.info(String.format("Error loading MMOItems material '%s': %s", materialString, e.getMessage())); return null; } } diff --git a/Hooks/PacketEvents/src/main/java/fr/maxlego08/menu/hooks/packetevents/PacketEventPlayerInventoryManager.java b/Hooks/PacketEvents/src/main/java/fr/maxlego08/menu/hooks/packetevents/PacketEventPlayerInventoryManager.java index 91b49d76..f551dba2 100644 --- a/Hooks/PacketEvents/src/main/java/fr/maxlego08/menu/hooks/packetevents/PacketEventPlayerInventoryManager.java +++ b/Hooks/PacketEvents/src/main/java/fr/maxlego08/menu/hooks/packetevents/PacketEventPlayerInventoryManager.java @@ -3,6 +3,7 @@ import com.github.retrooper.packetevents.PacketEvents; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSetPlayerInventory; import fr.maxlego08.menu.api.InventoryListener; +import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.engine.BaseInventory; import fr.maxlego08.menu.api.engine.ItemButton; import fr.maxlego08.menu.api.players.inventory.InventoryPlayer; @@ -20,9 +21,11 @@ import java.util.UUID; public class PacketEventPlayerInventoryManager implements InventoryListener { + private final MenuPlugin plugin; private final Map> pendingInventoryUpdates = new HashMap<>(); - public PacketEventPlayerInventoryManager() { + public PacketEventPlayerInventoryManager(MenuPlugin plugin) { + this.plugin = plugin; ClearInvType packetEvent = ClearInvType.PACKET_EVENT; packetEvent.setOnButtonClear((player, slot)->this.addItemInstantly(player,slot,new ItemStack(Material.AIR))); packetEvent.setOnInventoryClose(((inventoriesPlayer, player) -> { @@ -56,11 +59,15 @@ public void onInventoryPreOpen(Player player, BaseInventory baseInventory, int p public void onInventoryPostOpen(Player player, BaseInventory baseInventory){ UUID playerUniqueId = player.getUniqueId(); if (this.pendingInventoryUpdates.containsKey(playerUniqueId)) { - Map wrappers = this.pendingInventoryUpdates.get(playerUniqueId); - for (WrapperPlayServerSetPlayerInventory wrapper : wrappers.values()) { - PacketEvents.getAPI().getPlayerManager().sendPacket(player, wrapper); - } - this.pendingInventoryUpdates.remove(playerUniqueId); + this.plugin.getScheduler().runAtEntityLater(player, () -> { + Map wrappers = this.pendingInventoryUpdates.get(playerUniqueId); + if (wrappers != null) { + for (WrapperPlayServerSetPlayerInventory wrapper : wrappers.values()) { + PacketEvents.getAPI().getPlayerManager().sendPacket(player, wrapper); + } + this.pendingInventoryUpdates.remove(playerUniqueId); + } + }, 1); } } diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogItemBodyLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogItemBodyLoader.java index d80d4212..2ec72dcf 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogItemBodyLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogItemBodyLoader.java @@ -13,7 +13,7 @@ public class DialogItemBodyLoader extends ButtonLoader { public DialogItemBodyLoader(Plugin plugin) { - super(plugin, "dialog_item"); + super(plugin, "dialog_item", "item"); } @Override diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogPlainMessageBodyLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogPlainMessageBodyLoader.java index 9814badf..914b6b13 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogPlainMessageBodyLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogPlainMessageBodyLoader.java @@ -2,8 +2,6 @@ import fr.maxlego08.menu.api.button.Button; import fr.maxlego08.menu.api.button.DefaultButtonValue; -import fr.maxlego08.menu.api.button.dialogs.BodyButton; -import fr.maxlego08.menu.api.enums.dialog.DialogBodyType; import fr.maxlego08.menu.api.loader.ButtonLoader; import fr.maxlego08.menu.hooks.dialogs.button.buttons.ZDialogPlainMessageBody; import org.bukkit.configuration.file.YamlConfiguration; @@ -15,7 +13,7 @@ public class DialogPlainMessageBodyLoader extends ButtonLoader { public DialogPlainMessageBodyLoader(Plugin plugin) { - super(plugin, "dialog_plain_message"); + super(plugin, "dialog_plain_message", "plain_message"); } @Override diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogTextInputLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogTextInputLoader.java index 0de388a7..a700d02e 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogTextInputLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/button/loader/DialogTextInputLoader.java @@ -2,8 +2,6 @@ import fr.maxlego08.menu.api.button.Button; import fr.maxlego08.menu.api.button.DefaultButtonValue; -import fr.maxlego08.menu.api.button.dialogs.InputButton; -import fr.maxlego08.menu.api.enums.dialog.DialogInputType; import fr.maxlego08.menu.api.loader.ButtonLoader; import fr.maxlego08.menu.hooks.dialogs.button.buttons.ZDialogTextInput; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/itemstack/components/paper/PaperAttackRangeComponent.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/itemstack/components/paper/PaperAttackRangeComponent.java new file mode 100644 index 00000000..136bc2c6 --- /dev/null +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/itemstack/components/paper/PaperAttackRangeComponent.java @@ -0,0 +1,25 @@ +package fr.maxlego08.menu.itemstack.components.paper; + +import fr.maxlego08.menu.api.context.BuildContext; +import fr.maxlego08.menu.api.itemstack.components.AttackRangeComponent; +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.AttackRange; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class PaperAttackRangeComponent extends AttackRangeComponent { + private final AttackRange attackRange; + + public PaperAttackRangeComponent(AttackRange attackRange) { + super(attackRange.minReach(), attackRange.maxReach(), attackRange.minCreativeReach(), attackRange.maxCreativeReach(), attackRange.hitboxMargin(), attackRange.mobFactor()); + this.attackRange = attackRange; + } + + + @Override + public void apply(@NotNull BuildContext context, @NotNull ItemStack itemStack, @Nullable Player player) { + itemStack.setData(DataComponentTypes.ATTACK_RANGE, this.attackRange); + } +} diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/itemstack/components/paper/PaperMaxStackSizeComponent.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/itemstack/components/paper/PaperMaxStackSizeComponent.java new file mode 100644 index 00000000..8c588c2a --- /dev/null +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/itemstack/components/paper/PaperMaxStackSizeComponent.java @@ -0,0 +1,21 @@ +package fr.maxlego08.menu.itemstack.components.paper; + +import fr.maxlego08.menu.api.context.BuildContext; +import fr.maxlego08.menu.api.itemstack.components.MaxStackSizeComponent; +import io.papermc.paper.datacomponent.DataComponentTypes; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class PaperMaxStackSizeComponent extends MaxStackSizeComponent { + + public PaperMaxStackSizeComponent(int maxStackSize) { + super(maxStackSize); + } + + @Override + public void apply(@NotNull BuildContext context, @NotNull ItemStack itemStack, @Nullable Player player) { + itemStack.setData(DataComponentTypes.MAX_STACK_SIZE, this.maxStackSize); + } +} diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperAttackRangeItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperAttackRangeItemComponentLoader.java new file mode 100644 index 00000000..d9b4db12 --- /dev/null +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperAttackRangeItemComponentLoader.java @@ -0,0 +1,40 @@ +package fr.maxlego08.menu.loader.components.paper; + +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.api.context.MenuItemStackContext; +import fr.maxlego08.menu.api.itemstack.ItemComponent; +import fr.maxlego08.menu.itemstack.components.paper.PaperAttackRangeComponent; +import fr.maxlego08.menu.loader.components.AbstractAttackRangeItemComponentLoader; +import io.papermc.paper.datacomponent.item.AttackRange; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; + +@ComponentLoader +@SinceVersion("1.21.11") +@PaperOnly +public class PaperAttackRangeItemComponentLoader extends AbstractAttackRangeItemComponentLoader { + + @Override + public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { + if (componentSection == null) { + return null; + } + + AttackRange.Builder builder = AttackRange.attackRange(); + + builder.minReach(getMinReach(componentSection, path)); + builder.maxReach(getMaxReach(componentSection, path)); + builder.minCreativeReach(getMinCreativeReach(componentSection, path)); + builder.maxCreativeReach(getMaxCreativeReach(componentSection, path)); + builder.hitboxMargin(getHitboxMargin(componentSection, path)); + builder.mobFactor(getMobFactor(componentSection, path)); + + return new PaperAttackRangeComponent(builder.build()); + } +} diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperChickenVariantLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperChickenVariantLoader.java new file mode 100644 index 00000000..5dd739c0 --- /dev/null +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperChickenVariantLoader.java @@ -0,0 +1,19 @@ +package fr.maxlego08.menu.loader.components.paper; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.PaperRegistryVariantLoader; +import io.papermc.paper.registry.RegistryKey; +import org.bukkit.entity.Chicken; + +@ComponentLoader +@PaperOnly +@SinceVersion("1.21.5") +public class PaperChickenVariantLoader extends PaperRegistryVariantLoader { + public PaperChickenVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("chicken/variant", RegistryKey.CHICKEN_VARIANT, variantFactory::createChicken); + } +} diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCowVariantLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCowVariantLoader.java new file mode 100644 index 00000000..0713a7b7 --- /dev/null +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCowVariantLoader.java @@ -0,0 +1,19 @@ +package fr.maxlego08.menu.loader.components.paper; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.PaperRegistryVariantLoader; +import io.papermc.paper.registry.RegistryKey; +import org.bukkit.entity.Cow; + +@ComponentLoader +@PaperOnly +@SinceVersion("1.21.5") +public class PaperCowVariantLoader extends PaperRegistryVariantLoader { + public PaperCowVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("cow/variant", RegistryKey.COW_VARIANT, variantFactory::createCow); + } +} diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCustomModelDataComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCustomModelDataComponentLoader.java index 6ce124e0..17d31628 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCustomModelDataComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCustomModelDataComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.paper; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.itemstack.components.paper.PaperCustomModelDataComponent; @@ -14,6 +17,9 @@ import java.io.File; import java.util.List; +@ComponentLoader +@SinceVersion("1.20.5") +@PaperOnly public class PaperCustomModelDataComponentLoader extends SpigotCustomModelDataItemComponentLoader { @Override diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCustomNameItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCustomNameItemComponentLoader.java index 7e5d4de3..09f6e741 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCustomNameItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperCustomNameItemComponentLoader.java @@ -1,6 +1,9 @@ package fr.maxlego08.menu.loader.components.paper; import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -13,6 +16,9 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") +@PaperOnly public class PaperCustomNameItemComponentLoader extends ItemComponentLoader { private final PaperMetaUpdater metaUpdater; diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperDeathProtectionItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperDeathProtectionItemComponentLoader.java index 5c9615f4..0f5c2082 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperDeathProtectionItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperDeathProtectionItemComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.paper; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.common.enums.ConsumeEffectType; @@ -24,6 +27,9 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.21.2") +@PaperOnly public class PaperDeathProtectionItemComponentLoader extends AbstractEffectItemComponentLoader { public PaperDeathProtectionItemComponentLoader(){ diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperIntangibleProjectileItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperIntangibleProjectileItemComponentLoader.java index 2b360dc1..1cfc38ac 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperIntangibleProjectileItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperIntangibleProjectileItemComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.paper; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -11,6 +14,9 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") +@PaperOnly public class PaperIntangibleProjectileItemComponentLoader extends ItemComponentLoader { public PaperIntangibleProjectileItemComponentLoader(){ diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperMapDecorationsItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperMapDecorationsItemComponentLoader.java index 9cfd9215..456b5684 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperMapDecorationsItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperMapDecorationsItemComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.paper; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -18,6 +21,9 @@ import java.util.HashMap; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") +@PaperOnly public class PaperMapDecorationsItemComponentLoader extends ItemComponentLoader { public PaperMapDecorationsItemComponentLoader(){ diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperNoteBlockSoundItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperNoteBlockSoundItemComponentLoader.java index 2690215f..c36af59c 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperNoteBlockSoundItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperNoteBlockSoundItemComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.paper; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -12,6 +15,9 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") +@PaperOnly public class PaperNoteBlockSoundItemComponentLoader extends ItemComponentLoader { public PaperNoteBlockSoundItemComponentLoader(){ diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperPigVariantLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperPigVariantLoader.java new file mode 100644 index 00000000..ea201743 --- /dev/null +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperPigVariantLoader.java @@ -0,0 +1,19 @@ +package fr.maxlego08.menu.loader.components.paper; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.common.interfaces.VariantComponent; +import fr.maxlego08.menu.loader.components.variants.base.PaperRegistryVariantLoader; +import io.papermc.paper.registry.RegistryKey; +import org.bukkit.entity.Pig; + +@ComponentLoader +@PaperOnly +@SinceVersion("1.21.5") +public class PaperPigVariantLoader extends PaperRegistryVariantLoader { + public PaperPigVariantLoader(MenuPlugin plugin, VariantComponent variantFactory) { + super("pig/variant", RegistryKey.PIG_VARIANT, variantFactory::createPig); + } +} diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperPotDecorationsItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperPotDecorationsItemComponentLoader.java index cf6928af..159bd61b 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperPotDecorationsItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperPotDecorationsItemComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.paper; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -16,6 +19,9 @@ import java.io.File; import java.util.List; +@ComponentLoader +@SinceVersion("1.20.5") +@PaperOnly public class PaperPotDecorationsItemComponentLoader extends ItemComponentLoader { private static final int SIDES = 4; diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperProvidesBannerPatternsItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperProvidesBannerPatternsItemComponentLoader.java index 4d77b9ee..872df11c 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperProvidesBannerPatternsItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperProvidesBannerPatternsItemComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.paper; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -15,6 +18,9 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.5") +@PaperOnly public class PaperProvidesBannerPatternsItemComponentLoader extends ItemComponentLoader { public PaperProvidesBannerPatternsItemComponentLoader(){ diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperProvidesTrimMaterialItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperProvidesTrimMaterialItemComponentLoader.java index 4f5b471f..8f83b7c8 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperProvidesTrimMaterialItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperProvidesTrimMaterialItemComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.paper; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -14,6 +17,9 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.5") +@PaperOnly public class PaperProvidesTrimMaterialItemComponentLoader extends ItemComponentLoader { public PaperProvidesTrimMaterialItemComponentLoader(){ diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperRepairableItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperRepairableItemComponentLoader.java index bb3df527..4069b84f 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperRepairableItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperRepairableItemComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.paper; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -19,6 +22,9 @@ import java.util.ArrayList; import java.util.List; +@ComponentLoader +@SinceVersion("1.21.2") +@PaperOnly public class PaperRepairableItemComponentLoader extends ItemComponentLoader { public PaperRepairableItemComponentLoader(){ diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperTooltipDisplayItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperTooltipDisplayItemComponentLoader.java index bf6b1aba..6c7c63c2 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperTooltipDisplayItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperTooltipDisplayItemComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.paper; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.PaperOnly; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -16,6 +19,9 @@ import java.io.File; import java.util.List; +@ComponentLoader +@SinceVersion("1.21.5") +@PaperOnly public class PaperTooltipDisplayItemComponentLoader extends ItemComponentLoader { public PaperTooltipDisplayItemComponentLoader(){ diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperVariantItemComponentLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperVariantItemComponentLoader.java index 461863e8..e69de29b 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperVariantItemComponentLoader.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/paper/PaperVariantItemComponentLoader.java @@ -1,89 +0,0 @@ -package fr.maxlego08.menu.loader.components.paper; - -import fr.maxlego08.menu.api.context.MenuItemStackContext; -import fr.maxlego08.menu.api.itemstack.ItemComponent; -import fr.maxlego08.menu.api.loader.ItemComponentLoader; -import fr.maxlego08.menu.common.factory.VariantItemComponentLoaderFactory; -import fr.maxlego08.menu.common.interfaces.VariantComponent; -import fr.maxlego08.menu.loader.components.spigot.SpigotVariantItemComponentLoader; -import io.papermc.paper.registry.RegistryAccess; -import io.papermc.paper.registry.RegistryKey; -import org.bukkit.Keyed; -import org.bukkit.NamespacedKey; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.io.File; -import java.util.function.Function; - -/** - * Paper-specific variant component loader that uses Paper's RegistryAccess API - * for better performance and compatibility. - */ -public class PaperVariantItemComponentLoader extends SpigotVariantItemComponentLoader implements VariantItemComponentLoaderFactory { - - public PaperVariantItemComponentLoader(VariantComponent variantFactory) { - super(variantFactory); - } - - @Override - public @NotNull ItemComponentLoader getLoaderChicken() { - return new Chicken(); - } - - @Override - public @NotNull ItemComponentLoader getLoaderCow() { - return new Cow(); - } - @Override - public @NotNull ItemComponentLoader getLoaderPig() { - return new Pig(); - } - - - private static abstract class PaperRegistryVariantLoader extends ItemComponentLoader { - private final RegistryKey registryKey; - private final Function componentFactory; - - protected PaperRegistryVariantLoader(String path, RegistryKey registryKey, Function componentFactory) { - super(path); - this.registryKey = registryKey; - this.componentFactory = componentFactory; - } - - @Override - public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { - path = this.normalizePath(path); - String value = configuration.getString(path); - if (value == null) return null; - NamespacedKey key = NamespacedKey.fromString(value); - if (key == null) return null; - try { - T registryValue = RegistryAccess.registryAccess().getRegistry(this.registryKey).getOrThrow(key); - return this.componentFactory.apply(registryValue); - } catch (IllegalArgumentException e) { - return null; - } - } - } - - public class Chicken extends PaperRegistryVariantLoader { - public Chicken() { - super("chicken/variant", RegistryKey.CHICKEN_VARIANT, PaperVariantItemComponentLoader.this.variantFactory::createChicken); - } - } - - public class Cow extends PaperRegistryVariantLoader { - public Cow() { - super("cow/variant", RegistryKey.COW_VARIANT, PaperVariantItemComponentLoader.this.variantFactory::createCow); - } - } - - public class Pig extends PaperRegistryVariantLoader { - public Pig() { - super("pig/variant", RegistryKey.PIG_VARIANT, PaperVariantItemComponentLoader.this.variantFactory::createPig); - } - } -} \ No newline at end of file diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/variants/base/PaperRegistryVariantLoader.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/variants/base/PaperRegistryVariantLoader.java new file mode 100644 index 00000000..d749a3fe --- /dev/null +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/loader/components/variants/base/PaperRegistryVariantLoader.java @@ -0,0 +1,42 @@ +package fr.maxlego08.menu.loader.components.variants.base; + +import fr.maxlego08.menu.api.context.MenuItemStackContext; +import fr.maxlego08.menu.api.itemstack.ItemComponent; +import fr.maxlego08.menu.api.loader.ItemComponentLoader; +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; +import org.bukkit.Keyed; +import org.bukkit.NamespacedKey; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.function.Function; + +public abstract class PaperRegistryVariantLoader extends ItemComponentLoader { + private final RegistryKey registryKey; + private final Function componentFactory; + + protected PaperRegistryVariantLoader(String path, RegistryKey registryKey, Function componentFactory) { + super(path); + this.registryKey = registryKey; + this.componentFactory = componentFactory; + } + + @Override + public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { + path = normalizePath(path); + String value = configuration.getString(path); + if (value == null) return null; + NamespacedKey key = NamespacedKey.fromString(value); + if (key == null) return null; + try { + T registryValue = RegistryAccess.registryAccess().getRegistry(this.registryKey).getOrThrow(key); + return componentFactory.apply(registryValue); + } catch (IllegalArgumentException e) { + return null; + } + } +} diff --git a/build.gradle.kts b/build.gradle.kts index b25c67f7..c09afde0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -107,6 +107,7 @@ allprojects { compileOnly("org.spigotmc:spigot-api:26.1-R0.1-SNAPSHOT") } compileOnly("me.clip:placeholderapi:2.11.6") + compileOnly("org.reflections:reflections:0.10.2") implementation("fr.maxlego08.sarah:sarah:1.22") implementation("fr.traqueur.currencies:currenciesapi:1.0.13") diff --git a/changelog.md b/changelog.md index 19d4361f..8a4d08b8 100644 --- a/changelog.md +++ b/changelog.md @@ -44,11 +44,36 @@ ## Bug Fixes -- **Clear Inventory + BACK Button**: Fixed items being restored to the player when clicking a BACK button between two inventories with `clear-inventory: true` and `clear-inventory-type: PACKET_EVENT`. Items are now physically cleared from the player inventory during storage, ensuring container content packets don't reveal hidden items. The close handler also uses physical restoration (`giveInventory`) instead of packet-based restoration. +- **Clear Inventory + BACK Button**: Fixed items being restored to the player when clicking a BACK button between two inventories with `clear-inventory: true` and `clear-inventory-type: PACKET_EVENT`. ## Changes +- **Take Item Action**: New `take-item` action to remove a specified amount of an item from the player's inventory. +```yaml +- type: take-item + item: + material: DIAMOND + amount: 5 +``` +- **Custom Commands**: Add a new field `actions-requirements` for custom commands, allowing you to specify requirements that must be met for the command's actions to execute. This provides more control over argument conditions and enhances command functionality. - **Time Placeholders**: Changed `time_unix_timestamp`, `time_next_day_unix_timestamp`, and `time_today_start_unix_timestamp` placeholders to return values in seconds instead of milliseconds. +- **Pagination Button**: Now supports `view-requirement`. + +**Bedrock Forms Support**: + +TODO + +**Internal Changes** + +- New Minecraft version detection system `MinecraftVersion` over old `NMSVersion` enum, allowing more flexible version checks and better support for future Minecraft versions without needing to update the plugin. +- New utils annotations + - `@SinceVersion` | These annotations can be used to mark classes that should only be loaded for specific Minecraft versions, check in the `VersionFilter` class for more details. + - `@UntilVersion` | These annotations can be used to mark classes that should only be loaded for specific Minecraft versions, check in the `VersionFilter` class for more details. + - `@PaperOnly` | These annotations can be used to mark classes that should only be loaded if the server is a Paper version, check in the `VersionFilter` class for more details. + - `@SpigotOnly` | These annotations can be used to mark classes that should only be loaded if the server is a spigot version, check in the `VersionFilter` class for more details. + - `@ComponentLoader` | Allow to load dynamically all items component loader without having to register them one by one in the `ZComponentManager` class for "fr.maxlego08.zmenu" package, filtering by version and server type with the new annotations by the helper of `VersionFilter` class. + - `@AutoListener` | Allow to load dynamically all listeners who take a `MenuPlugin` in their constructor or no-arg constructor without having to register them one by one in the `ZListenerManager` class for "fr.maxlego08.zmenu" package, filtering by version and server type with the new annotations by the helper of `VersionFilter` class. + # 1.1.1.3 diff --git a/src/main/java/fr/maxlego08/menu/ZButtonManager.java b/src/main/java/fr/maxlego08/menu/ZButtonManager.java index dce43834..836d6de5 100644 --- a/src/main/java/fr/maxlego08/menu/ZButtonManager.java +++ b/src/main/java/fr/maxlego08/menu/ZButtonManager.java @@ -46,18 +46,41 @@ public void register(@NonNull ButtonLoader button) { ButtonLoader existingLoader = null; for (List buttonLoaders : this.loaders.values()) { for (ButtonLoader loader : buttonLoaders) { + // Check if name matches if (loader.getName().equalsIgnoreCase(button.getName())) { existingLoader = loader; break; } + // Check if any alias matches + for (String alias : loader.getAliases()) { + if (alias.equalsIgnoreCase(button.getName())) { + existingLoader = loader; + break; + } + } + // Check if any of the new button's aliases conflict with existing loader names/aliases + for (String newAlias : button.getAliases()) { + if (loader.getName().equalsIgnoreCase(newAlias)) { + existingLoader = loader; + break; + } + for (String existingAlias : loader.getAliases()) { + if (existingAlias.equalsIgnoreCase(newAlias)) { + existingLoader = loader; + break; + } + } + } + if (existingLoader != null) { + break; + } } if (existingLoader != null) { break; } } if (existingLoader != null) { - var loader = existingLoader; - throw new ButtonAlreadyRegisterException("Button " + button.getName() + " was already register in the " + loader.getPlugin().getName()); + throw new ButtonAlreadyRegisterException("Button " + button.getName() + " was already register in the " + existingLoader.getPlugin().getName()); } Plugin plugin = button.getPlugin(); @@ -101,6 +124,11 @@ public void unregisters(@NotNull Plugin plugin) { if (loader.getName().equalsIgnoreCase(name)) { return Optional.of(loader); } + for (String alias : loader.getAliases()) { + if (alias.equalsIgnoreCase(name)) { + return Optional.of(loader); + } + } } return Optional.empty(); } @@ -185,6 +213,7 @@ public void registerAction(@NotNull ActionLoader actionLoader) { if (action != null) { action.setDelay(accessor.getInt("delay", 0)); action.setChance(accessor.getFloat("chance", 100)); + action.setDebug(accessor.getBoolean("debug", false)); action.setType(type); List> denyChanceAction = accessor.getMapList("deny-chance-actions"); if (!denyChanceAction.isEmpty()) { diff --git a/src/main/java/fr/maxlego08/menu/ZCommand.java b/src/main/java/fr/maxlego08/menu/ZCommand.java index 98008ab8..90257fc5 100644 --- a/src/main/java/fr/maxlego08/menu/ZCommand.java +++ b/src/main/java/fr/maxlego08/menu/ZCommand.java @@ -3,6 +3,7 @@ import fr.maxlego08.menu.api.command.Command; import fr.maxlego08.menu.api.command.CommandArgument; import fr.maxlego08.menu.api.requirement.Action; +import fr.maxlego08.menu.api.requirement.Requirement; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; @@ -24,11 +25,11 @@ * @param file File */ public record ZCommand(Plugin plugin, String command, List aliases, boolean consoleCanUse, String permission, String inventory, List arguments, - List actions, List subCommands, String denyMessage, String path, File file) implements Command { + List actions, List subCommands, List actions_requirements, String denyMessage, String path, File file) implements Command { @Override public @NotNull String toString() { - return "ZCommand{" + "plugin=" + this.plugin + ", command='" + this.command + '\'' + ", aliases=" + this.aliases + ", permission='" + this.permission + '\'' + ", inventory='" + this.inventory + '\'' + ", arguments=" + this.arguments + ", actions=" + this.actions + ", subCommands=" + this.subCommands + ", path='" + this.path + '\'' + ", file=" + this.file + '}'; + return "ZCommand{" + "plugin=" + this.plugin + ", command='" + this.command + '\'' + ", aliases=" + this.aliases + ", permission='" + this.permission + '\'' + ", inventory='" + this.inventory + '\'' + ", arguments=" + this.arguments + ", actions=" + this.actions + ", subCommands=" + this.subCommands + ", actions-requirements=" + this.actions_requirements + ", path='" + this.path + '\'' + ", file=" + this.file + '}'; } @Override diff --git a/src/main/java/fr/maxlego08/menu/ZComponentsManager.java b/src/main/java/fr/maxlego08/menu/ZComponentsManager.java index c9ef4d04..2759a7fd 100644 --- a/src/main/java/fr/maxlego08/menu/ZComponentsManager.java +++ b/src/main/java/fr/maxlego08/menu/ZComponentsManager.java @@ -2,218 +2,63 @@ import fr.maxlego08.menu.api.ComponentsManager; import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; import fr.maxlego08.menu.api.configuration.Configuration; import fr.maxlego08.menu.api.exceptions.ItemComponentAlreadyRegisterException; import fr.maxlego08.menu.api.loader.ItemComponentLoader; -import fr.maxlego08.menu.common.factory.VariantItemComponentLoaderFactory; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; +import fr.maxlego08.menu.api.utils.ReflectionsCache; +import fr.maxlego08.menu.common.MinecraftVersion; +import fr.maxlego08.menu.common.VersionFilter; +import fr.maxlego08.menu.common.interfaces.VariantComponent; import fr.maxlego08.menu.itemstack.components.paper.PaperVariantComponent; import fr.maxlego08.menu.itemstack.components.spigot.SpigotVariantComponent; -import fr.maxlego08.menu.loader.components.paper.*; -import fr.maxlego08.menu.loader.components.spigot.*; import fr.maxlego08.menu.zcore.logger.Logger; import org.jetbrains.annotations.NotNull; +import org.reflections.Reflections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; public class ZComponentsManager implements ComponentsManager { private final Map components = new HashMap<>(); - private boolean isPaperAndMiniMessageEnabled(MenuPlugin plugin){ - return plugin.isPaperOrFolia() && Configuration.enableMiniMessageFormat; - } - @Override public void initializeDefaultComponents(MenuPlugin plugin) { - NmsVersion currentVersion = NmsVersion.getCurrentVersion(); - if (currentVersion.isAttributItemStack()){ // 1.20.5+ - try { - this.initializeVariantComponents(plugin); - } catch (Exception e) { - if (Configuration.enableDebug) { - Logger.info("Failed to initialize variant item components:"); - e.printStackTrace(); - } - } - - this.registerComponent(new SpigotBlockStateItemComponentLoader()); - this.registerComponent(new SpigotAttributeModifiersItemComponentLoader(plugin)); - this.registerComponent(new SpigotBannerPatternsItemComponentLoader()); - this.registerComponent(new SpigotBaseColorItemComponentLoader()); - this.registerComponent(new SpigotBundleContentsItemComponentLoader(plugin)); - this.registerComponent(new SpigotChargedProjectilesItemComponentLoader(plugin)); - this.registerComponent(new SpigotContainerItemComponentLoader(plugin)); - this.registerComponent(new SpigotContainerLootItemComponentLoader()); - this.registerComponent(new SpigotCustomDataItemComponentLoader()); - this.registerComponent(plugin.isPaperOrFolia() ? new PaperCustomModelDataComponentLoader() : new SpigotCustomModelDataItemComponentLoader()); - this.registerComponent(new SpigotDamageItemComponentLoader()); - this.registerComponent(new SpigotDamageResistantItemComponentLoader()); - this.registerComponent(new SpigotDyedColorItemComponentLoader()); - this.registerComponent(new SpigotEnchantmentGlintOverrideItemComponentLoader()); - this.registerComponent(new SpigotFireworkExplosionItemComponentLoader()); - this.registerComponent(new SpigotFireworksItemComponentLoader()); - this.registerComponent(new SpigotFoodItemComponentLoader()); - this.registerComponent(new SpigotInstrumentItemComponentLoader()); - this.registerComponent(new SpigotItemNameItemComponentLoader()); - this.registerComponent(new SpigotLodestoneTrackerItemComponentLoader()); - this.registerComponent(new SpigotLoreItemComponentLoader(plugin)); - this.registerComponent(new SpigotMapColorItemComponentLoader()); - this.registerComponent(new SpigotMapIdItemComponentLoader()); - this.registerComponent(new SpigotMaxDamageItemComponentLoader()); - this.registerComponent(new SpigotMaxStackSizeItemComponentLoader()); - this.registerComponent(new SpigotOminousBottleAmplifierItemComponentLoader()); - this.registerComponent(new SpigotPotionContentsItemComponentLoader()); - this.registerComponent(new SpigotRarityItemComponentLoader()); - this.registerComponent(new SpigotRecipesItemComponentLoader()); - this.registerComponent(new SpigotRepairCostItemComponentLoader()); - this.registerComponent(new SpigotStoredEnchantItemComponentLoader()); - this.registerComponent(new SpigotSuspiciousStewEffectsItemComponentLoader()); - this.registerComponent(new SpigotToolItemComponentLoader()); - this.registerComponent(new SpigotTrimItemComponentLoader()); - this.registerComponent(new SpigotUnbreakableItemComponentLoader()); - this.registerComponent(new SpigotWritableBookContentItemComponentLoader()); - this.registerComponent(new SpigotWrittenBookContentItemComponentLoader()); - this.registerComponent(new SpigotEnchantmentsItemComponentLoader()); - - if (this.isPaperAndMiniMessageEnabled(plugin)) { - this.registerComponent(new PaperCustomNameItemComponentLoader(plugin)); - } - if (plugin.isPaperOrFolia()) { - this.registerComponent(new PaperIntangibleProjectileItemComponentLoader()); - this.registerComponent(new PaperMapDecorationsItemComponentLoader()); - this.registerComponent(new PaperNoteBlockSoundItemComponentLoader()); - this.registerComponent(new PaperPotDecorationsItemComponentLoader()); - } - - if (currentVersion.isNewItemStackAPI()){ // 1.21+ - this.registerComponent(new SpigotJukeboxPlayableItemComponentLoader()); - - if (currentVersion.is1_21_2OrNewer()){ // 1.21.2+ - this.registerComponent(new SpigotConsumableItemComponentLoader()); - this.registerComponent(new SpigotEnchantableItemComponentLoader()); - this.registerComponent(new SpigotEquippableItemComponentLoader()); - this.registerComponent(new SpigotGliderItemComponentLoader()); - this.registerComponent(new SpigotItemModelItemComponentLoader()); - this.registerComponent(new SpigotTooltipStyleItemComponentLoader()); - this.registerComponent(new SpigotUseCooldownItemComponentLoader()); - this.registerComponent(new SpigotUseRemainderItemComponentLoader(plugin)); - - if (plugin.isPaperOrFolia()){ - this.registerComponent(new PaperDeathProtectionItemComponentLoader()); - this.registerComponent(new PaperRepairableItemComponentLoader()); - } - - if (currentVersion.is1_21_5OrNewer()){ // 1.21.5+ - this.registerComponent(new SpigotBlocksAttacksItemComponentLoader()); - this.registerComponent(new SpigotBreakSoundItemComponentLoader()); - this.registerComponent(new SpigotPotionDurationScaleItemComponentLoader()); - this.registerComponent(plugin.isPaperOrFolia() ? new PaperTooltipDisplayItemComponentLoader() : new SpigotTooltipDisplayComponentLoader()); // Bukkit does not have support for hidden components - this.registerComponent(new SpigotWeaponItemComponentLoader()); - - if (this.isPaperAndMiniMessageEnabled(plugin)){ - this.registerComponent(new PaperProvidesBannerPatternsItemComponentLoader()); - this.registerComponent(new PaperProvidesTrimMaterialItemComponentLoader()); - } - - if (currentVersion.is1_21_9OrNewer()){ // 1.21.9+ - - this.registerComponent(plugin.isPaperOrFolia() ? new PaperProfileComponentLoader() : new SpigotProfileItemComponentLoader()); - - if (currentVersion.is1_21_11OrNewer()){ // 1.21.11+ - this.registerComponent(new SpigotAttackRangeItemComponentLoader()); - this.registerComponent(new SpigotDamageTypeItemComponentLoader()); - this.registerComponent(new SpigotKineticWeaponItemComponentLoader()); - this.registerComponent(new SpigotMinimumAttackChargeItemComponentLoader()); - this.registerComponent(new SpigotPiercingWeaponItemComponentLoader()); - this.registerComponent(new SpigotSwingAnimationItemComponentLoader()); - this.registerComponent(new SpigotUseEffectsItemComponentLoader()); - } + MinecraftVersion minecraftVersion = MinecraftVersion.getCurrentVersion(); + + Reflections reflection = ReflectionsCache.getInstance().getOrCreate((ZMenuPlugin) plugin, "fr.maxlego08.menu"); + VariantComponent variantComponent = plugin.isPaperOrFolia() ? new PaperVariantComponent() : new SpigotVariantComponent(); + + int count = 0; + Set> typesAnnotatedWith = reflection.getTypesAnnotatedWith(ComponentLoader.class); + for (Class clazz : typesAnnotatedWith) { + if (ItemComponentLoader.class.isAssignableFrom(clazz)) { + if (!VersionFilter.passes(clazz)) continue; + + try { + ItemComponentLoader loader; + try { + loader = (ItemComponentLoader) clazz.getDeclaredConstructor(MenuPlugin.class, VariantComponent.class).newInstance(plugin, variantComponent); + } catch (NoSuchMethodException e1) { + try { + loader = (ItemComponentLoader) clazz.getDeclaredConstructor().newInstance(); + } catch (NoSuchMethodException e2) { + loader = (ItemComponentLoader) clazz.getDeclaredConstructor(MenuPlugin.class).newInstance(plugin); } - + } + this.registerComponent(loader); + count++; + } catch (Exception e) { + if (Configuration.enableDebug) { + Logger.info("Failed to instantiate component loader: " + clazz.getName()); + e.printStackTrace(); } } } } - } - - private void initializeVariantComponents(MenuPlugin plugin) { - NmsVersion currentVersion = NmsVersion.getCurrentVersion(); - VariantItemComponentLoaderFactory loaderFactory = - plugin.isPaperOrFolia() ? new PaperVariantItemComponentLoader(new PaperVariantComponent()) - : new SpigotVariantItemComponentLoader(new SpigotVariantComponent()); - - this.registerComponent(loaderFactory.getLoaderCatCollar()); - this.registerComponent(loaderFactory.getLoaderCatVariant()); - this.registerComponent(loaderFactory.getLoaderHorse()); - this.registerComponent(loaderFactory.getLoaderRabbit()); - this.registerComponent(loaderFactory.getLoaderSheep()); - this.registerComponent(loaderFactory.getLoaderTropicalFishBaseColor()); - this.registerComponent(loaderFactory.getLoaderTropicalFishPatternColor()); - this.registerComponent(loaderFactory.getLoaderVillager()); - - if (currentVersion.isNewMaterial()){ // 1.13+ - this.registerComponent(loaderFactory.getLoaderFox()); - this.registerComponent(loaderFactory.getLoaderMushroomCow()); - } - if (currentVersion.isNewNMSVersion()){ // 1.17+ - this.registerComponent(loaderFactory.getLoaderAxolotl()); - } - if (currentVersion.isAttributItemStack()){ // 1.20.5+ - this.registerComponent(loaderFactory.getLoaderWolfCollar()); - this.registerComponent(loaderFactory.getLoaderWolfVariant()); - this.registerComponent(loaderFactory.getLoaderPainting()); - } - if (currentVersion.is1_21_5OrNewer()){ // 1.21.5+ - try { - this.registerComponent(loaderFactory.getLoaderChicken()); - } catch (Exception e) { - if (Configuration.enableDebug){ - Logger.info("Failed to register Chicken variant component:"); - e.printStackTrace(); - } - } - try { - this.registerComponent(loaderFactory.getLoaderCow()); - } catch (Exception e) { - if (Configuration.enableDebug){ - Logger.info("Failed to register Cow variant component:"); - e.printStackTrace(); - } - } - try { - this.registerComponent(loaderFactory.getLoaderPig()); - } catch (Exception e) { - if (Configuration.enableDebug){ - Logger.info("Failed to register Pig variant component:"); - e.printStackTrace(); - } - } - try { - this.registerComponent(loaderFactory.getLoaderSalmon()); - } catch (Exception e) { - if (Configuration.enableDebug){ - Logger.info("Failed to register Salmon variant component:"); - e.printStackTrace(); - } - } - } - if (currentVersion.isNewNBTVersion()) { // 1.18+ - this.registerComponent(loaderFactory.getLoaderFrog()); - } - if (currentVersion.is1_11OrNewer()){ // 1.11+ - this.registerComponent(loaderFactory.getLoaderLlama()); - this.registerComponent(loaderFactory.getLoaderShulkerBox()); - } - if (currentVersion.is1_12OrNewer()) { // 1.12+ - this.registerComponent(loaderFactory.getLoaderParrot()); - } + Logger.info("Registered " + count + " default component loaders for Minecraft version " + minecraftVersion + "."); } - @Override public void registerComponent(@NotNull ItemComponentLoader loader) throws ItemComponentAlreadyRegisterException { List componentNames = loader.getComponentNames(); diff --git a/src/main/java/fr/maxlego08/menu/ZInventory.java b/src/main/java/fr/maxlego08/menu/ZInventory.java index b2349474..504339c7 100644 --- a/src/main/java/fr/maxlego08/menu/ZInventory.java +++ b/src/main/java/fr/maxlego08/menu/ZInventory.java @@ -234,21 +234,15 @@ public InventoryResult openInventory(Player player, InventoryEngine inventoryDef if (this.clearInvType == ClearInvType.DEFAULT){ inventoriesPlayer.storeInventory(player); } else { - if (inventoriesPlayer.hasSavedInventory(player.getUniqueId())) { - inventoriesPlayer.getPlayerInventory(player.getUniqueId()).ifPresent(inventoryPlayer -> { - for (int slot : inventoryPlayer.getItems().keySet()) { - player.getInventory().setItem(slot, null); - this.clearInvType.getRemoveItem().accept(player, slot, player.getInventory()); - } - }); - } else { - removePlayerInventoryButtons(player, inventoryHolder); - inventoriesPlayer.storeInventory(player); - } + inventoriesPlayer.storeInventoryTemporaryOrClear(player); } } } else if (this.clearInventory) { - inventoriesPlayer.storeInventory(player); + if (this.clearInvType == ClearInvType.DEFAULT) { + inventoriesPlayer.storeInventory(player); + } else { + inventoriesPlayer.storeInventoryTemporary(player); + } } var placeholders = new Placeholders(); @@ -269,12 +263,6 @@ private void clearPlayerInventoryButtons(Player player, InventoryEngine inventor } } - private void removePlayerInventoryButtons(Player player, InventoryEngine inventoryDefault) { - for (int slot : inventoryDefault.getPlayerInventoryItems().keySet()) { - player.getInventory().setItem(slot, null); - } - } - @Override public void postOpenInventory(Player player, InventoryEngine inventoryDefault) { @@ -291,7 +279,7 @@ public void closeInventory(Player player, InventoryEngine inventoryDefault) { if (this.clearInventory) { InventoriesPlayer inventoriesPlayer = inventoryDefault.getPlugin().getInventoriesPlayer(); - inventoriesPlayer.giveInventory(player); + this.clearInvType.getOnInventoryClose().accept(inventoriesPlayer, player); } } var placeholders = new Placeholders(); diff --git a/src/main/java/fr/maxlego08/menu/ZInventoryManager.java b/src/main/java/fr/maxlego08/menu/ZInventoryManager.java index 2975655e..8f7986f4 100644 --- a/src/main/java/fr/maxlego08/menu/ZInventoryManager.java +++ b/src/main/java/fr/maxlego08/menu/ZInventoryManager.java @@ -133,8 +133,8 @@ public MenuItemStack loadItemStack(YamlConfiguration configuration, String path, @Override public MenuItemStack loadItemStack(File file, String path, Map map) { YamlConfiguration configuration = new YamlConfiguration(); - configuration.set("item", map); - return new MenuItemStackLoader(this).load(configuration, "item", file); + configuration.createSection("item", map); + return new MenuItemStackLoader(this).load(configuration, "item.", file); } @Override @@ -396,11 +396,13 @@ public void loadButtons() { buttonManager.registerAction(new ActionBarLoader()); buttonManager.registerAction(new RefreshLoader()); buttonManager.registerAction(new RefreshInventoryLoader()); + buttonManager.registerAction(new ResetPaginationLoader(this.paginationManager)); buttonManager.registerAction(new DiscordLoader()); buttonManager.registerAction(new DiscordComponentV2Loader()); buttonManager.registerAction(new TeleportLoader(this.plugin)); buttonManager.registerAction(new CurrencyWithdrawLoader()); buttonManager.registerAction(new CurrencyDepositLoader()); + buttonManager.registerAction(new TakeItemLoader(this.plugin)); buttonManager.registerAction(new ItemEditLoader(this.plugin)); buttonManager.registerAction(new ItemGiveLoader(this.plugin)); if (this.plugin.isEnable(Plugins.LUCKPERMS)) { diff --git a/src/main/java/fr/maxlego08/menu/ZMenuPlugin.java b/src/main/java/fr/maxlego08/menu/ZMenuPlugin.java index e8516c43..36abf3af 100644 --- a/src/main/java/fr/maxlego08/menu/ZMenuPlugin.java +++ b/src/main/java/fr/maxlego08/menu/ZMenuPlugin.java @@ -3,6 +3,7 @@ import com.tcoded.folialib.FoliaLib; import com.tcoded.folialib.impl.PlatformScheduler; import fr.maxlego08.menu.api.*; +import fr.maxlego08.menu.api.annotations.AutoListener; import fr.maxlego08.menu.api.attribute.ApplySpigotAttribute; import fr.maxlego08.menu.api.attribute.AttributApplier; import fr.maxlego08.menu.api.command.CommandManager; @@ -20,13 +21,15 @@ import fr.maxlego08.menu.api.storage.StorageManager; import fr.maxlego08.menu.api.utils.EnumInventory; import fr.maxlego08.menu.api.utils.MetaUpdater; +import fr.maxlego08.menu.api.utils.ReflectionsCache; import fr.maxlego08.menu.api.utils.toast.ToastHelper; import fr.maxlego08.menu.api.website.WebsiteManager; import fr.maxlego08.menu.command.VCommandManager; import fr.maxlego08.menu.command.commands.CommandMenu; +import fr.maxlego08.menu.common.MinecraftVersion; +import fr.maxlego08.menu.common.VersionFilter; import fr.maxlego08.menu.common.utils.cache.YamlFileCache; import fr.maxlego08.menu.common.utils.nms.NMSUtils; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; import fr.maxlego08.menu.config.ConfigManager; import fr.maxlego08.menu.dupe.DupeListener; import fr.maxlego08.menu.dupe.NMSDupeManager; @@ -50,9 +53,7 @@ import fr.maxlego08.menu.hooks.packetevents.loader.PacketEventTitleAnimationLoader; import fr.maxlego08.menu.inventory.VInventoryManager; import fr.maxlego08.menu.inventory.inventories.InventoryDefault; -import fr.maxlego08.menu.listener.AdapterListener; import fr.maxlego08.menu.listener.ItemUpdaterListener; -import fr.maxlego08.menu.listener.SwapKeyListener; import fr.maxlego08.menu.loader.materials.ArmorLoader; import fr.maxlego08.menu.loader.materials.Base64Loader; import fr.maxlego08.menu.pattern.ZPatternManager; @@ -75,9 +76,11 @@ import org.bukkit.OfflinePlayer; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; +import org.bukkit.event.Listener; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.ServicesManager; +import org.reflections.Reflections; import java.io.File; import java.util.*; @@ -152,7 +155,8 @@ public void onEnable() { this.scheduler = this.foliaLib.getScheduler(); - this.dupeManager = NmsVersion.nmsVersion.isPdcVersion() ? new PDCDupeManager(this) : new NMSDupeManager(); + + this.dupeManager = MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.14")) ? new PDCDupeManager(this) : new NMSDupeManager(); this.enchantments.register(); this.preEnable(); @@ -195,7 +199,7 @@ public void onEnable() { servicesManager.register(Enchantments.class, this.enchantments, this, ServicePriority.Highest); servicesManager.register(TitleAnimationManager.class, this.titleAnimationManager, this, ServicePriority.Highest); - if (this.isPaperOrFolia() && NmsVersion.getCurrentVersion().isDialogsVersion()) { + if (this.isPaperOrFolia() && MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.7"))) { if (Configuration.enableMiniMessageFormat) { Logger.info("Paper server detected, loading Dialogs support"); ConfigManager configManager = new ConfigManager(this); @@ -219,8 +223,7 @@ public void onEnable() { this.registerCommand("zmenu", this.commandMenu = new CommandMenu(this), "zm"); /* Add Listener */ - this.addListener(new SwapKeyListener()); - this.addListener(new AdapterListener(this)); + this.registerAutoListeners(); this.addListener(this.vinventoryManager); this.addListener(this.inventoriesPlayer); this.addListener(new ItemUpdaterListener(this.itemManager)); @@ -277,11 +280,40 @@ public void onEnable() { // this.inventoryManager.registerInventoryListener(this.packetUtils); if (this.isActive(Plugins.PACKETEVENTS)) - this.inventoryManager.registerInventoryListener(new PacketEventPlayerInventoryManager()); + this.inventoryManager.registerInventoryListener(new PacketEventPlayerInventoryManager(this)); this.postEnable(); } + private void registerAutoListeners() { + Reflections reflection = ReflectionsCache.getInstance().getOrCreate(this, "fr.maxlego08.menu"); + + Set> candidates = reflection.getTypesAnnotatedWith(AutoListener.class); + + int count = 0; + for (Class clazz : candidates) { + if (!Listener.class.isAssignableFrom(clazz)) continue; + if (!VersionFilter.passes(clazz)) continue; + try { + Listener listener; + try { + listener = (Listener) clazz.getDeclaredConstructor(MenuPlugin.class).newInstance(this); + } catch (NoSuchMethodException e) { + listener = (Listener) clazz.getDeclaredConstructor().newInstance(); + } + this.addListener(listener); + count++; + } catch (Exception e) { + if (Configuration.enableDebug) { + Logger.info("Failed to instantiate auto listener: " + clazz.getName()); + e.printStackTrace(); + } + } + } + + Logger.info("Registered " + count + " auto listener(s)."); + } + /** * Registers all the hooks for the plugins that are present. * This method is called at the end of {@link #onEnable()} and it will @@ -292,59 +324,93 @@ private void registerHooks() { if (this.isActive(Plugins.HEADDATABASE)) { this.inventoryManager.registerMaterialLoader(new HeadDatabaseLoader()); + this.getLogger().info("Registered HeadDatabase material loader"); } + if (this.isActive(Plugins.ZHEAD)) { this.inventoryManager.registerMaterialLoader(new ZHeadLoader(this)); + this.getLogger().info("Registered ZHead material loader"); } + if (this.isActive(Plugins.ORAXEN)) { this.inventoryManager.registerMaterialLoader(new OraxenLoader()); + this.fontImage = new OraxenFont(); + this.getLogger().info("Registered Oraxen material loader and font"); } + if (this.isActive(Plugins.CRAFTENGINE)) { this.inventoryManager.registerMaterialLoader(new CraftEngineLoader()); + this.getLogger().info("Registered CraftEngine material loader"); } + if (this.isActive(Plugins.NEXO)) { this.inventoryManager.registerMaterialLoader(new NexoLoader()); + this.getLogger().info("Registered Nexo material loader"); } - if (this.isEnable(Plugins.MAGICCOSMETICS)) { + + if (this.isActive(Plugins.MAGICCOSMETICS)) { this.inventoryManager.registerMaterialLoader(new MagicCosmeticsLoader()); + this.getLogger().info("Registered MagicCosmetics material loader"); } - if (this.isEnable(Plugins.HMCCOSMETICS)) { + + if (this.isActive(Plugins.HMCCOSMETICS)) { this.inventoryManager.registerMaterialLoader(new HmccosmeticsLoader()); + this.getLogger().info("Registered HMC Cosmetics material loader"); } - if (this.isEnable(Plugins.ITEMSADDER)) { + + if (this.isActive(Plugins.ITEMSADDER)) { this.inventoryManager.registerMaterialLoader(new ItemsAdderLoader(this)); this.fontImage = new ItemsAdderFont(); + this.getLogger().info("Registered ItemsAdder material loader and font"); } + if (this.isActive(Plugins.SLIMEFUN)) { this.inventoryManager.registerMaterialLoader(new SlimeFunLoader()); + this.getLogger().info("Registered SlimeFun material loader"); } + if (this.isActive(Plugins.NOVA)) { this.inventoryManager.registerMaterialLoader(new NovaLoader()); + this.getLogger().info("Registered Nova material loader"); } + if (this.isActive(Plugins.ECO)) { this.inventoryManager.registerMaterialLoader(new EcoLoader()); + this.getLogger().info("Registered Eco material loader"); } + if (this.isActive(Plugins.ZITEMS)) { this.inventoryManager.registerMaterialLoader(new ZItemsLoader(this)); + this.getLogger().info("Registered zItems material loader"); } + if (this.isActive(Plugins.EXECUTABLE_ITEMS)) { this.inventoryManager.registerMaterialLoader(new ExecutableItemsLoader()); + this.getLogger().info("Registered ExecutableItems material loader"); } + if (this.isActive(Plugins.EXECUTABLE_BLOCKS)) { this.inventoryManager.registerMaterialLoader(new ExecutableBlocksLoader()); + this.getLogger().info("Registered ExecutableBlocks material loader"); } + if (this.isActive(Plugins.NEXTGENS)) { this.inventoryManager.registerMaterialLoader(new NextGensGeneratorLoader()); + this.getLogger().info("Registered NextGens material loader"); } + if (this.isActive(Plugins.MYTHICMOBS)) { this.inventoryManager.registerMaterialLoader(new MythicMobsItemsLoader()); this.addListener(new MythicManager(this)); + this.getLogger().info("Registered MythicMobs material loader and listener"); } if (this.isActive(Plugins.BREWERYX)) { this.inventoryManager.registerMaterialLoader(new BreweryXLoader()); + this.getLogger().info("Registered BreweryX material loader"); } if (this.isActive(Plugins.MMOITEMS)) { this.inventoryManager.registerMaterialLoader(new MMOItemsLoader()); + this.getLogger().info("Registered MMOItems material loader"); } if (this.isActive(Plugins.PACKETEVENTS)) { this.titleAnimationManager.registerLoader("packet-events", new PacketEventTitleAnimationLoader()); @@ -372,7 +438,7 @@ private List getInventoriesFiles() { files.add("actions_patterns/default-actions.yml"); - if (this.isPaperOrFolia() && NmsVersion.getCurrentVersion().isDialogsVersion()) { + if (this.isPaperOrFolia() && MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.7"))) { files.add("dialogs/confirmation-dialog.yml"); files.add("dialogs/default-dialog.yml"); files.add("dialogs/multi_action-dialog.yml"); diff --git a/src/main/java/fr/maxlego08/menu/command/commands/CommandInventory.java b/src/main/java/fr/maxlego08/menu/command/commands/CommandInventory.java index 22418ffe..341b9ef3 100644 --- a/src/main/java/fr/maxlego08/menu/command/commands/CommandInventory.java +++ b/src/main/java/fr/maxlego08/menu/command/commands/CommandInventory.java @@ -160,6 +160,7 @@ protected CommandType perform(ZMenuPlugin plugin) { } if (performMainActions) { + this.command.actions_requirements().forEach(requirement -> requirement.execute(finalTargetPlayer, null, inventoryDefault, placeholders)); this.command.actions().forEach(action -> action.preExecute(finalTargetPlayer, null, inventoryDefault, placeholders)); optional.ifPresent(inventory -> manager.openInventory(finalTargetPlayer, inventory)); } diff --git a/src/main/java/fr/maxlego08/menu/command/commands/CommandMenu.java b/src/main/java/fr/maxlego08/menu/command/commands/CommandMenu.java index 2a0942d0..cd081fea 100644 --- a/src/main/java/fr/maxlego08/menu/command/commands/CommandMenu.java +++ b/src/main/java/fr/maxlego08/menu/command/commands/CommandMenu.java @@ -11,8 +11,8 @@ import fr.maxlego08.menu.command.commands.website.CommandMenuDownload; import fr.maxlego08.menu.command.commands.website.CommandMenuInventories; import fr.maxlego08.menu.command.commands.website.CommandMenuLogin; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.common.enums.Permission; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; import fr.maxlego08.menu.zcore.utils.commands.CommandType; public class CommandMenu extends VCommand { @@ -44,7 +44,7 @@ public CommandMenu(ZMenuPlugin plugin) { this.addSubCommand(new CommandMenuInventories(plugin)); // this.addSubCommand(new CommandMenuMarketplace(plugin)); - if (plugin.isPaperOrFolia() && NmsVersion.getCurrentVersion().isDialogsVersion() &&Configuration.enableMiniMessageFormat) { + if (plugin.isPaperOrFolia() && MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.7")) && Configuration.enableMiniMessageFormat) { this.addSubCommand(new CommandDialog(plugin)); } diff --git a/src/main/java/fr/maxlego08/menu/inventory/VInventoryManager.java b/src/main/java/fr/maxlego08/menu/inventory/VInventoryManager.java index b1f1d1ca..9a0df697 100644 --- a/src/main/java/fr/maxlego08/menu/inventory/VInventoryManager.java +++ b/src/main/java/fr/maxlego08/menu/inventory/VInventoryManager.java @@ -267,6 +267,10 @@ protected void onConnect(PlayerJoinEvent event, Player player) { @Override protected void onQuit(PlayerQuitEvent event, Player player) { + Inventory topInventory = CompatibilityUtil.getTopInventory(player); + if (topInventory != null && topInventory.getHolder() instanceof VInventory vInventory) { + vInventory.onPreClose(null, this.plugin, player); + } this.cooldownClick.remove(player.getUniqueId()); this.plugin.getInventoryManager().getPaginationManager().removePlayerStates(player.getUniqueId()); } diff --git a/src/main/java/fr/maxlego08/menu/inventory/inventories/InventoryDefault.java b/src/main/java/fr/maxlego08/menu/inventory/inventories/InventoryDefault.java index 6e60d212..916b9e33 100644 --- a/src/main/java/fr/maxlego08/menu/inventory/inventories/InventoryDefault.java +++ b/src/main/java/fr/maxlego08/menu/inventory/inventories/InventoryDefault.java @@ -197,12 +197,6 @@ public void buildButton(Button button, @NonNull Placeholders placeholders) { return; } final Player targetPlayer = this.getTargetPlayer(); - if (button.hasCustomRender()) { - this.perfDebug.start("onRender." + button.getName()); - button.onRender(targetPlayer, this); - this.perfDebug.end(); - return; - } this.perfDebug.start("getDisplayButton." + button.getName()); button = button.getDisplayButton(this, this.player); @@ -231,13 +225,25 @@ public void buildButton(Button button, @NonNull Placeholders placeholders) { } else { // If the player has the permission, the button - this.displayButton(button, placeholders); + if (button.hasCustomRender()) { + this.perfDebug.start("onRender." + button.getName()); + button.onRender(targetPlayer, this); + this.perfDebug.end(); + } else { + this.displayButton(button, placeholders); + } } } else { // If there is no permission, then the button - this.displayButton(button, placeholders); + if (button.hasCustomRender()) { + this.perfDebug.start("onRender." + button.getName()); + button.onRender(targetPlayer, this); + this.perfDebug.end(); + } else { + this.displayButton(button, placeholders); + } } } diff --git a/src/main/java/fr/maxlego08/menu/itemstack/ItemModelSimilar.java b/src/main/java/fr/maxlego08/menu/itemstack/ItemModelSimilar.java index e67951e7..bfcbe737 100644 --- a/src/main/java/fr/maxlego08/menu/itemstack/ItemModelSimilar.java +++ b/src/main/java/fr/maxlego08/menu/itemstack/ItemModelSimilar.java @@ -1,7 +1,7 @@ package fr.maxlego08.menu.itemstack; import fr.maxlego08.menu.api.itemstack.ItemStackSimilar; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; +import fr.maxlego08.menu.common.MinecraftVersion; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jspecify.annotations.NonNull; @@ -14,7 +14,7 @@ public class ItemModelSimilar implements ItemStackSimilar { @Override public boolean isSimilar(@NonNull ItemStack itemStackA, @NonNull ItemStack itemStackB) { - if (NmsVersion.getCurrentVersion().isNewItemModelAPI()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.4"))) { ItemMeta itemMetaA = itemStackA.getItemMeta(); ItemMeta itemMetaB = itemStackB.getItemMeta(); return itemMetaA.hasItemModel() == itemMetaB.hasItemModel() && itemMetaA.getItemModel() == itemMetaB.getItemModel(); diff --git a/src/main/java/fr/maxlego08/menu/listener/AdapterListener.java b/src/main/java/fr/maxlego08/menu/listener/AdapterListener.java index 839e43c1..7ea12ffa 100644 --- a/src/main/java/fr/maxlego08/menu/listener/AdapterListener.java +++ b/src/main/java/fr/maxlego08/menu/listener/AdapterListener.java @@ -1,6 +1,8 @@ package fr.maxlego08.menu.listener; import fr.maxlego08.menu.ZMenuPlugin; +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.AutoListener; import fr.maxlego08.menu.common.utils.ZUtils; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -13,12 +15,13 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +@AutoListener public class AdapterListener extends ZUtils implements Listener { private final ZMenuPlugin plugin; - public AdapterListener(ZMenuPlugin template) { - this.plugin = template; + public AdapterListener(MenuPlugin plugin) { + this.plugin = (ZMenuPlugin) plugin; } @EventHandler diff --git a/src/main/java/fr/maxlego08/menu/listener/SwapKeyListener.java b/src/main/java/fr/maxlego08/menu/listener/SwapKeyListener.java index b507c5e4..8477d363 100644 --- a/src/main/java/fr/maxlego08/menu/listener/SwapKeyListener.java +++ b/src/main/java/fr/maxlego08/menu/listener/SwapKeyListener.java @@ -2,6 +2,7 @@ import fr.maxlego08.menu.ZMenuPlugin; import fr.maxlego08.menu.api.InventoryManager; +import fr.maxlego08.menu.api.annotations.AutoListener; import fr.maxlego08.menu.api.configuration.Configuration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -11,6 +12,7 @@ /** * Allows to use the key to change item in his second hand, by default the key will be F */ +@AutoListener public class SwapKeyListener implements Listener { @EventHandler public void onPressKey(PlayerSwapHandItemsEvent event) { diff --git a/src/main/java/fr/maxlego08/menu/loader/CommandLoader.java b/src/main/java/fr/maxlego08/menu/loader/CommandLoader.java index 5a77c032..47607149 100644 --- a/src/main/java/fr/maxlego08/menu/loader/CommandLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/CommandLoader.java @@ -7,6 +7,7 @@ import fr.maxlego08.menu.api.command.CommandArgument; import fr.maxlego08.menu.api.exceptions.InventoryException; import fr.maxlego08.menu.api.requirement.Action; +import fr.maxlego08.menu.api.requirement.Requirement; import fr.maxlego08.menu.api.utils.Loader; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; @@ -45,6 +46,7 @@ public Command load(@NonNull YamlConfiguration configuration, @NonNull String pa boolean consoleCanUse = configuration.getBoolean(path + "console-can-use", false); List commandActions = this.menuPlugin.getButtonManager().loadActions((List>) configuration.getList(path + "actions", new ArrayList<>()), path, file); + List requirements = this.menuPlugin.getButtonManager().loadRequirements(configuration, path + "actions-requirements", file); List arguments = new ArrayList<>(); List listValues = configuration.getList(path + "arguments", new ArrayList<>()); if (this.isListOfMap(listValues)) { @@ -98,7 +100,7 @@ public Command load(@NonNull YamlConfiguration configuration, @NonNull String pa } } - return new ZCommand(this.plugin, command, aliases, consoleCanUse, permission, inventory, arguments, commandActions, subCommands, denyMessage, path, file); + return new ZCommand(this.plugin, command, aliases, consoleCanUse, permission, inventory, arguments, commandActions, subCommands, requirements, denyMessage, path, file); } @Override diff --git a/src/main/java/fr/maxlego08/menu/loader/MenuItemStackLoader.java b/src/main/java/fr/maxlego08/menu/loader/MenuItemStackLoader.java index 97de44fe..0ea5bb36 100644 --- a/src/main/java/fr/maxlego08/menu/loader/MenuItemStackLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/MenuItemStackLoader.java @@ -16,8 +16,8 @@ import fr.maxlego08.menu.api.loader.ItemComponentLoader; import fr.maxlego08.menu.api.utils.Loader; import fr.maxlego08.menu.api.utils.LoreType; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.common.utils.ZUtils; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; import fr.maxlego08.menu.zcore.logger.Logger; import org.bukkit.*; import org.bukkit.block.banner.Pattern; @@ -107,15 +107,15 @@ public MenuItemStack load(@NonNull YamlConfiguration configuration, @NonNull Str this.loadAttributes(menuItemStack, configuration, path); - if (NmsVersion.getCurrentVersion().isNewItemStackAPI()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21"))) { this.loadNewItemStacks(menuItemStack, configuration, path, file); } - if (NmsVersion.getCurrentVersion().isNewHeadApi()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.20"))) { this.loadTrims(menuItemStack, configuration, path, file); } this.loadItemModel(configuration, menuItemStack, path, file); - if (NmsVersion.getCurrentVersion().isAttributItemStack()) { // 1.20.5+ + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.20.5"))) { // 1.20.5+ ConfigurationSection componentsSection = configuration.getConfigurationSection(path + "components."); if (componentsSection != null) { ComponentsManager componentsManager = this.manager.getPlugin().getComponentsManager(); @@ -173,7 +173,7 @@ private void loadLore(ZMenuItemStack menuItemStack, YamlConfiguration configurat } private void loadItemModel(@NonNull YamlConfiguration configuration, ZMenuItemStack menuItemStack, @NonNull String path, File file) { - if (NmsVersion.getCurrentVersion().isNewItemModelAPI()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21.4"))) { String itemModel = configuration.getString(path + "item-model"); if (itemModel != null) { try { diff --git a/src/main/java/fr/maxlego08/menu/loader/ZButtonLoader.java b/src/main/java/fr/maxlego08/menu/loader/ZButtonLoader.java index c15c4fda..4ddaa213 100644 --- a/src/main/java/fr/maxlego08/menu/loader/ZButtonLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/ZButtonLoader.java @@ -26,10 +26,10 @@ import fr.maxlego08.menu.api.utils.Loader; import fr.maxlego08.menu.api.utils.OpenLink; import fr.maxlego08.menu.api.utils.TypedMapAccessor; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.common.utils.ZUtils; import fr.maxlego08.menu.common.utils.cache.YamlFileCache; import fr.maxlego08.menu.common.utils.cache.YamlFileCacheEntry; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; import fr.maxlego08.menu.common.utils.yaml.YamlParser; import fr.maxlego08.menu.loader.permissible.PlaceholderPermissibleLoader; import fr.maxlego08.menu.requirement.permissible.ZPermissionPermissible; @@ -211,7 +211,7 @@ public Button load(@NonNull YamlConfiguration configuration, @NonNull String pat String playerHead = configuration.getString(path + "playerHead", configuration.getString(path + "player-head", configuration.getString(path + "item.playerHead", configuration.getString(path + "item.player-head", defaultButtonValue.getPlayerHead())))); if (playerHead != null) { - if (NmsVersion.nmsVersion.isNewMaterial()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.13"))) { itemStack.setMaterial("PLAYER_HEAD"); } else { itemStack.setMaterial("SKULL_ITEM"); diff --git a/src/main/java/fr/maxlego08/menu/loader/actions/TakeItemLoader.java b/src/main/java/fr/maxlego08/menu/loader/actions/TakeItemLoader.java new file mode 100644 index 00000000..9950cbf8 --- /dev/null +++ b/src/main/java/fr/maxlego08/menu/loader/actions/TakeItemLoader.java @@ -0,0 +1,38 @@ +package fr.maxlego08.menu.loader.actions; + +import fr.maxlego08.menu.api.MenuItemStack; +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.enums.ItemVerification; +import fr.maxlego08.menu.api.loader.ActionLoader; +import fr.maxlego08.menu.api.requirement.Action; +import fr.maxlego08.menu.api.utils.TypedMapAccessor; +import fr.maxlego08.menu.requirement.actions.TakeItemAction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.Map; + +public class TakeItemLoader extends ActionLoader { + private final MenuPlugin menuPlugin; + + public TakeItemLoader(MenuPlugin menuPlugin) { + super("take_item", "take-item"); + this.menuPlugin = menuPlugin; + } + + @Override + public @Nullable Action load(@NotNull String path, @NotNull TypedMapAccessor accessor, @NotNull File file) { + MenuItemStack menuItemStack; + if (accessor.contains("item")) { + menuItemStack = this.menuPlugin.getInventoryManager().loadItemStack(file, path, (Map) accessor.getObject("item")); + } else { + menuItemStack = this.menuPlugin.getInventoryManager().loadItemStack(file, path, accessor.getMap()); + } + + boolean useCache = accessor.getBoolean("use-cache", false); + int amount = accessor.getInt("amount", 1); + ItemVerification itemVerification = ItemVerification.valueOf(accessor.getString("verification", ItemVerification.SIMILAR.name())); + return new TakeItemAction(menuItemStack, useCache, amount, itemVerification); + } +} diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMaxStackSizeItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/MaxStackSizeItemComponentLoader.java similarity index 51% rename from src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMaxStackSizeItemComponentLoader.java rename to src/main/java/fr/maxlego08/menu/loader/components/spigot/MaxStackSizeItemComponentLoader.java index 28c8906f..e5f5e6e4 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMaxStackSizeItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/MaxStackSizeItemComponentLoader.java @@ -1,9 +1,13 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; -import fr.maxlego08.menu.api.itemstack.components.MaxStackSizeComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; +import fr.maxlego08.menu.itemstack.components.paper.PaperMaxStackSizeComponent; +import fr.maxlego08.menu.itemstack.components.spigot.SpigotMaxStackSizeComponent; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; import org.jetbrains.annotations.NotNull; @@ -11,16 +15,23 @@ import java.io.File; -public class SpigotMaxStackSizeItemComponentLoader extends ItemComponentLoader { +@ComponentLoader +@SinceVersion("1.20.5") +public class MaxStackSizeItemComponentLoader extends ItemComponentLoader { + private final MenuPlugin plugin; - public SpigotMaxStackSizeItemComponentLoader(){ + public MaxStackSizeItemComponentLoader(MenuPlugin plugin){ super("max-stack-size"); + this.plugin = plugin; } @Override public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) { path = this.normalizePath(path); int maxStackSize = configuration.getInt(path); - return maxStackSize > 0 ? new MaxStackSizeComponent(maxStackSize) : null; + if (maxStackSize > 0) { + return this.plugin.isPaperOrFolia() ? new PaperMaxStackSizeComponent(maxStackSize) : new SpigotMaxStackSizeComponent(maxStackSize); + } + return null; } } diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotAttributeModifiersItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotAttributeModifiersItemComponentLoader.java index 16a86353..45ec777f 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotAttributeModifiersItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotAttributeModifiersItemComponentLoader.java @@ -1,6 +1,8 @@ package fr.maxlego08.menu.loader.components.spigot; import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.attribute.AttributeMergeStrategy; import fr.maxlego08.menu.api.attribute.AttributeWrapper; import fr.maxlego08.menu.api.configuration.Configuration; @@ -23,6 +25,8 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotAttributeModifiersItemComponentLoader extends ItemComponentLoader { private final MenuPlugin plugin; diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBannerPatternsItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBannerPatternsItemComponentLoader.java index 47d2a852..e05cddfe 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBannerPatternsItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBannerPatternsItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.BannerPatternsComponent; @@ -15,6 +17,8 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotBannerPatternsItemComponentLoader extends ItemComponentLoader { public SpigotBannerPatternsItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBaseColorItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBaseColorItemComponentLoader.java index 3a66219b..669e6f8c 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBaseColorItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBaseColorItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.BaseColorComponent; @@ -12,6 +14,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotBaseColorItemComponentLoader extends ItemComponentLoader { public SpigotBaseColorItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBlockStateItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBlockStateItemComponentLoader.java index 21ebfad5..06b5f8c6 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBlockStateItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBlockStateItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.BlockStateComponent; @@ -12,6 +14,8 @@ import java.io.File; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotBlockStateItemComponentLoader extends ItemComponentLoader { public SpigotBlockStateItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBlocksAttacksItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBlocksAttacksItemComponentLoader.java index 71e6dbbc..33a0cdaf 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBlocksAttacksItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBlocksAttacksItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.configuration.Configuration; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; @@ -21,6 +23,8 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.21.5") public class SpigotBlocksAttacksItemComponentLoader extends ItemComponentLoader { public SpigotBlocksAttacksItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBreakSoundItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBreakSoundItemComponentLoader.java index 7b971e16..c508245c 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBreakSoundItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBreakSoundItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.BreakSoundComponent; @@ -13,6 +15,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.5") public class SpigotBreakSoundItemComponentLoader extends ItemComponentLoader { public SpigotBreakSoundItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBundleContentsItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBundleContentsItemComponentLoader.java index c22435e8..d53cd33f 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBundleContentsItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotBundleContentsItemComponentLoader.java @@ -2,6 +2,8 @@ import fr.maxlego08.menu.api.MenuItemStack; import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.BundleContentsComponent; @@ -15,6 +17,8 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotBundleContentsItemComponentLoader extends AbstractMenuItemStackListComponentLoaderBase { public SpigotBundleContentsItemComponentLoader(MenuPlugin plugin){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotChargedProjectilesItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotChargedProjectilesItemComponentLoader.java index 22866a34..9a21256e 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotChargedProjectilesItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotChargedProjectilesItemComponentLoader.java @@ -2,6 +2,8 @@ import fr.maxlego08.menu.api.MenuItemStack; import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.ChargedProjectilesComponent; @@ -15,6 +17,8 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotChargedProjectilesItemComponentLoader extends AbstractMenuItemStackListComponentLoaderBase { public SpigotChargedProjectilesItemComponentLoader(MenuPlugin plugin){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotConsumableItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotConsumableItemComponentLoader.java index b4884747..3bef7fb5 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotConsumableItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotConsumableItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.utils.itemstack.*; @@ -23,6 +25,8 @@ import java.util.Map; import java.util.Optional; +@ComponentLoader +@SinceVersion("1.21.2") public class SpigotConsumableItemComponentLoader extends AbstractEffectItemComponentLoader { public SpigotConsumableItemComponentLoader() { diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotContainerItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotContainerItemComponentLoader.java index 4e9344fb..9e4c2389 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotContainerItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotContainerItemComponentLoader.java @@ -2,6 +2,8 @@ import fr.maxlego08.menu.api.MenuItemStack; import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.ContainerComponent; @@ -17,6 +19,8 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotContainerItemComponentLoader extends AbstractMenuItemStackListComponentLoaderBase { public SpigotContainerItemComponentLoader(MenuPlugin plugin) { diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotContainerLootItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotContainerLootItemComponentLoader.java index bbe35637..7e303cee 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotContainerLootItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotContainerLootItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.ContainerLootComponent; @@ -12,6 +14,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotContainerLootItemComponentLoader extends ItemComponentLoader { public SpigotContainerLootItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotCustomDataItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotCustomDataItemComponentLoader.java index e82c2c43..64cd6247 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotCustomDataItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotCustomDataItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.CustomDataComponent; @@ -17,6 +19,8 @@ import java.util.List; import java.util.Optional; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotCustomDataItemComponentLoader extends ItemComponentLoader { public SpigotCustomDataItemComponentLoader() { diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageItemComponentLoader.java index c596833a..9d015350 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.DamageComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotDamageItemComponentLoader extends ItemComponentLoader { public SpigotDamageItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageResistantItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageResistantItemComponentLoader.java index 99e3a725..6350dace 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageResistantItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageResistantItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.DamageResistantComponent; @@ -15,6 +17,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotDamageResistantItemComponentLoader extends ItemComponentLoader { public SpigotDamageResistantItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageTypeItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageTypeItemComponentLoader.java index 1b158345..1584de3e 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageTypeItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDamageTypeItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.DamageTypeComponent; @@ -13,6 +15,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.11") public class SpigotDamageTypeItemComponentLoader extends ItemComponentLoader { public SpigotDamageTypeItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDyedColorItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDyedColorItemComponentLoader.java index 5c3d354d..9907dc7d 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDyedColorItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotDyedColorItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.DyeColorComponent; @@ -12,6 +14,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotDyedColorItemComponentLoader extends AbstractColorItemComponentLoader { public SpigotDyedColorItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantableItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantableItemComponentLoader.java index a45da00f..81cd7745 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantableItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantableItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.EnchantableComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.2") public class SpigotEnchantableItemComponentLoader extends ItemComponentLoader { public SpigotEnchantableItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantmentGlintOverrideItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantmentGlintOverrideItemComponentLoader.java index 46e203b2..93a88cee 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantmentGlintOverrideItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantmentGlintOverrideItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.EnchantmentGlintOverrideComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotEnchantmentGlintOverrideItemComponentLoader extends ItemComponentLoader { public SpigotEnchantmentGlintOverrideItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantmentsItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantmentsItemComponentLoader.java index 1a7d896a..b84c6e9f 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantmentsItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEnchantmentsItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.EnchantementsComponent; @@ -16,6 +18,8 @@ import java.util.HashMap; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotEnchantmentsItemComponentLoader extends ItemComponentLoader { public SpigotEnchantmentsItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEquippableItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEquippableItemComponentLoader.java index cad3d173..296efba4 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEquippableItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotEquippableItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.EquippableComponent; @@ -17,6 +19,8 @@ import java.util.Collection; import java.util.Optional; +@ComponentLoader +@SinceVersion("1.21.2") public class SpigotEquippableItemComponentLoader extends ItemComponentLoader { public SpigotEquippableItemComponentLoader() { diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFireworkExplosionItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFireworkExplosionItemComponentLoader.java index a5d23a0f..163bd2c8 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFireworkExplosionItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFireworkExplosionItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.FireworkExplosionComponent; @@ -13,6 +15,8 @@ import java.io.File; import java.util.Optional; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotFireworkExplosionItemComponentLoader extends AbstractFireworkItemComponentLoader { public SpigotFireworkExplosionItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFireworksItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFireworksItemComponentLoader.java index 71ff802a..6eeb3bc0 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFireworksItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFireworksItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.FireworksComponent; @@ -15,6 +17,8 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotFireworksItemComponentLoader extends AbstractFireworkItemComponentLoader { public SpigotFireworksItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFoodItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFoodItemComponentLoader.java index e2ca7ea8..2580da7f 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFoodItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotFoodItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.FoodComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotFoodItemComponentLoader extends ItemComponentLoader { public SpigotFoodItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotGliderItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotGliderItemComponentLoader.java index 2fc7976d..f8e52e2e 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotGliderItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotGliderItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.GliderComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.2") public class SpigotGliderItemComponentLoader extends ItemComponentLoader { public SpigotGliderItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotInstrumentItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotInstrumentItemComponentLoader.java index 7d0cb57d..cff3a44d 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotInstrumentItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotInstrumentItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.InstrumentComponent; @@ -16,6 +18,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotInstrumentItemComponentLoader extends ItemComponentLoader { public SpigotInstrumentItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotItemModelItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotItemModelItemComponentLoader.java index a81bfeaa..11f98840 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotItemModelItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotItemModelItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.ItemModelComponent; @@ -12,6 +14,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.2") public class SpigotItemModelItemComponentLoader extends ItemComponentLoader { public SpigotItemModelItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotItemNameItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotItemNameItemComponentLoader.java index c93b31a5..15f2dce3 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotItemNameItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotItemNameItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.ItemNameComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotItemNameItemComponentLoader extends ItemComponentLoader { public SpigotItemNameItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotJukeboxPlayableItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotJukeboxPlayableItemComponentLoader.java index dd4b7ef1..22450d6e 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotJukeboxPlayableItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotJukeboxPlayableItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.JukeboxPlayableComponent; @@ -15,6 +17,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21") public class SpigotJukeboxPlayableItemComponentLoader extends ItemComponentLoader { public SpigotJukeboxPlayableItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotKineticWeaponItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotKineticWeaponItemComponentLoader.java index 8bb86823..324bd14f 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotKineticWeaponItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotKineticWeaponItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -14,6 +16,8 @@ import java.io.File; import java.util.Optional; +@ComponentLoader +@SinceVersion("1.21.11") public class SpigotKineticWeaponItemComponentLoader extends ItemComponentLoader { public SpigotKineticWeaponItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotLodestoneTrackerItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotLodestoneTrackerItemComponentLoader.java index 9bd41297..8eb24944 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotLodestoneTrackerItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotLodestoneTrackerItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.LodestoneTrackerComponent; @@ -15,6 +17,8 @@ import java.io.File; import java.util.List; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotLodestoneTrackerItemComponentLoader extends ItemComponentLoader { public SpigotLodestoneTrackerItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotLoreItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotLoreItemComponentLoader.java index f20d528a..241412c3 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotLoreItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotLoreItemComponentLoader.java @@ -1,6 +1,8 @@ package fr.maxlego08.menu.loader.components.spigot; import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.LoreComponent; @@ -17,6 +19,8 @@ import java.util.ArrayList; import java.util.List; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotLoreItemComponentLoader extends ItemComponentLoader { private final MetaUpdater metaUpdater; diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMapColorItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMapColorItemComponentLoader.java index 1f7cca4b..6dad1019 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMapColorItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMapColorItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.MapColorComponent; @@ -12,6 +14,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotMapColorItemComponentLoader extends AbstractColorItemComponentLoader { public SpigotMapColorItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMapIdItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMapIdItemComponentLoader.java index 067f9cb0..490b7189 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMapIdItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMapIdItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.MapIdComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotMapIdItemComponentLoader extends ItemComponentLoader { public SpigotMapIdItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMaxDamageItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMaxDamageItemComponentLoader.java index 0f8ca230..43860ae7 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMaxDamageItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMaxDamageItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.MaxDamageComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotMaxDamageItemComponentLoader extends ItemComponentLoader { public SpigotMaxDamageItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMinimumAttackChargeItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMinimumAttackChargeItemComponentLoader.java index fc770e9f..5a14926f 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMinimumAttackChargeItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotMinimumAttackChargeItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.MinimumAttackChargeComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.11") public class SpigotMinimumAttackChargeItemComponentLoader extends ItemComponentLoader { public SpigotMinimumAttackChargeItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotOminousBottleAmplifierItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotOminousBottleAmplifierItemComponentLoader.java index 54a5d8d6..229de1ce 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotOminousBottleAmplifierItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotOminousBottleAmplifierItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.OminousBottleAmplifierComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotOminousBottleAmplifierItemComponentLoader extends ItemComponentLoader { public SpigotOminousBottleAmplifierItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPiercingWeaponItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPiercingWeaponItemComponentLoader.java index 882e02f5..ca0015e2 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPiercingWeaponItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPiercingWeaponItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.PiercingWeaponComponent; @@ -13,6 +15,8 @@ import java.io.File; import java.util.Optional; +@ComponentLoader +@SinceVersion("1.21.11") public class SpigotPiercingWeaponItemComponentLoader extends ItemComponentLoader { public SpigotPiercingWeaponItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPotionContentsItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPotionContentsItemComponentLoader.java index a741e26f..aa6c0760 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPotionContentsItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPotionContentsItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.PotionContentsComponent; @@ -17,6 +19,8 @@ import java.io.File; import java.util.List; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotPotionContentsItemComponentLoader extends AbstractEffectItemComponentLoader { public SpigotPotionContentsItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPotionDurationScaleItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPotionDurationScaleItemComponentLoader.java index 702e26fe..a62f6e27 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPotionDurationScaleItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotPotionDurationScaleItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.PotionDurationScaleComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.5") public class SpigotPotionDurationScaleItemComponentLoader extends ItemComponentLoader { public SpigotPotionDurationScaleItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotProfileItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotProfileItemComponentLoader.java index 348c2cec..85a57643 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotProfileItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotProfileItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.ProfileComponent; @@ -19,6 +21,8 @@ import java.net.URL; import java.util.UUID; +@ComponentLoader +@SinceVersion("1.21.9") public class SpigotProfileItemComponentLoader extends ItemComponentLoader { public SpigotProfileItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRarityItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRarityItemComponentLoader.java index 649b2e0b..1dbce0d1 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRarityItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRarityItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.RarityComponent; @@ -12,6 +14,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotRarityItemComponentLoader extends ItemComponentLoader { public SpigotRarityItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRecipesItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRecipesItemComponentLoader.java index e7b89865..fc5f285f 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRecipesItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRecipesItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.RecipesComponent; @@ -14,6 +16,8 @@ import java.util.ArrayList; import java.util.List; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotRecipesItemComponentLoader extends ItemComponentLoader { public SpigotRecipesItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRepairCostItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRepairCostItemComponentLoader.java index 0390e532..09fc5d33 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRepairCostItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotRepairCostItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.RepairCostComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotRepairCostItemComponentLoader extends ItemComponentLoader { public SpigotRepairCostItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotStoredEnchantItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotStoredEnchantItemComponentLoader.java index b5a841c3..2001c188 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotStoredEnchantItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotStoredEnchantItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.StoredEnchantmentsComponent; @@ -16,6 +18,8 @@ import java.util.HashMap; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotStoredEnchantItemComponentLoader extends ItemComponentLoader { public SpigotStoredEnchantItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotSuspiciousStewEffectsItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotSuspiciousStewEffectsItemComponentLoader.java index 86fa829f..0d1bf72f 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotSuspiciousStewEffectsItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotSuspiciousStewEffectsItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.SuspiciousStewEffectsComponent; @@ -14,6 +16,8 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotSuspiciousStewEffectsItemComponentLoader extends AbstractEffectItemComponentLoader { public SpigotSuspiciousStewEffectsItemComponentLoader() { diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotSwingAnimationItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotSwingAnimationItemComponentLoader.java index cc11c060..1f3b18b3 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotSwingAnimationItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotSwingAnimationItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.loader.ItemComponentLoader; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.11") public class SpigotSwingAnimationItemComponentLoader extends ItemComponentLoader { public SpigotSwingAnimationItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotToolItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotToolItemComponentLoader.java index c42eb007..321aab27 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotToolItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotToolItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.ToolComponent; @@ -14,6 +16,8 @@ import java.io.File; import java.util.*; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotToolItemComponentLoader extends ItemComponentLoader { public SpigotToolItemComponentLoader() { diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTooltipDisplayComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTooltipDisplayComponentLoader.java index f8de79a1..834a0eef 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTooltipDisplayComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTooltipDisplayComponentLoader.java @@ -1,5 +1,8 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; +import fr.maxlego08.menu.api.annotations.SpigotOnly; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.TooltipDisplayComponent; @@ -11,6 +14,9 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.5") +@SpigotOnly public class SpigotTooltipDisplayComponentLoader extends ItemComponentLoader { public SpigotTooltipDisplayComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTooltipStyleItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTooltipStyleItemComponentLoader.java index 1c48b4d0..ddd957d3 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTooltipStyleItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTooltipStyleItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.TooltipStyleComponent; @@ -12,6 +14,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.2") public class SpigotTooltipStyleItemComponentLoader extends ItemComponentLoader { public SpigotTooltipStyleItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTrimItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTrimItemComponentLoader.java index 0a7d4df8..858cbd5c 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTrimItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotTrimItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.TrimComponent; @@ -16,6 +18,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotTrimItemComponentLoader extends ItemComponentLoader { public SpigotTrimItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUnbreakableItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUnbreakableItemComponentLoader.java index f9609592..a9dcc640 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUnbreakableItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUnbreakableItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.UnbreakableComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotUnbreakableItemComponentLoader extends ItemComponentLoader { public SpigotUnbreakableItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseCooldownItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseCooldownItemComponentLoader.java index 50746948..3c7c8bf1 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseCooldownItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseCooldownItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.UseCooldownComponent; @@ -12,6 +14,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.2") public class SpigotUseCooldownItemComponentLoader extends ItemComponentLoader { public SpigotUseCooldownItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseEffectsItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseEffectsItemComponentLoader.java index 7957aaa6..09f5983a 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseEffectsItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseEffectsItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.UseEffectsComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.11") public class SpigotUseEffectsItemComponentLoader extends ItemComponentLoader { public SpigotUseEffectsItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseRemainderItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseRemainderItemComponentLoader.java index 3b0de6d7..78842efd 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseRemainderItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotUseRemainderItemComponentLoader.java @@ -2,6 +2,8 @@ import fr.maxlego08.menu.api.MenuItemStack; import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.UseRemainderComponent; @@ -14,6 +16,8 @@ import java.io.File; import java.util.Map; +@ComponentLoader +@SinceVersion("1.21.2") public class SpigotUseRemainderItemComponentLoader extends AbstractMenuItemStackListComponentLoaderBase { public SpigotUseRemainderItemComponentLoader(MenuPlugin plugin){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWeaponItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWeaponItemComponentLoader.java index 8006a416..496a727d 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWeaponItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWeaponItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.WeaponComponent; @@ -11,6 +13,8 @@ import java.io.File; +@ComponentLoader +@SinceVersion("1.21.5") public class SpigotWeaponItemComponentLoader extends ItemComponentLoader { public SpigotWeaponItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWritableBookContentItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWritableBookContentItemComponentLoader.java index 21e8b746..00f3ac1e 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWritableBookContentItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWritableBookContentItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.WritableBookContentComponent; @@ -14,6 +16,8 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotWritableBookContentItemComponentLoader extends ItemComponentLoader { public SpigotWritableBookContentItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWrittenBookContentItemComponentLoader.java b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWrittenBookContentItemComponentLoader.java index 2ae18ccd..7131f845 100644 --- a/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWrittenBookContentItemComponentLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/components/spigot/SpigotWrittenBookContentItemComponentLoader.java @@ -1,5 +1,7 @@ package fr.maxlego08.menu.loader.components.spigot; +import fr.maxlego08.menu.api.annotations.ComponentLoader; +import fr.maxlego08.menu.api.annotations.SinceVersion; import fr.maxlego08.menu.api.context.MenuItemStackContext; import fr.maxlego08.menu.api.itemstack.ItemComponent; import fr.maxlego08.menu.api.itemstack.components.WrittenBookContentComponent; @@ -15,6 +17,8 @@ import java.util.List; import java.util.Map; +@ComponentLoader +@SinceVersion("1.20.5") public class SpigotWrittenBookContentItemComponentLoader extends ItemComponentLoader { public SpigotWrittenBookContentItemComponentLoader(){ diff --git a/src/main/java/fr/maxlego08/menu/loader/permissible/ItemPermissibleLoader.java b/src/main/java/fr/maxlego08/menu/loader/permissible/ItemPermissibleLoader.java index 1191c32d..41bbf0eb 100644 --- a/src/main/java/fr/maxlego08/menu/loader/permissible/ItemPermissibleLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/permissible/ItemPermissibleLoader.java @@ -1,7 +1,7 @@ package fr.maxlego08.menu.loader.permissible; -import fr.maxlego08.menu.ZMenuItemStack; import fr.maxlego08.menu.api.ButtonManager; +import fr.maxlego08.menu.api.MenuItemStack; import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.enums.ItemVerification; import fr.maxlego08.menu.api.loader.PermissibleLoader; @@ -13,6 +13,7 @@ import java.io.File; import java.util.List; +import java.util.Map; public class ItemPermissibleLoader extends PermissibleLoader { @@ -27,8 +28,12 @@ public ItemPermissibleLoader(MenuPlugin plugin) { public Permissible load(@NonNull String path, @NonNull TypedMapAccessor accessor, @NonNull File file) { ButtonManager buttonManager = this.plugin.getButtonManager(); - ZMenuItemStack menuItemStack = new ZMenuItemStack(this.plugin.getInventoryManager(), file.getPath(), path); - menuItemStack.setTypeMapAccessor(accessor); + MenuItemStack menuItemStack; + if (accessor.contains("item")) { + menuItemStack = this.plugin.getInventoryManager().loadItemStack(file, path, (Map) accessor.getObject("item")); + } else { + menuItemStack = this.plugin.getInventoryManager().loadItemStack(file, path, accessor.getMap()); + } int amount = accessor.getInt("amount"); ItemVerification itemVerification = ItemVerification.valueOf(accessor.getString("verification", ItemVerification.SIMILAR.name())); diff --git a/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoriesPlayer.java b/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoriesPlayer.java index 22103d9a..dd8156a2 100644 --- a/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoriesPlayer.java +++ b/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoriesPlayer.java @@ -10,6 +10,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jspecify.annotations.NonNull; import java.util.*; @@ -51,7 +52,15 @@ public void storeInventoryTemporary(@NonNull Player player) { this.inventories.put(player.getUniqueId(), inventoryPlayer); } - + @Override + public void storeInventoryTemporaryOrClear(@NotNull Player player) { + Optional playerInventory = this.getPlayerInventory(player.getUniqueId()); + if (playerInventory.isPresent()) { + playerInventory.get().clearInventory(player); + } else { + storeInventoryTemporary(player); + } + } private void restoreInventory(Player player, BiConsumer restoreAction) { Optional optional = this.getPlayerInventory(player.getUniqueId()); diff --git a/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoryPlayer.java b/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoryPlayer.java index 4cc3b829..1d4964b6 100644 --- a/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoryPlayer.java +++ b/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoryPlayer.java @@ -31,23 +31,38 @@ public void storeInventory(@NonNull Player player) { } public void storeInventory(@NonNull Player player, boolean temporary) { + ClearInvType clearInvType = temporary ? ClearInvType.PACKET_EVENT : ClearInvType.DEFAULT; + this.temporary = temporary; PlayerInventory playerInventory = player.getInventory(); ItemStack[] content = playerInventory.getContents(); - for (int slot = 0; slot != this.MAX_INVENTORY_SIZE; slot++) { - this.clear(slot, playerInventory, content,!temporary, player); + for (int slot = 0; slot != MAX_INVENTORY_SIZE; slot++) { + this.clear(slot, playerInventory, content, player, true, clearInvType); + } + if (!NMSUtils.isOneHand()) { + this.clear(40, playerInventory, content, player, true, clearInvType); + } + } + + @Override + public void clearInventory(@NonNull Player player) { + ClearInvType clearInvType = ClearInvType.PACKET_EVENT; + var removeItem = clearInvType.getRemoveItem(); + + PlayerInventory playerInventory = player.getInventory(); + for (int slot = 0; slot != MAX_INVENTORY_SIZE; slot++) { + removeItem.accept(player, slot, playerInventory); } if (!NMSUtils.isOneHand()) { - this.clear(40, playerInventory, content,!temporary, player); + removeItem.accept(player, 40, playerInventory); } } - private void clear(int slot, PlayerInventory playerInventory, ItemStack[] content, boolean removeItem, Player player) { + private void clear(int slot, PlayerInventory playerInventory, ItemStack[] content, Player player, boolean save, ClearInvType clearInvType) { ItemStack itemStack = content[slot]; - if (itemStack != null) { + if (itemStack != null && save) { this.items.put(slot, ItemStackUtils.serializeItemStack(itemStack)); } - ClearInvType clearInvType = removeItem ? ClearInvType.DEFAULT : ClearInvType.PACKET_EVENT; clearInvType.getRemoveItem().accept(player, slot, playerInventory); } diff --git a/src/main/java/fr/maxlego08/menu/requirement/actions/TakeItemAction.java b/src/main/java/fr/maxlego08/menu/requirement/actions/TakeItemAction.java new file mode 100644 index 00000000..f476a119 --- /dev/null +++ b/src/main/java/fr/maxlego08/menu/requirement/actions/TakeItemAction.java @@ -0,0 +1,105 @@ +package fr.maxlego08.menu.requirement.actions; + +import fr.maxlego08.menu.api.MenuItemStack; +import fr.maxlego08.menu.api.button.Button; +import fr.maxlego08.menu.api.engine.InventoryEngine; +import fr.maxlego08.menu.api.enums.ItemVerification; +import fr.maxlego08.menu.api.requirement.Action; +import fr.maxlego08.menu.api.utils.Placeholders; +import fr.maxlego08.menu.zcore.logger.Logger; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class TakeItemAction extends Action { + + private final ItemVerification itemVerification; + private final MenuItemStack menuItemStack; + private final boolean useCache; + private final int amount; + + public TakeItemAction(MenuItemStack menuItemStack, boolean useCache, int amount, ItemVerification itemVerification) { + this.menuItemStack = menuItemStack; + this.useCache = useCache; + this.amount = amount; + this.itemVerification = itemVerification; + } + + @Override + protected void execute(@NotNull Player player, + @Nullable Button button, + @NotNull InventoryEngine inventoryEngine, + @NotNull Placeholders placeholders) { + + if (this.menuItemStack == null) return; + + ItemStack targetItem = this.menuItemStack.build(player, this.useCache, placeholders); + + if (targetItem == null) { + debugLog("Build failed — target item is null | player=%s", player.getName()); + return; + } + + debugLog("Built target item | player=%s item=%s", player.getName(), targetItem); + + int remaining = this.amount; + PlayerInventory inventory = player.getInventory(); + + for (int slot = 0; slot < 36 && remaining > 0; slot++) { + ItemStack current = inventory.getItem(slot); + if (current == null) continue; + + boolean matches = matches(current, targetItem); + debugLog("Slot %02d | item=%-30s match=%s", slot, current, matches); + if (!matches) continue; + + int toRemove = Math.min(remaining, current.getAmount()); + current.setAmount(current.getAmount() - toRemove); + remaining -= toRemove; + + if (current.getAmount() <= 0) { + debugLog("Slot %02d cleared | player=%s", slot, player.getName()); + inventory.setItem(slot, null); + } + } + + logResult(player, remaining); + } + + private void logResult(@NotNull Player player, int remaining) { + if (!this.debug) return; + + if (remaining > 0) { + Logger.info(String.format( + "[TakeItem] Partial removal | player=%s taken=%d missing=%d", + player.getName(), this.amount - remaining, remaining + )); + } else { + Logger.info(String.format( + "[TakeItem] Success | player=%s taken=%d", + player.getName(), this.amount + )); + } + } + + private void debugLog(String format, Object... args) { + if (this.debug) Logger.info("[TakeItem] " + String.format(format, args)); + } + + private boolean matches(@NotNull ItemStack item, @NotNull ItemStack target) { + return switch (this.itemVerification) { + + case SIMILAR -> item.isSimilar(target); + + case MODELID -> { + if (!item.hasItemMeta()) yield false; + ItemMeta meta = item.getItemMeta(); + if (meta == null || !meta.hasCustomModelData()) yield false; + yield String.valueOf(meta.getCustomModelData()).equals(this.menuItemStack.getModelID()); + } + }; + } +} \ No newline at end of file diff --git a/src/main/java/fr/maxlego08/menu/requirement/permissible/ZItemPermissible.java b/src/main/java/fr/maxlego08/menu/requirement/permissible/ZItemPermissible.java index 01836134..939fe7a2 100644 --- a/src/main/java/fr/maxlego08/menu/requirement/permissible/ZItemPermissible.java +++ b/src/main/java/fr/maxlego08/menu/requirement/permissible/ZItemPermissible.java @@ -1,6 +1,6 @@ package fr.maxlego08.menu.requirement.permissible; -import fr.maxlego08.menu.ZMenuItemStack; +import fr.maxlego08.menu.api.MenuItemStack; import fr.maxlego08.menu.api.button.Button; import fr.maxlego08.menu.api.engine.InventoryEngine; import fr.maxlego08.menu.api.enums.ItemVerification; @@ -19,10 +19,10 @@ public class ZItemPermissible extends ItemPermissible { private final ItemVerification itemVerification; - private final ZMenuItemStack menuItemStack; + private final MenuItemStack menuItemStack; private final int amount; - public ZItemPermissible(ZMenuItemStack menuItemStack, int amount, List denyActions, List successActions, ItemVerification itemVerification) { + public ZItemPermissible(MenuItemStack menuItemStack, int amount, List denyActions, List successActions, ItemVerification itemVerification) { super(denyActions, successActions); this.menuItemStack = menuItemStack; this.amount = amount; @@ -67,8 +67,9 @@ public boolean isValid() { return this.menuItemStack != null; } + @Override - public @Nullable ZMenuItemStack getMenuItemStack() { + public @Nullable MenuItemStack getMenuItemStack() { return this.menuItemStack; } diff --git a/src/main/java/fr/maxlego08/menu/website/ZWebsiteManager.java b/src/main/java/fr/maxlego08/menu/website/ZWebsiteManager.java index 08c24ebf..332c0a5f 100644 --- a/src/main/java/fr/maxlego08/menu/website/ZWebsiteManager.java +++ b/src/main/java/fr/maxlego08/menu/website/ZWebsiteManager.java @@ -10,8 +10,8 @@ import fr.maxlego08.menu.api.placeholder.LocalPlaceholder; import fr.maxlego08.menu.api.utils.Message; import fr.maxlego08.menu.api.website.WebsiteManager; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.common.utils.ZUtils; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; import fr.maxlego08.menu.website.buttons.*; import fr.maxlego08.menu.website.request.HttpRequest; import org.bukkit.command.CommandSender; @@ -212,7 +212,7 @@ private void loadFiles() { files.add("website/inventories.yml"); files.forEach(filePath -> { - if (NmsVersion.nmsVersion.isNewMaterial()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.13"))) { if (!new File(this.plugin.getDataFolder(), filePath).exists()) { this.plugin.saveResource(filePath.replace("website/", "website/1_13/"), filePath, true); } diff --git a/src/main/java/fr/maxlego08/menu/zcore/utils/loader/ItemStackLoader.java b/src/main/java/fr/maxlego08/menu/zcore/utils/loader/ItemStackLoader.java index 53ea8c71..f449b96f 100644 --- a/src/main/java/fr/maxlego08/menu/zcore/utils/loader/ItemStackLoader.java +++ b/src/main/java/fr/maxlego08/menu/zcore/utils/loader/ItemStackLoader.java @@ -4,8 +4,8 @@ import fr.maxlego08.menu.api.exceptions.ItemFlagException; import fr.maxlego08.menu.api.itemstack.Potion; import fr.maxlego08.menu.api.utils.Loader; +import fr.maxlego08.menu.common.MinecraftVersion; import fr.maxlego08.menu.common.utils.ZUtils; -import fr.maxlego08.menu.common.utils.nms.NmsVersion; import fr.maxlego08.menu.zcore.logger.Logger; import fr.maxlego08.menu.zcore.logger.Logger.LogType; import org.bukkit.Material; @@ -171,7 +171,7 @@ public void save(ItemStack item, @NonNull YamlConfiguration configuration, @NonN configuration.set(path + "material", item.getType().name()); if (item.getAmount() != 1) configuration.set(path + "amount", item.getAmount()); - if (NmsVersion.getCurrentVersion().isItemLegacy()) { + if (MinecraftVersion.getCurrentVersion().isBefore(MinecraftVersion.parse("1.13"))) { if (item.getData().getData() != 0) configuration.set(path + "data", item.getData().getData()); if (item.getDurability() != 0) configuration.set(path + "durability", item.getDurability()); } @@ -209,7 +209,7 @@ public void save(ItemStack item, @NonNull YamlConfiguration configuration, @NonN configuration.set(path + "enchants", enchantList); } - if (NmsVersion.getCurrentVersion().isCustomModelData() && meta.hasCustomModelData()) { + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.14")) && meta.hasCustomModelData()) { configuration.set(path + "model-id", meta.getCustomModelData()); } } diff --git a/src/main/java/fr/maxlego08/menu/zcore/utils/meta/ClassicMeta.java b/src/main/java/fr/maxlego08/menu/zcore/utils/meta/ClassicMeta.java index 90c40d4a..20e2b717 100644 --- a/src/main/java/fr/maxlego08/menu/zcore/utils/meta/ClassicMeta.java +++ b/src/main/java/fr/maxlego08/menu/zcore/utils/meta/ClassicMeta.java @@ -78,7 +78,7 @@ public void sendMessage(@NonNull CommandSender sender, @NonNull String message) @Override public void openBook(@NonNull Player player, @NonNull String title, @NonNull String author, @NonNull List lines) { - player.sendMessage("§cYou cant open a book with your minecraft version !"); + player.sendMessage("§cYou cant open a book with your minecraft value !"); } @Override diff --git a/src/main/java/fr/maxlego08/menu/zcore/utils/toast/AdvancementHandler.java b/src/main/java/fr/maxlego08/menu/zcore/utils/toast/AdvancementHandler.java index a4b37d72..aaf5ead4 100644 --- a/src/main/java/fr/maxlego08/menu/zcore/utils/toast/AdvancementHandler.java +++ b/src/main/java/fr/maxlego08/menu/zcore/utils/toast/AdvancementHandler.java @@ -219,7 +219,7 @@ private NamespacedKey modernType(String icon, String message, ToastType style, O } /** - * Helper method to determine which advancement creation method to use based on server version + * Helper method to determine which advancement creation method to use based on server value * * @param icon The Minecraft item ID to use as the toast icon * @param message The message to display in the toast diff --git a/src/main/resources/commands/commands.yml b/src/main/resources/commands/commands.yml index 51e8f259..503b959e 100644 --- a/src/main/resources/commands/commands.yml +++ b/src/main/resources/commands/commands.yml @@ -27,7 +27,7 @@ # - /zm reload config » Reload config.json and messages.yml files - zmenu.reload # - /zm reload inventory [] » Reload inventories files - zmenu.reload # - /zm reload command [] » Reload commands files - zmenu.reload -# - /zm version » Show plugin version +# - /zm value » Show plugin value # - /zm convert » Convert other plugin to zMenu - zmenu.convert # - / » Open specific file - Custom permission # diff --git a/src/main/resources/commands/punish/punish.yml b/src/main/resources/commands/punish/punish.yml index 938e06d5..376dbf8d 100644 --- a/src/main/resources/commands/punish/punish.yml +++ b/src/main/resources/commands/punish/punish.yml @@ -27,7 +27,7 @@ # - /zm reload config » Reload config.json and messages.yml files - zmenu.reload # - /zm reload inventory [] » Reload inventories files - zmenu.reload # - /zm reload command [] » Reload commands files - zmenu.reload -# - /zm version » Show plugin version +# - /zm value » Show plugin value # - /zm convert » Convert other plugin to zMenu - zmenu.convert # - / » Open specific file - Custom permission # diff --git a/src/main/resources/dialogs/confirmation-dialog.yml b/src/main/resources/dialogs/confirmation-dialog.yml index 1e5fbe87..50a0d33b 100644 --- a/src/main/resources/dialogs/confirmation-dialog.yml +++ b/src/main/resources/dialogs/confirmation-dialog.yml @@ -15,7 +15,7 @@ after-action: CLOSE # What to do after dialog: CLOSE, PAUSE, or NONE body: # Plain message section plain_message: - type: dialog_plain_message + type: dialog_dialog_plain_message messages: - "&6&lWelcome to our amazing server!" - "" @@ -67,7 +67,7 @@ body: # Another message section server_rules: - type: dialog_plain_message + type: dialog_dialog_plain_message messages: - "&a&l━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - "&6Server Rules" diff --git a/src/main/resources/dialogs/default-dialog.yml b/src/main/resources/dialogs/default-dialog.yml index db15b7fe..579709e0 100644 --- a/src/main/resources/dialogs/default-dialog.yml +++ b/src/main/resources/dialogs/default-dialog.yml @@ -10,7 +10,7 @@ after_action: CLOSE # What to do after dialog: CLOSE, PAUSE, or NONE # Dialog body content - can contain multiple sections body: plain_message: - type: dialog_plain_message + type: dialog_dialog_plain_message messages: - "&6&lWelcome to our amazing server!" - "" @@ -53,7 +53,7 @@ body: height: 150 # Item display height (1-256) server_rules: # Another message section - type: dialog_plain_message + type: dialog_dialog_plain_message messages: - "&a&l━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - "&6Server Rules" diff --git a/src/main/resources/dialogs/multi_action-dialog.yml b/src/main/resources/dialogs/multi_action-dialog.yml index 3423f8cf..66d83ac9 100644 --- a/src/main/resources/dialogs/multi_action-dialog.yml +++ b/src/main/resources/dialogs/multi_action-dialog.yml @@ -42,7 +42,7 @@ multi-actions: # Dialog body content - can contain multiple sections body: plain_message: - type: dialog_plain_message + type: dialog_dialog_plain_message messages: - "&6&lWelcome to our amazing server!" - "" @@ -85,7 +85,7 @@ body: height: 150 # Item display height (1-256) server_rules: # Another message section - type: dialog_plain_message + type: dialog_dialog_plain_message messages: - "&a&l━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - "&6Server Rules" diff --git a/src/main/resources/dialogs/server_link-dialog.yml b/src/main/resources/dialogs/server_link-dialog.yml index 85d76e08..e2be6752 100644 --- a/src/main/resources/dialogs/server_link-dialog.yml +++ b/src/main/resources/dialogs/server_link-dialog.yml @@ -31,7 +31,7 @@ server-links: # Dialog body content - can contain multiple sections body: plain_message: - type: dialog_plain_message + type: dialog_dialog_plain_message messages: - "&6&lWelcome to our amazing server!" - "" @@ -74,7 +74,7 @@ body: height: 150 # Item display height (1-256) server_rules: # Another message section - type: dialog_plain_message + type: dialog_dialog_plain_message messages: - "&a&l━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - "&6Server Rules" diff --git a/src/main/resources/inventories/example_punish.yml b/src/main/resources/inventories/example_punish.yml index 40f2ffb2..07e31a3b 100644 --- a/src/main/resources/inventories/example_punish.yml +++ b/src/main/resources/inventories/example_punish.yml @@ -28,7 +28,7 @@ # - /zm reload config » Reload config.json and messages.yml files - zmenu.reload # - /zm reload inventory [] » Reload inventories files - zmenu.reload # - /zm reload command [] » Reload commands files - zmenu.reload -# - /zm version » Show plugin version +# - /zm value » Show plugin value # - /zm convert » Convert other plugin to zMenu - zmenu.convert # - / » Open specific file - Custom permission # diff --git a/src/main/resources/patterns/pattern_example.yml b/src/main/resources/patterns/pattern_example.yml index f8aa6514..93eadc75 100644 --- a/src/main/resources/patterns/pattern_example.yml +++ b/src/main/resources/patterns/pattern_example.yml @@ -28,7 +28,7 @@ # - /zm reload config » Reload config.json and messages.yml files - zmenu.reload # - /zm reload inventory [] » Reload inventories files - zmenu.reload # - /zm reload command [] » Reload commands files - zmenu.reload -# - /zm version » Show plugin version +# - /zm value » Show plugin value # - /zm convert » Convert other plugin to zMenu - zmenu.convert # - / » Open specific file - Custom permission # diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ac3e8483..54c2413d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -30,4 +30,5 @@ loadbefore: - SuperiorSkyblock2 libraries: - org.mariadb.jdbc:mariadb-java-client:3.5.6 - - net.kyori:adventure-text-minimessage:4.26.1 \ No newline at end of file + - net.kyori:adventure-text-minimessage:4.26.1 + - org.reflections:reflections:0.10.2 \ No newline at end of file