默认皮肤集合枚举(DefaultPlayerSkin.Set)

基本信息

属性 值
类型 Java 枚举
完整限定名 roadhog360.simpleskinbackport.core.DefaultPlayerSkin.Set
枚举值数量 3(不含 NONE 常量)
文件位置 core/DefaultPlayerSkin.java

功能

DefaultPlayerSkin.Set 定义 SimpleSkinBackport 提供给"无自定义皮肤"玩家使用的默认皮肤集合。每个枚举值都封装了一个 PlayerSkin 列表 + 选择算法 + 描述文本。

枚举值对比

STEVE_ONLY

核心差异:仅有一个皮肤。

唯一皮肤:PlayerSkin(false, "steve") —— wide 臂 Steve。

选择逻辑:直接返回唯一皮肤,无 UUID 计算。

适用场景:服务器希望所有玩家统一外观、追求最经典观感、避免任何随机分布带来的混淆。

STEVE_ALEX

核心差异:双皮肤,按 UUID 哈希决定。

皮肤列表:STEVE(wide)、ALEX(slim)。

选择逻辑:index & 1 —— 即 UUID 哈希最低位为 1 时返回 Alex(slim),否则 Steve(wide)。这是 1.8~1.19.2 的官方选择算法。

适用场景:现代客户端(1.19.3+)的服务器希望下传至 1.7.10 时,玩家外观与最新版一致。

ALL_DEFAULTS

核心差异:18 个皮肤(9 名字 × slim/wide),1.19.3+ 风格。

皮肤列表:依次为 alex/ari/efe/kai/makena/noor/steve/sunny/zuri 的 slim 版本(索引 0~8)+ 同样 9 个名字的 wide 版本(索引 9~17)。

选择逻辑:Math.floorMod(index, 18) —— Math.floorMod 确保负数索引也能正确取余(与 1.19.3+ 一致)。

适用场景:服务器希望最大化玩家多样性,或迁移自现代版 Minecraft。

枚举字段对比

字段 STEVE_ONLY STEVE_ALEX ALL_DEFAULTS
skins.size() 1 2 18
getEntryFromIndex 分支 size == 1 直接返回 size == 2 取 index & 1 size > 2 取 floorMod(index, size)
描述(getDescription()) “The only default skin will be Steve, the tried-and-true classic player model. His arms will always be wide.” “The default skins will either be wide-armed Steve or slim-armed Alex, as it was in 1.8 to 1.19.2.” “Steve, Alex, and all of the new 1.19.3 default skins will be assigned. They all can appear in slim or wide armed variants.”
选 Slim 概率 0% 50%(取决于 UUID 哈希) 50%(9/18 = 50% slim/wide 各半,但集合内 slim/wide 各 9 个)

静态字段

字段 类型 含义
DEFAULT_SKINS PlayerSkin[18] 所有默认皮肤的扁平数组,索引 0~8 = slim、9~17 = wide
ALEX PlayerSkin(slim) DEFAULT_SKINS[0],方便引用
STEVE PlayerSkin(wide) DEFAULT_SKINS[15],方便引用
NULL_UUID UUID UUID.randomUUID(),当传入的 UUID 为 null 时使用,避免 NullPointerException
NONE String 字面常量 "NONE",仅在 ConfigModCompat.TFgiantSkinSet 中作为"不启用"标记使用

静态方法

Set valueOfOrNull(String value)

属性 值
返回值 匹配 name() 的枚举值;找不到时返回 null
与标准 valueOf 的差异 标准 valueOf 找不到时抛 IllegalArgumentException;此方法返回 null

用途:ConfigModCompat 使用此方法读取配置 —— 用户配置项允许 "NONE" 字符串(表示不开启 mixin),这并非枚举值,因此 valueOf 会抛异常,必须用 valueOfOrNull。

默认皮肤数组 DEFAULT_SKINS 索引表

索引 slim/wide 名字
0 slim alex
1 slim ari
2 slim efe
3 slim kai
4 slim makena
5 slim noor
6 slim steve
7 slim sunny
8 slim zuri
9 wide alex
10 wide ari
11 wide efe
12 wide kai
13 wide makena
14 wide noor
15 wide steve
16 wide sunny
17 wide zuri

资源位置

每个 PlayerSkin 的 getResource() 延迟构造 ResourceLocation:

<domain>/textures/entity/player/<slim? "slim" : "wide">/<skinName>.png

mod 内置的资源(src/main/resources/assets/minecraft/textures/entity/player/{slim,wide}/*.png)覆盖了所有 18 个组合。

第三方 mod 集成

无直接依赖。DefaultPlayerSkin 是 mod 内部 API,通过 ConfigMain.defaultSkinSet 与 ConfigModCompat.TFgiantSkinSet 被消费。

相关条目