创建 ButtonOption
ButtonOption
允许你为所有按钮添加元素。要保存 ButtonOption
,你的插件必须与 zMenu 一起加载。你需要使用事件 ButtonLoaderRegisterEvent
。
示例:
package fr.maxlego08.example;
// 导入语句
import fr.maxlego08.menu.MenuItemStack;
import fr.maxlego08.menu.api.ButtonManager;
import fr.maxlego08.menu.api.InventoryManager;
import fr.maxlego08.menu.api.button.Button;
import fr.maxlego08.menu.api.button.ButtonOption;
import fr.maxlego08.menu.inventory.inventories.InventoryDefault;
import fr.maxlego08.menu.zcore.utils.loader.Loader;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.plugin.Plugin;
import java.io.File;
/**
* CustomAction 实现了 ButtonOption 以提供插件 zMenu 内的自定义按钮行为。
*/
public class CustomAction implements ButtonOption {
// 引用主插件实例以访问其功能和配置。
private final ExamplePlugin plugin;
// 一个标志,用于通过配置文件启用或禁用自定义操作。
private boolean enableCustomAction;
/**
* CustomAction 的构造函数。
* @param plugin 主插件类的实例。
*/
public CustomAction(ExamplePlugin plugin) {
this.plugin = plugin;
}
/**
* 返回此自定义操作的唯一名称。
* @return 此操作的字符串标识符。
*/
@Override
public String getName() {
return "custom_action_example";
}
/**
* 返回与此自定义操作关联的插件实例。
* @return 插件实例。
*/
@Override
public Plugin getPlugin() {
return this.plugin;
}
/**
* 从配置文件加载按钮设置。
* 这个方法会自动调用,将配置设置应用到按钮上。
*
* @param button 被配置的按钮。
* @param yamlConfiguration 从文件加载的 YamlConfiguration。
* @param path 读取配置值的路径前缀。
* @param inventoryManager 菜单管理器实例。
* @param buttonManager 按钮管理器实例。
* @param loader 用于加载物品堆栈的加载器。
* @param file 配置加载的文件。
*/
@Override
public void loadButton(Button button, YamlConfiguration yamlConfiguration, String path, InventoryManager inventoryManager, ButtonManager buttonManager, Loader<MenuItemStack> loader, File file) {
// 从配置文件中加载 enableCustomAction 值。如果未指定,则默认为 false。
this.enableCustomAction = yamlConfiguration.getBoolean(path + "enableCustomAction", false);
}
/**
* 处理按钮的点击事件。
* 当玩家点击分配了此自定义操作的按钮时,将触发此方法。
*
* @param button 被点击的按钮。
* @param player 点击按钮的玩家。
* @param inventoryClickEvent 与菜单点击相关的事件。
* @param inventoryDefault 发生点击的菜单。
* @param slot 点击发生的槽位索引。
* @param hasPermission 表示玩家是否有权限使用此操作的标志。
*/
@Override
public void onClick(Button button, Player player, InventoryClickEvent inventoryClickEvent, InventoryDefault inventoryDefault, int slot, boolean hasPermission) {
// 如果玩家有权限且自定义操作已启用,则向他们发送自定义消息。
if (hasPermission && enableCustomAction) {
player.sendMessage("§a嘿,这是一个自定义操作!");
}
}
}
你必须以这种方式注册你的 ButtonOption:
@EventHandler
public void onButtonLoad(ButtonLoaderRegisterEvent event) {
InventoryManager inventoryManager = event.getInventoryManager(); // 从事件中初始化菜单管理器
inventoryManager.registerOption(this.plugin, CustomAction.class);
}
Last updated