Add async bulk saving of objects

This commit is contained in:
KingRainbow44
2023-09-09 20:41:53 -04:00
Unverified
parent 2efa022d83
commit 3c3adea406
8 changed files with 209 additions and 37 deletions
@@ -1,11 +1,10 @@
package emu.grasscutter.game.player;
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
import dev.morphia.annotations.*;
import emu.grasscutter.*;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.avatar.AvatarSkillDepotData;
import emu.grasscutter.database.Database;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.props.*;
@@ -23,9 +22,12 @@ import emu.grasscutter.server.packet.send.*;
import emu.grasscutter.utils.Utils;
import it.unimi.dsi.fastutil.ints.*;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import lombok.*;
import java.util.*;
import java.util.stream.Stream;
import lombok.*;
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
@Entity
public final class TeamManager extends BasePlayerDataManager {
@@ -404,7 +406,7 @@ public final class TeamManager extends BasePlayerDataManager {
// Unload removed entities
for (var entity : existingAvatars.values()) {
this.getPlayer().getScene().removeEntity(entity);
entity.getAvatar().save();
entity.getAvatar().save(true);
}
// Set new selected character index
@@ -965,11 +967,13 @@ public final class TeamManager extends BasePlayerDataManager {
return respawnPoint.get().getPointData().getTranPos();
}
/**
* Performs a bulk save operation on all avatars.
*/
public void saveAvatars() {
// Save all avatars from active team
for (EntityAvatar entity : this.getActiveTeam()) {
entity.getAvatar().save();
}
Database.saveAll(this.getActiveTeam().stream()
.map(EntityAvatar::getAvatar)
.toList());
}
public void onPlayerLogin() { // Hack for now to fix resonances on login