public static ArrayList<Command> addPossibleBoxCommandsForDirection(
			dir direction, Field agentLocationInPlan, Field boxLocationInPlan,
			Collection<Field> blockedFields) {
		ArrayList<Command> possibleCommands = new ArrayList<Command>();

		// Find possible pull commands
		for (dir d : dir.values()) {

			// we cannot pull a box forward in the box's direction
			if (d != direction
					&& agentLocationInPlan.neighbors[d.ordinal()] != null
					&& !blockedFields.contains(agentLocationInPlan.neighbors[d
							.ordinal()])) {
				possibleCommands.add(new Command("Pull", d, direction));
			}
		}
		// Find possible push commands
		for (dir d : dir.values()) {
			// We cannot push a box backwards in the agents direction
			if (d != Constants.oppositeDir(direction)
					&& boxLocationInPlan.neighbors[d.ordinal()] != null
					&& !blockedFields.contains(boxLocationInPlan.neighbors[d
							.ordinal()])) {
				possibleCommands.add(new Command("Push", direction, d));
			}
		}

		return possibleCommands;
	}