此特性为基岩版独有。

目录

1总指南2定义文件3函数4命令5模型6声音7UI7.1修改UI示例7.1.1示例1: 减少变量7.1.2示例2: 继承7.1.3示例3: 修改子控件7.1.4示例4: 修改数组8世界8.1生物8.2红石8.3常加载区域9参见

此处提供的指南是为了使创作者得到为Minecraft创作内容时的较好体验的一种最佳操作。它将有助于确保作品可以工作,并且在应对游戏中的变化时具有高效性和弹性。

总指南[]

从世界和包的目录中移除所有与内容无关的文件。不要在包中存放包,或存放Windows或Photoshop文件。它们中的任意一种都会在读取、导入或加载内容时导致出错。在发布之前从内容中移除任何未使用的资源。这能够保证在将内容缩减到最小的同时减少内容验证失败的可能性。此外,如果原版文件被修改,这样做对你的内容来说不会造成意外的更改。不同的平台有不同的路径长度限制。算上包或世界的路径,平台会计算导入到Minecraft里的目录长度。如果长度超出限制,包会导入失败并且会变成无效状态。正因如此,我们建议:保持路径长度为70字符或更少,即从包或世界模板的根目录到一个文件的最长路径长度应该只能有70字符长。路径中的每一部分(目录或文件名)必须小于60字符。否则,一些平台将无法识别这一部分。资源包或行为包的目录名应该小于10字符长。这样可以使创作者可以写更长的文件或子目录名。例如, bp_mw 有如下目录:MyWorld/behavior_packs/bp_mw

定义文件[]

例如blocks.jsonmobs.jsonsound_definitions.json以及其他位置的定义文件包含了原版中所有元素的定义。请确保你的包只包含那些需要更改的元素和字段。这意味着:不要直接复制/粘贴所有原来的定义,然后只更改需要更改的那一段,而是仅需要保留文件中需要更改的那一段。游戏会自动将这些更改与原版的文件合并。如果需要更改的之外的某些部分也被留在了文件中,而原版的方块或生物在游戏版本更新时发生了更改,那么那一段就会造成内容里不必要的变更。

以下文件不应该改写,除非你有意更改此内容。它们还没有获得官方的支持,但是如果你的修改可行,也可以在至少同版本正常运行。 因此无法保证所做的更改会正常工作或在未来依旧能工作。

credits/end.txtfont/emoticons.jsontexts/language_names.jsonitems_client.jsonitems_offsets_client.jsonshaders目录里的任何文件

注:shaders文件夹内文件为HLSL或GLSL语言编写

函数[]

使用子目录来创建命名空间,以避免多个行为包的函数文件之间的冲突。如果一个函数的路径(以/functions/subdirectory开头)与另一个包一个函数的路径完全吻合,那么在包栈中靠近顶部的包会覆盖其他的包。为了减少你的函数在特定平台上无法工作的概率,请用使用小写字母且不留空格的方式来命名你的目录和函数文件,例如/functions/awesome_pack/level1_function.mcfuntion。请谨慎地使用递归。尽管递归是支持的,当递归很深的时候它依旧会导致一些性能问题。在你行为包清单文件的“min_engine_version”之后输入你当前开发所处的游戏版本,例如”min_engine_version”: [1,8,0] 。这样你就可以控制使用哪个版本的命令来保证向后兼容性。如果你的命令方块只运行函数,那么修改他们就会变得简单很多。更重要的是,如果你发布了一个包含函数文件的新的行为包,那么使用那个行为包的世界也会在新包应用时立马得到更新。最后一个关键点是说明性的:当前的基岩版尚未支持条件分支(例如execute (ifunless)),但是它可能会在未来加入到游戏中。

命令[]

请避免每刻都执行命令。尤其重要的是不要每刻都执行大量的命令。尽量不要在每刻执行超过30条命令。如果需要频繁执行命令,可以考虑把它们放到一个时钟循环里,这样它们可以每5+刻执行一次。如上面所说,如果你设置了偏置时钟使得命令在不同的刻上执行,那么就可以平衡你的工作并获得更佳的性能。获知你内容的性能是否是由于命令过多而表现不佳的一个简单方法就是使用commandblocksenabled游戏规则来关闭所有命令方块的执行。请尽可能地不要使用长时命令(例如覆盖区域很大的/clone或/fill)。如果可以的话,请把它分开并在不同的刻执行。不要在目标选择器中使用物品的本地化名字,例如/testfor @e[name=beacon]。如果玩家来自不同语言区,那么物品的名字可能会改变而后命令将无法工作。

模型[]

具有许多微小部件的模型在低端设备和某些GPU上性能可能会很差。请在细节与性能之间推敲出适当的平衡。

声音[]

在流上只播放长时声音,例如背景音乐。可以获得游戏内更佳的性能。一些平台在同一时间只能打开一定数目的文件,在流上播放所有的声音可能会因内容过多而导致游戏崩溃。短时声音(例如音效)在内存上加载会有最佳性能。使用一些小技巧来缩小你的文件,例如从开头和结尾移出所有的静音部分有一个标识load_on_low_memory可以用于声音的定义里。这个标识默认设为false,这意味着如果此时计算机内存较低,它就不会再载入任何声音。如果对于某个特定的声音来说,它必须得到载入,那么就把这个标识设为true。请权衡利用这一特性。基岩版音效文件为FSB格式,如果条件有限,可以转码成OGG格式后直接重命名成FSB文件。

UI[]

所有UI的修改都是有风险的。如果原版的界面以某种形式被修改,那么使用这个界面的内容就有可能崩溃。UI系统是以一种有助于我们能灵活地通过JSON文件修改界面的方式设计的。任何对UI的JSON文件的更改(在一个自定义的资源包里)都会和原版的文件合并。如果合并过程不正确则游戏可能会进入一种不佳状态。重新绘制UI贴图,即修改他们所使用的纹理,这样风险就会小很多,并且能做出一些更漂亮的元素。重新编辑元素的尺寸以及移动它们风险更大,但是在大多数情况下还是可行的。改变一个界面中的元素本身具有破坏性的高度风险。

修改UI示例[]

下面是一些示例,它们介绍了如何在不完全复制整个界面的前提下修改一个UI定义文件。下面以附魔台界面文件(enchanting_screen_pocket.json)的一部分为例。

示例1: 减少变量[]

不要包含那些无需更改的变量。例如,如果”color”和”shadow”是要更改的,那么就不要把其他的变量复制/粘贴到这里。只需要声明那些需要替换的变量就可以完成简单的所需要的更改。

不佳的复制/粘贴法:

"generic_label":{"type":"label","color":"$pocket_title_text_color","anchor_from":"center","anchor_to":"center","shadow":false},

更好的例子:

"generic_label":{"color":"$pocket_title_text_color","shadow":false},

示例2: 继承[]

无需重新声明正在修改的控件所继承自的控件。仅声明正在修改的控件名即可。在下面的代码中,”common.button”就可以跳过不写:

不佳的例子:

"[email protected]":{

较好的例子:

"enchanting_confirm_button":{

示例3: 修改子控件[]

以同一个按钮为例,如果只需要修改该控件的子控件中的一些特定的变量,例如,default控件。仅修改一个控件的子控件请使用control_name/child_name语法。所以与之这样写:

"[email protected]":{"controls":[{"default@enchanting_pocket.confirm_default_control":{"type":"image","texture":"textures/ui/button_borderless_light"//Added fancy button texture to default control}}]},

不如这样写:

"enchanting_confirm_button/default":{"texture":"textures/ui/button_borderless_light"//Added fancy button texture to default control     },

示例4: 修改数组[]

这个示例将展示如何修改一个控件中的数组。例如:添加一个新的控件作为子控件或从一个控件的绑定中移除一个绑定。就该例来说,有一个叫”modifications”特殊的变量。对modifications数组里的每一条记录,可以指定一个特定的数组去修改、操作并输出结果。

以”enchanting_book_panel”为例,如果需要在”controls”数组里添加一个控件,就可以添加一个modifications数组,数组中指定了”array_name”: “controls”、”operation”: “insert_front”和”value”,其中最后一个中可以填入新的控件,新控件就会如同被放到了controls 数组里一样。下面的例子展示了上面所说的内容以及偏移量的更改。

"enchanting_book_panel":{"offset":[-4,1],"modifications":[{"array_name":"controls","operation":"insert_front","value":["panel_outline@beacon_pocket.panel_outline":{"layer":0}]}]}

要从”player_level_label”子控件中移除”#player_level_color”绑定,可以进行如下操作:

"enchanting_book_panel/player_level_label":{"offset":[0,10],"layer":3,"color":"$experience_text_color""modifications":[{"array_name":"bindings","operation":"remove","where":{"binding_name":"#player_level_color"}}]}

世界[]

生物[]

不要一次生成过多的实体。根据设备的不同,如果在同一时间有过多的实体更新,性能可能会很差。

红石[]

只要有可能,就一定不要让红石元件在区块边界处交互。

游戏是有能力处理大部分这种情况的,然而,的确有些例子表明当区块的加载和红石元件更新发生矛盾时,的确会引起一些元件失去它们状态并破坏电路直到它们被重新放置。红石元件包括所有可以产生、传递或消耗红石信号的方块,例如:按钮命令方块比较器发射器漏斗拉杆侦测器活塞铁轨:激活型、探测型和充能型红石线中继器以及其他

常加载区域[]

不要过度使用常加载区域。这对低内存设备尤其重要。如果可以,在不使用常加载区域时请卸载它们。这可以使得设备回收一些内存,也可以为所需要的新的常加载区域腾出空间。

参见[]

附加包基岩版附加包文档基岩版实体文档基岩版动画文档基岩版粒子文档基岩版Molang文档基岩版模式文档
查论编

教程(作下划线标记的教程为中文独有教程)

新手教程 菜单屏幕游戏术语下载、安装与购买
新手生存 新手指南第一天第二天第三天提示与技巧饥饿管理不该做的事生存注意事项
庇护所 庇护所沙漠最佳居住生物群系最佳建筑材料建筑与结构房屋类型导航
综合 无聊的时候做什么村庄生存跑酷空置域伪和平节省时间的小窍门在水下利用TNT破坏方块成就指南进度指南拓殖战斗完成冒险创建一个村庄双持沙漠生存雷暴生存下界生存从零开始下界生存末地生存探索洞穴家具在和平难度中收集资源利用碰撞箱马测量单位使用地图测量距离和角度采矿技术钻石化石远古残骸下界快速旅行下界传送门支柱跳跃PvPJava版1.9前、基岩版基地穿越和破坏基岩村庄机制考古Minecraft和教育不可破坏的末地水晶使用更少的末地水晶重生末影龙透视镜挂机池光速船[仅基岩版]无材料消耗转换药水类型[仅基岩版]汇报漏洞在超平坦地图中管理史莱姆
建筑 给工程添加美感空气闸建筑术语建造游轮建造大都市建造过山车建造安全的家园建造水建筑建造几何体防御电梯带釉陶瓦的图案建造更好的地板像素艺术牧场屋顶类型弧形屋顶屋顶建造指南装饰屋顶暗门建造居住地水下之家墙壁和桥墩水闸调色板
存储方案 整理物品潜影盒储存矿车储存物品运输
附魔与烧炼 附魔台机制铁砧机制自动化烧炼燃料选择
破坏方块 爆炸室凋灵笼
挑战 获得潮涌核心冒险模式生存挑战自定义地图制作自定义地图治愈僵尸村民征服神殿和神庙触发及战胜袭击征服掠夺者前哨站征服堡垒遗迹征服林地府邸征服海底神殿打败末影龙征服末地城打败凋灵极限模式超极限模式在一个地区中长期生存下去在无限沙漠中生存超平坦世界生存[仅Java版]岛屿生存空岛生存速通猎人游戏放牧心得探索深暗之域和远古城市愚人节版本生存22w13oneBlockAtATime
农场
方块和物品 骨粉仙人掌圆石或石头可可豆农作物(甜菜、胡萝卜、马铃薯和小麦)紫颂果鸡蛋蛙明灯蜂蜜鱼花朵冰海带零刻作物催熟技术肉蘑菇唱片下界疣黑曜石西瓜、南瓜鳞甲羊毛海泡菜雪甘蔗树木藤蔓药水经验基岩方块和物品复制铁轨复制机[仅Java版]TNT复制[仅Java版]
生物 刷怪塔怪物磨床刷怪笼陷阱动物(猪、牛、羊)烈焰人洞穴蜘蛛闪电苦力怕溺尸/僵尸末影人守卫者铁傀儡岩浆怪以物易物袭击无限触发袭击潜影贝史莱姆鱿鱼海龟村民女巫流浪商人凋灵骷髅僵尸猪灵
红石
基础红石 基本逻辑门高频电路计时器通用物品分类器抽奖箱飞行器漏斗机械侦测器稳定器密码锁随机发生器红石机械红石音乐红石技巧鲁布·戈德堡机械村民交易所
探测器 方块更新感应器比较器更新感应器阳光探测器昼夜探测器
矿车 火车站矿车储存存储系统
陷阱 雪傀儡防御炮TNT大炮活板门利用陷阱设计陷阱
活塞 活塞使用活塞电路半连接性零刻活塞无延迟中继器无头活塞
高级红石 高级红石电路算术逻辑计算器时钟摩斯密码打印机红石计算机红石电报机
服务器
使用服务器 在服务器上游玩服务器监狱防止恶意破坏服务器商店起床战争空岛战争
架设服务器 架设服务器架设基岩版服务器服务器架设脚本服务器启动脚本FreeBSD启动脚本OpenBSD启动脚本Ubuntu启动脚本WebSocket服务器[仅基岩版]架设Mod服务器[仅Java版]架设Hamachi服务器架设Spigot服务器虚拟硬盘服务器使用ngrok搭建服务器架设ZeroTier服务器
技术性 结构方块命令方块命令统计值使用命令操控实体提高帧率Minecraft帮助FAQ(IRC频道)NBT与JSONMinecraft URL Scheme[仅基岩版]更新Java运行数据生成器
地图 自定义地图下载地图生成下落的方块[仅Java版]使用MCEdit在1.13中刷新旧版海洋[仅Java版]强制打开存档[仅Java版]
资源包 制作资源包加载资源包声音目录
数据包 制作数据包实例:蜜蜂助手消除视线安装数据包自定义世界生成
附加包 基岩版开发指南制作资源附加包高级基岩版实体文档修改实体模型制作行为包自定义实体
制作游戏视频 视频
游戏安装 快照版本安装获取崩溃报告在U盘中使用旧版启动器运行及保存Minecraft恢复损坏的地图数据在Google Drive上运行Minecraft将游戏数据保存到Dropbox云端(仅限地图数据)将游戏数据保存到Dropbox云端在Chrome OS上游玩Minecraft
仅Java版 修复Apache Log4j2漏洞自定义命令触发原始JSON文本NBT命令标签编写启动器版本清单文件下载版本json文件下载
过时教程 建造微型庇护所自定义纹理包基于门的铁傀儡陷阱到达边境之地获取崩溃报告(旧版)人工湖矿车加速器中继器重启系统无数据包生存升级LWJGL更新Minecraft村庄链水梯水道游戏直播
教程 新手手册高难度通关配装总结成就指南高塔指南