用于循环检查玩家位置

时间:2013-09-03 20:12:27

标签: java minecraft bukkit

这是针对Minecraft的Bukkit插件,使用他们的API。

我正在尝试检查玩家是否在指定的位置,如果他们是,那么就不要传送到那里的玩家。相反,检查另一个位置,如果它是空的则在那里产生。

下面的代码可能会更好地解释:

Player player = (Player) sender;
List< Player> prisoners = new ArrayList< Player>();
for (int i = 0; i < prisoners.size(); i++) {
    //loc(1-12) are coords in the form of a location variable. I just wanted to save some room.
    if (!(loc1 == prisoners.get(i))) {
        player.teleport(loc1);
    } else if (!(loc1 == prisoners.get(i).getLocation())) {
        player.teleport(loc2);
    } else if (!(loc2 == prisoners.get(i).getLocation())) {
        player.teleport(loc3);
    } else if (!(loc3 == prisoners.get(i).getLocation())) {
        player.teleport(loc4);
    } else if (!(loc4 == prisoners.get(i).getLocation())) {
        player.teleport(loc5);
    } else if (!(loc5 == prisoners.get(i).getLocation())) {
        player.teleport(loc6);
    } else if (!(loc6 == prisoners.get(i).getLocation())) {
        player.teleport(loc7);
    } else if (!(loc7 == prisoners.get(i).getLocation())) {
        player.teleport(loc8);
    } else if (!(loc8 == prisoners.get(i).getLocation())) {
        player.teleport(loc9);
    } else if (!(loc9 == prisoners.get(i).getLocation())) {
        player.teleport(loc10);
    } else if (!(loc10 == prisoners.get(i).getLocation())) {
        player.teleport(loc11);
    } else if (!(loc11 == prisoners.get(i).getLocation())) {
        player.teleport(loc12);
    } else {
        player.sendMessage("Sorry, the Prisoner's team is full. Try joining the Guards, or wait until the next round.");
        player.teleport(lobby);
        prisoners.remove(player);
    }

我想检查每个位置,并通过查看囚犯团队中的玩家列表并检查他们的位置,将玩家传送到下一个可用位置。

但是,这似乎不起作用,因为我在相同的位置产卵,所以我该如何解决这个问题呢?

我使用虚拟播放器测试多个玩家,而不是为帐户付费。

提前致谢!

1 个答案:

答案 0 :(得分:4)

这个条件

!(loc1 == prisoners.get(i))

将始终评估为true,因为您说的是loc1坐标,prisoners.get(i)Player个对象。这些将永远不会相等,因此您的上述条件评估为

!(false)  // meaning true

因此循环的每次迭代都将执行player.teleport(loc1);

您需要使用.equals not ==并确保您正在比较两个相同类型的对象。