diff --git a/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantManager.java b/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantManager.java index 35f32e5b..e0441ce5 100644 --- a/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantManager.java +++ b/src/main/java/com/strangeone101/holoitemsapi/enchantment/EnchantManager.java @@ -9,6 +9,7 @@ import xyz.holocons.mc.holoitemsrevamp.enchantment.Magnet; import xyz.holocons.mc.holoitemsrevamp.enchantment.Memento; import xyz.holocons.mc.holoitemsrevamp.enchantment.TideRider; +import xyz.holocons.mc.holoitemsrevamp.enchantment.TimeLapseroni; import xyz.holocons.mc.holoitemsrevamp.integration.Integrations; import java.lang.reflect.Field; @@ -111,6 +112,7 @@ private static Set buildCustomEnchantments(HoloItemsRevamp pl new Magnet(plugin), new Memento(plugin), new TideRider(plugin), + new TimeLapseroni(plugin), new Backdash(plugin)); } } 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 9914efa9..96f7bf62 100644 --- a/src/main/java/xyz/holocons/mc/holoitemsrevamp/collection/CollectionManager.java +++ b/src/main/java/xyz/holocons/mc/holoitemsrevamp/collection/CollectionManager.java @@ -19,6 +19,7 @@ import xyz.holocons.mc.holoitemsrevamp.item.MagnetBook; import xyz.holocons.mc.holoitemsrevamp.item.MementoItem; import xyz.holocons.mc.holoitemsrevamp.item.TideRiderItem; +import xyz.holocons.mc.holoitemsrevamp.item.TimeLapseroniItem; public class CollectionManager { @@ -571,8 +572,8 @@ public List getLore() { }; } - private static Idol buildKronii(HoloItemsRevamp plguin) { - return new Idol() { + private static Idol buildKronii(HoloItemsRevamp plugin) { + return new Idol(new TimeLapseroniItem(plugin)) { @Override public @NotNull String getSkinBase64() { diff --git a/src/main/java/xyz/holocons/mc/holoitemsrevamp/enchantment/TimeLapseroni.java b/src/main/java/xyz/holocons/mc/holoitemsrevamp/enchantment/TimeLapseroni.java new file mode 100644 index 00000000..a378929e --- /dev/null +++ b/src/main/java/xyz/holocons/mc/holoitemsrevamp/enchantment/TimeLapseroni.java @@ -0,0 +1,111 @@ +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.Sound; +import org.bukkit.World; +import org.bukkit.block.Container; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import xyz.holocons.mc.holoitemsrevamp.HoloItemsRevamp; + + +import java.util.Map; + +public class TimeLapseroni extends CustomEnchantment implements EnchantmentAbility { + + private final HoloItemsRevamp plugin; + + public TimeLapseroni(HoloItemsRevamp plugin) { + super(plugin, "time_lapseroni"); + this.plugin = plugin; + } + + @Override + public int getMaxLevel() { + return 1; + } + + @Override + public boolean conflictsWith(@NotNull Enchantment other) { + return false; + } + + @Override + public boolean canEnchantItem(@NotNull ItemStack item) { + return item.getType() == Material.CLOCK; + } + + @Override + public @NotNull Component displayName(int level) { + return Component.text("Time Lapseroni", NamedTextColor.GOLD) + .decoration(TextDecoration.ITALIC, false); + } + + @Override + public int getCostMultiplier() { + return Integer.MAX_VALUE; + } + + @Override + public void onPlayerInteract(PlayerInteractEvent event, ItemStack itemStack) { + + final var clickedBlock = event.getClickedBlock(); + + // If the clicked block is null, return + if (clickedBlock == null){ + return; + } + + // If not right-clicked or a container, return + final var blockState = clickedBlock.getState(); + if(!event.getAction().isRightClick() || !(blockState instanceof Container)){ + return; + } + + Container container = (Container) blockState; + + Map metals = Map.of( + new ItemStack(Material.COPPER_INGOT), Material.RAW_COPPER, + new ItemStack(Material.IRON_INGOT), Material.RAW_IRON, + new ItemStack(Material.GOLD_INGOT), Material.RAW_GOLD, + new ItemStack(Material.NETHERITE_SCRAP), Material.ANCIENT_DEBRIS, + new ItemStack(Material.IRON_BLOCK), Material.RAW_IRON_BLOCK, + new ItemStack(Material.GOLD_BLOCK), Material.RAW_GOLD_BLOCK, + new ItemStack(Material.COPPER_BLOCK), Material.RAW_COPPER_BLOCK + ); + + + // Iterate over the container and if an item exists and its type is one of the above, replace it. + boolean consumeItem = false; + for (ItemStack item : container.getInventory()) { + if (item == null) { + continue; + } + for (ItemStack metal : metals.keySet()) { + if (item.isSimilar(metal)) { + item.setType(metals.get(metal)); + consumeItem = true; + } + } + + } + + // Deletes item if it was used. + if(consumeItem){ + final Player player = event.getPlayer(); + final World world = player.getWorld(); + + world.playSound(player.getLocation(), Sound.BLOCK_BELL_RESONATE, 0.1f, 0.1f ); + event.getItem().setAmount(0); + } + } +} + diff --git a/src/main/java/xyz/holocons/mc/holoitemsrevamp/item/TimeLapseroniItem.java b/src/main/java/xyz/holocons/mc/holoitemsrevamp/item/TimeLapseroniItem.java new file mode 100644 index 00000000..8909f26f --- /dev/null +++ b/src/main/java/xyz/holocons/mc/holoitemsrevamp/item/TimeLapseroniItem.java @@ -0,0 +1,70 @@ +package xyz.holocons.mc.holoitemsrevamp.item; + +import com.strangeone101.holoitemsapi.enchantment.EnchantManager; +import com.strangeone101.holoitemsapi.item.CustomItem; +import com.strangeone101.holoitemsapi.enchantment.Enchantable; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +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.jetbrains.annotations.NotNull; +import xyz.holocons.mc.holoitemsrevamp.HoloItemsRevamp; + +import java.util.List; + +public class TimeLapseroniItem extends CustomItem implements Enchantable { + + private final static String name = "time_lapseroni"; + private final static Material material = Material.CLOCK; + private final static Component displayName = Component.text("Time Lapseroni", NamedTextColor.GOLD); + private final static List lore = List.of( + Component.text("Unsmelt Ingots") + ); + + private final EnchantManager enchantManager; + + public TimeLapseroniItem(HoloItemsRevamp plugin) { + super(plugin, name, material, displayName, lore); + this.enchantManager = plugin.getEnchantManager(); + this.setStackable(false); + this.register(); + } + + @Override + protected Recipe getRecipe() { + final var recipe = new ShapedRecipe(getKey(), buildStack(null)); + recipe.shape( + "ABA", + "BCB", + "ABA" + ); + recipe.setIngredient('A', Material.CLOCK); + recipe.setIngredient('B', Material.COPPER_BLOCK); + recipe.setIngredient('C', Material.BLAST_FURNACE); + return recipe; + } + + @Override + public @NotNull Enchantment getEnchantment() { + return Enchantment.getByKey(getKey()); + } + + @Override + public ItemStack applyEnchantment(ItemStack itemStack) { + var enchantedStack = itemStack.clone(); + var enchantedMeta = enchantedStack.hasItemMeta() ? enchantedStack.getItemMeta() : Bukkit.getItemFactory().getItemMeta(enchantedStack.getType()); + + if (enchantedMeta.addEnchant(getEnchantment(), 1, false)) { + enchantedStack.setItemMeta(enchantedMeta); + enchantManager.removeCustomEnchantmentLore(enchantedStack); + enchantManager.applyCustomEnchantmentLore(enchantedStack); + return enchantedStack; + } else { + return null; + } + } +}