Похоже, что вы хотите выйти из цикла при обнаружении конфликта, так как в противном случае следующая итерация может сбросить этот флаг (что объясняет, почему "столкновение работает только для последнего куба в массиве").
if (dir.equals("down")) {
for(Cube cubes : Panel.cubes) {
if(this.hashCode() != cubes.hashCode()) {
if(this.y + 18 == cubes.y && this.x == cubes.x || this.y >= Main.height - 18*4) {
this.conflict = true;
break;
} else {
this.conflict = false;
}
}
}
}
Кстати, в вашем conflict
методе, похоже, отсутствует оператор возврата.