Create API for registration of fence gate.
authorRui914 <rui914t@gmail.com>
Fri, 18 Mar 2016 07:33:14 +0000 (16:33 +0900)
committerparamat <mat.gregory@virginmedia.com>
Mon, 21 Mar 2016 06:17:21 +0000 (06:17 +0000)
game_api.txt
mods/doors/init.lua

index a32f8d5c02fbdaf92d861ac2824428d8858606e0..d3330e5f06beb5e89a947d46316a9c09866414fa 100644 (file)
@@ -78,6 +78,12 @@ The doors mod allows modders to register custom doors and trapdoors.
  * `name` Name for trapdoor
  * `def`  See [#Trapdoor definition]
 
+`doors.register_fencegate(name, def)`
+
+ * Registers new fence gate
+ * `name` Name for fence gate
+ * `def`  See [#Fence gate definition]
+
 `doors.get(pos)`
  
  * `pos` A position as a table, e.g `{x = 1, y = 1, z = 1}`
@@ -119,6 +125,14 @@ The doors mod allows modders to register custom doors and trapdoors.
        sound_close = sound play for close door, -- optional
        protected = false, -- If true, only placer can open the door (locked for others)
 
+###Fence gate definition
+
+       description = "Wooden Fence Gate",
+       texture = "default_wood.png",
+       material = "default:wood",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
+       sounds = default.node_sound_wood_defaults(), -- optional
+
 Fence API
 ---------
 Allows creation of new fences with "fencelike" drawtype.
index dd7ab726dbdb83fe62a55834632159e8f85b5a4d..6e624e9ed6923f0e34afd55138b82b6b4c502a1c 100644 (file)
@@ -658,59 +658,101 @@ minetest.register_craft({
 
 ----fence gate----
 
-local fence = {
-       description = "Fence Gate",
-       drawtype = "mesh",
-       tiles = {"default_wood.png"},
-       paramtype = "light",
-       paramtype2 = "facedir",
-       sunlight_propagates = true,
-       is_ground_content = false,
-       drop = "doors:gate_closed",
-       connect_sides = { "left", "right" },
-       groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2,
-               flammable = 2, fence = 1},
-       on_rightclick = function(pos, clicker)
-               local node = minetest.get_node(pos)
-               local def = minetest.registered_nodes[node.name]
-               minetest.swap_node(pos, {name = def.gate, param2 = node.param2})
-               minetest.sound_play(def.sound, {pos = pos, gain = 0.3,
-                       max_hear_distance = 8})
-       end,
-       selection_box = {
+function doors.register_fencegate(name, def)
+       local fence = {
+               description = def.description,
+               drawtype = "mesh",
+               tiles = { def.texture },
+               paramtype = "light",
+               paramtype2 = "facedir",
+               sunlight_propagates = true,
+               is_ground_content = false,
+               drop = name .. "_closed",
+               connect_sides = { "left", "right" },
+               groups = def.groups,
+               sounds = def.sounds,
+               on_rightclick = function(pos, clicker)
+                       local node = minetest.get_node(pos)
+                       local node_def = minetest.registered_nodes[node.name]
+                       minetest.swap_node(pos, {name = node_def.gate, param2 = node.param2})
+                       minetest.sound_play(node_def.sound, {pos = pos, gain = 0.3,
+                               max_hear_distance = 8})
+               end,
+               selection_box = {
+                       type = "fixed",
+                       fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4},
+               },
+       }
+
+       if not fence.sounds then
+               fence.sounds = default.node_sound_wood_defaults()
+       end
+
+       fence.groups.fence = 1
+
+       local fence_closed = table.copy(fence)
+       fence_closed.mesh = "doors_fencegate_closed.obj"
+       fence_closed.gate = name .. "_open"
+       fence_closed.sound = "doors_fencegate_open"
+       fence_closed.collision_box = {
                type = "fixed",
                fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4},
-       },
-}
+       }
 
-local fence_closed = table.copy(fence)
-fence_closed.mesh = "doors_fencegate_closed.obj"
-fence_closed.gate = "doors:gate_open"
-fence_closed.sound = "doors_fencegate_open"
-fence_closed.collision_box = {
-       type = "fixed",
-       fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4},
-}
+       local fence_open = table.copy(fence)
+       fence_open.mesh = "doors_fencegate_open.obj"
+       fence_open.gate = name .. "_closed"
+       fence_open.sound = "doors_fencegate_close"
+       fence_open.groups.not_in_creative_inventory = 1
+       fence_open.collision_box = {
+               type = "fixed",
+               fixed = {{-1/2, -1/2, -1/4, -3/8, 1/2, 1/4},
+                       {-5/8, -3/8, -14/16, -3/8, 3/8, 0}},
+       }
 
-local fence_open = table.copy(fence)
-fence_open.mesh = "doors_fencegate_open.obj"
-fence_open.gate = "doors:gate_closed"
-fence_open.sound = "doors_fencegate_close"
-fence_open.groups.not_in_creative_inventory = 1
-fence_open.collision_box = {
-       type = "fixed",
-       fixed = {{-1/2, -1/2, -1/4, -3/8, 1/2, 1/4},
-               {-5/8, -3/8, -14/16, -3/8, 3/8, 0}},
-}
+       minetest.register_node(":" .. name .. "_closed", fence_closed)
+       minetest.register_node(":" .. name .. "_open", fence_open)
 
-minetest.register_node("doors:gate_closed", fence_closed)
-minetest.register_node("doors:gate_open", fence_open)
+       minetest.register_craft({
+               output = name .. "_closed",
+               recipe = {
+                       {"default:stick", def.material, "default:stick"},
+                       {"default:stick", def.material, "default:stick"}
+               }
+       })
+end
 
-minetest.register_craft({
-       output = "doors:gate_closed",
-       recipe = {
-               {"default:stick", "group:wood", "default:stick"},
-               {"default:stick", "group:wood", "default:stick"},
-       },
+doors.register_fencegate("doors:gate_wood", {
+       description = "Wooden Fence Gate",
+       texture = "default_wood.png",
+       material = "default:wood",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
 })
 
+doors.register_fencegate("doors:gate_acacia_wood", {
+       description = "Acacia Fence Gate",
+       texture = "default_acacia_wood.png",
+       material = "default:acacia_wood",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
+})
+
+doors.register_fencegate("doors:gate_junglewood", {
+       description = "Junglewood Fence Gate",
+       texture = "default_junglewood.png",
+       material = "default:junglewood",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
+})
+
+doors.register_fencegate("doors:gate_pine_wood", {
+       description = "Pine Fence Gate",
+       texture = "default_pine_wood.png",
+       material = "default:pine_wood",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
+})
+
+doors.register_fencegate("doors:gate_aspen_wood", {
+       description = "Aspen Fence Gate",
+       texture = "default_aspen_wood.png",
+       material = "default:aspen_wood",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
+})