本文章所述内容仅适用于Java版。
本教程包含Java版1.21.5至最新预览版内容
若发现版本内容不匹配等问题,请帮助我们扩充或修改
本教程建议学习者事先具备数据包基础和资源包基础
在不熟悉泽这些前置教程的情况下学习可能会遇到很多额外问题
本篇教程将让你学会在Java版1.21.5及以上版本利用数据包和资源包制作一些简单的功能性物品。
目录
1 准备
2 毒苹果
3 爆炸弓
4 凋零弓
5 TNT弩
6 可投掷火焰弹
7 草帽
8 鞘翅胸甲
9 墨镜
10 月之魔杖
11 导航
准备[编辑 | 编辑源代码]
在阅读该教程前,你需要具备以下教程所包含的知识:
Tutorial:制作数据包
Tutorial:制作资源包
毒苹果[编辑 | 编辑源代码]
思路
通过资源包修改原版苹果外观,同时利用数据组件新增一些特殊数据以和普通苹果区分。利用进度检测玩家吃下毒苹果,在吃下时立刻给予相应的状态效果。
物品原型
苹果。
物品来源
为了方便物品被我们获取,我们可以给毒苹果单独添加一个战利品表,这样也方便我们在其他文件中调用。
为了和原版的普通苹果区分开来,我们使用custom_data组件为苹果添加自定义数据custom_item:1b(表示当前物品为自定义物品)和id:"generic:poisonous_apple"(该标签用来模拟一个新的物品id)。
在数据包的generic命名空间中,新建loot_table目录,并添加如下文件:
generic/loot_table/player/poisonous_apple.jsonjson
...
{
"pools": [
{
"entries": [
{
"type": "item",
"name": "apple",
"functions": [
{
"function": "set_components",
"components": {
"custom_data": {
"custom_item": true,
"id": "generic:poisonous_apple"
},
"item_model": "generic:poisonous_apple",
"item_name": {
"translate": "item.generic.poisonous_apple"
}
}
}
]
}
],
"rolls": 1
}
]
}
触发层
之后,我们利用进度准则触发器consume_item来检测玩家食用了自定义物品:
generic/advancement/player/consumed_item.jsonjson
...
{
"criteria": {
"generic:player_consumed_item": {
"trigger": "consume_item",
"conditions": {
"item": {
"predicates": {
"minecraft:custom_data": {
"custom_item": true
}
}
}
}
}
},
"rewards": {
"function": "generic:player/consumed_item"
}
}
函数实现层
编写相应的处理函数:
generic/function/player/consumed_item.mcfunctionmcfunction
# 在聊天栏输出消息,用于测试
tellraw @s[tag=debug] {text:"使用了一个自定义物品"}
# 判断当前使用的物品是否为毒苹果
execute if items entity @s weapon.* *[custom_data~{id:"generic:poisonous_apple"}] run function generic:item/poisonous_apple/consumed
# 剥夺进度,使得该进度可以反复触发
advancement revoke @s only generic:player/consumed_item
编写以下函数实现玩家消耗后中毒:
generic/function/item/poisonous_apple/consumed.mcfunctionmcfunction
tellraw @s[tag=debug] {text:"毒苹果被食用了"}
effect give @s poison 3 0
视觉层
使用之前的give命令获取一个苹果,吃下去后可以通过聊天栏的输出判断有哪些函数被执行。经过测试后可以看到自身获得了一个3秒的中毒效果。
功能实现完毕,那么现在如何让它看起来与众不同呢?我们需要利用资源包为其指定一个新的物品模型。
这里直接仿照原版资源包中的文件内容和结构。在自己的资源包中新建一个命名空间,这里为generic,然后新建models文件夹,并在其中建立item子文件夹以放置物品模型文件。这里的物品模型文件其实是烘焙模型,直接定义了物品模型的渲染方式。
在item子文件夹中新建poisonous_apple.json文件,将原版的apple.json文件内容复制过来并稍作修改:
generic/models/item/poisonous_apple.jsonjson
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "generic:item/poisonous_apple"
}
}
设置毒苹果的物品模型映射:在generic命名空间中新建items文件夹,在该文件夹中新建文件filenamepoisonous_apple.json,该JSON文件即为毒苹果的物品模型映射文件。这里采用model类型,直接映射到之前所创建的item/poisonous_apple.json烘焙模型:
generic/items/poisonous_apple.jsonjson
{
"model": {
"type": "minecraft:model",
"model": "generic:item/poisonous_apple"
}
}
绘制毒苹果纹理:打开BlockBench软件,将item/poisonous_apple烘焙模型文件拖入,为其创建一个新的纹理,路径在generic/textures/item下,名称同样为poisonous_apple。
item/poisonous_apple.png
为了兼容多个语言,需要在资源包中使用翻译键分别指定不同的物品名称。在资源包generic命名空间下,新建lang目录,并在其中创建如下文件:
英文(美国)的翻译文件:
generic/lang/en_us.jsonjson
{
"item.generic.poisonous_apple": "Poisonous Apple"
}
简体中文的翻译文件:
generic/lang/zh_cn.jsonjson
{
"item.generic.poisonous_apple": "毒苹果"
}
测试
记得每次测试时检查数据包内容是否已经更新(函数可以使用/reload来重载,魔咒、维度等需要重新进入存档)。为了使纹理正常加载,也最好习惯性地使用F3+T来重载资源包。
这样,我们就可以通过如下命令获取到一个毒苹果了:
loot give @s loot generic:poisonous_apple
为自己添加debug标签,可以通过聊天栏的输出来判断函数执行是否正常:
tag @s add debug
爆炸弓[编辑 | 编辑源代码]
思路
直接利用魔咒效果组件来实现箭落地和射中实体时爆炸。
物品来源
这里通过为弓附加爆炸魔咒来实现爆炸弓,而不想直接新增一个特殊的弓,故custom_item字段值设置为false。
generic/loot_table/explosin_bow.jsonjson
...
{
"pools": [
{
"entries": [
{
"type": "item",
"name": "bow",
"functions": [
{
"function": "set_components",
"components": {
"custom_data": {
"custom_item": false
},
"enchantments": {
"generic:explosion": 1
}
}
}
]
}
],
"rolls": 1
}
]
}
触发层
以下文件中对于hit_block(击中方块)的触发效果,设置了offset(偏移量),使得爆炸位置向上偏移0.5格,这是为了防止爆炸生成在地表面以下削减爆炸威力。对于post_attack(攻击实体后)的触发效果则无需偏移,因为爆炸几乎直接生成在目标实体的所在位置。
generic/enchantment/explosin.jsonjson
...
{
"anvil_cost": 8,
"description": {
"translate": "enchantment.generic.explosion"
},
"effects": {
"hit_block": [
{
"effect": {
"radius": 3.0,
"sound": "entity.generic.explode",
"type": "minecraft:explode",
"damage_type": "minecraft:explosion",
"block_interaction": "block",
"small_particle": {
"type": "explosion"
},
"large_particle": {
"type": "explosion_emitter"
},
"attribute_to_user": true,
"knockback_multiplier": 3.0,
"offset": [
0.0, 0.5, 0.0
]
}
}
],
"post_attack": [
{
"enchanted": "attacker",
"affected": "victim",
"effect": {
"radius": 3.0,
"sound": "entity.generic.explode",
"type": "minecraft:explode",
"damage_type": "minecraft:explosion",
"block_interaction": "block",
"small_particle": {
"type": "explosion"
},
"large_particle": {
"type": "explosion_emitter"
},
"attribute_to_user": false,
"knockback_multiplier": 1.0
}
}
]
},
"max_cost": {
"base": 105,
"per_level_above_first": 0
},
"max_level": 1,
"min_cost": {
"base": 30,
"per_level_above_first": 0
},
"slots": [
"any"
],
"supported_items": [
"bow",
"crossbow"
],
"weight": 1
}
视觉层
为语言文件添加关于爆炸魔咒的翻译。这里仅给出新增的简体中文翻译:
generic/lang/zh_cn.jsonjson
...
{
"enchantment.generic.explosion": "爆炸"
}
测试
执行以下命令,给予自身一个爆炸弓,然后进行效果测试。
/loot give @s loot generic:explosion_bow
凋零弓[编辑 | 编辑源代码]
思路
在玩家射箭的一瞬间,以刚生成的箭实体为执行者和执行位置,生成具有和箭实体相同速度的凋灵之首。
触发层
添加一个名叫“凋零附加”的新魔咒,利用projectile_spawned魔咒效果检测箭生成,同时利用run_function魔咒效果执行相应函数,该函数的上下文即为所生成的箭的上下文。另外,我们还可以通过魔咒效果player_sound来播放凋灵之首被发射的声音。
generic/enchantment/wither_addition.jsonjson
...
{
"anvil_cost": 8,
"description": {
"translate": "enchantment.generic.wither_addition"
},
"effects": {
"projectile_spawned": [
{
"effect": {
"type": "play_sound",
"sound": "minecraft:entity.wither.shoot",
"volume": {
"type": "minecraft:uniform",
"min_inclusive": 0.4,
"max_exclusive": 1.0
},
"pitch": {
"type": "minecraft:uniform",
"min_inclusive": 0.1,
"max_exclusive": 1.0
}
}
},
{
"effect": {
"type": "run_function",
"function": "generic:enchantment/wither_addition"
}
}
]
},
"max_cost": {
"base": 135,
"per_level_above_first": 0
},
"max_level": 1,
"min_cost": {
"base": 50,
"per_level_above_first": 0
},
"slots": [
"any"
],
"supported_items": [
"bow",
"crossbow"
],
"weight": 1
}
视觉层
添加凋灵附加的魔咒翻译:
generic/lang/zh_cn.jsonjson
"enchantment.generic.wither_addition": "凋零附加"
函数实现层
添加之前魔咒效果中所要执行的函数,在该函数中生成一个和当前箭UUID相同的凋灵之首。
generic/function/enchantment/wither_addition.mcfunctionmcfunction
data modify storage generic:data arg.nbt.UUID set from entity @s UUID
data modify storage generic:data arg.nbt.Motion set from entity @s Motion
data modify storage generic:data arg.id set value "wither_skull"
data modify storage generic:data arg.nbt.Tags set value ["substitution_projectile"]
kill @s
execute at @s run function generic:macro/summon with storage generic:data arg
这里的generic:macro/summon是一个宏函数,可以根据传入的id和nbt动态生成一个实体:
$summon $(id) ~ ~ ~ $(nbt)
之所以让UUID相同,是为了当我们射箭的弓同时带有“爆炸”和“凋零附加”两种魔咒时,能够利用弓的伤害来源,使得射出的凋灵之首在碰到实体后也会爆炸。但是,由于箭带有一些和落地方块相关的数据,而凋灵之首没有,故在凋灵之首触碰到方块时并不会触发hit_block的爆炸效果。
测试
手持之前做的爆炸弓,执行以下命令后即可附上“凋零附加”魔咒。此后,弓射出的箭将自动被替换为凋灵之首。
/enchant @s generic:wither_addition
TNT弩[编辑 | 编辑源代码]
触发层
为了为弩单独制定其带有爆炸魔咒时的行为,我们需要在之前的exposion.json魔咒文件中添加如下效果。这里通过requirements字段来判断所射出的箭是否由弩射出。如果是,则对该箭执行generic:enchantment/crossbow_explosion函数。
generic/enchantment/explosion.jsonjson
...
...
"projectile_spawned": [
{
"effect": {
"type": "run_function",
"function": "generic:enchantment/crossbow_explosion"
},
"requirements": [
{
"condition": "entity_properties",
"entity": "this",
"predicate": {
"nbt": "{weapon:{id:'minecraft:crossbow'}}"
}
}
]
}
]
...
将TNT添加到arrows物品标签中即可让TNT也能被装填到弩中。
minecraft/tags/item/arrows.jsonjson
...
{
"values": [
"tnt"
]
}
函数实现层
在函数generic/function/enchantment/crossbow_explosion.mcfunction,判断当前箭所对应的物品是否为tnt,若是,则召唤TNT,并将Motion复制到该TNT。
generic/function/enchantment/crossbow_explosion.mcfunctionmcfunction
...
# 当前箭所对应的物品是否为tnt,若是,则召唤tnt,并将将Motion复制到该tnt
execute if data entity @s item{id:"minecraft:tnt"} run tag @s add destory
execute if entity @s[tag=destory] run summon tnt ~ ~ ~ {Tags:["substituion_projectile"], fuse: 10}
execute if entity @s[tag=destory] run data modify entity @n[tag=substituion_projectile,distance=..0.1] Motion set from entity @s Motion
# 刚射出箭时带有粒子效果
particle minecraft:firework ~ ~ ~ 0.1 0.1 0.1 0.1 5 normal
kill @s[tag=destory]
视觉层
修改原版弩模型映射:这里当玩家没有使用弩时,首先根据弩中状态的物品进行选取,若当前所弩的charge_type为arrow,则表示该弩装填了箭或其他物品。这里再通过物品堆叠组件charged_projectiles,根据弩装填物来选取不同模型。若当前装填的是tnt,则又通过composite型物品模型映射,将一个TNT模型和弩满弦状态的模型组合到一起——这样便能得到一个弩上装载了TNT的模型。
minecraft/items/crossbow.jsonjson
...
{
"model": {
"type": "minecraft:condition",
"on_false": {
"type": "minecraft:select",
"cases": [
{
"model": {
"type": "minecraft:select",
"property": "component",
"component": "charged_projectiles",
"cases": [
{
"when": [{"components": {"minecraft:intangible_projectile": {}}, "count": 1, "id": "minecraft:tnt"}],
"model": {
"type": "composite",
"models": [
{
"type": "model",
"model": "item/crossbow_pulling_2"
},
{
"type": "model",
"model": "item/crossbow_tnt"
}
]
}
},
{
"when": [{"count": 1, "id": "minecraft:tnt"}],
"model": {
"type": "composite",
"models": [
{
"type": "model",
"model": "item/crossbow_pulling_2"
},
{
"type": "model",
"model": "item/crossbow_tnt"
}
]
}
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow_arrow"
}
},
"when": "arrow"
},
{
"model": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow_firework"
},
"when": "rocket"
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow"
},
"property": "minecraft:charge_type"
},
"on_true": {
"type": "minecraft:range_dispatch",
"entries": [
{
"model": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow_pulling_1"
},
"threshold": 0.58
},
{
"model": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow_pulling_2"
},
"threshold": 1.0
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow_pulling_0"
},
"property": "minecraft:crossbow/pull"
},
"property": "minecraft:using_item"
}
}
新增弩上TNT烘焙模型:使用BlockBench软件,得到一个10×10×10的正方体模型。其纹理直接利用原版tnt方块的纹理。
minecraft/models/item/crossbow_tnt.jsonjson
...
{
"parent": "item/generated",
"textures": {
"1": "block/tnt_side",
"2": "block/tnt_top",
"3": "block/tnt_bottom",
"particle": "block/tnt_side"
},
"elements": [
{
"from": [2, 4, 8.5],
"to": [12, 14, 18.5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 6, 9]},
"faces": {
"north": {"uv": [0, 0, 16, 16], "texture": "#1"},
"east": {"uv": [0, 0, 16, 16], "texture": "#1"},
"south": {"uv": [0, 0, 16, 16], "texture": "#1"},
"west": {"uv": [0, 0, 16, 16], "texture": "#1"},
"up": {"uv": [0, 0, 16, 16], "texture": "#2"},
"down": {"uv": [0, 0, 16, 16], "texture": "#3"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [-90, 0, -60],
"translation": [2, 0.1, -3],
"scale": [0.9, 0.9, 0.9]
},
"thirdperson_lefthand": {
"rotation": [-90, 0, 30],
"translation": [2, 0.1, -3],
"scale": [0.9, 0.9, 0.9]
},
"firstperson_righthand": {
"rotation": [-90, 0, -55],
"translation": [1.13, 3.2, 1.13],
"scale": [0.68, 0.68, 0.68]
},
"firstperson_lefthand": {
"rotation": [-90, 0, 35],
"translation": [1.13, 3.2, 1.13],
"scale": [0.68, 0.68, 0.68]
}
}
}
测试
手持弩,并执行如下命令,当前弩即附有“爆炸”魔咒,若玩家身上携带有tnt,则会装载tnt到该弩上,所射出的tnt初速度和所射出的箭相同。
/enchant @s generic:explosion
可投掷火焰弹[编辑 | 编辑源代码]
可投掷火焰弹是一种可以像风弹一样被玩家右键消耗并生成一个带有一定速度火球的物品
思路
除了利用原版其他可以投掷出去的弹射物物品,比如风弹、雪球等来生成弹射物,也可以通过命令直接生成弹射物。为了能够像风弹一样可以被直接消耗且带有冷却时间,需要设置consumable和use_cooldown组件。设置后即可利用进度触发器consume_item在玩家消耗物品后触发,随后立刻根据玩家朝向召唤一个火球实体。
物品原型
本例使用木棍作为物品原型。
由于雪球的使用行为会覆盖consumable组件的消耗行为,所以不采用。
由于火焰弹本身对地面的点火行为会妨碍玩家进行物品消耗,所以不采用。
物品来源
lbj\item_modifier\throwable_fire_charge.jsonjson
...
[
{
"function": "set_components",
"components": {
"custom_data": {
"custom_item": true,
"consume_trigger": true,
"id": "lbj:throwable_fire_charge"
},
"item_model": "minecraft:fire_charge",
"item_name": "投掷型火焰弹",
"consumable": {
"animation": "none",
"consume_seconds": 0.01,
"has_consume_particles": false,
"sound": "item.firecharge.use"
},
"enchantment_glint_override": false,
"use_cooldown": {
"seconds": 0.5,
"cooldown_group": "lbj:throwable_fire_charge"
}
}
}
]
lbj\loot_table\item\throwable_fire_charge.jsonjson
...
{
"type": "command",
"pools": [
{
"entries": [
{
"type": "item",
"name": "stick",
"functions": [
{
"function": "reference",
"name": "lbj:throwable_fire_charge"
}
]
}
],
"rolls": 1
}
]
}
触发层
利用进度触发器consume_item检测玩家消耗了带有自定义数据consume_trigger的物品。
generic\advancement\player\consumed_item.jsonjson
...
{
"parent": "generic:player/root",
"criteria": {
"generic:player_consumed_item": {
"trigger": "consume_item",
"conditions": {
"item": {
"predicates": {
"minecraft:custom_data": {
"consume_trigger": true
}
}
}
}
}
},
"rewards": {
"function": "generic:player/consumed_item"
}
}
generic\function\player\consumed_item.mcfunctionmcfunction
...
tellraw @s[tag=debug] {"text":"消耗了物品"}
advancement revoke @s only generic:player/consumed_item
function #generic:player/consumed_item
generic\tags\function\player\consumed_item.jsonjson
...
{
"values": [
"lbj:item/throwable_fire_charge/player/trigger/consumed"
]
}
函数实现层
lbj\function\item\throwable_fire_charge\player\trigger\consumed.mcfunctionmcfunction
...
data modify storage generic:data arg.nbt set value {}
data modify storage generic:data arg.nbt.Owner set from entity @s UUID
data modify storage generic:data arg.id set value "fireball"
execute positioned ^ ^ ^1 run function generic:util/summon/projectile/shoot_in_direction with storage generic:data arg
考虑代码复用,故设置如下的通用朝向召唤模块,即根据传入的nbtstring和nbt以及当前执行者的位置、朝向来生成弹射物。这里的主要难点是设置弹射物的初速度——其实就是如何设定弹射物召唤时Motion的问题。通常来说,可直接将玩家当前的方向向量作为弹射物召唤时的速度。
generic\function\util\summon\projectile\shoot_in_direction.mcfunctionmcfunction
...
$data modify storage generic:data arg.entity set value {id:$(id), nbt:$(nbt)}
# 获取方向向量,输出的方向向量即storage generic:data output.direction_vector
function generic:util/get_direction_vector
data modify storage generic:data arg.entity.nbt.Motion set from storage generic:data output.direction_vector
function generic:util/summon/default with storage generic:data arg.entity
generic\function\util\summon\default.mcfunctionmcfunction
...
$summon $(id) ^ ^ ^ $(nbt)
获取方向向量:在玩家视线前方一个单位长的位置召唤一个实体,将此实体坐标和玩家坐标相减即可得到玩家当前的方向向量。
generic\function\util\get_direction_vector.mcfunctionmcfunction
...
execute store result score #x1 var run data get entity @s Pos[0] 1000
execute store result score #y1 var run data get entity @s Pos[1] 1000
execute store result score #z1 var run data get entity @s Pos[2] 1000
execute summon marker at @s run function generic:util/get_direction_vector/2
generic\function\util\get_direction_vector\2.mcfunctionmcfunction
...
execute store result score #x2 var run data get entity @s Pos[0] 1000
execute store result score #y2 var run data get entity @s Pos[1] 1000
execute store result score #z2 var run data get entity @s Pos[2] 1000
scoreboard players operation #x2 var -= #x1 var
scoreboard players operation #y2 var -= #y1 var
scoreboard players operation #z2 var -= #z1 var
data modify storage generic:data output.direction_vector set value [0d, 0d, 0d]
execute store result storage generic:data output.direction_vector[0] double 0.001 run scoreboard players get #x2 var
execute store result storage generic:data output.direction_vector[1] double 0.001 run scoreboard players get #y2 var
execute store result storage generic:data output.direction_vector[2] double 0.001 run scoreboard players get #z2 var
kill @s
测试
/loot give @s loot lbj:item/throwable_fire_charge
草帽[编辑 | 编辑源代码]
戴着草帽的玩家
思路
新增一个物品模型,主要设定其在生物头部的模型,纹理直接使用原版农民村民的纹理farmer.png。物品可穿戴性由物品堆叠组件equippable控制。
物品原型
本例使用木棍作为物品原型。因为木棍不具有额外的使用消耗等操作,且在合成中也可以做燃料,其在生存中的获取途径也较容易,不易对合成配方产生较大影响。
物品来源
lbj\item_modifier\straw_hat.jsonjson
...
[
{
"function": "set_components",
"components": {
"custom_data": {
"custom_item": true,
"id": "lbj:straw_hat"
},
"item_model": "lbj:straw_hat",
"item_name": "草帽",
"equippable": {
"slot": "head"
}
}
}
]
lbj\loot_table\item\straw_hat.jsonjson
...
{
"type": "command",
"pools": [
{
"entries": [
{
"type": "item",
"name": "stick",
"functions": [
{
"function": "reference",
"name": "lbj:straw_hat"
}
]
}
],
"rolls": 1
}
]
}
触发层
玩家穿戴物品的操作可直接由物品堆叠组件equippable控制。
视觉层
头部模型效果并不采用装备模型,而使用物品模型的头部变换形式。第三人称的左右手以及第一人称左右手模型均可根据模型实际大小和形状重新设定。
物品模型:
lbj/items/straw_hat.jsonjson
...
{
"model": {
"type": "model",
"model": "lbj:item/straw_hat"
}
}
lbj/model/item/straw_hat.jsonjson
...
{
"credit": "Made with Blockbench",
"texture_size": [32, 32],
"textures": {
"1": "lbj:item/farmer",
"particle": "lbj:item/farmer"
},
"elements": [
{
"from": [-1, 0, -1],
"to": [17, 0, 17],
"rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
"faces": {
"north": {"uv": [0, 0, 6.5, 0], "texture": "#1"},
"east": {"uv": [0, 0, 6.5, 0], "texture": "#1"},
"south": {"uv": [0, 0, 6.5, 0], "texture": "#1"},
"west": {"uv": [0, 0, 6.5, 0], "texture": "#1"},
"up": {"uv": [11.75, 16, 7.75, 12], "texture": "#1"},
"down": {"uv": [11.75, 12, 7.75, 16], "texture": "#1"}
}
},
{
"from": [3, 0, 3],
"to": [13, 4.5, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 0, 4]},
"faces": {
"north": {"uv": [10, 2, 12, 3], "texture": "#1"},
"east": {"uv": [8, 2, 10, 3], "texture": "#1"},
"south": {"uv": [14, 2, 16, 3], "texture": "#1"},
"west": {"uv": [12, 2, 14, 3], "texture": "#1"},
"up": {"uv": [10, 0, 12, 2], "texture": "#1"},
"down": {"uv": [12, 0, 14, 2], "texture": "#1"}
}
}
],
"display": {
"thirdperson_righthand": {
"translation": [0, 6.5, -5.25],
"scale": [0.8, 0.8, 0.8]
},
"thirdperson_lefthand": {
"translation": [0, 6.5, -5.25],
"scale": [0.8, 0.8, 0.8]
},
"firstperson_righthand": {
"translation": [2, 7, 0]
},
"firstperson_lefthand": {
"translation": [2, 7, 0]
},
"ground": {
"translation": [0, 6, 0]
},
"gui": {
"rotation": [30, 45, 0],
"translation": [0, 5, 0],
"scale": [0.7, 0.7, 0.7]
},
"head": {
"translation": [0, 12.5, 0],
"scale": [1.5, 1.5, 1.5]
},
"fixed": {
"rotation": [-90, 0, 0],
"translation": [0, 0, -16.25],
"scale": [2, 2, 2]
}
}
}
测试
/loot give @s loot lbj:item/straw_hat
鞘翅胸甲[编辑 | 编辑源代码]
身着铁鞘翅胸甲的玩家正在滑翔
思路
将鞘翅和胸甲的模型拼在一起。利用equippable组件使得第三人称下的盔甲模型渲染出鞘翅。利用glider组件使得穿上后带有滑翔效果。
物品原型
本例使用铁胸甲,其他材料的鞘翅胸甲可自行更换为其他胸甲。
物品来源
设置一个战利品表:
lbj\loot_table\item\iron_elytra_chestplate.jsonjson
...
{
"type": "command",
"pools": [
{
"entries": [
{
"type": "item",
"name": "iron_chestplate",
"functions": [
{
"function": "set_components",
"components": {
"custom_data": {
"custom_item": true,
"id": "lbj:iron_elytra_chestplate"
},
"item_model": "lbj:iron_elytra_chestplate",
"item_name": "带鞘翅的铁胸甲",
"equippable": {
"asset_id": "lbj:iron_elytra_chestplate",
"slot": "chest"
},
"glider": {}
}
}
]
}
],
"rolls": 1
}
]
}
视觉层
物品模型:
lbj\items\iron_elytra_chestplate.jsonjson
...
{
"model": {
"type": "minecraft:composite",
"models": [
{
"type": "minecraft:model",
"model": "lbj:item/elytra_chestplate/underlayer"
},
{
"type": "minecraft:model",
"model": "minecraft:item/iron_chestplate"
}
]
}
}
lbj\models\item\elytra_chestplate\underlayer.jsonjson
...
{
"credit": "Made with Blockbench",
"parent": "minecraft:item/generated",
"textures": {
"layer0": "item/elytra"
},
"display": {
"thirdperson_righthand": {
"translation": [0, 1.5, 1.5],
"scale": [0.55, 0.55, 0.55]
},
"firstperson_righthand": {
"rotation": [0, -90, 25],
"translation": [1.63, 2.2, 2.13],
"scale": [0.68, 0.68, 0.68]
},
"gui": {
"translation": [0, -4, 0]
}
}
}
装备模型:
lbj\equipment\iron_elytra_chestplate.jsonjson
{
"layers": {
"humanoid": [
{
"texture": "minecraft:iron"
}
],
"wings": [
{
"texture": "minecraft:elytra"
}
]
}
}
墨镜[编辑 | 编辑源代码]
戴着墨镜的玩家
思路
类似于上文的草帽,只需改变物品模型的第三人称头部变换即可。这里还可以用equippable组件添加屏幕遮罩纹理以模拟墨镜的视觉效果、
物品原型
这里依然使用木棍。
物品来源
lbj\loot_table\item\sunglasses.jsonjson
...
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "stick",
"functions": [
{
"function": "set_components",
"components": {
"item_model": "lbj:sunglasses",
"item_name": "墨镜",
"custom_data": {
"custom_item": true,
"id": "lbj:sunglasses"
},
"equippable": {
"slot": "head",
"camera_overlay": "lbj:item/sunglasses_camera_overlay"
}
}
}
]
}
]
}
]
}
视觉层
物品模型:
lbj\items\sunglasses.jsonjson
{
"model": {
"type": "model",
"model": "lbj:item/sunglasses"
}
}
以下物品模型的制作主要在BlockBench中进行。
lbj\models\item\sunglasses.jsonjson
...
{
"credit": "Made with Blockbench",
"textures": {
"0": "lbj:item/sunglasses",
"particle": "lbj:item/sunglasses"
},
"elements": [
{
"from": [-2.5, 0, 8],
"to": [18.5, 8, 8],
"rotation": {"angle": 0, "axis": "y", "origin": [1.5, 0, 8]},
"faces": {
"north": {"uv": [0, 1, 11.5, 5], "texture": "#0"},
"east": {"uv": [0, 0, 0, 5], "texture": "#0"},
"south": {"uv": [0, 1, 11.5, 5], "texture": "#0"},
"west": {"uv": [0, 0, 0, 5], "texture": "#0"},
"up": {"uv": [8, 0, 0, 0], "texture": "#0"},
"down": {"uv": [8, 0, 0, 0], "texture": "#0"}
}
},
{
"from": [-2.5, 6, 8],
"to": [-2.5, 7, 23],
"rotation": {"angle": 0, "axis": "y", "origin": [-2.5, 5, 8.75]},
"faces": {
"north": {"uv": [0, 0, 0, 0.25], "texture": "#missing"},
"east": {"uv": [0.5, 1.5, 11.5, 2], "texture": "#0"},
"south": {"uv": [0, 0, 0, 0.25], "texture": "#missing"},
"west": {"uv": [0.5, 1.5, 11.5, 2], "texture": "#0"},
"up": {"uv": [0, 3.75, 0, 0], "texture": "#missing"},
"down": {"uv": [0, 0, 0, 3.75], "texture": "#missing"}
}
},
{
"from": [18.5, 6, 8],
"to": [18.5, 7, 23],
"rotation": {"angle": 0, "axis": "y", "origin": [18.5, 5, 8.75]},
"faces": {
"north": {"uv": [0, 0, 0, 1], "texture": "#missing"},
"east": {"uv": [0, 1.5, 5.375, 2], "texture": "#0"},
"south": {"uv": [0, 0, 0, 1], "texture": "#missing"},
"west": {"uv": [0, 1.5, 5.375, 2], "texture": "#0"},
"up": {"uv": [0, 0, 0, 10.75], "texture": "#missing"},
"down": {"uv": [0, 0, 0, 10.75], "texture": "#missing"}
}
}
],
"display": {
"thirdperson_righthand": {
"translation": [-4, 0.25, -1],
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_lefthand": {
"translation": [-4, 0.25, -1],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"translation": [-5, 3, 0]
},
"firstperson_lefthand": {
"translation": [-5, 3, 0]
},
"ground": {
"translation": [0, 5, 0],
"scale": [0.6, 0.6, 0.6]
},
"gui": {
"translation": [0, 2, 0],
"scale": [0.7, 0.7, 0.7]
},
"head": {
"translation": [0, 1.5, -7.5],
"scale": [0.7, 0.7, 0.7]
},
"fixed": {
"translation": [0, 2.75, -2.5]
}
}
}
纹理:
item/sunglasses_camera_overlay.png
item/sunglasses.png
测试
/loot give @s loot lbj:item/sunglasses
月之魔杖[编辑 | 编辑源代码]
主条目:Tutorial:Java版自定义物品/月之魔杖
本节自定义物品月之魔杖,综合了前面的一部分技巧,同时也有着更为复杂的行为。手持该魔杖时,玩家长按右键1秒后进入充能完成状态,此时释放右键,即可在头部上方召唤一个受重力影响的魔法光球进行远程攻击,该魔法球在击中方块或实体时对半径3格内的所有实体造成3()伤害。
在使用魔杖时会同步召唤出一个魔法阵,光球会从该魔法阵(完成状态)的中心飞出。未完成充能时魔法阵位于玩家脚部,充能完成后即移动至玩家头顶。
玩家手持魔杖未达1秒释放会中断魔杖充能,下一次充能将重新开始。
若其半径3格内存在亡灵生物,则会快速改变自身移动轨迹,径直飞向最近的一个亡灵生物。
导航[编辑 | 编辑源代码]
查
论
编教程
新手教程
下载、安装与购买
成功地启动游戏
菜单屏幕
游戏术语
计量单位
不该做的事
新手生存
新手指南
第一天
第二天
第三天
提示与技巧
饥饿管理
生存注意事项
庇护所
庇护所
沙漠
微型
最佳居住生物群系
最佳建筑材料
建筑与结构
房屋类型
导航
综合
无聊的时候做什么
跑酷
空置域
伪和平
节省时间的小窍门
在水下利用TNT破坏方块
成就指南[仅BE]
进度指南[仅JE]
Minecraft
下界
末地
冒险
农牧业
最佳附魔指南
拓殖
战斗
完成冒险
双持
探索洞穴
利用碰撞箱
马
使用地图
测量距离和角度
采矿技术
钻石
化石
远古残骸
下界快速旅行
下界传送门
支柱跳跃
幻翼防护
生成骑士
穿越和破坏基岩
防卫僵尸围城[仅JE]
考古
不可破坏的末地水晶
使用更少的末地水晶重生末影龙
区块加载器
透视镜
挂机池
整理物品
潜影盒储存
物品运输
生物运输
自动化烧炼
选择燃料
爆炸室
凋灵笼
光速船[仅BE]
无材料消耗转换药水类型[仅BE]
在超平坦世界中管理史莱姆
减少摔落伤害
Minecraft和教育
视频
游戏直播
村民和交易
村庄生存
创建村庄
村庄机制
治愈僵尸村民
村民养殖
村民交易所
流浪商人陷阱
建筑
给工程添加美感
空气闸
建筑术语
建造游轮
建造大都市
建造过山车
建造安全的家园
建造水建筑
建造几何体
防御
家具
电梯
带釉陶瓦的图案
建造地板
像素艺术
牧场
屋顶类型
弧形屋顶
屋顶建造指南
暗门
建造居住地
水下建筑
墙壁和桥墩
水闸
调色板
建造蹦床
挑战
获得潮涌核心
触发及战胜袭击
打败末影龙
打败凋灵
挑战自定义地图
制作自定义地图
征服结构
征服神殿和神庙
征服掠夺者前哨站
征服堡垒遗迹
征服林地府邸
征服海底神殿
征服试炼密室
征服下界要塞
征服末地城
探索深暗之域和远古城市
特殊玩法
冒险模式生存
极限模式
超极限模式
在一个地区中长期生存下去
沙漠生存
在无限沙漠中生存
下界生存
从零开始下界生存
末地生存
雷暴生存
超平坦世界生存[仅JE]
岛屿生存
空岛生存
在和平难度中收集资源
速通
游荡生存
无限石头生存
愚人节版本生存[仅JE]
22w13oneBlockAtATime
24w14potato
农场
方块和物品
紫水晶
骨粉
仙人掌
农作物(小麦、胡萝卜、马铃薯、甜菜根、火把花和瓶子草)
西瓜、南瓜
紫颂果
圆石、石头或玄武岩
可可豆
泥土
滴水石锥
鸡蛋
鱼
花朵
蛙明灯
蜂蜜
冰
海带
肉
蘑菇
唱片
下界疣
黑曜石
袭击农场
1.21前
海泡菜
雪
甘蔗
甜浆果
原木、树苗和苹果
海龟鳞甲
藤蔓
羊毛
药水
经验
基岩
方块和物品复制
过时方法
铁轨复制机[仅JE]
TNT复制[仅JE]
零刻作物催熟技术[仅BE]
生物
刷怪塔
怪物磨床
刷怪笼陷阱
动物(猪、牛、绵羊)
烈焰人
洞穴蜘蛛
苦力怕
闪电苦力怕
溺尸
末影人
山羊
守卫者
铁傀儡
岩浆怪
以物易物
潜影贝
史莱姆
鱿鱼
海龟
村民
女巫
流浪商人
凋灵骷髅
僵尸猪灵
悦灵
红石
基础红石
基本逻辑门
高频电路
计时器
抽奖箱
漏斗
通用物品分类器
机械
侦测器稳定器
密码锁
随机发生器
红石机械
红石音乐
红石技巧
鲁布·戈德堡机械
探测器
方块更新感应器
比较器更新感应器
昼夜探测器
矿车
矿车
火车站
储存
数字化存储系统
陷阱
陷阱
陷阱设计
雪傀儡防御炮
TNT大炮
活板门利用
活塞
活塞使用
活塞电路
无延迟科技
飞行器
半连接性[仅JE]
零刻活塞[仅JE]
无头活塞[仅JE]
高级红石
光照操纵
高级红石电路
算术逻辑
计算器
时钟
摩尔斯码
打印机
红石计算机
红石电报机
多人游戏
玩法
游玩服务器
PvP
Java版1.9前、基岩版
基地
隐藏箱子
起床战争
空岛战争
猎人游戏
密室杀手
服务器管理
防止恶意破坏
服务器监狱
服务器商店
雪球菜单
架设服务器
架设Java版服务器
架设基岩版服务器
服务器架设脚本[仅JE]
服务器启动脚本
FreeBSD启动脚本
OpenBSD启动脚本
Ubuntu启动脚本
WebSocket服务器[仅BE]
架设Mod服务器[仅JE]
架设Hamachi服务器
架设Spigot服务器
虚拟硬盘服务器
使用ngrok搭建服务器
架设ZeroTier服务器
本地局域网联机
服务器维护
使用LeviLamina架设服务器[仅BE]
技术性
Minecraft帮助FAQ
自定义皮肤
地图
自定义地图
下载地图
使用MCEdit刷新旧区块[仅JE]
强制打开存档[仅JE]
降级存档
资源包
制作资源包
纹理
音效和音乐
语言和文本
模型
加载资源包
数据包[仅JE]
制作数据包
实例:射线投射
视线魔法
自定义物品
安装数据包
自定义世界生成
自定义结构生成
自定义盔甲纹饰
附加包[仅BE]
基岩版开发指南
制作资源附加包
高级
基岩版实体文档
修改实体模型
制作行为包
自定义实体
自定义方块
自定义物品
自定义附加包语言文件
自定义音效
命令格式
仅Java版
生成下落的方块
文本组件
NBT命令标签
物品堆叠组件
记分板
SNBT
命令方块
结构方块
用命令操控实体
NBT与JSON
自定义命令触发
目标选择器
游戏安装
仅Java版
提高帧率
更新Java
修复Apache Log4j2漏洞
编写启动器
快照版本安装
获取崩溃报告
查看游戏日志
仅基岩版
Minecraft URL Scheme
汇报漏洞
在U盘中使用旧版启动器运行游戏
恢复损坏的地图数据
修复因数据包损坏的世界
在Google Drive上运行游戏
将游戏数据保存到Dropbox云端
仅限地图数据
在ChromeOS上运行Java版
过时教程
到达边境之地
获取崩溃报告(旧版)
无数据包生存
升级LWJGL
更新Minecraft
命令统计值
村民养殖(村庄与掠夺前)
村庄链
水道
水车
仅英文
自定义纹理包
基于门的铁傀儡陷阱
人工湖
矿车加速器
中继器重启系统
水梯
无延迟电路
教程
新手手册
高难度通关配装总结
成就指南
高塔指南
常见问题
教程
新手手册
基地建设指南
资源收集指南
单位阵容组合
注:作下划线标记的教程为中文原创教程。