Minetest的Mod开发教程:【1-入门】

创建mod时,了解mod文件夹的基本结构是一项基本技能。

什么是游戏和模组?

Minetest的强大功能是能够轻松开发游戏,而无需创建自己的三维像素图形,三维像素算法或精美的网络代码。

在Minetest中,游戏是模块的集合,这些模块协同工作以提供游戏的内容和行为。模块,通常称为mod,是脚本和资源的集合。可以只使用一个mod来制作游戏,但是很少这样做,因为这降低了游戏部分独立于其他部分进行调整和替换的难度。

也可以在游戏之外分发mod,在这种情况下,它们也是更传统意义上的mod- 修改。这些mod调整或扩展了游戏的功能。

游戏中包含的模组和第三方模组都使用相同的API。

本书将涵盖Minetest API的主要部分,并且适用于游戏开发者和修改者。

mods存放在哪里?

每个mod都有其自己的目录,在该目录中放置了Lua代码,纹理,模型和声音。Minetest在许多不同的位置检查mod。这些位置通常称为mod加载路径

对于给定的世界/保存游戏,将检查三个Mod位置。它们是:

  1. 游戏模组。这些是构成世界运行游戏的mod。例如:minetest/games/minetest_game/mods//usr/share/minetest/games/minetest/
  2. 全局mod,几乎总是将mod安装到的位置。如有疑问,请将其放在此处。例如:minetest/mods/
  3. 世界模组,用于存储特定于特定世界的模组的位置。例如:minetest/worlds/world/worldmods/

Minetest将按照上面给出的顺序检查位置。如果遇到名称与先前找到的名称相同的mod,则会加载较新的mod来代替较早的mod。这意味着您可以通过在全局mod位置放置一个具有相同名称的mod来覆盖游戏mod。

每个mod加载路径的实际位置取决于您所使用的操作系统以及Minetest的安装方式。

  • Windows:
    • 对于便携式版本,即:从一个.zip文件,只是去到你提取的拉链和看目录gamesmodsworlds 目录。
    • 对于已安装的版本,即:从setup.exe,请在C:\ Minetest或C:\ Games \ Minetest中查找。
  • GNU / Linux:
    • 对于系统范围的安装,请参阅~/.minetest 。请注意,这~ 意味着用户主目录,并且以点(. )开头的文件和目录被隐藏。
    • 对于便携式安装,请查看构建目录。
    • 对于Flatpak安装,请看中~/.var/app/net.minetest.Minetest/.minetest/mods/
  • MAC
    • 往里看~/Library/Application Support/minetest/ 。请注意,这~ 表示用户回家/Users/USERNAME/

Mod目录

一个MOD的名字 用来表达你的mod。每个mod应该有一个唯一的名称。模组名称可以包含字母,数字和下划线。一个好名字应该描述mod的作用,并且包含mod组件的目录必须和mod名具有相同的名字。要了解是否有可用的mod名称,请尝试在content.minetest.net上进行搜索。

mymod
├── init.lua (required) - Runs when the game loads.
├── mod.conf (recommended) - Contains description and dependencies.
├── textures (optional)
│   └── ... any textures or images
├── sounds (optional)
│   └── ... any sounds
└── ... any other files or directories

mod中只需要init.lua文件即可使其在游戏加载时运行;但是,建议使用mod.conf,根据mod的功能,可能需要其他组件。

mod.conf

该文件用于mod元数据,包括mod的名称,描述和其他信息。

例如:

name = mymod
description = Adds foo, bar, and bo.
depends = modone, modtwo

依存关系

当某个mod要求在其自身之前加载另一个mod时,就会发生依赖关系。一个mod可能需要另一个mod的代码,物品或其他资源才能使用。

有两种类型的依赖关系:硬性依赖关系和可选依赖关系。两者都需要先加载mod。如果依赖的mod不可用,则硬依赖将导致mod无法加载,而可选的依赖可能导致启用的功能更少。

如果要可选地支持另一个mod,则可选的依赖项很有用。如果用户希望同时使用两个模块,它可以启用额外的内容.

依赖关系在mod.conf中以逗号分隔的列表中指定。

depends = modone, modtwo
optional_depends = modthree

Mod Packs

可以将Mod分组为mod包,以允许将多个mod打包在一起并一起移动。如果您想向一个玩家提供多个mod,但又不想让它们分别下载一个,则它们很有用。

modpack1
├── modpack.lua (required) - signals that this is a mod pack
├── mod1
│   └── ... mod files
└── mymod (optional)
    └── ... mod files

请注意,modpack不是游戏 。游戏有其自己的组织结构,这将在游戏一章中进行说明。

例子

这是一个将所有这些放在一起的示例:

Mod资料夹

mymod
├── textures
│   └── mymod_node.png files
├── init.lua
└── mod.conf

初始化

print("This file will be run at load time!")

minetest.register_node("mymod:node", {
    description = "This is a node",
    tiles = {"mymod_node.png"},
    groups = {cracky = 1}
})

配置文件

name = mymod
descriptions = Adds a node
depends = default

这个mod的名字是“ mymod”。它具有两个文本文件:init.lua和mod.conf。
该脚本将打印一条消息,然后注册一个节点-下一章将对此进行说明。
有一个依赖项,默认为mod,通常在Minetest Game中找到。
该节点的textures /中也有一个纹理。