首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bukkit - NullPointerException

Bukkit - NullPointerException
EN

Stack Overflow用户
提问于 2015-11-08 21:48:02
回答 1查看 144关注 0票数 0

当执行命令"/group“和"/group example_player”时,我会得到一个NullPointerException。它没有给我任何更多的信息,什么(或哪里)问题是什么。我希望StackOverflow能帮上忙。

Stym.java:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
name: Stym
main: Stym
version: 1.3.3.7
commands:
  group:

config.yml:

代码语言:javascript
复制
groups:
  iron:
    - Player
    - Another_Player
  diamond:
    - Rich_Player
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-08 21:56:19

代码语言:javascript
复制
Stym stym;

GroupCommand(Stym stymClass) {

}

您从未在构造函数中初始化Stym stym。因此,当您尝试在您的方法中使用它时,它就是null

代码语言:javascript
复制
Stym stym;

GroupCommand(Stym stymClass) {
    stym = stymClass;
}

用于循环

代码语言:javascript
复制
for(String diamondPlayerName : getConfig().getStringList("groups.diamond")) {
    return !diamondPlayerName.equals(playerName);

}

按照设置这些循环的方式,它们只计算列表中的名称并返回相应的布尔值。当您return一个值时,该方法将终止。你最好用这样的东西:

代码语言:javascript
复制
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;
}

这样,它将在铁和钻石列表中运行,如果在其中一个列表中找到了玩家名称,它将立即返回false。如果它在这两个列表中都没有找到玩家的名字,它将返回true。您还需要对isIronisDiamond执行类似的操作。

如果您也有一个"groups.leather",那么这可以更简单地完成。

代码语言:javascript
复制
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;
}

此方法只搜索皮革/铁/钻石各自的列表。因为您在Stym中调用了所有三个方法,所以这将是理想的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33599404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档