/*
* This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
* Copyright (C) 2021-2023 FlorianMichael/MrLookAtMe (EnZaXD) and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package de.florianmichael.viafabricplus.information.impl;
import com.viaversion.viaversion.api.connection.UserConnection;
import de.florianmichael.viafabricplus.definition.bedrock.storage.JoinGameStorage;
import de.florianmichael.viafabricplus.definition.bedrock.ModelFormats;
import de.florianmichael.viafabricplus.information.AbstractInformationGroup;
import de.florianmichael.viafabricplus.util.ScreenUtil;
import de.florianmichael.vialoadingbase.platform.ProtocolRange;
import net.lenni0451.reflect.stream.RStream;
import net.lenni0451.reflect.stream.field.FieldStream;
import net.raphimc.viabedrock.api.BedrockProtocolVersion;
import net.raphimc.viabedrock.api.chunk.BedrockChunk;
import net.raphimc.viabedrock.api.model.entity.Entity;
import net.raphimc.viabedrock.protocol.storage.BlobCache;
import net.raphimc.viabedrock.protocol.storage.ChunkTracker;
import net.raphimc.viabedrock.protocol.storage.GameSessionStorage;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class BedrockInformation extends AbstractInformationGroup {
public BedrockInformation() {
super(ProtocolRange.singleton(BedrockProtocolVersion.bedrockLatest));
}
@Override
public void applyInformation(UserConnection userConnection, List output) {
final BlobCache blobCache = userConnection.get(BlobCache.class);
if (blobCache != null) {
final long totalSize = blobCache.getTotalSize();
final int blobCount = blobCache.getBlobCount();
final int pendingCount = blobCache.getPendingCount();
if (totalSize != 0 || blobCount != 0 || pendingCount != 0) {
output.add("Blob Cache:");
}
if (totalSize != 0) output.add("Total size: " + ScreenUtil.formatBytes(totalSize));
if (blobCount != 0) output.add("Blob count: " + blobCount);
if (pendingCount != 0) output.add("Pending count: " + pendingCount);
}
final ChunkTracker chunkTracker = userConnection.get(ChunkTracker.class);
if (chunkTracker != null) {
final FieldStream fields = RStream.of(chunkTracker).fields();
final int subChunkRequests = fields.by("subChunkRequests").>get().size();
final int pendingSubChunks = fields.by("pendingSubChunks").>get().size();
final int chunks = fields.by("chunks").