下面是一个使用Java编写的Bukkit插件,该插件在SHIFT+右键点击箱子时,会打开一个GUI界面,用于设置箱子的主人。如果不是箱子的主人,将禁止打开箱子并显示相应的禁止消息。\n\njava\nimport org.bukkit.Bukkit;\nimport org.bukkit.ChatColor;\nimport org.bukkit.Material;\nimport org.bukkit.block.Block;\nimport org.bukkit.block.BlockState;\nimport org.bukkit.block.Chest;\nimport org.bukkit.entity.Player;\nimport org.bukkit.event.EventHandler;\nimport org.bukkit.event.Listener;\nimport org.bukkit.event.block.Action;\nimport org.bukkit.event.player.PlayerInteractEvent;\nimport org.bukkit.inventory.Inventory;\nimport org.bukkit.inventory.InventoryHolder;\nimport org.bukkit.inventory.ItemStack;\nimport org.bukkit.plugin.java.JavaPlugin;\n\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.UUID;\n\npublic class ChestOwnershipPlugin extends JavaPlugin implements Listener {\n\n private Map<Block, UUID> chestOwners;\n\n @Override\n public void onEnable() {\n getServer().getPluginManager().registerEvents(this, this);\n chestOwners = new HashMap<>();\n }\n\n @Override\n public void onDisable() {\n chestOwners.clear();\n }\n\n @EventHandler\n public void onPlayerInteract(PlayerInteractEvent event) {\n Player player = event.getPlayer();\n Block block = event.getClickedBlock();\n Action action = event.getAction();\n\n if (block != null && action == Action.RIGHT_CLICK_BLOCK && event.isSneaking()) {\n if (block.getType() == Material.CHEST || block.getType() == Material.TRAPPED_CHEST) {\n event.setCancelled(true);\n\n UUID chestOwner = chestOwners.get(block);\n\n if (chestOwner == null) {\n openOwnershipGUI(player, block);\n } else if (chestOwner.equals(player.getUniqueId())) {\n openChest(block, player);\n } else {\n player.sendMessage(ChatColor.RED + "This chest is owned by someone else.");\n }\n }\n }\n }\n\n private void openOwnershipGUI(Player player, Block block) {\n Inventory inventory = Bukkit.createInventory(null, 9, "Set Chest Owner");\n\n inventory.setItem(4, createOwnershipItem(block));\n\n player.openInventory(inventory);\n }\n\n private ItemStack createOwnershipItem(Block block) {\n ItemStack itemStack = new ItemStack(Material.PAPER);\n BlockState blockState = block.getState();\n\n if (blockState instanceof InventoryHolder) {\n InventoryHolder holder = (InventoryHolder) blockState;\n Inventory inventory = holder.getInventory();\n\n if (inventory instanceof Chest) {\n Chest chest = (Chest) inventory;\n String ownerName = chestOwners.containsKey(block) ? Bukkit.getOfflinePlayer(chestOwners.get(block)).getName() : "None";\n String displayName = ChatColor.GRAY + "Chest Owner: " + ChatColor.GREEN + ownerName;\n\n itemStack.getItemMeta().setDisplayName(displayName);\n }\n }\n\n return itemStack;\n }\n\n private void openChest(Block block, Player player) {\n BlockState blockState = block.getState();\n\n if (blockState instanceof InventoryHolder) {\n InventoryHolder holder = (InventoryHolder) blockState;\n Inventory inventory = holder.getInventory();\n\n player.openInventory(inventory);\n }\n }\n}\n\n\n请注意,这只是一个基本的插件示例,可能需要根据你的项目需求进行修改和完善。在使用之前,请确保你的开发环境已经配置好了Bukkit API和相关的依赖。


原文地址: https://www.cveoy.top/t/topic/pLge 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录