diff --git a/src/main/java/emu/grasscutter/command/commands/AccountCommand.java b/src/main/java/emu/grasscutter/command/commands/AccountCommand.java index 97230a35e..667fe22fc 100644 --- a/src/main/java/emu/grasscutter/command/commands/AccountCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/AccountCommand.java @@ -99,10 +99,6 @@ public final class AccountCommand implements CommandHandler { return; } - // Make sure player isn't online as we delete their account. - kickAccount(toDelete); - - // Finally, we do the actual deletion. DatabaseHelper.deleteAccount(toDelete); CommandHandler.sendMessage(sender, translate(sender, "commands.account.delete")); return; diff --git a/src/main/java/emu/grasscutter/database/DatabaseHelper.java b/src/main/java/emu/grasscutter/database/DatabaseHelper.java index 6d64a686f..2087dc3fd 100644 --- a/src/main/java/emu/grasscutter/database/DatabaseHelper.java +++ b/src/main/java/emu/grasscutter/database/DatabaseHelper.java @@ -123,32 +123,31 @@ public final class DatabaseHelper { Player player = Grasscutter.getGameServer().getPlayerByAccountId(target.getId()); + // Close session first if (player != null) { - // Close session first player.getSession().close(); - - // Delete data from collections - DatabaseManager.getGameDatabase().getCollection("activities").deleteMany(eq("uid",player.getUid())); - DatabaseManager.getGameDatabase().getCollection("homes").deleteMany(eq("ownerUid",player.getUid())); - DatabaseManager.getGameDatabase().getCollection("mail").deleteMany(eq("ownerUid", player.getUid())); - DatabaseManager.getGameDatabase().getCollection("avatars").deleteMany(eq("ownerId", player.getUid())); - DatabaseManager.getGameDatabase().getCollection("gachas").deleteMany(eq("ownerId", player.getUid())); - DatabaseManager.getGameDatabase().getCollection("items").deleteMany(eq("ownerId", player.getUid())); - DatabaseManager.getGameDatabase().getCollection("quests").deleteMany(eq("ownerUid", player.getUid())); - DatabaseManager.getGameDatabase().getCollection("battlepass").deleteMany(eq("ownerUid", player.getUid())); - - // Delete friendships. - // Here, we need to make sure to not only delete the deleted account's friendships, - // but also all friendship entries for that account's friends. - DatabaseManager.getGameDatabase().getCollection("friendships").deleteMany(eq("ownerId", player.getUid())); - DatabaseManager.getGameDatabase().getCollection("friendships").deleteMany(eq("friendId", player.getUid())); - - // Delete the player last. - DatabaseManager.getGameDatastore().find(Player.class).filter(Filters.eq("id", player.getUid())).delete(); } + // Delete data from collections + DatabaseManager.getGameDatabase().getCollection("activities").deleteMany(eq("uid",player.getUid())); + DatabaseManager.getGameDatabase().getCollection("homes").deleteMany(eq("ownerUid",player.getUid())); + DatabaseManager.getGameDatabase().getCollection("mail").deleteMany(eq("ownerUid", player.getUid())); + DatabaseManager.getGameDatabase().getCollection("avatars").deleteMany(eq("ownerId", player.getUid())); + DatabaseManager.getGameDatabase().getCollection("gachas").deleteMany(eq("ownerId", player.getUid())); + DatabaseManager.getGameDatabase().getCollection("items").deleteMany(eq("ownerId", player.getUid())); + DatabaseManager.getGameDatabase().getCollection("quests").deleteMany(eq("ownerUid", player.getUid())); + DatabaseManager.getGameDatabase().getCollection("battlepass").deleteMany(eq("ownerUid", player.getUid())); - // Finally, delete the account itself. - DatabaseManager.getAccountDatastore().find(Account.class).filter(Filters.eq("id", target.getId())).delete(); + // Delete friendships. + // Here, we need to make sure to not only delete the deleted account's friendships, + // but also all friendship entries for that account's friends. + DatabaseManager.getGameDatabase().getCollection("friendships").deleteMany(eq("ownerId", player.getUid())); + DatabaseManager.getGameDatabase().getCollection("friendships").deleteMany(eq("friendId", player.getUid())); + + // Delete the player last. + DatabaseManager.getGameDatastore().find(Player.class).filter(Filters.eq("id", player.getUid())).delete(); + + // Finally, delete the account itself. + DatabaseManager.getAccountDatastore().find(Account.class).filter(Filters.eq("id", target.getId())).delete(); } public static List getAllPlayers() {