本文章所述内容仅适用于Java版。
目录
1 预期效果
2 对射线投射的改进
3 右键检测
3.1 数据包实现
4 视线爆炸魔法
4.1 数据包实现
5 蜂巢探视魔法
5.1 胡萝卜钓竿开关
6 参见
7 导航
此教程介绍一个数据包制作的实例,阅读此教程前可先阅读Tutorial:制作数据包和Tutorial:制作资源包。
本教程适用于Java版1.21.2以上版本。低于该版本的实际效果请自行评估。
预期效果[编辑 | 编辑源代码]
在本实例中,我们将利用Tutorial:制作数据包/实例:射线投射中所讲述的一些知识,使得玩家右键物品后能在其视线所指处发生以下事件:
爆炸。
若为蜂巢或蜂箱,则输出其中的成年和幼年蜜蜂数量。
对射线投射的改进[编辑 | 编辑源代码]
在之前的射线投射实例中,我们设计了一个非常基础的射线投射算法。接下来我们将让其拥有更强大的兼容性。首先我们改进一下shoot部分:
generic/function/raycast/shoot.mcfunctionmcfunction
# particle minecraft:end_rod ~ ~ ~ 0 0 0 0 0
# execute positioned ~ ~-0.5 ~ run summon interaction ^ ^ ^ {Tags:["test","source_entity"]}
scoreboard players add #raycast_check_times var 1
execute if score #raycast_check_times var >= #raycast_max_check_times var run return run function generic:raycast/end
# 检测当前位置是否有可穿过的方块,没有就停止
execute unless block ~ ~ ~ #generic:raycast/can_pass run return run function generic:raycast/end
# 如果射到实体就停止
execute if score #raycast_pass_entity var matches 0 positioned ~-0.5 ~-0.5 ~-0.5 if entity @n[dx=0,dy=0,dz=0,tag=!source_entity] positioned ~0.5 ~0.5 ~0.5 if function generic:raycast/check_entity run return run function generic:raycast/end
# 每次的步长从0.1改为0.5,减少递归次数
execute positioned ^ ^ ^0.5 run function generic:raycast/shoot
以上代码新增了检测实体的部分,这使得我们的射线在碰撞到实体后也会执行终止函数。考虑到检测实体可能不是所有系统都必须的,所以我们通过判断#raycast_pass_entity的分数来对检测实体的功能进行开关控制,为0时表示不忽略实体,为1时即默认状态下忽略实体。
考虑到我们的步长是0.5,为了更加精确的检测到实体,我们采取先检测以当前位置为中心1×1×1正方体范围内有无实体,若有则执行另一个步长为0.1的递归检测:
generic/function/raycast/check_entity.mcfunctionmcfunction
# particle minecraft:end_rod ~ ~ ~ 0 0 0 0 0
# execute positioned ~ ~-0.5 ~ run summon interaction ^ ^ ^ {Tags:["test","source_entity"]}
# 制造一个非常小的正方体检测区域
execute positioned ~-0.995 ~-0.995 ~-0.995 as @e[dx=0,dy=0,dz=0,tag=!source_entity] positioned ~0.99 ~0.99 ~0.99 if entity @s[dx=0,dy=0,dz=0] run return 1
scoreboard players add #raycast_check_entity_times var 1
execute if score #raycast_check_entity_times var matches 10.. run return fail
execute positioned ^ ^ ^0.1 run function generic:raycast/check_entity
这里的#raycast_check_entity_times类似于之前shoot中的#raycast_check_times,用来记录当前已经递归过的次数。由于之前已经检测到了以当前位置为中心的1×1×1正方体范围内存在实体,故我们直接设定最大检测次数为10即可。
递归结束后,我们将原来的单个分配函数变为一个函数标签:
generic/function/raycast/end.mcfunctionmcfunction
# particle minecraft:dust{color:[0, 0, 1], scale:1.0} ~ ~ ~ 0.1 0.1 0.1 0 50 force
function #generic:raycast
scoreboard players set #raycast_max_check_times var 0
scoreboard players set #raycast_pass_entity var 1
tag @s remove source_entity
函数标签可以被理解为一个函数接口。因为数据包之间都可以直接在对应的命名空间下添加该标签,以直接将射线射出后的终端执行环境接入到自身的逻辑中。这里我们先留空以备用:
generic/tags/function/raycast.jsonjson
{
"values": []
}
最后,我们在start函数中也对#raycast_check_entity_times设定初始值0:
generic/tags/function/raycast/start.mcfunctionmcfunction
# /execute as @s anchored eyes run
scoreboard players set #raycast_check_times var 0
scoreboard players set #raycast_check_entity_times var 0
tag @s add source_entity
execute positioned ^ ^ ^0.5 run function generic:raycast/shoot
现在,只需要编写并执行以下函数就能完整使用该射线投射模块:
# 设定最大递归次数为1000
scoreboard players set #raycast_max_check_times var 1000
# 不忽略实体
scoreboard players set #raycast_pass_entity var 0
# 从当前执行者的眼睛位置开始执行
execute anchored eyes run function generic:raycast/start
右键检测[编辑 | 编辑源代码]
所需的主要知识:
命令/execute
命令/give
SNBT格式
物品堆叠组件
参数类型#item_stack
参数类型#item_predicate
Java版函数
标签
记分板
数据包实现[编辑 | 编辑源代码]
这里我们主要使用1.21.2的新增组件来实现右键检测。首先,利用进度检测玩家消耗了物品:
generic/advancement/event/right_click.jsonjson
{
"criteria": {
"generic:right_click_event": {
"trigger": "minecraft:consume_item",
"conditions": {
"item": {
"predicates": {
"custom_data": "{listen_event:'right_click'}"
}
}
}
}
},
"rewards": {
"function": "generic:event/right_click"
}
}
我们不希望物品消失,所以我们必须要通过一些方法来恢复被消耗的物品:
generic/function/event/right_click.mcfunctionmcfunction
advancement revoke @s only generic:event/right_click
# 模拟协程,将当前执行者和执行者手持物寄存,待1t时间后再恢复其手持物
data modify entity 0-0-0-0-0 Thrower set from entity @s UUID
data modify storage generic:event right_click.last_selected_item set from entity @s SelectedItem
schedule function generic:event/right_click/delay_1t 1t
function #generic:right_click
generic/function/event/right_click/delay_1t.mcfunctionmcfunction
function generic:event/right_click/regain_item with storage generic:event right_click.last_selected_item
generic/function/event/right_click/regain_item.mcfunctionmcfunction
$execute as 0-0-0-0-0 on origin run item modify entity @s weapon.mainhand {"function": "set_components", components:$(components)}
创建函数标签#generic:right_click:
generic/tags/function/right_click.jsonjson
{
"values": []
}
之后其他系统只需要使用函数标签即可“继承”右键触发后的执行环境。
以上实现的直接利用进度触发,在性能上较好,同时直接利用了函数标签来方便其他函数承接,在扩展性方面也更胜一筹。由于新版组件可以单独设定动画效果和冷却时间,故在功能设计上也更加灵活。
视线爆炸魔法[编辑 | 编辑源代码]
为了达到爆炸的目的,我们可以在视线所指处召唤一个瞬间爆炸的TNT或者苦力怕。
所需知识:
相对坐标
局部坐标
目标选择器
记分板
命令/execute
命令/summon
命令/particle
数据包
Java版函数
在Tutorial:制作数据包/实例:射线投射中我们已经较为清楚地描述了“raycast”的实现,该章节的主要思路即借助之前所创建的函数来实现在所指位置召唤爆炸实体。
数据包实现[编辑 | 编辑源代码]
在右键检测函数中添加要接入的函数(添加函数接口):
generic/tags/function/right_click.jsonjson
{
"values": [
"test:sight_magic/extender/right_click"
]
}
承接右键检测函数标签(实现右键检测接口):
test/function/sight_magic/extender/right_click.mcfunctionmcfunction
# 断开非属sight_magic的执行源
execute unless items entity @s weapon.mainhand *[custom_data~{id:'sight_magic'}] run return fail
# 使用一对used_sight_magic来传递该域的上下文标志
tag @s add used_sight_magic
# 模拟条件分支,根据手持物品的不同执行不同的函数。这里意为产生一个射线,并在射线终止处发生爆炸
execute if items entity @s weapon.mainhand *[custom_data~{cause_event:'explosion'}] run function test:sight_magic/explosion/start
# 域闭合
tag @s remove used_sight_magic
玩家右键后,在当前玩家的眼睛位置产生射线,然后在射线终止处发生爆炸:
test/function/sight_magic/explosion/start.mcfunctionmcfunction
tag @s add explosion
scoreboard players set #raycast_max_check_times var 500
scoreboard players set #raycast_pass_entity var 0
execute at @s anchored eyes run function generic:raycast/start
tag @s remove explosion
然后只需实现射线投射接口:
generic/tags/function/raycast.jsonjson
{
"values": [
"test:sight_magic/extender/raycast_end"
]
}
test/function/sight_magic/extender/raycast_end.mcfunctionmcfunction
# 排除其他执行源
execute if entity @s[tag=!used_sight_magic] run return fail
# 在射线终止处爆炸
execute if entity @s[tag=explosion] run function test:sight_magic/explosion/do_at
直接召唤一个tnt来实现爆炸:
test/function/sight_magic/explosion/do_at.mcfunctionmcfunction
summon tnt
现在,如果你获得了一个这样的木棍:
summon item ~ ~ ~ {Item:{components:{"minecraft:consumable":{animation:"block",consume_seconds:0.0f,has_consume_particles:0b,on_consume_effects:[{sound:"minecraft:entity.player.attack.crit",type:"minecraft:play_sound"}],sound:"minecraft:entity.player.attack.crit"},"minecraft:custom_data":{cause_event:"explosion",id:"sight_magic",listen_event:"right_click"},"minecraft:use_cooldown":{seconds:0.1f},"minecraft:use_remainder":{count:1,id:"minecraft:stick"}},count:1,id:"minecraft:stick"}}
按下右键后,由于食用时间为0,故会在一瞬间触发右键检测进度,继而通过右键检测函数标签调用我们的视线魔法相关函数。最终效果即在视线所指的方块或实体处产生爆炸。
蜂巢探视魔法[编辑 | 编辑源代码]
蜂巢探视魔法将允许玩家通过右键使用手中的物品来获取其所指蜂巢中的成年和幼年蜜蜂数量。
我们继续创建相关函数。在我们的test命名空间下的sight_magic文件夹中,创建bee_finder目录,以制作新的蜂巢探视魔法。接下来,我们仿照前文的视线爆炸魔法,首先实现右键触发功能:
test/sight_magic/extender/right_click.mcfunctionmcfunction
# ...(这里省略了一些命令)
tag @s add used_sight_magic
execute if items entity @s weapon.mainhand *[custom_data~{cause_event:'explosion'}] run function test:sight_magic/explosion/start
# 这是新增的命令,该命令意为,当玩家右键使用带有cause_event:'get_bees'自定义标签值的主手物品后触发bee_finder/end函数
execute if items entity @s weapon.mainhand *[custom_data~{cause_event:'get_bees'}] run function test:sight_magic/bee_finder/start
tag @s remove used_sight_magic
右键触发后,就发射一条射线:
test/sight_magic/bee_finder/startmcfunction
tag @s add get_bees
scoreboard players set #raycast_max_check_times var 100
execute anchored eyes run function generic:raycast/start
tag @s remove get_bees
随后直接转到射线终点位置,在extender/raycast_end中新增一条命令:
test/sight_magic/extender/raycast_end.mcfunctionmcfunction
execute if entity @s[tag=!used_sight_magic] run return fail
execute if entity @s[tag=explosion] run function test:sight_magic/explosion/do_at
# 新增的命令:(用来实现bee_finder)
execute if entity @s[tag=get_bees] run function test:sight_magic/bee_finder/do_at
将教程“射线投射”中bee_finder的相关主要代码复制过来并稍作修改:
test/sight_magic/explosion/do_at.mcfunctionmcfunction
execute unless block ~ ~ ~ #beehives run return run function test:sight_magic/bee_finder/fail/invalid_block
data modify storage generic:data queue.value set from block ~ ~ ~ bees
execute unless data storage generic:data queue.value[] run return run function test:sight_magic/bee_finder/fail/no_bees
function test:sight_magic/bee_finder/counter/init
function test:sight_magic/bee_finder/counter/run
tellraw @s [{"text": "成年蜜蜂数:"}, {"score": {"name": "#bee_finder_adult_number", "objective": "var"}}, {"text":" 幼年蜜蜂数:"}, {"score": {"name": "#bee_finder_baby_number", "objective": "var"}}]
其余相关函数文件也一并复制过来并修改一些细节:
test/sight_magic/bee_finder/fail/invalid_block.mcfunctionmcfunction
tellraw @s {"text": "目标方块不是蜂巢或蜂箱!", "color": "red"}
test/sight_magic/bee_finder/fail/no_bees.mcfunctionmcfunction
tellraw @s {"text": "目标方块没有蜜蜂!", "color": "red"}
test/sight_magic/bee_finder/counter/init.mcfunctionmcfunction
scoreboard players set #bee_finder_baby_number var 0
scoreboard players set #bee_finder_adult_number var 0
test/sight_magic/bee_finder/counter/run.mcfunctionmcfunction
function generic:data/queue/fetch_head
scoreboard players reset #bee_finder_bee_age var
execute store result score #bee_finder_bee_age var run data get storage generic:data queue.output.entity_data.Age
execute if score #bee_finder_bee_age var matches ..-1 run scoreboard players add #bee_finder_baby_number var 1
execute if score #bee_finder_bee_age var matches 0.. run scoreboard players add #bee_finder_adult_number var 1
execute if data storage generic:data queue.value[] run function test:sight_magic/bee_finder/counter/run
现在执行以下命令(将之前木棍中的cause_event:'explosion'改为cause_event:'get_bees'):
summon item ~ ~ ~ {Item:{components:{"minecraft:consumable":{animation:"block",consume_seconds:0.0f,has_consume_particles:0b,on_consume_effects:[{sound:"minecraft:entity.player.attack.crit",type:"minecraft:play_sound"}],sound:"minecraft:entity.player.attack.crit"},"minecraft:custom_data":{cause_event:"get_bees",id:"sight_magic",listen_event:"right_click"},"minecraft:use_cooldown":{seconds:0.1f},"minecraft:use_remainder":{count:1,id:"minecraft:stick"}},count:1,id:"minecraft:stick"}}
就能获得一根右键后可以获取目标方块中的蜜蜂数量的木棍。
胡萝卜钓竿开关[编辑 | 编辑源代码]
此段落需要更新。
段落中某些信息已经不符合当前版本情况。
上面提到了函数nuke:entities/player,下面会给出所有和这个胡萝卜钓竿开关相关的函数:
nuke:entities/player
execute as @s[scores={nukeUseCSt=1..}] at @s run function nuke:use_carrot_on_a_stick/type
nuke:use_carrot_on_a_stick/type
execute if items entity @s weapon.mainhand carrot_on_a_stick run function nuke:use_carrot_on_a_stick/mainhand
execute if items entity @s weapon.offhand carrot_on_a_stick run function nuke:use_carrot_on_a_stick/offhand
scoreboard players reset @s nukeUseCSt
nuke:use_carrot_on_a_stick/mainhand
execute if items entity @s weapon.mainhand carrot_on_a_stick{id:'nuke:remote'} run function nuke:use_carrot_on_a_stick/items/remote
execute unless entity @s[tag=nuke_used] if items entity @s weapon.mainhand carrot_on_a_stick{id:'nuke:remote_off'} run function nuke:use_carrot_on_a_stick/items/remote_off
tag @s remove nuke_used
nuke:use_carrot_on_a_stick/items/remote_off
execute if items entity @s weapon.offhand carrot_on_a_stick run loot replace entity @s weapon.offhand 1 loot nuke:remote
execute if items entity @s weapon.mainhand carrot_on_a_stick run loot replace entity @s weapon.mainhand 1 loot nuke:remote
function nuke:start
nuke:use_carrot_on_a_stick/items/remote
execute if items entity @s weapon.offhand carrot_on_a_stick run loot replace entity @s weapon.offhand 1 loot nuke:remote_off
execute if items entity @s weapon.mainhand carrot_on_a_stick run loot replace entity @s weapon.mainhand 1 loot nuke:remote_off
function nuke:stop
tag @s add nuke_used
nuke:start
scoreboard players set @s nukePerson 1
nuke:stop
scoreboard players set @s nukePerson 0
“随便做”牌遥控器
“随便做”牌遥控器,打开状态
为了和普通的胡萝卜钓竿区别开来,我们会在物品的custom_data中嵌入自己的id标签(如果你不希望这个标签被其他的数据包占用,你也可以命名为类似nuke_id),并把关闭状态的遥控器的id的值设定为nuke:remote_off,开启的设定为nuke:remote。
/execute if items用来检测玩家的主手和副手上的物品是否为胡萝卜钓竿。此处我们检测custom_data,就是为了区分玩家手上是遥控器还是普通的钓竿。
同时,还可以通过custom_model_data来重新指定遥控器的纹理。
新建一个资源包,填写好pack.mcmeta,在assets/minecraft/models/item/carrot_on_a_stick.json写入以下内容:
{
"parent": "item/handheld_rod",
"textures": {
"layer0": "item/carrot_on_a_stick"
},
"overrides": [
{ "predicate": { "custom_model_data": 13400000 }, "model": "nuke:item/remote"},
{ "predicate": { "custom_model_data": 13400001 }, "model": "nuke:item/remote_off"}
]
}
其中的overrides就是来指定custom_model_data的。我们指定了两个物品标签谓词,分别指定了一个custom_model_data和它对应的模型:13400000(对应nuke:item/remote)和13400001(对应nuke:item/remote_off)。
assets/nuke/models/item/remote.json
{
"parent": "item/handheld",
"textures": {
"layer0": "nuke:item/remote"
}
}
其中nuke:item/remote对应纹理assets/nuke/textures/item/remote.png,也就是开启的状态的纹理。
另一个模型文件同理。
为了获取物品的方便,我们使用战利品表来预定义物品。此处以关闭的遥控器为例。
nuke:remote_off.json
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:carrot_on_a_stick",
"functions": [
{
"function": "minecraft:set_components",
"components": {
"custom_data": "{id:'nuke:remote_off'}",
"custom_model_data": 13400001,
"custom_name": "{\"translate\":\"item.nuke.remote_off\"}"
}
}
]
}
]
}
]
}
掉落一份该战利品表就会获得关闭状态的遥控器。除了定义components中的custom_data,我们也自定义了物品的custom_model_data和显示名称。显示名称和实例:蜜蜂助手的多语言一样去写就行。此处在简体中文中显示的名称为“遥控器 (关闭)”。
同理,定义一份开启的。
总结:基本思路是,循环检测胡萝卜钓竿,如果有玩家用了遥控器就切换遥控器的状态,并且根据遥控器的状态决定是开始爆炸还是停止爆炸。
切换遥控器的状态,可以直接替换玩家对应的槽位,比如像上方一样使用/loot replace,然后调用定义好的战利品表,十分方便。
参见[编辑 | 编辑源代码]
ruhuasiyu的数据包制作教程
ruhuasiyu的更多的合成数据包,其中包含大量可学习借鉴的地方
导航[编辑 | 编辑源代码]
查
论
编Java版可自定义内容
基本概念
注册表
命名空间ID
标签
命令
命令存储
命令上下文
NBT格式
NBT路径
SNBT格式
JSON
文本组件
格式化代码
UUID
数据包
函数
结构模板
声音事件
注册
定义格式
聊天类型
对话框
伤害类型
魔咒
魔咒提供器
唱片机曲目
猫变种
青蛙变种
猪变种
牛变种
鸡变种
狼变种
狼音效变种
画变种
山羊角乐器
试炼刷怪笼配置数据
旗帜图案
盔甲纹饰
测试环境
测试实例
游戏行为
战利品表
战利品上下文
随机序列
物品修饰器
谓词
配方
进度
实体谓词
世界生成
维度
维度类型
世界预设
超平坦预设
噪声
噪声设置
密度函数
生物群系
雕刻器
已配置的地物
已放置的地物
结构
结构集
结构池
处理器列表
资源包
纹理
模型
物品模型映射
字体
着色器
声音事件
相关条目
属性
数据组件
数据组件谓词
粒子数据格式
实体数据格式
方块实体数据格式
物品格式
存档格式
世界生成
数据生成器
相关教程
安装数据包
制作数据包
自定义盔甲纹饰
参考实例
官方实例
洞穴与山崖预览数据包
实验性内置数据包
示例数据包
教程实例
实例:射线投射
实例:视线魔法
查
论
编教程
新手教程
下载、安装与购买
成功地启动游戏
菜单屏幕
游戏术语
计量单位
不该做的事
新手生存
新手指南
第一天
第二天
第三天
提示与技巧
饥饿管理
生存注意事项
庇护所
庇护所
沙漠
微型
最佳居住生物群系
最佳建筑材料
建筑与结构
房屋类型
导航
综合
无聊的时候做什么
跑酷
空置域
伪和平
节省时间的小窍门
在水下利用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
命令统计值
村民养殖(村庄与掠夺前)
村庄链
水道
水车
仅英文
自定义纹理包
基于门的铁傀儡陷阱
人工湖
矿车加速器
中继器重启系统
水梯
无延迟电路
教程
新手手册
高难度通关配装总结
成就指南
高塔指南
常见问题
教程
新手手册
基地建设指南
资源收集指南
单位阵容组合
注:作下划线标记的教程为中文原创教程。