《松果核》——从模型到家具的一键生成工具
兰那梛_nano
编辑于 2025年03月16日 20:52

>> 《松果核》是什么?

起因是在和一些模型作者交流后,发现大家都有着非常优秀的作品,却苦于没有在游戏里实现的方法。于是我花了两周的时间,搭建了这样的一款家具框架

这是一套基于数据包开发,面向 Java 模型作者的工具。它的目的是帮助没有数据包基础的作者使用自己的模型快速创建可游玩的家具包。在完成模型制作后,只需要导出模型填写配置表运行程序三步,即可导出一个功能完整的家具包,并在游戏中游玩。

>> 使用松果核导出的家具包需要如何使用?

松果核导出的家具包为资源包+数据包的二合一包,需要将它同时作为资源包和数据包加载到你的游戏和存档。例如单机使用时需要将它分别放入 .minecraft/resourcepacks/ 文件夹以及 .minecraft/saves/<你的存档名>/datapacks/ 文件夹下。家具包的使用不需要任何的mod支持,原版客户端就可以使用。

使用松果核导出的所有家具包可以相互兼容,这意味着玩家可以随意搭配不同的家具包,不用担心冲突。

>> 松果核导出的家具包支持那些功能?

除了正常的合成、摆放、拆除以外,松果核也支持家具的染色、模型切换、简单交互等等。具体介绍如下——

> 合成

可以配置家具在切石机的合成

> 摆放方式

可以选择配置家具为自由摆放或对齐方块摆放;可以选择配置家具为对齐朝向或自由朝向

> 染色

使用 刷子+任意染料+任意粘稠的液体/胶状物 合成 颜料刷 后,可以使用颜料刷对家具进行染色(需要在制作模型时定义着色面)

(按键提示请以游戏内为准)

> 碰撞体积

通过配置屏障的位置,可以让家具拥有碰撞体积

> 发光

通过配置光源的位置,可以让家具发光,用于制作灯

> 切换

通过配置,可以让不同的家具通过交互来回切换,达到开关灯、开关门的效果

> 椅子

通过配置,可以让玩家坐在家具上

> 动画

通过配置,可以让家具播放简单的动画,目前支持摇晃和旋转动画

>> 如何使用松果核导出家具包?

松果核尽最大努力简化从模型到家具包之间的步骤,帮助作者能够快速生成或调试家具包。请参照下面的使用说明——

> 下载《松果核》

在后文的下载地址中下载对应版本的《松果核》,并解压得到以下内容:

> 导入模型与贴图

将制作的 .json 模型和 .png 贴图放在 models_to_add/ 路径下:

如果使用了动态贴图,请将对应的 .png.mcmeta 也一并放进来。

在 .json 模型中,请确保材质已经指向了正确的贴图,如图:

(只需要保证文件名正确即可。如果使用 Blockbench 制作,在导出时遵循先保存贴图,后导出json的顺序,导出的json会自动包含贴图名)

由于众所周知的不明原因,java 模型与贴图的文件名仅支持小写字母、数字、短横杠和下划线,请一定检查是否符合要求。

游戏内显示的是模型的展示框模式,因此请提前调整好模型的各项展示属性:

(可以参考上图的参数来调整展示属性)

需要注意的是,在模型制作时如果引用了原版资源中的模型或者贴图,会导致自动更改路径时出错,需要在导出后手动改正路径。如对这方面不了解,请避免引用原版模型或贴图。

如果希望模型能够支持染色,请在制作时为对应的面添加着色。以 Blockbench 为例,在制作时勾选着色并将边上的数字设置为0(皮革马凯染色方法)。

也可以直接手动在模型 .json 文件中将某个模型面设为着色面。

> 填写家具配置表

打开松果核目录下的 furniture_import_sheet.csv 文件(以 Excel 为例)

除第一行表头外,每一行将创建一个新的家具,每一列则是家具的配置选项。表格自带的四行家具为填写示例,请在正式创建自己的家具时删除这四行示例数据。在填写表格时,请不要移动、新增或删除任意列,这将会导致后续出错。每列的填写规则请参考下面:

  • 0:家具ID

    • 请填写 .json 模型文件的文件名,不可省略

  • 1:家具名称

    • 请填写这个家具在游戏中显示的名称,不可省略

  • 2:切石机原材料

    • 请填写一个原版物品的 id 作为这个家具的合成原材料

    • 如果不填写则不会为这个家具创建切石机的合成配方

  • 3:交互体积

    • 家具能够被交互到的宽度和高度,单位为方块,类似生物的碰撞箱(但并不会造成阻挡)。请根据家具模型的实际大小调整

    • 参考示例,填写规则为 [宽度, 高度] 。两个值都请至少保留1位小数

    • 如果省略不填,默认值为 [1.0, 1.0]

  • 4:屏障位置

    • 需要在设置 8:对齐方块 后才会生效

    • 以一连串坐标的形式,指示家具在放置时需要摆放屏障的位置。屏障用来充当家具的碰撞体积。每个家具可以摆放多个屏障。

    • 参考示例填写,每个屏障坐标的填写规则为 [左, 上, 前] ,如果有多个屏障坐标,则用逗号隔开。在摆放时,以家具的下方中心点为原点,根据放置时的朝向,向 [左, 上, 前] 移动相应的距离后,在对应的位置放置屏障。

    • 每个坐标的值必须全部为整数或者全部为小数

  • 5:光源位置与亮度

    • 需要在设置 8:对齐方块 后才会生效

    • 与屏障位置相似,以一连串坐标和亮度的形式,指示家具在放置时需要摆放光源的位置和对应的亮度。每个家具可以摆放多个光源。

    • 参考示例填写,每个光源的填写规则为 {pos:[左, 上, 前], level:亮度} ,如果有多个光源,则用逗号隔开(每个光源都有一个大括号)。在摆放时,以家具的下方中心点为原点,根据放置时的朝向,向 [左, 上, 前] 移动相应的距离后,在对应的位置放置对应亮度的光源。

    • 光源的亮度范围为 1-15,15为最亮

    • 每个坐标的值必须全部为整数或者全部为小数

  • 6:空气位置

    • 需要在设置 8:对齐方块 后才会生效

    • 与屏障位置相似,以一连串坐标的形式,指示家具在放置时需要还原为空气的位置一般用于在家具切换中,将原家具的屏障或光源替换为空气

    • 参考示例填写,每个空气坐标的填写规则为 [左, 上, 前] ,如果有多个空气坐标,则用逗号隔开。在摆放时,以家具的下方中心点为原点,根据放置时的朝向,向 [左, 上, 前] 移动相应的距离后,在对应的位置替换为空气。

    • 每个坐标的值必须全部为整数或者全部为小数

  • 7:放置偏移量

    • 需要在设置 8:对齐方块 后才会生效

    • 在对齐方块后,如果不填写偏移量,默认的家具中心为方块的正中心

    • 有时需要将家具中心对齐到非方块正中心(例如两个方块的边沿),此时则需要填写家具放置偏移量

    • 偏移量的填写规则为 [左, 上, 前] 。在摆放时,以家具原本对齐的方块中心点为原点,根据放置时的朝向,向 [左, 上, 前] 偏移相应的距离作为新的中心点,并从这个新的中心点开始,开始进行4-6列配置的屏障、光源、空气放置

    • 偏移量的值必须全部为整数或者全部为小数

  • 8:对齐方块

    • 填写 “1” 时,家具将在摆放时自动对齐方块中心

    • 不填写时,家具能够摆放在任意位置,且4-7列的配置不会生效

  • 9:任意朝向

    • 填写 “1” 时,家具摆放的角度与当时玩家的视角朝向相同

    • 不填写时,家具的旋转会根据玩家视角,自动对齐东南西北四个朝向

  • 10:椅子

    • 填写 “1” 时,玩家可以交互这个家具,然后坐上去

  • 11:椅子高度

    • 在家具能被坐上去时,设定玩家坐上去的高度

    • 默认值为 0.5 即半格高

  • 12:晃动

    • 填写 “1” 时,玩家交互可以晃一晃这个家具

  • 13:自动旋转-左

    • 填写 “1” 时,家具会自动逆时针旋转

  • 14:自动旋转-右

    • 填写 “1” 时,家具会自动顺时针旋转

  • 15:切换到家具ID

    • 可以填写一个其他的家具ID,这样改家具将会在交互的时候直接切换为对应的家具

    • 家具的中心位置保持不变,其他的属性都会变为新家具的属性

    • 等效于拆除这个家具,然后在原位置放置一个新的家具

    • 家具切换可以形成一个循环,来制作不同家具变种的效果

  • 16:切换需要工具

    • 填写 “1” 时,玩家需要手持任意锄头与家具交互,才可以将其切换

    • 不填写时,空手交互家具即可将其切换

  • 17:可食用

    • 填写 “1” 时,家具可以被吃掉

  • 18:饱食度回复

    • 家具被吃掉时回复的饱食度

  • 19:原版物品

    • 其实没必要填,基本不会影响任何家具功能

    • 默认是皮革马凯(可以用原版方法在工作台染色)

    • 如果你觉得吃掉染色皮革马凯很奇怪的话可以改成别的

  • 20:占位符

    • 不填可能会保存出错,填个东西占位即可

填写完成后,请保存文档。正常情况下,文档会保存为 UTF-8 编码。如果后续出现家具名称乱码的情况,可能是文件编码不正确,请在文档的另存为中选择 CSV UTF-8 格式:

> 替换logo和家具包说明(可选)

如果你希望为你的家具包填写自定义的说明和 logo,你可以在运行脚本前自行修改 pack.mcmeta 内的描述和 pack.png 的 logo

> 运行导出脚本程序

在 Windows 系统中直接运行 `generate_pack.exe`,或者用 python3 运行松果核目录下的 `generate_pack.py` 文件

在弹出的命令行中为你的新家具包起名字,同样只能使用小写字母、数字、短横杠和下划线

正常情况下,将会直接把模型按照配置表的要求直接导出为家具包

>> 家具包的调试

在家具包的打包时难免会遇到一些错误。为了方便调试,推荐在打包时将解压后的松果核直接作为数据包放在测试地图的 datapacks/ 目录下。在每次运行打包程序后,游戏内输入 /reload 即可测试效果,免去了频繁移动文件的繁琐步骤(资源包仍需要手动添加)

松果核提供了一条指令用于一次性获取某个家具包内的所有物品:/function <pack_name>:give_all ,<pack_name> 为导出时为家具包起的名称

>> 更新与支持

松果核家具框架计划从 1.21.4 起,为每一个 java 正式版提供支持。在每个新版本发布后,松果核也将发布对应版本的框架,用于导出该版本的家具包。

(牢骚:因为ojng的魔幻操作使得数据包的跨版本兼容几乎变成了笑话,松果核决定直接放弃跨版本兼容)

>> 发布与下载

下载地址 | https://dl.16bits.moe

备用地址 | https://pan.suzakuwcx.com

GitHub | https://github.com/Acappellia/pinecone/

松果核家具框架使用 MIT 开源协议。使用松果核框架导出的家具包,包括对家具框架本身的修改,均可以自由发布用于任何非盈利或盈利目的,但需要注明原作者。推荐在发布家具包时,附带我的个人空间或本文链接。

>> 致谢

感谢南烛​ 老师在开发中提供的各种帮助和测试

感谢一粒像素​ 绘制的 logo 与封面