Node Metadata: Created
This commit is contained in:
parent
8059ca0ced
commit
fe972dacb2
@ -25,32 +25,36 @@
|
|||||||
num: 5
|
num: 5
|
||||||
link: chapters/node_drawtypes.html
|
link: chapters/node_drawtypes.html
|
||||||
|
|
||||||
- title: Active Block Modifiers
|
- title: Node Metadata
|
||||||
num: 6
|
num: 6
|
||||||
|
link: chapters/node_metadata.html
|
||||||
|
|
||||||
|
- title: Active Block Modifiers
|
||||||
|
num: 7
|
||||||
link: chapters/abms.html
|
link: chapters/abms.html
|
||||||
|
|
||||||
- hr: true
|
- hr: true
|
||||||
|
|
||||||
- title: Chat and Commands
|
- title: Chat and Commands
|
||||||
num: 7
|
num: 8
|
||||||
link: chapters/chat.html
|
link: chapters/chat.html
|
||||||
|
|
||||||
- title: Player Physics
|
- title: Player Physics
|
||||||
num: 8
|
num: 9
|
||||||
link: chapters/player_physics.html
|
link: chapters/player_physics.html
|
||||||
|
|
||||||
- title: Formspecs
|
- title: Formspecs
|
||||||
num: 9
|
num: 10
|
||||||
link: chapters/formspecs.html
|
link: chapters/formspecs.html
|
||||||
|
|
||||||
- title: HUD
|
- title: HUD
|
||||||
num: 10
|
num: 11
|
||||||
link: chapters/hud.html
|
link: chapters/hud.html
|
||||||
|
|
||||||
- hr: true
|
- hr: true
|
||||||
|
|
||||||
- title: Releasing a Mod
|
- title: Releasing a Mod
|
||||||
num: 11
|
num: 12
|
||||||
link: chapters/releasing.html
|
link: chapters/releasing.html
|
||||||
|
|
||||||
- hr: true
|
- hr: true
|
||||||
|
@ -246,7 +246,7 @@ end)
|
|||||||
## Node Meta Formspecs
|
## Node Meta Formspecs
|
||||||
|
|
||||||
minetest.show_formspec is not the only way to show a formspec, you can also
|
minetest.show_formspec is not the only way to show a formspec, you can also
|
||||||
add formspecs to a node's meta data. This is used on nodes such as chests to
|
add formspecs to a [node's meta data](node_metadata.html). This is used on nodes such as chests to
|
||||||
allow for faster opening times - you don't need to wait for the server to send
|
allow for faster opening times - you don't need to wait for the server to send
|
||||||
the player the chest formspec.
|
the player the chest formspec.
|
||||||
|
|
||||||
@ -281,5 +281,3 @@ This style of callback can trigger the callback when you press enter
|
|||||||
in a field, which is impossible with `minetest.show_formspec`,
|
in a field, which is impossible with `minetest.show_formspec`,
|
||||||
however, this kind of form can only be shown by right-clicking on a
|
however, this kind of form can only be shown by right-clicking on a
|
||||||
node. It cannot be triggered programmatically.
|
node. It cannot be triggered programmatically.
|
||||||
|
|
||||||
*Note: node meta data will have been explained by this point in the full book*
|
|
||||||
|
113
chapters/node_metadata.md
Normal file
113
chapters/node_metadata.md
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
---
|
||||||
|
title: Node Metadata
|
||||||
|
layout: default
|
||||||
|
root: ../
|
||||||
|
---
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
In this chapter you will learn how to manipulate a node's metadata.
|
||||||
|
|
||||||
|
* What is Node Metadata?
|
||||||
|
* Getting a Metadata Object
|
||||||
|
* Reading Metadata
|
||||||
|
* Setting Metadata
|
||||||
|
* Lua Tables
|
||||||
|
* Your Turn
|
||||||
|
|
||||||
|
## What is Node Metadata?
|
||||||
|
|
||||||
|
Metadata is data about data. So Node Metadata is **data about a node**.
|
||||||
|
|
||||||
|
You may use metadata to store:
|
||||||
|
|
||||||
|
* an node's inventory (such as in a chest).
|
||||||
|
* progress on crafting (such as in a furnace).
|
||||||
|
* who owns the node (such as in a locked chest).
|
||||||
|
|
||||||
|
The node's type, light levels
|
||||||
|
and orientation are not stored in the metadata, but are rather part
|
||||||
|
of the data itself.
|
||||||
|
|
||||||
|
Metadata is stored in a key value relationship.
|
||||||
|
|
||||||
|
| Key | Value |
|
||||||
|
|---------|---------|
|
||||||
|
| foo | bar |
|
||||||
|
| owner | player1 |
|
||||||
|
| counter | 5 |
|
||||||
|
|
||||||
|
## Getting a Metadata Object
|
||||||
|
|
||||||
|
Once you have a position of a node, you can do this:
|
||||||
|
|
||||||
|
{% highlight lua %}
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
-- where pos = { x = 1, y = 5, z = 7 }
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
## Reading Metadata
|
||||||
|
|
||||||
|
{% highlight lua %}
|
||||||
|
local value = meta:get_string("key")
|
||||||
|
|
||||||
|
if value then
|
||||||
|
print(value)
|
||||||
|
else
|
||||||
|
-- value == nil
|
||||||
|
-- metadata of key "key" does not exist
|
||||||
|
print(value)
|
||||||
|
end
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
Here are all the get functions you can use, as of writing:
|
||||||
|
|
||||||
|
* get_string
|
||||||
|
* get_int
|
||||||
|
* get_float
|
||||||
|
* get_inventory
|
||||||
|
|
||||||
|
In order to do booleans, you should use `get_string` and `minetest.is_yes`:
|
||||||
|
|
||||||
|
|
||||||
|
{% highlight lua %}
|
||||||
|
local value = minetest.is_yes(meta:get_string("key"))
|
||||||
|
|
||||||
|
if value then
|
||||||
|
print("is yes")
|
||||||
|
else
|
||||||
|
print("is no")
|
||||||
|
end
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
## Setting Metadata
|
||||||
|
|
||||||
|
Setting meta data works pretty much exactly the same way.
|
||||||
|
|
||||||
|
{% highlight lua %}
|
||||||
|
local value = "one"
|
||||||
|
meta:set_string("key", value)
|
||||||
|
|
||||||
|
meta:set_string("foo", "bar")
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
Here are all the set functions you can use, as of writing:
|
||||||
|
|
||||||
|
* set_string
|
||||||
|
* set_int
|
||||||
|
* set_float
|
||||||
|
|
||||||
|
## Lua Tables
|
||||||
|
|
||||||
|
You can convert to and from lua tables using `to_table` and `from_table`:
|
||||||
|
|
||||||
|
{% highlight lua %}
|
||||||
|
local tmp = meta:to_table()
|
||||||
|
tmp.foo = "bar"
|
||||||
|
meta:from_table(tmp)
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
## Your Turn
|
||||||
|
|
||||||
|
* Make a block which disappears after it has been punched 5 times.
|
||||||
|
(use on_punch in the node def and minetest.set_node)
|
Loading…
Reference in New Issue
Block a user