Load in users and create new users if needed.
This commit is contained in:
parent
dacdacf68e
commit
bacc44b2b9
|
|
@ -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) {}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public class DatabaseQueue extends BukkitRunnable {
|
|||
if (databaseQuery == null)
|
||||
return;
|
||||
|
||||
databaseQuery.execute(connection);
|
||||
databaseQuery.executeQuery(connection);
|
||||
}
|
||||
if (!connection.getAutoCommit()) {
|
||||
connection.commit();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ public class EssentiaUserManager implements UserManager {
|
|||
|
||||
@Override
|
||||
public User createNewUser(UUID uuid) {
|
||||
return null;
|
||||
return new EssentiaUser.Builder().uuid(uuid).build();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user