声明字符串后,在条件语句中设置int值

时间:2014-05-10 12:19:31

标签: java minecraft bukkit

我有一个字符串(breakmsg),我希望每个if语句都相同,整数value需要根据声明的内容进行更改在if语句中。在我已经声明value字符串之后,我将如何更改breakmsg变量的值?之前的尝试在代码中进行了注释。

这是我目前的代码:

private int value;

    public void setValue(int v){
        value = v;
    }

    @EventHandler
    public void onBlockBreak(BlockBreakEvent e) {
        Block b = e.getBlock();
        Player p = e.getPlayer();

        //int value = 0;
        String breakmsg = ChatColor.GREEN + "You gained " + ChatColor.GOLD + value + ChatColor.GREEN + " points for collecting " + ChatColor.AQUA + b.getType() + ChatColor.GREEN + ".";

        @SuppressWarnings("deprecation")
        int itemID = p.getItemInHand().getTypeId();

        if (b.getType() == Material.DIAMOND_ORE) {
            if (itemID == 257 || itemID == 278) {
                //value = 5;
                setValue(5);
                int points = getConfig().getInt("players." + p.getUniqueId() + ".points");
                getConfig().set("players." + p.getUniqueId() + ".points", points + value);
                saveConfig();
                startScoreboard();
                e.getPlayer().sendMessage(breakmsg);
            }
        }

        if (b.getType() == Material.GOLD_ORE) {
            if (itemID == 257 || itemID == 285 || itemID == 278) {
                //value = 3;
                setValue(3);
                int points = getConfig().getInt("players." + p.getUniqueId() + ".points");
                getConfig().set("players." + p.getUniqueId() + ".points", points + value);
                saveConfig();
                startScoreboard();
                e.getPlayer().sendMessage(breakmsg);
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

您可以将该逻辑包装在私有函数中。

private String generateBreakMsgFrom(Block block, int value) {
    return ...
}

然后在if语句中而不是设置值,您可以这样做:

breakmsg = generateBreakMsgFrom(b, 5);

请注意,您可以而且应该只是在if语句之后设置消息,但是您仍然希望将消息生成逻辑提取到私有函数中。

我真的建议你阅读Clean Code。你的功能很长,它做了很多事情,它有很多神奇的数字和相当多的代码重复......

编辑:因为你在函数中声明了int value,所以我没有意识到它是一个实例变量。

private String generateBreakMsgForBlock(Block block) {
    return ... //you can use value from here once properly set
}