PacketReport.java

net.minecraft.data.info.PacketReport

信息

  • 全限定名:net.minecraft.data.info.PacketReport
  • 类型:public class
  • 包:net.minecraft.data.info
  • 源码路径:src/main/java/net/minecraft/data/info/PacketReport.java
  • 起始行号:L19
  • 实现:DataProvider
  • 职责:

    TODO

字段/常量

  • output
    • 类型: PackOutput
    • 修饰符: private final
    • 源码定位: L20
    • 说明:

      TODO

内部类/嵌套类型

构造器

public PacketReport(PackOutput output) @ L22

  • 构造器名:PacketReport
  • 源码定位:L22
  • 修饰符:public

参数:

  • output: PackOutput

说明:

TODO

方法

下面的方法块按源码顺序生成。

public CompletableFuture<?> run(CachedOutput cache) @ L26

  • 方法名:run
  • 源码定位:L26
  • 返回类型:CompletableFuture<?>
  • 修饰符:public

参数:

  • cache: CachedOutput

说明:

TODO

private JsonElement serializePackets() @ L32

  • 方法名:serializePackets
  • 源码定位:L32
  • 返回类型:JsonElement
  • 修饰符:private

参数:

说明:

TODO

public String getName() @ L63

  • 方法名:getName
  • 源码定位:L63
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

代码

public class PacketReport implements DataProvider {
    private final PackOutput output;
 
    public PacketReport(PackOutput output) {
        this.output = output;
    }
 
    @Override
    public CompletableFuture<?> run(CachedOutput cache) {
        Path path = this.output.getOutputFolder(PackOutput.Target.REPORTS).resolve("packets.json");
        return DataProvider.saveStable(cache, this.serializePackets(), path);
    }
 
    private JsonElement serializePackets() {
        JsonObject protocols = new JsonObject();
        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((protocolId, flows) -> {
                JsonObject protocolData = new JsonObject();
                protocols.add(protocolId.id(), protocolData);
                flows.forEach(flow -> {
                    JsonObject protocolFlowData = new JsonObject();
                    protocolData.add(flow.flow().id(), protocolFlowData);
                    flow.listPackets((type, networkId) -> {
                        JsonObject packetInfo = new JsonObject();
                        packetInfo.addProperty("protocol_id", networkId);
                        protocolFlowData.add(type.id().toString(), packetInfo);
                    });
                });
            });
        return protocols;
    }
 
    @Override
    public String getName() {
        return "Packet Report";
    }
}

引用的其他类