Bukkit - 空指针异常
Bukkit - NullPointerException
当执行命令“/group”和“/group example_player”时,出现 NullPointerException。
它没有给我更多关于问题是什么(或哪里)的信息。
我希望 Whosebug 可以提供帮助。
Stym.java:
import org.bukkit.plugin.java.JavaPlugin;
public class Stym extends JavaPlugin {
@Override
public void onEnable() {
getConfig().options().copyDefaults(true);
saveConfig();
registerCommands();
registerListeners();
}
public void registerCommands() {
GroupCommand groupCommandClass = new GroupCommand(this);
getCommand("GROUP").setExecutor(groupCommandClass);
}
public void registerListeners() {
}
public boolean isLeather(String playerName) {
for(String ironPlayerName : getConfig().getStringList("groups.iron")) {
if(!ironPlayerName.equals(playerName)) {
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
return !diamondPlayerName.equals(playerName);
}
} else {
return false;
}
}
return false;
}
public boolean isIron(String playerName) {
for(String ironPlayerName : getConfig().getStringList("groups.iron")) {
if(ironPlayerName.equals(playerName)) {
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
return !diamondPlayerName.equals(playerName);
}
} else {
return false;
}
}
return false;
}
public boolean isDiamond(String playerName) {
for(String ironPlayerName : getConfig().getStringList("groups.iron")) {
if(!ironPlayerName.equals(playerName)) {
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
return diamondPlayerName.equals(playerName);
}
} else {
return false;
}
}
return false;
}
}
GroupCommand.java:
import org.bukkit.entity.Player;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.CommandExecutor;
public class GroupCommand implements CommandExecutor {
Stym stym;
GroupCommand(Stym stymClass) {
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] arguments) {
try {
if(arguments.length == 0) {
if(sender instanceof Player) {
if(!sender.isOp()) {
if(stym.isLeather(sender.getName())) {
sender.sendMessage("You are made out of leather!");
} else if(stym.isIron(sender.getName())) {
sender.sendMessage("You are made out of iron!");
} else {
sender.sendMessage("You are made out of diamond!");
}
} else {
sender.sendMessage("You are an operator!");
}
} else {
sender.sendMessage("You are a god!");
}
} else if(arguments.length == 1) {
if(!arguments[0].equals("Krischon")) {
if(stym.isLeather(sender.getName())) {
sender.sendMessage(arguments[0] + " " + "is made out of leather!");
} else if(stym.isIron(sender.getName())) {
sender.sendMessage(arguments[0] + " " + "is made out of iron!");
} else {
sender.sendMessage(arguments[0] + " " + "is made out of diamond!");
}
} else {
sender.sendMessage("Krischon is an operator!");
}
} else {
sender.sendMessage("Not supported yet!");
}
} catch(Exception exception) {
System.out.println(exception);
}
return true;
}
}
plugin.yml:
name: Stym
main: Stym
version: 1.3.3.7
commands:
group:
config.yml:
groups:
iron:
- Player
- Another_Player
diamond:
- Rich_Player
Stym stym;
GroupCommand(Stym stymClass) {
}
您从未在构造函数中初始化 Stym stym
。因此,当您尝试在您的方法中使用它时,它是 null
.
Stym stym;
GroupCommand(Stym stymClass) {
stym = stymClass;
}
For循环
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
return !diamondPlayerName.equals(playerName);
}
按照您设置这些循环的方式,它们只会计算列表中的第一个名称和 return 相应的布尔值。当您 return
一个值时,该方法将终止。你最好使用这样的东西:
public boolean isLeather(String playerName) {
for(String ironPlayerName : getConfig().getStringList("groups.iron")) {
if(ironPlayerName.equals(playerName)) {
return false;
}
}
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
if(diamondPlayerName.equals(playerName)) {
return false;
}
}
return true;
}
这样它将 运行 通过铁和钻石列表,如果在其中一个列表中找到玩家名称,它会立即 return 错误。如果通过两个列表都没有找到玩家姓名,它将 return 为真。您还需要为 isIron
和 isDiamond
执行类似的操作。
如果你也有一个 "groups.leather"
那么这可以更简单地完成。
public boolean isLeather(String playerName) {
for(String leatherPlayerName : getConfig().getStringList("groups.leather")) {
if(leatherPlayerName.equals(playerName)) {
return true;
}
}
return false;
}
public boolean isIron(String playerName) {
for(String ironPlayerName : getConfig().getStringList("groups.iron")) {
if(ironPlayerName.equals(playerName)) {
return true;
}
}
return false;
}
public boolean isDiamond(String playerName) {
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
if(diamondPlayerName.equals(playerName)) {
return true;
}
}
return false;
}
此方法只会在相应列表中搜索 leather/iron/diamond。因为无论如何你都在调用 Stym
中的所有 3 个方法,所以这将是理想的。
当执行命令“/group”和“/group example_player”时,出现 NullPointerException。 它没有给我更多关于问题是什么(或哪里)的信息。 我希望 Whosebug 可以提供帮助。
Stym.java:
import org.bukkit.plugin.java.JavaPlugin;
public class Stym extends JavaPlugin {
@Override
public void onEnable() {
getConfig().options().copyDefaults(true);
saveConfig();
registerCommands();
registerListeners();
}
public void registerCommands() {
GroupCommand groupCommandClass = new GroupCommand(this);
getCommand("GROUP").setExecutor(groupCommandClass);
}
public void registerListeners() {
}
public boolean isLeather(String playerName) {
for(String ironPlayerName : getConfig().getStringList("groups.iron")) {
if(!ironPlayerName.equals(playerName)) {
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
return !diamondPlayerName.equals(playerName);
}
} else {
return false;
}
}
return false;
}
public boolean isIron(String playerName) {
for(String ironPlayerName : getConfig().getStringList("groups.iron")) {
if(ironPlayerName.equals(playerName)) {
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
return !diamondPlayerName.equals(playerName);
}
} else {
return false;
}
}
return false;
}
public boolean isDiamond(String playerName) {
for(String ironPlayerName : getConfig().getStringList("groups.iron")) {
if(!ironPlayerName.equals(playerName)) {
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
return diamondPlayerName.equals(playerName);
}
} else {
return false;
}
}
return false;
}
}
GroupCommand.java:
import org.bukkit.entity.Player;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.CommandExecutor;
public class GroupCommand implements CommandExecutor {
Stym stym;
GroupCommand(Stym stymClass) {
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] arguments) {
try {
if(arguments.length == 0) {
if(sender instanceof Player) {
if(!sender.isOp()) {
if(stym.isLeather(sender.getName())) {
sender.sendMessage("You are made out of leather!");
} else if(stym.isIron(sender.getName())) {
sender.sendMessage("You are made out of iron!");
} else {
sender.sendMessage("You are made out of diamond!");
}
} else {
sender.sendMessage("You are an operator!");
}
} else {
sender.sendMessage("You are a god!");
}
} else if(arguments.length == 1) {
if(!arguments[0].equals("Krischon")) {
if(stym.isLeather(sender.getName())) {
sender.sendMessage(arguments[0] + " " + "is made out of leather!");
} else if(stym.isIron(sender.getName())) {
sender.sendMessage(arguments[0] + " " + "is made out of iron!");
} else {
sender.sendMessage(arguments[0] + " " + "is made out of diamond!");
}
} else {
sender.sendMessage("Krischon is an operator!");
}
} else {
sender.sendMessage("Not supported yet!");
}
} catch(Exception exception) {
System.out.println(exception);
}
return true;
}
}
plugin.yml:
name: Stym
main: Stym
version: 1.3.3.7
commands:
group:
config.yml:
groups:
iron:
- Player
- Another_Player
diamond:
- Rich_Player
Stym stym;
GroupCommand(Stym stymClass) {
}
您从未在构造函数中初始化 Stym stym
。因此,当您尝试在您的方法中使用它时,它是 null
.
Stym stym;
GroupCommand(Stym stymClass) {
stym = stymClass;
}
For循环
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
return !diamondPlayerName.equals(playerName);
}
按照您设置这些循环的方式,它们只会计算列表中的第一个名称和 return 相应的布尔值。当您 return
一个值时,该方法将终止。你最好使用这样的东西:
public boolean isLeather(String playerName) {
for(String ironPlayerName : getConfig().getStringList("groups.iron")) {
if(ironPlayerName.equals(playerName)) {
return false;
}
}
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
if(diamondPlayerName.equals(playerName)) {
return false;
}
}
return true;
}
这样它将 运行 通过铁和钻石列表,如果在其中一个列表中找到玩家名称,它会立即 return 错误。如果通过两个列表都没有找到玩家姓名,它将 return 为真。您还需要为 isIron
和 isDiamond
执行类似的操作。
如果你也有一个 "groups.leather"
那么这可以更简单地完成。
public boolean isLeather(String playerName) {
for(String leatherPlayerName : getConfig().getStringList("groups.leather")) {
if(leatherPlayerName.equals(playerName)) {
return true;
}
}
return false;
}
public boolean isIron(String playerName) {
for(String ironPlayerName : getConfig().getStringList("groups.iron")) {
if(ironPlayerName.equals(playerName)) {
return true;
}
}
return false;
}
public boolean isDiamond(String playerName) {
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
if(diamondPlayerName.equals(playerName)) {
return true;
}
}
return false;
}
此方法只会在相应列表中搜索 leather/iron/diamond。因为无论如何你都在调用 Stym
中的所有 3 个方法,所以这将是理想的。