Node Metadata: Created
This commit is contained in:
parent
8059ca0ced
commit
fe972dacb2
@ -25,32 +25,36 @@
|
||||
num: 5
|
||||
link: chapters/node_drawtypes.html
|
||||
|
||||
- title: Active Block Modifiers
|
||||
- title: Node Metadata
|
||||
num: 6
|
||||
link: chapters/node_metadata.html
|
||||
|
||||
- title: Active Block Modifiers
|
||||
num: 7
|
||||
link: chapters/abms.html
|
||||
|
||||
- hr: true
|
||||
|
||||
- title: Chat and Commands
|
||||
num: 7
|
||||
num: 8
|
||||
link: chapters/chat.html
|
||||
|
||||
- title: Player Physics
|
||||
num: 8
|
||||
num: 9
|
||||
link: chapters/player_physics.html
|
||||
|
||||
- title: Formspecs
|
||||
num: 9
|
||||
num: 10
|
||||
link: chapters/formspecs.html
|
||||
|
||||
- title: HUD
|
||||
num: 10
|
||||
num: 11
|
||||
link: chapters/hud.html
|
||||
|
||||
- hr: true
|
||||
|
||||
- title: Releasing a Mod
|
||||
num: 11
|
||||
num: 12
|
||||
link: chapters/releasing.html
|
||||
|
||||
- hr: true
|
||||
|
@ -246,7 +246,7 @@ end)
|
||||
## Node Meta Formspecs
|
||||
|
||||
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
|
||||
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`,
|
||||
however, this kind of form can only be shown by right-clicking on a
|
||||
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