mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-26 15:13:45 +01:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			renovate/f
			...
			fix/player
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 5b060be682 | ||
|   | 622434871d | ||
|   | 04f38287ce | ||
|   | 42c5f38788 | 
| @@ -19,6 +19,7 @@ | ||||
| package com.plotsquared.core.command; | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.Settings; | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.database.DBFunc; | ||||
| @@ -101,9 +102,14 @@ public class Add extends Command { | ||||
|                                 Permission.PERMISSION_ADMIN_COMMAND_TRUST))) { | ||||
|                             player.sendMessage( | ||||
|                                     TranslatableCaption.of("errors.invalid_player"), | ||||
|                                     TagResolver.resolver("value", Tag.inserting( | ||||
|                                             PlayerManager.resolveName(uuid).toComponent(player) | ||||
|                                     )) | ||||
|                                     PlotSquared | ||||
|                                             .platform() | ||||
|                                             .playerManager() | ||||
|                                             .getUsernameCaption(uuid) | ||||
|                                             .thenApply(caption -> TagResolver.resolver( | ||||
|                                                     "value", | ||||
|                                                     Tag.inserting(caption.toComponent(player)) | ||||
|                                             )) | ||||
|                             ); | ||||
|                             iterator.remove(); | ||||
|                             continue; | ||||
| @@ -111,9 +117,11 @@ public class Add extends Command { | ||||
|                         if (plot.isOwner(uuid)) { | ||||
|                             player.sendMessage( | ||||
|                                     TranslatableCaption.of("member.already_added"), | ||||
|                                     TagResolver.resolver("player", Tag.inserting( | ||||
|                                             PlayerManager.resolveName(uuid).toComponent(player) | ||||
|                                     )) | ||||
|                                     PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                             .thenApply(caption -> TagResolver.resolver( | ||||
|                                                     "player", | ||||
|                                                     Tag.inserting(caption.toComponent(player)) | ||||
|                                             )) | ||||
|                             ); | ||||
|                             iterator.remove(); | ||||
|                             continue; | ||||
| @@ -121,9 +129,11 @@ public class Add extends Command { | ||||
|                         if (plot.getMembers().contains(uuid)) { | ||||
|                             player.sendMessage( | ||||
|                                     TranslatableCaption.of("member.already_added"), | ||||
|                                     TagResolver.resolver("player", Tag.inserting( | ||||
|                                             PlayerManager.resolveName(uuid).toComponent(player) | ||||
|                                     )) | ||||
|                                     PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                             .thenApply(caption -> TagResolver.resolver( | ||||
|                                                     "player", | ||||
|                                                     Tag.inserting(caption.toComponent(player)) | ||||
|                                             )) | ||||
|                             ); | ||||
|                             iterator.remove(); | ||||
|                             continue; | ||||
|   | ||||
| @@ -25,6 +25,7 @@ import com.plotsquared.core.player.PlotPlayer; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.minimessage.MiniMessage; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| /** | ||||
|  * CommandCategory. | ||||
| @@ -82,7 +83,7 @@ public enum CommandCategory implements Caption { | ||||
|     // TODO this method shouldn't be invoked | ||||
|     @Deprecated | ||||
|     @Override | ||||
|     public String toString() { | ||||
|     public @NotNull String toString() { | ||||
|         return this.caption.getComponent(LocaleHolder.console()); | ||||
|     } | ||||
|  | ||||
| @@ -108,4 +109,5 @@ public enum CommandCategory implements Caption { | ||||
|         return !MainCommand.getInstance().getCommands(this, player).isEmpty(); | ||||
|     } | ||||
|  | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -117,10 +117,11 @@ public class Deny extends SubCommand { | ||||
|                     } else if (plot.getDenied().contains(uuid)) { | ||||
|                         player.sendMessage( | ||||
|                                 TranslatableCaption.of("member.already_added"), | ||||
|                                 TagResolver.resolver( | ||||
|                                 PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                         .thenApply(caption -> TagResolver.resolver( | ||||
|                                         "player", | ||||
|                                         Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player)) | ||||
|                                 ) | ||||
|                                         Tag.inserting(caption.toComponent(player)) | ||||
|                                 )) | ||||
|                         ); | ||||
|                         return; | ||||
|                     } else { | ||||
|   | ||||
| @@ -31,7 +31,6 @@ import com.plotsquared.core.player.PlayerMetaDataKeys; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.util.EventDispatcher; | ||||
| import com.plotsquared.core.util.PlayerManager; | ||||
| import com.plotsquared.core.util.TabCompletions; | ||||
| import com.plotsquared.core.util.task.TaskManager; | ||||
| import net.kyori.adventure.text.Component; | ||||
| @@ -136,10 +135,11 @@ public class Owner extends SetCommand { | ||||
|             if (plot.isOwner(uuid)) { | ||||
|                 player.sendMessage( | ||||
|                         TranslatableCaption.of("member.already_owner"), | ||||
|                         TagResolver.resolver( | ||||
|                         PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                 .thenApply(caption -> TagResolver.resolver( | ||||
|                                 "player", | ||||
|                                 Tag.inserting(PlayerManager.resolveName(uuid, false).toComponent(player)) | ||||
|                         ) | ||||
|                                 Tag.inserting(caption.toComponent(player)) | ||||
|                         )) | ||||
|                 ); | ||||
|                 return; | ||||
|             } | ||||
| @@ -147,10 +147,11 @@ public class Owner extends SetCommand { | ||||
|                 if (other == null) { | ||||
|                     player.sendMessage( | ||||
|                             TranslatableCaption.of("errors.invalid_player_offline"), | ||||
|                             TagResolver.resolver( | ||||
|                             PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                     .thenApply(caption -> TagResolver.resolver( | ||||
|                                     "player", | ||||
|                                     Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player)) | ||||
|                             ) | ||||
|                                     Tag.inserting(caption.toComponent(player)) | ||||
|                             )) | ||||
|                     ); | ||||
|                     return; | ||||
|                 } | ||||
|   | ||||
| @@ -19,6 +19,7 @@ | ||||
| package com.plotsquared.core.command; | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.Settings; | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.database.DBFunc; | ||||
| @@ -103,10 +104,11 @@ public class Trust extends Command { | ||||
|                             player.hasPermission(Permission.PERMISSION_TRUST_EVERYONE) || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_TRUST))) { | ||||
|                         player.sendMessage( | ||||
|                                 TranslatableCaption.of("errors.invalid_player"), | ||||
|                                 TagResolver.resolver( | ||||
|                                 PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                         .thenApply(caption -> TagResolver.resolver( | ||||
|                                         "value", | ||||
|                                         Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player)) | ||||
|                                 ) | ||||
|                                         Tag.inserting(caption.toComponent(player)) | ||||
|                                 )) | ||||
|                         ); | ||||
|                         iterator.remove(); | ||||
|                         continue; | ||||
| @@ -114,10 +116,11 @@ public class Trust extends Command { | ||||
|                     if (currentPlot.isOwner(uuid)) { | ||||
|                         player.sendMessage( | ||||
|                                 TranslatableCaption.of("member.already_added"), | ||||
|                                 TagResolver.resolver( | ||||
|                                         "value", | ||||
|                                         Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player)) | ||||
|                                 ) | ||||
|                                 PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                         .thenApply(caption -> TagResolver.resolver( | ||||
|                                         "player", | ||||
|                                         Tag.inserting(caption.toComponent(player)) | ||||
|                                 )) | ||||
|                         ); | ||||
|                         iterator.remove(); | ||||
|                         continue; | ||||
| @@ -125,10 +128,11 @@ public class Trust extends Command { | ||||
|                     if (currentPlot.getTrusted().contains(uuid)) { | ||||
|                         player.sendMessage( | ||||
|                                 TranslatableCaption.of("member.already_added"), | ||||
|                                 TagResolver.resolver( | ||||
|                                         "value", | ||||
|                                         Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player)) | ||||
|                                 ) | ||||
|                                 PlotSquared.platform().playerManager().getUsernameCaption(uuid) | ||||
|                                         .thenApply(caption -> TagResolver.resolver( | ||||
|                                         "player", | ||||
|                                         Tag.inserting(caption.toComponent(player)) | ||||
|                                 )) | ||||
|                         ); | ||||
|                         iterator.remove(); | ||||
|                         continue; | ||||
|   | ||||
| @@ -44,4 +44,6 @@ public interface Caption { | ||||
|      */ | ||||
|     @NonNull Component toComponent(@NonNull LocaleHolder localeHolder); | ||||
|  | ||||
|     @NonNull String toString(); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -51,4 +51,9 @@ public final class StaticCaption implements Caption { | ||||
|         return MiniMessage.miniMessage().deserialize(this.value); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public @NonNull String toString() { | ||||
|         return "StaticCaption(" + value + ")"; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -25,6 +25,7 @@ import net.kyori.adventure.text.minimessage.MiniMessage; | ||||
| import net.kyori.adventure.text.minimessage.tag.Tag; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| import java.util.Locale; | ||||
| import java.util.regex.Pattern; | ||||
| @@ -132,4 +133,9 @@ public final class TranslatableCaption implements NamespacedCaption { | ||||
|         return Objects.hashCode(this.getNamespace(), this.getKey()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public @NotNull String toString() { | ||||
|         return "TranslatableCaption(" + getNamespace() + ":" + getKey() + ")"; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -55,7 +55,6 @@ import com.plotsquared.core.plot.flag.implementations.TitlesFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.WeatherFlag; | ||||
| import com.plotsquared.core.plot.flag.types.TimedFlag; | ||||
| import com.plotsquared.core.util.EventDispatcher; | ||||
| import com.plotsquared.core.util.PlayerManager; | ||||
| import com.plotsquared.core.util.task.TaskManager; | ||||
| import com.plotsquared.core.util.task.TaskTime; | ||||
| import com.sk89q.worldedit.world.gamemode.GameMode; | ||||
| @@ -63,7 +62,6 @@ import com.sk89q.worldedit.world.gamemode.GameModes; | ||||
| import com.sk89q.worldedit.world.item.ItemType; | ||||
| import com.sk89q.worldedit.world.item.ItemTypes; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.ComponentLike; | ||||
| import net.kyori.adventure.text.minimessage.MiniMessage; | ||||
| import net.kyori.adventure.text.minimessage.tag.Tag; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
| @@ -77,6 +75,7 @@ import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Optional; | ||||
| import java.util.UUID; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
|  | ||||
| public class PlotListener { | ||||
|  | ||||
| @@ -321,22 +320,27 @@ public class PlotListener { | ||||
|                         } | ||||
|                         if ((lastPlot != null) && plot.getId().equals(lastPlot.getId()) && plot.hasOwner()) { | ||||
|                             final UUID plotOwner = plot.getOwnerAbs(); | ||||
|                             ComponentLike owner = PlayerManager.resolveName(plotOwner, true).toComponent(player); | ||||
|                             Caption header = fromFlag ? StaticCaption.of(title) : TranslatableCaption.of("titles" + | ||||
|                                     ".title_entered_plot"); | ||||
|                             Caption subHeader = fromFlag ? StaticCaption.of(subtitle) : TranslatableCaption.of("titles" + | ||||
|                                     ".title_entered_plot_sub"); | ||||
|                             TagResolver resolver = TagResolver.builder() | ||||
|                                     .tag("plot", Tag.inserting(Component.text(lastPlot.getId().toString()))) | ||||
|                                     .tag("world", Tag.inserting(Component.text(player.getLocation().getWorldName()))) | ||||
|                                     .tag("owner", Tag.inserting(owner)) | ||||
|                                     .tag("alias", Tag.inserting(Component.text(plot.getAlias()))) | ||||
|                                     .build(); | ||||
|                             if (Settings.Titles.TITLES_AS_ACTIONBAR) { | ||||
|                                 player.sendActionBar(header, resolver); | ||||
|                             } else { | ||||
|                                 player.sendTitle(header, subHeader, resolver); | ||||
|                             } | ||||
|  | ||||
|                             CompletableFuture<TagResolver> future = PlotSquared.platform().playerManager() | ||||
|                                     .getUsernameCaption(plotOwner).thenApply(caption -> TagResolver.builder() | ||||
|                                             .tag("owner", Tag.inserting(caption.toComponent(player))) | ||||
|                                             .tag("plot", Tag.inserting(Component.text(lastPlot.getId().toString()))) | ||||
|                                             .tag("world", Tag.inserting(Component.text(player.getLocation().getWorldName()))) | ||||
|                                             .tag("alias", Tag.inserting(Component.text(plot.getAlias()))) | ||||
|                                             .build() | ||||
|                                     ); | ||||
|  | ||||
|                             future.whenComplete((tagResolver, throwable) -> { | ||||
|                                 if (Settings.Titles.TITLES_AS_ACTIONBAR) { | ||||
|                                     player.sendActionBar(header, tagResolver); | ||||
|                                 } else { | ||||
|                                     player.sendTitle(header, subHeader, tagResolver); | ||||
|                                 } | ||||
|                             }); | ||||
|                         } | ||||
|                     }, TaskTime.seconds(1L)); | ||||
|                 } | ||||
|   | ||||
| @@ -80,6 +80,7 @@ import java.util.Map; | ||||
| import java.util.Queue; | ||||
| import java.util.Set; | ||||
| import java.util.UUID; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
| import java.util.concurrent.ConcurrentHashMap; | ||||
| import java.util.concurrent.atomic.AtomicInteger; | ||||
|  | ||||
| @@ -953,6 +954,54 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Sends a message to the command caller, when the future is resolved | ||||
|      * | ||||
|      * @param caption          Caption to send | ||||
|      * @param asyncReplacement Async variable replacement | ||||
|      * @return A Future to be resolved, after the message was sent | ||||
|      * @since TODO | ||||
|      */ | ||||
|     public final CompletableFuture<Void> sendMessage( | ||||
|             @NonNull Caption caption, | ||||
|             CompletableFuture<@NonNull TagResolver> asyncReplacement | ||||
|     ) { | ||||
|         return sendMessage(caption, new CompletableFuture[]{asyncReplacement}); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Sends a message to the command caller, when all futures are resolved | ||||
|      * | ||||
|      * @param caption           Caption to send | ||||
|      * @param asyncReplacements Async variable replacements | ||||
|      * @param replacements      Sync variable replacements | ||||
|      * @return A Future to be resolved, after the message was sent | ||||
|      * @since TODO | ||||
|      */ | ||||
|     public final CompletableFuture<Void> sendMessage( | ||||
|             @NonNull Caption caption, | ||||
|             CompletableFuture<@NonNull TagResolver>[] asyncReplacements, | ||||
|             @NonNull TagResolver... replacements | ||||
|     ) { | ||||
|         return CompletableFuture.allOf(asyncReplacements).whenComplete((unused, throwable) -> { | ||||
|             Set<TagResolver> resolvers = new HashSet<>(Arrays.asList(replacements)); | ||||
|             if (throwable != null) { | ||||
|                 sendMessage( | ||||
|                         TranslatableCaption.of("errors.error"), | ||||
|                         TagResolver.resolver("value", Tag.inserting( | ||||
|                                 Component.text("Failed to resolve asynchronous caption replacements") | ||||
|                         )) | ||||
|                 ); | ||||
|                 LOGGER.error("Failed to resolve asynchronous tagresolver(s) for " + caption, throwable); | ||||
|             } else { | ||||
|                 for (final CompletableFuture<TagResolver> asyncReplacement : asyncReplacements) { | ||||
|                     resolvers.add(asyncReplacement.join()); | ||||
|                 } | ||||
|             } | ||||
|             sendMessage(caption, resolvers.toArray(TagResolver[]::new)); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     // Redefine from PermissionHolder as it's required from CommandCaller | ||||
|     @Override | ||||
|     public boolean hasPermission(@NonNull String permission) { | ||||
|   | ||||
| @@ -38,7 +38,6 @@ import com.plotsquared.core.location.Location; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.flag.PlotFlag; | ||||
| import com.plotsquared.core.queue.QueueCoordinator; | ||||
| import com.plotsquared.core.util.PlayerManager; | ||||
| import com.plotsquared.core.util.task.TaskManager; | ||||
| import com.plotsquared.core.util.task.TaskTime; | ||||
| import com.sk89q.worldedit.function.pattern.Pattern; | ||||
| @@ -59,6 +58,7 @@ import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| import java.util.HashSet; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
| import java.util.Set; | ||||
| import java.util.UUID; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
| @@ -383,13 +383,17 @@ public final class PlotModificationManager { | ||||
|         } | ||||
|         if (createSign) { | ||||
|             queue.setCompleteTask(() -> TaskManager.runTaskAsync(() -> { | ||||
|                 for (Plot current : plots) { | ||||
|                     current.getPlotModificationManager().setSign(PlayerManager.resolveName(current.getOwnerAbs()).getComponent( | ||||
|                             LocaleHolder.console())); | ||||
|                 } | ||||
|                 if (whenDone != null) { | ||||
|                     TaskManager.runTask(whenDone); | ||||
|                 } | ||||
|                 List<CompletableFuture<Void>> tasks = plots.stream().map(current -> PlotSquared.platform().playerManager() | ||||
|                                 .getUsernameCaption(current.getOwnerAbs()) | ||||
|                                 .thenAccept(caption -> current | ||||
|                                         .getPlotModificationManager() | ||||
|                                         .setSign(caption.getComponent(LocaleHolder.console())))) | ||||
|                         .toList(); | ||||
|                 CompletableFuture.allOf(tasks.toArray(CompletableFuture[]::new)).whenComplete((unused, throwable) -> { | ||||
|                     if (whenDone != null) { | ||||
|                         TaskManager.runTask(whenDone); | ||||
|                     } | ||||
|                 }); | ||||
|             })); | ||||
|         } else if (whenDone != null) { | ||||
|             queue.setCompleteTask(whenDone); | ||||
|   | ||||
| @@ -28,6 +28,7 @@ import com.plotsquared.core.database.DBFunc; | ||||
| import com.plotsquared.core.player.ConsolePlayer; | ||||
| import com.plotsquared.core.player.OfflinePlotPlayer; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.uuid.UUIDMapping; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.ComponentLike; | ||||
| @@ -37,6 +38,7 @@ import net.kyori.adventure.text.minimessage.tag.Tag; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.checkerframework.checker.nullness.qual.Nullable; | ||||
| import org.jetbrains.annotations.Contract; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| @@ -48,6 +50,7 @@ import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
| import java.util.UUID; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| import java.util.function.BiConsumer; | ||||
|  | ||||
| @@ -169,7 +172,9 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> { | ||||
|      * @return A caption containing either the name, {@code None}, {@code Everyone} or {@code Unknown} | ||||
|      * @see #resolveName(UUID, boolean) | ||||
|      * @since 6.4.0 | ||||
|      * @deprecated Don't unnecessarily block threads and utilize playerMap - see {@link #getUsernameCaption(UUID)} | ||||
|      */ | ||||
|     @Deprecated(since = "TODO") | ||||
|     public static @NonNull Caption resolveName(final @Nullable UUID owner) { | ||||
|         return resolveName(owner, true); | ||||
|     } | ||||
| @@ -181,7 +186,9 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> { | ||||
|      * @param blocking If the operation should block the current thread for {@link Settings.UUID#BLOCKING_TIMEOUT} milliseconds | ||||
|      * @return A caption containing either the name, {@code None}, {@code Everyone} or {@code Unknown} | ||||
|      * @since 6.4.0 | ||||
|      * @deprecated Don't unnecessarily block threads and utilize playerMap - see {@link #getUsernameCaption(UUID)} | ||||
|      */ | ||||
|     @Deprecated(since = "TODO") | ||||
|     public static @NonNull Caption resolveName(final @Nullable UUID owner, final boolean blocking) { | ||||
|         if (owner == null) { | ||||
|             return TranslatableCaption.of("info.none"); | ||||
| @@ -211,6 +218,50 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> { | ||||
|         return StaticCaption.of(name); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Resolves a UUID to a formatted {@link Caption} representing the player behind the UUID. | ||||
|      * Returns a {@link CompletableFuture} instead of a plain {@link UUID} as this method may query the | ||||
|      * {@link com.plotsquared.core.uuid.UUIDPipeline ImpromptuUUIDPipeline}. | ||||
|      * <br> | ||||
|      * Special Cases: | ||||
|      * <ul> | ||||
|      *     <li>{@code null}: Resolves to a {@link TranslatableCaption} with the key {@code info.none}</li> | ||||
|      *     <li>{@link DBFunc#EVERYONE}: Resolves to a {@link TranslatableCaption} with the key {@code info.everyone}</li> | ||||
|      *     <li>{@link DBFunc#SERVER}: Resolves to a {@link TranslatableCaption} with the key {@code info.server}</li> | ||||
|      * </ul> | ||||
|      * <br> | ||||
|      * Otherwise, if the UUID is a valid UUID and not reserved by PlotSquared itself, this method first attempts to query the | ||||
|      * online players ({@link #getPlayerIfExists(UUID)}) for the specific UUID. | ||||
|      * If no online player was found for that UUID, the {@link com.plotsquared.core.uuid.UUIDPipeline ImpromptuUUIDPipeline} is | ||||
|      * queried to retrieve the known username | ||||
|      * | ||||
|      * @param uuid The UUID of the player (for example provided by {@link Plot#getOwner()} | ||||
|      * @return A CompletableFuture resolving to a Caption representing the players name of the uuid | ||||
|      * @since TODO | ||||
|      */ | ||||
|     @Contract("_->!null") | ||||
|     public @NonNull CompletableFuture<Caption> getUsernameCaption(@Nullable UUID uuid) { | ||||
|         if (uuid == null) { | ||||
|             return CompletableFuture.completedFuture(TranslatableCaption.of("info.none")); | ||||
|         } | ||||
|         if (uuid.equals(DBFunc.EVERYONE)) { | ||||
|             return CompletableFuture.completedFuture(TranslatableCaption.of("info.everyone")); | ||||
|         } | ||||
|         if (uuid.equals(DBFunc.SERVER)) { | ||||
|             return CompletableFuture.completedFuture(TranslatableCaption.of("info.server")); | ||||
|         } | ||||
|         P player = getPlayerIfExists(uuid); | ||||
|         if (player != null) { | ||||
|             return CompletableFuture.completedFuture(StaticCaption.of(player.getName())); | ||||
|         } | ||||
|         return PlotSquared.get().getImpromptuUUIDPipeline().getNames(Collections.singleton(uuid)).thenApply(mapping -> { | ||||
|             if (mapping.isEmpty()) { | ||||
|                 return TranslatableCaption.of("info.unknown"); | ||||
|             } | ||||
|             return StaticCaption.of(mapping.get(0).username()); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Remove a player from the player map | ||||
|      * | ||||
|   | ||||
| @@ -47,6 +47,7 @@ import java.util.Locale; | ||||
| import java.util.Map; | ||||
| import java.util.TimeZone; | ||||
| import java.util.UUID; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| import java.util.function.BiFunction; | ||||
|  | ||||
| /** | ||||
| @@ -109,9 +110,9 @@ public final class PlaceholderRegistry { | ||||
|             if (plotOwner == null) { | ||||
|                 return legacyComponent(TranslatableCaption.of("generic.generic_unowned"), player); | ||||
|             } | ||||
|  | ||||
|             try { | ||||
|                 return PlayerManager.resolveName(plotOwner, false).getComponent(player); | ||||
|                 return PlotSquared.platform().playerManager().getUsernameCaption(plotOwner) | ||||
|                         .get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS).getComponent(player); | ||||
|             } catch (final Exception ignored) { | ||||
|             } | ||||
|             return legacyComponent(TranslatableCaption.of("info.unknown"), player); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user