我有一个字符串(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);
}
}
}
答案 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
}