Add command to clear PlayerTable cache.
Add method to create players, made updating use UPDATE instead of recreating.
This commit is contained in:
parent
1b70b8e487
commit
870b495deb
4 changed files with 96 additions and 6 deletions
|
@ -9,7 +9,7 @@ yarn_mappings=1.20.1+build.10
|
|||
loader_version=0.16.3
|
||||
|
||||
# Mod Properties
|
||||
mod_version=1.6.1
|
||||
mod_version=1.7.0
|
||||
maven_group=cc.reconnected
|
||||
archives_base_name=rcc-server
|
||||
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
package cc.reconnected.server;
|
||||
|
||||
import cc.reconnected.server.commands.RccCommand;
|
||||
import cc.reconnected.server.database.DatabaseClient;
|
||||
import cc.reconnected.server.database.PlayerData;
|
||||
import cc.reconnected.server.database.PlayerTable;
|
||||
import cc.reconnected.server.events.PlayerWelcome;
|
||||
import cc.reconnected.server.http.ServiceServer;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||
|
||||
|
@ -73,6 +75,8 @@ public class RccServer implements ModInitializer {
|
|||
|
||||
LOGGER.info("Starting rcc-server");
|
||||
|
||||
CommandRegistrationCallback.EVENT.register(RccCommand::register);
|
||||
|
||||
try {
|
||||
// Jumpstart connection
|
||||
database.connection();
|
||||
|
|
33
src/main/java/cc/reconnected/server/commands/RccCommand.java
Normal file
33
src/main/java/cc/reconnected/server/commands/RccCommand.java
Normal file
|
@ -0,0 +1,33 @@
|
|||
package cc.reconnected.server.commands;
|
||||
|
||||
import cc.reconnected.server.RccServer;
|
||||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import net.minecraft.command.CommandRegistryAccess;
|
||||
import net.minecraft.server.command.CommandManager;
|
||||
import net.minecraft.server.command.ServerCommandSource;
|
||||
import net.minecraft.text.Text;
|
||||
|
||||
import static com.mojang.brigadier.arguments.StringArgumentType.getString;
|
||||
import static com.mojang.brigadier.arguments.StringArgumentType.word;
|
||||
import static net.minecraft.server.command.CommandManager.literal;
|
||||
import static net.minecraft.server.command.CommandManager.argument;
|
||||
import static net.minecraft.server.command.CommandManager.*;
|
||||
|
||||
public class RccCommand {
|
||||
public static void register(CommandDispatcher<ServerCommandSource> dispatcher, CommandRegistryAccess registryAccess, CommandManager.RegistrationEnvironment environment) {
|
||||
dispatcher.register(
|
||||
literal("rcc")
|
||||
.requires(source -> source.hasPermissionLevel(2))
|
||||
.executes(ctx -> {
|
||||
return 1;
|
||||
})
|
||||
.then(literal("clearcache")
|
||||
.executes(context -> {
|
||||
RccServer.getInstance().playerTable().clearCache();
|
||||
context.getSource().sendFeedback(() -> Text.literal("RCC PlayerTable cache cleared!"), false);
|
||||
return 1;
|
||||
})
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
|
@ -43,6 +43,27 @@ public class PlayerTable {
|
|||
cache.remove(uuid);
|
||||
}
|
||||
|
||||
public void clearCache() {
|
||||
cache.clear();
|
||||
}
|
||||
|
||||
public boolean exists(UUID uuid) {
|
||||
try {
|
||||
var conn = database().connection();
|
||||
|
||||
var stmt = conn.prepareStatement("SELECT uuid FROM players WHERE uuid = ?;");
|
||||
stmt.setObject(1, uuid);
|
||||
var set = stmt.executeQuery();
|
||||
var exists = set.next();
|
||||
stmt.close();
|
||||
|
||||
return exists;
|
||||
} catch (SQLException e) {
|
||||
RccServer.LOGGER.error("Could not get player data from database", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PlayerData getPlayerData(UUID uuid) {
|
||||
if (cache.containsKey(uuid)) {
|
||||
|
@ -79,6 +100,7 @@ public class PlayerTable {
|
|||
}
|
||||
|
||||
public boolean deletePlayerData(UUID uuid) {
|
||||
cache.remove(uuid);
|
||||
try {
|
||||
var conn = database().connection();
|
||||
|
||||
|
@ -87,7 +109,6 @@ public class PlayerTable {
|
|||
stmt.execute();
|
||||
stmt.close();
|
||||
|
||||
cache.remove(uuid);
|
||||
return true;
|
||||
} catch(SQLException e) {
|
||||
RccServer.LOGGER.error("Could not delete player data from database", e);
|
||||
|
@ -95,8 +116,13 @@ public class PlayerTable {
|
|||
}
|
||||
}
|
||||
|
||||
public boolean updatePlayerData(PlayerData playerData) {
|
||||
deletePlayerData(playerData.uuid());
|
||||
public boolean createPlayerData(PlayerData playerData) {
|
||||
if(exists(playerData.uuid())) {
|
||||
return updatePlayerData(playerData);
|
||||
}
|
||||
|
||||
cache.put(playerData.uuid(), playerData);
|
||||
|
||||
try {
|
||||
var conn = database().connection();
|
||||
|
||||
|
@ -112,10 +138,37 @@ public class PlayerTable {
|
|||
stmt.execute();
|
||||
stmt.close();
|
||||
|
||||
cache.put(playerData.uuid(), playerData);
|
||||
return true;
|
||||
} catch(SQLException e) {
|
||||
RccServer.LOGGER.error("Could not create player data from database", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean updatePlayerData(PlayerData playerData) {
|
||||
if(!exists(playerData.uuid())) {
|
||||
return createPlayerData(playerData);
|
||||
}
|
||||
|
||||
cache.put(playerData.uuid(), playerData);
|
||||
|
||||
try {
|
||||
var conn = database().connection();
|
||||
|
||||
var stmt = conn.prepareStatement("UPDATE players SET lastknownname = ?, discordid = ?, isBot = ?, isAlt = ?, pronouns = ? WHERE uuid = ?");
|
||||
//var stmt = conn.prepareStatement("INSERT INTO players(uuid, firstJoined, lastKnownName, discordId, isBot, isAlt, pronouns) VALUES (?,?,?,?,?,?,?);");
|
||||
stmt.setString(1, playerData.name());
|
||||
stmt.setString(2, playerData.discordId());
|
||||
stmt.setBoolean(3, playerData.isBot());
|
||||
stmt.setBoolean(4, playerData.isAlt());
|
||||
stmt.setString(5, playerData.pronouns());
|
||||
stmt.setObject(6, playerData.uuid());
|
||||
stmt.execute();
|
||||
stmt.close();
|
||||
|
||||
return true;
|
||||
} catch (SQLException e) {
|
||||
RccServer.LOGGER.error("Could not get player data from database", e);
|
||||
RccServer.LOGGER.error("Could not update player data on database", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue