Skip to content

纹理定义文件

文件里定义文件(即 *-texture.txt 文件)提供了三组数据键:

  • 所需纹理及载入方式
  • 每种自定义方块应用的纹理,以及应用的方式(如随群系改变颜色、旋转、分层等)
  • 在模组提供的自定义生物群系中,还有额外属性决定群系纹理的渲染方式。

定义纹理文件

在 Minecraft 的历史中,有多种定义纹理的标准,且会在部分版本中更迭(如 1.5 和稍后的 1.6)。为了适应这些变化,定义代称由此引入。

1.6 之后的纹理定义

在 Minecraft 1.6 之后,大部分内置资源都是位于 assets/minecraft/textures/blocks 文件夹的单独文件(在 Minecraft JAR 本体或zip 格式的资源包中)。对于 1.6 之后的 Minecraft Forge 模组,纹理资源一般位于模组文件(zip 或 jar)下的 assets/<模组名称>/textures/blocks<模组名称> 为小写的英文模组名称)。为了指定载入纹理的相对路径,纹理文件里必须出现 texturepath: 这一设置。设置之后,插件就会使用对应路径获取纹理(或者直到下一个 texturepath 的值被读取之前——这个路径会用作额外纹理)。例如,1.6 之后的超多生物群系(Biomes O' Plenty)纹理路径即为:

txt
  texturepath:assets/biomesoplenty/textures/blocks/

指定路径后,渲染方块的纹理需要通过指定 texture: 设置单独载入。格式如下:

txt
  texture:id=<纹理 ID>

ID 是在定义文件内引用纹理的名称,是文件名称的基础构成部分,用于载入纹理文件(加在 texturepath 的末尾,带上 .png 后缀——例如,ID 为 test123 在这一示例配置下指向的文件即为 assets/biomesoplenty/textures/blocks/test123.png)。若 ID 与文件名称有所区别,那么可以这样指定:

txt
  texture:id=<纹理 ID>,filename=<完整文件名称>

例如:

txt
  texture:id=test123.id,filename=assets/biomesoplenty/textures/blocks/tes123.png

对于某些需要多个纹理的情况,可以指定需要贴图的水平(xcount 设置)及垂直(ycount 设置)延伸数量:

txt
  texture:id=<纹理 ID>,xcount=<xcount>,ycount=<ycount>

在这个情况下,载入后的文件会按设置分割成小片。独立贴图会按行列序号命名:<从零开始的列号>+<xcount 的值>*<从零开始的列号>:因此,左上角的一个贴图为 0,第二个则为 1,以此类推。直到第二行第一个(xcount 的序号会发生变化)。单独的纹理文件(默认)只会用到序号 0。

部分纹理文件格式较为特殊:在文件内定义了纹理的位置,而非简单的网格(例如,玩家或实体纹理文件,以及箱子)。在这种情况下,可浏览“特殊纹理文件类型”了解更多内容。format 属性用于决定文件的排布:

txt
  texture:id=<纹理 ID>,format=<文件格式>

1.5 之前的纹理定义

1.5 与 1.6 版本的纹理定义类似,但部分键有所区别:

  • 原版纹理位于客户端(或资源包)的 textures/blocks 文件夹下。
  • Forge 模组的纹理一般位于 zip 或 jar 文件内的 mods/<模组名称>/textures/blocks 文件夹中。

以 1.5 的模组为例,texturemod: 可以用于指定纹理来源模组的名称(即 mods/.../textures/blocks<模组名称> 的值)。若未指定,则使用 modname: 一行的设置代替。因此,对于 1.5 版本的模组,可以这样写:

txt
  texturemod:<模组名称>

这种写法等价于:

txt
  texturepath:mods/<模组名称>/textures/blocks/

除此之外,纹理的定位与格式都与 1.6 之后的配置相同。注意:使用 texturepath 设置会忽略后面的 texturemod 的设置。

1.4 之前的纹理定义

在 1.4.7 或更早版本的纹理定义一般只需在一张图中切出 16x16 像素的小图(等价于 xcountycount 均为 16 的设置)。对于这类文件,一般更经常使用 texturefile。这个设置与 texture 相同,不过 xcountycount 的默认值为 16(前者则均为 1)。

在 1.5.x 之前,定位模组纹理资源并没有统一的标准,因此必须填入 texturepath,或指定 texturefiletexture 的名称属性。。

纹理引用

载入了所需纹理之后,还需要用一系列方法指定纹理映射到不同模组的方块表面上。所有对指定纹理的引用都是通过纹理文件内的序号(如果只有单独纹理,那么总为 0)与其在 texturetexturefile 下的 id 属性结合实现的。大体上看,格式如下:

txt
  <序号>:<纹理 ID>

在所有方块的设置中,有一个选项可以用来指定默认纹理 ID,作为那些缺少了 :<纹理 ID> 后缀方块使用的默认纹理,即 txtid 属性。txtid=<纹理 ID> 属性引用了 <序号> 后与 <序号>:<纹理 ID> 等同。相对应的纹理序号值范围为 0-999。

除了选择使用的纹理外,纹理引用也可以指定一系列修改功能,决定纹理在渲染时的行为。这些修改功能是在 <序号> 部分添加一系列特殊值(均为 1000 的倍数)实现的。这些值可以是:

  • 1000:对草方块类方块使用基于群系的颜色(1.6 版本后为 assets/minecraft/textures/colormap/grass.png)进行渲染
  • 2000:对树叶、植被类方块使用基于群系的颜色(1.6 版本后为 assets/minecraft/textures/colormap/foliage.png)进行渲染
  • 3000:对水体使用基于群系的颜色(1.6 版本后为 assets/minecraft/mcpatcher/colormap/water.png,通过 MCPatcher 或 Optifine)进行渲染
  • 4000:纹理顺时针旋转 90 度
  • 5000:纹理顺时针旋转 180 度
  • 6000:纹理顺时针旋转 270 度
  • 7000:纹理水平翻转(从左到右)
  • 8000:纹理向下移动 50%
  • 9000:纹理向下移动 50%,再水平翻转
  • 10000:纹理用于倾斜火把(特殊情况)
  • 11000:纹理为草方块侧面(用于群系染色,及覆雪状态的特殊情况)
  • 12000:纹理相邻同类方块时,接触面为透明状态(例如玻璃、水体)
  • 13000:纹理使用云杉树叶的颜色渲染
  • 14000:纹理使用白桦树叶的颜色渲染
  • 15000:纹理使用睡莲的颜色渲染
  • 17000:纹理使用 colorMult 属性的值或 custColorMult 属性指定的类(分别指定)渲染
  • 18000:纹理顺时针旋转 270(6000),使用草方块类型基于群系颜色的渲染方式(1000)
  • 19000:纹理顺时针旋转 270(6000),使用植被类型基于群系颜色的渲染方式(2000)
  • 20000:纹理顺时针旋转 270(6000),使用水体类型基于群系颜色的渲染方式(3000)
  • 21000:纹理使用多色渲染(17000)及相邻面剔除渲染(12000)
  • 22000:纹理使用多色渲染(17000及植被类型基于群系颜色的渲染方式(2000)

方块 ID 数字

纹理对指定方块的定义需要通过给定方块类型使用的 ID 鉴别。游戏自带的方块 ID 目前是固定的,而所有 Forge 模组的方块则由配置文件决定。这些 ID 通过 cfgfie 属性指定(关于这个属性及从配置文件映射设置实现使用符号名称的相关解释,请见“纹理与模型定义文件的通用功能”章节)。在所有方块定义设置中,方块 ID 都是通过 id= 属性指定的。它的值可以为数字(常量),或对应模组配置文件的符号名称,或符号名称后接 + 与数字的组合。在所有情况下,若 ID 小于等于 0,那么忽略它的设置(使得被禁用方块可以直接忽略)。

定义方块纹理映射

  • 定义简单的实心方块,请见“定义简单方块”章节。
  • 定义非一般方块的长方体模型,请见“定义立方体模型”章节。
  • 定义基于自定义方块渲染器的方块,请见“定义自定义渲染器方块”
  • 定义基于体积方块模型的方块,请见“定义体积模型方块”

贡献者

页面历史