当前教程基于ovo - 0.0.3版本,教程中会使用 // 作为注解块,使用时必须删除,Json没有注解块。

本教程主要偏向于1.7.10(Forge)版本,当你发现教程中东西在Fabric上没有生效时,请参考Fabric版本的示例文件

一些概念

ovo资源文件夹

ovo不会自动生成任何内容,因此每个步骤都需要手动完成。ovo需要一个资源文件夹作为json资源路径,他位于minecraft根目录(通常为.minecraft)。若要使用ovo,必须创建一份ovo文件夹。后续json资源文件都需要放置其中。


ovo_package

用于管理ovo的资源文件,每个包(package)都是一个“伪造mod”的存在。在ovo资源文件夹中创建一个名为“ovo_package”的Json(ovo_package.json)来管理你的包。内容是你指向的包名。

每个包都是一个文件夹,在ovo_package中填入创建的文件夹,比如我们创建了一个名为“ovoPineapple”的文件夹,如果我们现在想要将其作为一个包导入,那么在ovo_package中需要这样做:

[
    "ovoPineapple"
]

如果我们有很多包,那么它闻起来就是这样的:

[
    "ovoPineapple",
    "ovoTest"

    ]

在这种情况下,ovoPineapple的加载优先级会高于ovoTest。


伪造mod与info

现在进入ovoPineapple文件夹,我们要做的第一步还不是创建炫酷的东西,而是为我们的“mod”定义一个modid —— 这是每个mod 都必须要做的事情。如果modid非常奇怪以至于无法被正常读取,ovo会接管你的package的modid将其modid改为ovo。

创建并进入info.json,输入以下内容来自定义你的modid:

{
    "modid": "pineapple"    // 不可使用中文
}

好,接下来就可以做点炫酷的事情了。


创建资源

文件包

如果你想要创建一些内容,那么这里有两种方案可以供你选择:把它们写到一个Json,或者创建文件夹来分成多个Json。当然你可以可以集合到一个Json然后丢到文件夹。


创建创造模式组

0.0.1的ovo没有办法使用原版的创造模式分类组,因此如果需要使用这个功能,必须自定义一个新的组。这个组不可使用文件夹安排,必须写入名为Group.json的文件。

如果你需要自定义组的Icon,你需要创建另一个包然后创建一个自定义物品而不需要创建组,将那个包的优先级高于你的主要包,否则你只能使用原版或者被模组物品。

[
  {
    "name": "pineappleGroup",
    "icon": "minecraft:apple"   // 注册名或者物品ID均可,若此处为null或物品找不到,会直接使用苹果代替。
  },
  {                             // 创建多个组。
    ......
  }
]


创建物品

按照上述所说的,你可以选择创建Item.json或者创建Item文件夹然后创建任意名称的Json。现在演示一下:

[
  {
    "name": "itemtest",               // 物品的注册名
    "localization_name": "itemtest",  // 物品的本地名
    "texture_name": "itemtest",       // 物品的贴图名
    "max_size": 64,                   // 物品最大堆叠
    "group": "pineappleGroup"         // 刚刚定义的组
  },
  {                                   // 更多的新物品
    "name": "testitem",
    "localization_name": "testitem",
    "texture_name": "testitem",
    "max_size": 16,
    "group": "pineappleGroup"
  }
]
  • 注册名:注册物品的名称,此项不可与其他物品重复。

  • 本地名:这是一会要放进lang的名称。

  • 贴图名:指定了物品的贴图的名称。比如我们的modid是pineapple,贴图名是itemtest,那么贴图位置就是texture\pineapple\items\itemtest.png

如果我们使用文件夹形式,那么在Item文件夹中就可以是这样:

// dir: Item

// ItemTest.json
[
  {
    "name": "itemtest",
    "localization_name": "itemtest",
    "texture_name": "itemtest",
    "max_size": 64,
    "group": "pineappleGroup"
  }
]

// TestItem.json
[
  {
    "name": "testitem",
    "localization_name": "testitem",
    "texture_name": "testitem",
    "max_size": 16,
    "group": "pineappleGroup"
  }
]


食物,方块,工具,武器,礼包

(食物回收封面)  ItemFood.json:

[
  {
    "name": "pineapple",
    "localization_name": "pineapple",
    "texture_name": "pineapple",
    "max_size": 64,
    "hunger": 114,                            // 饥饿值,整数。
    "saturation": 51.4,                       // 饱和度,浮点。(2.0为满)
    "wolf": true,                             // 狼是否可以食用。
    "always_eat": false,                      // 是否总是食用(同金苹果)
    "fast_food": false,                       // 是否高速食用(高速咏唱)
    "isDrink": false,                         // 是否为饮品
    "return_item": "null",                    // 是否返还物品,若没有,为null,若有,注册名或者物品ID。
    "group": "pineappleGroup"
  },
  {
    "name": "pineapple_pie",
    "localization_name": "pineapple_pie",
    "texture_name": "pineapple_pie",
    "max_size": 16,
    "hunger": 1919,
    "saturation": 81.0,
    "wolf": true,
    "always_eat": false,
    "fast_food": false,
    "isDrink": false,
    "return_item": "null",
    "group": "pineappleGroup"
  },
  }
]

Block.json:

[
  {
    "name": "pineapple_block",
    "localization_name": "pineapple_block",
    "texture_name": "pineapple_block",
    "hard": 5,                              // 硬度
    "hard_level": 1,                        // 强度,没有其他模组的情况下一般为0-3(木,石,铁,钻)
    "break_tool": "pickaxe",                // 破坏工具:pickaxe(镐) axe(斧) shovel(锹)
    "is_glow": false,                       // 是否发光
    "drop_item": "pineapple:pineapple",     // 破坏后掉落,若没有,null,若有,注册名或物品ID
    "group": "pineappleGroup"
  }
]

ItemTool.json:

[
  {
    "name": "pineapple_pickaxe",
    "localization_name": "pineapple_pickaxe",
    "texture_name": "pineapple_pickaxe",
    "toolkit": "pickaxe",                     // 工具类型 pickaxe(镐) axe(斧) shovel(锹) hoe(锄)
    "tool_meta": "iron",                      // 工具材质,影响耐久与效率等。wood(木) stone(石) iron(铁) gold(金) diamond(钻石)
    "group": "pineappleGroup"
  }
]

ItemWeapons.json:

[
    {
        "name": "pineapple_sword",
        "localization_name": "pineapple_sword",
        "texture_name": "pineapple_sword",
        "tool_meta": "gold",
        "group": "pineappleGroup"
    }
]

ItemGift.json:

[
    {
        "name": "pineapple_package",
        "localization_name": "pineapple_package",
        "texture_name": "pineapple",
        "max_size": 1,
        "items": [
            "pineapple:pineapple",
            "pineapple:pineapple"
        ],
        "group": "pineappleGroup"
    }
]


食谱

食谱同样可以放在文件夹或者合成为同一个文件,名称为Recipe。允许使用其他模组的物品,但如果你填入的注册名无法被找到,这可能会导致你的游戏崩溃。

在Fabric中,如果你认为使用OVO更方便,在info中加入"data": "true"可以自动输出JSON,但是这是个测试中功能,可能存在不稳定现象。

已弃用的部分

// Recipe.json
[
  {
    "recipe": "smelting",           // 熔炼食谱
    "output": "minecraft:apple",    // 输出物品
    "items_list": [                 // 熔炼食谱仅第一个有效
      "minecraft:apple"
    ]
  },
  {
    "recipe": "crafting_shapeless", // 无序食谱 
    "output": "minecraft:apple",    // 输出物品
    "items_list": [                 // 9个物品,不填满会自动被占位
      "minecraft:apple"
    ]
  },
  {
    "recipe": "crafting_shaped",  // 有序食谱
    "output": "minecraft:apple",  // 输出物品
    "items_list": [               // 前面3个唯定义9*9上的食谱。
      "A A",
      " B ",
      "   ",
      "A", "minecraft:apple",     // 0.0.2版本开始允许自订食谱的标记字母(或符号,不建议是数字)
      "B", "pineapple:pineapple"
    ]
  },
  {
    "recipe": "crafting_shaped",
    "output": "minecraft:apple",
    "items_list": [
      "AA",                       // 0.0.2版本开始,你不一定要撑满9*9, 这样只需要保持这1*2是有序即可!
      "A", "minecraft:apple"
    ]
  }
]

新的部分

更新至0.1.0后,食谱的结构变的更偏向于数据包的样子。

[
  {
    "type": "minecraft:crafting_shaped", // 有序合成
    "pattern": [
      "AAA",
      "   ",
      "AAA"
    ],
    "key": {
      "A": {
        "item": "minecraft:apple"
      }
    },
    "result": {
      "item": "minecraft:apple",
      "count": "10"                     // 注意是字符串... 
    }
  },
  {
    "type": "minecraft:crafting_shapeless", // 无序合成
    "ingredients": [
      {
        "item": "minecraft:apple"
      },
      {
        "item": "minecraft:apple"
      },
      {
        "item": "minecraft:apple"
      },
      {
        "item": "minecraft:apple"
      },
      {
        "item": "minecraft:apple"
      },
      {
        "item": "minecraft:apple"
      }
    ],
    "result": {
      "item": "minecraft:apple",
      "count": "10"
    }
  },
  {
    "type": "minecraft:smelting", // 熔炼食谱
    "ingredients": [
      {
        "item": "minecraft:apple" // 仅第一个有效
      }
    ],
    "result": {
      "item": "minecraft:apple",
      "count": "2"
    }
  }
]

反注册食谱

这个特性仅1.7.10(Forge)独占!

反注册食谱也可以分开,但是这样做没什么意义。

你只需要在你的List中加入物品注册名即可,名称为DeleteRecipe。

// DeleteRecipe.json

[
  "minecraft:bread",
  "minecraft:cake",
  ......
]


生物群系

这个特性仅1.7.10(Forge)独占!

创建一个生物群系略微复杂,它可以存储在json或者分布在dir中,名称为Biomes。请抓好调色盘。

// Biomes.json

[
    {
        "id": 123,                      // 群系的ID,不可与其他群系重复
        "name": "Pineapple Biome",      // 群系名称,随意
        "weight": 10,                   // 刷新权重,影响群系生成率
        "weather_type": "WARM",         // 群系环境,见下方标记
        "biomes_tag": "HOT",            // 额外标签,见下方标记
        "flower": true,                 // 是否生成默认花
        "color": 1919810,               // 颜色,调色板十进制数字
        "grass_color": 114514,          // 草地与草的颜色,同上
        "rain": true,                   // 是否允许下雨(过冷会下雪)
        "water_color": 114514           // 水的颜色,同上
    }
]

群系环境可用内容:

DESERT(沙漠)

WARM(温暖)

COOL(凉爽)

ICY(寒冷)


额外标签可以是与一些群系复用其标签或额外标记:

HOT,COLD

SPARSE,DENSE

WET,DRY

SAVANNA,CONIFEROUS,JUNGLE,SPOOKY,DEAD,LUSH,NETHER,END,MUSHROOM,MAGICAL,OCEAN,RIVER

WATER (已包括OCEAN,RIVER)

MESA,FOREST,PLAINS,MOUNTAIN,HILLS,SWAMP,SANDY,SNOWY,WASTELAND,BEACH


添加贴图

向模组添加材质

使用任意压缩软件打开ovo的jar(或者你也可以考虑其他模组载上?)。

进入assets文件夹(若没有请新建文件夹)。

创建info.json中与mod_id同名文件夹,并创建lang文件夹与textures文件夹。

lang文件夹中存放语言文件 —— en_US.lang是Minecraft默认的语言文本,当缺少对应的语言时默认使用en_US.lang的文本,因此你应该优先考虑填充此文本。当然,如果你不打算继续创建zh_CN.lang的话你也可以直接把中文文本放入en_US.lang,但是并不建议这么做。

请务必注意大小写。接着进入textures文件夹中创建items文件夹与blocks文件夹,它们对应物品贴图与方块贴图。把对应的贴图文件放入其中——名称就是你定义的textures_name。希望你还没忘记它们。


制作一个材质包

制作一个材质包,然后向玩家提供材质包。

你要做的基本与“向模组添加材质”相同。