1
mirror of https://github.com/carm-outsource/TimeReward.git synced 2024-09-19 11:15:52 +00:00

完成指令部分

This commit is contained in:
Carm Jos 2022-02-28 19:31:00 +08:00
parent 27fc19c7bf
commit ae0a638a70
6 changed files with 211 additions and 7 deletions

View File

@ -28,6 +28,21 @@
指令主指令为 `/TimeReward`
```text
# reload
@ 管理指令 (TimeReward.admin)
- 重载插件配置文件。
# user <玩家名>
@ 管理指令 (TimeReward.admin)
- 查看用户的在线时长信息与奖励领取情况。
# list
@ 管理指令 (TimeReward.admin)
- 列出所有奖励与条件。
# test <奖励ID>
@ 管理指令 (TimeReward.admin)
- 测试执行奖励配置的指令。
```
## 插件权限

View File

@ -3,6 +3,7 @@ package cc.carm.plugin.timereward;
import cc.carm.lib.easyplugin.EasyPlugin;
import cc.carm.lib.easyplugin.i18n.EasyPluginMessageProvider;
import cc.carm.lib.easyplugin.utils.MessageUtils;
import cc.carm.plugin.timereward.command.TimeRewardCommand;
import cc.carm.plugin.timereward.configuration.PluginConfig;
import cc.carm.plugin.timereward.database.DataManager;
import cc.carm.plugin.timereward.hooker.PAPIExpansion;
@ -59,6 +60,8 @@ public class Main extends EasyPlugin {
regListener(new UserListener());
log("注册指令...");
registerCommand("TimeReward", new TimeRewardCommand());
if (MessageUtils.hasPlaceholderAPI()) {
log("注册变量...");

View File

@ -0,0 +1,132 @@
package cc.carm.plugin.timereward.command;
import cc.carm.plugin.timereward.TimeRewardAPI;
import cc.carm.plugin.timereward.configuration.PluginMessages;
import cc.carm.plugin.timereward.data.RewardContents;
import cc.carm.plugin.timereward.data.TimeRewardUser;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class TimeRewardCommand implements CommandExecutor, TabCompleter {
private boolean help(CommandSender sender) {
PluginMessages.COMMAND_USAGE.send(sender);
return true;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String alias, String[] args) {
if (args.length < 1) return help(sender);
String aim = args[0];
if (aim.equalsIgnoreCase("reload")) {
sender.sendMessage("§7正在重载配置文件...");
try {
TimeRewardAPI.getConfigManager().reload();
sender.sendMessage("§a配置文件重载完成");
} catch (Exception e) {
sender.sendMessage("§c配置文件重载失败错误信息" + e.getMessage() + " (详见后台");
e.printStackTrace();
}
return true;
} else if (aim.equalsIgnoreCase("list")) {
PluginMessages.List.HEADER.send(sender);
for (RewardContents reward : TimeRewardAPI.getRewardManager().listRewards().values()) {
if (reward.getPermission() != null) {
PluginMessages.List.OBJECT_PERM.send(sender,
reward.getRewardID(), reward.getDisplayName(),
reward.getTime(), reward.getPermission()
);
} else {
PluginMessages.List.OBJECT.send(sender,
reward.getRewardID(), reward.getDisplayName(), reward.getTime()
);
}
}
return true;
} else if (aim.equalsIgnoreCase("test")) {
if (args.length < 2) return help(sender);
if (!(sender instanceof Player)) {
sender.sendMessage("§c您不是玩家无法使用此命令");
return true;
}
RewardContents contents = TimeRewardAPI.getRewardManager().getReward(args[1]);
if (contents == null) {
PluginMessages.NOT_EXISTS.send(sender, args[1]);
return true;
}
PluginMessages.COMMAND_LIST.send(sender, contents.getRewardID());
TimeRewardAPI.getRewardManager().executeCommand((Player) sender, contents);
return true;
} else if (aim.equalsIgnoreCase("user")) {
if (args.length < 2) return help(sender);
Player player = Bukkit.getPlayer(args[1]);
if (player == null) {
PluginMessages.NOT_ONLINE.send(sender, args[1]);
return true;
}
TimeRewardUser user = TimeRewardAPI.getUserManager().get(player);
PluginMessages.USER_INFO.send(sender,
player.getName(), user.getAllSeconds(),
user.getClaimedRewards().size(), String.join("&8, &f", user.getClaimedRewards())
);
return true;
}
return help(sender);
}
@Nullable
@Override
public List<String> onTabComplete(
@NotNull CommandSender sender, @NotNull Command command,
@NotNull String alias, @NotNull String[] args) {
List<String> allCompletes = new ArrayList<>();
// 玩家指令部分
if (sender.hasPermission("TimeReward.admin")) {
switch (args.length) {
case 1: {
allCompletes.add("reload");
allCompletes.add("user");
allCompletes.add("list");
if (sender instanceof Player) allCompletes.add("test");
break;
}
case 2: {
String aim = args[0];
if (aim.equalsIgnoreCase("test") && sender instanceof Player) {
allCompletes = new ArrayList<>(TimeRewardAPI.getRewardManager().listRewards().keySet());
} else if (aim.equalsIgnoreCase("user")) {
allCompletes = Bukkit.getOnlinePlayers().stream().map(HumanEntity::getName).collect(Collectors.toList());
}
break;
}
}
}
return allCompletes.stream()
.filter(s -> StringUtil.startsWithIgnoreCase(s, args[args.length - 1]))
.limit(10).collect(Collectors.toList());
}
}

View File

@ -6,10 +6,59 @@ import cc.carm.lib.easyplugin.configuration.language.MessagesRoot;
public class PluginMessages extends MessagesRoot {
public static final EasyMessageList NOT_ONLINE = EasyMessageList.builder()
.contents("&7玩家 &c%(player) &7并不在线。")
.params("player")
public static final EasyMessageList COMMAND_USAGE = new EasyMessageList(
"&6&l在线奖励 &f后台指令帮助",
"&8#&f reload",
"&8-&7 重载插件配置文件。",
"&8#&f user &6<玩家>",
"&8-&7 查看用户的在线时长信息与奖励领取情况。",
"&8#&f list",
"&8-&7 列出所有奖励与条件。",
"&8#&f info &6<奖励ID>",
"&8-&7 查看奖励详情。",
"&8#&f test &6<奖励ID>",
"&8-&7 测试执行奖励配置的指令。"
);
public static class List {
public static final EasyMessageList HEADER = EasyMessageList.builder()
.contents("&6&l在线奖励 &f奖励列表 &7(共%(amount)个)")
.params("amount").build();
public static final EasyMessageList OBJECT = EasyMessageList.builder()
.contents(
"&8# &f%(id) &f%(name)",
"&8- &7领取条件 &f在线&e%(time)&f秒"
).params("id", "name", "time").build();
public static final EasyMessageList OBJECT_PERM = EasyMessageList.builder()
.contents(
"&8# &f%(id) &f%(name)",
"&8- &7领取条件 &f在线&e%(time)&f秒",
"&8- &7需要权限 &f%(permission)"
).params("id", "name", "time", "permission").build();
}
public static final EasyMessageList USER_INFO = EasyMessageList.builder()
.contents(
"&f玩家 &6%(player) &f已在线&e%(time)&f秒共领取了 &e%(amount)&f 次奖励。",
"&7已领取的奖励列表如下&r%(rewards) &7。"
).params("player", "time", "amount", "rewards").build();
public static final EasyMessageList COMMAND_LIST = EasyMessageList.builder()
.contents("&f正在执行奖励 %(award) 的指令列表...")
.params("award")
.build();
public static final EasyMessageList NOT_ONLINE = EasyMessageList.builder()
.contents("&f玩家 &e%(player) &f并不在线。")
.params("player")
.build();
public static final EasyMessageList NOT_EXISTS = EasyMessageList.builder()
.contents("&f奖励 &e%(award) &f并不存在。")
.params("award")
.build();
}

View File

@ -97,11 +97,16 @@ public class RewardManager {
if (check && !reward.checkPermission(player)) return false;
user.addClaimedReward(reward.getRewardID());
executeCommand(player, reward);
return true;
}
public void executeCommand(Player player, RewardContents reward) {
Main.debugging("正在为玩家 " + player.getName() + " 执行奖励 " + reward.getRewardID() + " 的相关指令。");
List<String> finalCommands = MessageUtils.setCustomParams(
reward.getCommands(), "%(reward_name)", reward.getDisplayName()
reward.getCommands(), "%(name)", reward.getDisplayName()
);
TimeRewardAPI.executeCommands(player, finalCommands); // 执行命令
return true;
}
public boolean claimReward(Player player, RewardContents reward) {

View File

@ -20,5 +20,5 @@ commands:
permissions:
"TimeReward.admin":
description: "区域保护插件的管理员权限。"
default: op
description: "在线自动领奖的管理员权限。"
default: op