В коде, с которым вы связаны, экземпляры 'reader' и 'writer' действительно связаны с входящим и исходящим концами двустороннего сокета, установленного вами на IRC-сервере.
Таким образом, чтобы получить ввод от пользователя, вы действительно создаете новый поток, который каким-то образом принимает команды от пользователя и действует на них.Самая базовая модель, естественно, состоит в том, чтобы использовать System.in для этого, предпочтительно оборачивая его так, чтобы вы могли получить входные данные всей строки от пользователя и проанализировать их как команду.
Чтобы прочитать целые строки из системы.in вы можете сделать что-то вроде этого:
BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = bin.readLine()) != null) {
// Do stuff
}
Вы также можете рассмотреть возможность использования одной из библиотек CLI для Java, например, JLine
.