feat: 榜单同步服务端(读stats+网络包下发)
BoardSyncPayload自定义包,BoardSyncManager读原版stats(挖掘总数/死亡数)构建Top10排行。顺带补回之前漏掉的BotListManager.load()。
This commit is contained in:
1 parent
993001c4ef
commit
fba85271f4
4 files changed
+201
No files matched your search
@@ -0,0 +1,47 @@
|
||||
package com.github.zly2006.carpetslsaddition.net;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 服务端 → 客户端:同步排行榜数据。
|
||||
*
|
||||
* <p>携带某一种榜单(死亡/挖掘)的完整排行:条目为 (玩家名, 分数),已按分数降序。
|
||||
* 客户端收到后缓存,供 HUD 渲染。
|
||||
*/
|
||||
public record BoardSyncPayload(String board, List<Entry> entries) implements CustomPacketPayload {
|
||||
|
||||
/** 单条排行数据。 */
|
||||
public record Entry(String name, int score) {
|
||||
public static final StreamCodec<RegistryFriendlyByteBuf, Entry> CODEC = StreamCodec.composite(
|
||||
ByteBufCodecs.STRING_UTF8, Entry::name,
|
||||
ByteBufCodecs.VAR_INT, Entry::score,
|
||||
Entry::new
|
||||
);
|
||||
}
|
||||
|
||||
public static final CustomPacketPayload.Type<BoardSyncPayload> TYPE =
|
||||
CustomPacketPayload.createType("slsa:board_sync");
|
||||
|
||||
public static final StreamCodec<RegistryFriendlyByteBuf, BoardSyncPayload> CODEC = StreamCodec.composite(
|
||||
ByteBufCodecs.STRING_UTF8, BoardSyncPayload::board,
|
||||
Entry.CODEC.apply(ByteBufCodecs.list()), BoardSyncPayload::entries,
|
||||
BoardSyncPayload::new
|
||||
);
|
||||
|
||||
@Override
|
||||
public CustomPacketPayload.Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
/** 在 onInitialize 里调用,注册 payload 类型。 */
|
||||
public static void register() {
|
||||
net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry.playS2C().register(TYPE, CODEC);
|
||||
ServerMain.LOGGER.info("[SLSA] registered BoardSyncPayload");
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user