notes

(详细完整内容请见Minecraft Wiki)

Datapacks


Simple Introductions

数据包只针对单个存档,每一个存档都会有一个数据包文件夹(游戏版本>saves>存档名>datapacks)

数据包以文件夹或者压缩包形式存在于datapacks文件夹中都可以运行,但推荐用压缩包的形式

vscode所需插件:datapack helper plus by spyglass;syntax-mcfunction

这两个插件工作的前提是,所创建文件的结构符合官方数据包结构

所有具体标签名称可以在游戏内先F3+H,鼠标悬浮在物品上就可以查看

数据包能够实现的效果大致如下: - 技能 / 法术系统 - RPG 系统 - Boss 战 - 自定义物品 - 新维度(部分) - 世界生成 - 生物行为 - 生存机制 - UI / HUD(部分) - 动画 / 过场 - 多人玩法 - 原版机制增强 - 解谜 / 恐怖地图


固定文件结构

data命名空间;

pack.mcmeta;

pack.png;

json文件:

[]数组:里面要放值。键值对,数组,字符串,数值都是值;

{}对象:里面要放键值对。键值对的值可以放任何值;

然后可以无限嵌套;

数据包内json文件基本就是这个格式编写;


覆盖原版

想要覆盖原版内容或者是删除原版某个内容;

对于recipes来说:

则需要在数据包中创建minecraft:命名空间,在此命名空间添加的内容会覆盖掉原版vanilla的同名内容,若想删除,把result写成air,或者该json文件直接为空也可以;


标签tag

标签文件:

将若干同类型的事物定义为一个集合,方便调用;使用json格式;

replace:false->取同名冲突路径文件的并集,挺友好;

replace:true->一般不用这个,会覆盖同路径文件;

引用标签文件:#命名空间+文件名;


函数function

函数文件:

在大多数情况可以代替命令方块使用;

一行只写一条指令;

缩进可以加在左边 右边不能再加;

加“#”注释,但注意这里注释和命令不能处于同一行;同一行要么命令要么注释;

调用一个函数时,minecraft会在一个游戏刻内执行完该函数所有命令;

函数文件中一但有错误,整个文件都会失效。因此当数据包无法执行时,需要去确认error的位置,此时可以用二分法排错,先删去一般代码再/reload,根据提示继续排错;

函数的执行:

函数会继承命令的执行环境;

当由数据包执行函数时:

位置位于主世界出生点,可以/setworldspawn修改,x轴正方向;

玩家输入/function执行函数时:

于玩家所在位置执行,实体对象为该玩家,该玩家维度,该玩家朝向;

两个特殊的函数标签:load.json,tick.json;名称固定,且位于minecraft命名空间下

load.json:此标签指定的函数会在数据包加载时自动执行一次

tick.json:此标签指定的函数会在每个游戏刻都执行一次,tick要谨慎使用哦

/schedule function<路径><时间>< append或者replace >命令:设置一定时间后执行函数

(一堆图片待添加)


配方recipes

配方的json文件都放在recipes命名空间内,可以在此命名空间内再分类几个文件夹,方便开发和维护;

(json文件其实不能带注释的,但为了学习用“//”注释一下)

crafting配方:(工作台)

无序合成:

以下添加配方:用一个钻石矿+金矿+绿宝石矿,合成一个圆石

{
    "type":"minecraft:crafting_shapeless",//表示原料可以无序摆放,2*2工作台也可以                                 
    "ingredients":[
        {
            "item":"minecraft:diamond_ore"
        },
        {
            "item":"minecraft:gold_ore"
        },
        {
            "item":"minecraft:emerald_ore"
        }
    ],
    "result":{
        "item":"minecraft:stone",
        "count":1    //如果是1其实可以省略改行代码,默认合成数量就是1
    }
}

添加“用深层钻石矿或者普通钻石矿都可以合成”的两种写法:

(1)

{
    "type":"minecraft:crafting_shapeless",
    "ingredients":[
        [
            {
                "item":"minecraft:diamond_ore"
            },
            {
                "item":"minecraft:deepslate_diamond_ore"
            }
        ],//第一项钻石矿用数组形式写,数组里再包含多个键值对
        {
            "item":"minecraft:gold_ore"
        },
        {
            "item":"minecraft:emerald_ore"
        }
    ],
    "result":{
        "item":"minecraft:stone",
        "count":1
    }
}

(2)

{
    "type":"minecraft:crafting_shapeless",
    "ingredients":[
        {
            "tag":"minecraft:diamond_ores"//不使用item而是使用能包含这一类矿石的标签tag
        },
        {
            "item":"minecraft:gold_ore"
        },
        {
            "item":"minecraft:emerald_ore"
        }
    ],
    "result":{
        "item":"minecraft:stone",
        "count":1
    }
}

(原版不包含的标签也可以自己写,然后引用自己写的标签)

接下来是有序合成:

{
    "type":"minecraft:crafting_shaped",
    "pattern":[
        "aaa",
        "aba",
        "aaa"
    ],
    "key":{
        "a":{
            "item":"minecraft:obsidian"
        },
        "b":{
            "item":"minecraft:diamond_ore"
        }
    },
    "result":{
        "item":"minecraft:totem_of_undying",
        "count":1
    }
}

blasting&&smelting配方:(高炉&&熔炉)

熔炉,高炉,烟熏炉都是差不多的,可以举一反三

篝火也可也编写的,也与上面三者类似,只不过没有experience可以编写

{
    "type": "minecraft:blasting",
    "ingredient": {
        "item": "minecraft:diamond_block"
    },
    "result": "minecraft:coal",//这类result直接填id就好了
    "experience": 666,//获得经验值
    "cookingtime": 200//所需时间(游戏刻)
}

切石机比较特殊,count必须写,而且可以写一对多,就是完全一样的配方生成多种不同物品,其他的写法同上;

锻造台(smithing):新版需要锻造模版;有点复杂放到后面再说;