Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update gc to 3.3 #1981

Merged
merged 8 commits into from
Dec 23, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
delete music game
  • Loading branch information
Simplxss committed Dec 22, 2022
commit a69ece69577a716477168040deadf4ebaa3ad1dd
1 change: 1 addition & 0 deletions src/main/java/emu/grasscutter/database/DatabaseHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,7 @@ public static PlayerActivityData getPlayerActivityData(int uid, int activityId)
public static void savePlayerActivityData(PlayerActivityData playerActivityData) {
DatabaseManager.getGameDatastore().save(playerActivityData);
}

public static MusicGameBeatmap getMusicGameBeatmap(long musicShareId) {
return DatabaseManager.getGameDatastore().find(MusicGameBeatmap.class)
.filter(Filters.eq("musicShareId", musicShareId))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import emu.grasscutter.game.activity.PlayerActivityData;
import emu.grasscutter.game.props.ActivityType;
import emu.grasscutter.net.proto.ActivityInfoOuterClass;
import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.UgcMusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.MusicGameActivityDetailInfoOuterClass;
import emu.grasscutter.utils.JsonUtils;

Expand All @@ -29,15 +29,15 @@ public void onProtoBuild(PlayerActivityData playerActivityData, ActivityInfoOute
.putAllMusicGameRecordMap(
musicGamePlayerData.getMusicGameRecord().values().stream()
.collect(Collectors.toMap(MusicGamePlayerData.MusicGameRecord::getMusicId, MusicGamePlayerData.MusicGameRecord::toProto)))
.addAllPersonCustomBeatmap(musicGamePlayerData.getPersonalCustomBeatmapRecord().values().stream()
.map(MusicGamePlayerData.CustomBeatmapRecord::toPersonalBriefProto)
.map(MusicBriefInfoOuterClass.MusicBriefInfo.Builder::build)
.toList())

.addAllOthersCustomBeatmap(musicGamePlayerData.getOthersCustomBeatmapRecord().values().stream()
.map(MusicGamePlayerData.CustomBeatmapRecord::toOthersBriefProto)
.map(MusicBriefInfoOuterClass.MusicBriefInfo.Builder::build)
.toList())
// .addAllPersonCustomBeatmap(musicGamePlayerData.getPersonalCustomBeatmapRecord().values().stream()
// .map(MusicGamePlayerData.CustomBeatmapRecord::toPersonalBriefProto)
// .map(UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder::build)
// .toList())
//
// .addAllOthersCustomBeatmap(musicGamePlayerData.getOthersCustomBeatmapRecord().values().stream()
// .map(MusicGamePlayerData.CustomBeatmapRecord::toOthersBriefProto)
// .map(UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder::build)
// .toList())
.build());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import dev.morphia.annotations.Entity;
import dev.morphia.annotations.Id;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.net.proto.MusicBeatmapListOuterClass;
import emu.grasscutter.net.proto.MusicBeatmapNoteOuterClass;
import emu.grasscutter.net.proto.MusicBeatmapOuterClass;
import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.UgcMusicRecordOuterClass;
import emu.grasscutter.net.proto.UgcMusicNoteOuterClass;
import emu.grasscutter.net.proto.UgcMusicTrackOuterClass;
import emu.grasscutter.net.proto.UgcMusicBriefInfoOuterClass;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
Expand Down Expand Up @@ -43,40 +43,39 @@ public void save(){
DatabaseHelper.saveMusicGameBeatmap(this);
}

public static List<List<BeatmapNote>> parse(List<MusicBeatmapListOuterClass.MusicBeatmapList> beatmapItemListList) {
public static List<List<BeatmapNote>> parse(List<UgcMusicTrackOuterClass.UgcMusicTrack> beatmapItemListList) {
return beatmapItemListList.stream()
.map(item -> item.getBeatmapNoteListList().stream()
.map(item -> item.getMusicNoteListList().stream()
.map(BeatmapNote::parse)
.toList())
.toList();
}

public MusicBeatmapOuterClass.MusicBeatmap toProto(){
return MusicBeatmapOuterClass.MusicBeatmap.newBuilder()
public UgcMusicRecordOuterClass.UgcMusicRecord toProto(){
return UgcMusicRecordOuterClass.UgcMusicRecord.newBuilder()
.setMusicId(musicId)
.addAllBeatmapItemList(beatmap.stream()
.addAllMusicTrackList(beatmap.stream()
.map(this::musicBeatmapListToProto)
.toList())
.build();
}

public MusicBriefInfoOuterClass.MusicBriefInfo.Builder toBriefProto(){
public UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder toBriefProto(){
var player = DatabaseHelper.getPlayerByUid(authorUid);

return MusicBriefInfoOuterClass.MusicBriefInfo.newBuilder()
return UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.newBuilder()
.setMusicId(musicId)
.setMusicNoteCount(musicNoteCount)
.setMusicShareId(musicShareId)
// .setMusicNoteCount(musicNoteCount)
.setUgcGuid(musicShareId)
.setMaxScore(maxScore)
.setShareTime(createTime)
.setAuthorNickname(player.getNickname())
.setVersion(1)
;
// .setShareTime(createTime)
.setCreatorNickname(player.getNickname())
.setVersion(1);
}

private MusicBeatmapListOuterClass.MusicBeatmapList musicBeatmapListToProto(List<BeatmapNote> beatmapNoteList){
return MusicBeatmapListOuterClass.MusicBeatmapList.newBuilder()
.addAllBeatmapNoteList(beatmapNoteList.stream()
private UgcMusicTrackOuterClass.UgcMusicTrack musicBeatmapListToProto(List<BeatmapNote> beatmapNoteList){
return UgcMusicTrackOuterClass.UgcMusicTrack.newBuilder()
.addAllMusicNoteList(beatmapNoteList.stream()
.map(BeatmapNote::toProto)
.toList())
.build();
Expand All @@ -90,15 +89,15 @@ public static class BeatmapNote{
int startTime;
int endTime;

public static BeatmapNote parse(MusicBeatmapNoteOuterClass.MusicBeatmapNote note){
public static BeatmapNote parse(UgcMusicNoteOuterClass.UgcMusicNote note){
return BeatmapNote.of()
.startTime(note.getStartTime())
.endTime(note.getEndTime())
.build();
}

public MusicBeatmapNoteOuterClass.MusicBeatmapNote toProto(){
return MusicBeatmapNoteOuterClass.MusicBeatmapNote.newBuilder()
public UgcMusicNoteOuterClass.UgcMusicNote toProto(){
return UgcMusicNoteOuterClass.UgcMusicNote.newBuilder()
.setStartTime(startTime)
.setEndTime(endTime)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.MusicGameBasicData;
import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.UgcMusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.MusicGameRecordOuterClass;
import lombok.AccessLevel;
import lombok.Builder;
Expand Down Expand Up @@ -61,25 +61,25 @@ public static class CustomBeatmapRecord {
int score;
boolean settle;

public MusicBriefInfoOuterClass.MusicBriefInfo.Builder toPersonalBriefProto() {
public UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder toPersonalBriefProto() {
var musicGameBeatmap = MusicGameBeatmap.getByShareId(musicShareId);

return MusicBriefInfoOuterClass.MusicBriefInfo.newBuilder()
.setCanShare(true)
.setCreateTime(musicGameBeatmap.getCreateTime())
return UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.newBuilder()
// .setCanShare(true)
// .setCreateTime(musicGameBeatmap.getCreateTime())
.setMusicId(musicGameBeatmap.getMusicId())
.setMaxScore(musicGameBeatmap.getMaxScore())
.setPosition(musicGameBeatmap.getSavePosition())
.setMusicNoteCount(musicGameBeatmap.getMusicNoteCount())
.setMusicShareId(musicShareId);
// .setPosition(musicGameBeatmap.getSavePosition())
// .setMusicNoteCount(musicGameBeatmap.getMusicNoteCount())
.setUgcGuid(musicShareId);
}

public MusicBriefInfoOuterClass.MusicBriefInfo.Builder toOthersBriefProto() {
public UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder toOthersBriefProto() {
var musicGameBeatmap = MusicGameBeatmap.getByShareId(musicShareId);

return musicGameBeatmap.toBriefProto()
.setScore(score)
.setSettle(settle)
// .setScore(score)
// .setSettle(settle)
;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,66 +1,66 @@
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()));
}

}
//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()));
// }
//
//}
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
package emu.grasscutter.server.packet.recv;

import emu.grasscutter.game.activity.musicgame.MusicGameBeatmap;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameGetBeatmapReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketMusicGameGetBeatmapRsp;

@Opcodes(PacketOpcodes.MusicGameGetBeatmapReq)
public class HandlerMusicGameGetBeatmapReq extends PacketHandler {

@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = MusicGameGetBeatmapReqOuterClass.MusicGameGetBeatmapReq.parseFrom(payload);

var musicGameBeatmap = MusicGameBeatmap.getByShareId(req.getMusicShareId());

if(musicGameBeatmap == null){
return;
}

session.send(new PacketMusicGameGetBeatmapRsp(
musicGameBeatmap.toBriefProto().build(),
musicGameBeatmap.toProto(),
req
));
}

}
//package emu.grasscutter.server.packet.recv;
//
//import emu.grasscutter.game.activity.musicgame.MusicGameBeatmap;
//import emu.grasscutter.net.packet.Opcodes;
//import emu.grasscutter.net.packet.PacketHandler;
//import emu.grasscutter.net.packet.PacketOpcodes;
//import emu.grasscutter.net.proto.MusicGameGetBeatmapReqOuterClass;
//import emu.grasscutter.server.game.GameSession;
//import emu.grasscutter.server.packet.send.PacketMusicGameGetBeatmapRsp;
//
//@Opcodes(PacketOpcodes.MusicGameGetBeatmapReq)
//public class HandlerMusicGameGetBeatmapReq extends PacketHandler {
//
// @Override
// public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
// var req = MusicGameGetBeatmapReqOuterClass.MusicGameGetBeatmapReq.parseFrom(payload);
//
// var musicGameBeatmap = MusicGameBeatmap.getByShareId(req.getMusicShareId());
//
// if(musicGameBeatmap == null){
// return;
// }
//
// session.send(new PacketMusicGameGetBeatmapRsp(
// musicGameBeatmap.toBriefProto().build(),
// musicGameBeatmap.toProto(),
// req
// ));
// }
//
//}
Loading