layout

一个用于在Bukkit API上创建可定制物品栏的简单而强大的库。

资源图片
# 布局 ---

License Discord

**布局 (Layout)** 是一个现代化的、模块化的库,旨在简化在 Minecraft 中使用 Bukkit API 创建和管理交互式清单的过程。它提供流畅的语法和对菜单行为的完全控制,使您能够快速高效地构建 GUI。 ---

nothing
如果需要帮助,请加入 Discord 服务器。


## 主要特性 ### 尺寸和固定清单 创建可变尺寸的清单(例如箱子)或固定尺寸的清单(例如合成台和砂石),以适应您的项目的需求。 ### 完全自定义 控制菜单的各个方面: * **交互式物品**: 定义具有自定义点击逻辑的物品,用于点击事件(左键、右键、中键)。 * **清单行为**: 分配打开、关闭或清单内部常规点击等事件的操作。 * **灵活的模式**: 使用基于字符的模式设计复杂的菜单,以可视化组织您的物品。 ### 模块化设计 该库被划分为模块,以促进组织和可扩展性: * **`layout`**: 包含清单构建和管理的内核逻辑。 * **`item`**: 处理在清单中使用的物品的创建和操作。 * **`plugin`**: 包含代码示例,演示该库的实际用途。 此模块非常适合学习语法和了解不同概念的应用方式。 --- ## 开发人员优势 * **快速开发**: 大大简化了菜单创建过程,让您可以专注于插件的功能。 * **清晰的代码**: 流畅的语法会产生更具可读性和可维护性的代码。 * **巨大的潜力**: 支持多种清单类型和行为,使其成为广泛插件的强大解决方案。 ## 示例用法 [点击这里了解更多用法示例和文档。](https://github.com/Bytephoria/layout/blob/main/docs/layout-usage.md) ```java final LayoutSizedInventory layoutSizedInventory = Layout.sized() .title(Component.text("This is a sized example menu!", NamedTextColor.BLACK)) .size(5) // Add a clickable item with multiple click handlers .item(22, ClickableItemLayout.builder() .material(Material.NETHERITE_PICKAXE) .displayName(Component.text("Netherite Pickaxe", NamedTextColor.GREEN)) .lore( Component.text("Line 1", NamedTextColor.GREEN), Component.text("Line 2", NamedTextColor.LIGHT_PURPLE) ) .onLeftClick(clickContext -> clickContext.player().sendMessage("Left click!")) .onRightClick(clickContext -> clickContext.player().sendMessage("Right click!")) .onMiddleClick(clickContext -> clickContext.player().sendMessage("Middle click!")) .build() ) // Fill specific rows and columns with items .row(1, ItemLayout.display(Material.RED_STAINED_GLASS_PANE)) .row(3, ItemLayout.display(Material.GREEN_STAINED_GLASS_PANE)) .column(2, ItemLayout.display(Material.LIME_STAINED_GLASS_PANE).buil) .column(6, ItemLayout.display(Material.LIGHT_BLUE_STAINED_GLASS_PANE)) // Define inventory behavior .behavior(layoutBehaviorBuilder -> layoutBehaviorBuilder .cancelAllClicks(false) .cancelLayoutClicks(true) .allowPlayerInventoryClicks(true) .ignoreEmptySlots(true) .onClick(context -> context.player().sendMessage("Clicked on inventory!")) .onOpen(openContext -> openContext.player().sendMessage("Inventory opened!")) .onClose(closeContext -> closeContext.player().sendMessage("Inventory closed!")) ) .build(); layoutSizedInventory.open(player); ```