From f691a3bb5779ba8ce9bf4f3decc9989f4a0b0f6d Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Mon, 20 Aug 2012 20:43:26 +0200 Subject: [PATCH 01/23] Remade chapters --- mtmoddeven.txt | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/mtmoddeven.txt b/mtmoddeven.txt index 90c2df9..f6341a2 100644 --- a/mtmoddeven.txt +++ b/mtmoddeven.txt @@ -1,5 +1,23 @@ Minetest-c55: Modding in Lua +Introduction + +--- Modding with Minetest +--- Requirements + + + +Chapter 1 - Modding Basics and Required understanding +---Mod packs and item names +---Creating a mod + + +Chapter 2 - Tutorial + +Chapter 3 - ADMs and Positioning +---Adms and Positioning + + Introduction @@ -24,10 +42,23 @@ Basic Programming Knowledge, at best in Lua Language -Chapter 0: Creating a mod -=========================== + +Chapter 1 - Modding basics +========================== +---Types of objects in Minetest--- + +NODE: +SPRITE + +--- Mod packs and item names --- + +In minetest, each item, block, and node + + +--- Creating a mod --- + For creating a minetest mod you have to create a new folder with the name of your mod in the mod folder ----------------------------------------------------------------- From a33eecffb9658eba0cc2cb74e610049907f69266 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Mon, 20 Aug 2012 20:55:52 +0200 Subject: [PATCH 02/23] Added a new chapter Describes basics --- mtmoddeven.txt | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/mtmoddeven.txt b/mtmoddeven.txt index f6341a2..a5457c6 100644 --- a/mtmoddeven.txt +++ b/mtmoddeven.txt @@ -47,33 +47,52 @@ Basic Programming Knowledge, at best in Lua Language Chapter 1 - Modding basics ========================== ----Types of objects in Minetest--- -NODE: -SPRITE + +---Types of objects in Minetest--- +Here are the three types of items you can define in Minetest: + +Node (register_node): A Block from the world +Tool (register_tool): A tool/weapon that can dig and damage things according to tool_capabilities +Craftitem (register_craftitem): A miscellaneous item + +The type of the object is important as it plays a part in the properties of that object. + + + --- Mod packs and item names --- -In minetest, each item, block, and node +In minetest, each node, tool and item need a unique name to identify it in the api. + +The names format is like this: + +------------------------ +| modpackname:itemname | +------------------------ + +so for example, default:dirt is the unique name for dirt. + + --- Creating a mod --- -For creating a minetest mod you have to create a new folder with the name of your mod in the mod folder +To create a minetest mod, you have to create a new folder with the name of your mod in the mod folder ----------------------------------------------------------------- | Linux Systemwide: ~/.minetest*/usermods/ | | | | Windows + Linux Run-in-place: minetest*/mods/minetest | |---------------------------------------------------------------| -| * The place where minetest was installed/extracted to. | +| minetest* The place where minetest was installed/extracted to.| ----------------------------------------------------------------- In the new folder, create a file called 'init.lua'. This is the file that will contain the source code for the mod. ---------------------------------------------------------- -| To do this on Window, use WordPad. Click file>save as | +| To do this on Windows, use WordPad. Click file>save as | | dropdown to all files, and type 'init.lua' in the file | | name box. | | Or you can use a lua compatible editor such | From a488168a624ac50cf34969acc0643bf7b9b34fc0 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Mon, 20 Aug 2012 21:01:06 +0200 Subject: [PATCH 03/23] Added more stuff --- mtmoddeven.txt | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/mtmoddeven.txt b/mtmoddeven.txt index a5457c6..f703b66 100644 --- a/mtmoddeven.txt +++ b/mtmoddeven.txt @@ -1,5 +1,9 @@ Minetest-c55: Modding in Lua + +CONTENTS: +========= + Introduction --- Modding with Minetest @@ -11,10 +15,12 @@ Chapter 1 - Modding Basics and Required understanding ---Mod packs and item names ---Creating a mod +Tutorial 0ne: Decowood +---------------------- -Chapter 2 - Tutorial - -Chapter 3 - ADMs and Positioning +Chapter 2 - Defining a node +Chapter 3 - Setting up a craft recipe +Chapter 4 - ADMs and Positioning ---Adms and Positioning @@ -105,13 +111,15 @@ Additionally, create a file called 'init.lua'. This is the file that contains th -Chapter 1: Your first mod! -========================== +Chapter 2: [tutorial] Your first mod! +===================================== We are going to make a mod that adds a special kind of wood that can only be used for decoration. For this, create a new mod called 'tutorial' using the method described in Chapter 0. +--- Creating decowood --- + Step 1) copy-paste this into 'init.lua': ---------------------------------------------------- @@ -159,11 +167,7 @@ material: This sets the time it takes to destroy the block. In this case (minete You could also use minetest.digprop_woodlike(1.5) which makes destruction with axes faster. - - -Chapter 2: Crafting! -==================== - +---Crafting--- Crafting does not only play an important role in minecraft, minetest also uses different crafting recipes. Therefore it is important to know what crafting means and how to code it! From b68c757f2c2b01c2b94233422b71e435cb3d4f17 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Mon, 20 Aug 2012 21:02:55 +0200 Subject: [PATCH 04/23] Added even more (i am rubbish at Commit summaries) --- mtmoddeven.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mtmoddeven.txt b/mtmoddeven.txt index f703b66..ce25c61 100644 --- a/mtmoddeven.txt +++ b/mtmoddeven.txt @@ -167,7 +167,8 @@ material: This sets the time it takes to destroy the block. In this case (minete You could also use minetest.digprop_woodlike(1.5) which makes destruction with axes faster. ----Crafting--- +Chapter 3 - Crafting +==================== Crafting does not only play an important role in minecraft, minetest also uses different crafting recipes. Therefore it is important to know what crafting means and how to code it! @@ -272,10 +273,10 @@ In this case the name is enough to define what block you can see. So let's assume we want to create a mod that makes junglegrass grow above every dirt-with-grass block. This should be a slow process, one dirt-with-grass block after the other should be grown over. This is what we do: -minetest.regis---------------------------------------------------- +---------------------------------------------------- | Code | ---------------------------------------------------- -ter_abm( +minetest.register_abm( {nodenames = {"default:dirt_with_grass"}, interval = 1, chance = 100, From 73b9fc74a1f42f200640625c7ed4d9d059b28c8f Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Mon, 20 Aug 2012 21:07:33 +0200 Subject: [PATCH 05/23] Finished formatting and etc --- mtmoddeven.txt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/mtmoddeven.txt b/mtmoddeven.txt index ce25c61..f899adb 100644 --- a/mtmoddeven.txt +++ b/mtmoddeven.txt @@ -231,13 +231,17 @@ for Linux systemwide installation, these mods are in /usr/share/minetest/games/m -Chapter 3: ABMs & Positioning +Chapter 4: ABMs & Positioning ============================= ABMs add actions to blocks. For instance, the tutorial-wood could become normal wood after a few seconds. Append this code to your init.lua: +---------------------------------------------------- +| Code | +---------------------------------------------------- + minetest.register_abm( {nodenames = {"tutorial:decowood"}, interval = 30, @@ -247,7 +251,11 @@ minetest.register_abm( end, }) -Try it out! It's really annoying to see all your decowood creations destroyed after 30 seconds, they simple become normal wood. +---------------------------------------------------- +| Code | +---------------------------------------------------- + +Try it out! It's really annoying to see all your decowood creations destroyed after 30 seconds, they simply become normal wood. But how does this work? The function minetest.register_abm registers an action for each block of the same type. @@ -286,6 +294,10 @@ minetest.register_abm( end, }) +---------------------------------------------------- +| end of Code | +---------------------------------------------------- + You should already know everything else but the line pos.y=pos.y+1. What is that for? @@ -309,7 +321,7 @@ There are some small other differences to our first abm. The interval is 1 in th Credits and Afterword ===================== -This is Jeija's modding tutorial Version 20120218, rewriten and formated for english by "Rubenwardy" +This is Jeija's modding tutorial Version 20120218, Rewriten and formated for english by "Rubenwardy" Check for new version on github.com/Jeija/minetest-modding-tutorial. From 279ce82097e476f391ecbb485254065254ce5393 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Mon, 20 Aug 2012 21:10:38 +0200 Subject: [PATCH 06/23] Made it easy to find the files, corrected grammar noone = no-one --- README | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/README b/README index 14ac365..1aa8a87 100644 --- a/README +++ b/README @@ -1,4 +1,13 @@ This is a modding tutorial for minetest. -If noone else does it, the german one will be discontinued. +If no-one else does it, the german one will be discontinued. -There is a German HTML version already, have a look at the html folder. +ENGLISH +======= + +raw text) mtmoddeven.txt + +GERMAN +====== + +raw text) mtmoddev.txt +webpage) html/germanDE.html \ No newline at end of file From 2e20572eeeab9db6b520ed35284a3a4b22134d50 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Mon, 20 Aug 2012 21:13:17 +0200 Subject: [PATCH 07/23] Final Corrections --- mtmoddeven.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mtmoddeven.txt b/mtmoddeven.txt index f899adb..48b684f 100644 --- a/mtmoddeven.txt +++ b/mtmoddeven.txt @@ -252,7 +252,7 @@ minetest.register_abm( }) ---------------------------------------------------- -| Code | +| end of Code | ---------------------------------------------------- Try it out! It's really annoying to see all your decowood creations destroyed after 30 seconds, they simply become normal wood. From de98d76cea01e858faf2c5df8ee1e78e0d21b22a Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Tue, 21 Aug 2012 01:49:16 +0100 Subject: [PATCH 08/23] HTML Version of the tutorial also see at tinyurl.com/mt-tut --- html/download.zip | Bin 0 -> 125548 bytes html/englishEN.html | 335 ++++++++++++++++++++++++++++++++++++++++++++ html/stylesheet.css | 37 +++++ 3 files changed, 372 insertions(+) create mode 100644 html/download.zip create mode 100644 html/englishEN.html create mode 100644 html/stylesheet.css diff --git a/html/download.zip b/html/download.zip new file mode 100644 index 0000000000000000000000000000000000000000..1a11c45ffe1dfc442e0c99d181b9cb1d297683e2 GIT binary patch literal 125548 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 NOaK4?3hDs>008lG*%SZ( literal 0 HcmV?d00001 diff --git a/html/englishEN.html b/html/englishEN.html new file mode 100644 index 0000000..48dfc31 --- /dev/null +++ b/html/englishEN.html @@ -0,0 +1,335 @@ + + +Beginners Guide to Minetest Modding + + + + + + + + + + + +
Minetest Logo

Minetest-c55: Modding in Lua

Download Resources
+ +

CONTENTS

+ +

The Basics

+ + +

Part One: Declaring and Crafting Nodes

+ + +

Part Two: ABMs

+ + + +

The Basics

+ + +

Introduction

+ + + + + +
+Screenshot + +

Minetest-c55 is a Minecraft clone, developed by the Finnish programmer 'celeron55' and contributers.

+ +

Minetest has a ScriptAPI (Applictation Programming Interface), which is used to program Mods (Modifications) for the game, extending its features and adding new items.

+ +

This ScriptAPI is accessed using an easy-to-use programming langauge called Lua.

+ + +

Requirements

+ +
    +
  • Basic Programming Knowledge, ideally in the Lua Language (learn)
  • +
+
+ + + +

Chapter 1 - Modding basics

+ +

Types of objects in Minetest

+Here are the three types of items you can define in Minetest: +
    +
  • Node (register_node): A Block from the world
  • +
  • Tool (register_tool): A tool/weapon that can dig and damage things according to tool_capabilities
  • +
  • Craftitem (register_craftitem): A miscellaneous item
  • +
+The type of the object is important as it plays a part in the properties of that object. + + +

Mod packs and item names

+ +

In minetest, each node, tool and item needs a unique name to identify it in the api.
+The name's format is like this:

+ +

+modname:itemname +

+ +In this case, the mod is called 'modname' (name is preset by the folder name) +and the block is called 'itemname', so it's tutorial:decowood.
+ +so for example, default:dirt is the unique name for dirt. + +

Creating a mod

+ +
1) Create a new folder with the name of your mod in the mod folder
+ +

+ + + + +
+Linux Systemwide: ~/.minetest*/usermods/

+Windows + Linux Run-in-place: minetest*/mods/minetest +
+minetest* The place where minetest was installed/extracted to. +
+

+ +
2) In the new folder, create a file called 'init.lua'. This is the file that will contain the source code for the mod.
+ +

+ + +
+To do this on Windows, use WordPad.
Click file>save as, dropdown to all files, and type 'init.lua' in the file name box.
+
Or you can use a lua compatible editor such as 'Context'

+
+
+WARNING: DO NOT USE NOTEPAD +

+ +
3) Next make another sub folder called 'textures'. This is where you will place the textures
+ + +

Tutorial 1: Decowood

+

Chapter 2: [tutorial] Your first mod!

+ +We are going to make a mod that adds a special kind of wood that can only be used for decoration.
+For this, create a new mod called 'tutorial' using the method described in Chapter 0. + +

Registering the decowood node

+ +
1) copy-paste this into 'init.lua':
+ +

+minetest.register_node("tutorial:decowood", {
+	tile_images = {"tutorial_decowood.png"},
+	material = minetest.digprop_constanttime(1),
+})
+

+ +
2) Copy the file 'tutorial_decowood.png' supplied with this Document to the textures folder in the mod.
+
+Try it) Launch the game now, and notice that the mods are automatically loaded and compiled. This means when changing the code you simply have to 'Exit to Menu' and 'Start Game/Connect' again to try out the changes. +
+Let's try out our first mod! Open the chat window ingame (press t) and enter "/giveme tutorial:decowood 99" (Without "" of course). This will add 99 blocks of the decorative wood to your inventory! + +

+ +
+The "give" privilage is required for the /giveme command to work

+To grant yourself the "give" privilage, go to worlds/gamename/auth.txt and open it.
+Add ",give" after "shout,interact" to make it "shout,interact,give"
+

+ +

Let's have a look at the source code:

+ +

The function minetest.register_node(name, table) is responsible for adding new blocks to the game (node=block, but also torches, rails, ...)
+It takes 2 Parameters: The name of the new block ("tutorial:decowood", the string before : MUST be the name of the mod folder) and a table with several properties of the block.

+ +

In this case we use 2 properties:

+
    +
  • tile_images: Sets the texture of the block; You can use only 1 texture or multiple textures, +seperated by commas {"tex1.png", "tex2.png", ...}. The game checks for the texture files in ALL textures folders of the game.
  • + +
  • material: This sets the time it takes to destroy the block. In this case (minetest.digprop_constanttime(1)) it is a constant time of 1 second.
  • +
+You could also use minetest.digprop_woodlike(1.5) which makes destruction with axes faster. + + +

Chapter 3 - Crafting

+ +

What is crafting?

+ +

Crafting does not only play an important role in Minecraft, Minetest also uses different crafting recipes. Therefore it is important to know what crafting means and how to code it!
+ +

Crafting means to creating Tools, Blocks and Other Objects.
+In minetest you have a 3x3 crafting area by default with a 1x1 output field.

+ +

For example, a stone pickaxe can be made out of 2 Sticks and 3 Cobblestones:
+

The craft recipe for a stone pick-axe

+
+S=Stick C=Cobblestone; Looks quite logic, doesn't it? +

+ +

Lets make a recipe for out decowood mod

+ +So let's make a crafting recipe for the decorative wood of Chapter 0!
+ +
Just append (add) this to your init.lua file:
+ +

+minetest.register_craft({
+	output = '"tutorial:decowood" 2',
+	recipe = {
+		{'default:wood', 'default:wood', ''},
+		{'default:wood', 'default:wood', ''},
+		{'', '', ''},
+	}
+})
+

+ +The function minetest.register_craft() registers a crafting process, it defines the recipe for something.
+

+It takes 1 parameter which is a table that contains 2 properties: (and an optional third)
+

    +
  1. output - which sets the outcome of the crafting process and recipe which is the actual recipe for the output.
  2. +
  3. recipe must be a table with other tables inside.
    +Every of the 3 tables defines another row of the crafting field. Every row contains 3 columns.
    +In this case The crafting recipe is like this:

    The craft recipe for our decowood

  4. +
  5. [optional] type - if you want to make it a furnace craft add type="cook" before the "output" property
  6. +
+

+ +Easy, isn't it? You may also try out some other combinations!
+ +

So what is 'default'? 'default' is the most important "mod" of minetest, in fact minetest itself is more like just a game engine, +all the contents, materials, and other stuff are in several mods, like 'default' (standard tools/blocks), 'bucket' (Buckets: Lava/Water),...

+ +If you want to find out more about these mods and maybe use features they contain, just have a look in their init.lua!
+ +

+ +
+For Windows & Linux run-in-place these mods are in minetest/games/minetest_game/

+For Linux systemwide installation, these mods are in /usr/share/minetest/games/minetest_game +

+ + +

Chapter 4: ABMs

+ +ABMs add actions to blocks. For instance, the tutorial-wood could become normal wood after a few seconds.
+ +
Append this code to your init.lua:
+ +

+minetest.register_abm(
+	{nodenames = {"tutorial:decowood"},
+	interval = 30,
+	chance = 1,
+	action = function(pos)
+		minetest.env:add_node(pos, {name="default:wood"})
+	end,
+})
+

+ +Try it out! It's really annoying to see all your decowood creations destroyed after 30 seconds, they simply become normal wood.
+ +

But how does this work?
+The function minetest.register_abm registers an action for each block of the same type.

+ +

nodenames = {"tutorial:decowood'} means that the action is processed for each decowood block.

+ +

You could also try "default:stone" instead of that to turn all stone blocks into wood.

+ +

interval = 30 means that the action is performed every 30 seconds. It starts counting at the beginning of the game. After 30 seconds all actions are processed, it doesn't matter when the block was placed.

+ +

This is not a per-block timer!

+ +

chance = 1 means that the probability of the action is 1:1, it happens in every case.
+A higher value means that it's less probable.

+ +

action = function(pos) is the function that is actually performed.

+ +

It contains the command minetest.env:add_node. More about it in the next section
+ +

minetest.env:add_node

+

This is a function that is used to add/replace a node the given place

+ +

minetest.env:add_node has 2 parameters. +

    +
  • The position parameter (more information later)
    +
  • A table which defines the properties of the block, e.g. the name, the direction it faces, ...

    +
+In this case the name is enough to define what block you can see. +

+ +So let's assume we want to create a mod that makes junglegrass grow above every dirt-with-grass block. This should be a slow process, one dirt-with-grass block after the other should be grown over. +This is what we do:
+ +

+minetest.register_abm(
+	{nodenames = {"default:dirt_with_grass"},
+	interval = 1,
+	chance = 100,
+	action = function(pos)
+		pos.y=pos.y+1
+		minetest.env:add_node(pos, {name="default:junglegrass"})
+	end,
+})
+

+ +

You should already know everything else but the line "pos.y=pos.y+1".

+ +

Chapter 5: The Position Variable

+ +To understand the position variable, you need to know that in 3d space, positions are determind by three co-ordinates: x,y,z
+ +The player usually spawns near 0,0,0.
+ +

The line pos.y=pos.y+1 manipulates the position to 1 Block above the dirt-with-grass node.

+ +

There are some small other differences to our first abm.
+The interval is 1 in this case, but the chance (probability) is 100.Therefore the function is executed every second, but only in 1 of 100 cases. +
This makes your minetest garden slowly been overgrown by junglegrass. + + +

Apendix

+

Learn to code

+Don't have any knowledge? Use the following to learn: +
    +
  • Codecademy -Learn the basics of programming (it is Javascript (not Java) but still helps)
  • +
  • Internet Search (google,yahoo) lua tutorials
  • +
+ + +

Credits and Afterword

+ +

This is Jeija's modding tutorial Version 20120218, +
Updated, Rewriten and Reformated for english by "Rubenwardy".
Html coded by Rubenwardy.

+ +

Check for new version at GitHub.

+ +

For more advanced (and often cryptic) information about minetest modding have a look at this reference: +Lua_api.txt

+ +

For generic modding questions or specific questions, feel free to ask in the minetest forum: +minetest.net/forum

+ +

For questions about this tutorial, ask in the thread for this tutorial: +minetest.net/forum/...

+ +

Thanks you for reading! Good luck in creating your amazing dream mod!

+ + \ No newline at end of file diff --git a/html/stylesheet.css b/html/stylesheet.css new file mode 100644 index 0000000..015c0f0 --- /dev/null +++ b/html/stylesheet.css @@ -0,0 +1,37 @@ +body +{ +font-family:"Arial",arial,arial; +} + +h1 +{ +color:black; +text-align:left; +font-size:20pt; +} + +h2 +{ +color:black; +text-align:left; +font-size:18pt; +text-decoration:underline; +} + +h3 +{ +color:black; +text-align:left; +font-size:12pt; +} + +#step +{ +color:#BB0000; +font-size:12pt; +} + +#help +{ +background-color:#FFFFCC; +} From 0394554452ac32959f3e44c65d7da79374afd01f Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Tue, 21 Aug 2012 03:06:08 +0200 Subject: [PATCH 09/23] Added links to README --- README | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README b/README index 1aa8a87..8b842fd 100644 --- a/README +++ b/README @@ -5,6 +5,9 @@ ENGLISH ======= raw text) mtmoddeven.txt +webpage) html/englishEN.html + +Or view online at: tinyurl.com/mt-tut GERMAN ====== From d810d16b88e30cc19972e51fff94e5fbb36c8c37 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Tue, 21 Aug 2012 17:00:42 +0100 Subject: [PATCH 10/23] Added a new part called "Lua Files and Debugging" Tells reader about dofile, print, and error types. This should be the last part --- html/englishEN.html | 124 +++++++++++++++++++++++++++++++++++++++++--- html/stylesheet.css | 2 +- 2 files changed, 118 insertions(+), 8 deletions(-) diff --git a/html/englishEN.html b/html/englishEN.html index 48dfc31..89d39d7 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -30,8 +30,14 @@

Part Two: ABMs

+ +

Part Three: Lua Files and Debuging

+ @@ -122,8 +128,8 @@ To do this on Windows, use WordPad.
Click file>save as, dropdown to all fil
3) Next make another sub folder called 'textures'. This is where you will place the textures
-

Tutorial 1: Decowood

-

Chapter 2: [tutorial] Your first mod!

+

Part One: Declaring and Crafting Nodes

+

Chapter 2: Defining a node

We are going to make a mod that adds a special kind of wood that can only be used for decoration.
For this, create a new mod called 'tutorial' using the method described in Chapter 0. @@ -213,8 +219,8 @@ In this case The crafting recipe is like this:

The
 </p>
 
 Easy, isn't it? You may also try out some other combinations!<br />
-
-<p>So what is 'default'? 'default' is the most important What is the mod "default"? +

So what is default? 'default' is the most important "mod" of minetest, in fact minetest itself is more like just a game engine, all the contents, materials, and other stuff are in several mods, like 'default' (standard tools/blocks), 'bucket' (Buckets: Lava/Water),...

If you want to find out more about these mods and maybe use features they contain, just have a look in their init.lua!
@@ -292,7 +298,7 @@ minetest.register_abm(

You should already know everything else but the line "pos.y=pos.y+1".

-

Chapter 5: The Position Variable

+

The Position Variable

To understand the position variable, you need to know that in 3d space, positions are determind by three co-ordinates: x,y,z
@@ -304,6 +310,110 @@ The player usually spawns near 0,0,0.
The interval is 1 in this case, but the chance (probability) is 100.Therefore the function is executed every second, but only in 1 of 100 cases.
This makes your minetest garden slowly been overgrown by junglegrass. +

Part Three - Lua Files and Debugging

+

Chapter # - Including Files

+

The dofile function

+Sometimes you have so much code, a single init.lua file is too hard to maintain. + +

+But there is a solution! dofile(minetest.get_modpath("chess").."/anotherfile.lua") will tell Minetest to look for anotherfile.lua in the same folder as init.lua, and add load its contents. +

+

Chapter # - Debugging

+

Types of errors and Bugs

+As with most programming, when you develop you tend to get what are called "bugs" and errors, which are basically human mistakes.
+There are three types of bugs/errors +

    +
  • Compile Time Errors - These occur when Minetest is loading the mods, and are caused by syntax errors (a simple mistake like leaving a "}" out)
  • +
  • Runtime Errors - These occur while the game is being played, and often crash the game. (eg: mod "modname:blockname" is not defined)
  • +
  • Runtime Bugs - These bugs cause the mod not to work as planned
  • +

+ +

Avoiding Syntax Mistakes

+To help avoid syntax mistakes, make sure your code is easy to read. + +

+ + +
+Which one of these codes is easier to read? +

+

+minetest.register_abm(
+	{nodenames = {"default:dirt_with_grass"},
+	interval = 1,
+	chance = 100,
+	action = function(pos)
+		pos.y=pos.y+1
+		minetest.env:add_node(pos, {name="default:junglegrass"})
+	end,
+})
+
+

+

+

+minetest.register_abm({nodenames = {"default:dirt_with_grass"},interval = 1,chance = 100,
+action = function(pos)
+pos.y=pos.y+1
+minetest.env:add_node(pos, {name="default:junglegrass"})
+end,
+})
+
+

+
+

+Also you should check your work and put comments in +

+ +pos.y=pos.y+1 --This line increases the position's y axis by 1 + +

+ +

Avoiding Runtime Mistakes

+ + + +

+The Console is the black window with writing in that appears when Minetest runs.

+
+ + +

LUA has a function called "print" and it displays a message to the console.

+ +

+ +print("message to send") + +

+ +You should the print function so you know how far Minetest gets in a program.
+

+ + +
Why use print
+For example, you have a mistake in the code: + +

+ +

+check_something(1)
+
+function check_something(value)
+
+if value=0 then
+   print("it ends up here")
+else
+    print("but you are certern that value=1")
+end
+
+end
+
+ +

+ +The aboves Runtime bug was caused by a single "=" instead of double "==", and so instead of checking if value was equal to 0, it set it to 0 resulting in true
+And so having print helps point out your mistake. +
+

Apendix

Learn to code

diff --git a/html/stylesheet.css b/html/stylesheet.css index 015c0f0..a1c5111 100644 --- a/html/stylesheet.css +++ b/html/stylesheet.css @@ -20,7 +20,7 @@ text-decoration:underline; h3 { -color:black; +color:0000BB; text-align:left; font-size:12pt; } From 9e3dc772b4b9fc17b242b8aa044f2f7f085922b9 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Tue, 21 Aug 2012 17:16:45 +0100 Subject: [PATCH 11/23] Correct a link --- html/englishEN.html | 888 ++++++++++++++++++++++---------------------- 1 file changed, 444 insertions(+), 444 deletions(-) diff --git a/html/englishEN.html b/html/englishEN.html index 89d39d7..7907678 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -1,445 +1,445 @@ - - -Beginners Guide to Minetest Modding - - - - - - - - - - - -
Minetest Logo

Minetest-c55: Modding in Lua

Download Resources
- -

CONTENTS

- -

The Basics

- - -

Part One: Declaring and Crafting Nodes

- - -

Part Two: ABMs

-
    -
  • Chapter 4 - ABM Basics and the Position Variable
  • -
  • more comming soon
  • -
- -

Part Three: Lua Files and Debuging

- - - -

The Basics

- - -

Introduction

- - - - - -
-Screenshot - -

Minetest-c55 is a Minecraft clone, developed by the Finnish programmer 'celeron55' and contributers.

- -

Minetest has a ScriptAPI (Applictation Programming Interface), which is used to program Mods (Modifications) for the game, extending its features and adding new items.

- -

This ScriptAPI is accessed using an easy-to-use programming langauge called Lua.

- - -

Requirements

- -
    -
  • Basic Programming Knowledge, ideally in the Lua Language (learn)
  • -
-
- - - -

Chapter 1 - Modding basics

- -

Types of objects in Minetest

-Here are the three types of items you can define in Minetest: -
    -
  • Node (register_node): A Block from the world
  • -
  • Tool (register_tool): A tool/weapon that can dig and damage things according to tool_capabilities
  • -
  • Craftitem (register_craftitem): A miscellaneous item
  • -
-The type of the object is important as it plays a part in the properties of that object. - - -

Mod packs and item names

- -

In minetest, each node, tool and item needs a unique name to identify it in the api.
-The name's format is like this:

- -

-modname:itemname -

- -In this case, the mod is called 'modname' (name is preset by the folder name) -and the block is called 'itemname', so it's tutorial:decowood.
- -so for example, default:dirt is the unique name for dirt. - -

Creating a mod

- -
1) Create a new folder with the name of your mod in the mod folder
- -

- - - - -
-Linux Systemwide: ~/.minetest*/usermods/

-Windows + Linux Run-in-place: minetest*/mods/minetest -
-minetest* The place where minetest was installed/extracted to. -
-

- -
2) In the new folder, create a file called 'init.lua'. This is the file that will contain the source code for the mod.
- -

- - -
-To do this on Windows, use WordPad.
Click file>save as, dropdown to all files, and type 'init.lua' in the file name box.
-
Or you can use a lua compatible editor such as 'Context'

-
-
-WARNING: DO NOT USE NOTEPAD -

- -
3) Next make another sub folder called 'textures'. This is where you will place the textures
- - -

Part One: Declaring and Crafting Nodes

-

Chapter 2: Defining a node

- -We are going to make a mod that adds a special kind of wood that can only be used for decoration.
-For this, create a new mod called 'tutorial' using the method described in Chapter 0. - -

Registering the decowood node

- -
1) copy-paste this into 'init.lua':
- -

-minetest.register_node("tutorial:decowood", {
-	tile_images = {"tutorial_decowood.png"},
-	material = minetest.digprop_constanttime(1),
-})
-

- -
2) Copy the file 'tutorial_decowood.png' supplied with this Document to the textures folder in the mod.
-
-Try it) Launch the game now, and notice that the mods are automatically loaded and compiled. This means when changing the code you simply have to 'Exit to Menu' and 'Start Game/Connect' again to try out the changes. -
-Let's try out our first mod! Open the chat window ingame (press t) and enter "/giveme tutorial:decowood 99" (Without "" of course). This will add 99 blocks of the decorative wood to your inventory! - -

- -
-The "give" privilage is required for the /giveme command to work

-To grant yourself the "give" privilage, go to worlds/gamename/auth.txt and open it.
-Add ",give" after "shout,interact" to make it "shout,interact,give"
-

- -

Let's have a look at the source code:

- -

The function minetest.register_node(name, table) is responsible for adding new blocks to the game (node=block, but also torches, rails, ...)
-It takes 2 Parameters: The name of the new block ("tutorial:decowood", the string before : MUST be the name of the mod folder) and a table with several properties of the block.

- -

In this case we use 2 properties:

-
    -
  • tile_images: Sets the texture of the block; You can use only 1 texture or multiple textures, -seperated by commas {"tex1.png", "tex2.png", ...}. The game checks for the texture files in ALL textures folders of the game.
  • - -
  • material: This sets the time it takes to destroy the block. In this case (minetest.digprop_constanttime(1)) it is a constant time of 1 second.
  • -
-You could also use minetest.digprop_woodlike(1.5) which makes destruction with axes faster. - - -

Chapter 3 - Crafting

- -

What is crafting?

- -

Crafting does not only play an important role in Minecraft, Minetest also uses different crafting recipes. Therefore it is important to know what crafting means and how to code it!
- -

Crafting means to creating Tools, Blocks and Other Objects.
-In minetest you have a 3x3 crafting area by default with a 1x1 output field.

- -

For example, a stone pickaxe can be made out of 2 Sticks and 3 Cobblestones:
-

The craft recipe for a stone pick-axe

-
-S=Stick C=Cobblestone; Looks quite logic, doesn't it? -

- -

Lets make a recipe for out decowood mod

- -So let's make a crafting recipe for the decorative wood of Chapter 0!
- -
Just append (add) this to your init.lua file:
- -

-minetest.register_craft({
-	output = '"tutorial:decowood" 2',
-	recipe = {
-		{'default:wood', 'default:wood', ''},
-		{'default:wood', 'default:wood', ''},
-		{'', '', ''},
-	}
-})
-

- -The function minetest.register_craft() registers a crafting process, it defines the recipe for something.
-

-It takes 1 parameter which is a table that contains 2 properties: (and an optional third)
-

    -
  1. output - which sets the outcome of the crafting process and recipe which is the actual recipe for the output.
  2. -
  3. recipe must be a table with other tables inside.
    -Every of the 3 tables defines another row of the crafting field. Every row contains 3 columns.
    -In this case The crafting recipe is like this:

    The craft recipe for our decowood

  4. -
  5. [optional] type - if you want to make it a furnace craft add type="cook" before the "output" property
  6. -
-

- -Easy, isn't it? You may also try out some other combinations!
-

What is the mod "default"?

-

So what is default? 'default' is the most important "mod" of minetest, in fact minetest itself is more like just a game engine, -all the contents, materials, and other stuff are in several mods, like 'default' (standard tools/blocks), 'bucket' (Buckets: Lava/Water),...

- -If you want to find out more about these mods and maybe use features they contain, just have a look in their init.lua!
- -

- -
-For Windows & Linux run-in-place these mods are in minetest/games/minetest_game/

-For Linux systemwide installation, these mods are in /usr/share/minetest/games/minetest_game -

- - -

Chapter 4: ABMs

- -ABMs add actions to blocks. For instance, the tutorial-wood could become normal wood after a few seconds.
- -
Append this code to your init.lua:
- -

-minetest.register_abm(
-	{nodenames = {"tutorial:decowood"},
-	interval = 30,
-	chance = 1,
-	action = function(pos)
-		minetest.env:add_node(pos, {name="default:wood"})
-	end,
-})
-

- -Try it out! It's really annoying to see all your decowood creations destroyed after 30 seconds, they simply become normal wood.
- -

But how does this work?
-The function minetest.register_abm registers an action for each block of the same type.

- -

nodenames = {"tutorial:decowood'} means that the action is processed for each decowood block.

- -

You could also try "default:stone" instead of that to turn all stone blocks into wood.

- -

interval = 30 means that the action is performed every 30 seconds. It starts counting at the beginning of the game. After 30 seconds all actions are processed, it doesn't matter when the block was placed.

- -

This is not a per-block timer!

- -

chance = 1 means that the probability of the action is 1:1, it happens in every case.
-A higher value means that it's less probable.

- -

action = function(pos) is the function that is actually performed.

- -

It contains the command minetest.env:add_node. More about it in the next section
- -

minetest.env:add_node

-

This is a function that is used to add/replace a node the given place

- -

minetest.env:add_node has 2 parameters. -

    -
  • The position parameter (more information later)
    -
  • A table which defines the properties of the block, e.g. the name, the direction it faces, ...

    -
-In this case the name is enough to define what block you can see. -

- -So let's assume we want to create a mod that makes junglegrass grow above every dirt-with-grass block. This should be a slow process, one dirt-with-grass block after the other should be grown over. -This is what we do:
- -

-minetest.register_abm(
-	{nodenames = {"default:dirt_with_grass"},
-	interval = 1,
-	chance = 100,
-	action = function(pos)
-		pos.y=pos.y+1
-		minetest.env:add_node(pos, {name="default:junglegrass"})
-	end,
-})
-

- -

You should already know everything else but the line "pos.y=pos.y+1".

- -

The Position Variable

- -To understand the position variable, you need to know that in 3d space, positions are determind by three co-ordinates: x,y,z
- -The player usually spawns near 0,0,0.
- -

The line pos.y=pos.y+1 manipulates the position to 1 Block above the dirt-with-grass node.

- -

There are some small other differences to our first abm.
-The interval is 1 in this case, but the chance (probability) is 100.Therefore the function is executed every second, but only in 1 of 100 cases. -
This makes your minetest garden slowly been overgrown by junglegrass. - -

Part Three - Lua Files and Debugging

-

Chapter # - Including Files

-

The dofile function

-Sometimes you have so much code, a single init.lua file is too hard to maintain. - -

-But there is a solution! dofile(minetest.get_modpath("chess").."/anotherfile.lua") will tell Minetest to look for anotherfile.lua in the same folder as init.lua, and add load its contents. -

-

Chapter # - Debugging

-

Types of errors and Bugs

-As with most programming, when you develop you tend to get what are called "bugs" and errors, which are basically human mistakes.
-There are three types of bugs/errors -

    -
  • Compile Time Errors - These occur when Minetest is loading the mods, and are caused by syntax errors (a simple mistake like leaving a "}" out)
  • -
  • Runtime Errors - These occur while the game is being played, and often crash the game. (eg: mod "modname:blockname" is not defined)
  • -
  • Runtime Bugs - These bugs cause the mod not to work as planned
  • -

- -

Avoiding Syntax Mistakes

-To help avoid syntax mistakes, make sure your code is easy to read. - -

- - -
-Which one of these codes is easier to read? -

-

-minetest.register_abm(
-	{nodenames = {"default:dirt_with_grass"},
-	interval = 1,
-	chance = 100,
-	action = function(pos)
-		pos.y=pos.y+1
-		minetest.env:add_node(pos, {name="default:junglegrass"})
-	end,
-})
-
-

-

-

-minetest.register_abm({nodenames = {"default:dirt_with_grass"},interval = 1,chance = 100,
-action = function(pos)
-pos.y=pos.y+1
-minetest.env:add_node(pos, {name="default:junglegrass"})
-end,
-})
-
-

-
-

-Also you should check your work and put comments in -

- -pos.y=pos.y+1 --This line increases the position's y axis by 1 - -

- -

Avoiding Runtime Mistakes

- - - -

-The Console is the black window with writing in that appears when Minetest runs.

-
- - -

LUA has a function called "print" and it displays a message to the console.

- -

- -print("message to send") - -

- -You should the print function so you know how far Minetest gets in a program.
-

- - -
Why use print
-For example, you have a mistake in the code: - -

- -

-check_something(1)
-
-function check_something(value)
-
-if value=0 then
-   print("it ends up here")
-else
-    print("but you are certern that value=1")
-end
-
-end
-
- -

- -The aboves Runtime bug was caused by a single "=" instead of double "==", and so instead of checking if value was equal to 0, it set it to 0 resulting in true
-And so having print helps point out your mistake. -
-

- -

Apendix

-

Learn to code

-Don't have any knowledge? Use the following to learn: -
    -
  • Codecademy -Learn the basics of programming (it is Javascript (not Java) but still helps)
  • -
  • Internet Search (google,yahoo) lua tutorials
  • -
- - -

Credits and Afterword

- -

This is Jeija's modding tutorial Version 20120218, -
Updated, Rewriten and Reformated for english by "Rubenwardy".
Html coded by Rubenwardy.

- -

Check for new version at GitHub.

- -

For more advanced (and often cryptic) information about minetest modding have a look at this reference: -Lua_api.txt

- -

For generic modding questions or specific questions, feel free to ask in the minetest forum: -minetest.net/forum

- -

For questions about this tutorial, ask in the thread for this tutorial: -minetest.net/forum/...

- -

Thanks you for reading! Good luck in creating your amazing dream mod!

- + + +Beginners Guide to Minetest Modding + + + + + + + + + + + +
Minetest Logo

Minetest-c55: Modding in Lua

Download Resources
+ +

CONTENTS

+ +

The Basics

+ + +

Part One: Declaring and Crafting Nodes

+ + +

Part Two: ABMs

+
    +
  • Chapter 4 - ABM Basics and the Position Variable
  • +
  • more comming soon
  • +
+ +

Part Three: Lua Files and Debuging

+ + + +

The Basics

+ + +

Introduction

+ + + + + +
+Screenshot + +

Minetest-c55 is a Minecraft clone, developed by the Finnish programmer 'celeron55' and contributers.

+ +

Minetest has a ScriptAPI (Applictation Programming Interface), which is used to program Mods (Modifications) for the game, extending its features and adding new items.

+ +

This ScriptAPI is accessed using an easy-to-use programming langauge called Lua.

+ + +

Requirements

+ +
    +
  • Basic Programming Knowledge, ideally in the Lua Language (learn)
  • +
+
+ + + +

Chapter 1 - Modding basics

+ +

Types of objects in Minetest

+Here are the three types of items you can define in Minetest: +
    +
  • Node (register_node): A Block from the world
  • +
  • Tool (register_tool): A tool/weapon that can dig and damage things according to tool_capabilities
  • +
  • Craftitem (register_craftitem): A miscellaneous item
  • +
+The type of the object is important as it plays a part in the properties of that object. + + +

Mod packs and item names

+ +

In minetest, each node, tool and item needs a unique name to identify it in the api.
+The name's format is like this:

+ +

+modname:itemname +

+ +In this case, the mod is called 'modname' (name is preset by the folder name) +and the block is called 'itemname', so it's tutorial:decowood.
+ +so for example, default:dirt is the unique name for dirt. + +

Creating a mod

+ +
1) Create a new folder with the name of your mod in the mod folder
+ +

+ + + + +
+Linux Systemwide: ~/.minetest*/usermods/

+Windows + Linux Run-in-place: minetest*/mods/minetest +
+minetest* The place where minetest was installed/extracted to. +
+

+ +
2) In the new folder, create a file called 'init.lua'. This is the file that will contain the source code for the mod.
+ +

+ + +
+To do this on Windows, use WordPad.
Click file>save as, dropdown to all files, and type 'init.lua' in the file name box.
+
Or you can use a lua compatible editor such as 'Context'

+
+
+WARNING: DO NOT USE NOTEPAD +

+ +
3) Next make another sub folder called 'textures'. This is where you will place the textures
+ + +

Part One: Declaring and Crafting Nodes

+

Chapter 2: Defining a node

+ +We are going to make a mod that adds a special kind of wood that can only be used for decoration.
+For this, create a new mod called 'tutorial' using the method described in Chapter 0. + +

Registering the decowood node

+ +
1) copy-paste this into 'init.lua':
+ +

+minetest.register_node("tutorial:decowood", {
+	tile_images = {"tutorial_decowood.png"},
+	material = minetest.digprop_constanttime(1),
+})
+

+ +
2) Copy the file 'tutorial_decowood.png' supplied with this Document to the textures folder in the mod.
+
+Try it) Launch the game now, and notice that the mods are automatically loaded and compiled. This means when changing the code you simply have to 'Exit to Menu' and 'Start Game/Connect' again to try out the changes. +
+Let's try out our first mod! Open the chat window ingame (press t) and enter "/giveme tutorial:decowood 99" (Without "" of course). This will add 99 blocks of the decorative wood to your inventory! + +

+ +
+The "give" privilage is required for the /giveme command to work

+To grant yourself the "give" privilage, go to worlds/gamename/auth.txt and open it.
+Add ",give" after "shout,interact" to make it "shout,interact,give"
+

+ +

Let's have a look at the source code:

+ +

The function minetest.register_node(name, table) is responsible for adding new blocks to the game (node=block, but also torches, rails, ...)
+It takes 2 Parameters: The name of the new block ("tutorial:decowood", the string before : MUST be the name of the mod folder) and a table with several properties of the block.

+ +

In this case we use 2 properties:

+
    +
  • tile_images: Sets the texture of the block; You can use only 1 texture or multiple textures, +seperated by commas {"tex1.png", "tex2.png", ...}. The game checks for the texture files in ALL textures folders of the game.
  • + +
  • material: This sets the time it takes to destroy the block. In this case (minetest.digprop_constanttime(1)) it is a constant time of 1 second.
  • +
+You could also use minetest.digprop_woodlike(1.5) which makes destruction with axes faster. + + +

Chapter 3 - Crafting

+ +

What is crafting?

+ +

Crafting does not only play an important role in Minecraft, Minetest also uses different crafting recipes. Therefore it is important to know what crafting means and how to code it!
+ +

Crafting means to creating Tools, Blocks and Other Objects.
+In minetest you have a 3x3 crafting area by default with a 1x1 output field.

+ +

For example, a stone pickaxe can be made out of 2 Sticks and 3 Cobblestones:
+

The craft recipe for a stone pick-axe

+
+S=Stick C=Cobblestone; Looks quite logic, doesn't it? +

+ +

Lets make a recipe for out decowood mod

+ +So let's make a crafting recipe for the decorative wood of Chapter 0!
+ +
Just append (add) this to your init.lua file:
+ +

+minetest.register_craft({
+	output = '"tutorial:decowood" 2',
+	recipe = {
+		{'default:wood', 'default:wood', ''},
+		{'default:wood', 'default:wood', ''},
+		{'', '', ''},
+	}
+})
+

+ +The function minetest.register_craft() registers a crafting process, it defines the recipe for something.
+

+It takes 1 parameter which is a table that contains 2 properties: (and an optional third)
+

    +
  1. output - which sets the outcome of the crafting process and recipe which is the actual recipe for the output.
  2. +
  3. recipe must be a table with other tables inside.
    +Every of the 3 tables defines another row of the crafting field. Every row contains 3 columns.
    +In this case The crafting recipe is like this:

    The craft recipe for our decowood

  4. +
  5. [optional] type - if you want to make it a furnace craft add type="cook" before the "output" property
  6. +
+

+ +Easy, isn't it? You may also try out some other combinations!
+

What is the mod "default"?

+

So what is default? 'default' is the most important "mod" of minetest, in fact minetest itself is more like just a game engine, +all the contents, materials, and other stuff are in several mods, like 'default' (standard tools/blocks), 'bucket' (Buckets: Lava/Water),...

+ +If you want to find out more about these mods and maybe use features they contain, just have a look in their init.lua!
+ +

+ +
+For Windows & Linux run-in-place these mods are in minetest/games/minetest_game/

+For Linux systemwide installation, these mods are in /usr/share/minetest/games/minetest_game +

+ + +

Chapter 4: ABMs

+ +ABMs add actions to blocks. For instance, the tutorial-wood could become normal wood after a few seconds.
+ +
Append this code to your init.lua:
+ +

+minetest.register_abm(
+	{nodenames = {"tutorial:decowood"},
+	interval = 30,
+	chance = 1,
+	action = function(pos)
+		minetest.env:add_node(pos, {name="default:wood"})
+	end,
+})
+

+ +Try it out! It's really annoying to see all your decowood creations destroyed after 30 seconds, they simply become normal wood.
+ +

But how does this work?
+The function minetest.register_abm registers an action for each block of the same type.

+ +

nodenames = {"tutorial:decowood'} means that the action is processed for each decowood block.

+ +

You could also try "default:stone" instead of that to turn all stone blocks into wood.

+ +

interval = 30 means that the action is performed every 30 seconds. It starts counting at the beginning of the game. After 30 seconds all actions are processed, it doesn't matter when the block was placed.

+ +

This is not a per-block timer!

+ +

chance = 1 means that the probability of the action is 1:1, it happens in every case.
+A higher value means that it's less probable.

+ +

action = function(pos) is the function that is actually performed.

+ +

It contains the command minetest.env:add_node. More about it in the next section
+ +

minetest.env:add_node

+

This is a function that is used to add/replace a node the given place

+ +

minetest.env:add_node has 2 parameters. +

    +
  • The position parameter (more information later)
    +
  • A table which defines the properties of the block, e.g. the name, the direction it faces, ...

    +
+In this case the name is enough to define what block you can see. +

+ +So let's assume we want to create a mod that makes junglegrass grow above every dirt-with-grass block. This should be a slow process, one dirt-with-grass block after the other should be grown over. +This is what we do:
+ +

+minetest.register_abm(
+	{nodenames = {"default:dirt_with_grass"},
+	interval = 1,
+	chance = 100,
+	action = function(pos)
+		pos.y=pos.y+1
+		minetest.env:add_node(pos, {name="default:junglegrass"})
+	end,
+})
+

+ +

You should already know everything else but the line "pos.y=pos.y+1".

+ +

The Position Variable

+ +To understand the position variable, you need to know that in 3d space, positions are determind by three co-ordinates: x,y,z
+ +The player usually spawns near 0,0,0.
+ +

The line pos.y=pos.y+1 manipulates the position to 1 Block above the dirt-with-grass node.

+ +

There are some small other differences to our first abm.
+The interval is 1 in this case, but the chance (probability) is 100.Therefore the function is executed every second, but only in 1 of 100 cases. +
This makes your minetest garden slowly been overgrown by junglegrass. + +

Part Three - Lua Files and Debugging

+

Chapter # - Including Files

+

The dofile function

+Sometimes you have so much code, a single init.lua file is too hard to maintain. + +

+But there is a solution! dofile(minetest.get_modpath("chess").."/anotherfile.lua") will tell Minetest to look for anotherfile.lua in the same folder as init.lua, and add load its contents. +

+

Chapter # - Debugging

+

Types of errors and Bugs

+As with most programming, when you develop you tend to get what are called "bugs" and errors, which are basically human mistakes.
+There are three types of bugs/errors +

    +
  • Compile Time Errors - These occur when Minetest is loading the mods, and are caused by syntax errors (a simple mistake like leaving a "}" out)
  • +
  • Runtime Errors - These occur while the game is being played, and often crash the game. (eg: mod "modname:blockname" is not defined)
  • +
  • Runtime Bugs - These bugs cause the mod not to work as planned
  • +

+ +

Avoiding Syntax Mistakes

+To help avoid syntax mistakes, make sure your code is easy to read. + +

+ + +
+Which one of these codes is easier to read? +

+

+minetest.register_abm(
+	{nodenames = {"default:dirt_with_grass"},
+	interval = 1,
+	chance = 100,
+	action = function(pos)
+		pos.y=pos.y+1
+		minetest.env:add_node(pos, {name="default:junglegrass"})
+	end,
+})
+
+

+

+

+minetest.register_abm({nodenames = {"default:dirt_with_grass"},interval = 1,chance = 100,
+action = function(pos)
+pos.y=pos.y+1
+minetest.env:add_node(pos, {name="default:junglegrass"})
+end,
+})
+
+

+
+

+Also you should check your work and put comments in +

+ +pos.y=pos.y+1 --This line increases the position's y axis by 1 + +

+ +

Avoiding Runtime Mistakes

+ + + +

+The Console is the black window with writing in that appears when Minetest runs.

+
+ + +

LUA has a function called "print" and it displays a message to the console.

+ +

+ +print("message to send") + +

+ +You should the print function so you know how far Minetest gets in a program.
+

+ + +
Why use print
+For example, you have a mistake in the code: + +

+ +

+check_something(1)
+
+function check_something(value)
+
+if value=0 then
+   print("it ends up here")
+else
+    print("but you are certern that value=1")
+end
+
+end
+
+ +

+ +The aboves Runtime bug was caused by a single "=" instead of double "==", and so instead of checking if value was equal to 0, it set it to 0 resulting in true
+And so having print helps point out your mistake. +
+

+ +

Apendix

+

Learn to code

+Don't have any knowledge? Use the following to learn: +
    +
  • Codecademy -Learn the basics of programming (it is Javascript (not Java) but still helps)
  • +
  • Internet Search (google,yahoo) lua tutorials
  • +
+ + +

Credits and Afterword

+ +

This is Jeija's modding tutorial Version 20120218, +
Updated, Rewriten and Reformated for english by "Rubenwardy".
Html coded by Rubenwardy.

+ +

Check for new version at GitHub.

+ +

For more advanced (and often cryptic) information about minetest modding have a look at this reference: +Lua_api.txt

+ +

For generic modding questions or specific questions, feel free to ask in the minetest forum: +minetest.net/forum

+ +

For questions about this tutorial, ask in the thread for this tutorial: +minetest.net/forum/...

+ +

Thanks you for reading! Good luck in creating your amazing dream mod!

+ \ No newline at end of file From de5ec8b9aa5e4ef118d384ab82f80da96eb73055 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Tue, 21 Aug 2012 21:37:59 +0100 Subject: [PATCH 12/23] Changed extension and corrected link postitioning --- README => README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) rename README => README.md (71%) diff --git a/README b/README.md similarity index 71% rename from README rename to README.md index 8b842fd..e1c7b4e 100644 --- a/README +++ b/README.md @@ -1,16 +1,16 @@ -This is a modding tutorial for minetest. -If no-one else does it, the german one will be discontinued. - -ENGLISH -======= - -raw text) mtmoddeven.txt -webpage) html/englishEN.html - -Or view online at: tinyurl.com/mt-tut - -GERMAN -====== - -raw text) mtmoddev.txt +This is a modding tutorial for minetest. +If no-one else does it, the german one will be discontinued. + +View tutorial online at: tinyurl.com/mt-tut + +ENGLISH +======= + +raw text) mtmoddeven.txt +webpage) html/englishEN.html + +GERMAN +====== + +raw text) mtmoddev.txt webpage) html/germanDE.html \ No newline at end of file From 83d3f8453a1cb703c03323c22702656e63becf46 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Wed, 22 Aug 2012 11:15:43 +0100 Subject: [PATCH 13/23] Fixed Mistakes and Outdated stuff as noticed by Calinou --- mtmoddeven.txt | 670 ++++++++++++++++++++++++------------------------- 1 file changed, 335 insertions(+), 335 deletions(-) diff --git a/mtmoddeven.txt b/mtmoddeven.txt index 48b684f..67e87ed 100644 --- a/mtmoddeven.txt +++ b/mtmoddeven.txt @@ -1,336 +1,336 @@ -Minetest-c55: Modding in Lua - - -CONTENTS: -========= - -Introduction - ---- Modding with Minetest ---- Requirements - - - -Chapter 1 - Modding Basics and Required understanding ----Mod packs and item names ----Creating a mod - -Tutorial 0ne: Decowood ----------------------- - -Chapter 2 - Defining a node -Chapter 3 - Setting up a craft recipe -Chapter 4 - ADMs and Positioning ----Adms and Positioning - - - - -Introduction -============ - - -Minetest-c55 (Website: minetest.net) is a Minecraft clone, developed by the Finnish programmer 'celeron55' and contributers. - -Minetest has a ScriptAPI (Applictation Programming Interface), which is used to program Mods (Modifications) for the game, extending its features and adding new items. - -This ScriptAPI is accessed using an easy-to-use programming langauge called Lua. - - -Requirements: -============= - - -Basic Programming Knowledge, at best in Lua Language ---- Don't have any knowledge? Use the following to learn: --------- codecademy.com -Learn the basics of programming (it is Javascript (not Java) but still helps) --------- Internet Search (google,yahoo) lua tutorials - - - - - - -Chapter 1 - Modding basics -========================== - - ----Types of objects in Minetest--- -Here are the three types of items you can define in Minetest: - -Node (register_node): A Block from the world -Tool (register_tool): A tool/weapon that can dig and damage things according to tool_capabilities -Craftitem (register_craftitem): A miscellaneous item - -The type of the object is important as it plays a part in the properties of that object. - - - - ---- Mod packs and item names --- - -In minetest, each node, tool and item need a unique name to identify it in the api. - -The names format is like this: - ------------------------- -| modpackname:itemname | ------------------------- - -so for example, default:dirt is the unique name for dirt. - - - - ---- Creating a mod --- - -To create a minetest mod, you have to create a new folder with the name of your mod in the mod folder - ------------------------------------------------------------------ -| Linux Systemwide: ~/.minetest*/usermods/ | -| | -| Windows + Linux Run-in-place: minetest*/mods/minetest | -|---------------------------------------------------------------| -| minetest* The place where minetest was installed/extracted to.| ------------------------------------------------------------------ - - -In the new folder, create a file called 'init.lua'. This is the file that will contain the source code for the mod. - ----------------------------------------------------------- -| To do this on Windows, use WordPad. Click file>save as | -| dropdown to all files, and type 'init.lua' in the file | -| name box. | -| Or you can use a lua compatible editor such | -| as 'context' WARNING: DO NOT USE NOTEPAD | ---------------------------------------------------------- - -Then make another sub folder called 'textures'. This is where you will place the textures - -Additionally, create a file called 'init.lua'. This is the file that contains the source code of your mod. - - - -Chapter 2: [tutorial] Your first mod! -===================================== - - -We are going to make a mod that adds a special kind of wood that can only be used for decoration. -For this, create a new mod called 'tutorial' using the method described in Chapter 0. - ---- Creating decowood --- - -Step 1) copy-paste this into 'init.lua': - ----------------------------------------------------- -| Code | ----------------------------------------------------- - -minetest.register_node("tutorial:decowood", { - tile_images = {"tutorial_decowood.png"}, - material = minetest.digprop_constanttime(1), -}) - ----------------------------------------------------- -| end of Code | ----------------------------------------------------- - - - -Step 2) Copy the file 'tutorial_decowood.png' supplied with this Document to the textures folder in the mod. - -Try it) Launch the game now, and notice that the mods are automatically loaded and compiled. This means when changing the code you simply have to 'Exit to Menu' and 'Start Game/Connect' again to try out the changes. - -Let's try out our first mod! Open the chat window ingame (press t) and enter "/giveme tutorial:decowood 99" (Without "" of course). This will add 99 blocks of the decorative wood to your inventory! - --------------------------------------------------------------------------- -| HELP TIP | -|------------------------------------------------------------------------| -| The "give" privilage is required for the /giveme command to work | -| To grant yourself the "give" privilage, go to worlds/gamename/auth.txt | -| And add ",give" after "shout,interact" to make it "shout,interact,give"| --------------------------------------------------------------------------- - - ------------------------------------------ -| Let's have a look at the source code: | ------------------------------------------ -The function minetest.register_node(name, table) is responsible for adding new blocks to the game (node=block, but also torches, rails, ...) . -It takes 2 Parameters: The name of the new block ("tutorial:decowood", the string before : MUST be the name of the mod folder) and a table with several properties of the block. -In this case we use 2 properties: - -tile_images: Sets the texture of the block; You can use only 1 texture or multiple textures, -seperated by commas {"tex1.png", "tex2.png", ...}. The game checks for the texture files in ALL textures folders of the game. - -material: This sets the time it takes to destroy the block. In this case (minetest.digprop_constanttime(1)) it is a constant time of 1 second. - -You could also use minetest.digprop_woodlike(1.5) which makes destruction with axes faster. - - -Chapter 3 - Crafting -==================== - - -Crafting does not only play an important role in minecraft, minetest also uses different crafting recipes. Therefore it is important to know what crafting means and how to code it! - -Crafting means to creating Tools, Blocks and Other Objects. -In minetest you have a 3x3 crafting area by default with a 1x1 output field. - -For example, a stone pickaxe can be made out of 2 Sticks and 3 Cobblestones: - -C C C - S - S - -S=Stick C=Cobblestone; Looks quite logic, doesn't it? - -So let's make a crafting recipe for the decorative wood of Chapter 0! - -Just append (add) this to your init.lua file: - ----------------------------------------------------- -| Code | ----------------------------------------------------- - -minetest.register_craft({ - output = '"tutorial:decowood" 2', - recipe = { - {'default:wood', 'default:wood', ''}, - {'default:wood', 'default:wood', ''}, - {'', '', ''}, - } -}) - ----------------------------------------------------- -| End of Code | ----------------------------------------------------- - - -The function minetest.register_craft() registers a crafting process, it defines the recipe for something. - -It takes 1 parameter which is a table that contains 2 properties: (and an optional third) -1) output - which sets the outcome of the crafting process and recipe which is the actual recipe for the output. -2) Recipe must be a table with other tables inside. Every of the 3 tables defines another row of the crafting field. Every row contains 3 columns. In this case The crafting recipe is like that: -W W -W W -W=Wood -3) type - if you want to make it a furnace craft add type="cook", - -Easy, isn't it? You may also try out some other combinations! - -But why are wooden planks not simply called wood but 'default:wood'? - -Indeed, The name of a tool/block/other object MUST be modname:name. In this case, the mod is called 'tutorial' (name is preset by the folder name) and the block is called 'decowood', so it's tutorial:decowood. - -So what is 'default'? 'default' is the most important "mod" of minetest, in fact minetest itself is more like just a game engine, all the contents, materials, and other stuff are in several mods, like 'default' (standard tools/blocks), 'bucket' (Buckets: Lava/Water),... - -If you want to find out more about these mods and maybe use features they contain, just have a look in their init.lua! - -For Windows & Linux run-in-place these mods are in minetest/games/minetest_game/; -for Linux systemwide installation, these mods are in /usr/share/minetest/games/minetest_game - - - -Chapter 4: ABMs & Positioning -============================= - - - -ABMs add actions to blocks. For instance, the tutorial-wood could become normal wood after a few seconds. Append this code to your init.lua: - ----------------------------------------------------- -| Code | ----------------------------------------------------- - -minetest.register_abm( - {nodenames = {"tutorial:decowood"}, - interval = 30, - chance = 1, - action = function(pos) - minetest.env:add_node(pos, {name="default:wood"}) - end, -}) - ----------------------------------------------------- -| end of Code | ----------------------------------------------------- - -Try it out! It's really annoying to see all your decowood creations destroyed after 30 seconds, they simply become normal wood. - -But how does this work? -The function minetest.register_abm registers an action for each block of the same type. - -nodenames = {"tutorial:decowood'} means that the action is processed for each decowood block. - -You could also try "default:stone" instead of that to turn all stone blocks into wood. - -interval = 30 means that the action is performed every 30 seconds. It starts counting at the beginning of the game. After 30 seconds all actions are processed, it doesn't matter when the block was placed. - -This is not a per-block timer! - -chance = 1 means that the probability of the action is 1:1, it happens in every case. -A higher value means that it's less probable. - -action = function(pos) is the function that is actually performed. - -It contains the command minetest.env:add_node. This takes two parameters: - -First of all the position parameter (more information later) and also a table which defines the properties of the block, e.g. the name, the direction it faces, ... -In this case the name is enough to define what block you can see. - -So let's assume we want to create a mod that makes junglegrass grow above every dirt-with-grass block. This should be a slow process, one dirt-with-grass block after the other should be grown over. -This is what we do: - ----------------------------------------------------- -| Code | ----------------------------------------------------- -minetest.register_abm( - {nodenames = {"default:dirt_with_grass"}, - interval = 1, - chance = 100, - action = function(pos) - pos.y=pos.y+1 - minetest.env:add_node(pos, {name="default:junglegrass"}) - end, -}) - ----------------------------------------------------- -| end of Code | ----------------------------------------------------- - -You should already know everything else but the line pos.y=pos.y+1. -What is that for? - -To understand it, you should know what a position variable in minetest is a table made up out of -3 values: -x, y and z. - -x and z are forward/backward; left/right values. Y is the up/down value. The player usually spawns near 0,0,0. - -The line pos.y=pos.y+1 manipulates the position to 1 Block above the dirt-with-grass node. - -There are some small other differences to our first abm. The interval is 1 in this case, but the chance (probability) is 100. Therefore the function is executed every second, but only in 1 of 100 cases. This makes your minetest garden slowly been overgrown by junglegrass. - - - - - - - - -Credits and Afterword -===================== - -This is Jeija's modding tutorial Version 20120218, Rewriten and formated for english by "Rubenwardy" - -Check for new version on github.com/Jeija/minetest-modding-tutorial. - -For more advanced (and often cryptic) information about minetest modding have a look at this reference: -http://c55.me/minetest/wiki/doku.php?id=code:lua_api - -For generic modding questions or specific questions, feel free to ask in the minetest forum: -c55.me/minetest/forum -For questions about this tutorial, ask in the thread for this tutorial: -c55.me/minetest/forum/... - +Minetest-c55: Modding in Lua + + +CONTENTS: +========= + +Introduction + +--- Modding with Minetest +--- Requirements + + + +Chapter 1 - Modding Basics and Required understanding +---Mod packs and item names +---Creating a mod + +Tutorial 0ne: Decowood +---------------------- + +Chapter 2 - Defining a node +Chapter 3 - Setting up a craft recipe +Chapter 4 - ADMs and Positioning +---Adms and Positioning + + + + +Introduction +============ + + +Minetest-c55 (Website: minetest.net) is a Minecraft clone, developed by the Finnish programmer 'celeron55' and contributors. + +Minetest has a ScriptAPI (Applictation Programming Interface), which is used to program Mods (Modifications) for the game, extending its features and adding new items. + +This ScriptAPI is accessed using an easy-to-use programming langauge called Lua. + + +Requirements: +============= + + +Basic Programming Knowledge, at best in Lua Language +--- Don't have any knowledge? Use the following to learn: +-------- codecademy.com -Learn the basics of programming (it is Javascript (not Java) but still helps) +-------- Internet Search (google,yahoo) lua tutorials + + + + + + +Chapter 1 - Modding basics +========================== + + +---Types of objects in Minetest--- +Here are the three types of items you can define in Minetest: + +Node (register_node): A Block from the world +Tool (register_tool): A tool/weapon that can dig and damage things according to tool_capabilities +Craftitem (register_craftitem): A miscellaneous item + +The type of the object is important as it plays a part in the properties of that object. + + + + +--- Mod packs and item names --- + +In minetest, each node, tool and item need a unique name to identify it in the api. + +The names format is like this: + +------------------------ +| modpackname:itemname | +------------------------ + +so for example, default:dirt is the unique name for dirt. + + + + +--- Creating a mod --- + +To create a minetest mod, you have to create a new folder with the name of your mod in the mod folder + +----------------------------------------------------------------- +| Linux Systemwide: ~/.minetest*/usermods/ | +| | +| Windows + Linux Run-in-place: minetest*/mods/minetest | +|---------------------------------------------------------------| +| minetest* The place where minetest was installed/extracted to.| +----------------------------------------------------------------- + + +In the new folder, create a file called 'init.lua'. This is the file that will contain the source code for the mod. + +---------------------------------------------------------- +| To do this on Windows, use WordPad. Click file>save as | +| dropdown to all files, and type 'init.lua' in the file | +| name box. | +| Or you can use a lua compatible editor such | +| as 'context' WARNING: DO NOT USE NOTEPAD | +--------------------------------------------------------- + +Then make another sub folder called 'textures'. This is where you will place the textures + +Additionally, create a file called 'init.lua'. This is the file that contains the source code of your mod. + + + +Chapter 2: [tutorial] Your first mod! +===================================== + + +We are going to make a mod that adds a special kind of wood that can only be used for decoration. +For this, create a new mod called 'tutorial' using the method described in Chapter 0. + +--- Creating decowood --- + +Step 1) copy-paste this into 'init.lua': + +---------------------------------------------------- +| Code | +---------------------------------------------------- + +minetest.register_node("tutorial:decowood", { + tile_images = {"tutorial_decowood.png"}, + groups={level=1}, +}) + +---------------------------------------------------- +| end of Code | +---------------------------------------------------- + + + +Step 2) Copy the file 'tutorial_decowood.png' supplied with this Document to the textures folder in the mod. + +Try it) Launch the game now, and notice that the mods are automatically loaded and compiled. This means when changing the code you simply have to 'Exit to Menu' and 'Start Game/Connect' again to try out the changes. + +Let's try out our first mod! Open the chat window ingame (press t) and enter "/giveme tutorial:decowood 99" (Without "" of course). This will add 99 blocks of the decorative wood to your inventory! + +-------------------------------------------------------------------------- +| HELP TIP | +|------------------------------------------------------------------------| +| The "give" privilage is required for the /giveme command to work | +| To grant yourself the "give" privilage, go to worlds/gamename/auth.txt | +| And add ",give" after "shout,interact" to make it "shout,interact,give"| +-------------------------------------------------------------------------- + + +----------------------------------------- +| Let's have a look at the source code: | +----------------------------------------- +The function minetest.register_node(name, table) is responsible for adding new blocks to the game (node=block, but also torches, rails, ...) . +It takes 2 Parameters: The name of the new block ("tutorial:decowood", the string before : MUST be the name of the mod folder) and a table with several properties of the block. +In this case we use 2 properties: + +tile_images: Sets the texture of the block; You can use only 1 texture or multiple textures, +seperated by commas {"tex1.png", "tex2.png", ...}. The game checks for the texture files in ALL textures folders of the game. + +material: This sets the time it takes to destroy the block. In this case (minetest.digprop_constanttime(1)) it is a constant time of 1 second. + +You could also use minetest.digprop_woodlike(1.5) which makes destruction with axes faster. + + +Chapter 3 - Crafting +==================== + + +Crafting does not only play an important role in minecraft, minetest also uses different crafting recipes. Therefore it is important to know what crafting means and how to code it! + +Crafting means to creating Tools, Blocks and Other Objects. +In minetest you have a 3x3 crafting area by default with a 1x1 output field. + +For example, a stone pickaxe can be made out of 2 Sticks and 3 Cobblestones: + +C C C + S + S + +S=Stick C=Cobblestone; Looks quite logic, doesn't it? + +So let's make a crafting recipe for the decorative wood of Chapter 0! + +Just append (add) this to your init.lua file: + +---------------------------------------------------- +| Code | +---------------------------------------------------- + +minetest.register_craft({ + output = '"tutorial:decowood" 2', + recipe = { + {'default:wood', 'default:wood', ''}, + {'default:wood', 'default:wood', ''}, + {'', '', ''}, + } +}) + +---------------------------------------------------- +| End of Code | +---------------------------------------------------- + + +The function minetest.register_craft() registers a crafting process, it defines the recipe for something. + +It takes 1 parameter which is a table that contains 2 properties: (and an optional third) +1) output - which sets the outcome of the crafting process and recipe which is the actual recipe for the output. +2) Recipe must be a table with other tables inside. Every of the 3 tables defines another row of the crafting field. Every row contains 3 columns. In this case The crafting recipe is like that: +W W +W W +W=Wood +3) type - if you want to make it a furnace craft add type="cook", + +Easy, isn't it? You may also try out some other combinations! + +But why are wooden planks not simply called wood but 'default:wood'? + +Indeed, The name of a tool/block/other object MUST be modname:name. In this case, the mod is called 'tutorial' (name is preset by the folder name) and the block is called 'decowood', so it's tutorial:decowood. + +So what is 'default'? 'default' is the most important "mod" of minetest, in fact minetest itself is more like just a game engine, all the contents, materials, and other stuff are in several mods, like 'default' (standard tools/blocks), 'bucket' (Buckets: Lava/Water),... + +If you want to find out more about these mods and maybe use features they contain, just have a look in their init.lua! + +For Windows & Linux run-in-place these mods are in minetest/games/minetest_game/; +for Linux systemwide installation, these mods are in /usr/share/minetest/games/minetest_game + + + +Chapter 4: ABMs & Positioning +============================= + + + +ABMs add actions to blocks. For instance, the tutorial-wood could become normal wood after a few seconds. Append this code to your init.lua: + +---------------------------------------------------- +| Code | +---------------------------------------------------- + +minetest.register_abm( + {nodenames = {"tutorial:decowood"}, + interval = 30, + chance = 1, + action = function(pos) + minetest.env:add_node(pos, {name="default:wood"}) + end, +}) + +---------------------------------------------------- +| end of Code | +---------------------------------------------------- + +Try it out! It's really annoying to see all your decowood creations destroyed after 30 seconds, they simply become normal wood. + +But how does this work? +The function minetest.register_abm registers an action for each block of the same type. + +nodenames = {"tutorial:decowood'} means that the action is processed for each decowood block. + +You could also try "default:stone" instead of that to turn all stone blocks into wood. + +interval = 30 means that the action is performed every 30 seconds. It starts counting at the beginning of the game. After 30 seconds all actions are processed, it doesn't matter when the block was placed. + +This is not a per-block timer! + +chance = 1 means that the probability of the action is 1:1, it happens in every case. +A higher value means that it's less probable. + +action = function(pos) is the function that is actually performed. + +It contains the command minetest.env:add_node. This takes two parameters: + +First of all the position parameter (more information later) and also a table which defines the properties of the block, e.g. the name, the direction it faces, ... +In this case the name is enough to define what block you can see. + +So let's assume we want to create a mod that makes junglegrass grow above every dirt-with-grass block. This should be a slow process, one dirt-with-grass block after the other should be grown over. +This is what we do: + +---------------------------------------------------- +| Code | +---------------------------------------------------- +minetest.register_abm( + {nodenames = {"default:dirt_with_grass"}, + interval = 1, + chance = 100, + action = function(pos) + pos.y=pos.y+1 + minetest.env:add_node(pos, {name="default:junglegrass"}) + end, +}) + +---------------------------------------------------- +| end of Code | +---------------------------------------------------- + +You should already know everything else but the line pos.y=pos.y+1. +What is that for? + +To understand it, you should know what a position variable in minetest is a table made up out of +3 values: +x, y and z. + +x and z are forward/backward; left/right values. Y is the up/down value. The player usually spawns near 0,0,0. + +The line pos.y=pos.y+1 manipulates the position to 1 Block above the dirt-with-grass node. + +There are some small other differences to our first abm. The interval is 1 in this case, but the chance (probability) is 100. Therefore the function is executed every second, but only in 1 of 100 cases. This makes your minetest garden slowly been overgrown by junglegrass. + + + + + + + + +Credits and Afterword +===================== + +This is Jeija's modding tutorial Version 20120218, Rewriten and formated for english by "Rubenwardy" + +Check for new version on github.com/Jeija/minetest-modding-tutorial. + +For more advanced (and often cryptic) information about minetest modding have a look at this reference: +http://c55.me/minetest/wiki/doku.php?id=code:lua_api + +For generic modding questions or specific questions, feel free to ask in the minetest forum: +c55.me/minetest/forum +For questions about this tutorial, ask in the thread for this tutorial: +c55.me/minetest/forum/... + Thanks you for reading! Good luck in creating your amazing dream mod! \ No newline at end of file From e3d171bef1602c16c28066bb9020380a5efbdda4 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Wed, 22 Aug 2012 11:31:32 +0100 Subject: [PATCH 14/23] Correct stuff --- html/englishEN.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/html/englishEN.html b/html/englishEN.html index 7907678..9c52f87 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -51,7 +51,7 @@ Screenshot -

Minetest-c55 is a Minecraft clone, developed by the Finnish programmer 'celeron55' and contributers.

+

Minetest-c55 is a Minecraft clone, developed by the Finnish programmer 'celeron55' and contributors.

Minetest has a ScriptAPI (Applictation Programming Interface), which is used to program Mods (Modifications) for the game, extending its features and adding new items.

@@ -141,7 +141,7 @@ For this, create a new mod called 'tutorial' using the method described in Chapt

 minetest.register_node("tutorial:decowood", {
 	tile_images = {"tutorial_decowood.png"},
-	material = minetest.digprop_constanttime(1),
+	groups={level=1},
 })
 

@@ -169,7 +169,7 @@ It takes 2 Parameters: The name of the new block ("tutorial:decowood", the strin
  • tile_images: Sets the texture of the block; You can use only 1 texture or multiple textures, seperated by commas {"tex1.png", "tex2.png", ...}. The game checks for the texture files in ALL textures folders of the game.
  • -
  • material: This sets the time it takes to destroy the block. In this case (minetest.digprop_constanttime(1)) it is a constant time of 1 second.
  • +
  • group: This sets the time it takes to destroy the block. In this case (level=1,) it is a constant time of 1 second.
  • You could also use minetest.digprop_woodlike(1.5) which makes destruction with axes faster. From e815cb0ccbeb46b90fccbb4e85dbff8c2cabc5ab Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Wed, 22 Aug 2012 11:32:36 +0100 Subject: [PATCH 15/23] Did forum requested changes --- html/englishEN.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/englishEN.html b/html/englishEN.html index 9c52f87..e72293b 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -316,7 +316,7 @@ The interval is 1 in this case, but the chance (probability) is 100.Therefore th Sometimes you have so much code, a single init.lua file is too hard to maintain.

    -But there is a solution! dofile(minetest.get_modpath("chess").."/anotherfile.lua") will tell Minetest to look for anotherfile.lua in the same folder as init.lua, and add load its contents. +But there is a solution! dofile(minetest.get_modpath("tutorial").."/anotherfile.lua") will tell Minetest to look for anotherfile.lua in the same folder as init.lua, and add load its contents.

    Chapter # - Debugging

    Types of errors and Bugs

    From d66dd954dc1a8e9faaefdfc0bb6af19ee30a13dd Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Wed, 22 Aug 2012 11:36:59 +0100 Subject: [PATCH 16/23] Changes requested by forum --- html/englishEN.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/html/englishEN.html b/html/englishEN.html index e72293b..203bcb3 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -141,7 +141,7 @@ For this, create a new mod called 'tutorial' using the method described in Chapt

     minetest.register_node("tutorial:decowood", {
     	tile_images = {"tutorial_decowood.png"},
    -	groups={level=1},
    +	groups={choppy},
     })
     

    @@ -169,9 +169,9 @@ It takes 2 Parameters: The name of the new block ("tutorial:decowood", the strin
  • tile_images: Sets the texture of the block; You can use only 1 texture or multiple textures, seperated by commas {"tex1.png", "tex2.png", ...}. The game checks for the texture files in ALL textures folders of the game.
  • -
  • group: This sets the time it takes to destroy the block. In this case (level=1,) it is a constant time of 1 second.
  • +
  • group: This sets the time it takes to destroy the block. See more
  • -You could also use minetest.digprop_woodlike(1.5) which makes destruction with axes faster. +

    Chapter 3 - Crafting

    From 615d61ee91ef3ff06e9fc6073d6646ace3fcaae3 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Wed, 22 Aug 2012 11:37:45 +0100 Subject: [PATCH 17/23] Did forum requested changes --- html/englishEN.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/englishEN.html b/html/englishEN.html index 203bcb3..5c16525 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -169,7 +169,7 @@ It takes 2 Parameters: The name of the new block ("tutorial:decowood", the strin
  • tile_images: Sets the texture of the block; You can use only 1 texture or multiple textures, seperated by commas {"tex1.png", "tex2.png", ...}. The game checks for the texture files in ALL textures folders of the game.
  • -
  • group: This sets the time it takes to destroy the block. See more
  • +
  • group: This sets the time it takes to destroy the block, and the tool required See more
  • From 26e34eb5477ead452b8caff881b958a355a6632c Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Wed, 22 Aug 2012 19:06:41 +0100 Subject: [PATCH 18/23] Added external links --- html/englishEN.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/html/englishEN.html b/html/englishEN.html index 5c16525..548a3e4 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -431,6 +431,8 @@ Don't have any knowledge? Use the following to learn:

    Check for new version at GitHub.

    +

    See InfinityProject's Moddinghelper

    +

    For more advanced (and often cryptic) information about minetest modding have a look at this reference: Lua_api.txt

    From bc4b941acc8eb43774ef30ba3adee02ded40ef23 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Thu, 23 Aug 2012 15:11:48 +0100 Subject: [PATCH 19/23] Corrected a typo --- html/englishEN.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/englishEN.html b/html/englishEN.html index 548a3e4..ccc84bb 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -189,7 +189,7 @@ In minetest you have a 3x3 crafting area by default with a 1x1 output field.

    S=Stick C=Cobblestone; Looks quite logic, doesn't it?

    -

    Lets make a recipe for out decowood mod

    +

    Lets make a recipe for our decowood mod

    So let's make a crafting recipe for the decorative wood of Chapter 0!
    From 02ac7943be66611c6b373534b4d780b166fdeef9 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Thu, 23 Aug 2012 15:21:09 +0100 Subject: [PATCH 20/23] Corrected another typo --- html/englishEN.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/englishEN.html b/html/englishEN.html index ccc84bb..16e3420 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -316,7 +316,7 @@ The interval is 1 in this case, but the chance (probability) is 100.Therefore th Sometimes you have so much code, a single init.lua file is too hard to maintain.

    -But there is a solution! dofile(minetest.get_modpath("tutorial").."/anotherfile.lua") will tell Minetest to look for anotherfile.lua in the same folder as init.lua, and add load its contents. +But there is a solution! dofile(minetest.get_modpath("tutorial").."/anotherfile.lua") will tell Minetest to look for anotherfile.lua in the same folder as init.lua, and load its contents.

    Chapter # - Debugging

    Types of errors and Bugs

    From 2089153c929a1ed0959932e5f61d319216e5a032 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Thu, 23 Aug 2012 15:25:54 +0100 Subject: [PATCH 21/23] Updated recommended editors --- html/englishEN.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/englishEN.html b/html/englishEN.html index 16e3420..92971e2 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -117,7 +117,7 @@ minetest* The place where minetest was installed/extracted to.

    To do this on Windows, use WordPad.
    Click file>save as, dropdown to all files, and type 'init.lua' in the file name box.
    -
    Or you can use a lua compatible editor such as 'Context'

    +
    Or you can use a lua compatible editor, a few examples: 'Context', 'luaedit', 'Geany (linux)', 'Bluefish (linux)'

    From 61c1fed609a9191b54ad89d1729b547b867807d4 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Thu, 23 Aug 2012 15:28:29 +0100 Subject: [PATCH 22/23] Call this 20120823 --- html/englishEN.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/englishEN.html b/html/englishEN.html index 92971e2..d0cae30 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -426,7 +426,7 @@ Don't have any knowledge? Use the following to learn:

    Credits and Afterword

    -

    This is Jeija's modding tutorial Version 20120218, +

    This is Jeija's modding tutorial Version 20120823,
    Updated, Rewriten and Reformated for english by "Rubenwardy".
    Html coded by Rubenwardy.

    Check for new version at GitHub.

    From 4296592a7e67bd5082a02426fa2fe04a252d3c34 Mon Sep 17 00:00:00 2001 From: Rubenwardy Date: Sat, 25 Aug 2012 00:33:06 +0100 Subject: [PATCH 23/23] What ABM means --- html/englishEN.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/englishEN.html b/html/englishEN.html index d0cae30..c7adc34 100644 --- a/html/englishEN.html +++ b/html/englishEN.html @@ -235,7 +235,7 @@ For Linux systemwide installation, these mods are in /usr/share/minetest/game

    Chapter 4: ABMs

    -ABMs add actions to blocks. For instance, the tutorial-wood could become normal wood after a few seconds.
    +ABMs stands for "Active Block Modifiers" and they add actions to blocks. For instance, the tutorial-wood could become normal wood after a few seconds.
    Append this code to your init.lua: