From dd631512e3eae1447891d86bc58318f74858dfda Mon Sep 17 00:00:00 2001 From: Mirko K Date: Sat, 3 Dec 2011 20:06:02 +0100 Subject: [PATCH] first commit --- README | 12 +++++ init.lua | 125 ++++++++++++++++++++++++++++++++++++++++++++++ textures/rope.png | Bin 0 -> 498 bytes 3 files changed, 137 insertions(+) create mode 100644 README create mode 100644 init.lua create mode 100644 textures/rope.png diff --git a/README b/README new file mode 100644 index 0000000..b1c88b6 --- /dev/null +++ b/README @@ -0,0 +1,12 @@ + Rope mod for Minetest. By Mirko K. + + Three tree block in a vertical row = 9 meter of rope. + Placement automatically adds rope downwards until it runs out or some + non-air block is in the way. + Push (single left-click) cuts the rope at that position. Digging removes + the whole rope. + + Licence: + Code: GPL + Texture: CC-BY-SA + diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..7ca90b9 --- /dev/null +++ b/init.lua @@ -0,0 +1,125 @@ +-- Rope mod. By Mirko K. +-- +-- Three tree block in a vertical row = 9 meter of rope. +-- Placement automatically adds rope downwards until it runs out or some +-- non-air block is in the way. +-- Push (single left-click) cuts the rope at that position. Digging removes +-- the whole rope. +-- +-- Licence: +-- Code: GPL +-- Texture: CC-BY-SA + +minetest.register_on_placenode(function(pos, newnode, placer) + if newnode.name == "ropes:rope" then + place_rope(pos, newnode, placer) + end + end +) + +minetest.register_on_dignode(function(pos, oldnode, digger) + if oldnode.name == "ropes:rope" then + remove_rope(pos, oldnode, digger, true) + end + end +) + +minetest.register_on_punchnode(function(pos, oldnode, digger) + if oldnode.name == "ropes:rope" then + remove_rope(pos, oldnode, digger, false) + end + end +) + +-- helper function +inventory_find_item = function (object, name, item) + local inventory = object:inventory_get_list(name) + for key, value in pairs(inventory) do + if value == item then + return key, value + end + end + return nil, nil +end + +place_rope = function (pos, newnode, placer) + local inventory = placer:inventory_get_list("main") + local witem = placer:get_wielded_itemstring() + local windex, witem = inventory_find_item(placer, "main", witem) + local param2 = newnode.param2 + while witem ~= nil and witem:len() ~= 0 do + pos.y = pos.y - 1 + if minetest.env:get_node(pos).name ~= "air" then + break + end + if minetest.env:add_node(pos, {name="ropes:rope", param2=param2}) ~= true + then + break + end + witem = stackstring_take_item(witem) + end + if windex == nil then + else + inventory[windex] = witem + placer:inventory_set_list("main", inventory) + end +end + +remove_rope = function(pos, oldnode, digger, completely) + local num = 0 + local below = pos + local above = pos + if completely == true then + above.y = above.y + 1 + while minetest.env:get_node(above).name == "ropes:rope" do + minetest.env:remove_node(above) + above.y = above.y + 1 + num = num + 1 + end + end + below.y = below.y - 1 + while minetest.env:get_node(below).name == "ropes:rope" do + minetest.env:remove_node(below) + below.y = below.y -1 + num = num + 1 + end + if num ~= 0 then + digger:add_to_inventory_later('node "ropes:rope" ' .. num) + end + return true +end + +minetest.register_craft({ + output = 'node "ropes:rope" 9', + recipe = { + {'', 'node "tree"', ''}, + {'', 'node "tree"', ''}, + {'', 'node "tree"', ''}, + } +}) + +minetest.register_node("ropes:rope", { + drawtype = "signlike", + tile_images = {"rope.png"}, + inventory_image = "rope.png", + light_propagates = true, + paramtype = "light", + is_ground_content = true, + wall_mounted = true, + walkable = false, + climbable = true, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + furnace_burntime = 5, + material = { + diggablity = "normal", + cuttability = 1.5, + }, +}) + + + diff --git a/textures/rope.png b/textures/rope.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ba5df9b00462921b0770bb509c66c1b7d554ec GIT binary patch literal 498 zcmVPx#24YJ`L;!aHV*oj)C3?{S000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipt- z5)}%os(iNq000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0003^Nkl79p{2NU$ z5CQ}e*UFC1fh~96ynXNOEJ0Ad=YpBp?6gLzuI(Hh-<0B{vgX;z9yC)20HohDceN-) zdqASW;B^1CNb}t^jJZg21%PpWb(dCB;Cn6y&!5{M$ZIWAAtKm4C#h@!zyp|@(ObaL zdjPZ3;y-Iu3AUK|Qfuh2x^1Ys24*g`tB5kN`_3VNgJd#`!)V^TxW2D`g~4zHSy3>3 z86%4llO$o*Vg+B1uK)mJ!wmKHMtuSRAR;8wc%5WPh!IZgo&&4f1`++tCsBO`@i@dX z%K?Imm!El6PQDB)Za!HlxpO+Db om`-Ql6|3fEi|xJx-*ZcGzr~z){>dn?T>t<807*qoM6N<$f*tY1&Hw-a literal 0 HcmV?d00001