From 4f4da6f610ac5ebc6a5ddf827d5fdb8dc280da34 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Sun, 14 Feb 2021 09:52:41 +0300 Subject: [PATCH] mimic: Add RPGInventoryItemsRegistry --- .../rpginventory/RPGInventory.java | 24 ++++++- .../mimic/RPGInventoryItemsRegistry.java | 62 +++++++++++++++++++ .../rpginventory/item/CustomItem.java | 7 +++ .../rpginventory/item/ItemManager.java | 4 ++ 4 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ru/endlesscode/rpginventory/compat/mimic/RPGInventoryItemsRegistry.java diff --git a/src/main/java/ru/endlesscode/rpginventory/RPGInventory.java b/src/main/java/ru/endlesscode/rpginventory/RPGInventory.java index 0393cee..3c7db1c 100644 --- a/src/main/java/ru/endlesscode/rpginventory/RPGInventory.java +++ b/src/main/java/ru/endlesscode/rpginventory/RPGInventory.java @@ -25,6 +25,7 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.RegisteredServiceProvider; +import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.ServicesManager; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -33,8 +34,10 @@ import ru.endlesscode.inspector.bukkit.plugin.PluginLifecycle; import ru.endlesscode.inspector.bukkit.scheduler.TrackedBukkitRunnable; import ru.endlesscode.mimic.classes.BukkitClassSystem; +import ru.endlesscode.mimic.items.BukkitItemsRegistry; import ru.endlesscode.mimic.level.BukkitLevelSystem; import ru.endlesscode.rpginventory.compat.VersionHandler; +import ru.endlesscode.rpginventory.compat.mimic.RPGInventoryItemsRegistry; import ru.endlesscode.rpginventory.compat.mypet.MyPetManager; import ru.endlesscode.rpginventory.event.listener.ArmorEquipListener; import ru.endlesscode.rpginventory.event.listener.ElytraListener; @@ -126,6 +129,15 @@ public void init() { Config.init(this); } + @Override + public void onLoad() { + if (!checkMimicEnabled()) { + getServer() + .getServicesManager() + .register(BukkitItemsRegistry.class, new RPGInventoryItemsRegistry(), this, ServicePriority.High); + } + } + @Override public void onEnable() { if (!initMimicSystems()) { @@ -191,19 +203,25 @@ public void onEnable() { } private boolean initMimicSystems() { - boolean isMimicEnabled = getServer().getPluginManager().isPluginEnabled("Mimic"); + boolean isMimicEnabled = checkMimicEnabled(); if (isMimicEnabled) { ServicesManager servicesManager = getServer().getServicesManager(); this.levelSystemProvider = servicesManager.load(BukkitLevelSystem.Provider.class); + Log.i("Level system ''{0}'' found.", this.levelSystemProvider.getId()); this.classSystemProvider = servicesManager.load(BukkitClassSystem.Provider.class); + Log.i("Class system ''{0}'' found.", this.classSystemProvider.getId()); } else { - getLogger().severe("Mimic is required for the plugin!"); - getLogger().severe("Download it: https://www.spigotmc.org/resources/82515/"); + Log.s("Mimic is required for RPGInventory to use levels and classes from other RPG plugins!"); + Log.s("Download it from SpigotMC: https://www.spigotmc.org/resources/82515/"); getServer().getPluginManager().disablePlugin(this); } return isMimicEnabled; } + private boolean checkMimicEnabled() { + return getServer().getPluginManager().isPluginEnabled("Mimic"); + } + private boolean checkRequirements() { // Check if plugin is enabled if (!Config.getConfig().getBoolean("enabled")) { diff --git a/src/main/java/ru/endlesscode/rpginventory/compat/mimic/RPGInventoryItemsRegistry.java b/src/main/java/ru/endlesscode/rpginventory/compat/mimic/RPGInventoryItemsRegistry.java new file mode 100644 index 0000000..685b4db --- /dev/null +++ b/src/main/java/ru/endlesscode/rpginventory/compat/mimic/RPGInventoryItemsRegistry.java @@ -0,0 +1,62 @@ +package ru.endlesscode.rpginventory.compat.mimic; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import ru.endlesscode.mimic.items.BukkitItemsRegistry; +import ru.endlesscode.rpginventory.RPGInventory; +import ru.endlesscode.rpginventory.item.CustomItem; +import ru.endlesscode.rpginventory.item.ItemManager; + +import java.util.Collection; + +public class RPGInventoryItemsRegistry implements BukkitItemsRegistry { + + public static String ID = "rpginventory"; + + @NotNull + @Override + public String getId() { + return ID; + } + + @Override + public boolean isEnabled() { + return RPGInventory.getInstance().isEnabled(); + } + + @NotNull + @Override + public Collection getKnownIds() { + return ItemManager.getItemList(); + } + + @Nullable + @Override + public ItemStack getItem(@NotNull String itemId, int amount) { + ItemStack item = ItemManager.getItem(itemId); + if (item.getType() != Material.AIR) { + item.setAmount(amount); + return item; + } else { + return null; + } + } + + @Nullable + @Override + public String getItemId(@NotNull ItemStack item) { + CustomItem customItem = ItemManager.getCustomItem(item); + if (customItem != null) { + return customItem.getId(); + } else { + return null; + } + } + + @Override + public boolean isItemExists(@NotNull String itemId) { + return ItemManager.hasItem(itemId); + } +} diff --git a/src/main/java/ru/endlesscode/rpginventory/item/CustomItem.java b/src/main/java/ru/endlesscode/rpginventory/item/CustomItem.java index 94fe569..6ea5d06 100644 --- a/src/main/java/ru/endlesscode/rpginventory/item/CustomItem.java +++ b/src/main/java/ru/endlesscode/rpginventory/item/CustomItem.java @@ -41,6 +41,8 @@ public class CustomItem extends ClassedItem { // Required options @NotNull + private final String id; + @NotNull private final String name; private final List stats = new ArrayList<>(); @@ -63,6 +65,7 @@ public class CustomItem extends ClassedItem { CustomItem(String id, Texture texture, @NotNull ConfigurationSection config) { super(texture, config); + this.id = id; Rarity rarity = SafeEnums.valueOfOrDefault(Rarity.class, config.getString("rarity"), Rarity.COMMON); this.name = StringUtils.coloredLine(rarity.getColor() + config.getString("name")); @@ -189,6 +192,10 @@ boolean isUnbreakable() { return unbreakable; } + public @NotNull String getId() { + return id; + } + @SuppressWarnings("unused") private enum Rarity { COMMON('7'), diff --git a/src/main/java/ru/endlesscode/rpginventory/item/ItemManager.java b/src/main/java/ru/endlesscode/rpginventory/item/ItemManager.java index ced2e1b..7f15a55 100644 --- a/src/main/java/ru/endlesscode/rpginventory/item/ItemManager.java +++ b/src/main/java/ru/endlesscode/rpginventory/item/ItemManager.java @@ -152,6 +152,10 @@ public static List getItemList() { return new ArrayList<>(CUSTOM_ITEMS.keySet()); } + public static boolean hasItem(String itemId) { + return CUSTOM_ITEMS.containsKey(itemId); + } + @NotNull public static ItemStack getItem(String itemId) { CustomItem customItem = CUSTOM_ITEMS.get(itemId);