From b4d1ebedbdbc2272d620248708fb279cdd1d42f5 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 15 Jan 2026 07:38:26 +0000 Subject: [PATCH] Fix race conditions, NPEs and command logic in ItemManager --- .../mcatk/itemmanager/ItemManagerCommand.java | 58 +++++++++++++------ .../java/com/mcatk/itemmanager/ItemSort.java | 3 + 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/modules/ItemManager/src/main/java/com/mcatk/itemmanager/ItemManagerCommand.java b/modules/ItemManager/src/main/java/com/mcatk/itemmanager/ItemManagerCommand.java index 06a2093..f84e312 100644 --- a/modules/ItemManager/src/main/java/com/mcatk/itemmanager/ItemManagerCommand.java +++ b/modules/ItemManager/src/main/java/com/mcatk/itemmanager/ItemManagerCommand.java @@ -4,12 +4,11 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; public class ItemManagerCommand implements CommandExecutor { - private CommandSender sender; - private String[] args; - void printHelp() { + void printHelp(CommandSender sender) { sender.sendMessage("帮助:严格按照格式执行"); sender.sendMessage("创建类型: /im create <类型ID>"); sender.sendMessage("加入物品: /im add <类型ID> <商品ID>"); @@ -22,37 +21,47 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (!sender.isOp()) { return false; } - this.sender = sender; - this.args = args; if (args.length == 0) { - printHelp(); + printHelp(sender); return true; } switch (args[0].toLowerCase()) { case "create": - create(); + create(sender, args); break; case "add": - add(); + add(sender, args); break; - case "give": - give(); + case "get": + get(sender, args); break; case "list": - list(); + list(sender); break; default: } return true; } - private void create() { + private void create(CommandSender sender, String[] args) { + if (args.length < 2) { + sender.sendMessage("参数不足: /im create <类型ID>"); + return; + } String sortId = args[1]; ItemManager.getItemSort().createSort(sortId); sender.sendMessage("Ok"); } - private void add() { + private void add(CommandSender sender, String[] args) { + if (args.length < 3) { + sender.sendMessage("参数不足: /im add <类型ID> <商品ID>"); + return; + } + if (!(sender instanceof Player)) { + sender.sendMessage("只有玩家可以执行此命令"); + return; + } String sortId = args[1]; String itemId = args[2]; ItemManager.getItemSort().addItem(sortId, itemId, @@ -60,16 +69,27 @@ private void add() { sender.sendMessage("Ok"); } - private void give() { + private void get(CommandSender sender, String[] args) { + if (args.length < 3) { + sender.sendMessage("参数不足: /im get <类型ID> <商品ID>"); + return; + } + if (!(sender instanceof Player)) { + sender.sendMessage("只有玩家可以执行此命令"); + return; + } String sortId = args[1]; String itemId = args[2]; - ((Player) sender).getInventory().addItem( - ItemManager.getItemSort().getItem(sortId, itemId) - ); - sender.sendMessage("Ok"); + ItemStack item = ItemManager.getItemSort().getItem(sortId, itemId); + if (item != null) { + ((Player) sender).getInventory().addItem(item); + sender.sendMessage("Ok"); + } else { + sender.sendMessage("物品不存在"); + } } - private void list() { + private void list(CommandSender sender) { sender.sendMessage(ItemManager.getItemSort().listAll()); } diff --git a/modules/ItemManager/src/main/java/com/mcatk/itemmanager/ItemSort.java b/modules/ItemManager/src/main/java/com/mcatk/itemmanager/ItemSort.java index 9ab269e..8594b00 100644 --- a/modules/ItemManager/src/main/java/com/mcatk/itemmanager/ItemSort.java +++ b/modules/ItemManager/src/main/java/com/mcatk/itemmanager/ItemSort.java @@ -32,6 +32,9 @@ public void addItem(String id1, String id2, ItemStack itemStack) { } public ItemStack getItem(String id1, String id2) { + if (!itemsHashMap.containsKey(id1)) { + return null; + } return itemsHashMap.get(id1).getItemStackHashMap().get(id2); }