首页 > 解决方案 > 如何测试 onPlayerRenameItem 事件中的玩家是否有一定的权限?

问题描述

我制作了一个铁砧颜色重命名插件,但我想将该功能限制为具有特定权限的用户。当前代码抛出此错误: 对于 PrepareAnvilEvent 类型的方法 getPlayer() 未定义我的侦听器:

package com.delight.anvilcolorrename;

import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.PrepareAnvilEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class AnvilColorRenameListener implements Listener {
    
    //Constructor
    public AnvilColorRenameListener(Main plugin) {
        
    }

    //EventHandler
    @EventHandler
    public void onPlayerRenameItem(PrepareAnvilEvent event){
        if (event.getPlayer().hasPermission("AnvilColorRename.use")) {
            if(event.getResult() != null && event.getResult().hasItemMeta() && event.getInventory().getRenameText() != ""){
                ItemStack result = event.getResult();
                ItemMeta resultMeta = result.getItemMeta();
                String nameColored = ChatColor.translateAlternateColorCodes('&', event.getInventory().getRenameText());
                resultMeta.setDisplayName(nameColored);
                result.setItemMeta(resultMeta);
            }
            }// if(!event.hasPermission("AnvilColorRename.use")) {
//                event.sendMessage("You can not use color codes in an anvil!");
//            }
    }
//}

标签: javabukkit

解决方案


问题是PrepareAnvilEvent没有Player您可以访问的字段。但是,您可以Player通过以下方式获得InventoryView

event.getInventoryView().getPlayer()

推荐阅读