diff --git a/README.md b/README.md index 19cecc3..ffa5273 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,11 @@ - 绑定命令 `/aucard open` 打开魂卡背包 - 初步已实现功能的安装和实装 -## v1.1.6 - 2025/07/20 +## v1.1.8 - 2025/07/20 - 取消`Item-NBT-API`的依赖 - 击杀检测依赖更换为 `MythicMobs` -- 已支持繁体 \ No newline at end of file +- 已支持繁体 +- 掉落进行下调 + +## v1.2.0 - 2025/07/23 +- 完善 `数据绑定` 逻辑 \ No newline at end of file diff --git a/src/main/java/com/yaohun/cardbackpack/AuCardBackpack.java b/src/main/java/com/yaohun/cardbackpack/AuCardBackpack.java index 945a61b..97ffb86 100644 --- a/src/main/java/com/yaohun/cardbackpack/AuCardBackpack.java +++ b/src/main/java/com/yaohun/cardbackpack/AuCardBackpack.java @@ -1,7 +1,9 @@ package com.yaohun.cardbackpack; import com.yaohun.cardbackpack.config.Config; +import com.yaohun.cardbackpack.data.PlayerData; import com.yaohun.cardbackpack.gui.CardGui; +import com.yaohun.cardbackpack.gui.CardGui_Others; import com.yaohun.cardbackpack.gui.ConfirmGui; import com.yaohun.cardbackpack.listener.KillMobsListener; import com.yaohun.cardbackpack.listener.PlayerListener; @@ -29,6 +31,7 @@ public class AuCardBackpack extends JavaPlugin { getServer().getPluginManager().registerEvents(new ConfirmGui(), this); getServer().getPluginManager().registerEvents(new PlayerListener(), this); getServer().getPluginManager().registerEvents(new KillMobsListener(), this); + getServer().getPluginManager().registerEvents(new CardGui_Others(), this); } @Override @@ -49,6 +52,7 @@ public class AuCardBackpack extends JavaPlugin { sender.sendMessage(""); sender.sendMessage("§e------- ======= §6魂卡背包 §e======= -------"); sender.sendMessage("§2/"+Command+" open §f- §2打开背包"); + sender.sendMessage("§2/"+Command+" open §e[玩家] §f- §2打开玩家背包"); sender.sendMessage("§2/"+Command+" reload §f- §2重载配置文件"); sender.sendMessage("§e------- ======= §6魂卡背包 §e======= -------"); sender.sendMessage(""); @@ -59,6 +63,15 @@ public class AuCardBackpack extends JavaPlugin { sender.sendMessage("§f[§c魂卡§f] §a配置文件已重载."); return true; } + if("open".equalsIgnoreCase(args[0])){ + if(args.length == 1){ + sender.sendMessage("[魂卡] 缺少目标玩家参数."); + return true; + } + String othersName = args[1]; + CardGui_Others.openGui((Player) sender, othersName); + return true; + } return false; } diff --git a/src/main/java/com/yaohun/cardbackpack/gui/CardGui_Others.java b/src/main/java/com/yaohun/cardbackpack/gui/CardGui_Others.java new file mode 100644 index 0000000..9cc45e5 --- /dev/null +++ b/src/main/java/com/yaohun/cardbackpack/gui/CardGui_Others.java @@ -0,0 +1,106 @@ +package com.yaohun.cardbackpack.gui; + +import com.yaohun.cardbackpack.AuCardBackpack; +import com.yaohun.cardbackpack.data.CardData; +import com.yaohun.cardbackpack.data.PlayerData; +import com.yaohun.cardbackpack.manage.DataManager; +import com.yaohun.cardbackpack.util.StackUtil; +import me.Demon.DemonPlugin.DemonAPI; +import me.Demon.DemonPlugin.data.NbtItem; +import org.bukkit.Bukkit; +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 org.bukkit.inventory.meta.ItemMeta; + +import java.util.HashMap; + +public class CardGui_Others implements Listener { + + private static String invTitle = "正在设置其他玩家的魂卡背包: "; + + + public static void openGui(Player player, String othersName){ + Inventory inv = Bukkit.createInventory(null,27,invTitle+othersName); + DataManager dataManager = AuCardBackpack.getDataManager(); + PlayerData playerData = dataManager.getPlayerData(othersName); + inv.setItem(0, DemonAPI.glass(11,"§r")); + inv.setItem(8, DemonAPI.glass(11,"§r")); + for (int i = 9; i < 27;i++){ + inv.setItem(i,DemonAPI.glass(15,"§r")); + } + inv.setItem(21, DemonAPI.glass(15,"§r")); + inv.setItem(22,DemonAPI.glass(0,"§7[§6魂卡背包§7]")); + inv.setItem(23, DemonAPI.glass(15,"§r")); + for (int i : new int[]{18,19,20,24,25,26}) { + inv.setItem(i,DemonAPI.glass(0,"§7[§6魂卡背包§7]")); + } + inv.setItem(1, StackUtil.iconHide("§f十年魂卡槽")); + inv.setItem(2,StackUtil.iconHide("§e百年魂卡槽")); + inv.setItem(3,StackUtil.iconHide("§d千年魂卡槽")); + inv.setItem(4,StackUtil.iconHide("§7万年魂卡槽")); + inv.setItem(5,StackUtil.iconHide("§c异变魂卡槽")); + inv.setItem(6,StackUtil.iconHide("§c十万年魂卡槽")); + inv.setItem(7,StackUtil.iconHide("§r")); + // 设置已穿戴的魂卡 + HashMap stackHashMap = playerData.itemStackHashMap; + for (Integer slot : stackHashMap.keySet()) { + if (stackHashMap.get(slot) != null) { + ItemStack stack = stackHashMap.get(slot).clone(); + if (!DemonAPI.itemIsNull(stack) && !DemonAPI.itemIsLore(stack)) { + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(meta.getDisplayName() + " §c§l[点击取出]"); + stack.setItemMeta(meta); + inv.setItem(slot, stack); + } + } + } + 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().contains(invTitle)){ + if(rawSlot >= 0 && rawSlot < 27) { + // 获取点击的物品 + ItemStack click = e.getCurrentItem(); + // 判断点击的物品是否是卡牌槽 + if (rawSlot == 1 || rawSlot == 2 || rawSlot == 3 || rawSlot == 4 || rawSlot == 5 || rawSlot == 6 || rawSlot == 7) { + e.setCancelled(true); + if (DemonAPI.itemIsNull(click)) { + return; + } + DataManager dataManager = AuCardBackpack.getDataManager(); + PlayerData playerData = dataManager.getPlayerData(playerName); + // 判断放入物品是否是魂卡 + ItemStack cursor = e.getCursor(); + if(DemonAPI.itemIsNull(cursor)){ + return; + } + NbtItem nbtItem = new NbtItem(cursor); + if(!nbtItem.hasKey("hunka")){ + player.sendMessage("[魂卡] 尝试放入物品不含有hunka的Nbt."); + return; + } + String hunkaKey = nbtItem.getString("hunka"); + CardData cardData = AuCardBackpack.getDataManager().getCardData(hunkaKey); + if(cardData == null){ + return; + } + e.getInventory().setItem(rawSlot,cursor); + int slot = cardData.getCardSlot(); + playerData.itemStackHashMap.put(slot,cursor); + playerData.SavePlayerData(); + player.sendMessage("[魂卡] 魂卡设置成功."); + } + } + } + } +} diff --git a/src/main/java/com/yaohun/cardbackpack/gui/ConfirmGui.java b/src/main/java/com/yaohun/cardbackpack/gui/ConfirmGui.java index db16e56..9b9c791 100644 --- a/src/main/java/com/yaohun/cardbackpack/gui/ConfirmGui.java +++ b/src/main/java/com/yaohun/cardbackpack/gui/ConfirmGui.java @@ -83,6 +83,7 @@ public class ConfirmGui implements Listener { PlayerData playerData = AuCardBackpack.getDataManager().getPlayerData(playerName); ItemStack stack = inventory.getItem(1); playerData.itemStackHashMap.put(slot,stack); + playerData.SavePlayerData(); inventory.setItem(1,new ItemStack(Material.AIR)); CardGui.OpenGui(player); String message = Config.langData.getMessage("successfullyInhaled"); diff --git a/src/main/java/com/yaohun/cardbackpack/listener/KillMobsListener.java b/src/main/java/com/yaohun/cardbackpack/listener/KillMobsListener.java index 509d16a..b9d7a9e 100644 --- a/src/main/java/com/yaohun/cardbackpack/listener/KillMobsListener.java +++ b/src/main/java/com/yaohun/cardbackpack/listener/KillMobsListener.java @@ -45,14 +45,20 @@ public class KillMobsListener implements Listener { if(entity.getCustomName() == null){ return; } - String customName = entity.getCustomName(); + String customName = entity.getCustomName().replaceAll("§[a-zA-Z0-9]", ""); String itemKey = null; if(customName.contains("十年靈獸") || customName.contains("十年灵兽")){ - itemKey = "十年魂卡鉴定卡"; + if(RandomUtil.getRandomDouble(0,100,1) >= 30) { + itemKey = "十年魂卡鉴定卡"; + } }else if(customName.contains("百年靈獸") || customName.contains("百年灵兽")){ - itemKey = "百年魂卡鉴定卡"; + if(RandomUtil.getRandomDouble(0,100,1) >= 60) { + itemKey = "百年魂卡鉴定卡"; + } }else if(customName.contains("千年靈獸") || customName.contains("千年灵兽")){ - itemKey = "百年魂卡鉴定卡"; + if(RandomUtil.getRandomDouble(0,100,1) >= 80) { + itemKey = "千年魂卡鉴定卡"; + } }else if(customName.contains("萬年靈獸") || customName.contains("万年灵兽")){ if(RandomUtil.getRandomDouble(0,100,1) >= 95) { itemKey = "万年魂卡鉴定卡"; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 13da4a0..5d16c01 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: AuCardBackpack main: com.yaohun.cardbackpack.AuCardBackpack -version: 1.1.6 +version: 1.2.2 depend: - DemonAPI - DemonMmKillsStats