package me.unurled.sacredrealms.sr.utils; import static me.unurled.sacredrealms.sr.utils.component.Component.comp; import java.util.List; import java.util.Random; import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Display; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.entity.TextDisplay; import org.bukkit.potion.PotionEffect; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; public class SRPlayerUtils { private static final Random RANDOM = new Random(); private SRPlayerUtils() {} public static void syncPlayerToSR(@NotNull Player p, @NotNull SRPlayer sr) { sr.setInventory(p.getInventory()); sr.setPotionEffects((List) p.getActivePotionEffects()); } public static void syncSRToPlayer(@NotNull SRPlayer sr, @NotNull Player p) { p.getInventory().setContents(sr.getInventory().getContents()); // agility (speed) // default is 100 so 0.2 double items = sr.getTotalItemAttribute(Attribute.AGILITY); double speed = sr.getAttribute(Attribute.AGILITY); float value = (float) ((speed + items) / 500.0f); value = Math.min(value, 1.0f); value = Math.max(value, 0f); AttributeInstance attribute1 = p.getAttribute(org.bukkit.attribute.Attribute.MOVEMENT_SPEED); if (attribute1 != null) attribute1.setBaseValue(value); AttributeInstance attribute2 = p.getAttribute(org.bukkit.attribute.Attribute.FLYING_SPEED); if (attribute2 != null) attribute2.setBaseValue(value); p.setFlySpeed(value); p.setWalkSpeed(value); for (PotionEffect pe : sr.getPotionEffects()) { p.addPotionEffect(pe); } // health // default is 100 so 20 double health = (sr.getAttribute(Attribute.HEALTH) + sr.getTotalItemAttribute(Attribute.HEALTH)) / 5; AttributeInstance attribute = p.getAttribute(org.bukkit.attribute.Attribute.MAX_HEALTH); if (attribute != null) attribute.setBaseValue(health); p.sendHealthUpdate(); p.updateInventory(); } public static void updateActionBar(@NotNull Player p) { PlayerManager pm = Manager.getInstance(PlayerManager.class); if (pm == null) return; SRPlayer sr = pm.getPlayer(p.getUniqueId()); if (sr == null) return; int maxHealth = (int) sr.getAttribute(Attribute.HEALTH); int health = (int) sr.getHealth(); int mana = (int) sr.getAttribute(Attribute.MANA); net.kyori.adventure.text.Component text = comp("❤ " + health + "/" + maxHealth + " ❈ " + mana); p.sendActionBar(text); } /** * author */ public static @NotNull TextDisplay spawnIndicator( @NotNull Entity eventEntity, boolean isHeal, double number) { // vector operation Vector location = eventEntity.getLocation().toVector(); Vector facingVector = eventEntity.getFacing().getDirection(); Vector spawnVector = location.add(facingVector.multiply(0.75)); // summon entity double randomX = RANDOM.nextDouble() * 0.5 - 0.25; double randomZ = RANDOM.nextDouble() * 0.5 - 0.25; spawnVector.add(new Vector(randomX, 0, randomZ)); TextDisplay indicators = eventEntity .getWorld() .spawn( spawnVector.toLocation(eventEntity.getWorld()).add(0.0, 0.5, 0.0), TextDisplay.class); String prefix = "-"; if (isHeal) prefix = "+"; indicators.text(comp(prefix + number)); indicators.setBillboard(Display.Billboard.CENTER); indicators.setShadowed(true); indicators.setTeleportDuration(2); indicatorAnimation(indicators); return indicators; } /** * author */ private static void indicatorAnimation(TextDisplay indicator) { new BukkitRunnable() { int height = 0; @Override public void run() { indicator.teleport(indicator.getLocation().add(0, 0.1, 0)); if (height == 15) { indicator.remove(); this.cancel(); } height++; } }.runTaskTimer(SR.plugin(), 0, 1); } }