mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-11-02 18:33:42 +01:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			migrate-en
			...
			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