mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-05-23 18:19:55 +08:00
75 lines
3.7 KiB
Java
75 lines
3.7 KiB
Java
package emu.grasscutter.server.packet.send;
|
|
|
|
import emu.grasscutter.game.tower.TowerManager;
|
|
import emu.grasscutter.game.tower.TowerSystem;
|
|
import emu.grasscutter.net.packet.BasePacket;
|
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
|
import emu.grasscutter.net.proto.TowerAllDataRspOuterClass.TowerAllDataRsp;
|
|
import emu.grasscutter.net.proto.TowerCurLevelRecordOuterClass.TowerCurLevelRecord;
|
|
import emu.grasscutter.net.proto.TowerFloorRecordOuterClass.TowerFloorRecord;
|
|
import emu.grasscutter.net.proto.TowerLevelRecordOuterClass;
|
|
import emu.grasscutter.utils.helpers.DateHelper;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.IntStream;
|
|
|
|
public class PacketTowerAllDataRsp extends BasePacket {
|
|
|
|
public PacketTowerAllDataRsp(TowerSystem towerScheduleManager, TowerManager towerManager) {
|
|
super(PacketOpcodes.TowerAllDataRsp);
|
|
|
|
var recordList =
|
|
towerManager.getRecordMap().values().stream()
|
|
.map(
|
|
rec ->
|
|
TowerFloorRecord.newBuilder()
|
|
.setFloorId(rec.getFloorId())
|
|
.setFloorStarRewardProgress(rec.getFloorStarRewardProgress())
|
|
.putAllPassedLevelMap(rec.getPassedLevelMap())
|
|
.addAllPassedLevelRecordList(
|
|
buildFromPassedLevelMap(rec.getPassedLevelMap()))
|
|
.build())
|
|
.toList();
|
|
|
|
var openTimeMap =
|
|
towerScheduleManager.getScheduleFloors().stream()
|
|
.collect(
|
|
Collectors.toMap(
|
|
x -> x,
|
|
y ->
|
|
DateHelper.getUnixTime(
|
|
towerScheduleManager.getTowerScheduleConfig().getScheduleStartTime())));
|
|
|
|
TowerAllDataRsp proto =
|
|
TowerAllDataRsp.newBuilder()
|
|
.setTowerScheduleId(towerScheduleManager.getCurrentTowerScheduleData().getScheduleId())
|
|
.addAllTowerFloorRecordList(recordList)
|
|
.setCurLevelRecord(TowerCurLevelRecord.newBuilder().setIsEmpty(true))
|
|
.setScheduleStartTime(
|
|
DateHelper.getUnixTime(
|
|
towerScheduleManager.getTowerScheduleConfig().getScheduleStartTime()))
|
|
.setNextScheduleChangeTime(
|
|
DateHelper.getUnixTime(
|
|
towerScheduleManager.getTowerScheduleConfig().getNextScheduleChangeTime()))
|
|
.putAllFloorOpenTimeMap(openTimeMap)
|
|
.setIsFinishedEntranceFloor(towerManager.canEnterScheduleFloor())
|
|
.build();
|
|
|
|
this.setData(proto);
|
|
}
|
|
|
|
private List<TowerLevelRecordOuterClass.TowerLevelRecord> buildFromPassedLevelMap(
|
|
Map<Integer, Integer> map) {
|
|
return map.entrySet().stream()
|
|
.map(
|
|
item ->
|
|
TowerLevelRecordOuterClass.TowerLevelRecord.newBuilder()
|
|
.setLevelId(item.getKey())
|
|
.addAllSatisfiedCondList(
|
|
IntStream.range(1, item.getValue() + 1).boxed().toList())
|
|
.build())
|
|
.toList();
|
|
}
|
|
}
|