本系列文章将通过创建数据包和资源包来提供概述和MINECRAFT SOMATING的实用教程。如果您有兴趣扩展游戏,这是您的文章!
在本第一篇文章的最后,您还将找到一个链接下载一个允许抛出火球的Mod,这在该系列的第二篇文章中探讨。
MINECRAFT是一种需要介绍的游戏。对于熟悉这篇博客的人,在MINECRAFT上写作教程可能看起来有点不寻常。虽然我经常写下与游戏发展相关的主题,但我从未完成关于特定游戏的整个系列。但MINECRAFT是不同的。它是一个无尽的创造力的出口:不仅仅是由于其游戏机制,而是对游戏的几乎每个方面都是完全可定制的。
截至2021年,MINECRAFT计数1.26亿活跃的球员。如果即使他们的最小百分比,他们将开始修改游戏,Minecraft可能会引导数百万个年轻的孩子迈向科学相关领域。
当我们谈论MINECRAFT时,我们实际上是指整个不同版本的整个生态系统。目前,Minecraft存在于两个单独的版本中:Java Edition和Bedrock Edition。前者是“原始”MINECRAFT,在Java中发展;后者是最近一个针对Microsoft Windows存储的C ++端口,它包括Microtransactions。这两个是单独的游戏,具有轻微的游戏差异,哪一个需要单独购买。出于本系列的目的,我们将专注于Java Edition,因为Mod的更容易,并且是其中实际可用的更多资源的产品。
有很多方法可以修改MINECRAFT。有些人比其他人更容易,但它们都可以分组三大类:
修改:写入自定义代码以自定义游戏的各个方面的功能。对于Java Edition,我强烈推荐使用Minecraft Forge和Eclipse的详细信息,强烈建议使用Java的MINECRAFT Modding与Java指南。对于Bedrock Edition,Mojang本身正在研究一个名为MINECRAFT脚本语言的JavaScript API。
资源包和数据包:Java Edition支持JSON文件自定义脚本以添加或替换游戏的某些功能。
命令块:创意模式中可用的游戏内功能,允许在您的世界中运行简单的命令。
修改绝对是最强大的选择。但是,它也是最复杂的,它需要适当的编码技能(Java或JavaScript)。相反,资源和数据包相对容易,并且不需要安装其他软件,而是简单的文本编辑器。它们非常有限,这与您可以做的事情,但这通常足以满足大多数用户案例。在本教程中,我们将专注于数据包,因为对于没有编码背景的人来说,这可能是最简单的方式来开始自定义世界。
块:那些是构成世界的立方体。它们可以放在地图上,成为世界的一部分,或在库存中开采和收集。
实体:包含所有不块的动态对象,例如播放器,暴徒,箭头,船只,minecarts等。
项目:仅在播放器库存和手中存在的所有对象。当退出库存时,物品成为对象的精灵的实体,等待在五分钟后再次收集或消失。
这种区别很重要,因为不同的命令会影响不同的对象。例如,您只能使用/ expon命令召唤实体,您只能将项目与/ item命令提供,您只能使用/ setblock和/ fill命令更改世界块。
MINECRAFT伴随着自己的脚本语言,它采用了一系列简单命令的形式。如果您熟悉编码,则使用Minecraft命令可能是一种相当令人沮丧的经历。无疑是难以阅读的,因为它们不允许换行符,并且在多个命令之间传递数据是一种痛苦,因为它们被设计为独立工作。
命令可以在启用作弊的世界中运行。所需要的只是输入“/”打开聊天,然后打开命令。例如/ TP 0 64 0将播放器将播放器传送到XYZ坐标的块。可以在Minecraft Wiki的命令页面上找到可用命令的完整列表。
也可以通过命令块在游戏中执行命令,该命令块是通过命令/给出command_block获得的特殊项目。命令块可用于执行任意命令,并且甚至可以将共同配置为从世界内部创建复杂的脚本。
要记住的一个重要方面是解析器是非常肛门的,并且不允许任何类型的压痕或间隔。甚至添加两个空格而不是一个空格可能会导致语法错误!
与更传统的编码相比,有一个方面使MINECRAFT命令有所唯一的命令:目标选择器。它们允许指定命令的目标。并且,一般来说,单个命令可以不适用于一个但是几个不同的目标。
例如:/ tp @a 0 64 0将传送所有玩家。这感谢目标选择器@A,它代表了“所有玩家”。
什么使目标选择器非常强大是能够添加条件以限制将受到命令的目标。这可以通过在平方括号中使用一系列逗号分隔的参数来完成。例如,/ tp @e [type = minecraft.cow] 0 64 0将只有传送奶牛。可以使用多个参数,并且Minecraft支持几种有用的参数,以限制将受到影响的元素数。例如:
Wll只传送衣橱母牛,因为命令限制为1.参考位置是调用该命令的实体之一;播放器,万一您在聊天中键入此内容。
您甚至可以使用目标选择器移动到实体的位置。例如,下面的命令将把播放器传送到最近的牛的位置。
Minecraft命令的另一个相对独特的特征是可以表达坐标的方式。许多命令需要一个目标位置。这可以从一个实体隐式指定。在上面看到的情况下,例如,使用@e [type = minecraft.cow,sort =最近,限制= 1]作为目标位置将播放器传送到最近牛的位置。
相对(〜Δx〜ΔY〜Δz):执行器(@s)的位置,加上x,y和z轴上的Δx,Δy和Δz块的偏移;
本地(^Δsway^ΔHeave^Δsurge):执行器(@s)的位置,以及Δsway的偏移,Δheave和Δsurge块与其本地参考框架对齐。
例如,/ TP @P ~~〜10将传送播放器10块南部(Z轴朝向南方对齐),而/ TP ^ ^ ^ 10将传送播放器10块向前移动,相对于他们的面对方向。
如果您熟悉Unity,则相对和本地坐标之间的区别在于Vector3.Forward(世界空间)和转换之间的差异是相同的差异.Forward(本地空间)。
当命令独立执行时,它们相当易于使用和理解。但是当链接多个命令时,这就是事情可以变得非常复杂的地方。
一般来说,没有简单的方法可以在两个后续命令之间共享数据。但是,命令具有一种“上下文”,其中记得两件事:谁正在执行命令(AS),以及其中(at)。通过更改这两个,我们还可以更改哪些实体将受到命令的影响。
通常,目标选择@s可用于指运行命令的实体。但是通过/ execute命令,可以更改执行程序,以便后续调用@s将引用不同的实体。
让我们想象我们想要在播放器前面传送所有实体一个块。这可以轻松完成,如/ tp @e ^ ^ ^ 1。本地坐标系是指当前的执行程序,在我们的情况下是播放器调用该命令。
但是,如果我们想将所有实体移动一个块向前移动,相对于他们当前的位置和旋转?在这种情况下,我们需要执行命令,假设每次移动所移动的实体都被视为executor。这可以使用Execute命令完成:
如前所述,此新命令在每个实体上运行TP ^ ^ ^ 1。但这一次,假设执行者是目标的实体。当@s处@e处的符号执行表示:执行以下命令,假设它是从其当前位置运行它(作为@e)的目标实体(在@e)。既可以在执行内部链接和运行作为子命令。
如果您熟悉更传统的命令语言,这将大致转化为以下伪代码:
//在executor前面的所有实体移动// tp @e ^ ^ ^ 1setExecutor(播放器); setLocation(播放器); foreach(实体列表中的实体e){teleport(e,getlocation()。搬迁(1)); //运行tp ^ ^ 1} //移动所有实体一个块向前//在@s运行tp ^ ^ ^ 1setExecutor(播放器); setlocation(播放器); foreach(实体e在entitylist中){setExecutor (e); //作为@e setLocation(e); //作为@s传送(e,getcurrentlocation()。搬迁(1)); //运行tp ^ ^ ^ 1}
Execute命令以另一个命令结尾,使用子命令运行调用该命令。这也可以是定制的功能。
这是MINECRAFT中最复杂的命令之一,计算十二个可链子的子命令(我们只看到了它们的链3链:如,AT和RUN)。您可以在Minecraft Wiki上的专用页面上了解更多有关Execute。
📚NBT数据类型▼MINECRAFT项目可以以称为“二进制标记”的“名为”二进制“标记的自定义格式存储任意数据。以前称为数据标签,NBT标记可用于将字符串(键)与某些值相关联。它们遵循类似JSON的格式:{键:value,...}。
在我们的情况下,1B表示法表示数字1存储为字节。 MINECRAFT支持几种不同的类型,例如字节,短,int,长,浮点,双,弦,甚至阵列。
这两种技术都允许一次仅执行一个命令。命令块确实可以将链接在一起以执行复杂的操作,但是当您想要的代码复杂时,这可以非常限制。
执行Minecraft命令的三种方法是使用函数。 MINECRAFT中的函数包含在文件中。 MCFunction扩展,这就是为什么语言有时被称为MCFunction。
函数的名称完全由包含它的数据包的名称,以及其文件的名称。 MINECRAFT函数属于名为MINECRAFT的命名空间/数据包。
函数可以包含您想要的命令,它们都在单个游戏帧/更新/刻度中的另一个之后执行。可以使用函数命令调用函数;这甚至可以在控制台和命令块中使用。
每个函数都在其自身的执行上下文中运行。调用函数复制当前的executor和位置;但是,该函数所做的任何变化都不会向呼叫者向后传播。
📚调试▼调试MINECRAFT的命令不是最简单的事情。一个原因是,Visual Studio的现代编程工具不容易支持该语言。同样,找不到与所有MCFunction功能兼容的良好语法突出显示器并不容易。
对您的MCFunction文件和资产所做的更改不会自动重新加载。但是,您可以手动重新加载它们:
MINECRAFT日志通常无法从游戏中访问。您可以通过选中“MINECRAFT:Java Edition启动”的“输出日志”,从MINECRAFT Launcher的“设置”面板中启用它们。
完成后,启动游戏还将启动一个方便的窗口,该窗口将显示您可能需要的所有调试信息。这非常有用,因为它将显示脚本中存在的任何编译器错误。
为MINECRAFT创建MOD的第一步是了解我们实际更改的内容,以及如何。除非您想要编写Java代码以正确接口游戏,否则Minecraft允许更“轻量级”方法,依赖于两个单独的事物:数据包和资源包。前者用于添加功能,主要是通过MCFunctions,这些功能是包含一系列命令的文本文件。数据包也可用于添加自定义配方,更改战利品表,改变结构和成就。相反,资源包可用于自定义图形的某些方面,例如添加新的纹理,模型甚至着色器。
这两个包都是具有特定结构的文件夹,需要在Minecraft文件夹内部复制。接下来的两个部分将简要探索如何创建它们。也可以将它们添加为压缩文件。
数据包需要包含在世界的“数据包”文件夹中。如果您在Windows上,通常可以通过“%appdata%”文件夹可访问“.minecraft”文件夹中找到。 MINECRAFT WIKI有一个非常有帮助的文章,您可以参考,标题为CREATE A数据包。
📁.Minecraft📁保存📁(世界名称)📁数据包📁名(Mod的名称)📁数据📁MINECRAFT📁标签📁函数📄load.json(用于告诉MINECRAFT在首次加载MOD时运行功能)
以粗体表示的名称是我们实际更改的名称。包含我们命令的所有函数都存储在数据/命名空间/函数文件夹中。每个文件对应于不同的函数,我们可以使用/ function命名空间:cution_name命令从控制台调用。
尽管它的名称,文件夹数据/我的MINECRAFT /标签/函数不包含实际函数,但文件Tick.JSON告诉MINECRAFT将需要执行每个帧(也称为勾选)执行命名空间的函数(也称为勾选)。这是它的实际内容:
在我们的情况下,我们将为所有需要运行每次运行的命令都使用此技巧。
MINECRAFT还支持LOAD.JSON文件,可用于在加载数据包时调用函数。
最后,每个数据包都需要pack.mcmeta文件。这是一个JSON文件SED,以指示数据包的设计沿其描述:
资源包以类似的方式工作,但不是存储在您的世界内,它们将直接存储在“.minecraft”内部的“ResourcePacks”文件夹中。有关资源包如何工作的更多信息,您可以查看Minecraft Wiki上的相对文章,标题为Resource Pack。
虽然数据包与世界自动加载,但需要启用资源包。一旦游戏加载(下面)或通过游戏中的F3 + T按下,您可以从选项菜单中执行此操作。
资源包通常用于完全替换游戏中的原始纹理和模型。这就是为什么他们经常包含一个“MINECRAFT”文件夹:他们想要替换MINECRAFT的原始物品。
最简单的事情是用已经存在的模型替换模型。例如,在关于Throwable Fireballs的教程中,我们将替换将一些特殊的雪球替换为火收费。 MINECRAFT支持称为自定义模型数据的东西,允许仅影响先前标记的某些项目:
{"父母&#34 ;:"项目/生成""纹理&#34 ;: {"二层&#34 ;:"项目/雪球" },"覆盖&#34 ;: [{"谓词&#34 ;: {" custom_model_data":2538461}," model" :"项目/ fire_charge" }]}
如果要用新的替换纹理,也可能。我们将在在线系列的第三部分时,我们将看到如何做到这一点,我们将讨论如何创建激光枪。
资源包也可用于替换和添加声音。我们将在本课程的第三部分探索这一点。
文件pack.png可用于更改选项菜单中的资源包的图标。
成为赞助人!本教程系列中使用的数据包和资源包用于创建Throwable Fireballs和激光枪可以在Patreon下载。
由于帕勒顿的顾问贡献,这个网站存在。如果您认为这些帖子有帮助或激励您,请考虑支持此博客。
只要您信誉我,您可以自由地使用,调整和构建本教程(即使是商业)。
您不允许在其他平台上重新分配本教程的内容。特别是帕勒顿仅适用的部件。
如果您所获得的知识对您的项目产生重大影响,则会在信用中提到非常欣赏。 ❤️🧔🏻