diff --git a/README.md b/README.md index 1e5c18d..35c361b 100644 --- a/README.md +++ b/README.md @@ -33,4 +33,6 @@ Player Expansion for MiniPlaceholders + +:[parameter]> ``` diff --git a/paper/src/main/java/io/github/miniplaceholders/expansion/player/paper/PaperProvider.java b/paper/src/main/java/io/github/miniplaceholders/expansion/player/paper/PaperProvider.java index 8861274..068172a 100644 --- a/paper/src/main/java/io/github/miniplaceholders/expansion/player/paper/PaperProvider.java +++ b/paper/src/main/java/io/github/miniplaceholders/expansion/player/paper/PaperProvider.java @@ -5,6 +5,7 @@ import io.github.miniplaceholders.expansion.player.common.resolver.DisplayNameResolver; import io.github.miniplaceholders.expansion.player.common.resolver.LocaleResolver; import io.github.miniplaceholders.expansion.player.common.resolver.NameResolver; +import io.github.miniplaceholders.expansion.player.paper.resolver.StatisticResolver; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.tag.Tag; import org.bukkit.Server; @@ -44,6 +45,7 @@ public Expansion.Builder provideBuilder() { }) .audiencePlaceholder(Player.class, "tab_footer", (player, queue, ctx) -> { return Tag.selfClosingInserting(Optional.ofNullable(player.playerListFooter()).orElse(Component.empty())); - }); + }) + .audiencePlaceholder(Player.class, "statistic", new StatisticResolver()); } } diff --git a/paper/src/main/java/io/github/miniplaceholders/expansion/player/paper/resolver/StatisticResolver.java b/paper/src/main/java/io/github/miniplaceholders/expansion/player/paper/resolver/StatisticResolver.java new file mode 100644 index 0000000..87bc5d3 --- /dev/null +++ b/paper/src/main/java/io/github/miniplaceholders/expansion/player/paper/resolver/StatisticResolver.java @@ -0,0 +1,66 @@ +package io.github.miniplaceholders.expansion.player.paper.resolver; + +import io.github.miniplaceholders.api.resolver.AudienceTagResolver; +import net.kyori.adventure.text.minimessage.Context; +import net.kyori.adventure.text.minimessage.tag.Tag; +import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue; +import org.bukkit.Material; +import org.bukkit.Statistic; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.Locale; + +public final class StatisticResolver implements AudienceTagResolver<@NotNull Player> { + @Override + public @NotNull Tag tag(@NotNull Player player, @NotNull ArgumentQueue queue, @NotNull Context ctx) { + if (!queue.hasNext()) { + return Tag.preProcessParsed("You need to provide a statistic"); + } + + Statistic statistic; + try { + statistic = Statistic.valueOf(queue.pop().value().toUpperCase(Locale.ROOT)); + } catch (IllegalArgumentException e) { + return Tag.preProcessParsed("Unknown statistic"); + } + + switch (statistic.getType()) { + case UNTYPED -> { + return Tag.preProcessParsed(String.valueOf(player.getStatistic(statistic))); + } + case ITEM, BLOCK -> { + if (!queue.hasNext()) { + return Tag.preProcessParsed("You need to provide a material"); + } + + Material material; + try { + material = Material.valueOf(queue.pop().value().toUpperCase(Locale.ROOT)); + } catch (IllegalArgumentException e) { + return Tag.preProcessParsed("Unknown material"); + } + + return Tag.preProcessParsed(String.valueOf(player.getStatistic(statistic, material))); + } + case ENTITY -> { + if (!queue.hasNext()) { + return Tag.preProcessParsed("You need to provide an entity"); + } + + EntityType entity; + try { + entity = EntityType.valueOf(queue.pop().value().toUpperCase(Locale.ROOT)); + } catch (IllegalArgumentException e) { + return Tag.preProcessParsed("Unknown entity"); + } + + return Tag.preProcessParsed(String.valueOf(player.getStatistic(statistic, entity))); + } + default -> { + return Tag.preProcessParsed("Unknown statistic type"); + } + } + } +}