呼啸泰坦 发表于 2022-1-25 17:14:53

addons制作第七期:基础方块

本帖最后由 泥黑木大跌 于 2022-1-26 21:06 编辑

前言
mc中拥有大量的方块,但对于一些探索mc的老玩家来说,已经太无聊了,那么今天,我来教大家如何添加方块

在本贴需要学会的东西
创建方块
给方块添加函数
给方块添加掉落物

正式开始

首先,我们在行为包文件添加一个叫做block的文件夹,然后老规矩,在里面添加一个json,在json里写
{
"format_version": "1.16.100",
"minecraft:block": {
    "description": {
      "identifier": "him:block",//ID
      "category": "Nature"
    },
    "components": {
      "minecraft:loot": "loot_tables/blocks/block.json",//掉落物路径
      "minecraft:destroy_time": 114514.0,//破坏时间,太大会导致方块无法破坏
      "minecraft:friction": 0.7,//踩在上面的行走速度
      "minecraft:map_color": "#FFFFFF",//地图上显示的颜色
      "minecraft:explosion_resistance": 1.0,//能承受的爆炸,值越大,越抗爆
      "minecraft:flammable": {//点燃几率,如果不需要就移除或填0
      "flame_odds": 1,
      "burn_odds": 1
      },
      "minecraft:block_light_absorption": 0.0,//吸收光
      "minecraft:block_light_emission": 0.0,//发出的光照
      "minecraft:on_player_destroyed": {
      "event": "remove:block",
      "target": "self"
      },
      "minecraft:material_instances": {
      "*": {
          "texture": "him:block",//材质,需与上面ID相符
          "render_method": "blend"
      }
      },
      "minecraft:on_step_on": {
      "event": "step:on",
      "target": "self"
      },
      "minecraft:on_step_off": {
      "event": "step:off",
      "target": "self"
      },
      "minecraft:on_placed": {
      "event": "size:block",
      "target": "self"
      },
      "minecraft:random_ticking": {
      "on_tick": {
          "event": "random:tick",
          "target": "self"
      }
      },
      "minecraft:on_fall_on": {
      "event": "fall:on",
      "target": "self"
      },
      "minecraft:ticking": {
      "looping": true,
      "range": [
          10,
          10
      ],
      "on_tick": {
          "event": "on_tick",
          "target": "self"
      }
      },
      "minecraft:creative_category": {
      "category": "nature"
      }
    },
    "events": {//破坏该方块后的函数
      "remove:block": {
      "run_command": {//模式
          "command": [
            "function function_ok"//函数名称 不能是中文
          ]
      }
      },
      "size:block": {//放置方块执行function
      "run_command": {
          "command": [
            "function function_ok"
          ]
      }
      },
      "step:on": {//踩在上面执行的函数
      "run_command": {
          "command": [
            "function function_ok"
          ]
      }
      },
      "step:off": {//离开上面执行的函数
      "run_command": {
          "command": [
            "function function_ok"
          ]
      }
      },
      "on_tick": {//过一段时间执行的函数
      "run_command": {
          "command": [
            "function function_ok"
          ]
      }
      },
      "random:tick": {//不知道
      "run_command": {
          "command": [
            "function function_ok"
          ]
      }
      },
      "fall:on": {//不知道
      "run_command": {
          "command": [
            "function function_ok"
          ]
      }
      }
    },
    "permutations": [
      {
      "condition": "query.block_property('block:rotation') == 2",
      "components": {
          "minecraft:rotation": [
            0,
            0,
            0
          ]      }
      },
      {
      "condition": "query.block_property('block:rotation') == 3",
      "components": {
          "minecraft:rotation": [
            0,
            -180,
            0
          ]
      }
      },
      {
      "condition": "query.block_property('block:rotation') == 4",
      "components": {
          "minecraft:rotation": [
            0,
            90,
            0
          ]
      }
      },
      {
      "condition": "query.block_property('block:rotation') == 5",
      "components": {
          "minecraft:rotation": [
            0,
            -90,
            0
          ]
      }
      }
    ]
}
}

然后跟着注释来,但有一些函数不知道触发方法,就需要你一个一个去执行了,loot一会讲

掉落物

我们可以在代码中发现一个loot事件,这正是和掉落物有关,我们把路径填写好后在行为包添加一个叫loot_tables的文件,其实名字不重要,重要的是填写的路径,然后再里面添加blocks文件夹又在里面添加一个json,需与方块的loot事件中的路径的名称相同,不支持除英文外的语言,然后再里面写入
{
"pools": [
    {
      "rolls": 1,
      "entries": [
      {
          "type": "item",
          "weight": 1,
          "name": "minecraft:diamond",
          "functions": [
            {
            "function": "set_count",
            "count": {
                "min": 1,
                "max": 1
            }
            },
            {
            "enchantments": [],
            "function": "enchant_randomly"
            }
          ]
      }
      ]
    }
]
}
这次没有注释,我来解释其中的事件
"name",掉落物的ID
"weight"掉落的数量
如果无需掉落物可以删掉该json

资源包

在资源包文件夹中添加textures、texts等文件夹,再添加blocks.json这个文件,我们先在texture文件夹创建一个叫blocks的文件夹,把贴图放里面,贴图必须为正方形,可以选用32×32的贴图,然后退出,但不要退出textures文件夹,在与blocks文件夹同层的地方创建一个叫terrain_texture.json的文件,在里面写入

{
"resource_pack_name": "vanilla",
"texture_name": "atlas.terrain",
"padding": 8,
"num_mip_levels": 4,
"texture_data": {//方块后缀
    "block": {
      "textures": "textures/blocks/block"//材质路径
    }
}
}
然后跟着注释来,如果需要再添加一个,则在上一个的大括号后面加“,”然后退出textures文件,添加一个叫blocks.json的文件,在里面写入

{
"him:block": {//ID
    "textures": "block",//需与terrain_texture填的后缀一模一样
    "sound": "normal"//音效
},
"format_version": [
    1,
    1,
    0
]
}

由于版本号在下面,所以大括号要加,然后跟着注释来,此时只差翻译部分,我们的教程就完了,这很简单,添加一个叫做texts的文件夹,在里面创建一个叫zh_CN.lang的文件,在里面写入tile.him:block.name=方块

格式是这样的
tile.ID前缀:ID后缀.name=名字
然后我们滴addons完成了

接下来提供模板包和图片
模板包:

图片:








D2BQB 发表于 2022-1-25 17:17:56

对于我这种沙币来说,根本就不会。根本就听不懂。

一名老玩家 发表于 2022-1-25 20:31:37

关于函数啥的我压根看不懂[哔哩_doge]

XiaMoHuaHuo_CN 发表于 2022-1-25 21:31:15

本帖最后由 XiaMoHuaHuo_CN 于 2022-1-25 21:34 编辑

纠错:首先,Json中是不能写注释的

其次,内容补充
正确的翻译应该看下面:(后面不想翻译了,请自行删除注释)

{
    "format_version": "1.16.100", //支持版本
    "minecraft:block": { //设置类型为方块
      "description": { //描述
            "identifier": "him:block", //物品命名空间
            "category": "Nature" //类型
      },
      "components": { //组件
            "minecraft:loot": "loot_tables/blocks/block.json", //掉落物路径
            "minecraft:destroy_time": 114514.0, //破坏时间,无法破坏请填 -1
            "minecraft:friction": 0.7, //踩在上面的行走速度
            "minecraft:map_color": "#FFFFFF", //地图上显示的颜色
            "minecraft:explosion_resistance": 1.0, //能承受的爆炸,值越大,越抗爆
            "minecraft:flammable": { //点燃几率,如果不需要就移除或填0
            "flame_odds": 1,
            "burn_odds": 1
      },
      "minecraft:block_light_absorption": 0.0, //吸光等级
      "minecraft:block_light_emission": 0.0, //光照等级
      "minecraft:on_player_destroyed": { //玩家死亡时
          "event": "remove:block", //移除方块
          "target": "self" //触发对象
      },
      "minecraft:material_instances": { //材质
          "*": { //所有
            "texture": "him:block", //需要设置材质的命名空间
            "render_method": "blend" //混合
          }
      },
      "minecraft:on_step_on": { //被踩踏
          "event": "step:on", //事件(环境)
          "target": "self" //触发对象
      },
      "minecraft:on_step_off": { //未踩踏
          "event": "step:off", //事件(环境)
          "target": "self" //触发对象
      },
      "minecraft:on_placed": { //在某个方块上的时候
          "event": "size:block", //事件(环境)
          "target": "self" //触发对象
      },
      "minecraft:random_ticking": { //随机tick
          "on_tick": { //在tick时
            "event": "random:tick", //事件(环境)
            "target": "self" //触发对象
          }
      },
      "minecraft:on_fall_on": { //掉落
          "event": "fall:on", //事件(环境)
          "target": "self" //触发对象
      },
      "minecraft:ticking": { //ticking相关
          "looping": true, //原型
          "range": [ //排列
            10,
            10
          ],
          "on_tick": { //过一段时间后
            "event": "on_tick", //事件(环境)
            "target": "self" //触发对象
          }
      },
      "minecraft:creative_category": { //新建分类
          "category": "nature" //分类名
      }
      },
      "events": { //破坏该方块后的函数
      "remove:block": { //移除方块
          "run_command": { //运行命令
            "command": [ //命令
            "function function_ok" //命令名称 不能是中文
            ]
          }
      },
      "size:block": { //方块被填充
          "run_command": { //运行命令
            "command": [ //命令
            "function function_ok" //命令名称,不能是中文
            ]
          }
      },
      "step:on": { //踩在方块
          "run_command": { //运行命令
            "command": [ //命令
            "function function_ok" //命令名称,不能是中文
            ]
          }
      },
      "step:off": { //离开方块
          "run_command": { //运行命令
            "command": [ //命令
            "function function_ok" //命令名称,不能是中文
            ]
          }
      },
      "on_tick": { //过一段时间后
          "run_command": { //运行命令
            "command": [ //命令
            "function function_ok" //命令名称,不能是中文
            ]
          }
      },
      "random:tick": { //随机tick
          "run_command": { //运行命令
            "command": [ //命令
            "function function_ok" //命令名称,不能是中文
            ]
          }
      },
      "fall:on": {//不知道
          "run_command": {
            "command": [
            "function function_ok"
            ]
          }
      }
      },
      "permutations": [ //序列
      {
          "condition": "query.block_property('block:rotation') == 2",
          "components": {
            "minecraft:rotation": [
            0,
            0,
            0
            ]      }
      },
      {
          "condition": "query.block_property('block:rotation') == 3",
          "components": {
            "minecraft:rotation": [
            0,
            -180,
            0
            ]
          }
      },
      {
          "condition": "query.block_property('block:rotation') == 4",
          "components": {
            "minecraft:rotation": [
            0,
            90,
            0
            ]
          }
      },
      {
          "condition": "query.block_property('block:rotation') == 5",
          "components": {
            "minecraft:rotation": [
            0,
            -90,
            0
            ]
          }
      }
      ]
    }
}

呼啸泰坦 发表于 2022-1-25 21:36:28

XiaMoHuaHuo_CN 发表于 2022-1-25 21:31
纠错:首先,Json中是不能写注释的

其次,内容补充


感谢

lpyqzMinecraft 发表于 2022-1-25 21:39:07

是我刚看到,还是我刚看的。总之,我会说:终于更新啦! 啦 啦啦 啦啦 啦 啦啦 啦啦!

YesNewBee 发表于 2022-3-12 15:46:26

那么,怎样让一个方块只能被特定工具挖掘呢[哔哩_脱单]

lpyqzMinecraft 发表于 2022-3-17 13:03:47

方块需不需要添加type属性啊?我只知道itme需要添加。

L10NDev 发表于 2022-3-17 13:53:41

XiaMoHuaHuo_CN 发表于 2022-1-25 21:31
纠错:首先,Json中是不能写注释的

其次,内容补充


纠错,JSON可以写注释,但是你写的位置不对,不报错才怪=_=

L10NDev 发表于 2022-3-17 13:54:31

XiaMoHuaHuo_CN 发表于 2022-1-25 21:31
纠错:首先,Json中是不能写注释的

其次,内容补充


所有注释全写括号内不报错才怪=_=
页: [1]2
查看完整版本: addons制作第七期:基础方块