Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -111,6 +112,7 @@ private static Set<CustomEnchantment> buildCustomEnchantments(HoloItemsRevamp pl
new Magnet(plugin),
new Memento(plugin),
new TideRider(plugin),
new TimeLapseroni(plugin),
new Backdash(plugin));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down Expand Up @@ -572,7 +573,7 @@ public List<Component> getLore() {
}

private static Idol buildKronii(HoloItemsRevamp plguin) {
return new Idol() {
return new Idol(new TimeLapseroniItem(plguin)) {
Comment thread
SpaceNerden marked this conversation as resolved.
Outdated

@Override
public @NotNull String getSkinBase64() {
Expand Down
Original file line number Diff line number Diff line change
@@ -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<ItemStack, Material> 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);
}
}
}

Original file line number Diff line number Diff line change
@@ -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<Component> 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;
}
}
}