Update Host name every time player logs in

This commit is contained in:
Risto Lahtela 2021-03-16 17:40:39 +02:00
parent 316c973114
commit 0ba6ff3d70
4 changed files with 22 additions and 3 deletions

View File

@ -49,6 +49,8 @@ import org.bukkit.event.player.PlayerQuitEvent;
import javax.inject.Inject;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.Optional;
import java.util.UUID;
import java.util.function.Supplier;
@ -162,7 +164,7 @@ public class PlayerOnlineListener implements Listener {
database.executeTransaction(new WorldNameStoreTransaction(serverUUID, world));
InetAddress address = player.getAddress().getAddress();
Supplier<String> getHostName = address::getHostName;
Supplier<String> getHostName = () -> Optional.ofNullable(player.getVirtualHost()).map(InetSocketAddress::getHostName).orElse("Unknown");
String playerName = player.getName();
String displayName = player.getDisplayName();

View File

@ -296,4 +296,17 @@ public class DataStoreQueries {
}
};
}
public static Executable updateHostname(UUID playerUUID, String hostname) {
String sql = "UPDATE " + UserInfoTable.TABLE_NAME + " SET " +
UserInfoTable.HOSTNAME + "=?" +
WHERE + UserInfoTable.USER_UUID + "=?";
return new ExecStatement(sql) {
@Override
public void prepare(PreparedStatement statement) throws SQLException {
statement.setString(1, hostname);
statement.setString(2, playerUUID.toString());
}
};
}
}

View File

@ -46,8 +46,10 @@ public class PlayerServerRegisterTransaction extends PlayerRegisterTransaction {
protected void performOperations() {
super.performOperations();
long registerDate = registered.getAsLong();
String hostname = this.hostname.get();
if (Boolean.FALSE.equals(query(PlayerFetchQueries.isPlayerRegisteredOnServer(playerUUID, serverUUID)))) {
execute(DataStoreQueries.registerUserInfo(playerUUID, registerDate, serverUUID, hostname.get()));
execute(DataStoreQueries.registerUserInfo(playerUUID, registerDate, serverUUID, hostname));
}
// Updates register date to smallest possible value.
@ -55,5 +57,7 @@ public class PlayerServerRegisterTransaction extends PlayerRegisterTransaction {
if (foundRegisterDate.isPresent() && foundRegisterDate.get() > registerDate) {
execute(DataStoreQueries.updateMainRegisterDate(playerUUID, registerDate));
}
execute(DataStoreQueries.updateHostname(playerUUID, hostname));
}
}

View File

@ -161,7 +161,7 @@ public class PlayerOnlineListener implements Listener {
database.executeTransaction(new WorldNameStoreTransaction(serverUUID, world));
InetAddress address = player.getSocketAddress().getAddress();
Supplier<String> getHostName = address::getHostName;
Supplier<String> getHostName = () -> player.getSocketAddress().getHostName();
String playerName = player.getName();
String displayName = player.getDisplayName();