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.Util.CDTimeAPI; 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; import java.util.UUID; /** * 奖励界面类,负责处理奖励界面的展示和点击事件 */ public class RewardGui implements Listener { /** * 打开奖励界面的方法 * * @param player 打开界面的玩家 */ 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")); } // 获取玩家管理器和玩家数据 PlayerManager playerManager = ConsumeReward.getPlayerManager(); PlayerData playerData = playerManager.getPlayerData(playerName); // 设置玩家数据展示位置 inv.setItem(4, StackUtil.getDataInfo(playerData)); if(playerData.getRewardList().size() >= 16){ inv.setItem(22, Config.getItemStack("resetStack")); } else { // 根据配置文件设置奖励展示位置 for (RewardData rewardData : Config.getRewardDataList()) { inv.setItem(rewardData.getSlot(), StackUtil.getRewardGiftBox(playerData, rewardData)); } inv.setItem(40, Config.getItemStack("resetStackinAdvance")); } // 打开界面 player.openInventory(inv); } /** * 处理界面点击事件的方法 * * @param e 界面点击事件 */ @EventHandler public void onClick(InventoryClickEvent e){ // 获取点击的原始槽位和玩家信息 int rawSlot = e.getRawSlot(); Player player = (Player) e.getWhoClicked(); UUID uuid = player.getUniqueId(); 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; } if(rawSlot == 40){ player.closeInventory(); if(!CDTimeAPI.isCD(uuid,"reset_confirm")){ CDTimeAPI.setPlayerCD(uuid,"reset_confirm", 1000 * 5); MessageUtil.sendMessageKey(player,"resetConfirm", Sound.ENTITY_BLAZE_DEATH); return; } PlayerManager playerManager = ConsumeReward.getPlayerManager(); PlayerData playerData = playerManager.getPlayerData(playerName); if(playerData.getRewardList().size() < 8){ MessageUtil.sendMessageKey(player,"minimumRequirements", Sound.ENTITY_VILLAGER_NO); return; } playerData.carryOutRound(); return; } // 读取物品的NBT数据 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; } PlayerManager playerManager = ConsumeReward.getPlayerManager(); PlayerData playerData = playerManager.getPlayerData(playerName); // 检查玩家是否有足够的消费值 int needConsume = rewardData.getNeedConsume(); int recordingConsume = playerData.getRecordConsume(); int consumeValue = ConsumeAPI.getConsumeData(playerName, TimeType.ANNUAL) - recordingConsume; 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; } // 检查玩家是否已经领取过奖励 if (playerData.isReceive(value)) { MessageUtil.sendMessageKey(player, "alreadyReceived", Sound.ENTITY_VILLAGER_NO); return; } // 关闭界面,更新玩家数据,发放奖励 player.closeInventory(); playerData.addRewardReceive(value); playerData.savePlayerData(); rewardData.carryOutReward(player); // 广播奖励信息 String message = Config.langData.getMessage("announcement"); message = message.replace("{name}", playerName); message = message.replace("{itemName}", DemonAPI.getItemName(stack)); Bukkit.broadcastMessage(message); // 发送奖励成功领取信息 String msg = Config.langData.getMessage("receivedSuccessfully"); MessageUtil.sendMessage(player, msg.replace("{itemName}", DemonAPI.getItemName(stack)), Sound.ENTITY_PLAYER_LEVELUP); } } } } }