From 196a651ab30e16fcce9f2f9ec7c2f4fd50105987 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sun, 29 Aug 2021 15:51:38 +0100 Subject: [PATCH] Added ShopGuiPlus integration --- .../core/integrations/mcmmo/McmmoManager.java | 8 ++--- .../core/integrations/shop/ShopManager.java | 36 +++++++++++++++++++ .../core/integrations/shop/ShopWrapper.java | 11 ++++++ .../java/com/willfp/eco/core/items/Items.java | 20 +++++++++-- eco-core/core-plugin/build.gradle | 1 + .../com/willfp/eco/spigot/EcoSpigotPlugin.kt | 5 +++ .../integrations/shop/ShopShopGuiPlus.kt | 31 ++++++++++++++++ 7 files changed, 105 insertions(+), 7 deletions(-) create mode 100644 eco-api/src/main/java/com/willfp/eco/core/integrations/shop/ShopManager.java create mode 100644 eco-api/src/main/java/com/willfp/eco/core/integrations/shop/ShopWrapper.java create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/integrations/shop/ShopShopGuiPlus.kt diff --git a/eco-api/src/main/java/com/willfp/eco/core/integrations/mcmmo/McmmoManager.java b/eco-api/src/main/java/com/willfp/eco/core/integrations/mcmmo/McmmoManager.java index 230943ea..38c4934d 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/integrations/mcmmo/McmmoManager.java +++ b/eco-api/src/main/java/com/willfp/eco/core/integrations/mcmmo/McmmoManager.java @@ -16,7 +16,7 @@ public class McmmoManager { /** * A set of all registered integrations. */ - private final Set regsistered = new HashSet<>(); + private final Set registered = new HashSet<>(); /** * Register a new integration. @@ -24,7 +24,7 @@ public class McmmoManager { * @param integration The integration to register. */ public void register(@NotNull final McmmoWrapper integration) { - regsistered.add(integration); + registered.add(integration); } /** @@ -34,7 +34,7 @@ public class McmmoManager { * @return The bonus drop count. */ public int getBonusDropCount(@NotNull final Block block) { - for (McmmoWrapper mcmmoWrapper : regsistered) { + for (McmmoWrapper mcmmoWrapper : registered) { return mcmmoWrapper.getBonusDropCount(block); } return 0; @@ -47,7 +47,7 @@ public class McmmoManager { * @return If the event is fake. */ public boolean isFake(@NotNull final Event event) { - for (McmmoWrapper mcmmoWrapper : regsistered) { + for (McmmoWrapper mcmmoWrapper : registered) { return mcmmoWrapper.isFake(event); } return false; diff --git a/eco-api/src/main/java/com/willfp/eco/core/integrations/shop/ShopManager.java b/eco-api/src/main/java/com/willfp/eco/core/integrations/shop/ShopManager.java new file mode 100644 index 00000000..6ab22f36 --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/integrations/shop/ShopManager.java @@ -0,0 +1,36 @@ +package com.willfp.eco.core.integrations.shop; + +import lombok.experimental.UtilityClass; +import org.jetbrains.annotations.NotNull; + +import java.util.HashSet; +import java.util.Set; + +/** + * Class to handle shop integrations. + */ +@UtilityClass +public class ShopManager { + /** + * A set of all registered integrations. + */ + private final Set registered = new HashSet<>(); + + /** + * Register a new integration. + * + * @param integration The integration to register. + */ + public void register(@NotNull final ShopWrapper integration) { + registered.add(integration); + } + + /** + * Register eco item provider for shop plugins. + */ + public void registerEcoProvider() { + for (ShopWrapper shopWrapper : registered) { + shopWrapper.registerEcoProvider(); + } + } +} diff --git a/eco-api/src/main/java/com/willfp/eco/core/integrations/shop/ShopWrapper.java b/eco-api/src/main/java/com/willfp/eco/core/integrations/shop/ShopWrapper.java new file mode 100644 index 00000000..6a37799c --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/integrations/shop/ShopWrapper.java @@ -0,0 +1,11 @@ +package com.willfp.eco.core.integrations.shop; + +/** + * Wrapper class for shop integrations. + */ +public interface ShopWrapper { + /** + * Register eco item provider for shop plugins. + */ + void registerEcoProvider(); +} diff --git a/eco-api/src/main/java/com/willfp/eco/core/items/Items.java b/eco-api/src/main/java/com/willfp/eco/core/items/Items.java index 6e1425e5..9247226d 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/items/Items.java +++ b/eco-api/src/main/java/com/willfp/eco/core/items/Items.java @@ -1,8 +1,5 @@ package com.willfp.eco.core.items; -import com.willfp.eco.core.items.builder.EnchantedBookBuilder; -import com.willfp.eco.core.items.builder.ItemBuilder; -import com.willfp.eco.core.items.builder.ItemStackBuilder; import com.willfp.eco.core.recipe.parts.EmptyTestableItem; import com.willfp.eco.core.recipe.parts.MaterialTestableItem; import com.willfp.eco.core.recipe.parts.ModifiedTestableItem; @@ -16,6 +13,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.HashMap; @@ -195,6 +193,22 @@ public final class Items { return false; } + /** + * Get custom item from item. + * + * @param itemStack The item. + * @return The custom item, or null if not exists. + */ + @Nullable + public CustomItem getCustomItem(@NotNull final ItemStack itemStack) { + for (CustomItem item : REGISTRY.values()) { + if (item.matches(itemStack)) { + return item; + } + } + return null; + } + /** * Get all registered custom items. * diff --git a/eco-core/core-plugin/build.gradle b/eco-core/core-plugin/build.gradle index 95a97de1..27acc08a 100644 --- a/eco-core/core-plugin/build.gradle +++ b/eco-core/core-plugin/build.gradle @@ -20,6 +20,7 @@ dependencies { compileOnly 'com.gmail.nossr50.mcMMO:mcMMO:2.1.157' compileOnly 'me.clip:placeholderapi:2.10.9' compileOnly 'com.willfp:Oraxen:e1f4003d8d' + compileOnly 'com.github.brcdev-minecraft:shopgui-api:2.2.0' compileOnly 'com.github.LoneDev6:API-ItemsAdder:2.3.8' diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt index fd4b17dd..647da408 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt @@ -8,6 +8,7 @@ import com.willfp.eco.core.integrations.anticheat.AnticheatManager import com.willfp.eco.core.integrations.antigrief.AntigriefManager import com.willfp.eco.core.integrations.customitems.CustomItemsManager import com.willfp.eco.core.integrations.mcmmo.McmmoManager +import com.willfp.eco.core.integrations.shop.ShopManager import com.willfp.eco.internal.drops.DropManager import com.willfp.eco.proxy.BlockBreakProxy import com.willfp.eco.proxy.FastItemStackFactoryProxy @@ -21,6 +22,7 @@ import com.willfp.eco.spigot.integrations.anticheat.* import com.willfp.eco.spigot.integrations.antigrief.* import com.willfp.eco.spigot.integrations.customitems.CustomItemsOraxen import com.willfp.eco.spigot.integrations.mcmmo.McmmoIntegrationImpl +import com.willfp.eco.spigot.integrations.shop.ShopShopGuiPlus import com.willfp.eco.spigot.recipes.ShapedRecipeListener import com.willfp.eco.util.BlockUtils import com.willfp.eco.util.SkullUtils @@ -110,6 +112,9 @@ abstract class EcoSpigotPlugin : EcoPlugin( // Custom Items IntegrationLoader("Oraxen") { CustomItemsManager.register(CustomItemsOraxen()) }, + // Shop + IntegrationLoader("ShopGuiPlus") { ShopManager.register(ShopShopGuiPlus()) }, + // Misc IntegrationLoader("mcMMO") { McmmoManager.register(McmmoIntegrationImpl()) } ) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/integrations/shop/ShopShopGuiPlus.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/integrations/shop/ShopShopGuiPlus.kt new file mode 100644 index 00000000..52aad4cd --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/integrations/shop/ShopShopGuiPlus.kt @@ -0,0 +1,31 @@ +package com.willfp.eco.spigot.integrations.shop + +import com.willfp.eco.core.integrations.shop.ShopWrapper +import com.willfp.eco.core.items.Items +import net.brcdev.shopgui.ShopGuiPlusApi +import net.brcdev.shopgui.provider.item.ItemProvider +import org.bukkit.configuration.ConfigurationSection +import org.bukkit.inventory.ItemStack + +class ShopShopGuiPlus : ShopWrapper { + override fun registerEcoProvider() { + ShopGuiPlusApi.registerItemProvider(EcoShopGuiPlusProvider()) + } + + class EcoShopGuiPlusProvider : ItemProvider("eco") { + override fun isValidItem(itemStack: ItemStack?): Boolean { + itemStack ?: return false + + return Items.isCustomItem(itemStack) + } + + override fun loadItem(configurationSection: ConfigurationSection): ItemStack? { + val id = configurationSection.getString("eco") + return if (id == null) null else Items.lookup(id)?.item + } + + override fun compare(itemStack1: ItemStack, itemStack2: ItemStack): Boolean { + return Items.getCustomItem(itemStack1)?.key == Items.getCustomItem(itemStack2)?.key + } + } +} \ No newline at end of file