// package emu.grasscutter.server.packet.recv; // // import emu.grasscutter.database.DatabaseHelper; // import emu.grasscutter.game.activity.musicgame.MusicGameActivityHandler; // import emu.grasscutter.game.activity.musicgame.MusicGameBeatmap; // import emu.grasscutter.game.activity.musicgame.MusicGamePlayerData; // import emu.grasscutter.game.props.ActivityType; // import emu.grasscutter.net.packet.Opcodes; // import emu.grasscutter.net.packet.PacketHandler; // import emu.grasscutter.net.packet.PacketOpcodes; // import emu.grasscutter.net.proto.MusicGameCreateBeatmapReqOuterClass; // import emu.grasscutter.server.game.GameSession; // import emu.grasscutter.server.packet.send.PacketActivityInfoNotify; // import emu.grasscutter.server.packet.send.PacketMusicGameCreateBeatmapRsp; // import emu.grasscutter.utils.Utils; // // import java.util.Objects; // // @Opcodes(PacketOpcodes.MusicGameCreateBeatmapReq) // public class HandlerMusicGameCreateBeatmapReq extends PacketHandler { // // @Override // public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { // var req = MusicGameCreateBeatmapReqOuterClass.MusicGameCreateBeatmapReq.parseFrom(payload); // // var musicGameBeatmap = MusicGameBeatmap.of() // .musicId(req.getMusicBriefInfo().getMusicId()) // .musicNoteCount(req.getMusicBriefInfo().getMusicNoteCount()) // .savePosition(req.getMusicBriefInfo().getPosition()) // .maxScore(req.getMusicBriefInfo().getMaxScore()) // .authorUid(session.getPlayer().getUid()) // .beatmap(MusicGameBeatmap.parse(req.getMusicRecord().getBeatmapItemListList())) // .createTime(Utils.getCurrentSeconds()) // .build(); // // musicGameBeatmap.save(); // // var playerData = // session.getPlayer().getActivityManager().getPlayerActivityDataByActivityType(ActivityType.NEW_ACTIVITY_MUSIC_GAME); // if(playerData.isEmpty()){ // return; // } // // var handler = (MusicGameActivityHandler) playerData.get().getActivityHandler(); // var musicGamePlayerData = handler.getMusicGamePlayerData(playerData.get()); // // var oldBeatmap = musicGamePlayerData.getPersonalCustomBeatmapRecord().values().stream() // .map(MusicGamePlayerData.CustomBeatmapRecord::getMusicShareId) // .map(DatabaseHelper::getMusicGameBeatmap) // .filter(Objects::nonNull) // .filter(item -> item.getAuthorUid() == session.getPlayer().getUid()) // .filter(item -> item.getMusicId() == req.getMusicBriefInfo().getMusicId()) // .filter(item -> item.getSavePosition() == req.getMusicBriefInfo().getPosition()) // .findFirst(); // // // delete old beatmap for player // // the old beatmap is still in database so that others can still play. // oldBeatmap.ifPresent(i -> handler.removePersonalBeatmap(playerData.get(), i)); // // // link this beatmap to player's personal data // handler.addPersonalBeatmap(playerData.get(), musicGameBeatmap); // // session.send(new PacketActivityInfoNotify(handler.toProto(playerData.get()))); // session.send(new PacketMusicGameCreateBeatmapRsp(musicGameBeatmap.getMusicShareId(), // req.getUnknownEnum1())); // } // // }