为了使数据包容易阅读,将其进行文件夹分类

开始写作时间:2022年12月20日 16:50:31

章节索引

    • データパックを見やすくするためのフォルダ分け

 

    • 目次

 

    • 目的・前提

 

    • データパックのフォルダ構造

関数フォルダ

簡単に言うと
外部から呼び出す関数
処理グループ

ルートテーブルフォルダ
進捗フォルダ
最後に

目标和前提

只是想记录下如何确定创建多个文件的文件夹层次结构,例如数据包的functions和loot_tables。文体和敬语都有些混杂。
因为没有听说过固定的规则,所以我们想要明确明确红烧肉自由地创建方式。
需要一定程度的函数创建知识作为前提。

数据包的文件夹结构

因为有好东西,所以我借了。

datapacks
└── (データパック名)
    ├── pack.mcmeta
    └── data
        ├── minecraft
        │   ├── loot_tables
        │   │   └── entities
        │   └── tags
        │       └── functions
        └── (名前空間)
            ├── advancements
            │   └── xxx.json
            ├── functions
            │   └── xxx.mcfunction
            ├── item_modifier
            │   └── xxx.json
            ├── loot_tables
            │   └── xxx.json
            ├── predicates
            │   └── xxx.json
            ├── recipes
            │   └── xxx.json
            ├── structures
            │   └── xxx.nbt
            :

引用链接(稍作修改):https://micrapap.fc2.net/blog-entry-2.html

※严格来说,Minecraft也成为了一个命名空间,但由于该命名空间具有与其他命名空间不同的行为,我们将其与其他命名空间分开考虑。
主题主要涉及functions文件夹,但也作为json格式文件夹的代表示例提到了loot_tables,并介绍了与其他命名空间不同的特殊例子advancement。

函数文件夹

我将介绍数据包中最具特色的功能 – 函数,以及对其内容的整理方法。

functions
├── 処理グループ1
│   ├── main.mcfunction
│   ├── tick.mcfunction
│   └── その他関数名.mcfunction
├── tick.mcfunction
├── load.mcfunction
└── その他呼び出し用関数名.mcfunction

我创建函数时,通常会有这样一种文件夹结构(当然,根据需要可能还会创建更多子文件夹)。

简而言之

    1. 在最上层进行外部接待

 

    1. 将接受的函数根据大致的环境和条件分配到文件夹中

 

    1. 文件夹的入口由main或tick承担,用于分配文件夹内的函数

 

    根据需要重复步骤2和3

调用外部函数

将从外部调用的函数放置在functions的直属位置。这样做有几个目的。

    • チャット欄から呼び出しやすくなるため

 

    処理のトレースをしやすくするため

当想要在游戏等调试中恶意地使某个玩家触发事件时,将其构造成这种结构,函数名不会变得太长,而且入口肯定是从名称空间直接下的文件中执行,这样更容易进行调试。

虽然“外部”不一定指的是数据包之外,而是指从functions文件夹之外调用的情况都被视为外部。
例如,

    • tick.mcfunction

 

    load.mcfunction

当使用mcDatapackUtility创建数据包时,这两个功能会在最开始生成(根据设置)。

,私はこのファイルをfunctionsフォルダの直下に設置し、tickごとやリロード時に呼び出されるタグ関数として配置します。その他にもいくつかのオプションがあります。

/tellrawのclickEventで受け付ける関数
看板のclickEventで受け付ける関数
進捗の報酬関数
コマンドで受け付ける関数
他のデータパックから受け付ける関数

在「functions」下面设置。
然而,特别是2和3往往会增加很多,所以在这种情况下,可能会创建“sign”文件夹或“advancement”文件夹等。

处理组

正如前面所述,所有的函数都必须通过名称空间直接下方的函数来传递。如果只能通过这个函数来创建数据包,那就太方便了,但是当开始制作相当大的数据包时,我认为在这个函数内直接编写想要执行的处理的次数会很少。

なぜならだいたい処理の前に、executeなどを使って環境を変更したり条件分岐をしたりするからです。
execute関数をそうやって書いた場合は私の頭の中ではこんな風に考えています。

    • その条件や環境で複数の処理をしないならexeucute..run (chainedcommand)…とそのまま処理を書く

 

    • その条件や環境で2つ以上の処理を想定する場合

その条件や環境を通過してくる処理がtickレベルで(1秒間に1回を超えて)何度も繰り返すなら今の関数名/tick.mcfunctionというファイルに処理を回す。
その条件や環境を通過してくる処理が何度も繰り返さないなら今の関数名/main.mcfunctionというファイルに処理を回す。

在main函数或tick函数中,如果预计会出现多个环境,我们会逐渐缩小范围,但不会增加文件夹,而是将其添加到相同文件夹中。只有在无法缩小范围时,才会增加函数。

根目录文件夹

我使用路由表的目的主要有两个。

    1. 为了能够以可复制的形式分配物品,

 

    1. 为了能够进行包括概率在内的分发,

 

    当需要确定放置位置并放置多个物品,例如箱子容器时。
loot_tables
├── 素材フォルダ
│   ├── c.json
│   ├── d.json
│   └── e.json
├── a.json
└── b.json

大多数情况下,我会使用/loot命令来创建物品,因此当我制作某物时/give和/item replace等命令并不常用。

    • 1の目的で使うルートテーブルは、一番上のフォルダにだーっと並べます(a.jsonやb.jsonのように)。

 

    • 2や3の目的で使うルートテーブルは、以下のようにします

選ばれる候補となるアイテムをかならず全てルートテーブルとして記述し適当な名前を付けたフォルダに格納(a.json,b.json,c.json)
上のルートテーブルを複数参照し確率や、配置などを設定したルートテーブルを一番上のフォルダに配置(a.jsonやb.jsonのように)
いずれの場合にしても必ずアイテム1つにつき1つのルートテーブルを作成します。
ルートテーブルのファイルに直接複数のアイテムを入れてしまうと、個別で欲しい時に不便になってしまうからですね。

进展文件夹

我使用进度的目的主要有两个。

    1. 如果想要用作为函数触发器

 

    如果想要用作可见的进展

老实说,我只在使用2这个选项上有过一次经历笑。我几乎全部都会作为1使用。在这种情况下,因为看不见,并且进度之间没有任何关联,所以只需要将它们全部放在父文件夹中排列即可。不过,如果与2一起使用,为了方便查看,会创建一个触发器文件夹并将其存放在其中。

在第二个目标情况下,情况会有些不同,进展之间会产生父子关系。

    • 親の進捗を一番上のフォルダに置きます。

 

    • 進捗画面においてタブが分かれるのでそのタブごと(つまり親の進捗)にフォルダを作成します。

 

    フォルダ内には子の進捗を取得する順に数を付けて上から順に並ぶようにします。

另外,据说进度的纵向显示顺序和标签的显示顺序可以通过以hashCode顺序排列名称域和进度名称来控制,但这样做非常繁琐,所以我没有这样做。我只听说过hashCode的顺序和字面意思,所以实话说我不知道是什么意思…

最后

只是作为参考,我觉得并不是大家都这样做。
进度和路由表的文件数量并不多,所以我觉得即使粗略地处理也没关系。
对于函数来说,由于我是使用数据包制作游戏的人,外部接收函数并不多,反而是每次刷新时执行的函数承担了重要的角色,所以我在连接函数的同时进行制作。
另一方面,我注意到制作逃脱地图的情况下外部接收函数可能会更多,所以对于那个文件夹的分配更加重要。
所以,我认为这也会随着制作的内容而有所变化,所以只是作为参考而已。完成。

广告
将在 10 秒后关闭
bannerAds