for (Player p : )
如果我试图获得玩家的位置并将其传送到Bukkit预定任务中,该方法的正确用法是什么?使用a时:
,它会给我带来一个无法识别的错误,我认为我需要将语句的重置连接在一起,但是可能还有另一种方法。尽管这是与Minecraft Bukkit相关的问题,但我确信这里有人可以帮助我。
当前代码:
private void teleporter()
{
if (getConfig().getBoolean("teleport")) {
Bukkit.getScheduler().scheduleSyncRepeatingTask(this,
new Runnable()
{
public void run() {
for (Player p : ) {
if (p.getLocation().getY() <= 0.0D)
{
p.teleport(NoVoid.spawnLocation);
p.setFallDistance(0.0F);
}
}
}
}, 0L, 100L);
}
}
任何帮助表示赞赏!
更新:
Rusher和rgettman有正确的想法。必须添加Bukkit.getServer().getOnlinePlayers()
以获取所有在线播放器(必须将其连接到列表)。
拿你的代码:
for (Player p : ) {
if(p.getLocation().getY() <= 0.0D)
p.teleport(NoVoid.spawnLocation);
p.setFallDistance(0.0F);
}
如果您要用英语阅读,听起来会像这样:
您是否看到明显的语法错误?对于每个玩家什么?如果您要说“针对玩家列表中的每个玩家”。可能看起来像这样:
for (Player p : listOfPlayersInTheGame) {
该变量listOfPlayersInTheGame
必须是玩家的集合。有效示例包括但不限于:
List<Player>
Player[]
ArrayList<Player>
LinkedList<Player>
另一方面,我不认为您希望您的传送器传送服务器上的所有播放器。您可能只想抓住当前站在传送器上的玩家。您可以通过获取它们在x,y和z平面中的位置与传送器的位置之间的差值来做到这一点。显然有一定的容忍度,所以如果差异小于1个块,我们将感到高兴。例如(伪代码):
for each player p in list:
if Math.abs(p.x - teleporter.x) < 1:
if(Math.abs(p.y - teleported.y) < 1):
if(Math.abs(p.z - teleported.z) < 1):
// They must be standing on the teleporter!
p.teleport(spawn)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句