fix: 修复 1.3.0 实机测试问题
Build / build (push) Has been cancelled
Build / Paper 1.21.11 / Java 21 (push) Has been cancelled
Build / Paper 26.1.2 / Java 25 (push) Has been cancelled
Build / Paper 26.2 / Java 25 (push) Has been cancelled

This commit is contained in:
2026-08-05 00:42:24 +08:00
parent 7816b75325
commit 292b93e842
19 changed files with 284 additions and 48 deletions
@@ -49,12 +49,17 @@ public abstract class BaseCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
return dispatch(sender, args);
}
final boolean dispatch(CommandSender sender, String[] args) {
if (!sender.hasPermission(permission)) {
sender.sendMessage(getLang().getPrefixedString("messages.no-permission",
Map.of("permission", permission)));
return true;
}
if (sender instanceof Player player) {
if (!player.hasPermission(permission)) {
player.sendMessage(getLang().getPrefixedString("messages.no-permission",
Map.of("permission", permission)));
return true;
}
return execute(player, args);
}
@@ -1,6 +1,7 @@
package cn.infstar.essentialsC.commands;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Map;
@@ -36,6 +37,30 @@ public class FeedCommand extends BaseCommand {
return true;
}
@Override
protected boolean executeConsole(CommandSender sender, String[] args) {
if (args.length != 1) {
sender.sendMessage(getLang().getPrefixedString("messages.feed-usage-console"));
return true;
}
if (!sender.hasPermission("essentialsc.command.feed.others")) {
sender.sendMessage(getLang().getPrefixedString("messages.no-permission-others"));
return true;
}
Player target = Bukkit.getPlayerExact(args[0]);
if (target == null) {
sender.sendMessage(getLang().getPrefixedString("messages.player-not-found", Map.of("player", args[0])));
return true;
}
feedPlayer(target);
sender.sendMessage(getLang().getPrefixedString("messages.feed-other", Map.of("player", target.getName())));
target.sendMessage(getLang().getPrefixedString("messages.feed-by-other",
Map.of("admin", getLang().getString("messages.console-name"))));
return true;
}
private void feedPlayer(Player player) {
player.setFoodLevel(20);
player.setSaturation(20f);
@@ -3,6 +3,7 @@ package cn.infstar.essentialsC.commands;
import org.bukkit.Bukkit;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Map;
@@ -38,6 +39,30 @@ public class HealCommand extends BaseCommand {
return true;
}
@Override
protected boolean executeConsole(CommandSender sender, String[] args) {
if (args.length != 1) {
sender.sendMessage(getLang().getPrefixedString("messages.heal-usage-console"));
return true;
}
if (!sender.hasPermission("essentialsc.command.heal.others")) {
sender.sendMessage(getLang().getPrefixedString("messages.no-permission-others"));
return true;
}
Player target = Bukkit.getPlayerExact(args[0]);
if (target == null) {
sender.sendMessage(getLang().getPrefixedString("messages.player-not-found", Map.of("player", args[0])));
return true;
}
healPlayer(target);
sender.sendMessage(getLang().getPrefixedString("messages.heal-other", Map.of("player", target.getName())));
target.sendMessage(getLang().getPrefixedString("messages.heal-by-other",
Map.of("admin", getLang().getString("messages.console-name"))));
return true;
}
private void healPlayer(Player player) {
AttributeInstance maxHealth = player.getAttribute(Attribute.MAX_HEALTH);
player.setHealth(maxHealth == null ? player.getHealth() : maxHealth.getValue());
@@ -38,7 +38,12 @@ public class HelpCommand extends BaseCommand implements TabCompleter {
@Override
protected boolean executeConsole(CommandSender sender, String[] args) {
if (args.length > 0 && args[0].equalsIgnoreCase("reload")) {
if (args.length == 0 || args[0].equalsIgnoreCase("help")) {
sendConsoleHelp(sender);
return true;
}
if (args[0].equalsIgnoreCase("reload")) {
if (!sender.hasPermission("essentialsc.command.reload")) {
sendNoPermission(sender, "essentialsc.command.reload");
return true;
@@ -51,10 +56,62 @@ public class HelpCommand extends BaseCommand implements TabCompleter {
sender.sendMessage(getLang().getPrefixedString("messages.config-reloaded"));
return true;
}
sender.sendMessage(getLang().getPrefixedString("messages.player-only"));
if (args[0].equalsIgnoreCase("version") || args[0].equalsIgnoreCase("v")) {
sender.sendMessage(getLang().getPrefixedString("messages.version",
Map.of("version", plugin.getPluginMeta().getVersion())));
sender.sendMessage(getLang().getPrefixedString("messages.paper-version",
Map.of("version", Bukkit.getVersion())));
return true;
}
String actualCommand = getActualCommand(args[0]);
BaseCommand targetCommand = CommandRegistry.getCommand(actualCommand);
if (actualCommand != null && targetCommand != null) {
return targetCommand.dispatch(sender, Arrays.copyOfRange(args, 1, args.length));
}
sender.sendMessage(getLang().getPrefixedString("messages.unknown-subcommand",
Map.of("command", args[0])));
sender.sendMessage(getLang().getPrefixedString("messages.help-usage"));
return true;
}
private void sendConsoleHelp(CommandSender sender) {
LangManager lang = getLang();
sendPrefixed(sender, lang.getString("help.title"));
sendPrefixed(sender, lang.getString("help.version",
Map.of("version", plugin.getPluginMeta().getVersion())));
sender.sendMessage("");
sendPrefixed(sender, lang.getString("help.section-other"));
if (sender.hasPermission("essentialsc.command.reload")) {
sendPrefixed(sender, lang.getString("help.commands.reload"));
}
sendPrefixed(sender, lang.getString("help.commands.version"));
if (CommandRegistry.isAvailable("seen") && sender.hasPermission("essentialsc.command.seen")) {
sendPrefixed(sender, lang.getString("help.commands.seen"));
}
if (CommandRegistry.isAvailable("heal") && sender.hasPermission("essentialsc.command.heal")) {
sendPrefixed(sender, lang.getString("help.commands.heal"));
}
if (CommandRegistry.isAvailable("feed") && sender.hasPermission("essentialsc.command.feed")) {
sendPrefixed(sender, lang.getString("help.commands.feed"));
}
if (CommandRegistry.isAvailable("skin") && sender.hasPermission("essentialsc.command.skin")) {
sendPrefixed(sender, lang.getString("help.commands.skin"));
}
if (CommandRegistry.isAvailable("tpsbar") && sender.hasPermission("essentialsc.command.tpsbar")) {
sendPrefixed(sender, lang.getString("help.commands.tpsbar"));
}
if (CommandRegistry.isAvailable("maintenance")
&& sender.hasPermission("essentialsc.command.maintenance")) {
sendPrefixed(sender, lang.getString("help.commands.maintenance"));
}
sender.sendMessage("");
sendPrefixed(sender, lang.getString("help.footer"));
}
private boolean handleCommand(CommandSender sender, Player player, String[] args) {
if (args.length > 0) {
String subCommand = args[0].toLowerCase();
@@ -246,7 +303,7 @@ public class HelpCommand extends BaseCommand implements TabCompleter {
}
private void sendPrefixed(CommandSender sender, String message) {
sender.sendMessage(message);
sender.sendMessage(getLang().getPrefix() + message);
}
private void sendPrefixedLines(CommandSender sender, String message) {
@@ -2,6 +2,7 @@ package cn.infstar.essentialsC.commands;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.text.SimpleDateFormat;
@@ -16,45 +17,56 @@ public class SeenCommand extends BaseCommand {
@Override
protected boolean execute(Player player, String[] args) {
return executeCommand(player, player, args);
}
@Override
protected boolean executeConsole(CommandSender sender, String[] args) {
return executeCommand(sender, null, args);
}
private boolean executeCommand(CommandSender sender, Player viewer, String[] args) {
if (args.length == 0) {
player.sendMessage(getLang().getPrefixedString("messages.seen-usage"));
sender.sendMessage(getLang().getPrefixedString(viewer == null
? "messages.seen-usage-console"
: "messages.seen-usage"));
return true;
}
Player onlineTarget = Bukkit.getPlayerExact(args[0]);
if (onlineTarget != null && VanishCommand.isVanished(onlineTarget)
&& !player.hasPermission(VanishCommand.SEE_PERMISSION)) {
player.sendMessage(getLang().getPrefixedString("messages.player-not-found", Map.of("player", args[0])));
&& viewer != null && !viewer.hasPermission(VanishCommand.SEE_PERMISSION)) {
sender.sendMessage(getLang().getPrefixedString("messages.player-not-found", Map.of("player", args[0])));
return true;
}
OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]);
if (!target.hasPlayedBefore() && !target.isOnline()) {
player.sendMessage(getLang().getPrefixedString("messages.player-not-found", Map.of("player", args[0])));
sender.sendMessage(getLang().getPrefixedString("messages.player-not-found", Map.of("player", args[0])));
return true;
}
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
player.sendMessage(getLang().getPrefixedComponent("messages.seen-header",
sender.sendMessage(getLang().getPrefixedComponent("messages.seen-header",
Map.of("player", String.valueOf(target.getName()))));
if (target.isOnline()) {
player.sendMessage(getLang().getComponent("messages.seen-status-online"));
sender.sendMessage(getLang().getComponent("messages.seen-status-online"));
Player onlinePlayer = target.getPlayer();
if (onlinePlayer != null) {
player.sendMessage(getLang().getComponent("messages.seen-world",
sender.sendMessage(getLang().getComponent("messages.seen-world",
Map.of("world", onlinePlayer.getWorld().getName())));
}
} else {
player.sendMessage(getLang().getComponent("messages.seen-status-offline"));
sender.sendMessage(getLang().getComponent("messages.seen-status-offline"));
long lastSeen = target.getLastSeen();
if (lastSeen > 0) {
player.sendMessage(getLang().getComponent("messages.seen-last-online",
sender.sendMessage(getLang().getComponent("messages.seen-last-online",
Map.of("time", format.format(new Date(lastSeen)))));
}
}
player.sendMessage(getLang().getComponent("messages.seen-first-joined",
sender.sendMessage(getLang().getComponent("messages.seen-first-joined",
Map.of("time", format.format(new Date(target.getFirstPlayed())))));
return true;
}
@@ -63,17 +63,37 @@ public class TpsBarCommand extends BaseCommand implements TabCompleter {
@Override
protected boolean executeConsole(CommandSender sender, String[] args) {
sender.sendMessage(getLang().getPrefixedString("messages.player-only"));
TpsBarService tpsBarService = plugin.getTpsBarManager();
if (tpsBarService == null) {
sender.sendMessage(getLang().getPrefixedString("messages.module-disabled"));
return true;
}
if (args.length != 1) {
sender.sendMessage(tpsBarService.getUsageMessage());
return true;
}
if (!sender.hasPermission("essentialsc.command.tpsbar.others")) {
sender.sendMessage(getLang().getPrefixedString("messages.no-permission",
Map.of("permission", "essentialsc.command.tpsbar.others")));
return true;
}
Player target = Bukkit.getPlayerExact(args[0]);
if (target == null) {
sender.sendMessage(tpsBarService.getPlayerNotFoundMessage(args[0]));
return true;
}
boolean enabled = tpsBarService.toggle(target);
sender.sendMessage(getLang().getPrefixedString(enabled
? "tpsbar.messages.enabled-other"
: "tpsbar.messages.disabled-other", Map.of("player", target.getName())));
return true;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
if (args.length != 1 || !(sender instanceof Player player)) {
return List.of();
}
if (!player.hasPermission("essentialsc.command.tpsbar.others")) {
if (args.length != 1 || !sender.hasPermission("essentialsc.command.tpsbar.others")) {
return List.of();
}