创建一个新的MCreator生成器

创建一个新的MCreator生成器

如果你想看一个生成器的例子,你可以在这里查看Fabric Generator GitHub页面,或者进入MCreator文件夹/plugins。但是,您不能重新分发官方生成器。

在开始之前

制作一个新的生成器是非常复杂和漫长的。您至少需要了解插件的基本结构。强烈建议能够制作简单的插件。您还需要了解JSON文件的工作原理和Java知识。最后,每个生成器类型都是不同的,因此您必须适应本页中解释的元素。

让我们现在就开始吧!

项目文件夹

生成器不必像流程或全局触发器那样位于特定的文件夹中。但是,文件夹的第一部分必须是内置的生成器类型(forge, fabric, spigot, datapackaddon)。它还需要一个Minecraft(例如1.16.5)。这两个元素必须用一个连字符隔开。

示例: forge-1.15.2, fabric-1.16.5

Generator.yaml

Generator.yaml定义了生成器的几个元素。它包含它的基本信息,资源和数据文件夹的路径以及许多其他东西。

生成器选择窗口

name: Minecraft Forge for @minecraft (@buildfileversion)
basefeatures: [variables, model_json, model_java, model_obj]
partial_support: [item, textures]
status: stable
buildfileversion: 36.1.0
subversion: 1.0.1

下方对各段落

name

此名称是用户选择生成器时显示的文本。

@minecraft被写入生成器文件夹名称中的Minecraft版本所取代。

@buildfilversion获取字段的值

Base features

基本特性是这个生成器支持的文件类型(JSON, Java和OBJ),变量和纹理。此参数中的所有特性都将被标记为生成器完全支持。

Partial support

这个列表可以包含前面的基本特性,也可以包含mod元素。此列表中的元素将被标记为部分支持(黄色图标)。

Status

生成器的当前状态。支持的状态有: 已弃用dev(开发中)、实验性遗留lts(长期支持)和稳定

Build file version

如果您的生成器使用Forge或Fabric之类的API,则此参数采用该API的版本。但是,如果您的生成器不使用外部API,则应该将此值设置为1.0。

当设置新版本时,使用此生成器的所有工作区都将被重新编译,就像安装新版本时MCreator所做的一样。

Subversion

它的工作原理与前一个参数相同,除了它可以用于设置另一个时间工作空间,即使构建文件版本是相同的。

Gradle 任务

# Gradle任务定义
gradle:
  setup_task: eclipse
  run_client: runClient
  run_server: runServer
  export_file: "build/libs/modid-1.0.jar"
Setup task

(可选)这个Gradle任务将在每次建立工作区时执行。

Run client

(可选)当用户点击“运行客户端”图标时要执行的任务。

Run Server

(可选)当用户点击“运行服务器”图标时要执行的任务。

Export file

这是当用户单击“导出模组”图标时要导出的文件的位置。该文件必须位于工作区文件夹中。

根目录

基础生成器根目录
# 基础生成器根目录
source_root: "@WORKSPACEROOT/src/main/java"
res_root: "@WORKSPACEROOT/src/main/resources"
mod_assets_root: "@RESROOT/assets/@modid"
mod_data_root: "@RESROOT/data/@modid"

@WORKSPACEROOT不能被修改,因为它是当前工作区的路径。

源代码目录

MCreator保存代码文件的文件夹。例如,在Forge和Fabric生成器中,Java文件和包保存在这个根目录中。

资源目录

MCreator将保存所有资源文件的文件夹。

模组资源文件目录

用于资源文件(例如纹理和声音)的文件夹。

Mod数据目录

用于数据文件(如结构文件和标签)的文件夹。

特定目录

#特定目录
structures_dir: "@MODDATAROOT/structures"
sounds_dir: "@MODASSETSROOT/sounds"
other_textures_dir: "@MODASSETSROOT/textures"
block_textures_dir: "@MODASSETSROOT/textures/blocks"
item_textures_dir: "@MODASSETSROOT/textures/items"
armor_textures_dir: "@MODASSETSROOT/textures/models/armor"
Structures

存放结构文件的目录。如果没有定义,这个生成器将不能使用结构。

Sounds

存放声音文件的目录。如果没有定义,声音将无法使用此生成器。

Other

Other中添加纹理的目录。

Block

Block中添加纹理的目录。

Item

Item中添加纹理的目录。

Armor

盔甲的_layer_1__layer_2纹理目录。

基础模板

对于这一部分,我不会把所有的东西都放在Forge生成器上,因为有太多的东西。如果你想获取所有这些,我建议你去检查MCreator插件文件夹中的generator-1.14.4 (< install dir b> /plugins)。

#一些Forge1.16.5生成器的基础模板
base_templates:
  - template: modbase/mod.java.ftl
    name: "@SRCROOT/@BASEPACKAGEPATH/@JavaModName.java"
    canLock: true
  - template: modbase/mods.toml.ftl
    writer: file
    name: "@RESROOT/META-INF/mods.toml"
  - template: json/fluidtag.json.ftl
    writer: json
    condition: hasFluids()
    deleteWhenConditionFalse: true
    variables: "type=lava"
    name: "@RESROOT/data/minecraft/tags/fluids/lava.json"

基本模板是修改正常工作所需的基本文件。这些文件只添加一次,用户在工作区UI中看不到。它们可以有一些参数。

Template

每次添加模板行时,都会定义一个新的模板文件。这一行必须包含生成器的templates文件夹中模板文件的路径。

Name

在执行setup task时生成的文件的名称和位置。

Can lock

(可选)一个布尔值,定义该文件是否可以被锁定(来自工作区设置选项)。

Writer

(可选)MCreator默认使用Java编写程序。但是,如果该文件不是Java文件,则可以使用另一个编写器。可以使用jsonfile

Condition

(可选)生成文件所需的条件。只能使用内置条件。

Delete when condition false

(可选)必须与condition参数配合使用。如果不满足,MCreator是否删除文件?

Variables

(可选)如果模板文件中需要FreeMarker的一些变量,可以添加到模板文件中。

资源任务

resources_setup_tasks:
# Forge 1.16.5
  - task: copy_file
    from: "@MODASSETSROOT/textures/@modpicture.png"
    to: "@RESROOT/logo.png"
  - task: copy_models
    type: OBJ_inlinetextures
    prefix: "@modid:blocks/"
    to: "@MODASSETSROOT/models/item"
  - task: copy_models
    type: JSON_noinlinetextures
    to: "@MODASSETSROOT/models/custom"

# Addons 1.16.5
  - task: copy_and_resize_image
    width: 128
    height: 128
    from: "@MODASSETSROOT/textures/@modpicture.png"
    to: "@RESROOT/pack_icon.png"
  - task: copy_and_resize_image
    width: 128
    height: 128
    from: "@MODASSETSROOT/textures/@modpicture.png"
    to: "@SRCROOT/pack_icon.png"

可以使用几个任务,但主要的任务如上所示。可用的任务可以在这里找到。

语言文件

language_file:
  format: json
  root_folder: "@MODASSETSROOT/lang/"
  langfile_name: "@langname.json"

工作空间基本文件夹

此文件夹(workspacebase)包含创建工作区所需的每个文件。无法解释此目录中包含的文件,因为每种生成器类型的工作方式不同,因此它们将具有不同的文件。但是,gradle/wrapper应该是生成器类型使用的gradle包装器(例如,Forge和Fabric不使用相同的gradle包装器)。

定义文件

要支持一个mod元素,您必须添加它的定义文件(``modelementid.definition.yaml)。在文件中,您必须编写这个mod元素的模板文件,包括文件的路径。但是,所有模板文件都必须保存在生成器的templates文件夹中。

templates:
  - template: armor.java.ftl
    name: "@SRCROOT/@BASEPACKAGEPATH/item/@NAMEItem.java"
  - template: json/item.json.ftl
    writer: json
    condition: enableHelmet
    deleteWhenConditionFalse: true
    variables: "item=helmet"
    name: "@MODASSETSROOT/models/item/@registryname_helmet.json"

本地化关键字

一些mod元素包含可翻译的文本。因此,要在工作区的Localization选项卡中添加,每个可翻译的选项都必须在这里添加。

localizationkeys:
  - key: item.@modid.@registryname_helmet
    mapto: helmetName
Key

在语言文件和代码中使用该键来获取每种语言的文本。这个键也可以在工作区的本地化选项卡中看到。

Mapto

保存mod元素UI值的变量的名称。

模板

此文件夹包含生成器使用的所有模板文件。要组织文件夹,您可以创建自己的文件夹。但是文件的位置也必须包含这个文件夹。

基本模组

modbase是包含您之前在generator.yamlbase_templates中定义的所有模板的文件夹。

为全文索检目录的文件

在制作大型生成器时,我们经常需要在多个模板文件中生成相同的代码。因此,在这个文件夹中,您还可以添加模板文件,以帮助生成特定的代码。

例子

边界框

例如,在MCreator 2021.1中,创建了一个新的边界框编辑器。这个新的编辑器也实现了自定义植物。由于边界框现在可能非常复杂,因此创建了一个新的util文件(boundingboxes.java.ftl)。这个文件包含一些FreeMarker宏,生成一个特定的代码,允许用户创建非常复杂的形状,因为这些宏对每个边界框条目都执行。

Minecraft物品

方块和物品在Minecraft和MCreator中随处可见。但是,为了每次都生成正确的代码,创建了这个文件。这个文件是一个简单的FreeMarker文件,只包含FreeMarker的代码。使用几个函数和条件,映射名将始终转换为正确的代码。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值