我最近开始制作Minecraft插件,但发生了一些错误,例如此链接https://paste.ubuntu.com/p/yHs2pQWf8t/
主要
package org.devoflua.hello;
import org.bukkit.plugin.java.JavaPlugin;
import org.devoflua.hello.commands.HelloCommand;
public class Main extends JavaPlugin {
@Override
public void onEnable() {
System.out.print("Okie");
new HelloCommand(this);
}
}
命令
package org.devoflua.hello.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.devoflua.hello.Main;
public class HelloCommand implements CommandExecutor {
@SuppressWarnings("unused")
private Main plugin;
public HelloCommand(Main plugin) {
this.plugin = plugin;
plugin.getCommand("hello").setExecutor(this);
}
@Override
public boolean onCommand(CommandSender Sender, Command Command, String label, String[] arg) {
if (!(Sender instanceof Player)) {
Sender.sendMessage("Only senders can use this command");
return true;
}
Player p = (Player) Sender;
if (p.hasPermission("hello.use")) {
p.sendMessage("hi");
return true;
} else {
p.sendMessage("You do not have permission to send this message");
}
return false;
}
}
我认为错误来自第16行的命令类。 我在互联网上进行搜索,但发现没有什么可以帮助我解决此问题的。
答案 0 :(得分:0)
因此,您必须在此修复一些问题,因为它无法正常工作。
首先,您必须使用setExecutor()
而不是为其创建新实例。
可以通过将其添加到您的onEnable()
中来完成:
this.getCommand("mycommand").setExecutor(new CommandKit());
您还必须在plugin.yml
中指定此命令,这是有关此文件的一些文档:
https://www.spigotmc.org/wiki/plugin-yml/
然后,您可以删除自己的“ HelloCommand()”,通过上面的更改,您将不再需要它。
有了这个,您的错误就会消失,如果您仍然遇到一些错误,请告诉我。
答案 1 :(得分:0)
NullPointerException表示在代码的某个点上,对象或其他任何东西均为“ null”。让我为您的主类和命令类提供一个良好的结构。
主要类别:
package org.devoflua.hello;
import org.bukkit.plugin.java.JavaPlugin;
import org.devoflua.hello.commands.HelloCommand;
public class Main extends JavaPlugin {
public void onEnable() {
System.out.println("Plugin Enabled");
getCommand("hello").setExecutor(new HelloCommand();
}
public void onDisable() {
System.out.println("Plugin Disabled");
}
}
CommandExecutor类:
package org.devoflua.hello.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.devoflua.hello.Main;
public class HelloCommand implements CommandExecutor{
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender instanceof Player) {
Player p = (Player) sender;
if (p.hasPermission("hello.use")) {
p.sendMessage("hi");
} else {
p.sendMessage("You do not have permission to send this message");
}
} else {
sender.sendMessage("Only senders can use this command");
}
return true;
}