From c5713c9b058d6653b29f45521657556372f1ba33 Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Sun, 24 Aug 2025 15:06:29 +0100 Subject: [PATCH] feat: add a placeholder to provide the absolute plot's x/y --- .../placeholders/PlaceholderRegistry.java | 21 ++++++++++++++++++- .../placeholders/PlotSpecificPlaceholder.java | 16 +++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/util/placeholders/PlaceholderRegistry.java b/Core/src/main/java/com/plotsquared/core/util/placeholders/PlaceholderRegistry.java index b6a3fbd93..e21b4cf63 100644 --- a/Core/src/main/java/com/plotsquared/core/util/placeholders/PlaceholderRegistry.java +++ b/Core/src/main/java/com/plotsquared/core/util/placeholders/PlaceholderRegistry.java @@ -204,6 +204,9 @@ public final class PlaceholderRegistry { this.createPlaceholder("currentplot_x", (player, plot) -> Integer.toString(plot.getId().getX())); this.createPlaceholder("currentplot_y", (player, plot) -> Integer.toString(plot.getId().getY())); this.createPlaceholder("currentplot_xy", (player, plot) -> plot.getId().toString()); + this.createPlaceholder("currentplot_abs_x", (player, plot) -> Integer.toString(plot.getId().getX()), true); + this.createPlaceholder("currentplot_abs_y", (player, plot) -> Integer.toString(plot.getId().getY()), true); + this.createPlaceholder("currentplot_abs_xy", (player, plot) -> plot.getId().toString(), true); this.createPlaceholder("currentplot_rating", (player, plot) -> { if (Double.isNaN(plot.getAverageRating())) { return legacyComponent(TranslatableCaption.of("placeholder.nan"), player); @@ -253,7 +256,23 @@ public final class PlaceholderRegistry { final @NonNull String key, final @NonNull BiFunction, Plot, String> placeholderFunction ) { - this.registerPlaceholder(new PlotSpecificPlaceholder(key) { + this.createPlaceholder(key, placeholderFunction, false); + } + + /** + * Create a functional placeholder + * + * @param key Placeholder key + * @param placeholderFunction Placeholder generator. Cannot return null + * @param requireAbsolute If the plot given to the placeholder should be the absolute (not base) plot + * @since TODO + */ + public void createPlaceholder( + final @NonNull String key, + final @NonNull BiFunction, Plot, String> placeholderFunction, + final boolean requireAbsolute + ) { + this.registerPlaceholder(new PlotSpecificPlaceholder(key, requireAbsolute) { @Override public @NonNull String getValue(final @NonNull PlotPlayer player, final @NonNull Plot plot) { return placeholderFunction.apply(player, plot); diff --git a/Core/src/main/java/com/plotsquared/core/util/placeholders/PlotSpecificPlaceholder.java b/Core/src/main/java/com/plotsquared/core/util/placeholders/PlotSpecificPlaceholder.java index d9218cdd3..1a8e4b8a5 100644 --- a/Core/src/main/java/com/plotsquared/core/util/placeholders/PlotSpecificPlaceholder.java +++ b/Core/src/main/java/com/plotsquared/core/util/placeholders/PlotSpecificPlaceholder.java @@ -27,14 +27,28 @@ import org.checkerframework.checker.nullness.qual.NonNull; */ public abstract class PlotSpecificPlaceholder extends Placeholder { + private final boolean requireAbsolute; + public PlotSpecificPlaceholder(final @NonNull String key) { + this(key, false); + } + + /** + * Create a functional placeholder + * + * @param key Placeholder key + * @param requireAbsolute If the plot given to the placeholder should be the absolute (not base) plot + * @since TODO + */ + public PlotSpecificPlaceholder(final @NonNull String key, final boolean requireAbsolute) { super(key); + this.requireAbsolute = requireAbsolute; } @Override public @NonNull final String getValue(final @NonNull PlotPlayer player) { - final Plot plot = player.getCurrentPlot(); + final Plot plot = requireAbsolute ? player.getLocation().getPlotAbs() : player.getCurrentPlot(); if (plot == null) { return ""; }