Newer
Older
ChallengeSystem / ChallengeUtils / src / main / java / de / fanta / challengeutils / ComponentUtilImpl.java
package de.fanta.challengeutils;

import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TranslatableComponent;
import net.kyori.adventure.title.Title;
import net.kyori.adventure.util.Ticks;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import javax.annotation.Nullable;

public interface ComponentUtilImpl {
    public Component getPrefix();

    default void sendMessage(CommandSender sender, Component component) {
        Component message = getPrefix().append(component);
        sender.sendMessage(message);
    }

    default void sendNormalMessage(CommandSender sender, String string) {
        sendMessage(sender, Component.text(string).color(Color.GREEN));
    }

    default void sendWarningMessage(CommandSender sender, String string) {
        sendMessage(sender, Component.text(string).color(Color.ORANGE));
    }

    default void sendErrorMessage(CommandSender sender, String string) {
        sendMessage(sender, Component.text(string).color(Color.RED));
    }

    default void sendDebugMessage(CommandSender sender, String string) {
        if (sender != null) {
            if (sender.hasPermission("fanta.debug")) {
                sendMessage(sender, Component.text(string).color(Color.PINK));
            }
        }
    }

    default void sendBrodCastMessage(Component component) {
        for (Player player : Bukkit.getOnlinePlayers()) {
            sendMessage(player, component);
        }
    }

    default void sendTitleToAll(Component headline, Component text, int in, int time, int out, boolean pling) {
        for (Player p : Bukkit.getOnlinePlayers()) {
            sendTitleToPlayer(p, headline, text, in, time, out, pling);
        }
    }

    default void sendTitleToAll(Component headline, Component text, boolean pling) {
        sendTitleToAll(headline, text, 10, 60, 10, pling);
    }

    default void sendTitleToAll(Component headline, Component text) {
        sendTitleToAll(headline, text, 10, 60, 10, true);
    }

    default void sendTitleToPlayer(Player player, @Nullable Component headline, @Nullable Component text, int in, int time, int out, boolean pling) {
        Component headLine = headline != null ? headline.color(Color.BLUE) : Component.empty();
        Component textComponent = text != null ? text : Component.empty();

        Title title = Title.title(headLine, textComponent, Title.Times.times(Ticks.duration(in), Ticks.duration(time), Ticks.duration(out)));
        player.showTitle(title);
        if (pling) {
            player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F);
        }
    }

    default Component getTrasnlateItemComponent(Material material) {
        TranslatableComponent component = Component.translatable(material.translationKey());
        if (material.name().toLowerCase().contains("music_disc") || material.name().toLowerCase().contains("banner_pattern")) {
            component = component.append(Component.text(" ").append(Component.translatable(material.translationKey() + ".desc")));
        }

        if (material == Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE) {
            component = component.append(Component.text(" ").append(Component.translatable("upgrade.minecraft.netherite_upgrade")));
        } else if (material.name().endsWith("_SMITHING_TEMPLATE")) {
            String key = material.getItemTranslationKey();
            key = key.replace("item.minecraft.", "").replace("_armor_trim_smithing_template", "");
            component = component.append(Component.text(" ").append(Component.translatable("trim_pattern.minecraft." + key)));
        }

        return component;
    }
}