« ^ »

minetestで用意されている関数をざっと集める

所要時間: 約 2分

minetestのmodを実装する時に使う事になる関数を集める事にする。実際のmodから拾ってきただけなので、網羅的ではない。

minetest.register_alias

アイテム名のエイリアスを追加する。 minetest.register_aliasminetest.register_alias_force がある。既に登録されたエイリアスがある場合、 minetest.register_alias は何もしないが、 minetest.register_alias_force は古いエイリアスを解除し、新しいエイリアスに置き換える。よくある用途としては、この機能は下位互換を維持するために使用する。

minetest.register_alias("example:one_alias", "example:one")

minetest.register_biome

バイオームを登録する。登録に成功すると、バイオームの識別子の整数(オブジェクトハンドル)を返す。

バイオームIDは minetest.get_biome_id で取得できる。

最大で65535個のバイオームを使用できるが、数が多くなるとその分処理も重くなる。

この関数は mapgen init よりも前に呼び出す必要があり、それ以降に呼び出すとminetest自体が不正終了する。これは、不正終了してしまって良いのだろうか。きちんとエラーメッセージを出し、元に戻るようにした方がよい。

minetest.register_chatcommand

チャットコマンドを登録する。

minetest.chat_send_all

minetest.register_craft

クラフトで作る事ができるアイテムのクラフトパターンを定義する。クラフトアイテムであってもノードであっても、クラフトパターンを登録できる。

minetest.register_craftitem

クラフトで作る事ができるアイテムを定義する。

そのアイテムを使用した時に呼び出される処理は、 on_use で指定できる。 on_use で呼び出された関数は itemstack , player , pointed_thing の引数を取る。

pointed_thing には、そのプレイヤーがアイテムを使用した位置が設定される。プレイヤーの位置ではなく、プレイヤーの目の前の位置となる。座標自体は pointed_thing.under で取得できる。

minetest.register_node

石などのノードを登録する。 groups にパラメータを設定できる。

ParameterDescription
attached_node
bouncy
choppy
connect_to_raillike
connected_nodebox
cracky硬さ。この数値より大きなツルハシによって破壊できる。
crumbly
dig_immediate
disable_jump
disable_repair
dummy
fall_damage_add_percent
falling_node
float
lava
level
liquid
oddly_breakable_by_hand
slippery
snappy
soil
stair
testtool
water

minetest.register_tool

minetest.item_eat

アイテムを食べる時に呼び出す。この関数は実際に食べる処理を呼び出すのではなく、食べる処理の呼出し可能な関数を返す。通常は、 on_use フィールドに関数を格納して使用する。

example:three というアイテムを食べられるように実装する例を示す。

minetest.register_craftitem(
   "example:three",
   {
      description = "example three",
      inventory_image = "example_three.png",
      on_use = minetest.item_eat(2),
   }
)

on_use に関数を設定すると、それを実行する。次のコードの場合は、使用したタイミングでチャットに yay と表示する。

      on_use = function (itemstack, player, pointed_thing)
	 minetest.chat_send_all("yay")
	 return itemstack
      end,

この辺りの情報は docs/lua_api.txt に記述されている。ただしあまり丁寧には記述されていない。サンプルとしての実装は、実装済みmodを見ると理解が深まる。