diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/Component.java b/src/main/java/me/unurled/sacredrealms/sr/utils/Component.java index d7f8b13..e5503c0 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/utils/Component.java +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/Component.java @@ -4,8 +4,8 @@ import net.kyori.adventure.text.minimessage.MiniMessage; public class Component { - public static net.kyori.adventure.text.Component comp(String msg) { - MiniMessage mm = MiniMessage.miniMessage(); - return mm.deserialize(msg); - } + public static net.kyori.adventure.text.Component comp(String msg) { + MiniMessage mm = MiniMessage.miniMessage(); + return mm.deserialize(msg); + } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/Items.java b/src/main/java/me/unurled/sacredrealms/sr/utils/Items.java index c26317b..c5ae754 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/utils/Items.java +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/Items.java @@ -1,6 +1,10 @@ package me.unurled.sacredrealms.sr.utils; +import static me.unurled.sacredrealms.sr.utils.Component.comp; + +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.concurrent.atomic.AtomicReference; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.item.Item; @@ -24,17 +28,12 @@ public class Items { AtomicReference total = new AtomicReference<>(0.0); - Arrays.stream(inv.getArmorContents()).toList().forEach(item -> - total.updateAndGet( - v -> (v + getAttribute(item, - attribute)))); + Arrays.stream(inv.getArmorContents()) + .toList() + .forEach(item -> total.updateAndGet(v -> (v + getAttribute(item, attribute)))); - total.updateAndGet( - v -> (v + getAttribute(inv.getItemInMainHand(), - attribute))); - total.updateAndGet( - v -> (v + getAttribute(inv.getItemInOffHand(), - attribute))); + total.updateAndGet(v -> (v + getAttribute(inv.getItemInMainHand(), attribute))); + total.updateAndGet(v -> (v + getAttribute(inv.getItemInOffHand(), attribute))); return total.get(); } @@ -53,4 +52,68 @@ public class Items { } return 0.0; } + + /** rarity + * Description: blablabla + * blabbla + * blabla + * Attributes: + * ➤ Health: +100 + * ➤ Strength: +10 + * ➤ Mana: +10 + * Abilities: + * ➤ Ability 1, On Rightclick unleash a powerful attack + * cooldown: 10s, + * damage: 100, + * mana cost: 50 + * ➤ Ability 2, On Rightclick unleash a powerful attack + * cooldown: 10s, + * damage: 100, + * mana cost: 50 + * Enchantments: + * ➤ Enchantment 1 + * ➤ Enchantment 2 + * + * @param item the item + * @param stack the itemstack + * @return the itemstack with lore + * */ + public static ItemStack lore(ItemStack stack) { + + ItemManager im = (ItemManager) ItemManager.getInstance(ItemManager.class); + if (im == null) return stack; + if (stack == null) return stack; + if (stack.getType().equals(Material.AIR)) return stack; + PersistentDataContainer p = stack.getItemMeta().getPersistentDataContainer(); + if (!p.has(ItemManager.ID, PersistentDataType.STRING)) return stack; + Item item = im.getItem(p.get(ItemManager.ID, PersistentDataType.STRING)); + + List lore = new ArrayList<>(); + + lore.add(comp("" + item.getRarity().getName())); + lore.add(comp("" + item.getDescription())); + if (!item.getAttributes().isEmpty()) { + lore.add(comp("Attributes:")); + item.getAttributes().forEach((k, v) -> lore.add(comp(" ➤ " + k.getName() + ": " + (v < 0 ? "" : "") + + "+" + v))); + } + if (!item.getAbilities().isEmpty()) { + lore.add(comp("Abilities:")); + item.getAbilities().forEach(a -> { + lore.add(comp(" ➤ " + a.getName() + ", " + a.getDescription())); + lore.add(comp(" cooldown: " + a.getCooldown() + "s,")); + lore.add(comp(" damage: " + a.getDamage() + ",")); + lore.add(comp(" mana cost: " + a.getManaCost())); + }); + } + if (!item.getEnchantments().isEmpty()) { + lore.add(comp("Enchantments:")); + item.getEnchantments().forEach((k, v) -> lore.add(comp(" ➤ " + k.getName() + " " + v))); + } + + stack.lore(lore); + + return stack; + } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/NumberParser.java b/src/main/java/me/unurled/sacredrealms/sr/utils/NumberParser.java new file mode 100644 index 0000000..f99ddfe --- /dev/null +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/NumberParser.java @@ -0,0 +1,33 @@ +package me.unurled.sacredrealms.sr.utils; + +public class NumberParser { + public static double parse(String input) { + input = input.toLowerCase().trim(); + double multiplier = 1.0; + + if (input.endsWith("k")) { + multiplier = 1e3; + input = input.substring(0, input.length() - 1); + } else if (input.endsWith("m")) { + multiplier = 1e6; + input = input.substring(0, input.length() - 1); + } else if (input.endsWith("b")) { + multiplier = 1e9; + input = input.substring(0, input.length() - 1); + } + + return Double.parseDouble(input) * multiplier; + } + + public static String format(double number) { + if (number >= 1e9) { + return String.format("%.2fb", number / 1e9); + } else if (number >= 1e6) { + return String.format("%.2fm", number / 1e6); + } else if (number >= 1e3) { + return String.format("%.2fk", number / 1e3); + } else { + return String.format("%.2f", number); + } + } +} diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java b/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java new file mode 100644 index 0000000..e5b903a --- /dev/null +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java @@ -0,0 +1,34 @@ +package me.unurled.sacredrealms.sr.utils; + +import java.util.List; +import me.unurled.sacredrealms.sr.components.attributes.Attribute; +import me.unurled.sacredrealms.sr.components.player.SRPlayer; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; + +public class SRPlayerUtils { + public static void syncPlayerToSR(Player p, SRPlayer sr) { + sr.setInventory(p.getInventory()); + sr.setPotionEffects((List) p.getActivePotionEffects()); + } + + public static void syncSRToPlayer(SRPlayer sr, Player p) { + p.getInventory().setContents(sr.getInventory().getContents()); + + // agility (speed) + // default is 100 so 0.2 + float value = (float) (sr.getAttribute(Attribute.AGILITY) / 500.0); + p.setFlySpeed(value); + p.setWalkSpeed(value); + + for (PotionEffect pe : sr.getPotionEffects()) { + p.addPotionEffect(pe); + } + + // health + // default is 100 so 20 + p.setHealth(sr.getAttribute(Attribute.HEALTH) / 5); + p.sendHealthUpdate(); + p.updateInventory(); + } +}