有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用于循环检查播放器位置的java

这是一个Bukkit插件,用于Minecraft,使用他们的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) 个答案

  1. # 1 楼答案

    这种情况

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

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

    !(false)  // meaning true
    

    所以循环的每一次迭代都会执行player.teleport(loc1);

    您需要使用.equalsnot==并确保正在比较同一类型的两个对象