diff --git a/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantManager.java b/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantManager.java index 5f524024..c6af4a70 100644 --- a/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantManager.java +++ b/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantManager.java @@ -110,7 +110,8 @@ private static Set buildCustomEnchantments(HoloItemsRevamp pl new Memento(plugin), new TideRider(plugin), new Backdash(plugin), - new Plow(plugin) + new Plow(plugin), + new VerificationSeal(plugin) ); } } diff --git a/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantmentAbility.java b/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantmentAbility.java index fcc8beb5..30c6873c 100644 --- a/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantmentAbility.java +++ b/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantmentAbility.java @@ -5,6 +5,8 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.inventory.ItemStack; @@ -24,8 +26,11 @@ default void onProjectileLaunch(ProjectileLaunchEvent event, ItemStack itemStack } default void onPlayerInteract(PlayerInteractEvent event, ItemStack itemStack) { - } + } default void onPlayerToggleSneak(PlayerToggleSneakEvent event, ItemStack itemStack) { } + + default void onInventoryClicked(InventoryClickEvent event, ItemStack itemStack) { + } } diff --git a/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantmentListener.java b/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantmentListener.java index f80cd914..c0b84270 100644 --- a/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantmentListener.java +++ b/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantmentListener.java @@ -8,6 +8,7 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.inventory.ItemStack; @@ -99,4 +100,17 @@ public void onPlayerToggleSneak(PlayerToggleSneakEvent event) { }); } } + + @EventHandler(ignoreCancelled = true) + public void onInventoryClicked(InventoryClickEvent event) { + final var stack = event.getCurrentItem(); + if(stack == null) { + return; + } + stack.getEnchantments().keySet().forEach(enchantment -> { + if (enchantment instanceof EnchantmentAbility ability) { + ability.onInventoryClicked(event, stack); + } + }); + } } diff --git a/src/main/java/xyz/holocons/mc/holoitemsrevamp/collection/CollectionManager.java b/src/main/java/xyz/holocons/mc/holoitemsrevamp/collection/CollectionManager.java index f757de01..c3e49b11 100644 --- a/src/main/java/xyz/holocons/mc/holoitemsrevamp/collection/CollectionManager.java +++ b/src/main/java/xyz/holocons/mc/holoitemsrevamp/collection/CollectionManager.java @@ -867,7 +867,7 @@ public List getLore() { } private static Idol buildFubuki(HoloItemsRevamp plugin) { - return new Idol(new PlowBook(plugin)) { + return new Idol(new PlowBook(plugin), new VerificationSealBook(plugin)) { @Override public @NotNull String getSkinUrl() { diff --git a/src/main/java/xyz/holocons/mc/holoitemsrevamp/enchantment/VerificationSeal.java b/src/main/java/xyz/holocons/mc/holoitemsrevamp/enchantment/VerificationSeal.java new file mode 100644 index 00000000..8eb14bdb --- /dev/null +++ b/src/main/java/xyz/holocons/mc/holoitemsrevamp/enchantment/VerificationSeal.java @@ -0,0 +1,67 @@ +package xyz.holocons.mc.holoitemsrevamp.enchantment; + +import com.strangeone101.holoitemsapi.enchantment.CustomEnchantment; +import com.strangeone101.holoitemsapi.enchantment.EnchantmentAbility; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import xyz.holocons.mc.holoitemsrevamp.HoloItemsRevamp; + +public class VerificationSeal extends CustomEnchantment implements EnchantmentAbility { + + private final HoloItemsRevamp plugin; + + public VerificationSeal(HoloItemsRevamp plugin) { + super(plugin, "verification_seal"); + this.plugin = plugin; + } + + @Override + public int getMaxLevel() { + return 1; + } + + @Override + public boolean conflictsWith(@NotNull Enchantment enchantment) { + return false; + } + + @Override + public boolean canEnchantItem(@NotNull ItemStack itemStack) { + return itemStack.getType() == Material.FILLED_MAP; + } + + @Override + public @NotNull Component displayName(int level) { + return Component.text() + .color(NamedTextColor.GRAY) + .decoration(TextDecoration.ITALIC, false) + .append(Component.text("Verification Seal")) + .build(); + } + + @Override + public int getCostMultiplier() { + return 12; + } + + @Override + public void onInventoryClicked(InventoryClickEvent event, ItemStack itemStack) { + if(event instanceof CraftItemEvent || event.getInventory().getType() == InventoryType.CARTOGRAPHY) { + event.setCancelled(true); + } + else { + final var clickedInventory = event.getClickedInventory(); + if(clickedInventory != null && clickedInventory.getType() == InventoryType.CARTOGRAPHY) { + event.setCancelled(true); + } + } + } +} diff --git a/src/main/java/xyz/holocons/mc/holoitemsrevamp/item/VerificationSealBook.java b/src/main/java/xyz/holocons/mc/holoitemsrevamp/item/VerificationSealBook.java new file mode 100644 index 00000000..44072bd7 --- /dev/null +++ b/src/main/java/xyz/holocons/mc/holoitemsrevamp/item/VerificationSealBook.java @@ -0,0 +1,68 @@ +package xyz.holocons.mc.holoitemsrevamp.item; + +import com.strangeone101.holoitemsapi.enchantment.CustomEnchantment; +import com.strangeone101.holoitemsapi.enchantment.EnchantManager; +import com.strangeone101.holoitemsapi.enchantment.Enchantable; +import com.strangeone101.holoitemsapi.item.CustomItem; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.EnchantmentStorageMeta; +import xyz.holocons.mc.holoitemsrevamp.HoloItemsRevamp; + +import java.util.List; + +public class VerificationSealBook extends CustomItem implements Enchantable { + + private static final String name = "verification_seal"; + private static final Material material = Material.ENCHANTED_BOOK; + private static final Component displayName = Component.text("Verification Seal", NamedTextColor.WHITE); + private static final List lore = List.of( + Component.text("Seal maps so they can't be copied/duplicated", NamedTextColor.WHITE) + ); + + private final EnchantManager enchantManager; + + public VerificationSealBook(HoloItemsRevamp plugin) { + super(plugin, name, material, displayName, lore); + this.enchantManager = plugin.getEnchantManager(); + this.register(); + } + + @Override + protected Recipe getRecipe() { + final var recipe = new ShapedRecipe(getKey(), buildStack(null)); + recipe.shape( + "aaa", + "aba", + "aaa" + ); + recipe.setIngredient('a', Material.DIAMOND); + recipe.setIngredient('b', Material.WHITE_CANDLE); + return recipe; + } + + @Override + public Enchantment getEnchantment() { + return CustomEnchantment.getByKey(getKey()); + } + + @Override + public ItemStack applyEnchantment(ItemStack itemStack) { + var enchantedStack = itemStack.clone(); + var enchantedMeta = (EnchantmentStorageMeta) enchantedStack.getItemMeta(); + + if (enchantedMeta.addStoredEnchant(getEnchantment(), 1, false)) { + enchantedStack.setItemMeta(enchantedMeta); + enchantManager.removeCustomEnchantmentLore(enchantedStack); + enchantManager.applyCustomEnchantmentLore(enchantedStack); + return enchantedStack; + } else { + return null; + } + } +}