BukkitVariable.java

package it.fulminazzo.yagl;

import lombok.Getter;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

import java.util.function.Function;

/**
 * Represents a variable. Uses the Bukkit class {@link Player} to retrieve the correct value.
 */
class BukkitVariable {
    public static final BukkitVariable[] DEFAULT_VARIABLES = new BukkitVariable[]{
            new BukkitVariable("player_name", HumanEntity::getName),
            new BukkitVariable("player_display_name", Player::getDisplayName),
            new BukkitVariable("player_uuid", p -> p.getUniqueId().toString()),
            new BukkitVariable("players_count", p -> String.valueOf(p.getServer().getOnlinePlayers().size())),
    };
    @Getter
    private final @NotNull String name;
    private final @NotNull Function<Player, String> value;

    /**
     * Instantiates a new Bukkit variable.
     *
     * @param name  the name
     * @param valueFunction the value function
     */
    public BukkitVariable(final @NotNull String name,
                          final @NotNull Function<Player, String> valueFunction) {
        this.name = name;
        this.value = valueFunction;
    }

    /**
     * Gets the proper value from the function
     *
     * @param player the player
     * @return the value
     */
    public @NotNull String getValue(final @NotNull Player player) {
        return this.value.apply(player);
    }

}