高清修复(OptiFine)/文档
阅读
2020-12-22更新
最新编辑:SQwatermark
阅读:
更新日期:2020-12-22
最新编辑:SQwatermark
此文档适合:想要制作具有高度自定义内容的资源包的人,想要魔改基于OptiFine的资源包的人
首先你要对Minecraft原版的资源包有一定了解,如果你想从基础学起,建议看看Minecraft wiki的 "资源包" 章节。
如果此文档有误或未及时更新,请帮忙更正/更新。
以下标题均可点击:
属性文件说明
概述|Overview
OptiFine的许多功能需要用到属性文件,它们控制OptiFine调用资源包中的图片。
属性文件是与 Windows 的 ".ini" 格式相似的简单文本文件,它的文件扩展名为properties。除了注释行之外,文件中的每一行都表示一个属性,格式为 属性名=值
。
译注:建议使用notepad++之类的代码编辑器来编辑属性文件,确认编码为UTF-8格式,不建议使用记事本
# 这里是一个注释 属性1=值 属性2=某个其他值 # 属性文件时可以空行的 属性3=另一个其他值
所有属性名都区分大小写,"renderpass" 与 "renderPass" 是不相同的。
同一个文件中,属性排列的顺序没有影响。
许多属性有默认值,你可以省略这些属性,而有些情况下整个属性文件都不是必需的。
详见每个属性文件的各个小节。
很多属性文件中使用了一些相同的对象。下面对它们作出说明,在其余文件中就不再赘述了。
材质|Textures
OptiFine常常会要求你指定一个路径,指向某个图形文件或者其他资源。 这指的是材质包的zip文件(或者文件夹)中的路径。
材质包中的文件夹结构可以深度嵌套。所以OptiFine提供了一些便捷的方法来简化操作。 如果OptiFine要求你提供一个文件,你可以使用下列任意一种方法。
最直接的方法是指出文件相对于 assets/minecraft 的路径:
# 全称路径 texture=textures/entity/creeper/creeper.png
这表示在材质包的zip文件或文件夹中的 "assets/minecraft/textures/entity/creeper/creeper.png"。 请始终使用斜杠 "/" 分隔文件夹。无论你的操作系统是什么,都不要使用反斜杠 "\",否则OptiFine将无法正确识别路径。
你可以添加一个 "命名空间(namespace)" 前缀。下面的例子表示和上例完全一样的 "creeper.png" :
# 带有命名空间的全称路径 texture=minecraft:textures/entity/creeper/creeper.png
模组的命名空间通常不是 "minecraft",在这种情况下你必须写出命名空间:
# 带有模组命名空间的全称路径 texture=herobrine:textures/entity/him.png
这表示 "assets/herobrine/textures/entity/him.png",而不是 "assets/minecraft/textures/entity/him.png"。
特定用于 OptiFine 的材质应该放在 "assets/minecraft/optifine" 文件夹中。 由于被频繁使用,它可以被波浪号 "~" 表示。
下面两个表示同一文件 (注意,在1.12之前的版本中,~表示mcpatcher文件夹,下面不再赘述)
# 相对于 "assets/minecraft/optifine" texture=~/dial/clock0.png texture=minecraft:optifine/dial/clock0.png
也可以使用属性文件的相对路径。 例如,在 "~/dial/clock.properties" 中 (记住 "~" = "assets/minecraft/optifine")
# 相对路径: 没有斜线的单独文件名 texture=clock0.png # 相对路径: 使用 "./" 来表示当前目录 texture=./clock0.png # 绝对路径: 使用 "~" texture=~/dial/clock0.png # 绝对路径: 无命名空间 texture=optifine/dial/clock0.png # 绝对路径: 有命名空间 texture=minecraft:optifine/dial/clock0.png
都表示同一个路径:"assets/minecraft/optifine/dial/clock0.png"。 如果属性文件在另一个位置,例如 ~/misc,那么相对路径将基于该文件夹,但是绝对路径仍然指向dial文件夹。
总而言之,请尽量把属性文件和它所用到的材质放在同一个路径下。你需要写的路径会更短,当你需要移动文件时,也会感到方便许多。
方块|Blocks
从1.7开始,Minecraft可以用字符串ID表示方块。 从1.13起方块的数字ID被移除,只能使用字符串ID。
虽然数字ID仍然存在于游戏内部,但由于它们不稳定,所以不能在配置文件中指定。 例如,以前你可以用1指代石头方块,但现在你得用 "minecraft:stone"。和材质一样,前缀 "minecraft:" 是可省略的,所以只有 "stone" 也是可以的。模组的命名空间并非 "minecraft",在这种情况下需要前缀。
参阅Dinnerbone的方块、物品ID和名称列表: http://media.dinnerbone.com/uploads/2013-09/files/28_00-44-23_YfmAkomVI.txt
在1.13中,许多有复杂变体的方块被 "扁平化" 为几个简单方块,方块的元数据(metadata)被删除。 参阅 https://minecraft.gamepedia.com/1.13/Flattening (中文链接:https://minecraft-zh.gamepedia.com/1.13/扁平化)
方块名的格式为 <命名空间:>name<:属性1=值1,...:属性2=值1,...>
。
尖角括号 "<>" 中为可选部分。默认命名空间为 "minecraft"。
# 简称 blocks=oak_stairs # 全称 blocks=minecraft:oak_stairs # 模组方块要求使用全称 blocks=botania:crate # 属性 blocks=minecraft:oak_stairs:facing=east,west:half=bottom
前缀 "minecraft:" 是可省略的,所以这也可以写为:
# 属性 blocks=oak_stairs:facing=east,west:half=bottom
物品|Items
从1.7开始物品可以被名称(字符串ID)指定。
参阅Dinnerbone的方块、物品ID和名称列表: http://media.dinnerbone.com/uploads/2013-09/files/28_00-44-23_YfmAkomVI.txt
从1.13开始物品只能被名称(字符串ID)指定。
参阅: https://minecraft.gamepedia.com/1.13/Flattening
重申,前缀 "minecraft:" 是可省略的
生物群系|Biomes
需要列出生物群系时,请使用Minecraft wiki给出的名称: https://minecraft.gamepedia.com/Biome#Biome_IDs (中文链接:https://minecraft-zh.gamepedia.com/生物群系#生物群系ID) 也可以使用由模组添加的生物群系。
# 生物群系简称 biomes=ocean deep_ocean river beach # 生物群系全称 biomes=minecraft:ocean biomesoplenty:highland
从1.13起,许多生物群系被重命名了。 参阅: https://minecraft.gamepedia.com/1.13/Flattening
混合方法|Blending methods
当两个或多个材质组合在一起时,OptiFine提供了几种混合方法。
下面描述了有效的混合方法。"当前材质" 表示正在使用这个混合方法的材质。 "原材质" 表示到目前为止已经渲染出的东西,可能是单张材质,也可能是之前的混合操作得到的结果。
- replace: 用当前材质完全替换原材质。没有任何混合,只有透明与不透明的选项。
- alpha: 按照当前材质的透明度混合材质。这是最常见的混合方法。
- overlay: RGB 值大于0.5 时,会使原图片变亮,小于0.5时变暗。这个方法别名为color。
- add: 将当前材质的RGB值乘alpha值,将所得的结果加到原材质上。
- subtract: 从原材质减去当前材质的RGB值。
- multiply: 将当前材质和原材质的RGB值相乘。
- dodge: 将当前材质的RGB值直接加到原材质上。
- burn: 新RGB = (1 - 当前RGB) * 原RGB
- screen: 新RGB = 1 - (1 - 当前RGB) * (1 - 原RGB)
你可以从维基百科的Blend modes词条获取一些参考图片: https://en.wikipedia.org/wiki/Blend_modes
数字列表|Number lists
有时你需要指定一个数字列表。OptiFine可以识别范围和单个数值:
# 单个数值 list=1 # 分别列出的多个数值 list=1 2 3 # 用范围表示的相同数值 list=1-3 # 多个范围 list=1-3 6 8 10-15 # 开放式范围 damage=100-
RGB颜色|RGB colors
颜色可以用16进制RGB值表示:
# 白色 color=ffffff # 黑色 color=000000 # 红色 color=ff0000 # 绿色 color=00ff00 # 蓝色 color=0000ff
参考文献|References
- https://bitbucket.org/prupe/mcpatcher/wiki/About_Properties_Files
- http://media.dinnerbone.com/uploads/2013-09/files/28_00-44-23_YfmAkomVI.txt
- https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/resource-packs/1226351-1-8-7-1-7-10-and-earlier-update-4-23-mcpatcher-hd?page=424#c11315
- https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/resource-packs/1226351-1-8-7-1-7-10-and-earlier-update-4-23-mcpatcher-hd?page=417#c11128
- https://minecraft.gamepedia.com/1.13/Flattening
连接材质
CTM|Connected Textures mod
连接材质,原先是MCPatcher的功能,它提供了一系列连接方块材质的方法。
如果你想要某个方块(block)或者图块(tile)覆盖上连接材质或者随机材质, 请在材质包的optifine/ctm文件夹下新建一个后缀为.properties的文件。 属性(properties)文件可以放在optifine/ctm的任意一层子文件夹下。
译注:这里所谓的 "图块(tile)" 指的就是assets里面的一张张图片,虽然译名标准化里tile是不翻译的,但是tile在某些情境下可以翻译成"方块",为了避免混淆,还是按照感觉给出个译名。
针对不同需求和限制,可以使用不同的连接方块材质的方法。 下面将介绍如何使用每种方法。
所有属性名称都区分大小写。 除非另有说明,否则所有的路径都相对于assets/minecraft。
公共属性|General properties
- (可选) 列出这个方法所应用于的方块/图块
同一个方块/图块可以有多个属性文件,它们会按照文件名的字母顺序依次加载。
所有针对图块的属性文件会在针对方块的属性文件之前被检测,第一个匹配的属性文件会被加载。
matchTiles=<需要匹配的图块列表>
表示原版mc中的图块,只需要使用它在textures/block中的文件名:
matchTiles=dirt
表示模组添加的图块,你需要知道模组的名字:
matchTiles=botania:blazeblock
译注:我使用1.12版本似乎测试出了不一样的结论,如果你用这种格式出现错误,请尝试 modid:blocks/...
一个CTM规则输出的图块还可以被另一个规则匹配。图块名称就是指向图块的完整路径
matchTiles=optifine/ctm/mygrass/1.png
方块格式 (<>内为可选部分)
<命名空间:>名称<:属性1=值1,值2...:属性2=值1,值2...>
例如:
- 简称:
oak_stairs
- 全名:
minecraft:oak_stairs
- 名称+属性:
minecraft:oak_stairs:facing=east,west:half=bottom
matchBlocks=<方块列表 + 可选属性>
如果可以从文件名判断这两个属性,则可以省略它们:
- optifine/ctm/xxx/<name>.properties 默认
matchTiles=<name>
- optifine/ctm/xxx/block_<name>.properties 默认
matchBlocks=<name>
除非你明确指定某个属性。
- (可选) metadata
限制匹配的方块的metadata,可以是 0 到 31 的任意值。
仅限 1.13 之前的版本
metadata=<metadata 列表>
- (可选) 权重
如果多个属性文件匹配相同的方块,会使用拥有最大权重的属性文件。如果权重相同,会接着比较属性文件名。默认的权重为0。
译注:此属性已失效。
weight=<整数>
- (必需) 选择替换材质的方法
可选的方法:
- ctm: 标准8方向方法 (例如原始的ctm玻璃), 使用47个图块
- ctm_compact: 简化8方向方法, 使用5个图块
- horizontal: 只连接到侧面的方块 (例如书架)
- vertical: 只连接到上方和下方的方块
- horizontal+vertical: 优先水平连接, 无法水平连接时才垂直连接
- vertical+horizontal: 优先垂直连接, 无法垂直连接时才水平连接
- top: 仅连接到上方的方块 (例如砂岩)
- random: 随机选择图块
- repeat: 大面积重复固定的图案
- fixed: 使用单个固定图块. 相当于只设置一个图块的随机
- overlay: 用于方块间过渡的覆盖层, 使用17个图块
- overlay_ctm: 方法"ctm"的overlay变体
- overlay_random: 方法"random"的overlay变体
- overlay_repeat: 方法"repeat"的overlay变体
- overlay_fixed: 方法"fixed"的overlay变体
如果overlay方法的处理顺序在其他方法之前,则可以将它们与其他方法组合在一起。(按照字母顺序)
方法"ctm_compact"和任何overlay方法都不兼容。
method=<方法名>
- (必需) 替换图块的列表
就像地面和物品材质,每一个图块必须是一张独立的图片,
可以用以下几种格式来表示图块:
- 0 -> 0.png
- 8-11 -> 8.png, 9.png, 10.png, 11.png
- name -> 文件名.png
- name.png -> 文件名.png
- <skip> -> 跳过图块,继续使用下一个CTM属性
- <default> -> 对方块/图块使用默认材质
- full/path/name.png -> 完整路径/文件名.png
除了最后一种格式,png文件必须和属性文件在同一个根目录下。
这些格式可以混合搭配,例如:
tiles=0-4 5 some/other/name.png
对于要跳过的空图块,overlay方法可以使用特殊的名称 "<skip>"。
overlay方法不能使用图块名称 "<default>"。
tiles=<图块列表>
- (可选) 连接类型
即连接到毗邻方块的方法, 指定游戏应该如何决定是否应该连接两个方块。
- block: 当这个方块的id = 相邻方块的id时连接
- tile: 当这个方块的图块 = 相邻方块的图块时连接
- material: 当这个方块的材料 (stone, dirt, etc.) = 相邻方块的材料时连接
- state: 当方块状态 (block + properties) = 相邻方块的状态时连接
基于方块的属性文件默认为block;基于图块的属性文件默认为tile。
connect=<block | tile | material | state>
- (可选) 面
将方法的作用范围限制在方块确定的面。
- bottom: 底面 (负y).
- top: 顶面 (正y).
- north: 北面 (负z).
- south: 南面 (正z).
- east: 东面 (正x).
- west: 西面 (负x).
- sides: "东面 西面 南面 北面" 的总称.
- all: 所有面.
不规则方块会忽视这个属性.
faces=<以下的组合: north south east west top bottom sides all>
- (可选) 生物群系和高度范围
限制为特定生物群系或高度范围。
这里列出了原版生物群系ID: https://minecraft.gamepedia.com/Biome#Biome_IDs
也可以使用模组添加的生物群系。
旧属性 "minHeight" 和 "maxHeight" 也可以被识别。
biomes=<生物群系列表> heights=<高度范围>
- (可选) 名字
只适用于具有对应的可命名的方块实体值的方块。
例如:
- beacon(信标) brewing_stand(酿造台) enchanting_table(附魔台) furnace(熔炉) dispenser(发射器) dropper(投掷器) hopper(漏斗)
关于匹配名称的语法,参阅 "custom_guis.properties"。
name=<名字>
下文所有内容都针对特定连接材质方法。每一个.properties文件都应该仅包含下列小节之一。
标准CTM方法|Standard 8-way connected textures
method=ctm
- (必需) 47个图块
tiles=<47 tiles>
- (可选) 连接相邻方块时,是否显示内边缘接缝;
innerSeams=false
模板:
译注:如果你疑惑为什么需要这么多张图片,不妨亲自尝试一下
简化CTM方法|Compact 8-way connected textures
method=ctm_compact
译注:此方法不适用于玻璃板,详见 https://github.com/sp614x/optifine/issues/463
- (必需) 5个图块;
tiles=<5 tiles>
- (可选) 连接相邻方块时,是否显示内边缘接缝
innerSeams=false
模板:
有特例的简化CTM方法|Compact 8-way connected textures with special cases
method=ctm_compact
- (必需) 5个图块;
tiles=<5 tiles> <额外的图块>
- (可选) 简化CTM图块替换
允许为特定CTM实例定义替换图块。
- <ctm_index> 是ctm_template.png中CTM实例的序号 (0-46)
- <tile_index> 是在 "tiles" 中定义的图块的序号 (不是文件名!)
使用 "ctm_compact" 你可以定义超过5个图块,可以使用更多图块作为替代。
ctm.<ctm_index>=<tile_index>
水平连接材质|Horizontal-only connected textures
method=horizontal
- (必需) 4个图块
tiles=<4 tiles>
模板:
垂直连接材质|Vertical-only connected textures
method=vertical
- (必需) 4个图块
tiles=<4 tiles>
模板:
顶部连接材质|Top connected textures
method=top
- (必需) 只需要1个图块
tiles=<单个图块>
随机材质|Random textures
method=random
- (必需) 任意数量的图块
tiles=<图块列表>
- (可选) 权重
例如,如果
tiles=6-11 weights=10 1 10 2 7 3
那么图块6和8的权重为10,图块7权重为1,以此类推。
权重之和不必为100或任何其他特定值。 在上面的例子中,图块6和图块8的使用频率分别为大约30.3%(10/(10+1+10+2+7+3)),依此类推。
weights=<对应的权重>
- (可选) 随机循环
用于增加随机性的重复随机函数的次数。可以使不同的材质使用不同的随机样式。
较高的值可能会降低区块加载速度。
默认值为0。
randomLoops=<0-9>
- (可选) 方块的各个面的对称性
只适用于标准的六面体方块。
- none: 所有6个面都是独立材质。这是默认值。
- opposite: 双向对称;相反的面有相同的材质,但其他面可能有不同的材质。
- all: 六个面拥有相同的材质。
symmetry=<none | opposite | all>
- (可选) 相邻方块之间的材质连接
如果为true,OptiFine对所有多方块对象的所有部分使用相同的随机数种子,例如高草丛的顶部和底部。
这允许你为多方块对象创建统一的随机材质。
如果该属性为false,这两部分会被 "打乱",也就是,单独选择这两部分的随机材质。
注: 要使其正常工作,你需要多个links=true
的属性文件,以及相同数量的替换材质和相同数量的权重。
例如,
double_plant_top.properties:
method=random tiles=grass_top1 grass_top2 grass_top3 weights=1 2 3 linked=true
double_plant_bottom.properties:
method=random tiles=grass_bottom1 grass_bottom2 grass_bottom3 weights=1 2 3 linked=true
默认值为false。该连接属性目前仅适用于植物(例如甘蔗)、两格高的植物和门。
linked=<true | false>
重复图案材质|Repeat pattern textures
method=repeat
- (必需) 重复图案的宽度
width=<图案宽度>
- (必需) 重复图案的高度
height=<图案高度>
- (必需) 图块列表
(也就是按从左到右,从上到下的顺序列出所有图块)
tiles=<图块列表>
- (可选)方块的各个面的对称性
只适用于标准的六面体方块。默认值为none
- none: 图像从所有方向看上去都是一样的。
- opposite: 相对的面具有相同的材质,相邻的面镜像,与北面和西面相比,南面和东面的图块将左右镜像。
symmetry=<none | opposite>
固定材质|Fixed textures
method=fixed
- (必需) 单个图块
tiles=<单个图块>
覆盖材质|Overlay textures
method=overlay
- (可选) 连接图块
只连接使用指定图块的方块
connectTiles=<图块列表>
- (可选) 连接方块
只连接指定的方块
connectBlocks=<方块列表>
- (可选) Tint index
图块材质的Tint index,默认为-1 (禁用)
tintIndex=<index>
- (可选) Tint block
用于图块材质着色的方块。 对于相同的tint index,不同方块使用不同颜色。
tintBlock=<block>
- (可选) Layer
覆盖材质应该在哪一层上被渲染。
值:
- cutout_mipped - 有多级纹理的透明材质
- cutout - 没有多级纹理的透明材质
- translucent - 有多级纹理的半透明材质
默认为 "cutout_mipped"
layer=<cutout_mipped|cutout|translucent>
模板:
自然纹理
概述|Overview
让材质具有随机的旋转和翻转,可以创造出类似于随机材质的效果,避免方块的栅格感
译注:在制作CTM材质时,请务必注意有没有关闭对应方块的自然纹理
属性文件|natural.properties
路径: /assets/minecraft/optifine/natural.properties
格式:
<材质名称> = <值>
值:
- 4 = 旋转 x 90°(4种变体)
- 2 = 旋转 x 180°(2种变体)
- F = 水平翻转材质 (2种变体)
- 4F = 4 + F (8种变体)
- 2F = 2 + F (4种变体)
例子:黑曜石的材质,有四种旋转变体,并且可以翻转
obsidian = 4F
下面给出自然纹理的默认值
- 草方块
grass_block_side = F grass_block_side_overlay = F grass_block_snow = F mycelium_side = F mycelium_top = 4F grass_path_top = 4 grass_path_side = F
- 雪
snow = 4F
- 泥土
coarse_dirt = 4F podzol_top = 4F podzol_side = F farmland = 2F farmland_moist = 2F
- 石头
granite = 2F diorite = 2F andesite = 2F sandstone_top = 4 sandstone_bottom = 4F stone_slab_top = F end_stone = 4
- 砂砾
gravel = 2 clay = 4F
- 原木
oak_log = 2F spruce_log = 2F birch_log = F jungle_log = 2F acacia_log = 2F dark_oak_log = 2F oak_log_top = 4F spruce_log_top = 4F birch_log_top = 4F jungle_log_top = 4F acacia_log_top = 4F dark_oak_log_top = 4F
- 树叶
oak_leaves = 2F spruce_leaves = 2F birch_leaves = 2F jungle_leaves = 2 dark_oak_leaves = 2F acacia_leaves = 2F
- 矿石
gold_ore = 2F iron_ore = 2F coal_ore = 2F diamond_ore = 2F redstone_ore = 2F lapis_ore = 2F
- 下界
netherrack = 4F nether_quartz_ore = 2 soul_sand = 4F glowstone = 4
- 红石
redstone_lamp_on = 4F redstone_lamp = 4F
- 海晶石
prismarine = 4F
- 混合;
obsidian = 4F cactus_side = 2F
更好的草地
概述|Overview
让低坡度草地的侧面覆盖上草方块顶部的材质,可以在视频设置里开启或关闭。
属性文件|bettergrass.properties
位置: /assets/minecraft/optifine/bettergrass.properties
- 方块
设置特定方块是否启用更好的草地功能
grass=true grass_path=true mycelium=true podzol=true
- 积雪方块
设置特定积雪方块是否启用更好的草地功能
grass.snow=true mycelium.snow=true podzol.snow=true
- 多层草地侧面
- layer 1 = grass_side
- layer 2 = grass (由生物群系着色)
允许用透明草地材质做草地侧面的覆盖层
grass.multilayer=false
- 材质
更好的草地使用的材质贴图
"texture.grass" 由生物群系着色
texture.grass=block/grass_block_top texture.grass_side=block/grass_block_side texture.grass_path=block/grass_path_top texture.grass_path_side=block/grass_path_side texture.mycelium=block/mycelium_top texture.podzol=block/podzol_top texture.snow=block/snow
自定义物品材质
全局属性|cit.properties
基于MCPatcher的Custom Item Textures mod的配置
这个文件包含自定义物品材质的全局属性,它应该被放在材质包的 optifine/cit 文件夹下。
关于单个物品材质,参阅 cit_single.properties。
所有的属性名都区分大小写。
除非另作说明,所有的路径都相对于assets/minecraft。
- (可选) 如何对同一物品应用多个效果
根据所选择的方法,可以使用从0(不可见)到1(完全可见)的不同强度呈现多个效果。
average: 根据附魔等级加权平均。
- intensity = enchantment_level / sum(enchantment_levels)
layered: 类似于average,但使用的是max而不是sum。
- intensity = enchantment_level / max(enchantment_levels)
cycle:轮流显示每种效果,每种效果的持续时间都可以通过duration属性(在cit_single.properties中)设置。
- 如果存在[group]值,则可以独立循环多个效果。
注意average和cap=1的layered是等效的,两者都只显示物品上 "占主导地位" 的附魔。
method=<average | layered | cycle>
- (可选) average/layered方法可以渲染多少层
根据每种效果位于的层数(layer value),上面的层比下面的层具有更高的优先级。
cap=<count>
- (可选) 在cycle方法中一种效果转变为另一种效果的速度
对于有持续时间属性的效果,这并不影响实际效果的持续时间。默认值为5秒。
fade=<seconds>
- (可选) 是否使用默认的glink.png附魔效果
如果设置为true,则在没有自定义附魔效果时使用glink.png。
如果设置为false,默认的glink.png附魔效果将完全停止渲染。
这对没有特定附魔但有附魔效果的物品很重要,-- 比如药水和金苹果。
默认值为true。
useGlint=<true | false>
单个物品材质|cit_single.properties
基于MCPatcher的Custom Item Textures mod的配置
对于每一个想要使用自定义材质的物品,使用这个模板在材质包的optifine/cit文件夹下创建一个.properties文件。
属性(properties)文件可以放在optifine/cit的任意一层子文件夹下。
每个属性文件都指定一个匹配的物品ID或物品名列表,一个替换材质,和一系列可选的用于指定伤害、堆叠数或NBT标签的规则。
所有的属性名都区分大小写。
除非另作说明,所有的路径都相对于assets/minecraft。
通用属性|General properties
- (可选) 材质替换类型
item:
- 简单的物品材质替换。适用于GUI中的物品,手持的物品,和世界中的物品。
- 如果多个属性文件匹配相同的物品,只会使用第一个匹配的属性文件。
- (先按照权重排序,在权重相同的情况下按照物品名排序)
enchantment:
- 附魔的覆盖材质 (替换 misc/glint.png)。
- 如果多个属性文件匹配相同的物品,
- 它们将按照全局属性cit.properties文件中指定的规则来进行混合。
armor:
- 盔甲材质替换,应用于玩家和怪物穿戴的盔甲模型。
- 如果多个属性文件匹配相同的物品,只有第一个属性文件会被使用。
- (先按照权重排序,在权重相同的情况下按照物品名排序)
elytra:
- 鞘翅材质替换,应用于玩家和怪物穿戴的鞘翅模型。
- 如果多个属性文件匹配相同的物品,只有第一个属性文件会被使用。
- (先按照权重排序,在权重相同的情况下按照物品名排序)
默认类型为item。每种类型都有附加属性,它们将会在接下来的小节中提及。
type=<item | enchantment | armor | elytra>
使用替换材质的物品列表(对于 type=enchantment
类型可选,对于其他类型是必需的)
items=<物品ID列表>
- (可选) 替换材质
可以是完整路径也可以只是文件名:
- mytextures/excalibur.png -> mytextures/excalibur.png
- excalibur -> optifine/cit/excalibur.png
根据种类,包括动画在内的材质格式被通过不同方式处理。 详见下面的 "特定种类属性" 章节。
如果不提供任何材质,OptiFine将按照属性文件名在属性文件所在的同一层文件夹中寻找材质,
- optifine/cit/excalibur.properties -> optifine/cit/excalibur.png
texture=<替换材质>
- (可选) 损害值
仅当物品损害值是特定值或者在特定区间内时使用替换材质。
对于有耐久度的新物品,损害值从零开始,当使用它时损害值升高。(和耐久度相反且一一对应)
物品能承受的最大损害值各不相同,参阅 http://www.minecraftwiki.net/wiki/Item_durability
对于其它物品,损害值表示不同属性,例如药水类型或羊毛的颜色。详细信息请参阅 http://www.minecraftwiki.net/wiki/Data_values。
damage=<损害值 0-65535>
损害值也可以以百分比形式给出:
damage=0-50%
在按照符合条件的损害值列表对物品检查前应用于物品损害值的一个可选的位元掩码,例如,
匹配任何抗火药水:
damage=3 damageMask=15
匹配任何饮用的抗火药水:
damage=3 damageMask=16399
只匹配饮用的抗火药水I:
damage=3 damageMask=16447
只匹配喷溅型抗火药水II:
damage=16403 damageMask=16447
有关更简单的设置药水的方法,请参见本文件末尾的部分。
damageMask=<位元掩码>
- (可选) 堆叠数
仅当堆叠数是特定值或在特定范围内时使用备选材质。
stackSize=<堆叠数 0-65535>
- (可选) 附魔名称
附魔名称可以是简称 ("flame") 或全称 ("minecraft:flame")。
例如:
enchantments=minecraft:silk_touch sharpness smite
1.13版本后被废除的属性 enchantmentIDs
也可以被识别。
enchantments=<附魔名称>
- (可选) 附魔等级
enchantmentLevels=<附魔等级 0-255>
示例:
匹配任意等级的精准采集:
enchantmentIDs=33
匹配等级3或更高等级的火矢或火焰附加:
enchantmentIDs=flame minecraft:fire_aspect enchantmentLevels=3-
匹配任何附魔,所有附魔的总等级为8-10:
enchantmentLevels=8-10
- (可选) 物品在那只手中会被渲染
物品在GUI中显示时,被认为是在主手,默认值为 any
hand=any|main(主手)|off(副手)
- (可选) 基于NBT的规则
只有当NBT标签具有特定值时才使用替换材质。
如果提供了多个规则,则所有规则都必须匹配。
可以使用像NBTExplorer这样的实用程序来查看不同物品的NBT标签。
nbt.<tag>=<值>
目前只支持以下NBT类型:
- String, Integer, Short, Long, Double, Float - 仅匹配精确值
- Compound - 可以匹配一个特定标签或任意标签 (*)。
- List - 可以匹配一个特定序号(从0开始)或任意序号 (*)。
以 "!" 开头的值表示相反的匹配(非)。
整型也可以指定为十六进制颜色,例如#ff99cc
。
列表大小被命名为 count
。
示例:
匹配物品显示名:
nbt.display.Name=My Sword
使用特殊格式匹配物品显示名:
注: 为了获得最佳兼容性,请使用转义序列 \u00a7
而不是§
nbt.display.Name=\u00a74\u00a7oMy Sword
匹配物品的lore标签 (仅首行):
nbt.display.Lore.0=My Lore Text
匹配物品的lore标签 (所有行):
nbt.display.Lore.*=My Lore Text
字符串可以用多种方式匹配:
精确值
nbt.display.Name=Letter to Herobrine
精确匹配字符串 "Letter to Herobrine" 而不会匹配其他的。
使用通配符 ? 和 *
nbt.display.Name=pattern:Letter to *
匹配
- Letter to Herobrine
- Letter to a creeper
不匹配
- letter to Herobrine
通配符,不区分大小写
nbt.display.Name=ipattern:Letter to *
匹配
- Letter to Herobrine
- Letter to a creeper
- letter to Herobrine
Java正则表达式
(参考 http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html)
nbt.display.Name=regex:Letter (to|from) .*
匹配
- Letter to Herobrine
- Letter from Herobrine
不匹配
- letter to Herobrine
- A Letter to Herobrine
Java正则表达式,不区分大小写
nbt.display.Name=iregex:Letter (to|from) .*
匹配
- Letter to Herobrine
- Letter from Herobrine
- letter to Herobrine
不匹配
- A Letter to Herobrine
注: 任何反斜杠都必须写两遍。在正则表达式或通配符中的反斜杠必须写四遍。
正确:
nbt.display.name=regex:\\d+ nbt.display.name=regex:\\\\ nbt.display.name=/\\/\\
错误:
nbt.display.name=regex:\d+ nbt.display.name=regex:\\ nbt.display.name=/\/\
你可以用 "damage=0" 和NBT规则匹配有自定义效果的药水:
items=potion damage=0 nbt.CustomPotionEffects.0.Id=20
要覆盖默认的药水颜色,可以使用CustomPotionColor标记:
/give @p minecraft:potion 1 0 {CustomPotionEffects:[{Id:20,Amplifier:0,Duration:20}],CustomPotionColor:-1}
特定种类属性|Type-specific properties
物品|type=item
材质格式:
物品的替换材质是覆盖到原始的items.png上的,因此遵循与正常物品材质相同的规则。
尤其是,这意味着动画必须使用Mojang的.mcmeta文件系统来实现正常播放。
texture=<替换材质>
- (可选) 多张材质的替换
对于有多张材质的物品,这允许你为每张材质指定替换材质。例如,根据其状态,原版弓有四种可能的材质:bow_standby, bow_pulling_0, bow_pulling_1,bow_pulling_2.要替换全部四张,你可以使用:
texture.bow_standby=my_special_bow_standby texture.bow_pulling_0=my_special_bow_pulling_0 texture.bow_pulling_1=my_special_bow_pulling_1 texture.bow_pulling_2=my_special_bow_pulling_2
药水也有两张材质,要替换它们,使用
texture.potion_bottle_drinkable=...
或者
texture.potion_bottle_splash=... texture.potion_overlay=...
如果没有匹配的texture.<name>属性,则使用通用的texture属性。
texture.<name>=<替换材质>
- (可选) 替换模型
一个原版格式的Json物品模型 (http://minecraft.gamepedia.com/Model#Item_models)
- item/mymodel -> assets/minecraft/models/item/mymodel.json
- ./mymodel-> 和属性文件相同文件夹下的mymodel.json
模型可以从相同文件夹下引用材质,例如: "./mytexture"
model=<替换模型>
- (可选) 多个模型的替换
对于拥有多个模型的物品,这允许你为每个模型指定替换模型,例如:
model.bow_standby=my_special_bow_standby model.bow_pulling_0=my_special_bow_pulling_0 model.bow_pulling_1=my_special_bow_pulling_1 model.bow_pulling_2=my_special_bow_pulling_2
model.<name>=<替换模型>
- (可选) 权重
如果多个属性文件匹配相同的物品,会使用拥有最高权重的属性文件。
如果权重相同,会比较它们的属性文件名。默认权重为0。
weight=<整型>
附魔|type=enchantment
材质格式:
附魔材质可以是任何分辨率。
想要动态化一个附魔效果,则在anim/*.properties中使用如下方法
to=<附魔材质的完整路径> texture=<附魔材质>
- (可选) 将材质覆盖到底层材质时使用的混合方法
查看Better Skies(sky.properties)来获取有效的方法列表。默认为add。
blend=<混合方法>
- (可选) 材质的滚动速度
默认值为0 (无滚动)。
speed=<值>
(可选) 附魔材质相对于物品的角度
如果speed不为0,材质会沿这个方向滚动。默认值为0。
rotation=<0-360>
- (可选) layer
指定这个附魔效果在哪一层,以及层之间互相重叠时层的排序。
如果两个或更多效果使用同一层,权重决定那个效果会被渲染 (另一个不渲染)。
默认层为0 (最底层)。
layer=<整型>
- (可选) 权重
同一层内多种附魔效果的相对权重。
在所有符合条件的效果中,只有在同一层内拥有最高权重的附魔效果才会被渲染。
换言之,
- layer属性决定效果被渲染的顺序(ORDER)。
- weight属性决定每一层的哪一个(WHICH)效果会被渲染。
如果两个效果有相同的weight和layer,将会比较它们的文件名。
默认权重为0。
weight=<整型>
- (可选,仅用于cycles方法的附魔) 持续时间
附魔效果在一个周期内的持续时间,按秒计算。默认值为1秒。
duration=<秒>
盔甲|type=armor
材质格式:
替换材质应该符合对应的盔甲材质格式。
对于动态材质,则在anim/*.properties中使用如下方法
to=<替换材质的路径>
- (必需) 替换材质
你需要为textures/models/armor中该类型盔甲的所有材质创建替换材质。
对于钻石盔甲:
texture.diamond_layer_1=my_diamond_armor_1 texture.diamond_layer_2=my_diamond_armor_2
对于有四层的皮革盔甲:
texture.leather_layer_1=... texture.leather_layer_1_overlay=... texture.leather_layer_2=... texture.leather_layer_2_overlay=...
如果没有匹配的texture.<name>属性,则使用通用的texture属性。
texture.<name>=<替换纹理>
- (可选) 权重
如果多个属性文件匹配相同的盔甲,则使用拥有最大权重的那个。权重相同的情况下,会比较属性文件名,默认权重为0。
weight=<整型>
药水|potion
http://www.minecraftwiki.net/wiki/Data_values#Potions
你可以不指定药水损害值,而使用一种基于文件名的系统为药水指定替换材质。
注意这里描述的每一件事都可以(CAN)通过cit属性文件实现。
这只是一个快捷方式。
药水有三个目录:
- optifine/cit/potion/normal - 非喷溅药水
- optifine/cit/potion/splash - 喷溅药水
- optifine/cit/potion/linger - 滞留药水
在任一目录下,创建<药水效果名称>.png文件。不需要属性文件:
- absorption.png
- blindness.png
- confusion.png
- damageboost.png(*)
- digslowdown.png
- digspeed.png
- fireresistance.png (*)
- harm.png (*)
- heal.png (*)
- healthboost.png
- hunger.png
- invisibility.png (*)
- jump.png
- moveslowdown.png (*)
- movespeed.png(*)
- nightvision.png(*)
- poison.png (*)
- regeneration.png (*)
- resistance.png
- saturation.png
- waterbreathing.png
- weakness.png (*)
- wither.png
文件名与自定义颜色的color.properties文件中的 potion.* 属性相同。注意区分大小写。
只有标记了(*)的药水可以在游戏中直接获得。其他只能通过编辑器获得。
替换的png文件将会自动用于这种药水类型;不需要任何属性文件。
注意这替换了基础药水渲染中的potion.png/potion_splash.png和potion_contents.png两者(BOTH)。所以替换图像中一定要包括有颜色的液体。
类似地,你可以替换各种 "无效果" 药水的材质。
它们只有非喷溅版本,同样只有标记(*)的版本在游戏中实际存在。其余的都在代码中,这里列出只是为了完整起见。
- artless.png
- awkward.png(*)
- bland.png
- bulky.png
- bungling.png
- buttered.png
- charming.png
- clear.png
- cordial.png
- dashing.png
- debonair.png
- elegant.png
- fancy.png
- flat.png
- foul.png
- gross.png
- harsh.png
- milky.png
- mundane.png(*)
- odorless.png
- potent.png
- rank.png
- sparkling.png
- stinky.png
- suave.png
- thick.png(*)
- thin.png
- uninteresting.png
如果你宁愿所有的 "无效果" 药水都用一张单独的材质,这个文件可用于任何没有设置上列指定的替换材质的药水:
- optifine/cit/potion/normal/other.png
另外两个材质(非喷溅型)也可以设置:
- optifine/cit/potion/normal/water.png - 水瓶 (item 373:0)
- optifine/cit/potion/normal/empty.png - 玻璃瓶 (item 374)
随机实体材质
概述|Overview
随机实体材质基于MCPatcher的 Random Mobs 模组
可以向下兼容随机怪物(Random Mobs),仍然支持在 "assets/minecraft/optifine/mob" 中的材质和配置文件。
你可以把备选材质放在资源包的 "optifine/random" 文件夹下,和 "textures" 文件夹中的原版材质是对应的:
示例:
creeper:
基础材质:
- assets/minecraft/textures/entity/creeper/creeper.png
备选材质:
- assets/minecraft/optifine/random/entity/creeper/creeper2.png
- assets/minecraft/optifine/random/entity/creeper/creeper3.png
- assets/minecraft/optifine/random/entity/creeper/creeper4.png
诸如此类
属性文件 (可选):
- assets/minecraft/optifine/random/entity/creeper/creeper.properties
paintings_kristoffer_zetterstrand:
基础材质:
- assets/minecraft/textures/painting/paintings_kristoffer_zetterstrand.png
备选材质:
- assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand2.png
- assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand3.png
- assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand4.png
诸如此类
属性文件 (可选):
- assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand.properties
属性文件由一系列规则组成,这些规则从1开始编号。
每一组规则都指定了一些要使用的实体材质,以及一个或多个使用它们的条件。
单人游戏中怪物生成的坐标或者多人游戏中怪物第一次被玩家发现时的坐标会依次与每一条规则进行匹配,第一个匹配的规则将被使用。 如果没有匹配的规则,将使用默认材质 (例如 creeper.png)。
如果某个实体没有设置 ".properties" 文件,那么所有可以使用的皮肤都将应用于该实体。
有多张材质的实体将使用基础材质的 ".properties" 文件,也就是说,你不需要创建
- wolf.properties
- wolf_tame.properties
- wolf_angry.properties
如果每张材质都有相同数量的备选材质,只需要wolf.properties就可以应用于这三者。 "_eyes" 和 "_overlay" 类似。
(译注:原文写的就不明不白,可以看看我写的教程)
所有的属性名都区分大小写。 除非另作说明,所有的路径都相对于assets/minecraft。
属性文件|random_entities.properties
- (必须) 材质的序号
材质序号 "1" 表示 "assets/minecraft/texture" 中的默认材质
textures.<n>=<材质序号列表>
也可以使用随机怪物属性 "skins.<n>",二者选一
skins.<n>=<皮肤列表>
- (可选) 随机选项的权重
权重之和不需要正好为100或者其他特定数字.
权重的数量应该和材质的数量一致
weights.<n>=<等数量的权重列表>
- (可选) 生物群系列表
这里列出了原版生物群系名: https://minecraft.gamepedia.com/Biome#Biome_IDs
也可以使用模组添加的生物群系
biomes.<n>=<生物群系列表>
- (可选) 高度范围
取代了旧的minHeight和maxHeight属性。
heights.<n>=<高度范围>
- (可选) 实体名
使用和自定义物品材质NBT标签相似的语法.
以 "!" 开头的值表示否定的匹配 (非).
name.<n>=<实体名>
示例:
- 匹配字符串: "name=Pinky"
- 匹配特殊格式: "name=\u00a74\u00a7oPinky"
- (为了获得最佳兼容性,请使用转义序列
\u00a7
而不是§
)
- (为了获得最佳兼容性,请使用转义序列
- 使用 "?" 和 "*" 的通配符: "name=pattern:Pinky*"
- 通配符, 不区分大小写: "name=ipattern:Pinky*"
- Java正则表达式: "name=regex:Pin(k)+y"
- Java正则表达式, 不区分大小写: "name=iregex:Pin(k)+y"
匹配字符串中的所有反斜线必须输入两次,正则表达式和通配符中的文字反斜杠必须输入4次。
正确:
* name=regex:\\d+ * name=regex:\\\\ * name=/\\/\\
错误:
name=regex:\d+ name=regex:\\ name=/\/\
- 职业 (可选)
列出村民职业,可选填等级
professions.<n>=<职业>
格式为:
- <职业>[:等级1,等级2,...]
可选的职业:
- none(失业), armorer(盔甲匠), butcher(屠夫), cartographer(制图师), cleric(牧师), farmer(农民),
- fisherman(渔夫), fletcher(制箭师), leatherworker(皮匠), librarian(图书管理员), mason(石匠),
- nitwit(傻子), shepherd(牧羊人), toolsmith(工具匠), weaponsmith(武器匠)
示例:
# 所有等级的农民或等级为1, 3, 4的图书管理员 professions=farmer librarian:1,3-4 # 可以使用职业的全名 professions=minecraft:fisherman minecraft:shepherd minecraft:nitwit
- 项圈颜色 (可选)
列出狼/猫的项圈颜色
collarColors.<n>=<颜色>
可选的颜色:
- white orange magenta(品红色) light_blue yellow lime(黄绿色)
- pink gray light_gray cyan(青色) purple(紫色) blue brown green red black
示例:
colarColors=pink magenta purple
- 是否为幼崽 (可选)
只对怪物有效
baby.<n>=<true/false>
- 生命值(可选)
生命值的范围,可以以数值或者百分比的形式给出
只对怪物有效。
health.<n>=<list>
示例:
health.1=10 health.2=5-8 10-12 health.3=0-50%
- 月相(可选)
月相为0-7的整数
moonPhase.<n>=<list>
示例:
moonPhase.1=3 moonPhase.2=0 1 2 moonPhase.1=0-2 4-7
- 时间(可选)
按照刻计算的时间 (0-24000)
dayTime.<n>=<list>
示例:
dayTime.1=2000-10000 dayTime.2=0-1000 18000-24000
- 天气(可选)
不同值可以用空格分隔,例如 "weather=clear rain thunder"
weather.<n>=<clear|rain|thunder>
示例|Examples
creeper/creeper.properties
将 creeper10.png 到 creeper14.png 应用于所有位于地下的苦力怕.
creeper13.png 当前出现的概率为 7.3% (3/(10+10+10+3+10)).
skins.1=10-14 weights.1=10 10 10 3 10 heights.1=0-55
将 5, 7, 9 应用于高于80的山区地带.
skins.2=5 7 9 biomes.2=ExtremeHills DesertHills ForestHills ExtremeHillsEdge JungleHills IceMountains heights.2=80-255
没有其他规则匹配这些材质时,需要额外列出剩余的材质,这样他们会等概率地随机出现在上述情况以外的区域。
请记住,如果没有这部分,这些材质就不会被使用,实体材质就只会显示为 creeper/creeper.png。
skins.3=1-4 6 8 15-20
自定义实体模型
实体模型|cem_model.txt
对于每一个你想要覆盖的实体模型或者方块实体模型, 使用这个模板在 "assets/minecraft/optifine/cem" 文件夹下新建一个名称为 "<实体名>.jem" 的文件。
实体模型包含一系列实体部件模型。 部件模型可以在此文件内部被指定,或者从外部的 ".jpm" 文件读取。
特例: - 哞菇背后的蘑菇可以通过下列材质自定义
- "assets/minecraft/textures/entity/cow/red_mushroom.png"
- "assets/minecraft/textures/entity/cow/brown_mushroom.png"
实体名 | 部件名 |
---|---|
armor_stand | head, headwear, body, left_arm, right_arm, left_leg, right_leg, right, left, waist, base |
banner | slate, stand, top |
bat | head, body, right_wing, left_wing, outer_right_wing, outer_left_wing |
bed | head, foot, leg1 ... leg4 |
blaze | head, stick1 ... stick12 |
boat | bottom, back, front, right, left, paddle_left, paddle_right, bottom_no_water |
book | cover_right, cover_left, pages_right, pages_left, flipping_page_right, flipping_page_left, book_spine |
cat | back_left_leg, back_right_leg, front_left_leg, front_right_leg, tail, tail2, head, body |
cave_spider | head, neck, body, leg1 ... leg8 |
chest | lid, base, knob |
chest_large | lid, base, knob |
chicken | head, body, right_leg, left_leg, right_wing, left_wing, bill, chin |
cow | head, body, leg1 ... leg4 |
creeper | head, armor, body, leg1 ... leg4 |
dragon | head, spine, jaw, body, rear_leg, front_leg, rear_leg_tip, front_leg_tip, rear_foot, front_foot, wing, wing_tip |
donkey | <same as horse> |
dolphin | body, back_fin, left_fin, right_fin, tail, tail_fin, head |
drowned | head, headwear, body, left_arm, right_arm, left_leg, right_leg |
ender_chest | lid, base, knob |
end_crystal | cube, glass, base |
end_crystal_no_base | cube, glass |
enderman | head, headwear, body, left_arm, right_arm, left_leg, right_leg |
endermite | body1 ... body4 |
evoker | head, body, arms, left_leg, right_leg, nose, left_arm, right_arm |
evoker_fangs | base, upper_jaw, lower_jaw |
fox | head, body, leg1 ... leg4, tail |
ghast | body, tentacle1 ... tentacle9 |
giant | head, headwear, body, left_arm, right_arm, left_leg, right_leg |
guardian | body, eye, spine1 ... spine12, tail1 ... tail3 |
head_dragon | head, jaw |
head_humanoid | head, head2 |
head_skeleton | head |
horse | body, neck, back_left_leg, back_right_leg, front_left_leg, front_right_leg, tail, saddle,head, mane, mouth, left_ear, right_ear, left_bit, right_bit, left_rein, right_rein, headpiece, noseband //1.15.2添加了child_back_left_leg, child_back_right_leg, child_front_left_leg,child_front_right_leg(2020/2/20) |
illusioner | head, body, arms, left_leg, right_leg, nose, left_arm, right_arm |
iron_golem | head, body, left_arm, right_arm, left_leg, right_leg |
lead_knot | knot |
llama | head, body, leg1 ... leg4 //1.15.2添加了chest_right, chest_left(2020/2/19) |
magma_cube | core, segment1 ... segment8 |
minecart | bottom, back, front, right, left, dirt |
mooshroom | head, body, leg1 ... leg4 |
mule | <same as horse> |
ocelot | back_left_leg, back_right_leg, front_left_leg, front_right_leg, tail, tail2, head, body |
panda | head, body, leg1 ... leg4 |
parrot | head, body, tail, left_wing, right_wing, left_leg, right_leg |
pig | head, body, leg1 ... leg4 |
piglin | head, headwear, body, left_arm, right_arm, left_leg, right_leg, left_ear, right_ear |
piglin_brute | head, headwear, body, left_arm, right_arm, left_leg, right_leg, left_ear, right_ear |
pillager | head, body, arms, left_leg, right_leg, nose, left_arm, right_arm |
polar_bear | head, body, leg1 ... leg4 |
rabbit | left_foot, right_foot, left_thigh, right_thigh, body,left_arm, right_arm, head, right_ear, left_ear, tail, nose |
ravager | head, jaw, body, leg1 ... leg4, neck |
salmon | body_front, body_back, head, fin_back_1, fin_back_2, tail, fin_right, fin_left |
sheep | head, body, leg1 ... leg4 |
sheep_wool | head, body, leg1 ... leg4 |
shulker | head, base, lid |
shulker_box | base, lid |
shulker_bullet | bullet |
sign | board, stick |
silverfish | body1 ... body7, wing1 ... wing3 |
skeleton | head, headwear, body, left_arm, right_arm, left_leg, right_leg |
skeleton_horse | <same as horse> |
slime | body, left_eye, right_eye, mouth |
snow_golem | body, body_bottom, head, left_hand, right_hand |
spawner_minecart | bottom, back, front, right, left, dirt |
spider | head, neck, body, leg1, ... leg8 |
squid | body, tentacle1 ... tentacle8 |
stray | head, headwear, body, left_arm, right_arm, left_leg, right_leg |
tnt_minecart | bottom, back, front, right, left, dirt |
tropical_fish_a | body, tail, fin_right, fin_left, fin_top |
tropical_fish_b | body, tail, fin_right, fin_left, fin_top, fin_bottom |
turtle | head, body, leg1 ... leg4, body2 |
vex | head, headwear, body, left_arm, right_arm, left_leg, right_leg, left_wing, right_wing |
villager | head, headwear, headwear2, body, bodywear, arms, left_leg, right_leg, nose |
vindicator | head, body, arms, left_leg, right_leg, nose, left_arm, right_arm |
witch | head, headwear, headwear2, body, bodywear, arms, left_leg, right_leg, nose, mole |
wither | body1 ... body3, head1 ... head3 |
wither_skeleton | head, headwear, body, left_arm, right_arm, left_leg, right_leg |
wither_skull | head |
wolf | head, body, leg1 ... leg4, tail, mane |
zombie | head, headwear, body, left_arm, right_arm, left_leg, right_leg |
zombie_horse | <same as horse> |
zombie_pigman | head, headwear, body, left_arm, right_arm, left_leg, right_leg |
zombie_villager | head, headwear, body, left_arm, right_arm, left_leg, right_leg |
zombified_piglin | head, headwear, body, left_arm, right_arm, left_leg, right_leg, left_ear |
只有 "models" 和 "part" 是必需的.
注意: 这不是一个有效的JSON格式,只能作为参考
{ "texture": <texture.png> - 实体模型使用的材质 "textureSize": [<width>, <height>], - 材质尺寸 (像素) "shadowSize": <shadow_size>, - 模型阴影尺寸 (0.0 - 1.0) models - 模型列表 [ { "baseId": <parent_id>, - 模型的父类ID, 所有父类属性都会被继承 "model": <model.jpm>, - 部件模型文件,从中读取部件模型的定义 "id": <id>, - 模型ID, 可以将模型引用为父类 "part": <part>, - 部件模型要附着的实体部件 "attach": <true|false>, - True: 附着到实体部件, False: 取而代之 "scale": <scale>, - 渲染尺寸, 默认为1.0 # 部件模型定义, 详见"cem_part.txt" - 部件模型定义 (内部) "animations": [ { "variable1": "expression1", - 详见"cem_animation.txt" "variable2": "expression2, ... } ] ... }, ... ] }
部件模型|cem_part.txt
这个文件包含一个模型部件的定义,它可以在实体模型中被引用为 "model"。
推荐使用文件扩展名 ".jpm",但这并不是必须的。
它应该位于资源包的 "assets/minecraft/optifine/cem" 文件夹下。
材质的UV可以用 "textureOffset" 立方体格式指定,也可以用 "uvDown"、"uvUp"、"uvNorth"、"uvSouth"、"uvWest"和"uvEast"单独指定。
必须使用立方体格式和单面UV格式中的一个,它们不能混合使用。
立方体格式的UV映射的示例为 "model_box.png"。
材质可以被指定为:
- "texture" - (名称中不能含有 '/' ), 在当前文件夹寻找
- "./folder/texture" - 相对于当前文件夹
- "~/folder/texture" - 相对于文件夹 "assets/minecraft/optifine/"
- "folder/texture" - 相对于文件夹 "assets/minecraft/"
- "mod:folder/texture - 解析为 "assets/mod/folder/texture.png"
材质的后缀名 ".png" 是可选的。
必需要素:
- "textureOffset" 或者单面UV
- "coordinates"
注: 这不是一个有效的JSON格式,仅供参考
{ # 部件模型定义 "texture": <texture.png>, - 部件模型要使用的材质 "textureSize": [<width>, <height>], - 材质的像素尺寸 "invertAxis": <axis_to_invert>, - 模型轴的翻转, 例如 "xyz" 翻转所有轴 "translate": [<x>, <y>, <z>], - 平移 (像素) "rotate": [<angle_x>, <angle_y>, <angle_z>], - 旋转 (角度) "mirrorTexture": <axis_to_mirror>, - 材质轴的翻转,例如 "uv" 同时翻转U轴和V轴 "boxes" - 部件模型使用的立方体 [ { "textureOffset": [<u>, <v>], - 立方体格式的材质偏移量, 参阅 "model_box.png" "uvDown": [<u1>, <v1>, <u2>, <v2>], - 底面UV "uvUp": [<u1>, <v1>, <u2>, <v2>], - 顶面UV "uvNorth": [<u1>, <v1>, <u2>, <v2>], - 北面UV, 也称 "uvFront" "uvSouth": [<u1>, <v1>, <u2>, <v2>], - 南面UV, 也称 "uvBack" "uvWest": [<u1>, <v1>, <u2>, <v2>], - 西面UV, 也称 "uvLeft" "uvEast": [<u1>, <v1>, <u2>, <v2>], - 东面UV, 也称 "uvRight" "coordinates": [<x>, <y>, <z>, <width>, <height>, <depth>], - 立方体位置和尺寸 "sizeAdd": <size_add> - 长度增量 (添加到所有维) 可以用作不对称缩放 }, ... ], "sprites" - 3D sprite models (depth 1) [ { "textureOffset": [<u>, <v>], - 材质偏移量 (像素) "coordinates": [<x>, <y>, <z>, <width>, <height>, <depth>], - 立方体位置和尺寸 "sizeAdd": <size_add> - 长度增量 (添加到所有维) 可以用作不对称缩放 }, ... ], "submodel": - 子模型 (附着到父模型, 跟随它移动和旋转) { # Part model definition - 子模型定义 }, "submodels": - 多个子模型 (附着到父模型, 跟随它移动和旋转) [ { # Part model definition - 子模型定义 }, ... ] }
自定义实体模型动画|cem_animation.txt
每个要被动态化的模型变量(variables)都被分配了一个表达式(expression)。
模型每次被渲染并将其值赋给变量时,都会对表达式求值。
变量和表达式在json实体模型(JEM)的 "animation" 部分中定义。
"animations": [ { "variable1": "表达式1", "variable2": "表达式2", ... } ]
- 变量(Variables)
模型变量由此格式指定
- "<模型>.<变量名>"
模型可能是:
- "this" - 当前自定义模型
- "part" - 当前自定义模型所依附的部件模型
- "<part>" - 部件名指向的自定义模型
- "<id>" - ID指向的自定义模型
- "<part>:<sub_id>:<sub_sub_id>:..." - (分层结构) 首先按部件名查找原始模型,然后按ID查找子模型
- "<id>:<sub_id>:<sub_sub_id>:..." - (分层结构) 首先按ID查找模型,然后按ID查找子模型
如果存在重复,则使用根据部件名或ID找到的第一个模型。
根据ID进行的模型搜索是深入的,在分层结构中也是如此。
分层结构让模型组 (json部件模型) 能够被不同部件再利用。
例如一个手的模型 ("shoulder:upper_arm:elbow:forearm:palm:finger[1.5]" 可以同时应用于左手和右手。
动画可以使用 "left_hand:finger1" 表示左手拇指,"right_hand:finger1" 表示右手拇指。
可以跳过分层结构中的中间层。
- 变量名
- tx, ty, tz - 平移(translation) x, y, z
- rx, ry, rz - 旋转(rotation) x, y, z
- ox, oy, oz - 偏移(offset) x, y, z (偏移是绝对的, 不跟随模型缩放的, 可用于平移动画) //1.15.2被移除(2020/2/19)
- sx, sy, sz - 缩放(scale) x, y, z
- 表达式(Expressions)
表达式是具有括号、常量、变量、运算符和函数的一般数学表达式。
常量
- 浮点数
- pi - 3.1415926
- true
- false
变量
- <model>.<var> - 模型变量, 详见模型变量的说明
- time - 当前世界的时刻(tick)
渲染参数
- limb_swing - 肢体动画计数器(limb animation counter)
- limb_speed - 肢体移动速度(limb movement speed)
- age - 按tick计算的年龄(age in ticks)
- head_yaw - 头偏角(head yaw)
- head_pitch - 头仰角(head pitch)
- scale - 渲染比例(render scale),默认为0.0625 //1.15.2被移除(2020/2/19)
实体参数 (浮点型)
- health
- hurt_time
- idle_time
- max_health
- move_forward
- move_strafing
- pos_x, pos_y, pos_z
- revenge_time
- swing_progress
实体参数 (布尔型)
- is_alive
- is_burning
- is_child
- is_glowing
- is_hurt
- is_in_lava
- is_in_water
- is_invisible
- is_on_ground
- is_ridden
- is_riding
- is_sneaking
- is_sprinting
- is_wet
运算符
- +, -, *, /, %
- !, &&, ||
- >, >=, <, <=, ==, !=
函数
- sin(x)
- cos(x)
- asin(x)
- acos(x)
- tan(x)
- atan(x)
- atan2(y, x)
- torad(deg)
- todeg(rad)
- min(x, y ,...)
- max(x, y, ...)
- clamp(x, min, max) 将一个值限制在最小值和最大值之间
- abs(x)
- floor(x)
- ceil(x)
- exp(x)
- frac(x)
- log(x)
- pow(x)
- random(x)
- round(x)
- signum(x)
- sqrt(x)
- fmod(x, y) 与 Math.floorMod() 类似
- if(cond, val, [cond2, val2, ...], val_else) 基于一个或更多条件选择一个值
布尔函数
- between(x, min, max) 检查一个值是否在最大和最小值之间
- equals(x, y, epsilon) 将两个浮点数和误差范围进行比较
- in(x, val1, val2, ...) 检查一个值是否和多个值之一相等
示例:
... "animations": [ { "this.rx": "clamp(-0.5 * part.rx, 0, 90)", "this.tx": "3 * sin(limb_swing / 4) - 2", "this:Hoof.rx": "if(leg4:Hoof.rx > 90, leg4:Hoof.rx - 90, 0)" ... } ]
自定义动态材质
概述|Overview
OptiFine的自定义动画(Custom Animations)的使用说明, 基于McPatcher的自定义动画
在Minecraft 1.5中,Mojang添加了动态化任何方块或物品材质的功能(最初是MCPatcher提供的功能)。 然而,还没有办法动态化其他材质,如生物皮肤和GUI。 OptiFine填补了这一空白,使任何任何矩形区域的材质都可以被动态化。 这甚至包括OptiFine的其它功能所用到的特殊材质,比如随机生物皮肤(random mob skins)和天空盒(skyboxes)。
对于方块和物品材质,包括CTM和CIT,可以继续使用Mojang的mcmeta方法。
译注:如果你对Minecraft原版的动态材质还没有了解,建议阅读Minecraft wiki"资源包"条目的"动态材质"小节
动态材质|Animated textures
要创建一个动画,首先指定材质,然后指定你想要动态化的区域的x和y坐标以及宽度与高度。 并创建由帧组成的垂直带状图片 (类似于胶卷,下面就用胶卷表述这个东西吧) 作为动画的内容。
胶卷的宽度应该与要动态化的区域的宽度相同,高度应该是动态化区域的高度的整数倍。
创建一个任意名称的属性文件。把它放到assets/minecraft/optifine/anim文件夹, 或其任何子文件夹中。并将这些属性添加到文件中。
# 自定义动画 from=<动画的路径> to=<想要动态化的材质的路径> x=<动态化区域的x坐标> y=<动态化区域的y坐标> w=<动态化区域的宽度> h=<动态化区域的高度> # 下面三项可选 duration=<按照刻计算的默认帧时长> interpolate=<true|false> skip=<要跳过的插入刻>
参阅属性文件说明(properties_files.txt),了解如何指定材质文件的路径。
每个属性文件创建一个简单的动画,从上到下按顺序每一刻(1/20秒)播放一帧,然后循环。
相同材质的多个非重叠部分可以通过使用相同的to值和不同的from、x、y、w、h的值进行动画处理。 它甚至可以有独立的时序和帧序。
为了获得最大的兼容性,最好使x、y、w和h为16的倍数。
帧序和时长|Frame order and timing
每个自定义动画还可以指定其动画速度和帧序。在属性文件中,添加一系列条目
# 定义帧的时间(Frame timing) tile.X=Y duration.X=Z
X从0开始,表示帧的顺序。Y表示录像带中的图片序号。第一张图片为0,第二张为1,以此类推。 Z表示这一帧播放的持续时间,按照游戏刻计算 (1刻 = 1/20秒)。 如果省略Z,持续时间为默认的帧时长,如果默认的帧时长也没有设定,则为1。
例如,胶卷的大小为16x48(3帧)。让它进行一个5帧的循环,并在中间插入一个停顿, 属性文件看起来可能像这样:
# 动态化5帧 tile.0=0 tile.1=1 tile.2=2 duration.2=5 tile.3=1 tile.4=0
这个动画将会以如下顺序播放:
第0帧: 播放动画图块0持续1刻 (默认时长) 第1帧: 播放动画图块1持续1刻 (默认时长) 第2帧: 播放动画图块2持续5刻 (duration=5) 第3帧: 播放动画图块1持续1刻 (默认时长) 第4帧: 播放动画图块0持续1刻 (默认时长) 返回第0帧 合计5帧,时长9刻
参考文献|References
https://bitbucket.org/prupe/mcpatcher/wiki/Custom_Animations
自定义颜色
综述|Overview
OptiFine的自定义颜色功能的配置模板, 基于MCPatcher的自定义颜色模组的配置。
- 完整文件列表
以下是自定义颜色使用的所有文件的完整列表:
注: ~ 是optifine文件夹 (assets/minecraft/optifine) 的速记
- ~/color.properties - 定义了一些单值颜色
- ~/colormap/redstone.png - 16x1 红石颜色 (0=未充能, 15=完全充能)
- ~/colormap/pumpkinstem.png - 8x1 南瓜梗颜色 (0=芽, 7=完全成熟)
- ~/colormap/melonstem.png - 8x1 西瓜梗颜色 (0=芽, 7=完全成熟)
- ~/colormap/lavadrop.png - Nx1 熔岩滴颜色 (x=粒子按刻计算的年龄)
- ~/colormap/myceliumparticle.png - 任何尺寸, 随机菌丝体粒子颜色
- ~/colormap/xporb.png - 任何尺寸, 经验球颜色阵列
- ~/colormap/durability.png - 任何尺寸, 物品耐久度颜色阵列
- ~/colormap/swampgrass.png - 256x256 沼泽草调色板
- ~/colormap/swampfoliage.png - 256x256 沼泽树叶调色板
- ~/colormap/pine.png - 256x256 松树调色板
- ~/colormap/birch.png - 256x256 白桦调色板
- ~/colormap/water.png - 256x256 水调色板
- ~/colormap/underwater.png - 256x256 水中颜色
- ~/colormap/underlava.png - 256x256 熔岩中颜色
- ~/colormap/fog0.png - 256x256 主世界迷雾颜色
- ~/colormap/sky0.png - 256x256 主世界天空颜色
- ~/lightmap/world0.png - Nx32 或 Nx64 主世界光照调色板
- ~/lightmap/world-1.png - Nx32 或 Nx64 下界光照调色板
- ~/lightmap/world1.png - Nx32 或 Nx64 末地光照调色板
颜色设置|color.properties
你只需要为你想要修改的属性提供数值。 方便起见,下面列出Minecraft中每个属性的默认值。
所有的属性名都区分大小写。
所有颜色都是十六进制rgb格式,从000000到ffffff。
除非另有说明,否则所有路径都相对于assets/minecraft。
- 水的粒子效果(飞溅的水花, 气泡, 水滴)的底色
生物群系水体颜色乘数应用于该值。该值应该与基础水材质的颜色匹配。
如果你的基础水材质是灰色的,那么你可以通过misc/watercolorX.png进行着色,并且把这个值设置为为ffffff。
particle.water=334cff
- 传送门颗粒的底色
RGB值都会乘一个0.4到1.0之间的随机乘数
particle.portal=ff4ce5
- 下界和末地颜色
fog.nether=330707 fog.end=181318 sky.end=282828
- 荷叶颜色
单一颜色,应用于所有的生物群系。
lilypad=208030
- 药水效果的颜色
最终表现出来的颜色是这些颜色以药水效果的等级作为权重,加权平均后的结果。
potion.absorption=2552a5 potion.blindness=1f1f23 potion.confusion=551d4a potion.damageBoost=932423 potion.digSlowDown=4a4217 potion.digSpeed=d9c043 potion.fireResistance=e49a3a potion.harm=430a09 potion.heal=f82423 potion.healthBoost=f87d23 potion.hunger=587653 potion.invisibility=7f8392 potion.glowing=94a061 potion.jump=786297 potion.levitation=ceffff potion.luck=339900 potion.moveSlowdown=5a6c81 potion.moveSpeed=7cafc6 potion.nightVision=1f1fa1 potion.poison=4e9331 potion.regeneration=cd5cab potion.resistance=99453a potion.saturation=f82423 potion.unluck=c0a44d potion.waterBreathing=2e5299 potion.weakness=484d48 potion.wither=352a27
potion.water 代表一个普通的水瓶
potion.water=385dc6
- 刷怪蛋颜色
egg.<shell|spots>.<实体名>=<颜色>
实体名可以是简化的 (通常的实体名),也可以是完整的 (带有命名空间的)。
完整实体名的分隔符 ":" 必须转义。
例如:
egg.shell.creeper=0da70b egg.spots.minecraft\:creeper=000000
egg.shell.<实体名>=<颜色> egg.spots.<实体名>=<颜色>
- 地图颜色
别名
map.snow=map.white map.adobe=map.orange map.lightBlue=map.light_blue
- 方块在地图中的颜色
map.air=000000 map.grass=7fb238 map.sand=f7e9a3 map.cloth=c7c7c7 map.tnt=ff0000 map.ice=a0a0ff map.iron=a7a7a7 map.foliage=007c00 map.clay=a4a8b8 map.dirt=976d4d map.stone=707070 map.water=4040ff map.wood=8f7748 map.quartz=fffcf5 map.gold=faee4d map.diamond=5cdbd5 map.lapis=4a80ff map.emerald=00d93a map.podzol=815631 map.netherrack=700200
- 通用地图颜色
map.white=ffffff map.orange=d87f33 map.magenta=b24cd8 map.light_blue=6699d8 map.yellow=e5e533 map.lime=7fcc19 map.pink=f27fa5 map.gray=4c4c4c map.silver=999999 map.cyan=4c7f99 map.purple=7f3fb2 map.blue=334cb2 map.brown=664c33 map.green=667f33 map.red=993333 map.black=191919
- 旗帜使用通用地图颜色。
旗帜颜色不能区别于地图颜色进行单独配置。
- 羊的颜色
sheep.white=ffffff sheep.orange=f2b233 sheep.magenta=e57fd8 sheep.lightBlue=99b2f2 sheep.yellow=e5e533 sheep.lime=7fcc19 sheep.pink=f2b2cc sheep.gray=4c4c4c sheep.silver=999999 sheep.cyan=4c99b2 sheep.purple=b266e5 sheep.blue=3366cc sheep.brown=7f664c sheep.green=667f33 sheep.red=cc4c4c sheep.black=191919
- 狼项圈颜色
collar.white=ffffff collar.orange=f2b233 collar.magenta=e57fd8 collar.lightBlue=99b2f2 collar.yellow=e5e533 collar.lime=7fcc19 collar.pink=f2b2cc collar.gray=4c4c4c collar.silver=999999 collar.cyan=4c99b2 collar.purple=b266e5 collar.blue=3366cc collar.brown=7f664c collar.green=667f33 collar.red=cc4c4c collar.black=191919
- 染料颜色
注: 这些值虽然存在,但实际上并没有在任何地方使用。
dye.black=1e1b1b dye.red=b3312c dye.green=3b511a dye.brown=51301a dye.blue=253192 dye.purple=7b2fbe dye.cyan=287697 dye.silver=287697 dye.gray=434343 dye.pink=d88198 dye.lime=41cd34 dye.yellow=decf2a dye.lightBlue=6689d3 dye.magenta=c354cd dye.orange=eb8844 dye.white=f0f0f0
- 文字颜色
经验等级文字的颜色
text.xpbar=80ff20
"Boss生命值" 文字的颜色
text.boss=ff00ff
告示牌文字的颜色
text.sign=000000
由 \247 + 0123456789abcdef 生成的颜色代码
text.code.0=000000 text.code.1=0000aa text.code.2=00aa00 text.code.3=00aaaa text.code.4=aa0000 text.code.5=aa00aa text.code.6=ffaa00 text.code.7=aaaaaa text.code.8=555555 text.code.9=5555ff text.code.10=55ff55 text.code.11=55ffff text.code.12=ff5555 text.code.13=ff55ff text.code.14=ffff55 text.code.15=ffffff text.code.16=000000 text.code.17=00002a text.code.18=002a00 text.code.19=002a2a text.code.20=2a0000 text.code.21=2a002a text.code.22=2a2a00 text.code.23=2a2a2a text.code.24=151515 text.code.25=15153f text.code.26=153f15 text.code.27=153f3f text.code.28=3f1515 text.code.29=3f153f text.code.30=3f3f15 text.code.31=3f3f3f
- 资源载入画面
背景颜色
screen.loading=ffffff
加载条背景颜色
screen.loading.bar=ffffff
加载条边框颜色
screen.loading.outline=000000
加载条前景颜色
screen.loading.progress=e22837
Logo 混合模式
src, dst, srcA 和 dstA 是以下之一:
- ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR,
- SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, SRC_ALPHA_SATURATE
screen.loading.blend=<off|src dst srcA dstA>
- 其他设置项
这个设置会覆盖视频设置中的云的类型。
clouds=fast(快速)|fancy(高品质)|none(无)
经验球动画持续时间 (毫秒)
默认为 628 毫秒
xporb.time=628
颜色映射|colormap.properties
除了像 pine.png 或 underwater.png 这样的 "固定的" 颜色映射。 每个自定义颜色映射必须有一个属性文件,
此文件没有任何版权限制。 请根据需求复制和修改。 将其放到 optifine/colormap/blocks 或者其任何子文件夹下。
所有的属性名都区分大小写。 所有颜色都是十六进制rgb格式,从000000到ffffff。 除非另有说明,否则所有路径都相对于assets/minecraft。
- 调色板格式
fixed:
- 单个固定的颜色,不需要图片,用于去除原版
- 生物群系着色,而不需要创建一个256x256的
- 全白色的颜色映射图。
vanilla:
- 原版温度+湿度256x256映射,
- 受到不同生物群系共享相同的基础温度+湿度值的限制。
grid:
- OptiFine样式网格 (x=biome ID, y=height) 256x256映射。
- 每一列表示一个从虚空到最大建筑高度的生物群系。
- 未使用的列应该使用合理的默认颜色梯度填充,
- 以适应模组添加的生物群系。
默认格式为vanilla,但是可以通过在~/color.properties中设置调色板格式来全局覆盖此属性。
format=<fixed | vanilla | grid>
- (可选) 列出要将颜色映射应用于的方块列表
在1.7中,方块是通过名称而不是数字来表示的。 旧方块支持数字ID,但新方块将只支持名称。
例如,石头可以称为
- stone (无前缀的名称)
- minecraft:stone (全名)
为所有石头和矿石方块着色:
blocks=stone gold_ore iron_ore coal_ore lapis_ore diamond_ore redstone_ore redstone_ore:lit=true
方块+属性也支持下列语法:
blocks=minecraft:lever:face=wall:facing=east,west
如果没有设置 (或者没有属性文件),它会默认按照文件名,例如,
- assets/minecraft/optifine/colormap/custom/stone.png -> minecraft:stone
blocks=<方块列表+可选属性>
- (仅用于format=fixed或vanilla) 颜色映射图
路径可以相对于属性文件的位置。
图片应该是一张256x256的颜色映射图。
如果没有提供源文件,则使用与属性文件名称相同的png作为默认值。
source=<image>
- (可选) 固定RGB颜色
对于format=fixed,这只是应用于所有匹配方块的固定颜色。
如果没有给出值,则默认值为白色(ffffff)。
对于format=vanilla或grid,这是用于手持或掉落方块的默认颜色。如果没有给出值,则根据格式从固定位置提取默认颜色:
- format=vanilla: x=127,y=127 (位图的正中心)
- format=grid: x=1,y=64 (海平面的平原生物群系)
color=<十六进制rgb值>
- (仅用于format=grid) y 变异度
在被颜色映射使用之前在y轴添加可控制数量的随机噪声。
例如,值为2.0时,会在 y - 2 到 y + 2 之间随机选择一个值。默认值为0 (无变异)
yVariance=<值>
- (仅用于format=grid) y 偏移值
在从颜色映射采样之前,从方块的y坐标中减去一个固定值。
例如,值为64时,将对从0到64格高的方块使用颜色映射中 y=0 的像素的颜色。
高度为65的方块将使用 y=1 的像素,高度为65的方块将使用 y=2 的像素,诸如此类。
默认值为0 (无偏移)
yOffset=<值>
生物群系调色板
概述|Overview
OptiFine的自定义生物群系调色板的说明, 基于McPatcher的自定义生物群系调色板
在原版Minecraft中,草和树叶的材质根据所处生物群系的气候显示不同颜色。 这是由两个文件控制的,
- assets/minecraft/textures/colormap/grass.png
- assets/minecraft/textures/colormap/foliage.png
每个文件都是一张 256x256 的颜色映射图,应用于基础的草和树叶材质 (通常是灰色的)。
OptiFine将这个功能极大地扩展到其它方块以及环境天空和迷雾的颜色。 艺术家们可以将这一功能发挥到极致,让每个生物群系拥有独特的感觉。
这个章节被分为两个部分,第一部分描述颜色映射格式本身, 第二部分展示如何将它们应用于Minecraft中的各种元素。
颜色映射格式
- 原版颜色映射格式
原版Minecraft使用的格式是一张256x256的颜色映射,两个轴分别表示温度和湿度。 每个生物群系都有固定的基础温度和湿度,其值对应颜色映射中的一个像素。 随着y轴坐标的增大,它在颜色映射中的位置缓慢地向右下方移动。
一个由khanador撰写的论坛帖子阐述了这是如何工作的:
原版格式将应用于所有的自定义颜色映射,除非你在属性文件中覆盖这个行为。
- OptiFine "网格" 格式
一种可以更好地控制每个生物群系的替代格式。它在这个网页上有详细说明:
https://bitbucket.org/prupe/mcpatcher/wiki/Biome_Palettes_(Grid)
- 其他格式
此外,OptiFine提供了一种简单的 "固定" 颜色映射格式。这种格式不需要图片; 它只是应用于所有方块的单一颜色,不考虑位置。 它的主要目的是覆盖某些硬编码方块的颜色,如芦苇(甘蔗)。
属性文件|colormap.properties
自定义颜色映射可以包含 ".png" 文件或者属性文件,或者两者都有,这取决于你要做什么。
所有属性都是可选的,实际上,如果不需要更改任何属性,可以省略整个属性文件。
- (可选) 调色板格式
# 调色板格式 format=<vanilla | grid | fixed>
如果省略,默认格式为vanilla(原版)。 如果你想要默认使用网格格式。你可以在 "assets/minecraft/optifine/color.properties" 文件中进行全局设置:
# 网格格式 palette.format=grid
注意,此设置不影响在 "assets/minecraft/textures/colormap" 中的原版 "grass.png" 和 "foliage.png" 文件。 为了保持非optifine用户的兼容性,它们总是以原版格式解释执行。
参阅下面的 "Grass and foliage",了解如何使用网格格式和它使用的材质。
- (可选) 列出方块和可选属性
# 列出方块和可选属性 blocks=<列表>
对于应用于地形的颜色映射 (与迷雾, 天空和水下相对),这是这个映射将要应用于的方块和可选的属性值列表。如果未指定此属性,则方块名称会采用文件名。
(例如, "cobblestone.properties" -> "blocks=minecraft:cobblestone")
有关语法,请参阅属性文件说明 (properties_files.txt)。
# 例如: blocks=stone minecraft:sand minecraft:lever:face=wall:facing=east,west
- (可选) 颜色映射图片
# 颜色映射图片 source=<图片>
只适用于原版和网格颜色映射。包含颜色映射的图片的路径。 如果省略此属性,它默认为与属性文件具有相同名称和目录的png, 例如, "stone.properties" -> "source=stone.png".
- (可选) 默认颜色
# 默认颜色 color=<rgb值>
对于 "format=fixed",这只是应用于所有匹配的方块块的固定颜色。 如果没有给出值,默认值是白色"ffffff"。
对于 "format=vanilla" 或 "format=grid",此颜色用于手持或掉落的方块。 如果没有指定值,则根据格式从固定位置取默认颜色:
# 格式 format=vanilla: x=127,y=127 (位图的正中心) format=grid: x=1,y=64 (海平面的平原生物群系)
应用自定义颜色映射
自定义颜色映射可以应用于任何方块或一组方块。 它们也可以应用于环境的迷雾,天空和水下的颜色。
基于方块的颜色映射可按照以下方式被应用:
- 作为 "assets/minecraft/optifine/color.properties" 中的列表
- 作为 "assets/minecraft/optifine/colormap/blocks" 下分开的文件
对于第一种方法,使用语法
# 自定义颜色映射 palette.block.<颜色映射图片>=<列出方块+属性>
例如,这赋予了四种基本类型的叶子它们自己的颜色映射:
# 自定义颜色映射 palette.block.~/colormap/oak.png=oak_leaves palette.block.~/colormap/tall_grass_up.png=tall_grass:half=upper palette.block.~/colormap/tall_grass_low.png=tall_grass:half=lower
译注:OptiFine作者在修改文档时只修改了一部分,列出的实际上是橡树树叶和高草丛的上下两段,早期版本的文档列出的确实是四种叶子。
这种方法的两个局限:
- source和blocks属性可以被设置;其余为默认。
- 如果玩家在使用多个资源包,只有第一个color.properties文件会被游戏读取。
另一种方法是在 "assets/minecraft/optifine/colormap/blocks" 下使用单独的文件。 允许使用子文件夹,这会方便文件的管理。上面的例子也可以这样做:
在 "assets/minecraft/optifine/colormap/blocks/oak.properties":
# 橡树颜色映射 blocks=oak_leaves
在 "assets/minecraft/optifine/colormap/blocks/tall_grass_up.properties":
# 高草丛的上部颜色映射 blocks=tall_grass:half=upper
在 "assets/minecraft/optifine/colormap/blocks/tall_grass_low.properties":
# 高草丛的下部颜色映射 blocks=tall_grass:half=lower
这假定 "oak.png", "tall_grass_up.png" 和 "tall_grass_low.png" 在相同的文件夹下。
- 单个方块
最简单的情况是,自定义颜色映射应用于没有属性值的单个方块类型,它不需要属性文件。
例如,"assets/minecraft/optifine/colormap/blocks/sand.png" 应用于沙子方块而不需要声明"blocks=sand"。
- 多个方块
要对所有石头和矿石应用相同的颜色映射,请使用属性文件
在 "assets/minecraft/optifine/colormap/blocks/stone_and_ore.properties"中:
# 石头和矿石颜色映射 blocks=stone gold_ore iron_ore 诸如此类
如果使用新格式,则添加 "format=grid"。如果颜色映射图片也被命名为 "stone_and_ore.png",则source属性是不必要的。
在 "color.properties" 中这也可以写成:
# 石头和矿石颜色映射 palette.block.~/colormap/custom/stone.png=stone gold_ore iron_ore 诸如此类
添加 "palette.format=grid" 让所有自定义颜色映射使用网格格式 (除了原版的 "grass.png" 和 "foliage.png")。
- 草和树叶
自定义颜色映射将会覆盖原版的grass.png和foliage.png。
这意味着你可以保留原版映射以保持兼容性,并为OptiFine用户创建自定义映射:
在 "assets/minecraft/optifine/colormap/blocks/grass.properties"中:
# 草颜色映射 format=grid # 注: 不需要 "blocks=grass",因为这已经在文件名中了。 yVariance=2
在 "assets/minecraft/optifine/colormap/blocks/oak.properties":中
# 橡树颜色映射 format=grid blocks=oak_leaves
- 1.7中的固定reeds(甘蔗)
从1.7开始,Minecraft将 "grass.png" 应用于甘蔗颜色,给很多艺术创作者造成了困扰。
一张 "fixed" "ffffff"(白色) 颜色映射可以将这个行为恢复到版本1.6。 一个256x256全白色的颜色映射当然可以完成同样的事情,但是这种方法更有效。
最简单的方法是创建一个只包含一行的属性文件:
在 "assets/minecraft/optifine/colormap/blocks/reeds.properties"中:
# 甘蔗颜色映射 format=fixed
这样就可以生效,因为blocks属性默认为文件名(reeds),而color属性默认为固定颜色映射的 "ffffff"。
- 环境迷雾、天空和水下颜色
这些特别命名的颜色映射覆盖默认的固定环境颜色:
- 主世界迷雾: "assets/minecraft/optifine/colormap/fog0.png"
- 主世界天空: "assets/minecraft/optifine/colormap/sky0.png"
- 水下: "assets/minecraft/optifine/colormap/underwater.png"
每一个都可以有对应的属性文件来指定格式或其他设置。
这些颜色映射与基于地形的颜色映射一样,只是它们不关心方块属性。
参考文献
- https://bitbucket.org/prupe/mcpatcher/wiki/Biome_Palettes
- http://www.minecraftforum.net/forums/mapping-and-modding/resource-packs/resource-pack-discussion/1256322-new-biome?comment=124
生物群系调色板:网格格式
概述|Overview
OptiFine的自定义生物群系调色板 (网格格式) 的说明, 基于McPatcher的自定义生物群系调色板
原版颜色映射格式有一些缺陷。 首先,像沙漠这样的生物群系在颜色图中只有一个像素,这意味着它们的颜色不能随高度变化。 此外,多个生物群系共享它们的温湿度值,因此不可能给它们不同的颜色方案。 即使基础值不同,生物群落有时也会在高海拔重叠。
OptiFine提供了另一种选择,最初由Misa提出。和原版颜色映射一样,它也是--一般来说,请参阅下面的提示--一种256x256的彩色图片, 但是x坐标表示生物群系ID,y坐标表示高度。(生物群系的ID列表请参阅Minecraft Wiki)。 这允许生物群系之间的完全分离,并让你完全控制从基岩到最大建筑高度的所有颜色。
颜色映射中的每一列表示一个生物群落。请注意此图片是垂直 "翻转" 的: 世界的底部 (y=0) 在图片的顶部,最大建筑高度 (y=255) 在底部。 海平面为 y=64。一般来说,你会让每一列都有一些渐变。
属性文件|colormap.properties
- (可选) 格式标识
此属性简单地将网格格式的颜色映射与原版颜色映射区分开来。 如果没有指定,网格颜色映射将被解释为原版的温度+湿度格式,这会导致怪异的结果。
# 网格格式 format=grid
如果你在 "assets/minecraft/optifine/color.properties" 文件中对其进行过全局设置,格式属性可以被省略:
# 网格格式 palette.format=grid
这会使所有自定义颜色映射都使用网格格式,所以请确保这是你想要的。
- (可选) 列出要设置可选属性的方块
# 方块 # 例如: # blocks=stone minecraft:sand minecraft:lever:face=wall:facing=east,west blocks=<列表>
参阅生物群系调色板 (biome_palettes.txt).
- (可选) 颜色映射图
# 图片 source=<图片>
参阅生物群系调色板。
- (可选) 默认颜色
# 颜色 color=<RGB值>
参阅生物群系调色板。
- (可选) y 变异度
如果设置了该属性,则在被颜色映射使用之前,会将随机噪声添加到y坐标,从而使平面区域具有更多样的外观。
例如,值为2时,游戏会在 y - 2 到 y + 2 之间随机选择一个值。
# Y 变异度 yVariance=<值>
默认值为0 (无变化).
这个属性也可以在 "assets/minecraft/optifine/color.properties" 中全局设置:
# Y 变异度 palette.yVariance=<值>
- (可选) y 偏移
# Y 偏移 yOffset=<值>
在从颜色映射采样之前,从方块的y坐标中减去一个固定值。 例如,值为64时,将对从0到64格高的方块使用颜色映射中 y=0 的像素的颜色。高度为65的方块将使用 y=1 的像素,高度为65的方块将使用 y=2 的像素,诸如此类。
默认值为0 (无偏移).
提示|Tips
向前兼容性:颜色映射中未使用的列表示未分配的生物群系ID,这些ID可以被未来的Minecraft版本或模组使用。 当然,如果你知道它们使用的ID,你可以为特定的模组生物群系创建配色方案。 但即使你不这么做,最好也至少为未使用的列设置一个中性的渐变,这样新的生物群系就会有一个合理的默认外观。
向后兼容性: 无论属性文件如何设置,在 "assets/minecraft/textures/colormap" 中的原版 "grass.png" 和 "foliage.png" 颜色映射永远都是原版格式。这为非OptiFine用户保留了兼容性。
要使用草或叶子的网格格式,你必须在 "assets/minecraft/optifine/colormap/blocks" 中创建一个自定义颜色映射, 并将其应用于适当的方块。对于OptiFine用户,自定义颜色映射会覆盖原版颜色映射; 对于非OptiFine用户,只有原版颜色映射会被使用。
分辨率:虽然这种格式的颜色映射通常是256x256,但没有原版格式那样的硬性要求:
Minecraft 1.7 引入了许多生物群系的稀有变种。例如 "Birch Forest M" (ID 155) 是 "Birch Forest" (ID 27) 的稀有变种。 方便的是,罕见变种的ID永远是常见的生物群系的ID + 128。
如果你想让所有的稀有生物群系使用与相应的非稀有生物群系相同的配色方案,就可以利用这一事实。 只需将颜色映射图的宽度从256像素调整为128像素,OptiFine在为生物群系分配颜色映射的列时,就会在x方向 "包装" 它。
与之类似,一张1像素宽的颜色映射图可以为所有生物群系提供相同的基于高度的颜色梯度。 在y方向上,如果你提供了超过256个像素,且服务器的最大建造高度高于默认值,OptiFine将很乐意使用它们。 类似地,如果颜色映射图低于256像素,它将在此高度 "达到极限",此高度之上的方块具有相同的颜色。 特别地,64像素的高度会使地下具有颜色变化,海平面以上具有固定颜色。
192像素的高度和 yOffset=64 的设置正好相反:地面上具有颜色变化,地面以下具有固定的颜色。 1像素的高度允许生物群系之间的颜色变化,但不允许颜色随高度变化。
参考文献|References
自定义光照贴图
概述|Overview
OptiFine让你可以自定义游戏中的光照。 基于McPatcher的自定义光照贴图
一个非常好的教程:https://www.mcbbs.net/thread-1014633-1-1.html
- 原版光照是如何工作的
每个方块都有两个范围为0到15的光照等级(light values),一个是天空亮度(sky brightness),另一个是方块亮度(torch brightness)。 被阳光直射的方块具有值为15的天空亮度,与之毗邻的位于阴影下的方块的天空亮度为14,以此类推。 深埋地下,且远离任何能看到天空的方块的方块的天空亮度为0。方块亮度也类似。 一个火把方块的光照等级为14 (荧石为15) ,每远离一个方块,光照等级下降1。
为了生成你在游戏中实际看见的光照,Minecraft使用了一张16x16的光照贴图。它的两个轴分别对应两个种类的16个光照等级。 如果一个方块具有方块亮度x和天空亮度y,那么坐标 (x,y) 就会作为它的光照贴图坐标。 光照贴图不在游戏的任何文件夹内,但每一帧都会生成。 两个变量影响光照贴图,一天中的时间和火把的闪烁。 通过让整个光照贴图变暗或变亮,Minecraft实现了黄昏/黎明的过渡和火把闪烁(torch flicker),而不是通过调整天空/火把的亮度。
自定义光照|Custom lighting
为了创建自定义光照,你需要为每个世界新建一个光照贴图调色板:
- 下界: assets/minecraft/optifine/lightmap/world-1.png
- 主世界: assets/minecraft/optifine/lightmap/world0.png
- 末地: assets/minecraft/optifine/lightmap/world1.png
对于overworld(主世界)你还可以创建可选的降雨和雷暴天气调色板:
- 主世界雨: assets/minecraft/optifine/lightmap/world0_rain.png
- 主世界雷暴: assets/minecraft/optifine/lightmap/world0_thunder.png
只有在定义了主世界调色板时,降雨和雷暴天气调色板才生效。
每个调色板都可以是任意宽度,但高度必须是32或64像素。如果高度为64像素,下半部分将用于夜视效果,这将于稍后讨论。 在32行像素中,上面16行代表阳光,下面16行代表火把的光。 两个列,上半部分的16个像素和下半部分的16个像素,被选择来形成最终用于渲染的16x16光照图的轴线。
模板:
蓝色代表夜晚,橙色代表黄昏/黎明,青色代表白天,黄色代表闪电 在上半部分,左边代表夜晚,右边代表白天,其间有黄昏/黎明的过渡。 调色板的最右边代表闪电。重申,调色板没有指定宽度, 但是更宽意味着过渡中更多的细节空间。
译注:OptiFine提供的示例看不出对应的颜色了,可以参考下面这张图片,来源于 https://bitbucket.org/prupe/mcpatcher/wiki/Lightmaps
火把的工作原理类似,但在这种情况下,x坐标只是一个模拟火把闪烁的随机值。 沿x轴的变化将决定火炬闪烁有多明显。 要使火把光线完全稳定,没有闪烁,就要让每一行的所有像素具有相同的颜色。
光照贴图在三个世界 (主世界, 下界, 末地) 中的工作方法都是一样的,但是由于在下界和末地没有昼夜, "一天中的时间(time of day)" 值为常量。对于这些世界你可以简单地给出0-15行相同的颜色。
夜视效果|Nightvision effect
在原版游戏中,夜视效果是通过 1.0 / max(R,G,B) 缩放RGB值计算的。 例如,(0.2, 0.3, 0.6) 在除以 0.6之后会变亮为 (0.333, 0.5, 1.0)。 你可以用高度为64像素而不是32像素的自定义光照贴图覆盖这个行为。 需要提供四种调色板而不是两种: normal sun, normal torch, nightvision sun, nightvision torch。 除了使用32-47行和48-63行,生成光照贴图的方式完全相同。
参考文献|References
自定义天空
概述|Overview
这是OptiFine的自定义天空功能的配置模板, 基于MCPatcher的Better Skies mod的配置
将属性文件放置在材质包的如下位置
- ~/sky/world0/sky0.properties
- ~/sky/world0/sky1.properties
- ... 诸如此类.
每个文件都表示天空的一层。 OptiFine将持续加载直到找不到属性文件为止。 属性文件的加载顺序是它们在游戏中被渲染的顺序。
此外,两个特殊的属性文件将会应用于太阳和月亮(如果它们存在的话)。 这主要是为了让你能够覆盖太阳和月亮的混合方法。
- ~/sky/world0/sun.properties (取代 sun.png)
- ~/sky/world0/moon_phases.properties (取代 moon_phases.png)
替换材质应该和 sun.png 或 moon_phases.png 相对应, 而不是一个完整的天空盒。
所有的属性名都区分大小写。
在属性文件中可以使用下列任何一种语法来指定一个材质文件的路径:
相对于 assets/minecraft:
- 路径/文件名 -> assets/minecraft/路径/文件名
相对于 assets/minecraft/optifine:
- ~/路径/文件名 -> assets/minecraft/optifine/路径/文件名
相对于属性文件的位置:
- ./路径/文件名 -> (属性文件的路径)/路径/文件名
标注命名空间的绝对路径:
- 命名空间:路径/文件名 -> assets/命名空间/路径/文件名
注: 路径中的 "world0" 指的是主世界。 如果存在其他世界的天空(下界和末地不使用标准天空渲染方法), 他们的文件应该在 ~/sky/world<世界序号> 内。
天空盒模板:
天空属性|Sky properties
- (可选) 替换材质
它可以在材质包的任何位置。 而且多个属性文件可以共用相同的材质。如果未指定, 会使用相同目录下的 sky<n>.png。
source=<材质>
- (必需) 淡入/淡出时间
所有时间都使用小时:分钟的24小时格式。
参考:
- 日出 = 6:00 = /time set 0
- 正午 = 12:00 = /time set 6000
- 日落 = 18:00 = /time set 12000
- 午夜 = 0:00 = /time set 18000
淡出/淡入时间控制混合时的明度。
- 在 startFadeIn 和 endFadeIn 之间: 从0升到1
- 在 endFadeIn 和 startFadeOut 之间: 固定为1
- 在 startFadeOut 和 endFadeOut 之间: 从1降到0
- 在 endFadeOut 和 startFadeIn 之间: 固定为0
注意你不需要指定startFadeOut的值; 它是由其他三个值确定的。
startFadeIn=<小时:分钟> endFadeIn=<小时:分钟> endFadeOut=<小时:分钟>
- (可选) 混合方法
这里的 "上一层" 可以指默认的天空或由 sky<n-1>.properties 定义的上一个自定义天空。
支持的混合方法有
- add: 将天空位图叠加到上一层
- subtract:
- multiply: 将之前的RGBA值乘以当前位图中的RGBA值
- dodge:
- burn:
- screen:
- replace: 用当前位图完全替换上一层。该方法没有淡入和淡出;如果根据淡入和淡出时间计算的亮度大于0,则使用全像素值。
- overlay: 大于0.5的RGB值会让图片变亮, 小于0.5变暗
- alpha: 按照alpha值加权平均
默认方法为add
blend=add
译注:此处未说明的混合方法参考 "属性文件说明" 中的 "混合方法" 章节
- (可选) 旋转
位图是否应该随时间旋转。默认值为true。
旋转的速度和方向也可以控制。
rotate=true
- (可选) 旋转速度
这里指旋转速度相对于默认的每天旋转360度的倍数,例如,值为0.5时,每两天旋转一周;而某些不合常理的数值可以让云每天出现在不同位置。
注: 这并不影响始终在24小时周期内发生的淡入和淡出。
speed=1.0
- (可选) 旋转轴
如果玩家朝指定的方向看,天空盒会以顺时针方向围绕视线旋转。 默认的旋转是沿着南方向轴(东升西落)。
便于参考,下面给出六个基本方向对应的向量。 然而,旋转轴可以是除0 0 0之外的任何向量。 不必刻意使用单位矢量。
- down = 0 -1 0
- up = 0 1 0
- north = 0 0 -1
- south = 0 0 1
- west = -1 0 0
- east = 1 0 0
axis=0.0 0.0 1.0
- (可选) 天气
渲染这一层所需要的天气条件,多个值可用空格键分隔
例如 "weather=clear rain thunder"
默认为 "clear"
weather=clear|rain|thunder
- (可选) 生物群系和高度范围
将天空覆盖层限制到特定高度范围和生物群系。
这里列出了原版生物群系: https://minecraft.gamepedia.com/Biome#Biome_IDs
也可以使用模组添加的生物群系。
biomes=<生物群系列表> heights=<高度范围>
- (可选) 过渡时长
覆盖层亮度的过渡时长 (秒)。 用于平滑急剧的变化,例如不同生物群系之间的天空的替换。 默认为1秒。
transition=1
自发光纹理
概述|Overview
可以在方块材质上添加永远以最大亮度被渲染的覆盖层,这可以模拟材质的发光部分。
自发光覆盖层具有与基础材质相同的名称和一个自定义的后缀。
例如:
- bedrock.png - 基础材质
- bedrock_e.png - 自发光覆盖层
除SOLID层之外,自发光覆盖层和基础材质在同一层被渲染, 而SOLID层的覆盖层被渲染为CUTOUT_MIPPED。
覆盖层也可以用于物品、怪物和方块实体。
译注:虽然自发光纹理很亮堂,但是对光照等级没有任何影响,也不会照亮周围的方块,如果你想让某个怪物或者物品能够照亮周围,你可能需要看看"动态光源"章节
属性文件|emissive.properties
此文件应该放在资源包文件夹"assets/minecraft/optifine" 下。
这个属性文件内只有一个属性,表示自发光覆盖层的自定义后缀。
suffix.emissive=_e
动态光源
此配置文件允许模组定义实体和物品的动态光源等级。
位置: "/assets/<mod_id>/optifine/dynamic_lights.properties"
- 实体光照等级
实体名会被自动补全模组ID。
光照等级必须在0和15之间。
示例:
- entities=basalz:15 blitz:7
entities=<实体名:光照等级> ...
- 物品光照等级
物品名会被自动补全模组ID。
光照等级必须在0和15之间。
示例:
- items=florb:15 morb:7
items=<物品名:光照等级> ...
自定义载入画面
路径: "/assets/minecraft/optifine/gui/loading/loading.properties"
控制世界载入画面
每个维度的自定义载入画面的背景图片路径为:
- /assets/minecraft/optifine/gui/loading/background<dim>.png
"dim" 指维度ID:
- 下界 = -1
- 主世界 = 0
- 末地 = 1
模组添加的维度也可以以这种方式被识别。
- 缩放模式 (可选)
背景材质的自定义缩放模式
- fixed - 使用固定尺寸 (默认)
- full - 全屏, 保持长宽比
- stretch - 全屏
scaleMode=<fixed|full|stretch>
- 尺寸 (可选)
背景材质的自定义尺寸。
对于缩放模式 "fixed",它定义了要使用的缩放尺寸 (默认为2)。这与当前的GUI尺寸是联系的。
对于缩放模式 "full" 和 "stretch" 它定义了屏幕上有多少张完整的材质 (默认为1)。
scale=2
- 是否居中 (可选)
定义背景材质是否应居中显示在屏幕上。
默认为false。
center=<true|false>
属性 "scaleMode", "scale" 和 "center" 也可以在每个维度单独定义。
dim<dim>.scaleMode=<fixed|full|stretch> dim<dim>.scale=2 dim<dim>.center=<true|false>
自定义GUI
概述|Overview
如果你想制作一个自定义GUI,请在 "assets/minecraft/optifine/GUI/container" 文件夹或者其任意一层子文件夹中创建一个.properties文件,并按照下面的模板编辑属性文件。
不同类型的容器有不同的要求和限制。详见下方。
常规属性|General properties
- 容器 (必需)
这是什么容器的GUI?
可能的值:
- anvil(铁砧) beacon(信标) brewing_stand(酿造台) chest(箱子) crafting(工作台) dispenser(发射器) enchantment(附魔)
- furnace(熔炉) hopper(漏斗) horse(马) villager(村民) shulker_box(潜影盒) creative(创造模式物品栏) inventory(物品栏)
container=<容器名>
- 材质 (必需)
GUI材质的替换。
"texture" 属性替换默认的GUI材质。 "texture.<路径>" 属性可以用于替换任何GUI材质。 <路径> 相对于 "/assets/minecraft/textures/gui" 创造模式物品栏GUI没有默认材质,所以必须使用路径材质。
创造模式物品栏的例子:
# 文件 "assets/minecraft/optifine/gui/container/creative/creative_desert.properties container=creative biomes=desert texture.container/creative_inventory/tab_inventory=tab_inventory_desert texture.container/creative_inventory/tabs=tabs_desert texture.container/creative_inventory/tab_items=tab_items_desert texture.container/creative_inventory/tab_item_search=tab_item_search_desert
至少需要一个 "texture" 或者 "texture.<路径>"。
texture=<材质> texture.<路径>=<材质>
- 自定义实体或方块实体名称 (可选)
也许你想让特定名称的容器显示这个GUI,就需要用到这个属性。
该名称使用与自定义物品材质的NBT标签类似的语法。
以 "!" 开头的值表示相反的匹配 (非)。
示例:
匹配名称:
name=My Sword
使用特殊格式匹配名称:
注: 为了获得最佳兼容性,请使用转义序列 '\u00a7' 而不是§
name=\u00a74\u00a7oMy Sword
使用 ? 和 * 的通配符
name=pattern:Letter to *
匹配
- Letter to Herobrine
- Letter to a creeper
不匹配
- letter to Herobrine
通配符, 不区分大小写
name=ipattern:Letter to *
匹配
- Letter to Herobrine
- Letter to a creeper
- letter to Herobrine
Java正则表达式
(参考 http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html)
name=regex:Letter (to|from) .*
匹配
- Letter to Herobrine
- Letter from Herobrine
不匹配
- letter to Herobrine
- A Letter to Herobrine
Java正则表达式, 不区分大小写
name=iregex:Letter (to|from) .*
匹配
- Letter to Herobrine
- Letter from Herobrine
- letter to Herobrine
不匹配
- A Letter to Herobrine
注: 所有反斜线也必须输入两次,正则表达式和通配符中的文字反斜杠必须输入4次。
正确:
name=regex:\\d+ name=regex:\\\\ name=/\\/\\
错误:
name=regex:\d+ name=regex:\\ name=/\/\
name=<名称>
- 生物群系 (可选)
这里列出了原版生物群系: https://minecraft.gamepedia.com/Biome#Biome_IDs
也可以使用模组添加的生物群系。
biomes=<生物群系列表>
- 高度 (可选)
heights=<高度范围>
箱子的特定属性|Chest specific properties
- 是否为大箱子 (可选)
large=<true|false>
- 是否为陷阱箱 (可选)
trapped=<true|false>
- 是否为圣诞节箱子 (可选)
christmas=<true|false>
- 是否为末影箱 (可选)
ender=<true|false>
信标的特定属性|Beacon specific properties
- 等级 (可选)
levels=<等级>
村民的特定属性|Villager specific properties
- 职业 (可选)
列出村民职业,可选填等级
格式
- <职业>[:等级1,等级2,...]
可选择的职业:
- none(失业), armorer(盔甲匠), butcher(屠夫), cartographer(制图师), cleric(牧师), farmer(农民),
- fisherman(渔夫), fletcher(制箭师), leatherworker(皮匠), librarian(图书管理员), mason(石匠),
- nitwit(傻子), shepherd(牧羊人), toolsmith(工具匠), weaponsmith(武器匠)
示例:
# 职业为农民 (所有等级) 或图书管理员 (等级为 1,3,4) professions=farmer librarian:1,3-4 # 职业全名 professions=minecraft:fisherman minecraft:shepherd minecraft:nitwit
professions.<n>=<职业>
马和发射器的特定属性|Horse and dispenser specific properties
- 变体 (可选)
马的变体: horse donkey mule llama
发射器的变体: dispenser dropper
variants=<变体>
羊驼和潜影盒的特定属性|Lllama and shulker box specific properties
- 颜色 (可选)
写出潜影盒颜色或羊驼背上的地毯颜色
颜色列表: white orange magenta light_blue yellow lime pink gray light_gray(原为silver) cyan purple blue brown green red black
colors=<颜色>
自定义全景图
路径:"/assets/minecraft/optifine/gui/background.properties" 控制主菜单全景图(panorama)的行为
备选全景图文件夹:
- /assets/minecraft/optifine/gui/background1
- /assets/minecraft/optifine/gui/background2
- /assets/minecraft/optifine/gui/background3
- ...
译注:当你打开主菜单时,OptiFine会随机抓一个备选文件夹,播放里面的全景图
备选全景图文件夹应该包含以下材质
- panorama_0.png
- panorama_1.png
- panorama_2.png
- panorama_3.png
- panorama_4.png
- panorama_5.png
备选全景图文件夹内可以创建 "background.properties" 来定义此全景图的自定义属性
- 权重 (可选)
权重越高,越容易被选中,默认为 1
weight=<权重>
- 模糊等级(Blur level) (可选)
主菜单背景使用三种模糊
模糊等级过高可能会降低主菜单FPS
blur1=<1-64> blur2=<1-3> blur3=<1-3>
- 覆盖层颜色(Overlay colors) (可选)
在背景图像上有两个渐变覆盖层
当顶部和底部颜色为0时,覆盖被禁用
颜色格式为 ARGB (十六进制)
默认值如下
overlay1.top=80FFFFFF overlay1.bottom=00FFFFFF overlay2.top=00000000 overlay2.bottom=80000000
高清字体
概述|Overview
从1.6版本开始,Minecraft支持更高分辨率的字体,但自定义的能力仍然是有限的。
OptiFine会首先在 "assets/minecraft/optifine/font" 文件夹下寻找字体。 这让你可以同时拥有在原版使用的自定义字体以及需要optifine才能显示的更高分辨率的字体。
- 默认字体: assets/minecraft/optifine/font/ascii.png
- 附魔台字体: assets/minecraft/optifine/font/ascii_sga.png
注意: 不支持unicode字体.
为了能够更好地控制单个字符的宽度,OptiFine提供了一种手动指定它们的方法。
创建以下属性文件:
- assets/minecraft/optifine/font/ascii.properties
- assets/minecraft/optifine/font/ascii_sga.properties
对应你想要自定义的字体.
属性文件|bettergrass.properties
这个文件中的每一行都指定一个字符的宽度:
# 自定义宽度 width.<ascii值 0-255>=<宽度 0-8>
例如,为了指定大写字母 A, B, C 的宽度,你可以输入
# ABC width.65=5.9 width.66=5 width.67=5.25
不管字体的分辨率是多少,值只能是介于0-8之间的浮点数 (原版只支持整数宽度)
你不需要规定所有字符的宽度,只需要规定你想要覆盖的字符的宽度。
空格字符的默认宽度为4.0,你可以以同样的方式覆盖它,将 "width.32" 设置为自定义值。
α混合|Alpha Blending
如果设置为true,字体将会采用α混合
blend=<true|false>
粗体偏移|Bold offset
粗体字符按照符合字符的笔画宽度的一个微小的x偏移被渲染两次。
标准8x字体 (texture 128x128) 的默认偏移值为 1.0,更高分辨率的字体的默认偏移值为0.5
offsetBold=<值>
参考文献|References
系统属性
系统属性必须添加到启动程序配置文件 (launcher profile) 中的 "JVM Arguments" 字段中。
例如,要启用扩展日志记录,请在JVM参数中添加 "-Dlog.detail=true"。
- 启用扩展日志记录
log.detail=<true|false>
- 将 final texture map 保存在 "debug" 文件夹中
saveTextureMap=<true|false>
- 将 final shader sources 保存在 "shaderpacks/debug" 文件夹中
shaders.debug.save=<true|false>
- 自动动态化所有怪物模型
在测试自定义实体模型时很有用
animate.model.living=<true|false>
- 从文件夹 "playermodels" 读取玩家模型
player.models.local=<true|false>
- 每5秒自动重载一次玩家模型
在测试自定义本地玩家模型时很有用
player.models.reload=<true|false>