diff --git a/README.md b/README.md index cee6763..13de605 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ - **[必须]** 插件本体基于 [Spigot-API](https://hub.spigotmc.org/stash/projects/SPIGOT) 、 [BukkitAPI](http://bukkit.org/) 实现。 - **[自带]** 插件功能基于 [EasyPlugin](https://github.com/CarmJos/EasyPlugin) 实现。 - **[自带]** 数据功能基于 [EasySQL](https://github.com/CarmJos/EasySQL) 实现。 - + 详细依赖列表可见 [Dependencies](https://github.com/CarmJos/timereward/network/dependencies) 。 ## 插件指令 @@ -39,6 +39,22 @@ ``` +## 插件变量 + +```text +# %TimeReward_time% +- 得到玩家总共的在线时长(秒)。 + +# %TimeReward_reward_<奖励ID>% +- 得到某个奖励配置的名称。 + +# %TimeReward_claimed_<奖励ID>% +- 得到玩家是否已经领取了某个奖励。 +- * 也可以代表玩家是否可以领取某个奖励 +- * 因为一旦可以领取就会自动领取,变为已领取状态 + +``` + ## 配置文件 ### 插件配置文件 ([config.yml](src/main/resources/config.yml)) diff --git a/src/main/java/cc/carm/plugin/timereward/Main.java b/src/main/java/cc/carm/plugin/timereward/Main.java index 2b77b76..d2c0586 100644 --- a/src/main/java/cc/carm/plugin/timereward/Main.java +++ b/src/main/java/cc/carm/plugin/timereward/Main.java @@ -2,8 +2,10 @@ 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.configuration.PluginConfig; import cc.carm.plugin.timereward.database.DataManager; +import cc.carm.plugin.timereward.hooker.PAPIExpansion; import cc.carm.plugin.timereward.listener.UserListener; import cc.carm.plugin.timereward.manager.ConfigManager; import cc.carm.plugin.timereward.manager.RewardManager; @@ -57,6 +59,13 @@ public class Main extends EasyPlugin { log("注册指令..."); + if (MessageUtils.hasPlaceholderAPI()) { + log("注册变量..."); + new PAPIExpansion(this).register(); + } else { + log("检测到未安装PlaceholderAPI,跳过变量注册。"); + } + return true; } diff --git a/src/main/java/cc/carm/plugin/timereward/hooker/PAPIExpansion.java b/src/main/java/cc/carm/plugin/timereward/hooker/PAPIExpansion.java new file mode 100644 index 0000000..7816c5d --- /dev/null +++ b/src/main/java/cc/carm/plugin/timereward/hooker/PAPIExpansion.java @@ -0,0 +1,88 @@ +package cc.carm.plugin.timereward.hooker; + +import cc.carm.plugin.timereward.TimeRewardAPI; +import cc.carm.plugin.timereward.data.RewardContents; +import cc.carm.plugin.timereward.data.TimeRewardUser; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; +import java.util.List; + +public class PAPIExpansion extends PlaceholderExpansion { + + private static final List PLACEHOLDERS = Arrays.asList( + "%TimeReward_time%", + "%TimeReward_reward_<奖励ID>%", + "%TimeReward_claimed_<奖励ID>%" + ); + + private final JavaPlugin plugin; + + public PAPIExpansion(JavaPlugin plugin) { + this.plugin = plugin; + } + + @Override + public @NotNull List getPlaceholders() { + return PLACEHOLDERS; + } + + @Override + public boolean canRegister() { + return true; + } + + @Override + public @NotNull String getAuthor() { + return plugin.getDescription().getAuthors().toString(); + } + + @Override + public @NotNull String getIdentifier() { + return plugin.getDescription().getName(); + } + + @Override + public @NotNull String getVersion() { + return plugin.getDescription().getVersion(); + } + + @Override + public String onPlaceholderRequest(Player player, @NotNull String identifier) { + if (player == null) return "加载中..."; + String[] args = identifier.split("_"); + + if (args.length < 1) { + return "Error Params"; + } + + TimeRewardUser user = TimeRewardAPI.getUserManager().get(player); + + switch (args[0].toLowerCase()) { + case "time": { + return Long.toString(user.getAllSeconds()); + } + case "reward": { + if (args.length < 2) return "请填写奖励ID"; + String rewardName = args[1]; + RewardContents contents = TimeRewardAPI.getRewardManager().getReward(rewardName); + if (contents == null) return "奖励不存在"; + return contents.getDisplayName(); + } + case "claimed": { + if (args.length < 2) return "请填写奖励ID"; + return Boolean.toString(user.isClaimed(args[1])); + } + case "version": { + return getVersion(); + } + default: { + return "参数错误"; + } + } + } + +} diff --git a/src/main/java/cc/carm/plugin/timereward/manager/RewardManager.java b/src/main/java/cc/carm/plugin/timereward/manager/RewardManager.java index 3be373d..66b673d 100644 --- a/src/main/java/cc/carm/plugin/timereward/manager/RewardManager.java +++ b/src/main/java/cc/carm/plugin/timereward/manager/RewardManager.java @@ -73,6 +73,10 @@ public class RewardManager { return new HashMap<>(getRewardsMap()); } + public RewardContents getReward(String rewardID) { + return getRewardsMap().get(rewardID); + } + protected HashMap getRewardsMap() { return PluginConfig.REWARDS.getOptional().orElse(new HashMap<>()); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b44ce7f..969f8d4 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -31,7 +31,7 @@ rewards: # 奖励的显示名称,可以是任意字符串 # 可以在commands 中使用 %(name) 来获取该奖励的名称 - # 也可以使用变量 %TimeReward_<奖励ID>_name% 来获取对应奖励的名称 + # 也可以使用变量 %TimeReward_reward_<奖励ID>% 来获取对应奖励的名称 name: "&f[初级奖励] &e总在线时长 2小时" # 该奖励自动领取需要的在线时长,单位为秒