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
|
loader_version=0.16.3
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version=1.6.1
|
mod_version=1.7.0
|
||||||
maven_group=cc.reconnected
|
maven_group=cc.reconnected
|
||||||
archives_base_name=rcc-server
|
archives_base_name=rcc-server
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package cc.reconnected.server;
|
package cc.reconnected.server;
|
||||||
|
|
||||||
|
import cc.reconnected.server.commands.RccCommand;
|
||||||
import cc.reconnected.server.database.DatabaseClient;
|
import cc.reconnected.server.database.DatabaseClient;
|
||||||
import cc.reconnected.server.database.PlayerData;
|
import cc.reconnected.server.database.PlayerData;
|
||||||
import cc.reconnected.server.database.PlayerTable;
|
import cc.reconnected.server.database.PlayerTable;
|
||||||
import cc.reconnected.server.events.PlayerWelcome;
|
import cc.reconnected.server.events.PlayerWelcome;
|
||||||
import cc.reconnected.server.http.ServiceServer;
|
import cc.reconnected.server.http.ServiceServer;
|
||||||
import net.fabricmc.api.ModInitializer;
|
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.ServerLifecycleEvents;
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||||
|
|
||||||
|
@ -73,6 +75,8 @@ public class RccServer implements ModInitializer {
|
||||||
|
|
||||||
LOGGER.info("Starting rcc-server");
|
LOGGER.info("Starting rcc-server");
|
||||||
|
|
||||||
|
CommandRegistrationCallback.EVENT.register(RccCommand::register);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Jumpstart connection
|
// Jumpstart connection
|
||||||
database.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);
|
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
|
@Nullable
|
||||||
public PlayerData getPlayerData(UUID uuid) {
|
public PlayerData getPlayerData(UUID uuid) {
|
||||||
if (cache.containsKey(uuid)) {
|
if (cache.containsKey(uuid)) {
|
||||||
|
@ -79,6 +100,7 @@ public class PlayerTable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean deletePlayerData(UUID uuid) {
|
public boolean deletePlayerData(UUID uuid) {
|
||||||
|
cache.remove(uuid);
|
||||||
try {
|
try {
|
||||||
var conn = database().connection();
|
var conn = database().connection();
|
||||||
|
|
||||||
|
@ -87,7 +109,6 @@ public class PlayerTable {
|
||||||
stmt.execute();
|
stmt.execute();
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
|
||||||
cache.remove(uuid);
|
|
||||||
return true;
|
return true;
|
||||||
} catch(SQLException e) {
|
} catch(SQLException e) {
|
||||||
RccServer.LOGGER.error("Could not delete player data from database", e);
|
RccServer.LOGGER.error("Could not delete player data from database", e);
|
||||||
|
@ -95,8 +116,13 @@ public class PlayerTable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean updatePlayerData(PlayerData playerData) {
|
public boolean createPlayerData(PlayerData playerData) {
|
||||||
deletePlayerData(playerData.uuid());
|
if(exists(playerData.uuid())) {
|
||||||
|
return updatePlayerData(playerData);
|
||||||
|
}
|
||||||
|
|
||||||
|
cache.put(playerData.uuid(), playerData);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var conn = database().connection();
|
var conn = database().connection();
|
||||||
|
|
||||||
|
@ -112,10 +138,37 @@ public class PlayerTable {
|
||||||
stmt.execute();
|
stmt.execute();
|
||||||
stmt.close();
|
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;
|
return true;
|
||||||
} catch (SQLException e) {
|
} 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;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue