This commit is contained in:
yaohunya 2025-07-25 12:36:33 +08:00
parent fbc3897bff
commit da57cbf773
6 changed files with 137 additions and 7 deletions

View File

@ -25,7 +25,11 @@
- 绑定命令 `/aucard open` 打开魂卡背包
- 初步已实现功能的安装和实装
## v1.1.6 - 2025/07/20
## v1.1.8 - 2025/07/20
- 取消`Item-NBT-API`的依赖
- 击杀检测依赖更换为 `MythicMobs`
- 已支持繁体
- 掉落进行下调
## v1.2.0 - 2025/07/23
- 完善 `数据绑定` 逻辑

View File

@ -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;
}

View File

@ -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<Integer, ItemStack> 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("[魂卡] 魂卡设置成功.");
}
}
}
}
}

View File

@ -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");

View File

@ -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 = "万年魂卡鉴定卡";

View File

@ -1,6 +1,6 @@
name: AuCardBackpack
main: com.yaohun.cardbackpack.AuCardBackpack
version: 1.1.6
version: 1.2.2
depend:
- DemonAPI
- DemonMmKillsStats