aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/mods/default/init.lua1
-rw-r--r--data/mods/legacy/init.lua1004
-rw-r--r--src/craftitemdef.cpp47
-rw-r--r--src/craftitemdef.h5
-rw-r--r--src/scriptapi.cpp19
5 files changed, 80 insertions, 996 deletions
diff --git a/data/mods/default/init.lua b/data/mods/default/init.lua
index 003a02323..56b32e75c 100644
--- a/data/mods/default/init.lua
+++ b/data/mods/default/init.lua
@@ -94,6 +94,7 @@
-- minetest.register_abm(abm definition)
-- minetest.alias_node(name, convert_to)
-- minetest.alias_tool(name, convert_to)
+-- minetest.alias_craftitem(name, convert_to)
-- minetest.register_globalstep(func(dtime))
-- minetest.register_on_placenode(func(pos, newnode, placer))
-- minetest.register_on_dignode(func(pos, oldnode, digger))
diff --git a/data/mods/legacy/init.lua b/data/mods/legacy/init.lua
index 6bd5526e5..f4a429f79 100644
--- a/data/mods/legacy/init.lua
+++ b/data/mods/legacy/init.lua
@@ -1,6 +1,10 @@
-- legacy (Minetest 0.4 mod)
-- Provides as much backwards-compatibility as feasible
+--
+-- Aliases to support loading 0.3 and old 0.4 worlds and inventories
+--
+
minetest.alias_node("stone", "default:stone")
minetest.alias_node("dirt_with_grass", "default:dirt_with_grass")
minetest.alias_node("dirt_with_grass_footsteps", "default:dirt_with_grass_footsteps")
@@ -54,961 +58,21 @@ minetest.alias_tool("WSword", "default:sword_wood")
minetest.alias_tool("STSword", "default:sword_stone")
minetest.alias_tool("SteelSword", "default:sword_steel")
---[[
-WATER_ALPHA = 160
-WATER_VISC = 1
-LAVA_VISC = 7
-LIGHT_MAX = 14
-
---
--- Tool definition
--- Compatibility to 0.3 and old 0.4
---
-
-minetest.register_tool(":WPick", {
- image = "default_tool_woodpick.png",
- basetime = 2.0,
- dt_weight = 0,
- dt_crackiness = -0.5,
- dt_crumbliness = 2,
- dt_cuttability = 0,
- basedurability = 30,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":STPick", {
- image = "default_tool_stonepick.png",
- basetime = 1.5,
- dt_weight = 0,
- dt_crackiness = -0.5,
- dt_crumbliness = 2,
- dt_cuttability = 0,
- basedurability = 100,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":SteelPick", {
- image = "default_tool_steelpick.png",
- basetime = 1.0,
- dt_weight = 0,
- dt_crackiness = -0.5,
- dt_crumbliness = 2,
- dt_cuttability = 0,
- basedurability = 333,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":MesePick", {
- image = "default_tool_mesepick.png",
- basetime = 0,
- dt_weight = 0,
- dt_crackiness = 0,
- dt_crumbliness = 0,
- dt_cuttability = 0,
- basedurability = 1337,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":WShovel", {
- image = "default_tool_woodshovel.png",
- basetime = 2.0,
- dt_weight = 0.5,
- dt_crackiness = 2,
- dt_crumbliness = -1.5,
- dt_cuttability = 0.3,
- basedurability = 30,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":STShovel", {
- image = "default_tool_stoneshovel.png",
- basetime = 1.5,
- dt_weight = 0.5,
- dt_crackiness = 2,
- dt_crumbliness = -1.5,
- dt_cuttability = 0.1,
- basedurability = 100,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":SteelShovel", {
- image = "default_tool_steelshovel.png",
- basetime = 1.0,
- dt_weight = 0.5,
- dt_crackiness = 2,
- dt_crumbliness = -1.5,
- dt_cuttability = 0.0,
- basedurability = 330,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":WAxe", {
- image = "default_tool_woodaxe.png",
- basetime = 2.0,
- dt_weight = 0.5,
- dt_crackiness = -0.2,
- dt_crumbliness = 1,
- dt_cuttability = -0.5,
- basedurability = 30,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":STAxe", {
- image = "default_tool_stoneaxe.png",
- basetime = 1.5,
- dt_weight = 0.5,
- dt_crackiness = -0.2,
- dt_crumbliness = 1,
- dt_cuttability = -0.5,
- basedurability = 100,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":SteelAxe", {
- image = "default_tool_steelaxe.png",
- basetime = 1.0,
- dt_weight = 0.5,
- dt_crackiness = -0.2,
- dt_crumbliness = 1,
- dt_cuttability = -0.5,
- basedurability = 330,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":WSword", {
- image = "default_tool_woodsword.png",
- basetime = 3.0,
- dt_weight = 3,
- dt_crackiness = 0,
- dt_crumbliness = 1,
- dt_cuttability = -1,
- basedurability = 30,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":STSword", {
- image = "default_tool_stonesword.png",
- basetime = 2.5,
- dt_weight = 3,
- dt_crackiness = 0,
- dt_crumbliness = 1,
- dt_cuttability = -1,
- basedurability = 100,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-minetest.register_tool(":SteelSword", {
- image = "default_tool_steelsword.png",
- basetime = 2.0,
- dt_weight = 3,
- dt_crackiness = 0,
- dt_crumbliness = 1,
- dt_cuttability = -1,
- basedurability = 330,
- dd_weight = 0,
- dd_crackiness = 0,
- dd_crumbliness = 0,
- dd_cuttability = 0,
-})
-
---
--- Crafting definition (recipe = legacy, output = default)
--- Makes current compatible with 0.3 and old 0.4
---
-
-minetest.register_craft({
- output = 'node "default:wood" 4',
- recipe = {
- {'node "tree"'},
- }
-})
-
-minetest.register_craft({
- output = 'craft "default:stick" 4',
- recipe = {
- {'node "wood"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:fence_wooden" 2',
- recipe = {
- {'craft "Stick"', 'craft "Stick"', 'craft "Stick"'},
- {'craft "Stick"', 'craft "Stick"', 'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:sign_wall" 1',
- recipe = {
- {'node "wood"', 'node "wood"', 'node "wood"'},
- {'node "wood"', 'node "wood"', 'node "wood"'},
- {'', 'craft "Stick"', ''},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:torch" 4',
- recipe = {
- {'craft "lump_of_coal"'},
- {'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:pick_wooden"',
- recipe = {
- {'node "wood"', 'node "wood"', 'node "wood"'},
- {'', 'craft "Stick"', ''},
- {'', 'craft "Stick"', ''},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:pick_stone"',
- recipe = {
- {'node "cobble"', 'node "cobble"', 'node "cobble"'},
- {'', 'craft "Stick"', ''},
- {'', 'craft "Stick"', ''},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:pick_steel"',
- recipe = {
- {'craft "steel_ingot"', 'craft "steel_ingot"', 'craft "steel_ingot"'},
- {'', 'craft "Stick"', ''},
- {'', 'craft "Stick"', ''},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:pick_mese"',
- recipe = {
- {'node "mese"', 'node "mese"', 'node "mese"'},
- {'', 'craft "Stick"', ''},
- {'', 'craft "Stick"', ''},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:shovel_wood"',
- recipe = {
- {'node "wood"'},
- {'craft "Stick"'},
- {'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:shovel_stone"',
- recipe = {
- {'node "cobble"'},
- {'craft "Stick"'},
- {'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:shovel_steel"',
- recipe = {
- {'craft "steel_ingot"'},
- {'craft "Stick"'},
- {'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:axe_wooden"',
- recipe = {
- {'node "wood"', 'node "wood"'},
- {'node "wood"', 'craft "Stick"'},
- {'', 'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:axe_stone"',
- recipe = {
- {'node "cobble"', 'node "cobble"'},
- {'node "cobble"', 'craft "Stick"'},
- {'', 'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:axe_steel"',
- recipe = {
- {'craft "steel_ingot"', 'craft "steel_ingot"'},
- {'craft "steel_ingot"', 'craft "Stick"'},
- {'', 'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:sword_wood"',
- recipe = {
- {'node "wood"'},
- {'node "wood"'},
- {'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:sword_stone"',
- recipe = {
- {'node "cobble"'},
- {'node "cobble"'},
- {'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'tool "default:sword_steel"',
- recipe = {
- {'craft "steel_ingot"'},
- {'craft "steel_ingot"'},
- {'craft "Stick"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:rail" 15',
- recipe = {
- {'craft "steel_ingot"', '', 'craft "steel_ingot"'},
- {'craft "steel_ingot"', 'craft "Stick"', 'craft "steel_ingot"'},
- {'craft "steel_ingot"', '', 'craft "steel_ingot"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:chest" 1',
- recipe = {
- {'node "wood"', 'node "wood"', 'node "wood"'},
- {'node "wood"', '', 'node "wood"'},
- {'node "wood"', 'node "wood"', 'node "wood"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:chest_locked" 1',
- recipe = {
- {'node "wood"', 'node "wood"', 'node "wood"'},
- {'node "wood"', 'craft "steel_ingot"', 'node "wood"'},
- {'node "wood"', 'node "wood"', 'node "wood"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:furnace" 1',
- recipe = {
- {'node "cobble"', 'node "cobble"', 'node "cobble"'},
- {'node "cobble"', '', 'node "cobble"'},
- {'node "cobble"', 'node "cobble"', 'node "cobble"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:steelblock" 1',
- recipe = {
- {'craft "steel_ingot"', 'craft "steel_ingot"', 'craft "steel_ingot"'},
- {'craft "steel_ingot"', 'craft "steel_ingot"', 'craft "steel_ingot"'},
- {'craft "steel_ingot"', 'craft "steel_ingot"', 'craft "steel_ingot"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:sandstone" 1',
- recipe = {
- {'node "sand"', 'node "sand"'},
- {'node "sand"', 'node "sand"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:clay" 1',
- recipe = {
- {'craft "lump_of_clay"', 'craft "lump_of_clay"'},
- {'craft "lump_of_clay"', 'craft "lump_of_clay"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:brick" 1',
- recipe = {
- {'craft "clay_brick"', 'craft "clay_brick"'},
- {'craft "clay_brick"', 'craft "clay_brick"'},
- }
-})
-
-minetest.register_craft({
- output = 'craft "default:paper" 1',
- recipe = {
- {'node "papyrus"', 'node "papyrus"', 'node "papyrus"'},
- }
-})
-
-minetest.register_craft({
- output = 'craft "default:book" 1',
- recipe = {
- {'craft "paper"'},
- {'craft "paper"'},
- {'craft "paper"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:bookshelf" 1',
- recipe = {
- {'node "wood"', 'node "wood"', 'node "wood"'},
- {'craft "book"', 'craft "book"', 'craft "book"'},
- {'node "wood"', 'node "wood"', 'node "wood"'},
- }
-})
-
-minetest.register_craft({
- output = 'node "default:ladder" 1',
- recipe = {
- {'craft "Stick"', '', 'craft "Stick"'},
- {'craft "Stick"', 'craft "Stick"', 'craft "Stick"'},
- {'craft "Stick"', '', 'craft "Stick"'},
- }
-})
+minetest.alias_craftitem("Stick", "default:stick")
+minetest.alias_craftitem("paper", "default:paper")
+minetest.alias_craftitem("book", "default:book")
+minetest.alias_craftitem("lump_of_coal", "default:coal_lump")
+minetest.alias_craftitem("lump_of_iron", "default:iron_lump")
+minetest.alias_craftitem("lump_of_clay", "default:clay_lump")
+minetest.alias_craftitem("steel_ingot", "default:steel_ingot")
+minetest.alias_craftitem("clay_brick", "default:clay_brick")
+minetest.alias_craftitem("scorched_stuff", "default:scorched_stuff")
+minetest.alias_craftitem("apple", "default:apple")
--
--- Node compatibility with old 0.4
+-- Old items
--
-minetest.register_node(":stone", {
- tile_images = {"default_stone.png"},
- inventory_image = minetest.inventorycube("default_stone.png"),
- paramtype = "mineral",
- is_ground_content = true,
- often_contains_mineral = true, -- Texture atlas hint
- material = minetest.digprop_stonelike(1.0),
- dug_item = 'node "cobble" 1',
-})
-
-minetest.register_node(":dirt_with_grass", {
- tile_images = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
- inventory_image = minetest.inventorycube("default_dirt.png^default_grass_side.png"),
- is_ground_content = true,
- material = minetest.digprop_dirtlike(1.0),
- dug_item = 'node "dirt" 1',
-})
-
-minetest.register_node(":dirt_with_grass_footsteps", {
- tile_images = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
- inventory_image = "default_grass_footsteps.png",
- is_ground_content = true,
- material = minetest.digprop_dirtlike(1.0),
- dug_item = 'node "dirt" 1',
-})
-
-minetest.register_node(":dirt", {
- tile_images = {"default_dirt.png"},
- inventory_image = minetest.inventorycube("default_dirt.png"),
- is_ground_content = true,
- material = minetest.digprop_dirtlike(1.0),
-})
-
-minetest.register_node(":sand", {
- tile_images = {"default_sand.png"},
- inventory_image = minetest.inventorycube("default_sand.png"),
- is_ground_content = true,
- material = minetest.digprop_dirtlike(1.0),
- cookresult_itemstring = 'node "default:glass" 1',
-})
-
-minetest.register_node(":gravel", {
- tile_images = {"default_gravel.png"},
- inventory_image = minetest.inventorycube("default_gravel.png"),
- is_ground_content = true,
- material = minetest.digprop_gravellike(1.0),
-})
-
-minetest.register_node(":sandstone", {
- tile_images = {"default_sandstone.png"},
- inventory_image = minetest.inventorycube("default_sandstone.png"),
- is_ground_content = true,
- material = minetest.digprop_dirtlike(1.0),
- dug_item = 'node "sand" 1',
-})
-
-minetest.register_node(":clay", {
- tile_images = {"default_clay.png"},
- inventory_image = minetest.inventorycube("default_clay.png"),
- is_ground_content = true,
- material = minetest.digprop_dirtlike(1.0),
- dug_item = 'craft "lump_of_clay" 4',
-})
-
-minetest.register_node(":brick", {
- tile_images = {"default_brick.png"},
- inventory_image = minetest.inventorycube("default_brick.png"),
- is_ground_content = true,
- material = minetest.digprop_stonelike(1.0),
- dug_item = 'craft "clay_brick" 4',
-})
-
-minetest.register_node(":tree", {
- tile_images = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
- inventory_image = minetest.inventorycube("default_tree_top.png", "default_tree.png", "default_tree.png"),
- is_ground_content = true,
- material = minetest.digprop_woodlike(1.0),
- cookresult_itemstring = 'craft "default:coal_lump" 1',
- furnace_burntime = 30,
-})
-
-minetest.register_node(":jungletree", {
- tile_images = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
- inventory_image = minetest.inventorycube("default_jungletree_top.png", "default_jungletree.png", "default_jungletree.png"),
- is_ground_content = true,
- material = minetest.digprop_woodlike(1.0),
- cookresult_itemstring = 'craft "default:coal_lump" 1',
- furnace_burntime = 30,
-})
-
-minetest.register_node(":junglegrass", {
- drawtype = "plantlike",
- visual_scale = 1.3,
- tile_images = {"default_junglegrass.png"},
- inventory_image = "default_junglegrass.png",
- light_propagates = true,
- paramtype = "light",
- walkable = false,
- material = minetest.digprop_leaveslike(1.0),
- furnace_burntime = 2,
-})
-
-minetest.register_node(":leaves", {
- drawtype = "allfaces_optional",
- visual_scale = 1.3,
- tile_images = {"default_leaves.png"},
- inventory_image = minetest.inventorycube("default_leaves.png"),
- light_propagates = true,
- paramtype = "light",
- material = minetest.digprop_leaveslike(1.0),
- extra_dug_item = 'node "default:sapling" 1',
- extra_dug_item_rarity = 20,
- furnace_burntime = 1,
-})
-
-minetest.register_node(":cactus", {
- tile_images = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
- inventory_image = minetest.inventorycube("default_cactus_top.png", "default_cactus_side.png", "default_cactus_side.png"),
- is_ground_content = true,
- material = minetest.digprop_woodlike(0.75),
- furnace_burntime = 15,
-})
-
-minetest.register_node(":papyrus", {
- drawtype = "plantlike",
- tile_images = {"default_papyrus.png"},
- inventory_image = "default_papyrus.png",
- light_propagates = true,
- paramtype = "light",
- is_ground_content = true,
- walkable = false,
- material = minetest.digprop_leaveslike(0.5),
- furnace_burntime = 1,
-})
-
-minetest.register_node(":bookshelf", {
- tile_images = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
- inventory_image = minetest.inventorycube("default_wood.png", "default_bookshelf.png", "default_bookshelf.png"),
- is_ground_content = true,
- material = minetest.digprop_woodlike(0.75),
- furnace_burntime = 30,
-})
-
-minetest.register_node(":glass", {
- drawtype = "glasslike",
- tile_images = {"default_glass.png"},
- inventory_image = minetest.inventorycube("default_glass.png"),
- light_propagates = true,
- paramtype = "light",
- sunlight_propagates = true,
- is_ground_content = true,
- material = minetest.digprop_glasslike(1.0),
-})
-
-minetest.register_node(":wooden_fence", {
- drawtype = "fencelike",
- tile_images = {"default_wood.png"},
- inventory_image = "default_fence.png",
- light_propagates = true,
- paramtype = "light",
- is_ground_content = true,
- selection_box = {
- type = "fixed",
- fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
- },
- furnace_burntime = 15,
- material = minetest.digprop_woodlike(0.75),
-})
-
-minetest.register_node(":rail", {
- drawtype = "raillike",
- tile_images = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
- inventory_image = "default_rail.png",
- light_propagates = true,
- paramtype = "light",
- is_ground_content = true,
- walkable = false,
- selection_box = {
- type = "fixed",
- --fixed = <default>
- },
- material = minetest.digprop_dirtlike(0.75),
-})
-
-minetest.register_node(":ladder", {
- drawtype = "signlike",
- tile_images = {"default_ladder.png"},
- inventory_image = "default_ladder.png",
- light_propagates = true,
- paramtype = "light",
- is_ground_content = true,
- wall_mounted = true,
- walkable = false,
- climbable = true,
- selection_box = {
- type = "wallmounted",
- --wall_top = = <default>
- --wall_bottom = = <default>
- --wall_side = = <default>
- },
- furnace_burntime = 5,
- material = minetest.digprop_woodlike(0.5),
-})
-
-minetest.register_node(":coalstone", {
- tile_images = {"default_stone.png^mineral_coal.png"},
- inventory_image = "default_stone.png^mineral_coal.png",
- is_ground_content = true,
- material = minetest.digprop_stonelike(1.5),
-})
-
-minetest.register_node(":wood", {
- tile_images = {"default_wood.png"},
- inventory_image = minetest.inventorycube("default_wood.png"),
- is_ground_content = true,
- furnace_burntime = 7,
- material = minetest.digprop_woodlike(0.75),
-})
-
-minetest.register_node(":mese", {
- tile_images = {"default_mese.png"},
- inventory_image = minetest.inventorycube("default_mese.png"),
- is_ground_content = true,
- furnace_burntime = 30,
- material = minetest.digprop_stonelike(0.5),
-})
-
-minetest.register_node(":cloud", {
- tile_images = {"default_cloud.png"},
- inventory_image = minetest.inventorycube("default_cloud.png"),
- is_ground_content = true,
-})
-
-minetest.register_node(":water_flowing", {
- drawtype = "flowingliquid",
- tile_images = {"default_water.png"},
- alpha = WATER_ALPHA,
- inventory_image = minetest.inventorycube("default_water.png"),
- paramtype = "light",
- light_propagates = true,
- walkable = false,
- pointable = false,
- diggable = false,
- buildable_to = true,
- liquidtype = "flowing",
- liquid_alternative_flowing = "water_flowing",
- liquid_alternative_source = "water_source",
- liquid_viscosity = WATER_VISC,
- post_effect_color = {a=64, r=100, g=100, b=200},
- special_materials = {
- {image="default_water.png", backface_culling=false},
- {image="default_water.png", backface_culling=true},
- },
-})
-
-minetest.register_node(":water_source", {
- drawtype = "liquid",
- tile_images = {"default_water.png"},
- alpha = WATER_ALPHA,
- inventory_image = minetest.inventorycube("default_water.png"),
- paramtype = "light",
- light_propagates = true,
- walkable = false,
- pointable = false,
- diggable = false,
- buildable_to = true,
- liquidtype = "source",
- liquid_alternative_flowing = "water_flowing",
- liquid_alternative_source = "water_source",
- liquid_viscosity = WATER_VISC,
- post_effect_color = {a=64, r=100, g=100, b=200},
- special_materials = {
- -- New-style water source material (mostly unused)
- {image="default_water.png", backface_culling=false},
- },
-})
-
-minetest.register_node(":lava_flowing", {
- drawtype = "flowingliquid",
- tile_images = {"default_lava.png"},
- inventory_image = minetest.inventorycube("default_lava.png"),
- paramtype = "light",
- light_propagates = false,
- light_source = LIGHT_MAX - 1,
- walkable = false,
- pointable = false,
- diggable = false,
- buildable_to = true,
- liquidtype = "flowing",
- liquid_alternative_flowing = "lava_flowing",
- liquid_alternative_source = "lava_source",
- liquid_viscosity = LAVA_VISC,
- damage_per_second = 4*2,
- post_effect_color = {a=192, r=255, g=64, b=0},
- special_materials = {
- {image="default_lava.png", backface_culling=false},
- {image="default_lava.png", backface_culling=true},
- },
-})
-
-minetest.register_node(":lava_source", {
- drawtype = "liquid",
- tile_images = {"default_lava.png"},
- inventory_image = minetest.inventorycube("default_lava.png"),
- paramtype = "light",
- light_propagates = false,
- light_source = LIGHT_MAX - 1,
- walkable = false,
- pointable = false,
- diggable = false,
- buildable_to = true,
- liquidtype = "source",
- liquid_alternative_flowing = "lava_flowing",
- liquid_alternative_source = "lava_source",
- liquid_viscosity = LAVA_VISC,
- damage_per_second = 4*2,
- post_effect_color = {a=192, r=255, g=64, b=0},
- special_materials = {
- -- New-style lava source material (mostly unused)
- {image="default_lava.png", backface_culling=false},
- },
- furnace_burntime = 60,
-})
-
-minetest.register_node(":torch", {
- drawtype = "torchlike",
- tile_images = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
- inventory_image = "default_torch_on_floor.png",
- paramtype = "light",
- light_propagates = true,
- sunlight_propagates = true,
- walkable = false,
- wall_mounted = true,
- light_source = LIGHT_MAX-1,
- selection_box = {
- type = "wallmounted",
- wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
- wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
- wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
- },
- material = minetest.digprop_constanttime(0.0),
- furnace_burntime = 4,
-})
-
-minetest.register_node(":sign_wall", {
- drawtype = "signlike",
- tile_images = {"default_sign_wall.png"},
- inventory_image = "default_sign_wall.png",
- paramtype = "light",
- light_propagates = true,
- sunlight_propagates = true,
- walkable = false,
- wall_mounted = true,
- metadata_name = "sign",
- selection_box = {
- type = "wallmounted",
- --wall_top = <default>
- --wall_bottom = <default>
- --wall_side = <default>
- },
- material = minetest.digprop_constanttime(0.5),
- furnace_burntime = 10,
-})
-
-minetest.register_node(":chest", {
- tile_images = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
- "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
- inventory_image = minetest.inventorycube("default_chest_top.png", "default_chest_front.png", "default_chest_side.png"),
- paramtype = "facedir_simple",
- metadata_name = "chest",
- material = minetest.digprop_woodlike(1.0),
- furnace_burntime = 30,
-})
-
-minetest.register_node(":locked_chest", {
- tile_images = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
- "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
- inventory_image = minetest.inventorycube("default_chest_top.png", "default_chest_lock.png", "default_chest_side.png"),
- paramtype = "facedir_simple",
- metadata_name = "locked_chest",
- material = minetest.digprop_woodlike(1.0),
- furnace_burntime = 30,
-})
-
-minetest.register_node(":furnace", {
- tile_images = {"default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png",
- "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"},
- inventory_image = minetest.inventorycube("default_furnace_side.png", "default_furnace_front.png", "default_furnace_side.png"),
- paramtype = "facedir_simple",
- metadata_name = "furnace",
- material = minetest.digprop_stonelike(3.0),
-})
-
-minetest.register_node(":cobble", {
- tile_images = {"default_cobble.png"},
- inventory_image = minetest.inventorycube("default_cobble.png"),
- is_ground_content = true,
- cookresult_itemstring = 'node "default:stone" 1',
- material = minetest.digprop_stonelike(0.9),
-})
-
-minetest.register_node(":mossycobble", {
- tile_images = {"default_mossycobble.png"},
- inventory_image = minetest.inventorycube("default_mossycobble.png"),
- is_ground_content = true,
- material = minetest.digprop_stonelike(0.8),
-})
-
-minetest.register_node(":steelblock", {
- tile_images = {"default_steel_block.png"},
- inventory_image = minetest.inventorycube("default_steel_block.png"),
- is_ground_content = true,
- material = minetest.digprop_stonelike(5.0),
-})
-
-minetest.register_node(":nyancat", {
- tile_images = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
- "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
- inventory_image = "default_nc_front.png",
- paramtype = "facedir_simple",
- material = minetest.digprop_stonelike(3.0),
- furnace_burntime = 1,
-})
-
-minetest.register_node(":nyancat_rainbow", {
- tile_images = {"default_nc_rb.png"},
- inventory_image = "default_nc_rb.png",
- material = minetest.digprop_stonelike(3.0),
- furnace_burntime = 1,
-})
-
-minetest.register_node(":sapling", {
- drawtype = "plantlike",
- visual_scale = 1.0,
- tile_images = {"default_sapling.png"},
- inventory_image = "default_sapling.png",
- paramtype = "light",
- light_propagates = true,
- walkable = false,
- material = minetest.digprop_constanttime(0.0),
- furnace_burntime = 10,
-})
-
-minetest.register_node(":apple", {
- drawtype = "plantlike",
- visual_scale = 1.0,
- tile_images = {"default_apple.png"},
- inventory_image = "default_apple.png",
- paramtype = "light",
- light_propagates = true,
- sunlight_propagates = true,
- walkable = false,
- dug_item = 'craft "apple" 1',
- material = minetest.digprop_constanttime(0.0),
- furnace_burntime = 3,
-})
-
---
--- Crafting items
--- Compatibility to 0.3 and old 0.4
---
-
-minetest.register_craftitem(":Stick", {
- image = "default_stick.png",
- --furnace_burntime = ...,
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craftitem(":paper", {
- image = "default_paper.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craftitem(":book", {
- image = "default_book.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craftitem(":lump_of_coal", {
- image = "default_coal_lump.png",
- furnace_burntime = 40;
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craftitem(":lump_of_iron", {
- image = "default_iron_lump.png",
- cookresult_itemstring = 'craft "default:steel_ingot" 1',
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craftitem(":lump_of_clay", {
- image = "default_clay_lump.png",
- cookresult_itemstring = 'craft "default:clay_brick" 1',
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craftitem(":steel_ingot", {
- image = "default_steel_ingot.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craftitem(":clay_brick", {
- image = "default_clay_brick.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
minetest.register_craftitem(":rat", {
image = "rat.png",
cookresult_itemstring = 'craft "cooked_rat" 1',
@@ -1025,11 +89,6 @@ minetest.register_craftitem(":cooked_rat", {
on_use = minetest.craftitem_eat(6),
})
-minetest.register_craftitem(":scorched_stuff", {
- image = "default_scorched_stuff.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
minetest.register_craftitem(":firefly", {
image = "firefly.png",
on_drop = function(item, dropper, pos)
@@ -1038,37 +97,4 @@ minetest.register_craftitem(":firefly", {
end,
})
-minetest.register_craftitem(":apple", {
- image = "default_apple.png",
- on_place_on_ground = minetest.craftitem_place_item,
- on_use = minetest.craftitem_eat(4),
-})
-
-minetest.register_craftitem(":apple_iron", {
- image = "default_apple_iron.png",
- on_place_on_ground = minetest.craftitem_place_item,
- on_use = minetest.craftitem_eat(8),
-})
-
---
--- Falling stuff
---
-
-default.register_falling_node("sand", "default_sand.png")
-default.register_falling_node("gravel", "default_gravel.png")
-
---
--- Global callbacks
---
-
-function on_placenode(p, node)
- nodeupdate(p)
-end
-minetest.register_on_placenode(on_placenode)
-
-function on_dignode(p, node)
- nodeupdate(p)
-end
-minetest.register_on_dignode(on_dignode)
---]]
-- END
diff --git a/src/craftitemdef.cpp b/src/craftitemdef.cpp
index b8f9d1d79..622c5c65f 100644
--- a/src/craftitemdef.cpp
+++ b/src/craftitemdef.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include <sstream>
#include "utility.h"
+#include <map>
CraftItemDefinition::CraftItemDefinition():
imagename(""),
@@ -102,14 +103,14 @@ public:
virtual bool registerCraftItem(std::string itemname, const CraftItemDefinition &def)
{
infostream<<"registerCraftItem: registering CraftItem \""<<itemname<<"\""<<std::endl;
- /*core::map<std::string, CraftItemDefinition*>::Node *n;
- n = m_item_definitions.find(itemname);
- if(n != NULL){
- errorstream<<"registerCraftItem: registering item \""<<toolname
- <<"\" failed: name is already registered"<<std::endl;
- return false;
- }*/
m_item_definitions[itemname] = new CraftItemDefinition(def);
+
+ // Remove conflicting alias if it exists
+ bool alias_removed = (m_aliases.erase(itemname) != 0);
+ if(alias_removed)
+ infostream<<"cidef: erased alias "<<itemname
+ <<" because item was defined"<<std::endl;
+
return true;
}
virtual void clear()
@@ -120,6 +121,19 @@ public:
delete i.getNode()->getValue();
}
m_item_definitions.clear();
+ m_aliases.clear();
+ }
+ virtual void setAlias(const std::string &name,
+ const std::string &convert_to)
+ {
+ if(getCraftItemDefinition(name) != NULL){
+ infostream<<"nidef: not setting alias "<<name<<" -> "<<convert_to
+ <<": "<<name<<" is already defined"<<std::endl;
+ return;
+ }
+ infostream<<"nidef: setting alias "<<name<<" -> "<<convert_to
+ <<std::endl;
+ m_aliases[name] = convert_to;
}
virtual void serialize(std::ostream &os)
{
@@ -138,6 +152,14 @@ public:
def->serialize(tmp_os);
os<<serializeString(tmp_os.str());
}
+
+ writeU16(os, m_aliases.size());
+ for(std::map<std::string, std::string>::const_iterator
+ i = m_aliases.begin(); i != m_aliases.end(); i++)
+ {
+ os<<serializeString(i->first);
+ os<<serializeString(i->second);
+ }
}
virtual void deSerialize(std::istream &is)
{
@@ -158,10 +180,21 @@ public:
// Register
registerCraftItem(name, def);
}
+
+ u16 num_aliases = readU16(is);
+ if(!is.eof()){
+ for(u16 i=0; i<num_aliases; i++){
+ std::string name = deSerializeString(is);
+ std::string convert_to = deSerializeString(is);
+ m_aliases[name] = convert_to;
+ }
+ }
}
private:
// Key is name
core::map<std::string, CraftItemDefinition*> m_item_definitions;
+ // Aliases
+ std::map<std::string, std::string> m_aliases;
};
IWritableCraftItemDefManager* createCraftItemDefManager()
diff --git a/src/craftitemdef.h b/src/craftitemdef.h
index 2f1a5bf83..ee3d97aec 100644
--- a/src/craftitemdef.h
+++ b/src/craftitemdef.h
@@ -63,6 +63,11 @@ public:
virtual bool registerCraftItem(std::string itemname, const CraftItemDefinition &def)=0;
virtual void clear()=0;
+ // Set an alias so that entries named <name> will load as <convert_to>.
+ // Alias is not set if <name> has already been defined.
+ // Alias will be removed if <name> is defined at a later point of time.
+ virtual void setAlias(const std::string &name,
+ const std::string &convert_to)=0;
virtual void serialize(std::ostream &os)=0;
virtual void deSerialize(std::istream &is)=0;
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp
index ab9f89212..d7382b98b 100644
--- a/src/scriptapi.cpp
+++ b/src/scriptapi.cpp
@@ -1158,6 +1158,24 @@ static int l_alias_tool(lua_State *L)
return 0; /* number of results */
}
+// alias_craftitem(name, convert_to_name)
+static int l_alias_craftitem(lua_State *L)
+{
+ std::string name = luaL_checkstring(L, 1);
+ std::string convert_to = luaL_checkstring(L, 2);
+
+ // Get server from registry
+ lua_getfield(L, LUA_REGISTRYINDEX, "minetest_server");
+ Server *server = (Server*)lua_touserdata(L, -1);
+ // And get the writable CraftItem definition manager from the server
+ IWritableCraftItemDefManager *craftitemdef =
+ server->getWritableCraftItemDefManager();
+
+ craftitemdef->setAlias(name, convert_to);
+
+ return 0; /* number of results */
+}
+
// register_craft({output=item, recipe={{item00,item10},{item01,item11}})
static int l_register_craft(lua_State *L)
{
@@ -1312,6 +1330,7 @@ static const struct luaL_Reg minetest_f [] = {
{"register_abm", l_register_abm},
{"alias_node", l_alias_node},
{"alias_tool", l_alias_tool},
+ {"alias_craftitem", l_alias_craftitem},
{"setting_get", l_setting_get},
{"setting_getbool", l_setting_getbool},
{"chat_send_all", l_chat_send_all},