From ec25fd83415d0ecb49f41295af3dc30f14850b2f Mon Sep 17 00:00:00 2001 From: Vanessa Dannenberg Date: Mon, 17 Dec 2018 02:20:30 -0500 Subject: update biome_lib, digilines, hotbar, mesecons, pipeworks, ropes, technic, unified inventory, unified dyes, vines, and worldedit --- ropes/bridge.lua | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 ropes/bridge.lua (limited to 'ropes/bridge.lua') diff --git a/ropes/bridge.lua b/ropes/bridge.lua new file mode 100644 index 0000000..31db7e6 --- /dev/null +++ b/ropes/bridge.lua @@ -0,0 +1,88 @@ +local modpath = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(modpath.."/intllib.lua") + +if ropes.bridges_enabled then + +local bridge_on_place = function(itemstack, placer, pointed_thing) + -- Shall place item and return the leftover itemstack. + -- The placer may be any ObjectRef or nil. + -- default: minetest.item_place + if placer == nil then + return minetest.item_place(itemstack, placer, pointed_thing) + end + + local above = pointed_thing.above + local under = pointed_thing.under + + if above.x == under.x and above.z == under.z and above.y > under.y then + -- we're aimed downward at a buildable node from above. + -- determine the direction the placer lies relative to this node. + local new_under = vector.new(under) + local placer_pos = placer:get_pos() + local diff_x = placer_pos.x - under.x + local diff_z = placer_pos.z - under.z + if math.abs(diff_x) > math.abs(diff_z) then + -- placer is displaced along the X axis relative to the target + if diff_x > 0 then + new_under.x = under.x - 1 + else + new_under.x = under.x + 1 + end + else + -- placer is displaced along the Z axis relative to the target + if diff_z > 0 then + new_under.z = under.z - 1 + else + new_under.z = under.z + 1 + end + end + if minetest.registered_nodes[minetest.get_node(new_under).name].buildable_to then + local new_pointed_thing = {type="node", under=new_under, above={x=new_under.x, y=new_under.y+1, z=new_under.z}} + return minetest.item_place(itemstack, placer, new_pointed_thing) + end + end + + return minetest.item_place(itemstack, placer, pointed_thing) +end + +minetest.register_node("ropes:wood_bridge", { + description = S("Wooden Bridge"), + _doc_items_longdesc = ropes.doc.wooden_bridge_longdesc, + _doc_items_usagehelp = ropes.doc.wooden_bridge_usagehelp, + tiles = { + "default_wood.png", "default_wood.png", + "default_wood.png^[transformR270", "default_wood.png^[transformR90", + "default_wood.png^[transformR270", "default_wood.png^[transformR90", + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {choppy = 2, flammable = 2, oddly_breakable_by_hand = 1, flow_through = 1, fence = 1, wall = 1}, + sounds = default.node_sound_wood_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.5, 0.375, -0.5, 0.5, 0.5, 0.5}, -- Platform + {-0.375, -0.5, -0.5, 0.375, -0.375, -0.4375}, -- x beam4 + {-0.375, -0.5, 0.4375, 0.375, -0.375, 0.5}, -- x beam3 + {0.375, -0.5, -0.4375, 0.5, -0.375, 0.4375}, -- z beam2 + {-0.5, -0.5, -0.4375, -0.375, -0.375, 0.4375}, -- z beam1 + {0.375, -0.5, -0.5, 0.5, 0.375, -0.4375}, -- upright4 + {0.375, -0.5, 0.4375, 0.5, 0.375, 0.5}, -- upright3 + {-0.5, -0.5, -0.5, -0.375, 0.375, -0.4375}, -- upright2 + {-0.5, -0.5, 0.4375, -0.375, 0.375, 0.5}, -- upright1 + } + }, + on_place = bridge_on_place, +}) + +minetest.register_craft({ + output = "ropes:wood_bridge 5", + recipe = { + {"group:stick", "stairs:slab_wood", "group:stick"}, + {"group:stick", "", "group:stick"}, + {"group:stick", "group:stick", "group:stick"}, + } +}) + +end -- cgit v1.2.3