Для циклической проверки местоположения игроков

Это плагин 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);
    }

Я хочу проверить каждое место и телепортировать игрока в следующее доступное место, просмотрев список игроков в команде заключенного и проверив их местоположение.

Но это, похоже, не работает, так как я появляюсь в той же позиции, так как мне исправить эту проблему?

Я использую виртуальных игроков для тестирования с несколькими игроками, вместо того, чтобы платить за учетные записи.

Заранее спасибо!


person user2070394    schedule 03.09.2013    source источник
comment
Какой у Вас вопрос?   -  person Sotirios Delimanolis    schedule 04.09.2013
comment
Почему вы используете == для сравнения?   -  person Maroun    schedule 04.09.2013
comment
Я только что отредактировал пост, под кодом - более ясный вопрос.   -  person user2070394    schedule 04.09.2013
comment
Для вопроса Почему вы используете == для сравнения? Eclipse выдал мне ошибку, касающуюся! оператор не определен.   -  person user2070394    schedule 04.09.2013
comment
Почему бы вам просто не использовать !=?   -  person pinckerman    schedule 04.09.2013


Ответы (1)


Это условие

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

всегда будет оцениваться как истина, поскольку loc1, как вы говорите, является координатой, а prisoners.get(i) является объектом Player. Они никогда не будут равны, поэтому ваше указанное выше условие оценивается как

!(false)  // meaning true

Таким образом, каждая итерация цикла будет выполняться player.teleport(loc1);

Вам нужно использовать .equals not ==, а также убедиться, что вы сравниваете два объекта одного типа.

person Java Devil    schedule 03.09.2013