Load in users and create new users if needed.

This commit is contained in:
Len 2024-06-17 10:56:07 +02:00
parent dacdacf68e
commit bacc44b2b9
6 changed files with 56 additions and 11 deletions

View File

@ -3,11 +3,14 @@ package com.alttd.essentia.listeners;
import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.configuration.Config;
import com.alttd.essentia.user.User;
import com.alttd.essentia.user.UserManager;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import java.util.HashSet;
@ -15,7 +18,7 @@ import java.util.Set;
public class PlayerListener implements Listener {
private EssentiaPlugin plugin;
private final EssentiaPlugin plugin;
private final Set<PlayerTeleportEvent.TeleportCause> backAllowCauses = new HashSet<>();
public PlayerListener(EssentiaPlugin plugin) {
@ -61,4 +64,28 @@ public class PlayerListener implements Listener {
user.setBackLocation(false, event.getFrom());
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (plugin.userManager().hasUser(player.getUniqueId()))
return;
plugin.storageProvider().loadUser(player.getUniqueId());
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer();
UserManager userManager = plugin.userManager();
if (!userManager.hasUser(player.getUniqueId())) {
return;
}
User user = userManager.getUser(player);
try {
plugin.storageProvider().save(user);
userManager.removeUser(player.getUniqueId());
} catch (Exception ignored) {}
}
}

View File

@ -18,8 +18,12 @@ public abstract class StorageProvider {
this.plugin = plugin;
}
public EssentiaUser loadUser(UUID uuid) {
EssentiaUser user = load(uuid);
public User loadUser(UUID uuid) {
User user = load(uuid);
if (user == null) {
user = plugin.userManager().createNewUser(uuid);
}
plugin.userManager().addUser(user);

View File

@ -19,7 +19,7 @@ public class DatabaseQuery {
this(statement, ps -> {});
}
public ResultSet execute(Connection connection) {
public ResultSet executeQuery(Connection connection) {
try (PreparedStatement preparedStatement = connection.prepareStatement(statement)) {
databaseTask.edit(preparedStatement);
ResultSet resultSet = preparedStatement.executeQuery();
@ -31,12 +31,24 @@ public class DatabaseQuery {
return null;
}
public void execute(Connection connection) {
try (PreparedStatement preparedStatement = connection.prepareStatement(statement)) {
databaseTask.edit(preparedStatement);
preparedStatement.execute();
databaseTask.onSuccess();
} catch (SQLException e) {
databaseTask.onFailure(e);
}
}
public interface DatabaseTask {
void edit(PreparedStatement preparedStatement) throws SQLException;
default void onSuccess(ResultSet resultSet) throws SQLException {};
default void onSuccess() throws SQLException {};
default void onFailure(SQLException e) {
e.printStackTrace();
}

View File

@ -42,7 +42,7 @@ public class DatabaseQueue extends BukkitRunnable {
if (databaseQuery == null)
return;
databaseQuery.execute(connection);
databaseQuery.executeQuery(connection);
}
if (!connection.getAutoCommit()) {
connection.commit();

View File

@ -34,10 +34,11 @@ public class SQLStorageProvider extends StorageProvider {
private void createTables() {
// TODO -- create table
String userTable = "CREATE TABLE IF NOT EXISTS users(" +
"id VARCHAR(36) NOT NULL, " +
"PRIMARY KEY (id)" +
"uuid VARCHAR(36) NOT NULL, " +
"PRIMARY KEY (uuid)" +
")";
addDatabaseQuery(new DatabaseQuery(userTable), false);
DatabaseQuery databaseQuery = new DatabaseQuery(userTable);
databaseQuery.execute(getDatabaseConnection().get());
}
public DatabaseConnection getDatabaseConnection() {
@ -100,7 +101,7 @@ public class SQLStorageProvider extends StorageProvider {
if (queue) {
databaseQueue.databaseQueryQueue().offer(databaseQuery);
} else {
databaseQuery.execute(getDatabaseConnection().get());
databaseQuery.executeQuery(getDatabaseConnection().get());
}
}
@ -120,11 +121,12 @@ public class SQLStorageProvider extends StorageProvider {
return match;
}
// TODO -- make this async
@Override
protected EssentiaUser load(UUID uuid) {
String sql = "SELECT * FROM users WHERE uuid = ?";
DatabaseQuery databaseQuery = new DatabaseQuery(sql, ps -> ps.setString(1, uuid.toString()));
try (ResultSet resultSet = databaseQuery.execute(getDatabaseConnection().get())) {
try (ResultSet resultSet = databaseQuery.executeQuery(getDatabaseConnection().get())) {
if (!resultSet.next()) {
return null; // user is not in the db
}

View File

@ -47,7 +47,7 @@ public class EssentiaUserManager implements UserManager {
@Override
public User createNewUser(UUID uuid) {
return null;
return new EssentiaUser.Builder().uuid(uuid).build();
}
}