Create API for fence.register, and use it.
authorAuke Kok <sofar@foo-projects.org>
Tue, 15 Dec 2015 05:49:20 +0000 (21:49 -0800)
committerparamat <mat.gregory@virginmedia.com>
Wed, 3 Feb 2016 19:33:19 +0000 (19:33 +0000)
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.

Since this creates an API, insert it into the game_api.txt.

The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.

The default fence recipe is modified to be as follows:
  wood, stick, wood
  wood, stick, wood

This recipe yields 4 fence nodes.

This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:

  pine wood, stick, pine wood
  pine wood, stick, pine wood

This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).

Stick and fences nodes are named in a consistent way.

game_api.txt
mods/default/crafting.lua
mods/default/functions.lua
mods/default/nodes.lua

index 8ab443099c042aedc4e27b93caec0208562d3ed9..774bd1d18277e1e59d0bd13d7e589d6942302fe6 100644 (file)
@@ -110,6 +110,24 @@ doors.register_trapdoor(name, def)
                will be overwritten by the trapdoor registration function
 }
 
+Fence API
+---------
+Allows creation of new fences with "fencelike" drawtype.
+
+default.register_fence(name, item definition)
+ ^ Registers a new fence. Custom fields texture and material are required, as
+ ^ are name and description. The rest is optional. You can pass most normal
+ ^ nodedef fields here except drawtype. The fence group will always be added
+ ^ for this node.
+
+#fence definition
+       name = "default:fence_wood",
+       description = "Wooden Fence",
+       texture = "default_wood.png",
+       material = "default:wood",
+       groups = {choppy=2, oddly_breakable_by_hand = 2, flammable = 2},
+       sounds = default.node_sound_wood_defaults(),
+
 Farming API
 -----------
 The farming API allows you to easily register plants and hoes.
index b470d0d42731a0151f05d5f3b4975bac784f0a6c..27f69035e4d5cfb20bb3b990d4f1d4d97a739744 100644 (file)
@@ -42,14 +42,6 @@ minetest.register_craft({
        }
 })
 
-minetest.register_craft({
-       output = 'default:fence_wood 2',
-       recipe = {
-               {'group:stick', 'group:stick', 'group:stick'},
-               {'group:stick', 'group:stick', 'group:stick'},
-       }
-})
-
 minetest.register_craft({
        output = 'default:sign_wall',
        recipe = {
index ef4ea55be1752faecb9e51d46afc2c37bc4267c8..0137d9126737b08cf6306bc12449aa7e3d22d7fd 100644 (file)
@@ -209,6 +209,51 @@ function default.dig_up(pos, node, digger)
 end
 
 
+--
+-- Fence registration helper
+--
+function default.register_fence(name, def)
+       minetest.register_craft({
+               output = name .. " 4",
+               recipe = {
+                       { def.material, 'group:stick', def.material },
+                       { def.material, 'group:stick', def.material },
+               }
+       })
+
+       local fence_texture = "default_fence_overlay.png^" .. def.texture ..
+                       "^default_fence_overlay.png^[makealpha:255,126,126"
+       -- Allow almost everything to be overridden
+       local default_fields = {
+               paramtype = "light",
+               drawtype = "fencelike",
+               inventory_image = fence_texture,
+               wield_image = fence_texture,
+               tiles = { def.texture },
+               sunlight_propagates = true,
+               is_ground_content = false,
+               selection_box = {
+                       type = "fixed",
+                       fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
+               },
+               groups = {},
+       }
+       for k, v in pairs(default_fields) do
+               if not def[k] then
+                       def[k] = v
+               end
+       end
+
+       -- Always add to the fence group, even if no group provided
+       def.groups.fence = 1
+
+       def.texture = nil
+       def.material = nil
+
+       minetest.register_node(name, def)
+end
+
+
 --
 -- Leafdecay
 --
index 62d0ec93ddb18a1c715d5dee589afe62c6ea780c..c79d74df69297fa1ba5011b32d2dcedfb9db2877 100644 (file)
@@ -151,6 +151,10 @@ default:sign_wall
 default:ladder
 
 default:fence_wood
+default:fence_acacia_wood
+default:fence_junglewood
+default:fence_pine_wood
+default:fence_aspen_wood
 
 default:glass
 default:obsidian_glass
@@ -1674,26 +1678,45 @@ minetest.register_node("default:ladder", {
        sounds = default.node_sound_wood_defaults(),
 })
 
-
-local fence_texture =
-       "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126"
-minetest.register_node("default:fence_wood", {
+default.register_fence("default:fence_wood", {
        description = "Wooden Fence",
-       drawtype = "fencelike",
-       tiles = {"default_wood.png"},
-       inventory_image = fence_texture,
-       wield_image = fence_texture,
-       paramtype = "light",
-       sunlight_propagates = true,
-       is_ground_content = false,
-       selection_box = {
-               type = "fixed",
-               fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
-       },
+       texture = "default_wood.png",
+       material = "default:wood",
        groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
-       sounds = default.node_sound_wood_defaults(),
+       sounds = default.node_sound_wood_defaults()
+})
+
+default.register_fence("default:fence_acacia_wood", {
+       description = "Acacia Fence",
+       texture = "default_acacia_wood.png",
+       material = "default:acacia_wood",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
+       sounds = default.node_sound_wood_defaults()
+})
+
+default.register_fence("default:fence_junglewood", {
+       description = "Junglewood Fence",
+       texture = "default_junglewood.png",
+       material = "default:junglewood",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
+       sounds = default.node_sound_wood_defaults()
 })
 
+default.register_fence("default:fence_pine_wood", {
+       description = "Pine Fence",
+       texture = "default_pine_wood.png",
+       material = "default:pine_wood",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
+       sounds = default.node_sound_wood_defaults()
+})
+
+default.register_fence("default:fence_aspen_wood", {
+       description = "Aspen Fence",
+       texture = "default_aspen_wood.png",
+       material = "default:aspen_wood",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
+       sounds = default.node_sound_wood_defaults()
+})
 
 minetest.register_node("default:glass", {
        description = "Glass",