Java Bukkit正在创建一个自定义方法。问题

Java Bukkit正在创建一个自定义方法。问题,java,minecraft,bukkit,Java,Minecraft,Bukkit,我正在尝试创建一种方法,使我可以更轻松地添加项目和创建库存。这是我的密码。 问题是,每当我右键单击我的glowstone dust时,它就会抛出一个eventexception错误,我不知道为什么。下面是它应该做的,只要有人右键点击萤光石灰尘,它就会打开一个名为“Gadgets”的绿色目录。库存中有一个名为“隐藏层”的项目 错误 GadgetCore.Java private Core Plugin; public GadgetCore(Core p){ this.Plugin = p; }

我正在尝试创建一种方法,使我可以更轻松地添加项目和创建库存。这是我的密码。 问题是,每当我右键单击我的glowstone dust时,它就会抛出一个eventexception错误,我不知道为什么。下面是它应该做的,只要有人右键点击萤光石灰尘,它就会打开一个名为“Gadgets”的绿色目录。库存中有一个名为“隐藏层”的项目

错误

GadgetCore.Java

private Core Plugin;
public GadgetCore(Core p){ this.Plugin = p; }

//Inventories
public Inventory GadgetMenu;

// Simple Inventory Creation
public Inventory KInventoryCreate( int slots, String invname ) throws IOException {

    return Bukkit.createInventory(null, slots, invname);

}

// Simple Gadget Creation
public void AddGadget(Player player,int position ,String permission, ItemStack item, String GadgetItemName, String lore) throws IOException {

     GadgetMenu = KInventoryCreate(10, ChatColor.GREEN + "Gadgets");

    if ( !player.hasPermission(permission) ) {

        player.sendMessage( ChatColor.RED + GadgetItemName.toUpperCase() + ChatColor.YELLOW + " can only be used by specific Ranks");

        return;

    }

    GadgetMenu.setItem(position, Plugin.applyLore(item, GadgetItemName, lore));


}


@EventHandler
public void Interact(PlayerInteractEvent e) throws IOException{
    Player p = e.getPlayer();
    ItemStack item = p.getItemInHand();

    if ( e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK) ) {
        if ( item.getType().equals(Material.GLOWSTONE_DUST)) {
            e.setCancelled(true);
            AddGadget(p, 3, "gadget.hide", new ItemStack(Material.GLOWSTONE_DUST), "HidePlayers", ChatColor.GRAY + "d");
            p.openInventory(GadgetMenu);
            p.sendMessage("Debug");
        }
    }

}

@EventHandler
public void Debug(PlayerInteractEvent e) throws IOException{
    Player p = e.getPlayer();
    ItemStack item = p.getItemInHand();

    if ( e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK) ) {
        if ( item.getType().equals(Material.REDSTONE) ) {
            e.setCancelled(true);
            p.openInventory(GadgetMenu);
            p.sendMessage("Debug");
        }
    }

}
Java

public class Core extends JavaPlugin implements Listener {


public Core plugin;
public GadgetCore gc;

public ItemStack applyLore(ItemStack stack, String name, String lore1){
    ItemMeta meta = stack.getItemMeta();
    meta.setDisplayName(name);
    ArrayList<String> lore = new ArrayList<String>();
    lore.add(lore1);
    meta.setLore(lore);
    stack.setItemMeta(meta);
    return stack;
}


public void onEnable(){

    Bukkit.getConsoleSender().sendMessage(ChatColor.YELLOW + "[KnoxHub] created by 2hash");

   // Bukkit.getPluginManager().registerEvents(new );
   getServer().getPluginManager().registerEvents(new GadgetCore(this), this);

}


}
public类核心扩展JavaPlugin实现监听器{
公共核心插件;
公共核心gc;
public ItemStack applyLore(ItemStack堆栈,字符串名称,字符串1){
ItemMeta=stack.getItemMeta();
meta.setDisplayName(名称);
ArrayList lore=新的ArrayList();
知识添加(知识1);
梅塔·塞洛尔(lore);
stack.setItemMeta(meta);
返回栈;
}
public void onEnable(){
Bukkit.getConsoleSender().sendMessage(ChatColor.YELLOW+“[KnoxHub]由2hash创建”);
//Bukkit.getPluginManager().registerEvents(新);
getServer().getPluginManager().registerEvents(新的GadgetCore(这个),这个);
}
}
在堆栈跟踪中:

原因:java.lang.IllegalArgumentException:箱子的大小必须为
9的倍数

他们是你的朋友!如果您想了解如何理解错误消息并自行调试,请阅读以下内容:

不过,为了解决您的具体问题,您可能只需将
AddGadget
方法这一行中的
10
更改为
9
或数字的另一个倍数,因为库存总是有九列,因此创建一个大小为9的库存将使一行有9列,如果有18个插槽,它将是9x2,27将是9x3,依此类推

GadgetMenu=KInventoryCreate(10,ChatColor.GREEN+“Gadgets”)


不过更好的是,只需修改您的
KInventoryCreate
方法并返回类似以下内容
Bukkit.createInventory(null,9*rows,invname)而不是原始插槽号,这样您就不会再次犯同样的错误

非常感谢你。我似乎总是一次又一次地犯同样的错误,9*行刚刚解决了这个问题!
public class Core extends JavaPlugin implements Listener {


public Core plugin;
public GadgetCore gc;

public ItemStack applyLore(ItemStack stack, String name, String lore1){
    ItemMeta meta = stack.getItemMeta();
    meta.setDisplayName(name);
    ArrayList<String> lore = new ArrayList<String>();
    lore.add(lore1);
    meta.setLore(lore);
    stack.setItemMeta(meta);
    return stack;
}


public void onEnable(){

    Bukkit.getConsoleSender().sendMessage(ChatColor.YELLOW + "[KnoxHub] created by 2hash");

   // Bukkit.getPluginManager().registerEvents(new );
   getServer().getPluginManager().registerEvents(new GadgetCore(this), this);

}


}