如果我想要获取玩家的位置并将其传送到Bukkit预定任务中,for (Player p : )
的正确用法是什么?它在使用:
时给了我一个不明错误,我认为我需要将语句的重置连接在一起,但可能还有另一种方法。虽然这是与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()
来获取所有在线玩家(必须将其连接到列表)。
答案 0 :(得分:2)
拿你的代码:
for (Player p : ) {
if(p.getLocation().getY() <= 0.0D)
p.teleport(NoVoid.spawnLocation);
p.setFallDistance(0.0F);
}
如果你用英语阅读,听起来应该是这样的:
你看到明显的语法错误吗?对于 WHAT 中的每位玩家?如果你想说“对于球员名单中的每个球员”。这可能是这样的:
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)