以下是代码:
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
Player p = event.getPlayer();
ItemStack boots = p.getInventory().getBoots();
if (!boots.getItemMeta().getDisplayName().equals("§3Elemental Boots")) {
p.sendMessage("no");
p.setAllowFlight(false);
}
if (boots.getItemMeta().getDisplayName().equals("§3Elemental Boots")) {
p.setAllowFlight(true);
p.sendMessage("Test");
}
}
为了指定,当我穿上靴子并移动时,它会输出测试。当我脱下靴子时,它什么也不输出。请告诉我我做错了什么,谢谢!
因为你没有穿靴子。我会逐行分解:)
前三行很明显
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
Player p = event.getPlayer();
在这里,您创建了一个变量boots,并为其提供了库存价值。getBoots();如果玩家戴着它们,它将返回一个物品堆栈。如果查看服务器控制台,您可能会得到一个NullPointerException,因为如果玩家没有穿靴子,那么boots变量将为null。
ItemStack boots = p.getInventory().getBoots();
现在你检查靴子的显示名称是否不等于“§3元素靴子”,如果玩家穿着靴子,这一切都很好。在你的情况下,当靴子关闭,引导变量执行为空时,你试图访问一个不存在的项目的显示名称,所以什么都不会发生(除了NPE错误)。(这一行还有另一个问题,我会在回复底部解释)
if (!boots.getItemMeta().getDisplayName().equals("§3Elemental Boots")) {
p.sendMessage("no");
p.setAllowFlight(false);
}
同样的问题也在这里发生
if (boots.getItemMeta().getDisplayName().equals("§3Elemental Boots")) {
p.setAllowFlight(true);
p.sendMessage("Test");
}
}
解决这个问题的方法是添加另一个if语句,以确保玩家穿着靴子。你可以这样做:
if(p.getInventory().getBoots().equals(null)) {
//Gets called when the player isn't wearing boots
p.sendMessage("You aren't wearing any boots!")
} else {
//Gets called when the player is wearing boots
ItemStack boots = p.getInventory().getBoots();
//Rest of your code
}
上面的第二个问题是,使用Java时,文本中的颜色可能会很奇怪,使用时可能会遇到问题。等于(“§3Elemental Boots”)
这里有两个选项,
。equals(ChatColor.translateAlternateColorCodes(“§”和“§3Elemental Boots”)
在生成任何带有颜色的字符串时,也应该使用ChatColor方法
ChatColor。StripColor(boots.getItemMeta()。getDisplayName())。等于(“元素靴”)
我个人倾向于第二种选择
我希望这有帮助!
问题内容: 考虑以下Java源代码: 该是。 为什么该语句有时会抛出? 谢谢。 问题答案: 线程安全 如果您的代码是多线程的,则有可能。例如: 如果在语句执行之后(但在循环之前)立即将另一个线程设置为,则您将获得一个。通过使用访问器(与延迟初始化结合使用)可以避免这种情况。 另外,如其他人所提到的,如果可能,请避免使用有利于泛型的此类循环构造。有关详细信息,请参见其他答案。 配件提供保护 如果始终
我的档案是这样的。 Kitten.java price.java KittenService.java
问题-小鲍比喜欢巧克力。他经常去他最喜欢的商店——佩妮阿姨——买巧克力。他们在佩妮阿姨有促销活动。如果鲍比存了足够的包装纸,他可以把它们上交免费巧克力。 例如,鲍比必须花每根巧克力棒的钱。他可以上交包装纸来收到另一根巧克力棒。最初,他买巧克力棒,吃完后有包装纸。他上交了它们,留给他更多的巧克力棒。吃完这两根,他有包装纸,然后留下包装纸和他的新酒吧。一旦他吃了那根,他就有包装纸,然后把它们上交另一根
我运行这段代码的时候,点击部件就会出现 Uncaught TypeError: Cannot read properties of undefined (reading 'position')at VertexEnumerator.js:87:28 这样的错误
问题内容: 在我的应用程序中,有时会引发以下异常: 很难找到错误,因为在stacktrace中没有列出我的方法。那么,有人知道何时抛出此异常吗?感谢您的任何提示。 问题答案: 您可以在stacktrace中看到错误: 适配器的内容已更改,但ListView没有收到通知。确保不从后台线程修改适配器的内容,而仅从UI线程修改。 您应该调查一个线程,并使其与UI线程同步。 在Android中执行此操作的
我正在运行一个模型来检测图像中一些有趣的特征。我有一组600x200像素的图像。这些图像具有我想识别的岩石碎片等特征。想象一个(4x12)网格覆盖在图像上,我可以使用注释器工具手动生成注释,例如((4,9),(3,10),(3,11),(3,12)),以识别图像中感兴趣的单元格。我可以用Keras建立CNN模型,输入为灰度图像。但我应该如何对输出进行编码。在我看来,一种直观的方法是将其视为形状的稀