From ffc31f565b91f34a511513063f075e3fca6e2548 Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Mon, 28 Dec 2020 00:05:33 +0100 Subject: [PATCH 1/3] Use builder for flags component --- .../main/java/com/plotsquared/core/plot/Plot.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/plot/Plot.java b/Core/src/main/java/com/plotsquared/core/plot/Plot.java index 6c28ef756..c13ce5009 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/Plot.java +++ b/Core/src/main/java/com/plotsquared/core/plot/Plot.java @@ -76,6 +76,7 @@ import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.world.biome.BiomeType; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.Template; import org.slf4j.Logger; @@ -2693,11 +2694,12 @@ public class Plot { description = TranslatableCaption.of("info.plot_no_description").getComponent(player); } - Component flags = null; + Component flags; Collection> flagCollection = this.getApplicableFlags(true); if (flagCollection.isEmpty()) { flags = MINI_MESSAGE.parse(TranslatableCaption.of("info.none").getComponent(player)); } else { + TextComponent.Builder flagBuilder = Component.text(); String prefix = " "; for (final PlotFlag flag : flagCollection) { Object value; @@ -2707,14 +2709,11 @@ public class Plot { value = flag.toString(); } Component snip = MINI_MESSAGE.parse(prefix + CaptionUtility.format(player, TranslatableCaption.of("info.plot_flag_list").getComponent(player)), - Template.of("flag", flag.getName()), Template.of("value", CaptionUtility.formatRaw(player, value.toString()))); - if (flags != null) { - flags.append(snip); - } else { - flags = snip; - } + Template.of("flag", flag.getName()), Template.of("value", CaptionUtility.formatRaw(player, value.toString()))); + flagBuilder.append(snip); prefix = ", "; } + flags = flagBuilder.build(); } boolean build = this.isAdded(player.getUUID()); Component owner; From 019da4d2f403ee5a78d4b7b273bb35d1c5d5079e Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Mon, 28 Dec 2020 11:21:35 +0100 Subject: [PATCH 2/3] Expose legacy serializer for placeholders --- .../plotsquared/bukkit/BukkitPlatform.java | 8 +++ .../com/plotsquared/core/PlotPlatform.java | 3 + .../placeholders/PlaceholderRegistry.java | 59 ++++++++++++------- 3 files changed, 49 insertions(+), 21 deletions(-) diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java index 9df20ce99..59ca048fd 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java @@ -119,6 +119,8 @@ import com.plotsquared.core.uuid.offline.OfflineModeUUIDService; import com.sk89q.worldedit.WorldEdit; import io.papermc.lib.PaperLib; import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.Chunk; @@ -1107,4 +1109,10 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl } } + @Nonnull + @Override + public String toLegacyPlatformString(Component component) { + return LegacyComponentSerializer.legacyAmpersand().serialize(component); + } + } diff --git a/Core/src/main/java/com/plotsquared/core/PlotPlatform.java b/Core/src/main/java/com/plotsquared/core/PlotPlatform.java index 0c68beb4a..4aa66f5cf 100644 --- a/Core/src/main/java/com/plotsquared/core/PlotPlatform.java +++ b/Core/src/main/java/com/plotsquared/core/PlotPlatform.java @@ -48,6 +48,7 @@ import com.plotsquared.core.util.SetupUtils; import com.plotsquared.core.util.WorldUtil; import com.plotsquared.core.util.placeholders.PlaceholderRegistry; import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.Component; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -307,4 +308,6 @@ public interface PlotPlatform

extends LocaleHolder { return injector().getInstance(PlaceholderRegistry.class); } + @Nonnull String toLegacyPlatformString(Component component); + } 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 e187560c4..a90dbb045 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 @@ -29,7 +29,9 @@ import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import com.google.inject.Singleton; +import com.plotsquared.core.PlotSquared; import com.plotsquared.core.configuration.Settings; +import com.plotsquared.core.configuration.caption.LocaleHolder; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -37,6 +39,8 @@ import com.plotsquared.core.plot.flag.GlobalFlagContainer; import com.plotsquared.core.plot.flag.PlotFlag; import com.plotsquared.core.util.EventDispatcher; import com.plotsquared.core.util.PlayerManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -80,74 +84,75 @@ public final class PlaceholderRegistry { this.createPlaceholder("has_plot", player -> player.getPlotCount() > 0 ? "true" : "false"); this.createPlaceholder("allowed_plot_count", (player) -> { if (player.getAllowedPlots() >= Integer.MAX_VALUE) { // Beautifies cases with '*' permission - return String.valueOf(TranslatableCaption.of("info.infinite")); + return legacyComponent(TranslatableCaption.of("info.infinite"), player); } return Integer.toString(player.getAllowedPlots()); }); this.createPlaceholder("plot_count", player -> Integer.toString(player.getPlotCount())); this.createPlaceholder("currentplot_alias", (player, plot) -> { - if (plot.getAlias() == null) { - return String.valueOf(TranslatableCaption.of("info.none")); + if (plot.getAlias().isEmpty()) { + return legacyComponent(TranslatableCaption.of("info.none"), player); } return plot.getAlias(); }); this.createPlaceholder("currentplot_owner", (player, plot) -> { final UUID plotOwner = plot.getOwnerAbs(); if (plotOwner == null) { - return String.valueOf(TranslatableCaption.of("generic.generic_unowned")); + return legacyComponent(TranslatableCaption.of("generic.generic_unowned"), player); } try { return PlayerManager.getName(plotOwner, false); } catch (final Exception ignored) { } - return String.valueOf(TranslatableCaption.of("info.unknown")); + return legacyComponent(TranslatableCaption.of("info.unknown"), player); }); this.createPlaceholder("currentplot_members", (player, plot) -> { - if (plot.getMembers() == null && plot.getTrusted() == null) { - return String.valueOf(TranslatableCaption.of("info.none")); + if (plot.getMembers().isEmpty() && plot.getTrusted().isEmpty()) { + return legacyComponent(TranslatableCaption.of("info.none"), player); } return String.valueOf(plot.getMembers().size() + plot.getTrusted().size()); }); this.createPlaceholder("currentplot_members_added", (player, plot) -> { - if (plot.getMembers() == null) { - return String.valueOf(TranslatableCaption.of("info.none")); + if (plot.getMembers() .isEmpty()) { + return legacyComponent(TranslatableCaption.of("info.none"), player); } return String.valueOf(plot.getMembers().size()); }); this.createPlaceholder("currentplot_members_trusted", (player, plot) -> { - if (plot.getTrusted() == null) { - return String.valueOf(TranslatableCaption.of("info.none")); + if (plot.getTrusted().isEmpty()) { + return legacyComponent(TranslatableCaption.of("info.none"), player); } return String.valueOf(plot.getTrusted().size()); }); this.createPlaceholder("currentplot_members_denied", (player, plot) -> { - if (plot.getDenied() == null) { - return String.valueOf(TranslatableCaption.of("info.none")); + if (plot.getDenied().isEmpty()) { + return legacyComponent(TranslatableCaption.of("info.none"), player); } return String.valueOf(plot.getDenied().size()); }); this.createPlaceholder("currentplot_members_trusted_list", (player, plot) -> { - if (plot.getTrusted() == null) { - return String.valueOf(TranslatableCaption.of("info.none")); + if (plot.getTrusted().isEmpty()) { + return legacyComponent(TranslatableCaption.of("info.none"), player); } - return String.valueOf(PlayerManager.getPlayerList(plot.getTrusted(), player)); + return PlotSquared.platform().toLegacyPlatformString( + PlayerManager.getPlayerList(plot.getTrusted(), player)); }); this.createPlaceholder("currentplot_members_added_list", (player, plot) -> { - if (plot.getMembers() == null) { - return String.valueOf(TranslatableCaption.of("info.none")); + if (plot.getMembers().isEmpty()) { + return legacyComponent(TranslatableCaption.of("info.none"), player); } return String.valueOf(PlayerManager.getPlayerList(plot.getMembers(), player)); }); this.createPlaceholder("currentplot_members_denied_list", (player, plot) -> { - if (plot.getDenied() == null) { - return String.valueOf(TranslatableCaption.of("info.none")); + if (plot.getDenied().isEmpty()) { + return legacyComponent(TranslatableCaption.of("info.none"), player); } return String.valueOf(PlayerManager.getPlayerList(plot.getDenied(), player)); }); this.createPlaceholder("currentplot_creationdate", (player, plot) -> { if (plot.getTimestamp() == 0) { - return String.valueOf(TranslatableCaption.of("info.unknown")); + return legacyComponent(TranslatableCaption.of("info.unknown"), player); } long creationDate = plot.getTimestamp(); SimpleDateFormat sdf = new SimpleDateFormat(Settings.Timeformat.DATE_FORMAT); @@ -258,6 +263,18 @@ public final class PlaceholderRegistry { return Collections.unmodifiableCollection(this.placeholders.values()); } + /** + * Converts a {@link Component} into a legacy-formatted string. + * + * @param caption the caption key. + * @param localeHolder the locale holder to get the component for + * @return a legacy-formatted string. + */ + private static String legacyComponent(TranslatableCaption caption, LocaleHolder localeHolder) { + Component component = MiniMessage.get().parse(caption.getComponent(localeHolder)); + return PlotSquared.platform().toLegacyPlatformString(component); + } + /** * Event called when a new {@link Placeholder} has been added From ce23c153ee93e0ea1d049df30b8ace4178b81fee Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Mon, 28 Dec 2020 12:15:34 +0100 Subject: [PATCH 3/3] Fix added_list and denied_list placeholders --- .../core/util/placeholders/PlaceholderRegistry.java | 6 ++++-- 1 file changed, 4 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 a90dbb045..cc2a87c2d 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 @@ -142,13 +142,15 @@ public final class PlaceholderRegistry { if (plot.getMembers().isEmpty()) { return legacyComponent(TranslatableCaption.of("info.none"), player); } - return String.valueOf(PlayerManager.getPlayerList(plot.getMembers(), player)); + return PlotSquared.platform().toLegacyPlatformString( + PlayerManager.getPlayerList(plot.getMembers(), player)); }); this.createPlaceholder("currentplot_members_denied_list", (player, plot) -> { if (plot.getDenied().isEmpty()) { return legacyComponent(TranslatableCaption.of("info.none"), player); } - return String.valueOf(PlayerManager.getPlayerList(plot.getDenied(), player)); + return PlotSquared.platform().toLegacyPlatformString( + PlayerManager.getPlayerList(plot.getDenied(), player)); }); this.createPlaceholder("currentplot_creationdate", (player, plot) -> { if (plot.getTimestamp() == 0) {