From 6267f26027350f0b80d091044ddfc1177aa6fa47 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Mon, 4 Jan 2016 17:56:20 -0800 Subject: [PATCH 01/17] Aspen trees. Adds a birch-like tree to the default_game. Aspen was chosen on purpose instead of birch, as several birch tree mods already exist and choosing a different name avoids any conflicts. Schematics were made for both normal and sapling version, assuring saplings will not be able to grief. The shape of the Aspen is "fanning out at the top" and provides an easy tree to walk under, but still a somewhat thick cover. The Aspen trunk is 4 to 6 blocks tall, with up to three layers of leaves on top, making it slightly taller than an Apple tree, but shorter than a Pine tree, which provides a good blend. Textures were painted from scratch, except tree_top and _wood variants, which are color modified versions of the pine_wood variants. Appropriate licenses have been chosen for the new textures. The leaf texture is light enough to contrast other trees, but dark enough to offset against our light default grass color. The leaves are drawn in the typical minetest default fashion with plenty of transparancy, but enough definition to suggest that you're seeing something that looks like leaves. The placement of leaves in the schematic also suggests the top of the tree is sparse and you can see the sky through the leaves. Sapling texture is both traditional and different, with lush green leaves and a well-defined stem, but slightly stick-like and skinny, as these plants tend to grow up first, then out. Add fallen Aspen logs. We make these logs a minimum of 2 blocks long, and up to 3. This allows us to make these logs a place where both red and brown mushrooms can be found, to these may be attractive to players. However, the spawn rate for these has been reduced a lot compared to the other logs, to account for the scarcity of Aspen. Add stairs, slabs for these wood types as well. Mapgen will place these trees in deciduous forests only, but in a way that the biome is a range between entirely Apple trees, and mostly entirely Aspen trees, with a bias to Apple trees. To make fallen logs somewhat correlated with trees, we modify the planting of Apple trees and logs to use perlin noise and not fill ratio, otherwise you'd always end up with Apple logs in Aspen tree areas, which would be suspicious. There still is a bit of a mix. --- mods/default/README.txt | 5 ++ mods/default/crafting.lua | 7 ++ mods/default/mapgen.lua | 65 +++++++++++++++++- mods/default/nodes.lua | 63 +++++++++++++++++ mods/default/schematics/aspen_tree.mts | Bin 0 -> 177 bytes .../schematics/aspen_tree_from_sapling.mts | Bin 0 -> 171 bytes .../default/textures/default_aspen_leaves.png | Bin 0 -> 761 bytes .../textures/default_aspen_sapling.png | Bin 0 -> 320 bytes mods/default/textures/default_aspen_tree.png | Bin 0 -> 695 bytes .../textures/default_aspen_tree_top.png | Bin 0 -> 656 bytes mods/default/textures/default_aspen_wood.png | Bin 0 -> 373 bytes mods/default/trees.lua | 15 +++- mods/stairs/init.lua | 7 ++ 13 files changed, 159 insertions(+), 3 deletions(-) create mode 100644 mods/default/schematics/aspen_tree.mts create mode 100644 mods/default/schematics/aspen_tree_from_sapling.mts create mode 100644 mods/default/textures/default_aspen_leaves.png create mode 100644 mods/default/textures/default_aspen_sapling.png create mode 100644 mods/default/textures/default_aspen_tree.png create mode 100644 mods/default/textures/default_aspen_tree_top.png create mode 100644 mods/default/textures/default_aspen_wood.png diff --git a/mods/default/README.txt b/mods/default/README.txt index 5b07a36c..c190cee0 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -150,6 +150,11 @@ BlockMen (CC BY-SA 3.0): sofar (CC BY-SA 3.0): default_book_written.png, based on default_book.png + default_aspen_sapling + default_aspen_leaves + default_aspen_tree + default_aspen_tree_top, derived from default_pine_tree_top (by paramat) + default_aspen_wood, derived from default_pine_wood (by paramat) Neuromancer (CC BY-SA 2.0): default_cobble.png, based on texture by Brane praefect diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua index fa8df2d6..b470d0d4 100644 --- a/mods/default/crafting.lua +++ b/mods/default/crafting.lua @@ -28,6 +28,13 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = 'default:aspen_wood 4', + recipe = { + {'default:aspen_tree'}, + } +}) + minetest.register_craft({ output = 'default:stick 4', recipe = { diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 0411bcaa..c92514cf 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -991,8 +991,15 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "schematic", place_on = {"default:dirt_with_grass"}, - sidelen = 80, - fill_ratio = 0.0015, + sidelen = 16, + noise_params = { + offset = 0.002, + scale = 0.001, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, @@ -1154,6 +1161,60 @@ function default.register_decorations() rotation = "random", }) + -- Aspen tree and log + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.01, + scale = -0.02, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.0005, + scale = -0.001, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_min = 1, + y_max = 31000, + schematic = { + size = { x = 3, y = 3, z = 1}, + data = { + { name = "air", prob = 0 }, + { name = "air", prob = 0 }, + { name = "air", prob = 0 }, + { name = "default:aspen_tree", param2 = 12 }, + { name = "default:aspen_tree", param2 = 12 }, + { name = "default:aspen_tree", param2 = 12, prob = 127 }, + { name = "flowers:mushroom_red", prob = 63 }, + { name = "flowers:mushroom_brown", prob = 63 }, + { name = "air", prob = 0 }, + }, + }, + flags = "place_center_x", + rotation = "random", + }) -- Large cactus minetest.register_decoration({ diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index aecbd357..62d0ec93 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -78,6 +78,10 @@ default:acacia_wood default:acacia_leaves default:acacia_sapling +default:aspen_tree +default:aspen_wood +default:aspen_leaves +default:aspen_sapling Ores ---- (1. In stone 2. Block) @@ -686,6 +690,65 @@ minetest.register_node("default:acacia_sapling", { sounds = default.node_sound_leaves_defaults(), }) +minetest.register_node("default:aspen_tree", { + description = "Aspen Tree", + tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png", + "default_aspen_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:aspen_wood", { + description = "Aspen Wood Planks", + tiles = {"default_aspen_wood.png"}, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:aspen_leaves", { + description = "Aspen Leaves", + drawtype = "allfaces_optional", + visual_scale = 1.3, + tiles = {"default_aspen_leaves.png"}, + waving = 1, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:aspen_sapling"}, rarity = 20}, + {items = {"default:aspen_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:aspen_sapling", { + description = "Aspen Tree Sapling", + drawtype = "plantlike", + visual_scale = 1.0, + tiles = {"default_aspen_sapling.png"}, + inventory_image = "default_aspen_sapling.png", + wield_image = "default_aspen_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), +}) -- -- Ores -- diff --git a/mods/default/schematics/aspen_tree.mts b/mods/default/schematics/aspen_tree.mts new file mode 100644 index 0000000000000000000000000000000000000000..fe54f6777c8848ea3578c2f7fbf6d6904339fdf1 GIT binary patch literal 177 zcmeYb3HD`RVPIw8VqmSWkFN&;Ai==Qz?_&_#2}KAnwD6aQ(~1^T#%X8EBt6PWVj-=57U zb7l5*EDg@-YJRk2N8sNlAN%y*?daP6k9i(L=R^(;qi>$MZY`$M_0FnfIi zd+$CsEah7EK%~oQ@voB~`}E)K=-U3TS<^F6Ih4!v+slhS{MqYbKR-L2Khg53*JA5= NcRot%+;7!q2LKWxO56Yd literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_aspen_leaves.png b/mods/default/textures/default_aspen_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..17a708d1783819a4acdd09e730a2c1a9698dd686 GIT binary patch literal 761 zcmV6QJkpf{zalHKgb?9R@-GslZHOI6V4>U?p|;dvebsJ(qyjavlqxpd~b z0GwQTPNUf2%Gw|Ym|2|EqF*3MGrnHGBLEISE*@L;9kMK9e&q!P_H3(A?7M zbTM9mm)<<00K@Ia7bdg-xW){(A3ynoW_eDv60-5h&+_WKlbTqUb`((!OJpj@?DErU zGoM~uCrLAWuYmD=zB+eXW|xm@GwNZJoJ#0Xt?Z>8HOaIZj~Vms)2i<*C(a?Q~&d?Yba>D;ZZW{Q9>;0#I9;)V|G$0>mym43y zqHI3&-9NoBY`pRpS$UrGT% ryHf5ta(4NMzWmlxdTjon@;~?!-@`}`k9r=l00000NkvXXu0mjfvp{<5 literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_aspen_sapling.png b/mods/default/textures/default_aspen_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d9136a0b5c0397e3feb54f1abce3e44e75ec47 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU}X1naSX9Iot$uh$t(Qk|8xZ* zgGAw)PhXXtzayQ5*pPOs&FM9vUqwQFRQ?(1cez>s0^ MboFyt=akR{08U_&&Hw-a literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_aspen_tree.png b/mods/default/textures/default_aspen_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..933b9cad5eee86718a3c916251725c6324ac5824 GIT binary patch literal 695 zcmV;o0!aOdP)Pr9mrKsMQmSp+JkJM%K~+^+>o|^sAXu$d2q9}NA*A2$7e(Q4&NrJ4gs?2j z@9*#D=jWzr;y89)*BH|@jpupRS^$8Q5&!@nA0MMA!WbK4T-U9t%JaOYX^b(9F+xb! zby7;-_wzg_gdoP)Y&O$c0|2($ZQHh-b89Wexa&Hl6vh|;ptYuy{`~wPYwi2{`_G~Jiy6hQkLb($w{x*n@*?K*VkbfYOM(&JF2_8 zyTxLWrs?VFX_6%H_VyMbG@VY5kB@gG2%#iNthGl+N5+_4m43f(jJdhFfuEnBd7cl4 z!>Xzr$H}rR2m%PGZ zthHenc3r2n?z)arikqfs+qNvrD2jF|eBTEED5ZSguj{(1DhMGVq;1>PYUM;xB!s{i zd!FaIE&w3UbEQ-mhFO*sMS&3N^?ICh0KjN8LKhbo|Ni}R9H*{p&+{OJ>-GBJ;9x$V zzrMaoDa*2?lmkH=%zb@%r6>bg$T z^y%pdo}HaB#s-4{A>{J%^8EaKI2?{fBT8wOWe~!us)P_PFE5M5;`jF#-rwJ2j1LbF zqbMST2q7SZl+xV~=bR8y*EM4dLO7q#;c~f@QfjSt_MGz|2$WLB7)mLn)N!2cb{j=aKk133K*L}%P*&?qHS0i}wP8c;MhU(cV{%ZK0U z+n-ekp}YLv{qSv^U)IM_cL$8LZ&y)C(o&$5x?=d;bkc6UFh*HxuR;heVF~?r-&5EC zK)=eWGDT?t0szA0UyWatQr2Zr^E@{Pn+u2aT5pYezP7^+I~OAfluWVidH~3I2LaYv zrL_*hmsET?G%iQa2Bki|5g@W(;=U>h*eHR85(y%lrb!A>m@9aZO;!@K56eG)r};|G zF%b&j5HkUaB7{)GFx1#*XwZHGB?IQ@){@Kh(`dS?qyzwzqRs_nHLt6x>w24?TbUJY z0$OrOexdcDZV`!@kvT_Z%%%K)z;PUd3#BlpltL<;*l%%OKYf^hBPxVU*(KD9GdE46 z&gb(o)c}PkXqM)tV?ZU~WElXo7QyXp-$Je=hH0AAIF2efQ@zD=`~3Kqs^z*LS_}e9 zVUhK*!nHY{fXU6*{J93HJO9@VOr!-%;iaw6-g|?^T(R;6!Wl>7CZ5ygzjJ1kr+qMAE qG>x(L@$qpOhW+X3csvpjGyeza5{5fc{>$(H0000KP)a(Q6^WAQ`lC-7wi&FU}meApBRSr#+|tcUpRR zegexEy<{we#DTo8%EBFHq*>2NL?8gLX4|9#g0DFw5dr(9)K?<_nKgPi0sU#;)Yc9F zMT!GKkpiHvW*`Y)#BmH?@LqF6r1%U6GSseraZ`MKa%#8RLG%eA3UM##AOVnelV-*+ z17OZG%pM+bPTp5#z78P(khxv5#g^}=C{k=f0#J$OY+c3aYM}k z{PomC1A?zV-rpE6vqlc|n(iaz`R+U!Y-V0Xjcf>2c}O!!E2JRi&LC TFEZ)J00000NkvXXu0mjfULl|; literal 0 HcmV?d00001 diff --git a/mods/default/trees.lua b/mods/default/trees.lua index 51a7a2e6..48718e5d 100644 --- a/mods/default/trees.lua +++ b/mods/default/trees.lua @@ -28,7 +28,8 @@ end minetest.register_abm({ nodenames = {"default:sapling", "default:junglesapling", - "default:pine_sapling", "default:acacia_sapling"}, + "default:pine_sapling", "default:acacia_sapling", + "default:aspen_sapling"}, interval = 10, chance = 50, action = function(pos, node) @@ -65,6 +66,10 @@ minetest.register_abm({ minetest.log("action", "An acacia sapling grows into a tree at ".. minetest.pos_to_string(pos)) default.grow_new_acacia_tree(pos) + elseif node.name == "default:aspen_sapling" then + minetest.log("action", "An aspen sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + default.grow_new_aspen_tree(pos) end end }) @@ -395,3 +400,11 @@ function default.grow_new_acacia_tree(pos) minetest.place_schematic({x = pos.x - 4, y = pos.y - 1, z = pos.z - 4}, path, random, nil, false) end + +-- New aspen tree + +function default.grow_new_aspen_tree(pos) + local path = minetest.get_modpath("default") .. "/schematics/aspen_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, 0, nil, false) +end diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua index b3e09937..c3ce160e 100644 --- a/mods/stairs/init.lua +++ b/mods/stairs/init.lua @@ -287,6 +287,13 @@ stairs.register_stair_and_slab("acacia_wood", "default:acacia_wood", "Acacia Wood Slab", default.node_sound_wood_defaults()) +stairs.register_stair_and_slab("aspen_wood", "default:aspen_wood", + {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, + {"default_aspen_wood.png"}, + "Aspen Wood Stair", + "Aspen Wood Slab", + default.node_sound_wood_defaults()) + stairs.register_stair_and_slab("stone", "default:stone", {cracky = 3}, {"default_stone.png"}, From 6d79d157c30ceb5a85fc20c703a72794f7c254e9 Mon Sep 17 00:00:00 2001 From: kilbith Date: Sun, 10 Jan 2016 21:31:36 +0100 Subject: [PATCH 02/17] New design of the creative inventory (with tabs) --- mods/creative/init.lua | 158 ++++++++++++++++---------- mods/creative/textures/trash_icon.png | Bin 0 -> 179 bytes 2 files changed, 97 insertions(+), 61 deletions(-) create mode 100644 mods/creative/textures/trash_icon.png diff --git a/mods/creative/init.lua b/mods/creative/init.lua index 3d545cdc..b02422fa 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -41,15 +41,28 @@ creative_inventory.init_creative_inventory = function(player) end, }) - creative_inventory.update(player_name, nil) + creative_inventory.update(player_name, nil, 2) --print("creative inventory size: "..dump(creative_inventory.creative_inventory_size)) end -function creative_inventory.update(player_name, filter) +local function tab_category(tab_id) + local id_category = { + nil, -- Reserved for crafting tab. + minetest.registered_items, + minetest.registered_nodes, + minetest.registered_tools, + minetest.registered_craftitems + } + + -- If index out of range, show default ("All") page. + return id_category[tab_id] or id_category[2] +end + +function creative_inventory.update(player_name, filter, tab_id) local creative_list = {} local inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) - for name, def in pairs(minetest.registered_items) do + 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 @@ -80,41 +93,55 @@ local trash = minetest.create_detached_inventory("creative_trash", { }) trash:set_size("main", 1) -creative_inventory.set_creative_formspec = function(player, start_i, pagenum) +creative_inventory.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 "" pagenum = math.floor(pagenum) - local pagemax = math.floor((creative_inventory[player_name].size - 1) / (6*4) + 1) + local pagemax = math.floor((creative_inventory[player_name].size - 1) / (3*8) + 1) + tab_id = tab_id or 2 - player:set_inventory_formspec( - "size[13,7.5]".. - --"image[6,0.6;1,2;player.png]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. - "list[current_player;main;5,3.5;8,1;]".. - "list[current_player;main;5,4.75;8,3;8]".. - "list[current_player;craft;8,0;3,3;]".. - "list[current_player;craftpreview;12,1;1,1;]".. - "image[11,1;1,1;gui_furnace_arrow_bg.png^[transformR270]".. - "list[detached:creative_" .. player_name .. ";main;0.05,1;4,6;" .. tostring(start_i) .. "]".. - "tablecolumns[color;text;color;text]".. - "tableoptions[background=#00000000;highlight=#00000000;border=false]".. - "table[1.4,7.2;1.1,0.5;pagenum;#FFFF00," .. tostring(pagenum) .. ",#FFFFFF,/ " .. tostring(pagemax) .. "]".. - "button[0,7;1,1;creative_prev;<<]".. - "button[3.08,7;1,1;creative_next;>>]".. - "button[2.55,0.2;0.8,0.5;search;?]".. - "button[3.3,0.2;0.8,0.5;clear;X]".. - "tooltip[search;Search]".. - "tooltip[clear;Reset]".. - "listring[current_player;main]".. - "listring[current_player;craft]".. - "listring[current_player;main]".. - "listring[detached:creative_" .. player_name .. ";main]".. - "label[5,1.5;Trash:]".. - "list[detached:creative_trash;main;5,2;1,1;]".. - "field[0.3,0.3;2.6,1;filter;;" .. filter .. "]".. - default.get_hotbar_bg(5,3.5) + player:set_inventory_formspec([[ + size[8,8.6] + image[4.06,3.4;0.8,0.8;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;] + tablecolumns[color;text;color;text] + tableoptions[background=#00000000;highlight=#00000000;border=false] + button[5.4,3.2;0.8,0.9;creative_prev;<] + button[7.25,3.2;0.8,0.9;creative_next;>] + button[2.1,3.4;0.8,0.5;search;?] + button[2.75,3.4;0.8,0.5;clear;X] + tooltip[search;Search] + tooltip[clear;Reset] + listring[current_player;main] + ]] .. + "field[0.3,3.5;2.2,1;filter;;".. filter .."]".. + "listring[detached:creative_".. player_name ..";main]".. + "tabheader[0,0;tabs;Crafting,All,Nodes,Tools,Items;".. tostring(tab_id) ..";true;false]".. + "list[detached:creative_".. player_name ..";main;0,0;8,3;".. tostring(start_i) .."]".. + "table[6.05,3.35;1.15,0.5;pagenum;#FFFF00,".. tostring(pagenum) ..",#FFFFFF,/ ".. tostring(pagemax) .."]".. + default.get_hotbar_bg(0,4.7).. + default.gui_bg .. default.gui_bg_img .. default.gui_slots + ) +end + +creative_inventory.set_crafting_formspec = function(player) + player:set_inventory_formspec([[ + size[8,7.5] + list[current_player;craft;2,0.25;3,3;] + list[current_player;craftpreview;6,1.25;1,1;] + list[current_player;main;0,3.6;8,1;] + list[current_player;main;0,4.75;8,3;8] + list[detached:creative_trash;main;0,2.25;1,1;] + image[0.06,2.35;0.8,0.8;trash_icon.png] + image[5,1.25;1,1;gui_furnace_arrow_bg.png^[transformR270] + tabheader[0,0;tabs;Crafting,All,Nodes,Tools,Items;1;true;false] + listring[current_player;main] + listring[current_player;craft] + ]] .. + default.get_hotbar_bg(0,3.6).. + default.gui_bg .. default.gui_bg_img .. default.gui_slots ) end @@ -124,7 +151,7 @@ minetest.register_on_joinplayer(function(player) return end creative_inventory.init_creative_inventory(player) - creative_inventory.set_creative_formspec(player, 0, 1) + creative_inventory.set_creative_formspec(player, 0, 1, 2) end) minetest.register_on_player_receive_fields(function(player, formname, fields) @@ -132,39 +159,48 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) return end -- Figure out current page from formspec - local current_page = 0 local player_name = player:get_player_name() local formspec = player:get_inventory_formspec() - local start_i = formspec:match("list%[detached:creative_" .. player_name .. ";.*;(%d+)%]") + 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 start_i = tonumber(start_i) or 0 - if fields.creative_prev or start_i >= inv_size then - start_i = start_i - 4*6 - elseif fields.creative_next or start_i < 0 then - start_i = start_i + 4*6 - end - - if fields.search or fields.clear then - if fields.clear then - creative_inventory[player_name].filter = "" - creative_inventory.update(player_name, nil) - else - creative_inventory[player_name].filter = fields.filter:lower() - creative_inventory.update(player_name, fields.filter:lower()) + if fields.quit then + if tab_id == 1 then + creative_inventory.set_crafting_formspec(player) + end + elseif fields.tabs then + if tonumber(fields.tabs) == 1 then + creative_inventory.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)) + 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) + 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) + else + if fields.creative_prev then + start_i = start_i - 3*8 + if start_i < 0 then + start_i = inv_size - (inv_size % (3*8)) + end + elseif fields.creative_next then + start_i = start_i + 3*8 + if start_i >= inv_size then + start_i = 0 + end end - minetest.after(0, function() - creative_inventory.set_creative_formspec(player, 0, 1) - end) - end - if start_i >= inv_size then - start_i = 0 - elseif start_i < 0 then - start_i = inv_size - (inv_size % (6*4)) + creative_inventory.set_creative_formspec(player, start_i, start_i / (3*8) + 1, tab_id) end - - creative_inventory.set_creative_formspec(player, start_i, start_i / (6*4) + 1) end) if minetest.setting_getbool("creative_mode") then @@ -172,7 +208,7 @@ if minetest.setting_getbool("creative_mode") then minetest.register_item(":", { type = "none", wield_image = "wieldhand.png", - wield_scale = {x=1,y=1,z=2.5}, + wield_scale = {x=1, y=1, z=2.5}, range = 10, tool_capabilities = { full_punch_interval = 0.5, diff --git a/mods/creative/textures/trash_icon.png b/mods/creative/textures/trash_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e789ad634450a5fa5227e9efd8fe804703d3eece GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9E0AtzXqc3_Qw7LkED7=p zW^j0RBMrn!@^*J&=wOxg0CG4BJR*x37`TN&n2}-D90{Nxdx@v7EBgaRE>UjzKQU*6 zfkJAYE{-7_*OL=$4jfo=K;eJ8V`JyRfAY-?+|4IMbT~B5{cmn;WMp`p!KrFv-vct4 N!PC{xWt~$(69DO#EW-c* literal 0 HcmV?d00001 From f41314185e1102cdd66534100f1411939d9e76bc Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Fri, 15 Jan 2016 00:35:07 -0800 Subject: [PATCH 03/17] Allow trapdoors to be rotated all ways. There really is no reason to prevent rotation in trapdoors, I expect this to be an oversight. Trapdoors work perfectly well sideways, upside down and can work like fences, gates and more. Most commonly, people will want to put them in the top half of the node so they remain flush with a floor. --- mods/doors/init.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/mods/doors/init.lua b/mods/doors/init.lua index 92b42669..c8b69c43 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -451,8 +451,6 @@ function doors.register_trapdoor(name, def) minetest.swap_node(pos, {name = newname, param1 = node.param1, param2 = node.param2}) end - def.on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple - -- Common trapdoor configuration def.drawtype = "nodebox" def.paramtype = "light" From 322967d2d1c7cec46ce86beec59b7c0512f7fcc9 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Sat, 16 Jan 2016 14:53:27 -0800 Subject: [PATCH 04/17] Better trapdoor side appearance. We're using a normal wooden side texture to draw the sides of trapdoors. But the side textures have only 2 edges that have a nice texture for the 2px wide trapdoor. We can either repaint the textures, or just rotate the texture properly for the two sides that need it. Because the side texture for wooden doors was just a default:wood texture, it clashes with the colors in the trapdoor, and so we add a wooden trapdoor-matching tile side texture as well. This also improves the steel trapdoor side, but without a texture change there since that was already a specially drawn texture for that node. We also increase the thickness of the trapdoor to 2px. Right now the model is 0.4 large, but this causes the side textures to look odd as there's a mismatch in pixel size. By scaling the trapdoor side up to exactly 2px, the sides look natural. Thanks to @kilbith for the suggestion. --- mods/doors/README.txt | 4 ++-- mods/doors/init.lua | 15 +++++++++------ mods/doors/textures/doors_trapdoor_side.png | Bin 173 -> 233 bytes 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/mods/doors/README.txt b/mods/doors/README.txt index c83720ce..27f0507a 100644 --- a/mods/doors/README.txt +++ b/mods/doors/README.txt @@ -28,7 +28,6 @@ following Textures created by BlockMen (WTFPL): door_obsidian_glass_side.png following textures created by celeron55 (CC BY-SA 3.0): - door_trapdoor_side.png door_glass_a.png door_glass_b.png @@ -36,9 +35,10 @@ following Textures created by PenguinDad (CC BY-SA 4.0): door_glass.png door_obsidian_glass.png -Steel trapdoor textures by sofar (CC-BY-SA-3.0) +following textures created by sofar (CC-BY-SA-3.0) doors_trapdoor_steel.png doors_trapdoor_steel_side.png + door_trapdoor_side.png All other textures (created by PilzAdam): WTFPL diff --git a/mods/doors/init.lua b/mods/doors/init.lua index c8b69c43..e942d466 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -474,25 +474,28 @@ function doors.register_trapdoor(name, def) def_closed.node_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5} + fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5} } def_closed.selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5} + fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5} } def_closed.tiles = { def.tile_front, def.tile_front, def.tile_side, def.tile_side, def.tile_side, def.tile_side } def_opened.node_box = { type = "fixed", - fixed = {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5} + fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5} } def_opened.selection_box = { type = "fixed", - fixed = {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5} + fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5} } - def_opened.tiles = { def.tile_side, def.tile_side, def.tile_side, def.tile_side, - def.tile_front, def.tile_front } + def_opened.tiles = { def.tile_side, def.tile_side, + def.tile_side .. '^[transform3', + def.tile_side .. '^[transform1', + def.tile_front, def.tile_front } + def_opened.drop = name_closed def_opened.groups.not_in_creative_inventory = 1 diff --git a/mods/doors/textures/doors_trapdoor_side.png b/mods/doors/textures/doors_trapdoor_side.png index c86052305afb5e36c2f9376c32e88a17d4c3fee2..c45d870d90c4b50e495c4cc48911eb4e62717bc2 100644 GIT binary patch delta 216 zcmZ3>_>ysgWIYoD1H*)g8D>C=Ey>&6h2cL4F4((#GEjuGz$3Dlfq`2Xgc%uT&5-~K zvX^-Jy0SlD6cAT8+B0dUEKsP-)5S4F--Ihms;=LinS=rj{+got_qJ^j_Y>kdbA#-jvB;wP>%} z^B(m*A12g)&~B9c{q5P$8EZ0hI{xN$+JFVdQ&MBb@0IC{L+5i9m delta 156 zcmV;N0Av5@0j&X$8Gi!+001a04^sdD01{A4R7G1yDPT)1h-o*Gb40R>Qvd(|BfmNs z00011Nkl9bcewLUQ0nunapyfBq}Ig&Y&Au+5!S`~gw%L0M$`QR=90000< KMNUMnLSTY~!ac$O From 250be40ecd1c736c18f5428094561cd74dff4177 Mon Sep 17 00:00:00 2001 From: kilbith Date: Sun, 17 Jan 2016 17:31:59 +0100 Subject: [PATCH 05/17] Fix blank page in creative in some rare case and keep crafting tab's size stationary --- mods/creative/init.lua | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/mods/creative/init.lua b/mods/creative/init.lua index b02422fa..0659a202 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -42,7 +42,7 @@ creative_inventory.init_creative_inventory = function(player) }) creative_inventory.update(player_name, nil, 2) - --print("creative inventory size: "..dump(creative_inventory.creative_inventory_size)) + --print("creative inventory size: "..dump(creative_inventory[player_name].size)) end local function tab_category(tab_id) @@ -128,19 +128,19 @@ end creative_inventory.set_crafting_formspec = function(player) player:set_inventory_formspec([[ - size[8,7.5] - list[current_player;craft;2,0.25;3,3;] - list[current_player;craftpreview;6,1.25;1,1;] - list[current_player;main;0,3.6;8,1;] - list[current_player;main;0,4.75;8,3;8] - list[detached:creative_trash;main;0,2.25;1,1;] - image[0.06,2.35;0.8,0.8;trash_icon.png] - image[5,1.25;1,1;gui_furnace_arrow_bg.png^[transformR270] + size[8,8.6] + list[current_player;craft;2,0.75;3,3;] + list[current_player;craftpreview;6,1.75;1,1;] + 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[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] listring[current_player;craft] ]] .. - default.get_hotbar_bg(0,3.6).. + default.get_hotbar_bg(0,4.7).. default.gui_bg .. default.gui_bg_img .. default.gui_slots ) end @@ -191,6 +191,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) start_i = start_i - 3*8 if start_i < 0 then start_i = inv_size - (inv_size % (3*8)) + if inv_size == start_i then + start_i = math.max(0, inv_size - (3*8)) + end end elseif fields.creative_next then start_i = start_i + 3*8 From 4b8410a98234359db609685caec1a87fdfde4b48 Mon Sep 17 00:00:00 2001 From: paramat Date: Thu, 14 Jan 2016 06:07:54 +0000 Subject: [PATCH 06/17] Default/mapgen: Remove unused 'mapgen_air' alias --- mods/default/mapgen.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index c92514cf..c918229c 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -2,7 +2,6 @@ -- Aliases for map generator outputs -- -minetest.register_alias("mapgen_air", "air") minetest.register_alias("mapgen_stone", "default:stone") minetest.register_alias("mapgen_dirt", "default:dirt") minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass") From a5d40e13be57fa70f44095bae2d033b10164e2fd Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Fri, 22 Jan 2016 12:14:11 -0800 Subject: [PATCH 07/17] Stair and Slab groups. Organizing these in groups will allow mods to do several things easier: - create craft recipes using them as ingredients - manipulate map nodes based on group properties There are quite a few slab and stair blocks already, so automatically add these groups at registration time for all of those. Since most mods I've seen use the registration code in this submod, they will also benefit. --- mods/stairs/init.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua index c3ce160e..ea2933b6 100644 --- a/mods/stairs/init.lua +++ b/mods/stairs/init.lua @@ -22,6 +22,7 @@ local replace = minetest.setting_getbool("enable_stairs_replace_abm") -- Node will be called stairs:stair_ function stairs.register_stair(subname, recipeitem, groups, images, description, sounds) + groups.stair = 1 minetest.register_node(":stairs:stair_" .. subname, { description = description, drawtype = "mesh", @@ -111,6 +112,7 @@ end -- Node will be called stairs:slab_ function stairs.register_slab(subname, recipeitem, groups, images, description, sounds) + groups.slab = 1 minetest.register_node(":stairs:slab_" .. subname, { description = description, drawtype = "nodebox", From 38a835132758c1df0e345b270e3dc973dc5cfda1 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Mon, 25 Jan 2016 23:35:28 -0800 Subject: [PATCH 08/17] Register biomes before ores. We may want to use biomes here at a later stage. --- mods/default/mapgen.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index c918229c..ee46f73d 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -1394,8 +1394,8 @@ if mg_params.mgname == "v6" then default.register_mgv6_decorations() minetest.register_on_generated(default.generate_nyancats) elseif mg_params.mgname ~= "singlenode" then - default.register_ores() default.register_biomes() + default.register_ores() default.register_decorations() minetest.register_on_generated(default.generate_nyancats) end From f4512cb5b6ff3faf0f127f5a5b326823aa53f28a Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 11 Jan 2016 08:54:37 +0000 Subject: [PATCH 09/17] ability to dye coloured wool white as above, the avility to dye coloured wool whilte again. --- mods/wool/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/wool/init.lua b/mods/wool/init.lua index 9c17b0ce..f485e4fb 100644 --- a/mods/wool/init.lua +++ b/mods/wool/init.lua @@ -9,7 +9,7 @@ local wool = {} -- colors, and then some recipes using more specific colors for a few non-base -- colors available. When crafting, the last recipes will be checked first. wool.dyes = { - {"white", "White", nil}, + {"white", "White", "basecolor_white"}, {"grey", "Grey", "basecolor_grey"}, {"black", "Black", "basecolor_black"}, {"red", "Red", "basecolor_red"}, From a4e144e4c8527f9c60a124b5f5eafed010afc699 Mon Sep 17 00:00:00 2001 From: paramat Date: Thu, 28 Jan 2016 01:30:01 +0000 Subject: [PATCH 10/17] Default/mapgen: Add gravel beach in Tundra --- mods/default/mapgen.lua | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index ee46f73d..1c30ad23 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -378,6 +378,24 @@ function default.register_biomes() humidity_point = 35, }) + minetest.register_biome({ + name = "tundra_beach", + --node_dust = "", + node_top = "default:gravel", + depth_top = 1, + node_filler = "default:gravel", + depth_filler = 2, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + y_min = -3, + y_max = 1, + heat_point = 15, + humidity_point = 35, + }) + minetest.register_biome({ name = "tundra_ocean", --node_dust = "", @@ -391,7 +409,7 @@ function default.register_biomes() --node_water = "", --node_river_water = "", y_min = -112, - y_max = 1, + y_max = -4, heat_point = 15, humidity_point = 35, }) From 2f39cad09b763fc62dce3bf1dce2867ecc864955 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Mon, 14 Dec 2015 21:49:20 -0800 Subject: [PATCH 11/17] 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 12/17] 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 13/17] 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 14/17] 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 15/17] 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 16/17] 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 17/17] 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