feat: 完善 TPA 并整理插件配置
This commit is contained in:
@@ -1,11 +1,6 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import cn.infstar.essentialsC.teleport.TeleportRequestManager;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.event.ClickEvent;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@@ -15,7 +10,6 @@ import org.bukkit.entity.Player;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public class TpaCommand extends BaseCommand implements TabCompleter {
|
||||
|
||||
@@ -30,7 +24,7 @@ public class TpaCommand extends BaseCommand implements TabCompleter {
|
||||
|
||||
protected boolean sendRequest(Player player, String[] args, TeleportRequestManager.TeleportRequest.Type type) {
|
||||
if (args.length != 1) {
|
||||
player.sendMessage(getLang().getPrefixedString(type == TeleportRequestManager.TeleportRequest.Type.TPA
|
||||
player.sendMessage(getLang().getPrefixedComponent(type == TeleportRequestManager.TeleportRequest.Type.TPA
|
||||
? "tpa.messages.usage-tpa"
|
||||
: "tpa.messages.usage-tpahere"));
|
||||
return true;
|
||||
@@ -38,82 +32,73 @@ public class TpaCommand extends BaseCommand implements TabCompleter {
|
||||
|
||||
TeleportRequestManager manager = plugin.getTeleportRequestManager();
|
||||
if (manager == null) {
|
||||
player.sendMessage(getLang().getPrefixedString("messages.module-disabled"));
|
||||
player.sendMessage(getLang().getPrefixedComponent("messages.module-disabled"));
|
||||
return true;
|
||||
}
|
||||
if (manager.isIgnoringRequests(player)) {
|
||||
player.sendMessage(getLang().getPrefixedString("tpa.messages.ignoring-requests"));
|
||||
player.sendMessage(getLang().getPrefixedComponent("tpa.messages.ignoring-requests"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player target = Bukkit.getPlayerExact(args[0]);
|
||||
if (target == null || !target.isOnline() || VanishCommand.isVanished(target)) {
|
||||
player.sendMessage(getLang().getPrefixedString("messages.player-not-found", Map.of("player", args[0])));
|
||||
if (args[0].equalsIgnoreCase(player.getName())) {
|
||||
player.sendMessage(getLang().getPrefixedComponent("tpa.messages.self"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (target.getUniqueId().equals(player.getUniqueId())) {
|
||||
player.sendMessage(getLang().getPrefixedString("tpa.messages.self"));
|
||||
int remainingCooldown = manager.getRemainingSendCooldownSeconds(player);
|
||||
if (remainingCooldown > 0) {
|
||||
player.sendMessage(getLang().getPrefixedComponent("tpa.messages.send-cooldown",
|
||||
Map.of("seconds", String.valueOf(remainingCooldown))));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player target = manager.findOnlinePlayer(args[0], onlinePlayer ->
|
||||
!onlinePlayer.getUniqueId().equals(player.getUniqueId()) && !manager.isVanished(onlinePlayer)
|
||||
).orElse(null);
|
||||
if (target == null || !target.isOnline()) {
|
||||
player.sendMessage(getLang().getPrefixedComponent("messages.player-not-found", Map.of("player", args[0])));
|
||||
return true;
|
||||
}
|
||||
|
||||
TeleportRequestManager.CreateRequestResult createdRequest = manager.createRequest(player, target, type);
|
||||
if (createdRequest.status() == TeleportRequestManager.CreateRequestStatus.DUPLICATE) {
|
||||
player.sendMessage(getLang().getPrefixedString("tpa.messages.duplicate-request", Map.of("target", target.getName())));
|
||||
return true;
|
||||
}
|
||||
if (createdRequest.status() == TeleportRequestManager.CreateRequestStatus.ON_COOLDOWN) {
|
||||
player.sendMessage(getLang().getPrefixedString("tpa.messages.send-cooldown",
|
||||
player.sendMessage(getLang().getPrefixedComponent("tpa.messages.send-cooldown",
|
||||
Map.of("seconds", String.valueOf(createdRequest.cooldownSeconds()))));
|
||||
return true;
|
||||
}
|
||||
|
||||
TeleportRequestManager.TeleportRequest request = createdRequest.request();
|
||||
Map<String, String> placeholders = manager.placeholders(request);
|
||||
player.sendMessage(getLang().getPrefixedString(type == TeleportRequestManager.TeleportRequest.Type.TPA
|
||||
player.sendMessage(getLang().getPrefixedComponent(type == TeleportRequestManager.TeleportRequest.Type.TPA
|
||||
? "tpa.messages.sent-tpa"
|
||||
: "tpa.messages.sent-tpahere", placeholders));
|
||||
if (createdRequest.status() == TeleportRequestManager.CreateRequestStatus.IGNORED) {
|
||||
if (createdRequest.status() == TeleportRequestManager.CreateRequestStatus.IGNORED
|
||||
|| createdRequest.status() == TeleportRequestManager.CreateRequestStatus.DUPLICATE) {
|
||||
return true;
|
||||
}
|
||||
target.sendMessage(getLang().getPrefixedString(type == TeleportRequestManager.TeleportRequest.Type.TPA
|
||||
target.sendMessage(getLang().getPrefixedComponent(type == TeleportRequestManager.TeleportRequest.Type.TPA
|
||||
? "tpa.messages.received-tpa"
|
||||
: "tpa.messages.received-tpahere", placeholders));
|
||||
manager.playRequestReceivedSound(target);
|
||||
sendResponseHint(target, request, placeholders);
|
||||
manager.sendResponseHint(target, placeholders);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void sendResponseHint(Player target, TeleportRequestManager.TeleportRequest request, Map<String, String> placeholders) {
|
||||
String requesterName = request.requesterName();
|
||||
String acceptCommand = "/tpaccept " + requesterName;
|
||||
String denyCommand = "/tpdeny " + requesterName;
|
||||
|
||||
Component hint = LegacyComponentSerializer.legacySection()
|
||||
.deserialize(getLang().getPrefixedString("tpa.messages.response-hint", placeholders));
|
||||
Component accept = LegacyComponentSerializer.legacySection()
|
||||
.deserialize(getLang().getString("tpa.messages.accept-button"))
|
||||
.clickEvent(ClickEvent.runCommand(acceptCommand))
|
||||
.hoverEvent(HoverEvent.showText(Component.text(acceptCommand, NamedTextColor.GREEN)));
|
||||
Component deny = LegacyComponentSerializer.legacySection()
|
||||
.deserialize(getLang().getString("tpa.messages.deny-button"))
|
||||
.clickEvent(ClickEvent.runCommand(denyCommand))
|
||||
.hoverEvent(HoverEvent.showText(Component.text(denyCommand, NamedTextColor.RED)));
|
||||
|
||||
target.sendMessage(hint.append(Component.space()).append(accept).append(Component.space()).append(deny));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (args.length != 1 || !(sender instanceof Player player)) {
|
||||
return List.of();
|
||||
}
|
||||
|
||||
TeleportRequestManager manager = plugin.getTeleportRequestManager();
|
||||
if (manager == null) {
|
||||
return List.of();
|
||||
}
|
||||
String partial = args[0].toLowerCase();
|
||||
List<String> completions = new ArrayList<>();
|
||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||
if (!onlinePlayer.getUniqueId().equals(player.getUniqueId())
|
||||
&& !VanishCommand.isVanished(onlinePlayer)
|
||||
&& !manager.isVanished(onlinePlayer)
|
||||
&& onlinePlayer.getName().toLowerCase().startsWith(partial)) {
|
||||
completions.add(onlinePlayer.getName());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user