在这种情况下更正“用于”用法

迅速地

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);
}

如果您要用英语阅读,听起来会像这样:

  • 对于中的每个玩家,如果该玩家的y坐标小于或等于零,则将其传送回生成。他们不会受到坠落伤害。

您是否看到明显的语法错误?对于每个玩家什么如果您要说“针对玩家列表中的每个玩家”。可能看起来像这样:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章