创作者指导 
对创作者创建 Oraxen 资源包时的指导教程
介绍 
Oraxen 有几种方式让你能够将你的 MCModels 模型置入其中。
本教程将会提到多种可行的方式。
家具、自定义方块或物品资源包各有差别,你在创建资源包时使用的配置也会略有不同。
推荐在你的可下载资源包中放入 Oraxen 的配置文件及其他相关文件,这能让用户更快速地开箱即用。
普通资源包结构教程 
model 和 textures 属性都在 pluginss/Oraxen/pack/models(或 textures)/ 下。
所以模型文件会储存在 plugins/Oraxen/pack/models/packname_or_something/model_file.json。
如果你想要使用其他命名空间,你应该将你的文件放入 plugins/Oraxen/pack/assets/命名空间/models(或 textures)/。在配置中用于 model 和 textures 的格式即为 命名空间:文件路径。
任意模型、贴图或文件路径都不应包含大写字母或空格。
1.13 之后的资源包文件中不支持这样的命名方式(尽管 Optifine 保留了这个功能)。
assets/namespace/models/SOMETHING/my model.jsonXassets/namespace/models/something/my model.jsonXassets/namespace/models/something/my_model.json✓
纹理最高分辨率应当为 256x256px。这是件非常基础的事,但我还是需要将其指出。
无论什么情况,我们均不推荐你将诸如 paper.json 或其他基础材料文件导入。
在支持频道中这些是最经常被提及的问题,且可以通过最基础的 Oraxen 物品设置解决。
一般来说,如果一或多个 Oraxen 物品使用了这个材料,Oraxen 会负责将这些内容输出为最终资源包。
 这会让处理 CustomModelData 的过程更加简单,并解决大部分的问题。
普通配置项 
自定义模型数据(CustomModelData)是资源包冲突最常见的问题。
一些资源包非常偏向于使用同种物品及相同的自定义模型数据值。
Oraxen 有几种解决问题的方法。
- 如果配置文件没有指定 
Pack.custom-model_data,Oraxen 会基于material和model为其分配最大的未使用值。- 这个值通常会保存至配置文件,除非 
disable_automatic_model_data设置为 true。 - 创作者应该将这个值设置为 
true,并且不在配置文本中指定自定义模型数据的值,以此允许 Oraxen 自行分配。 
 - 这个值通常会保存至配置文件,除非 
 - 对于替换字符,情况大致相似。它有一个 
code属性,Oraxen 会为其分配最大的未使用值。- 这个值通常会保存至配置文件,除非 
disable_automatic_glyph_code设置为 true。 - 创作者应该将这个值设置为 
true,并且不在配置文本中指定code的值,以此允许 Oraxen 自行分配。 
 - 这个值通常会保存至配置文件,除非 
 - 因为 ModelEngine 以 
LEATHER_HORSE_ARMOR为其基础属性,因此建议配置文本中不使用这个物品。- 使用其他可染色的物品,如 
TIPPED_ARROW、POTION或SPLASH_POTION以让物品能够最大的兼容性。 
 - 使用其他可染色的物品,如 
 - 如果你在制作自定义盔甲,需要注意的是不同分辨率的贴图不能混用。 
- 这意味着任何包含 128x64 贴图的装备将不能与 64x32 贴图的兼容。
 - 购买者也应当被告知将 
armor_resolution设置为匹配所使用资源包的分辨率。 - 这个值应当被设置为 
armor_layer文件的长度。(128x64 为 32,64x32 为 16(默认)) - 装备对格式要求非常严格,非常建议参考装备部分的教程进行制作。
 
 
自定义物品 
自定义物品为最普遍的资源包类型,在 Oraxen 上的实现方式也是最简单的。
你需要物品配置文件,以及为所有资源包准备的文件夹。
配置文件应当放在 Oraxen/items 下,命名无过多要求。
为便于分辨,建议将文件命名为与资源包相同或相近的格式。
示例配置文件如下:
my_example_item:
  displayname: "<red>自定义物品"
  material: PAPER
  Pack:
    generate_model: false
    model: packname_or_something/model_file这是最基础的示例。
如果你在使用 2D 物品,则 Pack 部分应当看起来像这样:
Pack:
  generate_model: true
  parent_model: "item/generated"
  textures:
    - packname_or_something/texture_file另外,textures 也接受指定的根名:
Pack:
  generate_model: true
  parent_model: "item/generated"
  textures:
    top: packname_or_something/top
    bottom: packname_or_something/bottom
    side: packname_or_something/side大多数使用了带朝向的方块,你可以更方便地指定侧边、顶部及底部的贴图。
基本上这些内容依赖于 parent_model,所以如果你有一个自定义条目树,你也可以如此照做。
parent_model 与 model 和 textures 的结构相同,所以你可以在这里使用 命名空间:文件路径 的格式。
自定义方块 
自定义方块基本上就是自定义物品,只不过添加了一些方块机制。
这意味着你可以使用与上一段相同的配置,但需要加上 Mechanics 不分。
这里有两种类型的方块机制,noteblock 与 stringblock。
noteblock 基本上可用于任何实心方块,如石头、木头、泥土等。
stringblock 一般用于植物、花卉与其他没有碰撞箱的装饰物。
音符盒(NoteBlock) 
noteblock 机制为大多数方块普遍使用的机制。
下文为示例配置:
my_example_block:
  displayname: "<red>My Example Block"
  material: PAPER
  Pack:
    generate_model: true
    parent_model: "block/cube_all"
    textures:
      - something/texture_file
  Mechanics:
    noteblock:
      custom_variation: 1
      model: something/model_filecustom_variation 属性用于标识普通方块与特殊方块。
与 custom_model_data 不同的是,这不会自动分配,你必须自行指定。
因为它会生成在世界中,玩家就能够对其进行控制。
也许在未来的某个时间点,我们能实现为其的自动分配。如果你出售的资源包包含 README 说明文件,你就应该向买家提提及这件事。
model 属性与 Pack 部分的相同,且遵守同一规则。
如果启用了 generate_model 项且你指定了材质,则模型为你的物品 ID,即 my_example_block。
这里也有额外的子机制,如自定义音效、硬度等。
你可以在音符盒机制及其子页面下了解更多。
绊线方块(StringBlock) 
stringblock 机制用于没有碰撞箱的方块。
一般用于植物、花卉及其他装饰方块。
下文为示例配置文件:
my_example_block:
  displayname: "<red>自定义方块"
  material: PAPER
  Pack:
    generate_model: true
    parent_model: "block/cross"
    textures:
        - something/texture_file
  Mechanics:
    stringblock:
      custom_variation: 1
      model: something/model_file如你所见,这部分与 noteblock 机制相似。
有关的子机制可以在绊线钩机制及其子页面下浏览。
自定义家具 
家具一般为用到了 3D 模型的饰物,如椅子、桌子等。
下文为示例配置:
my_example_furniture:
  displayname: "<red>示例家具"
  material: PAPER
  Pack:
    generate_model: false
    model: packname_or_something/model_file
  Mechanics:
    furniture:
      type: DISPLAY_ENTITY
      hitbox:
        width: 1.0
        height: 1.0
      display_entity_properties:
        display_transform: FIXED
      barrier: true如你所见,这里有些你能够使用的属性。
type 属性可以指定家具类型。对应选项为 DISPLAY_ENTITY、ITEM_FRAME 和 GLOW_ITEM_FRAME。
DISPLAY_ENTITY 为 1.19.4 以上出现的一种新类型,也只能在 1.19.4 以上的服务器中生效。
推荐设置为这个选项,低版本会被自动调整为 ITEM_FRAME 选项。
这种类型有更多设置并允许更好的碰撞箱调整,且性能更高。
hitbox 属性用于指定家具的碰撞箱。
这个功能只在 1.19.4 以上的服务器有效,且会生成交互实体。
它只是一个碰撞箱,用于检测点击及其他与家具的交互。
这个实体一般没有碰撞箱,所以你需要使用 barrier 属性。
display_entity_properties 属性用于指定 DISPLAY_ENTITY 的属性。
display_transform 属性用于指定物品的形态。可用选项有 FIXED、HEAD、BODY、LEFT_ARM、RIGHT_ARM、RIGHT_LEG 以及 GROUND。
基本上这些就是 BlockBench 的 Display 部分的内容。
如果你想要 ITEM_FRAME 与 DISPLAY_ENTITY 间的兼容性,你应当使用 FIXED。,
ItemsAdder 因其使用了盔甲架,会使用相同的 HEAD。
你可以在展示实体属性部分详细阅读。
barrier 属性用于指定家具的碰撞箱。
这会在家具的位置放置一个普通的屏障方块。
你可以按如下格式放置多个屏障:
Mechanics:
  furniture:
    barriers:
        - { x: 0, y: 0, z: 0 }
        - { x: 0, y: 1, z: 0 }自定义声音 
一些资源包可能会带有自然环境、实体或其他东西的音效。
推荐尽可能使用其他的命名空间。
这是因为 Oraxen 默认会基于 sound.yml 生成一个 sounds.json 文件,这会导致冲突。
如果用例允许自定义命名空间,你只需将 sounds.json 添加至 Oraxen/pack/assets/namespace/,并将声音文件添加至 Oraxen/pack/assets/namespace/sounds 文件夹下。
如果用例需要为 Minecraft 的普通声音,你不应该在资源包中包含 sounds.json。
因此你需要向 Oraxen 的 sound.yml 文件添加条目,来获得最大兼容性。
之后只需将声音文件添加至 Oraxen/pack/assets/minecraft/sounds 文件夹即可。
 SnowCutieOwO