本帖最后由 ⊙v⊙ 于 2022-11-19 10:49 编辑
Optifine拥有比原版更优秀的贴图/模型修改能力。
虽不可能列出Optifine的所有功能和用法,但会尽可能详解部分内容。
如果希望提及没在此贴中提到的功能,可在下方留言,我会考虑加进贴子里哦~
希望各位能运用到制作中,创造出更优质的地图~
更完整的内容
你可以在这些地方查看作者提供的使用文本。
[Mod教程] [Doc] |高清修复OptiFine| 官方帮助文档翻译
官方在Github上存放的使用文本
也可以看这贴,但要注意mcpatcher和optifine非同一个东西,并推荐使用optifine,因为mcpatcher貌似停更了。
[教程] [] [给点打赏呗~]hukk的mcpatcher&optifine高级材质教程系列[1.6+]
〓〓〓
事前注意
- 尽可能地使用最新版本的Optifine
- 路径因版本而异:
1.12或早前版本,assets\minecraft\mcpatcher\
1.13之后的版本,assets\minecraft\optifine\ - 若自定义物品完全没有显示,按顺序排查
⬤ 选项 > 视频设置 > 品质 > 自定义物品:开
⬤ 如果properties里有 nbt= 匹配条目,尝试去掉
(若去掉后能显示,则是nbt匹配上出了问题。若去掉后仍然无变动,检测properties的位置和文本内容拼写)
|
〓〓〓
NBT匹配
⬤ 直接写匹配内容的话,两边字串必须完全匹配
⬤ 匹配内容前使用pattern的话,匹配的内容可以使用通配符
⬤ 匹配内容前使用ipattern,则在匹配时不区分字母大小写
⬤ ?通配符 - 代表单个占位符
⬤ *通配符 - 代表单个或以上的占位符
| 匹配行 | 备注 | | nbt.display.Name=pattern:Grade ? | 当命名为 Grade A、Grade B、Grade + 时匹配 | | nbt.dispaly.Name=ipattern:Grade * | 当命名为 Grade A、gRADE B、Grade ABCD 时匹配 | | nbt.display.Lore.0 | 当首行Lore与定义文本完全匹配 | | nbt.display.Lore.1 | 当第二行Lore与定义文本完全匹配 | | nbt.display.Lore.* | 当有任意行Lore与定义文本完全匹配 | | nbt.single.*=1 | 当single的列表内存在值为1的对象时。例 single:[0,1]、single:["any","1","is","better","than","no-one"] | | nbt.single=1 | 当single值为1时匹配 | | nbt.single=!1 | 当single值不为1时匹配 | | nbt.single=iregex:(3|6) | 当single值为3或6时匹配 | | nbt.Potion=iregex:(minecraft:water|minecraft:night_vision) | 当药水瓶为水或夜视药水时匹配 |
|
〓〓〓
CIT - 替换物品的贴图(或模型)"Work smart, not hard."
尽量不使用匹配物品Lore或Name这种老方法。
论其制作、获取、修改、和调用上的各种麻烦与限制,外加存在能被玩家直接改掉物品名字的风险。
从你,制作者的角度考虑,检测自定义nbt吧。
但如果不能适用于某些插件的话(点名批评BossShop),就只能乖乖匹配Name/Lore了。
CIT路径
| 配置里的texture行 | 贴图搜寻路径 | - texture=foo
- texture=foo.png
- texture=./foo
| 与properties相同位置下的foo.png | | 配置里没有填写texture行 | 与properties相同位置下,且命名与properties相同的.png | - texture=optifine/dial/clock0.png
- texture=minecraft:optifine/dial/clock0.png
| assets/minecraft/optifine/dial/clock0.png |
Custom NBT
- type=item
- items=minecraft:diamond_sword
- texture=drops.png
- nbt.single=1
复制代码 以上内容,在以下路径新建txt文本,保存后修改文件后缀为.properties
- 1.12或早前版本,assets\minecraft\mcpatcher\cit\dropsmile.properties
- 1.13之后的版本,assets\minecraft\optifine\cit\dropsmile.properties
贴图文件则存放于此.properties文件的同一文件夹下。如
- 1.12或早前版本,assets\minecraft\mcpatcher\cit\drops.png
- 1.13之后的版本,assets\minecraft\optifine\cit\drops.png
关于匹配
- nbt,所检测的nbt,若物品与此nbt匹配,(当此物品存在 single:1 这个nbt且值为1时)使用所指向的贴图。
- 同理,可以为 nbt.display.Name,nbt.display.Lore。
- id可以为数字id,但强烈建议使用英文id。
获取此物品的命令根据你的版本将为以下其中一条- /give @p 276 1 0 {single:1}
- /give @p minecraft:diamond_sword 1 0 {single:1}
- /give @s minecraft:diamond_sword{single:1}
复制代码
TL;DR

Name
- type=item
- items=minecraft:diamond_sword
- texture=drops.png
- nbt.display.Name=pattern:\u76ae
复制代码- 任何非字母或数字的字符请转换成unicode。
- 其中,\u76ae为unicode转码后的皮。
获取此物品的命令根据你的版本将为以下其中一条- /give @p minecraft:diamond_sword 1 0 {display:{Name:"皮"}}
- /give @s minecraft:diamond_sword{display:{Name:"{"text":"皮"}"}}
- /give @s minecraft:diamond_sword{display:{Name:'{"text":"皮","color":"blue"}'}} 1
复制代码
Lore
不清楚便捷的自定义nbt不用,为什么偏爱Lore就是了...
*已在1.19测试
- type=item
- items=minecraft:diamond_sword
- texture=drops.png
- nbt.display.Lore.*=\u5931\u53bb\u68a6\u60f3\u7684\u54b8\u9c7c
复制代码- /give @p diamond_sword 1 0 {display:{Lore:["失去梦想的咸鱼"]}}
- /give @s diamond_sword{display:{Lore:['{"text":"失去梦想的咸鱼"}']}} 1
复制代码
Lore后面斜杠跟着的是unicode万国码,转换后为命令里的中文
通过CIT里定义model引用其他物品模型
⬤ 把properties内的texture=替换为model=,路径指向一个原版json格式的物品模型
⬤ 若希望json模型读取位于相同位置下的贴图文件,打开json,修改textures下面定义的贴图路径,例 "particle":"./usethis"
⬤ 请不要同时定义texture=和model=,两个并不会同时运作
|
〓〓〓
附魔相关
根据附魔,判断使用的贴图
当钻石剑拥有标签single:1和任意附魔时,使用properties相同位置下的指定贴图
- type=item
- items=minecraft:diamond_sword
- texture=drops.png
- nbt.single=1
- enchantmentLevels=0-255
复制代码
还能判定指定的附魔。如:当拥有 精准、锋利或亡灵时
enchantments=minecraft:silk_touch sharpness smite
根据条件,修改附魔特效
从1.14到此贴编辑时的1.19.2,type=enchantment依旧没有被修复
这里的texture将修改原版特效贴图textures\misc\enchanted_item_glint.png
如例,拥有标签single:1和锋利附魔的物品,修改其附魔特效
当然,去掉nbt一行,将变为 所有拥有锋利附魔的物品
assets\minecraft\optifine\cit\helloworld.properties
- type=enchantment
- texture=drops.png
- nbt.single=1
- enchantmentLevels=0-255
- enchantments=sharpness
复制代码
可定义附魔特效项
blend=add
*有点ps基础的估计都清楚是什么意思,就不细说了。详情见作者文档
add(默认),subtract,multiply,dodge,burn,screen,replace(替换),overlay(叠加),alpha
speed=0 默认速度为0。取值0.0 - 1.0(?)
rotation=0 默认旋转角度为0。取值0-360
layer=0 默认为最低图层0
duration=1 默认为1秒。特效循环的时长(?)
weight=0 该配置的权重
- type=enchantment
- texture=optifine/cit/drops.png
- nbt.single=1
- enchantmentLevels=0-255
- enchantments=sharpness
- blend=multiply
- speed=0.2
- rotation=30
- duration=1
复制代码
 |
〓〓〓
实体贴图(random_entities)
目前可通过匹配实体的y轴高度、所在群系和命名改变贴图。
其中,实用性最高的当属名字匹配和群系检测
首先,原版末影人的贴图存放路径为minecraft\textures\entity\enderman
一张为身体的材质enderman.png,另一张则为眼睛enderman_eyes.png
那么,材质包assets\minecraft\mcpatcher\mob\enderman这个位置下放入enderman.properties
同时放入材质enderman2.png和enderman_eyes2.png
enderman.properties内容如下
- skins.1=2
- name.1=apple
- skins.2=2
- biomes.2=Hell
复制代码 规则1:当名字为apple时,使用贴图enderman2。
规则2:当位于下界群系时,使用贴图enderman2。
会优先查看规则1,如果匹配则使用此贴图,而不继续往下匹配


一个通过命名为apple修改,另一个则为替换所有下界的末影人贴图 |
〓〓〓
根据匹配替换CEM实体模型(非random_entities做法)
传统的方法是好几个实体模型压在一个实体jem里,然后根据random_entities的匹配让实体显示对应的模型贴图。
这么做的坏处是,制作和管理麻烦,实体渲染指数级的上升,还会与其他资源包撞车。
而在 OptiFine HD U I1 pre2 版本新增了能直接在cem目录下创建properties,来对实体进行匹配,然后显示对应的实体模型。
*制作CEM用的jem模型,可参考{链接url}(我暂时没见到有较好的教程贴...)
properties创建在cem路径下,内容写法与random_entities一致,只是textures=要换成models=并指向至少一个jem格式的实体模型。如下。

|
〓〓〓
仿发光
最后一个,也是最近在群里无意中看到的,原来optifine还藏着这个功能,真香...
并非像火把或灯那样的光源,而是在方块/物品/实体上贴上一层亮度始终为最高的材质。既是仿发光。
而此贴图的非透明部分就会以亮度15的形式附加在方块/物品/实体上。
材质包assets\minecraft\optifine这个路径下放入emissive.properties,内容如下
定义发光那层的贴图名字的后缀为_e(非格式的那个后缀)
然后在assets\minecraft\textures\blocks这个位置放入redstone_block_e.png


在光影和夜晚的双重助攻下,这发光的感觉特别明显
时间关系就不弄生物发光了,做法是一样的
有无光影的发光对比,可能是光影的原因,颜色略不同
 |
〓〓〓
拥有玩家皮肤的盔甲架
reddit用户u/Franxy制作了一个修改盔甲架模型的optifine资源包。
原理是通过修改cem,给盔甲架添加两层透明材质,当被命名为指定名字时这层材质便读取对应的皮肤材质
要求Optifine版本至少为 HD-U-E5_pre6
下载链点原文 Download Link 后面的 mediafire
以下是此包的使用教程
资源包这个路径下
assets\minecraft\optifine\mob\armorstand
打开 skin.properties 或 skin_slim.properties
前者为steve格式(手臂4像素)
后者则为alex格式(手臂3像素,手偏细)
#skin_slim.properties
- skins.1=2
- name.1=2
- skins.2=3
- name.2=bear
复制代码 为例
skins.<规则>=<数值>
name.<规则>=<命名>
规则,从1数起
数值,不能为1
命名,游戏内盔甲架被命名时,使用与规则下数值对应的皮肤
当盔甲架被命名为2时,显示材质 assets\minecraft\optifine\mob\armorstand\skin_slim2.png
而当被命名为bear时,将显示材质 assets\minecraft\optifine\mob\armorstand\skin_slim3.png
资源包相同路径下,还有另一个文本 wood.properties
其中这行,意为当盔甲架名为1,2或bear时,盔甲架的木头和底座的材质将变为透明
可自行添加
 |
真想把cem也给说了...无奈又懒又没动力
CEM教程有大佬写了,第一章
在画这个末影人的时候找到了一个不错的在线绘制网站
https://minecraft.novaskin.me/resourcepacks
很实用的教程,做地图很方便。
伪发光是高版本才有的吗?1.12可以,1.7试了好像不行
optifine这玩意不好说,感觉就是调用原版里的东西给玩家用
就是说尽量保证你的optifine版本为最新...
1.7.2的话最新版本为
OptiFine 1.7.2 HD U F7
1.7.10的话最新版本为
OptiFine 1.7.10 HD U E7
如果还是不行的话可能就是那个版本下做不出来吧
毕竟optifine看着像是尽量给每个主流mc版本都保持最新
自定义实体贴图+CEM其实是可以做到一定程度的自定义实体模型的
很实用,简洁易懂的教程,希望带佬更更新
设置怪物名字的时候好像不支持中文啊,有中文就没有效果了
那就要把文本内的中文转换为unicode。
比如你要怪物名字为
皮时换皮,
皮的unicode是
\u76ae
Unicode转换