MCIO Plugins MCIO Plugins
首页
爱发电 (opens new window)
无法下载? (opens new window)

人间工作P

我每天都好困… 最近在学习和进行 VOCALOID 创作
首页
爱发电 (opens new window)
无法下载? (opens new window)
  • PluginBase

    • PluginBase 简介
    • 构建脚本
    • 插件元数据
    • 插件主类
    • 一些工具
    • 菜单
      • 菜单
      • 新建菜单
      • 动态更新图标
      • 翻页菜单
    • 菜单配置文件
    • Vault 经济
    • 数据库连接池
    • Adventure 支持
    • 本地化系统
  • Item-NBT-API

  • 开发文档
  • PluginBase
2025-06-04
目录

菜单

<< 返回开发文档

# 菜单

可以应对多种复杂场景的箱子菜单组件。

# 新建菜单

以 GuiExample 为例

public class GuiExample implements IGui {
    Player player;
    public GuiExample(Player player) {
        this.player = player;
    }
    @Override
    public Player getPlayer() {
        return player;
    }

    @Override
    public Inventory newInventory() {
        Inventory inv = Bukkit.createInventory(null, 9, "示例菜单");
        inv.setItem(4, ItemStackUtil.buildItem(
                Material.DIAMOND,
                "&e你好",
                "&7点我领取一组钻石"
        ));
        return null;
    }

    @Override
    public void onClick(InventoryAction action, ClickType click, InventoryType.SlotType slotType, int slot, ItemStack currentItem, ItemStack cursor, InventoryView view, InventoryClickEvent event) {
        event.setCancelled(true);
        if (slot == 4) {
            if (!click.isShiftClick() && click.isLeftClick()) {
                ItemStackUtil.giveItemToPlayer(player, new ItemStack(Material.DIAMOND, 64));
                player.closeInventory();
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

只需要执行 new GuiExample(player).open(); 即可为玩家打开菜单。

# 动态更新图标

Bukkit 自带的还是有点难用,暂未设计合适的接口,敬请期待。

# 翻页菜单

详见 PageGuide (opens new window)

public class GuiExample implements IGui {
    Player player;
    PageGuide<String> pageGuide = new PageGuide<>();
    public GuiExample(Player player) {
        this.player = player;
    }
    @Override
    public Player getPlayer() {
        return player;
    }

    @Override
    public Inventory newInventory() {
        Inventory inv = Bukkit.createInventory(null, 9, "示例菜单");

        pageGuide.setupPrevPageButton(
                ItemStackUtil.buildItem(Material.LIME_STAINED_GLASS_PANE, "&a上一页"),
                ItemStackUtil.buildItem(Material.RED_STAINED_GLASS_PANE, "&c上一页", "&7没有上一页了"),
                0); // “上一页”在第 1 格
        pageGuide.setupNextPageButton(
                ItemStackUtil.buildItem(Material.LIME_STAINED_GLASS_PANE, "&a下一页"),
                ItemStackUtil.buildItem(Material.RED_STAINED_GLASS_PANE, "&c下一页", "&7没有下一页了"),
                3); // “下一页”在第 4 格
        pageGuide.setContentSlots(1, 2); // 内容在 2、3 格
        // 添加数据和显示物品
        pageGuide.add("钻石", new ItemStack(Material.DIAMOND));
        pageGuide.add("金锭", new ItemStack(Material.GOLD_INGOT));
        pageGuide.add("铁锭", new ItemStack(Material.IRON_INGOT));
        pageGuide.add("煤炭", new ItemStack(Material.COAL));
        pageGuide.add("石头", new ItemStack(Material.STONE));
        // 更新到 Inventory
        pageGuide.updateInventory(inv);
        return inv;
    }

    @Override
    public void onClick(InventoryAction action, ClickType click, InventoryType.SlotType slotType, int slot, ItemStack currentItem, ItemStack cursor, InventoryView view, InventoryClickEvent event) {
        // 处理翻页按钮点击
        if (pageGuide.handlePageBtnClick(event)) return;
        event.setCancelled(true);
        // 获取点击的图标携带的数据 (前面调用 add 那里的第一个参数)
        String data = pageGuide.get(slot);
        if (data != null) {
            player.sendMessage("点击的图标所携带的自定义数据: " + data);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
上次更新: 2025/06/04, 12:03:38
一些工具
菜单配置文件

← 一些工具 菜单配置文件→

Theme fork from Vdoing | Copyright © 2018-2025 人间工作P | 到爱发电支持我

除非特别说明,本站点所有文章均以 CC BY-SA 协议授权

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式