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.EssentiaPlugin;
import com.alttd.essentia.configuration.Config; import com.alttd.essentia.configuration.Config;
import com.alttd.essentia.user.User; import com.alttd.essentia.user.User;
import com.alttd.essentia.user.UserManager;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent; 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 org.bukkit.event.player.PlayerTeleportEvent;
import java.util.HashSet; import java.util.HashSet;
@ -15,7 +18,7 @@ import java.util.Set;
public class PlayerListener implements Listener { public class PlayerListener implements Listener {
private EssentiaPlugin plugin; private final EssentiaPlugin plugin;
private final Set<PlayerTeleportEvent.TeleportCause> backAllowCauses = new HashSet<>(); private final Set<PlayerTeleportEvent.TeleportCause> backAllowCauses = new HashSet<>();
public PlayerListener(EssentiaPlugin plugin) { public PlayerListener(EssentiaPlugin plugin) {
@ -61,4 +64,28 @@ public class PlayerListener implements Listener {
user.setBackLocation(false, event.getFrom()); 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; this.plugin = plugin;
} }
public EssentiaUser loadUser(UUID uuid) { public User loadUser(UUID uuid) {
EssentiaUser user = load(uuid); User user = load(uuid);
if (user == null) {
user = plugin.userManager().createNewUser(uuid);
}
plugin.userManager().addUser(user); plugin.userManager().addUser(user);

View File

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

View File

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

View File

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

View File

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