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`
|
指令主指令为 `/TimeReward`
|
||||||
|
|
||||||
```text
|
```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.EasyPlugin;
|
||||||
import cc.carm.lib.easyplugin.i18n.EasyPluginMessageProvider;
|
import cc.carm.lib.easyplugin.i18n.EasyPluginMessageProvider;
|
||||||
import cc.carm.lib.easyplugin.utils.MessageUtils;
|
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.configuration.PluginConfig;
|
||||||
import cc.carm.plugin.timereward.database.DataManager;
|
import cc.carm.plugin.timereward.database.DataManager;
|
||||||
import cc.carm.plugin.timereward.hooker.PAPIExpansion;
|
import cc.carm.plugin.timereward.hooker.PAPIExpansion;
|
||||||
@ -59,6 +60,8 @@ public class Main extends EasyPlugin {
|
|||||||
regListener(new UserListener());
|
regListener(new UserListener());
|
||||||
|
|
||||||
log("注册指令...");
|
log("注册指令...");
|
||||||
|
registerCommand("TimeReward", new TimeRewardCommand());
|
||||||
|
|
||||||
|
|
||||||
if (MessageUtils.hasPlaceholderAPI()) {
|
if (MessageUtils.hasPlaceholderAPI()) {
|
||||||
log("注册变量...");
|
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 class PluginMessages extends MessagesRoot {
|
||||||
|
|
||||||
public static final EasyMessageList NOT_ONLINE = EasyMessageList.builder()
|
public static final EasyMessageList COMMAND_USAGE = new EasyMessageList(
|
||||||
.contents("&7玩家 &c%(player) &7并不在线。")
|
"&6&l在线奖励 &f后台指令帮助",
|
||||||
.params("player")
|
"&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();
|
.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;
|
if (check && !reward.checkPermission(player)) return false;
|
||||||
|
|
||||||
user.addClaimedReward(reward.getRewardID());
|
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(
|
List<String> finalCommands = MessageUtils.setCustomParams(
|
||||||
reward.getCommands(), "%(reward_name)", reward.getDisplayName()
|
reward.getCommands(), "%(name)", reward.getDisplayName()
|
||||||
);
|
);
|
||||||
TimeRewardAPI.executeCommands(player, finalCommands); // 执行命令
|
TimeRewardAPI.executeCommands(player, finalCommands); // 执行命令
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean claimReward(Player player, RewardContents reward) {
|
public boolean claimReward(Player player, RewardContents reward) {
|
||||||
|
@ -20,5 +20,5 @@ commands:
|
|||||||
permissions:
|
permissions:
|
||||||
|
|
||||||
"TimeReward.admin":
|
"TimeReward.admin":
|
||||||
description: "区域保护插件的管理员权限。"
|
description: "在线自动领奖的管理员权限。"
|
||||||
default: op
|
default: op
|
Loading…
Reference in New Issue
Block a user