当前教程基于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。希望你还没忘记它们。
制作一个资源包
制作一个资源包,然后向玩家提供资源包。
你要做的基本与“向模组添加材质”相同。