minecraft-src/net/minecraft/data/info/PacketReport.java
2025-07-04 03:45:38 +03:00

69 lines
2.4 KiB
Java

package net.minecraft.data.info;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.nio.file.Path;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.data.PackOutput.Target;
import net.minecraft.network.ProtocolInfo;
import net.minecraft.network.protocol.configuration.ConfigurationProtocols;
import net.minecraft.network.protocol.game.GameProtocols;
import net.minecraft.network.protocol.handshake.HandshakeProtocols;
import net.minecraft.network.protocol.login.LoginProtocols;
import net.minecraft.network.protocol.status.StatusProtocols;
public class PacketReport implements DataProvider {
private final PackOutput output;
public PacketReport(PackOutput output) {
this.output = output;
}
@Override
public CompletableFuture<?> run(CachedOutput output) {
Path path = this.output.getOutputFolder(Target.REPORTS).resolve("packets.json");
return DataProvider.saveStable(output, this.serializePackets(), path);
}
private JsonElement serializePackets() {
JsonObject jsonObject = new JsonObject();
((Map)Stream.of(
HandshakeProtocols.SERVERBOUND_TEMPLATE,
StatusProtocols.CLIENTBOUND_TEMPLATE,
StatusProtocols.SERVERBOUND_TEMPLATE,
LoginProtocols.CLIENTBOUND_TEMPLATE,
LoginProtocols.SERVERBOUND_TEMPLATE,
ConfigurationProtocols.CLIENTBOUND_TEMPLATE,
ConfigurationProtocols.SERVERBOUND_TEMPLATE,
GameProtocols.CLIENTBOUND_TEMPLATE,
GameProtocols.SERVERBOUND_TEMPLATE
)
.map(ProtocolInfo.DetailsProvider::details)
.collect(Collectors.groupingBy(ProtocolInfo.Details::id)))
.forEach((connectionProtocol, list) -> {
JsonObject jsonObject2 = new JsonObject();
jsonObject.add(connectionProtocol.id(), jsonObject2);
list.forEach(details -> {
JsonObject jsonObject2x = new JsonObject();
jsonObject2.add(details.flow().id(), jsonObject2x);
details.listPackets((packetType, i) -> {
JsonObject jsonObject2xx = new JsonObject();
jsonObject2xx.addProperty("protocol_id", i);
jsonObject2x.add(packetType.id().toString(), jsonObject2xx);
});
});
});
return jsonObject;
}
@Override
public String getName() {
return "Packet Report";
}
}