diff --git a/build.gradle.kts b/build.gradle.kts index 643c40c2..6558bf29 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,6 +18,7 @@ repositories { maven("https://repo.extendedclip.com/content/repositories/placeholderapi/") maven("https://repo.glaremasters.me/repository/public/") maven("https://nexus.phoenixdevt.fr/repository/maven-public/") + maven("https://repo.momirealms.net/releases/") maven("https://repo.nexomc.com/releases/") maven("https://repo.oraxen.com/releases") maven("https://jitpack.io") @@ -30,6 +31,8 @@ dependencies { compileOnly(libs.authlib) compileOnly(libs.headdb) + compileOnly(libs.craftengine.core) + compileOnly(libs.craftengine.bukkit) compileOnly(libs.itemsadder) compileOnly(libs.nexo) compileOnly(libs.oraxen) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bd6d8d7d..fab2968d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,6 +4,7 @@ spigot = "1.21.5-R0.1-SNAPSHOT" vault = "1.7.1" authlib = "1.5.25" headdb = "1.3.2" +craftengine = "0.0.62" itemsadder = "3.6.3-beta-14" nexo = "1.1.0" oraxen = "1.190.0" @@ -25,6 +26,8 @@ spigot = { module = "org.spigotmc:spigot-api", version.ref = "spigot" } vault = { module = "com.github.milkbowl:VaultAPI", version.ref = "vault" } authlib = { module = "com.mojang:authlib", version.ref = "authlib" } headdb = { module = "com.arcaniax:HeadDatabase-API", version.ref = "headdb" } +craftengine-core = { module = "net.momirealms:craft-engine-core", version.ref = "craftengine"} +craftengine-bukkit = { module = "net.momirealms:craft-engine-bukkit", version.ref = "craftengine"} itemsadder = { module = "com.github.LoneDev6:api-itemsadder", version.ref = "itemsadder" } nexo = { module = "com.nexomc:nexo", version.ref = "nexo" } oraxen = { module = "io.th0rgal:oraxen", version.ref = "oraxen" } diff --git a/src/main/java/com/extendedclip/deluxemenus/DeluxeMenus.java b/src/main/java/com/extendedclip/deluxemenus/DeluxeMenus.java index f812f937..a5b4b354 100644 --- a/src/main/java/com/extendedclip/deluxemenus/DeluxeMenus.java +++ b/src/main/java/com/extendedclip/deluxemenus/DeluxeMenus.java @@ -269,6 +269,10 @@ private void setUpItemHooks() { } } + if (Bukkit.getPluginManager().isPluginEnabled("CraftEngine")) { + this.itemHooks.put("craftengine", new CraftEngineHook()); + } + if (Bukkit.getPluginManager().isPluginEnabled("ItemsAdder")) { this.itemHooks.put("itemsadder", new ItemsAdderHook()); } diff --git a/src/main/java/com/extendedclip/deluxemenus/hooks/CraftEngineHook.java b/src/main/java/com/extendedclip/deluxemenus/hooks/CraftEngineHook.java new file mode 100644 index 00000000..741a9655 --- /dev/null +++ b/src/main/java/com/extendedclip/deluxemenus/hooks/CraftEngineHook.java @@ -0,0 +1,59 @@ +package com.extendedclip.deluxemenus.hooks; + +import com.extendedclip.deluxemenus.cache.SimpleCache; +import net.momirealms.craftengine.bukkit.api.BukkitAdaptors; +import net.momirealms.craftengine.bukkit.api.CraftEngineItems; +import net.momirealms.craftengine.core.item.CustomItem; +import net.momirealms.craftengine.core.util.Key; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; + +public class CraftEngineHook implements ItemHook, SimpleCache { + private static final ItemStack EMPTY = new ItemStack(Material.STONE); + private final Map cache = new ConcurrentHashMap<>(); + + @Override + public void clearCache() { + cache.clear(); + } + + @Override + public ItemStack getItem(@NotNull String... arguments) { + if (arguments.length == 0) return EMPTY.clone(); + String namespaceId = arguments[0]; + ItemStack cached = cache.get(namespaceId); + if (cached != null) return cached.clone(); + CustomItem customItem = CraftEngineItems.byId(Key.of(namespaceId)); + if (customItem == null) return EMPTY.clone(); + ItemStack result = customItem.buildItemStack(); + cache.put(namespaceId, result); + return result.clone(); + } + + @Override + public ItemStack getItem(@NotNull Player holder, @NotNull String... arguments) { + if (arguments.length == 0) return EMPTY.clone(); + Key id = Key.of(arguments[0]); + return Optional.ofNullable(CraftEngineItems.byId(id)) + .map(item -> item.buildItemStack(BukkitAdaptors.adapt(holder))) + .orElseGet(EMPTY::clone); + } + + @Override + public boolean itemMatchesIdentifiers(@NotNull ItemStack item, @NotNull String... arguments) { + if (arguments.length == 0) return false; + CustomItem customItem = CraftEngineItems.byItemStack(item); + return customItem != null && customItem.id().equals(Key.of(arguments[0])); + } + + @Override + public String getPrefix() { + return "craftengine-"; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 22d79f63..c57c869c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,7 +3,7 @@ name: DeluxeMenus main: com.extendedclip.deluxemenus.DeluxeMenus version: ${version} authors: [ HelpChat ] -softdepend: [ PlaceholderAPI, Vault, HeadDatabase, ItemsAdder, Nexo, Oraxen, ExecutableItems, ExecutableBlocks, Score, SimpleItemGenerator, MMOItems ] +softdepend: [ PlaceholderAPI, Vault, HeadDatabase, CraftEngine, ItemsAdder, Nexo, Oraxen, ExecutableItems, ExecutableBlocks, Score, SimpleItemGenerator, MMOItems ] description: All in one inventory menu system commands: deluxemenus: