mirror of
https://github.com/carm-outsource/TimeReward.git
synced 2024-09-19 19:25:49 +00:00
完成指令部分
This commit is contained in:
parent
27fc19c7bf
commit
ae0a638a70
15
README.md
15
README.md
@ -28,6 +28,21 @@
|
||||
指令主指令为 `/TimeReward`
|
||||
|
||||
```text
|
||||
# reload
|
||||
@ 管理指令 (TimeReward.admin)
|
||||
- 重载插件配置文件。
|
||||
|
||||
# user <玩家名>
|
||||
@ 管理指令 (TimeReward.admin)
|
||||
- 查看用户的在线时长信息与奖励领取情况。
|
||||
|
||||
# list
|
||||
@ 管理指令 (TimeReward.admin)
|
||||
- 列出所有奖励与条件。
|
||||
|
||||
# test <奖励ID>
|
||||
@ 管理指令 (TimeReward.admin)
|
||||
- 测试执行奖励配置的指令。
|
||||
```
|
||||
|
||||
## 插件权限
|
||||
|
@ -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("注册变量...");
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -20,5 +20,5 @@ commands:
|
||||
permissions:
|
||||
|
||||
"TimeReward.admin":
|
||||
description: "区域保护插件的管理员权限。"
|
||||
description: "在线自动领奖的管理员权限。"
|
||||
default: op
|
Loading…
Reference in New Issue
Block a user