Thank you a lot for that. That's what I was searching. I have one question
L2DatabaseFactory.getInstance().connection.use { con ->
val statement = con.prepareStatement(SqlQueries.GetAllPlayers)
val resultSet = statement.executeQuery()
var player: PlayerResponse? = null
if (resultSet.next())
{
val id = resultSet.getInt("obj_Id")
val name = resultSet.getString("char_name")
val level = resultSet.getInt("level")
val isOnline = resultSet.getInt("online") == 1
val pvpKills = resultSet.getInt("pvpkills")
val pkKills = resultSet.getInt("pkkills")
val isNobless = resultSet.getInt("nobless") == 1
player = PlayerResponse(id, name, level, isOnline, pvpKills, pkKills, isNobless)
Wouldn't be better to take these infos from the player object itself for example?(if player is online) So it would be real time , because database values are not always real time on L2J due to delay of updating. This specific feature may isn't the best example to what I mean actually but propably you got the point.
Also practically could we extend this to create token authentication and the ACP(or whatever) to just be a cool SPA with front end framework(react,vue,etc)?