我正在尝试创建一个带有essentials命令/item
的插件,并为每个项目提供一个绝杀。
我所提供的代码还没有传说部分,现在我只专注于重写/item
命令,以便我可以编辑它。
public class main extends JavaPlugin implements Listener {
public static Bukkit plugin;
@Override
public void onEnable()
{
Bukkit.getServer().getPluginManager().registerEvents(this, this);
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "Enabled!");
}
@Override
public void onDisable()
{
getLogger();
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "Disabled!");
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("item")) {
Player user = (Player)sender;
if (args.length < 1)
{
user.sendMessage("Not enough arguments");
}
Essentials essentials = (Essentials)getServer().getPluginManager().getPlugin("Essentials");
IItemDb itemDB = essentials.getItemDb();
ItemStack stack = essentials.getItemDb().get(args[0]);
final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", "");
try
{
if (args.length > 1 && Integer.parseInt(args[1]) > 0)
{
stack.setAmount(Integer.parseInt(args[1]));
}
}
catch (NumberFormatException e)
{
user.sendMessage("Not enough arguements");
}
if (args.length > 2)
{
MetaItemStack metaStack = new MetaItemStack(stack);
final boolean allowUnsafe = user.hasPermission("essentials.enchantments.allowunsafe");
stack = metaStack.getItemStack();
}
if (stack.getType() == Material.AIR)
{
user.sendMessage("Can not spawn air");
}
final String displayName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' ');
user.sendMessage("Given " + stack.getAmount() + " " + displayName);
if (user.hasPermission("essentials.oversizedstacks"))
{
InventoryWorkaround.addOversizedItems(user.getInventory(), 111, stack);
}
else
{
InventoryWorkaround.addItems(user.getInventory(), stack);
}
user.updateInventory();
return true;
}
return false;
}
}
在这一行:
ItemStack stack = essentials.getItemDb().get(args[0]);
我收到错误:
未处理的异常类型异常。
我可以通过重新排列底部关闭括号来解决这个问题,但是我会在底部关闭括号中出现错误。有谁知道发生了什么?
答案 0 :(得分:1)
这是因为IItemDb.get(String)
抛出了一个您未处理的已检查异常。必须处理已检查的异常,否则将引发编译时错误。来自§11.2:
Java编程语言要求程序包含已检查异常的处理程序,这些处理程序可能是由于执行方法或构造函数而导致的。对于每个可能结果的已检查异常,方法的
throws
子句或构造函数必须提及该异常的类或该异常的类的一个超类强>
(强调我的)
因此,您必须扩展您的方法签名:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) throws Exception
答案 1 :(得分:1)
这条线
ItemStack stack = essentials.getItemDb().get(args[0]);
可以抛出Exception
。
要处理它(并且它是强制性的),你必须用try / catch块包围这一行。
try {
ItemStack stack = essentials.getItemDb().get(args[0]);
} catch(Exception e) {
e.printStackTrace();
}
另外,您可能需要阅读:Why not catch general Exceptions