这是针对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);
}
我想检查每个位置,并通过查看囚犯团队中的玩家列表并检查他们的位置,将玩家传送到下一个可用位置。
但是,这似乎不起作用,因为我在相同的位置产卵,所以我该如何解决这个问题呢?
我使用虚拟播放器测试多个玩家,而不是为帐户付费。
提前致谢!
答案 0 :(得分:4)
这个条件
!(loc1 == prisoners.get(i))
将始终评估为true,因为您说的是loc1
坐标,prisoners.get(i)
是Player
个对象。这些将永远不会相等,因此您的上述条件评估为
!(false) // meaning true
因此循环的每次迭代都将执行player.teleport(loc1);
您需要使用.equals
not ==并确保您正在比较两个相同类型的对象。