Skip to content
View in the app

A better way to browse. Learn more.

麦块世界

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

如何创建一个你自己的起源

起源的附属模组之所以这么多,很大程度上是因为起源自己提供了一套API,便于任何人来创建或修改起源(比如起源++有足足几十个起源)。不过原模组的开发文档是全英文,而且很长,并不利于国内玩家开发。基于此,我决定动笔写一份比较通俗易懂的入门教程,希望能够帮助大家了解创建一个起源的流程。

如果语言能力允许,更推荐大家去阅读起源的开发文档,会更加有帮助:Origins Documentation。同时,在阅读本篇教程之前,也希望你已经理解了数据包的结构及JSON文件的写法。如果还没有,可以先阅读一下中文Minecraft wiki的相关内容。

零、前置准备

由于创建起源需要我们大量创建并修改JSON文件,我强烈推荐大家使用微软开发的VS Code,并在扩展商店中搜索并下载Origins Mod Helper,可以有效提高开发效率,减少查wiki的时间。本文也正基于这种开发环境来讲解。如果你不会使用VS Code,推荐搜索相关教程,本文不再赘述。如何创建一个你自己的起源-第1张图片

一、创建一个数据包

正如前文所说,起源的API是基于数据包的。如果我们想要创建一些独属于自己的起源,首先要创建一个数据包。第一步,创建一个名字只有英文大小写字母、数字和下划线的文件夹,随后在其中创建一个data文件夹和一个pack.mcmeta文件,详见教程:制作数据包 - Minecraft Wiki。

现在假定你已经创建了一个名为example的文件夹,并在其中创建了一个data文件夹并正确填写了pack.mcmeta。在data文件夹中,再创建一个名为origins的文件夹,和一个名字任取(不包括汉字)的文件夹,后者将是你数据包的主体,在游戏中也表现为你起源的命名空间ID将是这个名字(假定为foo)。

两个文件夹都会被用到,不过现在我们先点开foo文件夹(也就是名字任取的那个文件夹),在其中分别创建名为origins和名为powers的文件夹。顾名思义,前者用于设定起源,后者用于设定起源所对应的能力。

二、创建一个起源

在完成了上述步骤后,我们就可以着手开始创建一个属于自己的起源了。在origins文件夹中创建一个名字任取(不包括汉字)的文本文件,将其命名为<起源名>.json。注意,该文件的扩展名应该是.json,文件类型属于JSON文件。假定我们想要创建一个名为bar的起源,那么我们就应该将其命名为bar.json

现在打开这个JSON文件,其中当然什么也没有。先输入一对大括号,随后按照下图的方式为你的起源设定名字(name)、图标(icon)、影响值(impact)及能力列表(powers)。图中的upgrades为可选项,如果你希望这个起源能在达成进度后变成另外一个起源,你才会用到upgrades这个键。

需要注意,item的值是游戏中已存在的物品。impact仅接受0-3的整数。由于现在我们还没有创建任何一个能力,所以你可以暂时把powers的列表空着,等完成能力创建之后,再来填写powers

如何创建一个你自己的起源-第2张图片

三、创建能力

创建能力是起源附属开发的最重量级的部分。由于本人精力所限,这一部分并不会讲解能力类型,大部分的能力类型需要大家自己看开发文档,或者是依照别的附属模组的方式来模仿着写出一个能力。

powers文件夹中,创建一个<能力名>.json文件。随后打开这个文件,并以一对大括号起手,随后输入"type"来设定能力类型,输入"name"来设定能力名字,输入"description"来设定能力的描述。下图是一个比较简单的能力实现。其作用是当玩家杀死生物时,给予玩家2格饱食度和2格饥饿值,冷却为1刻(其实就是没有冷却)。其中origins:self_action_on_kill就是指会在玩家杀死生物时触发的能力。

如何创建一个你自己的起源-第3张图片

对大部分能力来说,复杂的部分在于填写entity_action(对玩家的作用), bientity_action(对另一交互实体的作用)和condition(能力触发的额外条件)。下图就是一个比较复杂的示例。该能力的作用是:

当能力ignisian:ignisian_wrath_toggle激活时(condition),

每1刻(interval

都对玩家附近1格以内(entity_action:type,radius)

活着的生物(bientity_condition)

造成(bientity_action)

5点(amount)

无视护甲、类型为怪物攻击(source)

的伤害。

如何创建一个你自己的起源-第4张图片需要说明,上面那个图之所以看起来不像一个单独的能力,是因为这个能力属于一个更大的能力当中,这个更大的能力的能力类型是multiple。multiple能力类型允许我们在一个JSON文件内创建多个单独能力,并以<命名空间ID>:<大能力名>_<小能力名>的形式被调用。同时,这其中的所有能力也可以以<命名空间ID>:<大能力名>的形式被同时调用。例如,上图当中的能力在游戏中可以以ignisian:ignisian_wrath_damage的形式被调用,也可以与其他能力一起,作为ignisian:ignisian_wrath能力被调用。

换句话说,你可以将multiple能力理解为一个能力的集合。集合中的元素可以被单独调用,也可以与其他元素一起,作为一个集合被调用。

四、注册起源

在创建完能力、填写完起源的能力列表之后,我们还有一步需要完成,就是注册起源。打开<数据包>/data/origins文件夹,创建一个名为origin_layers的文件夹,再创建一个origins.json文件,随后输入:

1

2

3

4

5

{

    "replace":false,

    "allow_random":true,

    "origins":[]

}

并在中括号中填入你刚刚创建的起源的名称,比如foo:bar等等。你也可以使用逗号分隔并添加多个起源。

顺便讲解一下起源层的概念:

如果你安装了起源:职业模组,你会发现在你选择完起源之后,还可以选择对应的职业。前者是原模组就有的origins层,而后者则是起源:职业所创建的另一个起源层。如果存在多个起源层,那么玩家可以选择多个起源,并拥有这些起源的所有能力。

如果你希望实现大类套小类的效果,那么你可以另外创建一个起源层。如果你希望你的起源与原版的起源互斥,那么就使用origin层即可。

replace即代表你所创建的这个起源层是否会替换同名的起源层。如果你在上文的origin.json中把replace设为true,那么进入游戏后你只能看到自己创建的起源,而看不到原版提供的起源。

allow_random就是指你创建的这些起源是否放到随机起源池当中。

五、总结

本篇教程粗略地为大家讲解了创建一个起源的总体流程。由于本人精力所限,本篇教程主要以示例为主,没有特别详细地介绍各个键值对的作用及写法。我推荐大家参考起源++模组当中的起源和能力,写出一个独属于自己的起源。

Featured Replies

No posts to show

Create an account or sign in to comment


Theming with ❤ by: 麦块世界 🤝 lwxining

Important Information

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.