From 2f39cad09b763fc62dce3bf1dce2867ecc864955 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Mon, 14 Dec 2015 21:49:20 -0800 Subject: [PATCH 1/7] Create API for fence.register, and use it. 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 | 18 +++++++++++++ mods/default/crafting.lua | 8 ------ mods/default/functions.lua | 45 +++++++++++++++++++++++++++++++ mods/default/nodes.lua | 55 +++++++++++++++++++++++++++----------- 4 files changed, 102 insertions(+), 24 deletions(-) diff --git a/game_api.txt b/game_api.txt index 8ab44309..774bd1d1 100644 --- a/game_api.txt +++ b/game_api.txt @@ -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. diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua index b470d0d4..27f69035 100644 --- a/mods/default/crafting.lua +++ b/mods/default/crafting.lua @@ -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 = { diff --git a/mods/default/functions.lua b/mods/default/functions.lua index ef4ea55b..0137d912 100644 --- a/mods/default/functions.lua +++ b/mods/default/functions.lua @@ -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 -- diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index 62d0ec93..c79d74df 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -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", From 0ea23a50d3788e14bb99e5c215f70cb85a73c98f Mon Sep 17 00:00:00 2001 From: kilbith Date: Sat, 30 Jan 2016 12:09:43 +0100 Subject: [PATCH 2/7] Creative: move player datas in separate table (fixes #812) --- mods/creative/init.lua | 58 ++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/mods/creative/init.lua b/mods/creative/init.lua index 0659a202..496608b0 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -1,14 +1,16 @@ -- minetest/creative/init.lua -creative_inventory = {} +creative = {} +local player_inventory = {} -- Create detached creative inventory after loading all mods -creative_inventory.init_creative_inventory = function(player) +creative.init_creative_inventory = function(player) local player_name = player:get_player_name() - creative_inventory[player_name] = {} - creative_inventory[player_name].size = 0 - creative_inventory[player_name].filter = nil - creative_inventory[player_name].start_i = 1 + + player_inventory[player_name] = {} + player_inventory[player_name].size = 0 + player_inventory[player_name].filter = nil + player_inventory[player_name].start_i = 1 local inv = minetest.create_detached_inventory("creative_" .. player_name, { allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) @@ -41,8 +43,8 @@ creative_inventory.init_creative_inventory = function(player) end, }) - creative_inventory.update(player_name, nil, 2) - --print("creative inventory size: "..dump(creative_inventory[player_name].size)) + creative.update_creative_inventory(player_name, nil, 2) + --print("creative inventory size: "..dump(player_inventory[player_name].size)) end local function tab_category(tab_id) @@ -58,7 +60,7 @@ local function tab_category(tab_id) return id_category[tab_id] or id_category[2] end -function creative_inventory.update(player_name, filter, tab_id) +function creative.update_creative_inventory(player_name, filter, tab_id) local creative_list = {} local inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) @@ -73,7 +75,7 @@ function creative_inventory.update(player_name, filter, tab_id) table.sort(creative_list) inv:set_size("main", #creative_list) inv:set_list("main", creative_list) - creative_inventory[player_name].size = #creative_list + player_inventory[player_name].size = #creative_list end -- Create the trash field @@ -93,11 +95,11 @@ local trash = minetest.create_detached_inventory("creative_trash", { }) trash:set_size("main", 1) -creative_inventory.set_creative_formspec = function(player, start_i, pagenum, tab_id) +creative.set_creative_formspec = function(player, start_i, pagenum, tab_id) local player_name = player:get_player_name() - local filter = creative_inventory[player_name].filter or "" + local filter = player_inventory[player_name].filter or "" pagenum = math.floor(pagenum) - local pagemax = math.floor((creative_inventory[player_name].size - 1) / (3*8) + 1) + local pagemax = math.floor((player_inventory[player_name].size - 1) / (3*8) + 1) tab_id = tab_id or 2 player:set_inventory_formspec([[ @@ -126,7 +128,7 @@ creative_inventory.set_creative_formspec = function(player, start_i, pagenum, ta ) end -creative_inventory.set_crafting_formspec = function(player) +creative.set_crafting_formspec = function(player) player:set_inventory_formspec([[ size[8,8.6] list[current_player;craft;2,0.75;3,3;] @@ -150,8 +152,8 @@ minetest.register_on_joinplayer(function(player) if not minetest.setting_getbool("creative_mode") then return end - creative_inventory.init_creative_inventory(player) - creative_inventory.set_creative_formspec(player, 0, 1, 2) + creative.init_creative_inventory(player) + creative.set_creative_formspec(player, 0, 1, 2) end) minetest.register_on_player_receive_fields(function(player, formname, fields) @@ -164,28 +166,28 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local filter = formspec:match("filter;;([%w_:]+)") or "" local start_i = formspec:match("list%[detached:creative_".. player_name ..";.*;(%d+)%]") local tab_id = tonumber(formspec:match("tabheader%[.*;(%d+)%;.*%]")) - local inv_size = creative_inventory[player_name].size + local inv_size = player_inventory[player_name].size start_i = tonumber(start_i) or 0 if fields.quit then if tab_id == 1 then - creative_inventory.set_crafting_formspec(player) + creative.set_crafting_formspec(player) end elseif fields.tabs then if tonumber(fields.tabs) == 1 then - creative_inventory.set_crafting_formspec(player) + creative.set_crafting_formspec(player) else - creative_inventory.update(player_name, filter, tonumber(fields.tabs)) - creative_inventory.set_creative_formspec(player, 0, 1, tonumber(fields.tabs)) + creative.update_creative_inventory(player_name, filter, tonumber(fields.tabs)) + creative.set_creative_formspec(player, 0, 1, tonumber(fields.tabs)) end elseif fields.clear then - creative_inventory[player_name].filter = "" - creative_inventory.update(player_name, nil, tab_id) - creative_inventory.set_creative_formspec(player, 0, 1, tab_id) + player_inventory[player_name].filter = "" + creative.update_creative_inventory(player_name, nil, tab_id) + creative.set_creative_formspec(player, 0, 1, tab_id) elseif fields.search then - creative_inventory[player_name].filter = fields.filter:lower() - creative_inventory.update(player_name, fields.filter:lower(), tab_id) - creative_inventory.set_creative_formspec(player, 0, 1, tab_id) + player_inventory[player_name].filter = fields.filter:lower() + creative.update_creative_inventory(player_name, fields.filter:lower(), tab_id) + creative.set_creative_formspec(player, 0, 1, tab_id) else if fields.creative_prev then start_i = start_i - 3*8 @@ -202,7 +204,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end - creative_inventory.set_creative_formspec(player, start_i, start_i / (3*8) + 1, tab_id) + creative.set_creative_formspec(player, start_i, start_i / (3*8) + 1, tab_id) end end) From 0add474af2d58f0a01f5c483ea44e69d6580ecf9 Mon Sep 17 00:00:00 2001 From: Craig Davison Date: Mon, 1 Feb 2016 17:30:45 +0000 Subject: [PATCH 3/7] Follow naming conventions of textures and models in boats --- mods/boats/init.lua | 6 +++--- mods/boats/models/{boat.obj => boats_boat.obj} | 0 .../{boat_inventory.png => boats_inventory.png} | Bin .../textures/{boat_wield.png => boats_wield.png} | Bin 4 files changed, 3 insertions(+), 3 deletions(-) rename mods/boats/models/{boat.obj => boats_boat.obj} (100%) rename mods/boats/textures/{boat_inventory.png => boats_inventory.png} (100%) rename mods/boats/textures/{boat_wield.png => boats_wield.png} (100%) diff --git a/mods/boats/init.lua b/mods/boats/init.lua index a7e62e43..a85f6e1e 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -36,7 +36,7 @@ local boat = { physical = true, collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, visual = "mesh", - mesh = "boat.obj", + mesh = "boats_boat.obj", textures = {"default_wood.png"}, driver = nil, @@ -215,8 +215,8 @@ minetest.register_entity("boats:boat", boat) minetest.register_craftitem("boats:boat", { description = "Boat", - inventory_image = "boat_inventory.png", - wield_image = "boat_wield.png", + inventory_image = "boats_inventory.png", + wield_image = "boats_wield.png", wield_scale = {x = 2, y = 2, z = 1}, liquids_pointable = true, diff --git a/mods/boats/models/boat.obj b/mods/boats/models/boats_boat.obj similarity index 100% rename from mods/boats/models/boat.obj rename to mods/boats/models/boats_boat.obj diff --git a/mods/boats/textures/boat_inventory.png b/mods/boats/textures/boats_inventory.png similarity index 100% rename from mods/boats/textures/boat_inventory.png rename to mods/boats/textures/boats_inventory.png diff --git a/mods/boats/textures/boat_wield.png b/mods/boats/textures/boats_wield.png similarity index 100% rename from mods/boats/textures/boat_wield.png rename to mods/boats/textures/boats_wield.png From 09dbaf79725c160d97232357cfbcc558fad76de6 Mon Sep 17 00:00:00 2001 From: Craig Davison Date: Mon, 1 Feb 2016 17:34:12 +0000 Subject: [PATCH 4/7] Follow naming conventions of textures in creative --- mods/creative/init.lua | 4 ++-- .../{trash_icon.png => creative_trash_icon.png} | Bin 2 files changed, 2 insertions(+), 2 deletions(-) rename mods/creative/textures/{trash_icon.png => creative_trash_icon.png} (100%) diff --git a/mods/creative/init.lua b/mods/creative/init.lua index 496608b0..2bf6be15 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -104,7 +104,7 @@ creative.set_creative_formspec = function(player, start_i, pagenum, tab_id) player:set_inventory_formspec([[ size[8,8.6] - image[4.06,3.4;0.8,0.8;trash_icon.png] + image[4.06,3.4;0.8,0.8;creative_trash_icon.png] list[current_player;main;0,4.7;8,1;] list[current_player;main;0,5.85;8,3;8] list[detached:creative_trash;main;4,3.3;1,1;] @@ -136,7 +136,7 @@ creative.set_crafting_formspec = function(player) list[current_player;main;0,4.7;8,1;] list[current_player;main;0,5.85;8,3;8] list[detached:creative_trash;main;0,2.75;1,1;] - image[0.06,2.85;0.8,0.8;trash_icon.png] + image[0.06,2.85;0.8,0.8;creative_trash_icon.png] image[5,1.75;1,1;gui_furnace_arrow_bg.png^[transformR270] tabheader[0,0;tabs;Crafting,All,Nodes,Tools,Items;1;true;false] listring[current_player;main] diff --git a/mods/creative/textures/trash_icon.png b/mods/creative/textures/creative_trash_icon.png similarity index 100% rename from mods/creative/textures/trash_icon.png rename to mods/creative/textures/creative_trash_icon.png From c198d8c57eaa42def5576372d3e33db6c0f95998 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 3 Feb 2016 21:56:00 +0000 Subject: [PATCH 5/7] Default/mapgen: Confine Aspen to one half of deciduous forest --- mods/default/mapgen.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 1c30ad23..05d7b2b9 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -1185,8 +1185,8 @@ function default.register_decorations() place_on = {"default:dirt_with_grass"}, sidelen = 16, noise_params = { - offset = 0.01, - scale = -0.02, + offset = 0.0, + scale = -0.03, spread = {x = 250, y = 250, z = 250}, seed = 2, octaves = 3, @@ -1205,8 +1205,8 @@ function default.register_decorations() place_on = {"default:dirt_with_grass"}, sidelen = 16, noise_params = { - offset = 0.0005, - scale = -0.001, + offset = 0.0, + scale = -0.0015, spread = {x = 250, y = 250, z = 250}, seed = 2, octaves = 3, From 5994ac8dc5d1790b62bf2b113cd8e2849c2d745c Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 3 Feb 2016 22:43:37 +0000 Subject: [PATCH 6/7] Default/schematics: Re-add force-placed root node to mapgen trees Avoids trees or large cacti being placed multiple times at a single position, by changing the node at the heightmap y value --- mods/default/schematics/acacia_tree.mts | Bin 204 -> 204 bytes mods/default/schematics/apple_tree.mts | Bin 165 -> 163 bytes mods/default/schematics/aspen_tree.mts | Bin 177 -> 179 bytes mods/default/schematics/large_cactus.mts | Bin 92 -> 94 bytes mods/default/schematics/pine_tree.mts | Bin 177 -> 175 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/default/schematics/acacia_tree.mts b/mods/default/schematics/acacia_tree.mts index ec7d5f9a539030e474682d24f76fe1b466fa36e7..4732ade3d9df99c4f543ad168dc090e551cfdee5 100644 GIT binary patch delta 68 zcmV-K0K5Op0n7oARRerH3IZD4cUi-8(vxZ-eW0R89e2*4p3zHq@ R=$$6scs$2%umU58GKiF~HOK$} delta 109 zcmV-z0FwW+0kHv)OJ>myfFKBjevD7MPbVlfQMbxkFCF8!xdX-|ngW-~o8}Od`2M`J z$!#3Ih^13(ii6^$xKaJ&@s2OI761dX4H*Cc delta 35 qcma!xnP4Y(MOpZ30z=Bx+svHRD_S^=6q(o@#9A1-85!z5IdlQsV+xZ1 diff --git a/mods/default/schematics/pine_tree.mts b/mods/default/schematics/pine_tree.mts index 576a2dfb79acfa829190dd5358c04693b9acabc4..3a3fa7ad0e7f7c3bbd3282856d1985734b62d702 100644 GIT binary patch delta 39 xcmV+?0NDSr0j~j&k0AWVPSgVlpwj>K__$zG;3iS-794;&;W7%S004fuG!25t5y}7n delta 41 xcmZ3_xRG%}zfyzbf5VO{1;&tH`{m@tbGYuPoVwe@9H1WK#wg0bkiN>e7XU{W4wC=? From 9e54b379c8ba50228f3773a158cc5e4aa8b427a8 Mon Sep 17 00:00:00 2001 From: Muhammad Rifqi Priyo Susanto Date: Thu, 4 Feb 2016 17:24:14 +0700 Subject: [PATCH 7/7] Creative: Extend search function to descriptions --- mods/creative/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/creative/init.lua b/mods/creative/init.lua index 2bf6be15..bac75e01 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -67,7 +67,8 @@ function creative.update_creative_inventory(player_name, filter, tab_id) for name, def in pairs(tab_category(tab_id)) do if not (def.groups.not_in_creative_inventory == 1) and def.description and def.description ~= "" and - (not filter or def.name:find(filter, 1, true)) then + (not filter or def.name:find(filter, 1, true) or + def.description:lower():find(filter, 1, true)) then creative_list[#creative_list+1] = name end end