commit a488c44036ddb48fe608b59868f58802a7051550
Author: yaohunya <1763917516@qq.com>
Date: Sat Jul 12 07:44:13 2025 +0800
1.2.0
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..18fb162
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,41 @@
+
+
+ 4.0.0
+
+ com.yaohun.guaji.AuGuaJi
+ AuConsumeReward
+ 1.0-SNAPSHOT
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ public-rpg
+ https://repo.aurora-pixels.com/repository/public-rpg/
+
+
+
+
+
+ org.spigotmc
+ spigot-api
+ 1.12.2
+
+
+ me.Demon.DemonPlugin
+ DemonAPI
+ 2.2.9
+
+
+ com.yaohun.aurechargedata
+ AuRechargeData
+ 2.0.0
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/yaohun/consumereward/ConsumeReward.java b/src/main/java/com/yaohun/consumereward/ConsumeReward.java
new file mode 100644
index 0000000..dab1a53
--- /dev/null
+++ b/src/main/java/com/yaohun/consumereward/ConsumeReward.java
@@ -0,0 +1,108 @@
+package com.yaohun.consumereward;
+
+import com.yaohun.consumereward.config.Config;
+import com.yaohun.consumereward.data.PlayerData;
+import com.yaohun.consumereward.gui.RewardGui;
+import com.yaohun.consumereward.manage.PlayerManager;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class ConsumeReward extends JavaPlugin {
+
+ private static ConsumeReward instance;
+ private static PlayerManager playerManager;
+
+ @Override
+ public void onEnable() {
+ instance = this;
+ saveDefaultConfig();
+ Config.reloadConfig(this);
+ playerManager = new PlayerManager();
+ getServer().getPluginManager().registerEvents(new RewardGui(),this);
+ }
+
+
+ @Override
+ public void onDisable() {
+ super.onDisable();
+ }
+
+ @Override
+ public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
+ if(args.length == 1 && "open".equalsIgnoreCase(args[0])){
+ RewardGui.OpenGui((Player) sender);
+ return true;
+ }
+ if(!sender.isOp()){
+ RewardGui.OpenGui((Player) sender);
+ return true;
+ }
+ if(args.length == 0){
+ sender.sendMessage("");
+ sender.sendMessage("§e------- ======= §6累积消费礼包 §e======= -------");
+ sender.sendMessage("§2/"+label+" open §f- §2打开界面");
+ sender.sendMessage("§2/"+label+" reload §f- §2重载配置文件");
+ sender.sendMessage("§2/"+label+" convert §f- §c导入旧版奖励领取数据");
+ sender.sendMessage("§e------- ======= §6累积消费礼包 §e======= -------");
+ sender.sendMessage("");
+ return true;
+ }
+ if("reload".equalsIgnoreCase(args[0])){
+ Config.reloadConfig(this);
+ sender.sendMessage("[消费奖励] 配置文件已重载.");
+ return true;
+ }
+ if("convert".equalsIgnoreCase(args[0])){
+ // 转换后的 map: 玩家名 -> 参与的 key 列表
+ Map> playerToKeys = new TreeMap<>();
+ File file = new File("plugins/DemonRechargeOrConsume","config.yml");
+ FileConfiguration config = YamlConfiguration.loadConfiguration(file);
+ ConfigurationSection section = config.getConfigurationSection("ClaimRecordData");
+ if(section == null){
+ return true;
+ }
+ for (String key : section.getKeys(false)){
+ String data = section.getString(key+".recordData");
+ // 去掉开头的 , 并按 , 拆分
+ String[] names = data.replaceFirst("^,", "").split(",");
+
+ for (String name : names) {
+ if (name.isEmpty()) {
+ continue;
+ }
+ playerToKeys.computeIfAbsent(name, k -> new ArrayList<>()).add(key);
+ }
+ }
+ // 打印结果
+ int count = 0;
+ for (Map.Entry> entry : playerToKeys.entrySet()) {
+ PlayerData playerData = playerManager.getPlayerData(entry.getKey());
+ playerData.setRewardList(entry.getValue());
+ playerData.savePlayerData();
+ count++;
+ }
+ sender.sendMessage("[消费奖励] 数据已进行转换 "+count+"名");
+ return true;
+ }
+ return false;
+ }
+
+ public static ConsumeReward inst() {
+ return instance;
+ }
+
+ public static PlayerManager getPlayerManager() {
+ return playerManager;
+ }
+}
diff --git a/src/main/java/com/yaohun/consumereward/config/Config.java b/src/main/java/com/yaohun/consumereward/config/Config.java
new file mode 100644
index 0000000..bbcec16
--- /dev/null
+++ b/src/main/java/com/yaohun/consumereward/config/Config.java
@@ -0,0 +1,115 @@
+package com.yaohun.consumereward.config;
+
+import com.yaohun.consumereward.ConsumeReward;
+import com.yaohun.consumereward.data.RewardData;
+import me.Demon.DemonPlugin.DemonAPI;
+import me.Demon.DemonPlugin.data.GuiItemData;
+import me.Demon.DemonPlugin.data.LangData;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class Config {
+
+ // 存储语言配置数据
+ public static LangData langData;
+ // 存储界面物品数据的映射表
+ private static HashMap guiItemDataMap = new HashMap<>();
+ // 存储奖励设置的列表
+ private static List rewardDataList = new ArrayList<>();
+
+ public static void reloadConfig(ConsumeReward plugin) {
+ // 调用了DemonAPI中的LangData
+ // 需要在AuLangs目录中创建一个 LevelReward.yml 文件存语言配置
+ langData = DemonAPI.getLangData("ConsumeReward");
+ // 重新加载和保存插件的配置文件
+ plugin.reloadConfig();
+ plugin.saveConfig();
+ FileConfiguration config = plugin.getConfig();
+ // 加载界面物品数据和奖励设置
+ loadGuiItemData(config);
+ loadRewardSettings(config);
+ }
+
+ /**
+ * 从配置文件中加载奖励设置
+ * 此方法清除现有的奖励数据列表,并从配置文件的"RewardSettings"部分重新加载
+ * @param config 插件的配置文件
+ */
+ private static void loadRewardSettings(FileConfiguration config){
+ // 清除现有的奖励数据列表
+ rewardDataList.clear();
+ // 获取"RewardSettings"配置部分
+ ConfigurationSection section = config.getConfigurationSection("RewardSettings");
+ // 如果该部分不存在,则直接返回
+ if(section == null) {return;}
+ // 遍历"RewardSettings"部分的所有键,并创建新的RewardData对象添加到列表中
+ for (String rewardKey : section.getKeys(false)){
+ rewardDataList.add(new RewardData(rewardKey,section));
+ }
+ }
+
+ /**
+ * 从配置文件中加载界面物品数据
+ * 此方法清除现有的界面物品数据映射表,并从配置文件的"GuiItemData"部分重新加载
+ * @param configuration 插件的配置文件
+ */
+ private static void loadGuiItemData(FileConfiguration configuration){
+ // 清除现有的界面物品数据映射表
+ guiItemDataMap.clear();
+ // 获取"GuiItemData"配置部分
+ ConfigurationSection section = configuration.getConfigurationSection("GuiItemData");
+ // 如果该部分不存在,则直接返回
+ if(section == null){return;}
+ // 遍历"GuiItemData"部分的所有键,并创建新的GuiItemData对象添加到映射表中
+ for (String itemKey : section.getKeys(false)){
+ guiItemDataMap.put(itemKey,new GuiItemData(itemKey,section));
+ }
+ }
+
+ /**
+ * 根据物品键获取对应的ItemStack对象
+ * 如果指定的物品键存在于映射表中,则返回对应的ItemStack对象的克隆;否则返回错误物品
+ * @param itemKey 物品键
+ * @return 对应的ItemStack对象的克隆或错误物品
+ */
+ public static ItemStack getItemStack(String itemKey) {
+ // 检查物品键是否存在于映射表中
+ if(guiItemDataMap.containsKey(itemKey)){
+ // 返回对应的ItemStack对象的克隆
+ return guiItemDataMap.get(itemKey).getItemStack().clone();
+ }
+ // 如果物品键不存在,则返回错误物品
+ return DemonAPI.getErrItems();
+ }
+
+ /**
+ * 获取奖励数据列表
+ * @return 奖励数据列表
+ */
+ public static List getRewardDataList() {
+ return rewardDataList;
+ }
+
+ /**
+ * 根据奖励键获取对应的奖励数据
+ * 如果找到匹配的奖励键,则返回对应的奖励数据;否则返回null
+ * @param rewardKey 奖励键
+ * @return 对应的奖励数据或null
+ */
+ public static RewardData getRewardData(String rewardKey) {
+ // 遍历奖励数据列表
+ for (RewardData rewardData : rewardDataList){
+ // 如果找到匹配的奖励键,则返回对应的奖励数据
+ if(rewardData.getRewardKey().equals(rewardKey)){
+ return rewardData;
+ }
+ }
+ // 如果没有找到匹配的奖励键,则返回null
+ return null;
+ }
+}
diff --git a/src/main/java/com/yaohun/consumereward/data/PlayerData.java b/src/main/java/com/yaohun/consumereward/data/PlayerData.java
new file mode 100644
index 0000000..562d0d0
--- /dev/null
+++ b/src/main/java/com/yaohun/consumereward/data/PlayerData.java
@@ -0,0 +1,88 @@
+package com.yaohun.consumereward.data;
+
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.file.YamlConfiguration;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.bukkit.configuration.file.YamlConfiguration;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+
+public class PlayerData {
+
+ /**
+ * 玩家数据类,用于管理玩家的奖励接收情况
+ */
+ private final String playerName;
+
+ /**
+ * 存储玩家已接收的奖励列表
+ * 使用 Set 而不是 List 来提升 contains 方法的性能,因为 Set 的查找效率更高
+ */
+ private final Set rewardList;
+
+ /**
+ * 构造玩家数据对象,根据玩家名称加载其奖励接收数据
+ *
+ * @param playerName 玩家名称,用于标识和加载玩家数据
+ */
+ public PlayerData(String playerName) {
+ this.playerName = playerName;
+ // 加载玩家的奖励数据文件
+ File file = new File("plugins/AuData/ConsumeReward", playerName + ".yml");
+ YamlConfiguration config = YamlConfiguration.loadConfiguration(file);
+ List rewards = config.getStringList("RewardsReceive");
+ // 使用 LinkedHashSet 保持插入顺序,避免重复
+ this.rewardList = new LinkedHashSet<>(rewards);
+ }
+
+ /**
+ * 检查玩家是否已经接收了指定的奖励
+ *
+ * @param rewardKey 奖励的唯一键,用于标识特定的奖励
+ * @return 如果玩家已经接收了指定的奖励,则返回 true;否则返回 false
+ */
+ public boolean isReceive(String rewardKey) {
+ return rewardList.contains(rewardKey);
+ }
+
+ /**
+ * 向玩家的奖励列表中添加一个新的奖励
+ *
+ * @param rewardKey 新增奖励的唯一键,用于标识特定的奖励
+ */
+ public void addRewardReceive(String rewardKey) {
+ rewardList.add(rewardKey);
+ }
+
+ /**
+ * 设置玩家的奖励列表,替换现有的奖励列表
+ *
+ * @param rewardList 新的奖励列表,不含重复项
+ */
+ public void setRewardList(List rewardList) {
+ this.rewardList.clear();
+ // 使用 LinkedHashSet 包装列表以避免重复项,并保持插入顺序
+ this.rewardList.addAll(new LinkedHashSet<>(rewardList));
+ }
+
+ /**
+ * 保存玩家的奖励接收数据到文件
+ * 将 Set 类型的 rewardList 转换回 List 类型以保存到 YAML 文件中
+ */
+ public void savePlayerData() {
+ File file = new File("plugins/AuData/ConsumeReward", playerName + ".yml");
+ YamlConfiguration config = YamlConfiguration.loadConfiguration(file);
+ // 将 Set 转换回 List 以保存
+ config.set("RewardsReceive", new ArrayList<>(rewardList));
+ try {
+ config.save(file);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/src/main/java/com/yaohun/consumereward/data/RewardData.java b/src/main/java/com/yaohun/consumereward/data/RewardData.java
new file mode 100644
index 0000000..d8d5a8e
--- /dev/null
+++ b/src/main/java/com/yaohun/consumereward/data/RewardData.java
@@ -0,0 +1,65 @@
+package com.yaohun.consumereward.data;
+
+import org.bukkit.Bukkit;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.entity.Player;
+
+import java.util.List;
+
+public class RewardData {
+
+ private String rewardKey;
+ private int slot;
+ private int needConsume;
+ private int backpackSlot;
+ private String itemNbt;
+ private List rewardLore;
+ private List commandList;
+
+ public RewardData(String rewardKey, ConfigurationSection section){
+ this.rewardKey = rewardKey;
+ this.slot = section.getInt(rewardKey+".slot");
+ this.needConsume = section.getInt(rewardKey+".needConsume");
+ this.backpackSlot = section.getInt(rewardKey+".backpackSlot");
+ this.itemNbt = section.getString(rewardKey+".itemNbt");
+ this.rewardLore = section.getStringList(rewardKey+".rewardLore");
+ this.commandList = section.getStringList(rewardKey+".commandList");
+ }
+
+ public String getRewardKey() {
+ return rewardKey;
+ }
+ public int getSlot() {
+ return slot;
+ }
+ public int getNeedConsume() {
+ return needConsume;
+ }
+ public int getBackpackSlot() {
+ return backpackSlot;
+ }
+ public String getItemNbt() {
+ return itemNbt;
+ }
+ public List getRewardLore() {
+ return rewardLore;
+ }
+ public void carryOutReward(Player player){
+ String playerName = player.getName();
+ // 遍历所有命令并执行
+ for(String command : commandList) {
+ if (command.contains("msg:")) {
+ // 如果是消息命令,去掉前缀后发送消息
+ player.sendMessage(command.replace("msg:", "").replace("&", "§"));
+ continue;
+ }
+ // 替换命令中的玩家名称占位符%p%为真实名称
+ command = command.replace("%p%", playerName);
+ command = command.replace("%player%", playerName);
+ // 执行命令
+ Bukkit.dispatchCommand(Bukkit.getConsoleSender(),command);
+ }
+ // 记录日志
+ Bukkit.getLogger().info("[消费奖励 - 发放] " + player.getName() + " 已执行奖励命令: " + rewardKey);
+ }
+}
diff --git a/src/main/java/com/yaohun/consumereward/gui/RewardGui.java b/src/main/java/com/yaohun/consumereward/gui/RewardGui.java
new file mode 100644
index 0000000..5669151
--- /dev/null
+++ b/src/main/java/com/yaohun/consumereward/gui/RewardGui.java
@@ -0,0 +1,89 @@
+package com.yaohun.consumereward.gui;
+
+import com.yaohun.aurechargedata.api.ConsumeAPI;
+import com.yaohun.aurechargedata.util.TimeType;
+import com.yaohun.consumereward.ConsumeReward;
+import com.yaohun.consumereward.config.Config;
+import com.yaohun.consumereward.data.PlayerData;
+import com.yaohun.consumereward.data.RewardData;
+import com.yaohun.consumereward.manage.PlayerManager;
+import com.yaohun.consumereward.util.MessageUtil;
+import com.yaohun.consumereward.util.StackUtil;
+import me.Demon.DemonPlugin.DemonAPI;
+import me.Demon.DemonPlugin.data.NbtItem;
+import org.bukkit.Bukkit;
+import org.bukkit.Sound;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+public class RewardGui implements Listener {
+
+ public static void OpenGui(Player player){
+ String playerName = player.getName();
+ Inventory inv = Bukkit.createInventory(null,54, Config.langData.getMessage("invTitle"));
+ for (int i = 0;i<9;i++){ inv.setItem(i, DemonAPI.glass(DemonAPI.getRandomInt(7,1),"§r")); }
+ inv.setItem(4, StackUtil.getDataInfo(playerName));
+ PlayerManager playerManager = ConsumeReward.getPlayerManager();
+ PlayerData playerData = playerManager.getPlayerData(playerName);
+ for (RewardData rewardData : Config.getRewardDataList()){
+ inv.setItem(rewardData.getSlot(), StackUtil.getRewardGiftBox(playerData, rewardData));
+ }
+ player.openInventory(inv);
+ }
+
+ @EventHandler
+ public void onClick(InventoryClickEvent e){
+ int rawSlot = e.getRawSlot();
+ Player player = (Player) e.getWhoClicked();
+ String playerName = player.getName();
+ if(e.getView().getTitle().equalsIgnoreCase(Config.langData.getMessage("invTitle"))) {
+ e.setCancelled(true);
+ if (rawSlot >= 0 && rawSlot < e.getInventory().getSize()) {
+ ItemStack stack = e.getCurrentItem();
+ if (DemonAPI.itemIsNull(stack) || DemonAPI.itemIsLore(stack)) {
+ return;
+ }
+ NbtItem nbtItem = new NbtItem(stack);
+ if (nbtItem.hasKey("rewardKey")) {
+ String value = nbtItem.getString("rewardKey");
+ RewardData rewardData = Config.getRewardData(value);
+ if (rewardData == null) {
+ return;
+ }
+ int backpackSlot = rewardData.getBackpackSlot();
+ if (!DemonAPI.hasEmptyInventorySlots(player, backpackSlot)) {
+ MessageUtil.sendMessageKey(player, "notEnoughInventorySlots", Sound.ENTITY_VILLAGER_NO);
+ return;
+ }
+ int needConsume = rewardData.getNeedConsume();
+ int consumeValue = ConsumeAPI.getConsumeData(playerName, TimeType.ANNUAL);
+ if (needConsume > consumeValue) {
+ String message = Config.langData.getMessage("notEnoughConsume");
+ int newConsume = needConsume - consumeValue;
+ message = message.replace("{needConsume}", String.valueOf(newConsume));
+ MessageUtil.sendMessage(player, message, Sound.ENTITY_VILLAGER_NO);
+ return;
+ }
+ PlayerManager playerManager = ConsumeReward.getPlayerManager();
+ PlayerData playerData = playerManager.getPlayerData(playerName);
+ if (playerData.isReceive(value)) {
+ MessageUtil.sendMessageKey(player, "alreadyReceived", Sound.ENTITY_VILLAGER_NO);
+ return;
+ }
+ playerData.addRewardReceive(value);
+ rewardData.carryOutReward(player);
+ String message = Config.langData.getMessage("announcement");
+ message = message.replace("{name}", playerName);
+ message = message.replace("{itemName}", DemonAPI.getItemName(stack));
+ Bukkit.broadcastMessage(message);
+ MessageUtil.sendMessageKey(player, "receivedSuccessfully", Sound.ENTITY_PLAYER_LEVELUP);
+ RewardGui.OpenGui(player);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/yaohun/consumereward/manage/PlayerManager.java b/src/main/java/com/yaohun/consumereward/manage/PlayerManager.java
new file mode 100644
index 0000000..6b0972e
--- /dev/null
+++ b/src/main/java/com/yaohun/consumereward/manage/PlayerManager.java
@@ -0,0 +1,19 @@
+package com.yaohun.consumereward.manage;
+
+import com.yaohun.consumereward.data.PlayerData;
+
+import java.util.HashMap;
+
+public class PlayerManager {
+
+ private HashMap playerDataMap = new HashMap<>();
+
+ public PlayerData getPlayerData(String playerName) {
+ if(!playerDataMap.containsKey(playerName)){
+ PlayerData playerData = new PlayerData(playerName);
+ playerDataMap.put(playerName, playerData);
+ return playerData;
+ }
+ return playerDataMap.get(playerName);
+ }
+}
diff --git a/src/main/java/com/yaohun/consumereward/util/MessageUtil.java b/src/main/java/com/yaohun/consumereward/util/MessageUtil.java
new file mode 100644
index 0000000..c86c165
--- /dev/null
+++ b/src/main/java/com/yaohun/consumereward/util/MessageUtil.java
@@ -0,0 +1,71 @@
+package com.yaohun.consumereward.util;
+
+import com.yaohun.consumereward.config.Config;
+import org.bukkit.Sound;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+/**
+ * 消息工具类,用于向命令发送者发送消息
+ * 提供了向Minecraft服务器中的玩家或其他命令发送者发送消息的功能
+ */
+public class MessageUtil {
+
+ /**
+ * 向指定的命令发送者发送消息
+ * 如果发送者是玩家,使用玩家对象的sendMessage方法发送;
+ * 否则直接使用命令发送者的sendMessage方法
+ *
+ * @param sender 命令发送者对象(可以是玩家或控制台)
+ * @param message 要发送的消息内容
+ */
+ public static void sendMessage(CommandSender sender, String message) {
+ if(sender instanceof Player){
+ Player player = (Player) sender;
+ player.sendMessage(message);
+ } else {
+ sender.sendMessage(message);
+ }
+ }
+
+ /**
+ * 向指定的命令发送者发送消息并播放音效
+ * 如果发送者是玩家,则还会播放指定的音效
+ *
+ * @param sender 命令发送者,可以是玩家或控制台等
+ * @param message 要发送的消息文本
+ * @param sound 要播放的音效
+ */
+ public static void sendMessage(CommandSender sender, String message, Sound sound) {
+ // 判断发送者是否为玩家,以便播放音效
+ if(sender instanceof Player){
+ Player player = (Player) sender;
+ player.sendMessage(message);
+ player.playSound(player.getLocation(), sound, 0.5f, 1.2f);
+ } else {
+ sender.sendMessage(message);
+ }
+ }
+
+ /**
+ * 根据语言键向指定的命令发送者发送消息并播放音效
+ * 首先从配置文件中获取对应语言键的消息文本,然后发送给发送者
+ * 如果发送者是玩家,则还会播放指定的音效
+ *
+ * @param sender 命令发送者,可以是玩家或控制台等
+ * @param langKey 语言键,用于从配置文件中获取消息文本
+ * @param sound 要播放的音效
+ */
+ public static void sendMessageKey(CommandSender sender, String langKey, Sound sound) {
+ String message = Config.langData.getMessage(langKey);
+ // 判断发送者是否为玩家,以便播放音效
+ if(sender instanceof Player){
+ Player player = (Player) sender;
+ player.sendMessage(message);
+ player.playSound(player.getLocation(), sound, 0.5f, 1.2f);
+ } else {
+ sender.sendMessage(message);
+ }
+ }
+
+}
diff --git a/src/main/java/com/yaohun/consumereward/util/StackUtil.java b/src/main/java/com/yaohun/consumereward/util/StackUtil.java
new file mode 100644
index 0000000..9ef94c9
--- /dev/null
+++ b/src/main/java/com/yaohun/consumereward/util/StackUtil.java
@@ -0,0 +1,62 @@
+package com.yaohun.consumereward.util;
+
+import com.yaohun.aurechargedata.api.ConsumeAPI;
+import com.yaohun.aurechargedata.util.TimeType;
+import com.yaohun.consumereward.config.Config;
+import com.yaohun.consumereward.data.PlayerData;
+import com.yaohun.consumereward.data.RewardData;
+import me.Demon.DemonPlugin.data.NbtItem;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class StackUtil {
+
+ public static ItemStack getDataInfo(String playerName){
+ ItemStack stack = Config.getItemStack("dataInfo");
+ ItemMeta meta = stack.getItemMeta();
+ List lore = meta.getLore();
+ for (int i = 0; i < lore.size(); i++){
+ String line = lore.get(i);
+ if(line.contains("{name}")){
+ lore.set(i, line.replace("{name}", playerName));
+ continue;
+ }
+ if(line.contains("{consume}")){
+ int consumeValue = ConsumeAPI.getConsumeData(playerName, TimeType.ANNUAL);
+ lore.set(i, line.replace("{consume}", String.valueOf(consumeValue)));
+ }
+ }
+ meta.setLore(lore);
+ stack.setItemMeta(meta);
+ return stack;
+ }
+
+ public static ItemStack getRewardGiftBox(PlayerData playerData, RewardData rewardData){
+ String rewardKey = rewardData.getRewardKey();
+ ItemStack stack = Config.getItemStack("rewardGiftBox");
+ ItemMeta meta = stack.getItemMeta();
+ List newLore = new ArrayList<>();
+ for (String line : meta.getLore()){
+ if(line.contains("{stats}")){
+ if(playerData.isReceive(rewardKey)){
+ newLore.add(line.replace("{stats}", Config.langData.getMessage("statsOK")));
+ } else {
+ newLore.add(line.replace("{stats}", Config.langData.getMessage("statsNO")));
+ }
+ } else if(line.contains("{rewardLore}")){
+ newLore.addAll(rewardData.getRewardLore());
+ } else {
+ newLore.add(line);
+ }
+ }
+ meta.setLore(newLore);
+ stack.setItemMeta(meta);
+ NbtItem nbtItem = new NbtItem(stack);
+ nbtItem.setString("rewardKey", rewardKey);
+ return nbtItem.getItem();
+ }
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
new file mode 100644
index 0000000..c77969f
--- /dev/null
+++ b/src/main/resources/config.yml
@@ -0,0 +1,35 @@
+GuiItemData:
+ dataInfo:
+ Material: PAPER
+ DisplayName: "§8« §e我的数据 §8»"
+ Lore:
+ - "§a§l★§7玩家名称: §a{name}"
+ - "§a§l★§7累积消费: §b{consume}软"
+ - " "
+ - "§c§l★§7消费累积不含玩家之间交易"
+ NbtString: stex#cailiao_18
+ rewardGiftBox:
+ Material: PAPER
+ DisplayName: "§a§l累计消费§3§l{coins}§a§l礼盒"
+ Lore:
+ - "§8--------------------"
+ - "§c§l★§7领取状态: {stats}"
+ - "§8--------------------"
+ - "§9§L可获得的奖励:"
+ - "{rewardLore}"
+RewardSettings:
+ key_01:
+ slot: 10
+ needConsume: 39
+ backpackSlot: 3
+ itemNbt: cailiao_42
+ rewardLore:
+ - §7- §6属性称号 §7[§e有钱任性§7]
+ - §7- §d§l远古精灵的秘药§7§l★§f1
+ - §7- §e§l灵环精片§7§l★§f2
+ - §7- §6§l财主金币袋§7§l★§f1
+ commandList:
+ - console:dpap give %player% 有钱任性 36500
+ - console:dpotion give 远古精灵的秘药 1 %player%
+ - console:ditem give 灵环精片 2 %player%
+ - console:ditem give 财主金币袋 1 %player%
\ No newline at end of file
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
new file mode 100644
index 0000000..f2f97a3
--- /dev/null
+++ b/src/main/resources/plugin.yml
@@ -0,0 +1,9 @@
+name: AuConsumeReward
+main: com.yaohun.consumereward.ConsumeReward
+version: 1.2.0
+depend:
+ - DemonAPI
+commands:
+ consumereward:
+ aliases:
+ # - droc
\ No newline at end of file