# 内置函数(Built-in Functions)
r21u12 的 CSS 编译环境会在作者代码之前注入 CSSIntrinsics.dragonbuiltin。本页列出的辅助函数无需由作者执行 include,主要用于查询引擎编码的游戏状态,或解码保留内置 Uniform中的枚举与位域。
# 使用范围
这些辅助函数在内部读取 MaterialID(vec4)。作者无需为调用这些函数另行声明 MaterialID。其编码内容取决于当前根类型:
- MaterialID.x 保存材质、层或类型信息;
- MaterialID.y 保存水下、着火、冰冻、附魔和通电等状态位。
函数仅在表格注明的根类型上具有规格所述含义。开发者不应在其他根类型上依赖这些函数的返回值。
# 游戏状态
以下函数读取 MaterialID.y 中的状态位。只有当前根类型及其背后材质写入了相应状态位时,返回值才具有对应含义。
| 函数签名 | 返回类型 | 说明 |
|---|---|---|
| isUnderwater() | bool | 表面是否处于水下 |
| isOnFire() | bool | 是否着火 |
| isFrozen() | bool | 是否冰冻 |
| isEnchanted() | bool | 是否附魔 |
| isEnchantedOrCharged() | bool | 检查与 isEnchanted() 相同的状态位(当前命名同时包含 Charged) |
| isPowered() | bool | 是否通电或充能 |
# 资源类型
类型查询函数返回资源标识符的哈希。开发者判断具体类型时,应将返回值与 str_hash("<资源标识符>") 的结果比较,不应在代码中依赖哈希数值本身。
| 函数签名 | 返回类型 | 适用目标 | 说明 |
|---|---|---|---|
| getActorType() | int | Actor | 当前实体类型哈希 |
| getItemType() | int | ItemInHand | 当前手持物品类型哈希 |
| getParticleType() | int | Particle | 当前粒子类型哈希 |
| str_hash(string) | int | 编译期 | 将资源标识符字面量转换为可比较哈希 |
传给 str_hash 的资源标识符必须与目标资源的实际标识符一致。
# 子表面
| 函数签名 | 返回类型 | 适用目标 | 说明 |
|---|---|---|---|
| isSky() | bool | Sky / EndSky | 是否为主世界或下界天空 |
| isEndSky() | bool | Sky / EndSky | 是否为末地星空 |
| isMoon() | bool | SunMoon | 是否为月亮 |
| isSun() | bool | SunMoon | 是否为太阳 |
| isRain() | bool | Weather | 当前天气表面是否为雨 |
| isSnow() | bool | Weather | 当前天气表面是否为雪 |
# 地形层
以下函数均返回 bool,只适用于 Terrain 目标。
| 函数 | 地形层 |
|---|---|
| isTerrainOpaque() | 不透明层 |
| isTerrainOpaqueSeasons() | 带季节着色的不透明层 |
| isTerrainAlpha() | Alpha 测试层 |
| isTerrainAlphaSingleSide() | 单面 Alpha 测试层 |
| isTerrainAlphaSeasons() | 带季节着色的 Alpha 测试层 |
| isTerrainBlend() | 半透明混合层 |
| isTerrainDoubleSide() | 双面渲染层 |
| isTerrainBlendFar() | 远景半透明混合层 |
| isTerrainFar() | 远景层 |
| isTerrainFarSeasons() | 带季节着色的远景层 |
| isTerrainFarSeasonsAlpha() | 带季节着色的远景透明层 |
| isTerrainDeferredWater() | 延迟水面层 |
| isTerrainRaytracedWater() | 光线追踪水面层 |
| isTerrainLight() | 光照层 |
| isTerrainLightSource() | 光源层 |
| isTerrainBarrier() | 屏障方块层 |
| isTerrainStructureVoid() | 结构空位层 |
| isTerrainEndPortal() | 末地传送门层 |
上述函数只区分 Terrain 的渲染层,不提供具体方块类型。r21u12 的内置函数列表中没有 getBlockType()。
# 维度
参数应传入 int(MinecraftDimensionID)。
| 函数签名 | 返回类型 | 说明 |
|---|---|---|
| isDimensionOverworld(int) | bool | 是否为主世界 |
| isDimensionNether(int) | bool | 是否为下界 |
| isDimensionTheEnd(int) | bool | 是否为末地 |
# 天气
参数应传入 int(MinecraftWeatherID)。
| 函数签名 | 返回类型 | 说明 |
|---|---|---|
| weatherHasRain(int) | bool | 是否包含雨 |
| weatherHasSnow(int) | bool | 是否包含雪 |
| weatherHasPlankton(int) | bool | 是否包含浮游生物 |
| weatherHasRedSpores(int) | bool | 是否包含红色孢子 |
| weatherHasBlueSpores(int) | bool | 是否包含蓝色孢子 |
| weatherHasAsh(int) | bool | 是否包含灰烬 |
| weatherHasWwhiteAsh(int) | bool | 是否包含白色灰烬 |
r21u12 中的函数标识符是 weatherHasWwhiteAsh(包含两个连续的 w)。调用时必须使用该标识符的原始拼写。
# 月相
参数应传入 int(MinecraftMoonPhase)。
| 函数签名 | 返回类型 | 说明 |
|---|---|---|
| isFullMoon(int) | bool | 满月 |
| isWaningGibbousMoon(int) | bool | 亏凸月 |
| isFirstQuarterMoon(int) | bool | 上弦月 |
| isWarningCresentMoon(int) | bool | 残月 |
| isNewMoon(int) | bool | 新月 |
| isWaxingCresentMoon(int) | bool | 娥眉月 |
| isLastQuarterMoon(int) | bool | 下弦月 |
| isWaxingGibbousMoon(int) | bool | 盈凸月 |
r21u12 中的函数标识符是 isWarningCresentMoon 和 isWaxingCresentMoon。调用时必须使用上述原始拼写。
# 标准 GLSL 函数
CSS 代码还可以直接使用标准 GLSL 函数,例如 mix、clamp、dot、normalize、texture、sin 和 cos。这些函数属于 GLSL 语言能力,不属于 ShaderSDK 专有 API,因此本页不重复列出完整语言参考。
# 兼容性
这些 CSS 专有辅助函数描述的是 r21u12 当前实现。用于解码 Upgradeable: No 保留内置 Uniform 的辅助函数不提供跨版本兼容保证。开发者升级项目版本时,如果项目调用了这些函数,应对照目标版本的规格和内置函数定义确认函数名称、参数、返回值与语义,并在必要时修改调用代码。
← 保留内置 Uniform(Built-in Uniforms) 根类型与材质映射 →
网易大神
扫码下载网易大神