From 8c3a831082891ccb76da60eaee7e9619db231020 Mon Sep 17 00:00:00 2001 From: Mrchiantos <51173452+Mrchiantos@users.noreply.github.com> Date: Mon, 5 Aug 2019 18:07:41 +0200 Subject: [PATCH] add nocombo and Stair Left & Right --- .../combostair/depends.txt | 0 .../combostair/init.lua | 0 .../combostair/models/stair.obj | 0 .../combostair/models/stairleft.b3d | Bin 0 -> 3017 bytes .../combostair/models/stairright.b3d | Bin 0 -> 3017 bytes .../combostair/readme.txt | 0 files/ComboNodes/combostairleft/depends.txt | 1 + files/ComboNodes/combostairleft/init.lua | 110 +++++ files/ComboNodes/combostairleft/readme.txt | 31 ++ files/ComboNodes/combostairright/depends.txt | 1 + files/ComboNodes/combostairright/init.lua | 110 +++++ files/ComboNodes/combostairright/readme.txt | 31 ++ files/ComboNodes/modpack.txt | 0 files/{Nodes => ComboNodes}/stairs/README.txt | 0 .../{Nodes => ComboNodes}/stairs/depends.txt | 0 files/{Nodes => ComboNodes}/stairs/init.lua | 22 +- .../{Nodes => ComboNodes}/stairs/license.txt | 0 .../stairs/models/stairs_stair.obj | 0 files/ComboNodes/stairsleft/README.txt | 16 + files/ComboNodes/stairsleft/depends.txt | 1 + files/ComboNodes/stairsleft/init.lua | 380 ++++++++++++++++++ files/ComboNodes/stairsleft/license.txt | 51 +++ files/ComboNodes/stairsright/README.txt | 16 + files/ComboNodes/stairsright/depends.txt | 1 + files/ComboNodes/stairsright/init.lua | 380 ++++++++++++++++++ files/ComboNodes/stairsright/license.txt | 51 +++ files/Menu/inventory_plus/build.lua | 155 ++++++- files/Menu/inventory_plus/menu.lua | 99 ++++- files/Menu/inventory_plus/textures/stairs.png | Bin 2734 -> 2879 bytes .../inventory_plus/textures/stairsleft.png | Bin 0 -> 2855 bytes .../inventory_plus/textures/stairsright.png | Bin 0 -> 3524 bytes 31 files changed, 1407 insertions(+), 49 deletions(-) rename files/{Decorations => ComboNodes}/combostair/depends.txt (100%) rename files/{Decorations => ComboNodes}/combostair/init.lua (100%) rename files/{Decorations => ComboNodes}/combostair/models/stair.obj (100%) create mode 100644 files/ComboNodes/combostair/models/stairleft.b3d create mode 100644 files/ComboNodes/combostair/models/stairright.b3d rename files/{Decorations => ComboNodes}/combostair/readme.txt (100%) create mode 100644 files/ComboNodes/combostairleft/depends.txt create mode 100644 files/ComboNodes/combostairleft/init.lua create mode 100644 files/ComboNodes/combostairleft/readme.txt create mode 100644 files/ComboNodes/combostairright/depends.txt create mode 100644 files/ComboNodes/combostairright/init.lua create mode 100644 files/ComboNodes/combostairright/readme.txt create mode 100644 files/ComboNodes/modpack.txt rename files/{Nodes => ComboNodes}/stairs/README.txt (100%) rename files/{Nodes => ComboNodes}/stairs/depends.txt (100%) rename files/{Nodes => ComboNodes}/stairs/init.lua (94%) rename files/{Nodes => ComboNodes}/stairs/license.txt (100%) rename files/{Nodes => ComboNodes}/stairs/models/stairs_stair.obj (100%) create mode 100644 files/ComboNodes/stairsleft/README.txt create mode 100644 files/ComboNodes/stairsleft/depends.txt create mode 100644 files/ComboNodes/stairsleft/init.lua create mode 100644 files/ComboNodes/stairsleft/license.txt create mode 100644 files/ComboNodes/stairsright/README.txt create mode 100644 files/ComboNodes/stairsright/depends.txt create mode 100644 files/ComboNodes/stairsright/init.lua create mode 100644 files/ComboNodes/stairsright/license.txt create mode 100644 files/Menu/inventory_plus/textures/stairsleft.png create mode 100644 files/Menu/inventory_plus/textures/stairsright.png diff --git a/files/Decorations/combostair/depends.txt b/files/ComboNodes/combostair/depends.txt similarity index 100% rename from files/Decorations/combostair/depends.txt rename to files/ComboNodes/combostair/depends.txt diff --git a/files/Decorations/combostair/init.lua b/files/ComboNodes/combostair/init.lua similarity index 100% rename from files/Decorations/combostair/init.lua rename to files/ComboNodes/combostair/init.lua diff --git a/files/Decorations/combostair/models/stair.obj b/files/ComboNodes/combostair/models/stair.obj similarity index 100% rename from files/Decorations/combostair/models/stair.obj rename to files/ComboNodes/combostair/models/stair.obj diff --git a/files/ComboNodes/combostair/models/stairleft.b3d b/files/ComboNodes/combostair/models/stairleft.b3d new file mode 100644 index 0000000000000000000000000000000000000000..19e60e0e3ed99aec555646abd28e5b1fbd4dcb28 GIT binary patch literal 3017 zcmds&Np2KD5JeMc1~bp|Jee6A+e}6(VQdK&V9B<;HL~Cau!TMgS3vBL8YHg3j#D5n zk<5Ql8QIa*Wez|{zboR$|B>0t)lzH#w_mpsW6jJR#3v-ac1cjq-YbK^MJ2 zi_Ww?hA3Re6OL!*OqX*wtJN<5H#vc(XIb%DtMIE(Oq zIMs3vQao418`c%a_wBZxtFT7)4xFp(t=9=1YdtT+YYfa|U0Zu;;l<*b3hp!R zFYYlyS6t$1+al}`whOv8lkVHJQy3BU3VVdz!U18wuunKF91;!+$AqK85#gk8LO3p* z5l#!Ig!95V;jC~;xF}o@t_oL#%ffZxnlLKd5^f4NguB8W;kIy37#GHbDPdBW5FQE- zg!{s@@K|^x@Gf|#FFN=xm{BLjzuyIu;axC0{4VHe5{S{PD>XspIX4!$cHT6hXF6(h z{#07{%ux?;QL~X(8lPLda0GKBn4vHoxueM;BHWvG_==Z4e3OG0XP}>f54gvkDhD{# z7Otbf?_TG{m3hudX0xaPAzks3JLnPUGG|^mYQmprK(2>$XbIQVRevw|ntp0RJ)1}E z$ei)YTfJx%#p}A7?$1I;Pf@gWIjG6=tVQlVdGVQ7xz8HXi74}3*Yui6ADU-yUDJz> uo^&=d=g=17TlWD^WW9NVw$!deOCB_3ZsdD;AFk)=T*aOIOT_h+zYY;6$BEbP7B~h+HNW1}DVV;F|;D*#f;uW~@7#vZC z?=QRDZfD>DDCr-&zWU2{XD061*{Qj2J3`nHLU_F}H~)qC;=;l*X&Hkigi>8iO=DX^ zc>dw-yH)#`n3!CB)){OTd)J1an&EKxl+Bv8G`^Z&dhva82=L*`;_}khvDm5uZH!a) z4wA>;a`%+=mL})w_gZ2)SC5e!tGr^_n`$|41qiLB&{)jP=UgLUOrF-#?xSYPooVza zS>~VLhNk&F{=`j;jo6!&ypOykvt0gg`xObFl}#@!8h1LA6Kh)gI|Ae&$iW z&_DCKUL9A_6zf^;tUI%C^d;u|8dohzx#C}WS!+jlo!LS~J@wghsOCO#B0e9J!e>lA zMe^BLv#M@=V(!yip*5UoE-9R8?p)00;`V*if4|~8HxD1xcNzC6epg!4qF|1!x7%Z2 z-olr9arJ&OMiou}^2XDNJQ=IhQ9A7y#*<)6_?%S{(jicRY7ut#Tp}lAiI*1OS{pbifj1HmW=omVRPN9?N1Uie( zpws9AI*-nw%jgoih_0cl=nA@tZlLSv4!VtQp}S}jO`v;d8cm^x=mENqX3%5w2n;1d_is#V r;K}>S@1gmq+*upz)+?r*$a&$*EP32(>w7OX^99|>KUwL2zLWm|m diff --git a/files/ComboNodes/combostairright/depends.txt b/files/ComboNodes/combostairright/depends.txt new file mode 100644 index 000000000..37e8e61b3 --- /dev/null +++ b/files/ComboNodes/combostairright/depends.txt @@ -0,0 +1 @@ +stairs diff --git a/files/ComboNodes/combostairright/init.lua b/files/ComboNodes/combostairright/init.lua new file mode 100644 index 000000000..858e08c4d --- /dev/null +++ b/files/ComboNodes/combostairright/init.lua @@ -0,0 +1,110 @@ +combostairright = {index = { + ["color:blue"] = "stairsright:stair_blue", + ["color:black"] = "stairsright:stair_black", + ["color:green"] = "stairsright:stair_green", + ["color:red"] = "stairsright:stair_red", + ["color:yellow"] = "stairsright:stair_yellow", + ["color:orange"] = "stairsright:stair_orange", + ["color:pink"] = "stairsright:stair_pink", + ["color:white"] = "stairsright:stair_white", + + }} +local creative = minetest.setting_getbool("creative_mode") +for k,v1 in pairs(combostairright.index) do + local v1_def = minetest.registered_nodes[v1] + local v1_groups = table.copy(v1_def.groups) + v1_groups.not_in_creative_inventory = 1 + local v1_tiles = table.copy(v1_def.tiles) + if not v1_tiles[2] then + v1_tiles[2] = v1_tiles[1] + end + if not v1_tiles[3] then + v1_tiles[3] = v1_tiles[2] + end + if not v1_tiles[4] then + v1_tiles[4] = v1_tiles[3] + end + if not v1_tiles[5] then + v1_tiles[5] = v1_tiles[4] + end + if not v1_tiles[6] then + v1_tiles[6] = v1_tiles[5] + end + for _,v2 in pairs(combostairright.index) do + if v1 ~= v2 then + local v2_def = minetest.registered_nodes[v2] + local v2_tiles = table.copy(v2_def.tiles) + if not v2_tiles[2] then + v2_tiles[2] = v2_tiles[1] + end + if not v2_tiles[3] then + v2_tiles[3] = v2_tiles[2] + end + if not v2_tiles[4] then + v2_tiles[4] = v2_tiles[3] + end + if not v2_tiles[5] then + v2_tiles[5] = v2_tiles[4] + end + if not v2_tiles[6] then + v2_tiles[6] = v2_tiles[5] + end + minetest.register_node("combostairright:"..v1:split(":")[2].."_onc_"..v2:split(":")[2], { + description = v1_def.description.." on "..v2_def.description, + tiles = {v1_tiles[1], v2_tiles[2]}, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "mesh", + mesh = "stairright.b3d", + + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.5, 0.5}, + }, + }, + + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.5, 0.5}, + }, + }, + + sounds = v1_def.sounds, + groups = v1_groups, + drop = v1, + }) + end + end + minetest.override_item(v1, { + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.under + if pointed_thing.type ~= "node" or minetest.is_protected(pos, placer:get_player_name()) then + return + end + local node = minetest.get_node(pos) + if node.name == v1 then + minetest.swap_node(pos, {name = k, param2 = 0}) + if not creative then + itemstack:take_item() + return itemstack + end + else + for _,v in pairs(combostairright.index) do + if node.name == v then + minetest.swap_node(pos, {name = "combostairright:"..v1:split(":")[2].."_onc_"..v:split(":")[2], param2 = node.param2}) + if not creative then + itemstack:take_item() + return itemstack + end + return + end + end + return minetest.item_place(itemstack, placer, pointed_thing, param2) + end + end, + }) +end diff --git a/files/ComboNodes/combostairright/readme.txt b/files/ComboNodes/combostairright/readme.txt new file mode 100644 index 000000000..a7a5df885 --- /dev/null +++ b/files/ComboNodes/combostairright/readme.txt @@ -0,0 +1,31 @@ +Comboblock Fork for Blockcolor (Mrchiantos) +Comboblock Original (pithydon) + +License (Model) : CcO with Help MinetestVideo, Thank man. + +License (source code) : +======================================================================= +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/files/ComboNodes/modpack.txt b/files/ComboNodes/modpack.txt new file mode 100644 index 000000000..e69de29bb diff --git a/files/Nodes/stairs/README.txt b/files/ComboNodes/stairs/README.txt similarity index 100% rename from files/Nodes/stairs/README.txt rename to files/ComboNodes/stairs/README.txt diff --git a/files/Nodes/stairs/depends.txt b/files/ComboNodes/stairs/depends.txt similarity index 100% rename from files/Nodes/stairs/depends.txt rename to files/ComboNodes/stairs/depends.txt diff --git a/files/Nodes/stairs/init.lua b/files/ComboNodes/stairs/init.lua similarity index 94% rename from files/Nodes/stairs/init.lua rename to files/ComboNodes/stairs/init.lua index 825c031f7..48e2358b7 100644 --- a/files/Nodes/stairs/init.lua +++ b/files/ComboNodes/stairs/init.lua @@ -6,6 +6,14 @@ stairs = {} +local source_list = { + {""}, + {"nocombo"}, +} + +for i in ipairs(source_list) do + local combo = source_list[i][1] + -- Register aliases for new pine node names @@ -47,7 +55,7 @@ end function stairs.register_stair(subname, recipeitem, groups, images, description, sounds, html, wieldcolors) groups.stair = 1 - minetest.register_node(":stairs:stair_" .. subname, { + minetest.register_node(":stairs:stair" .. combo .. "_" .. subname, { description = description, wield_image = wieldcolors, wield_scale = {x=1,y=1,z=0.5}, @@ -85,8 +93,8 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, -- for replace ABM if replace then - minetest.register_node(":stairs:stair_" .. subname .. "upside_down", { - replace_name = "stairs:stair_" .. subname, + minetest.register_node(":stairs:stair" .. combo .. "_" .. subname .. "upside_down", { + replace_name = "stairs:stair" .. combo .. "_" .. subname, groups = {slabs_replace = 1}, }) end @@ -136,7 +144,7 @@ local slab_trans_dir = {[0] = 8, 0, 2, 1, 3, 4} function stairs.register_slab(subname, recipeitem, groups, images, description, sounds, html, wieldcolors) groups.slab = 1 - minetest.register_node(":stairs:slab_" .. subname, { + minetest.register_node(":stairs:slab" .. combo .. "_" .. subname, { description = description, wield_image = wieldcolors, wield_scale = {x=1,y=1,z=0.5}, @@ -208,8 +216,8 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, -- for replace ABM if replace then - minetest.register_node(":stairs:slab_" .. subname .. "upside_down", { - replace_name = "stairs:slab_".. subname, + minetest.register_node(":stairs:slab" .. combo .. "_" .. subname .. "upside_down", { + replace_name = "stairs:slab" .. combo .. "_".. subname, groups = {slabs_replace = 1}, }) end @@ -368,3 +376,5 @@ stairs.register_stair_and_slab( color8, "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color8..":70)" ) + +end \ No newline at end of file diff --git a/files/Nodes/stairs/license.txt b/files/ComboNodes/stairs/license.txt similarity index 100% rename from files/Nodes/stairs/license.txt rename to files/ComboNodes/stairs/license.txt diff --git a/files/Nodes/stairs/models/stairs_stair.obj b/files/ComboNodes/stairs/models/stairs_stair.obj similarity index 100% rename from files/Nodes/stairs/models/stairs_stair.obj rename to files/ComboNodes/stairs/models/stairs_stair.obj diff --git a/files/ComboNodes/stairsleft/README.txt b/files/ComboNodes/stairsleft/README.txt new file mode 100644 index 000000000..d32cd71b9 --- /dev/null +++ b/files/ComboNodes/stairsleft/README.txt @@ -0,0 +1,16 @@ +Minetest Game mod: stairs +========================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Kahrl (LGPL 2.1) and +celeron55, Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) + +Authors of media (models) +------------------------- +Jean-Patrick G. (kilbith) (CC BY-SA 3.0): + stairs_stair.obj + + diff --git a/files/ComboNodes/stairsleft/depends.txt b/files/ComboNodes/stairsleft/depends.txt new file mode 100644 index 000000000..9430a5a24 --- /dev/null +++ b/files/ComboNodes/stairsleft/depends.txt @@ -0,0 +1 @@ +color \ No newline at end of file diff --git a/files/ComboNodes/stairsleft/init.lua b/files/ComboNodes/stairsleft/init.lua new file mode 100644 index 000000000..e06f45497 --- /dev/null +++ b/files/ComboNodes/stairsleft/init.lua @@ -0,0 +1,380 @@ +-- Minetest 0.4 mod: stairsleft +-- See README.txt for licensing and other information. + + +-- Global namespace for functions + +stairsleft = {} + +local source_list = { + {""}, + {"nocombo"}, +} + +for i in ipairs(source_list) do + local combo = source_list[i][1] + + +-- Register aliases for new pine node names + +minetest.register_alias("stairsleft:stair_pinewood", "stairsleft:stair_pine_wood") +minetest.register_alias("stairsleft:slab_pinewood", "stairsleft:slab_pine_wood") + + +-- Get setting for replace ABM + +local replace = minetest.settings:get_bool("enable_stairsleft_replace_abm") + +local function rotate_and_place(itemstack, placer, pointed_thing) + local p0 = pointed_thing.under + local p1 = pointed_thing.above + local param2 = 0 + + local placer_pos = placer:getpos() + if placer_pos then + param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) + end + + local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) + local fpos = finepos.y % 1 + + if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) + or (fpos < -0.5 and fpos > -0.999999999) then + param2 = param2 + 20 + if param2 == 21 then + param2 = 23 + elseif param2 == 23 then + param2 = 21 + end + end + return minetest.item_place(itemstack, placer, pointed_thing, param2) +end + +-- Register stairsleft. +-- Node will be called stairsleft:stair_ + +function stairsleft.register_stair(subname, recipeitem, groups, images, description, sounds, html, wieldcolors) + groups.stair = 1 + minetest.register_node(":stairsleft:stair" .. combo .. "_" .. subname, { + description = description, + wield_image = wieldcolors, + wield_scale = {x=1,y=1,z=0.5}, + drawtype = "mesh", + inventory_image = "stairsleft.png^[colorize:#".. html ..":70", + mesh = "stairleft.b3d", + tiles = images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = groups, + sounds = sounds, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.5, 0.5}, + }, + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.5, 0.5}, + }, + }, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + return rotate_and_place(itemstack, placer, pointed_thing) + end, + }) + + -- for replace ABM + if replace then + minetest.register_node(":stairsleft:stair" .. combo .. "_" .. subname .. "upside_down", { + replace_name = "stairsleft:stair" .. combo .. "_" .. subname, + groups = {slabs_replace = 1}, + }) + end + + if recipeitem then + minetest.register_craft({ + output = 'stairsleft:stair_' .. subname .. ' 8', + recipe = { + {recipeitem, "", ""}, + {recipeitem, recipeitem, ""}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Flipped recipe for the silly minecrafters + minetest.register_craft({ + output = 'stairsleft:stair_' .. subname .. ' 8', + recipe = { + {"", "", recipeitem}, + {"", recipeitem, recipeitem}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = 'stairsleft:stair_' .. subname, + burntime = math.floor(baseburntime * 0.75), + }) + end + end +end + + +-- Slab facedir to placement 6d matching table +local slab_trans_dir = {[0] = 8, 0, 2, 1, 3, 4} + +-- Register slabs. +-- Node will be called stairsleft:slab_ + +function stairsleft.register_slab(subname, recipeitem, groups, images, description, sounds, html, wieldcolors) + groups.slab = 1 + minetest.register_node(":stairsleft:slab_" .. subname, { + description = description, + wield_image = wieldcolors, + wield_scale = {x=1,y=1,z=0.5}, + inventory_image = "slabs.png^[colorize:#".. html ..":70", + drawtype = "nodebox", + tiles = images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = groups, + sounds = sounds, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + on_place = function(itemstack, placer, pointed_thing) + local under = minetest.get_node(pointed_thing.under) + local wield_item = itemstack:get_name() + local creative_enabled = (creative and creative.is_enabled_for + and creative.is_enabled_for(placer:get_player_name())) + + if under and under.name:find("stairsleft:slab_") then + -- place slab using under node orientation + local dir = minetest.dir_to_facedir(vector.subtract( + pointed_thing.above, pointed_thing.under), true) + + local p2 = under.param2 + + -- combine two slabs if possible + if slab_trans_dir[math.floor(p2 / 4)] == dir + and wield_item == under.name then + + if not recipeitem then + return itemstack + end + local player_name = placer:get_player_name() + if minetest.is_protected(pointed_thing.under, player_name) and not + minetest.check_player_privs(placer, "protection_bypass") then + minetest.record_protection_violation(pointed_thing.under, + player_name) + return + end + minetest.set_node(pointed_thing.under, {name = recipeitem, param2 = p2}) + if not creative_enabled then + itemstack:take_item() + end + return itemstack + end + + -- Placing a slab on an upside down slab should make it right-side up. + if p2 >= 20 and dir == 8 then + p2 = p2 - 20 + -- same for the opposite case: slab below normal slab + elseif p2 <= 3 and dir == 4 then + p2 = p2 + 20 + end + + -- else attempt to place node with proper param2 + minetest.item_place_node(ItemStack(wield_item), placer, pointed_thing, p2) + if not creative_enabled then + itemstack:take_item() + end + return itemstack + else + return rotate_and_place(itemstack, placer, pointed_thing) + end + end, + }) + + -- for replace ABM + if replace then + minetest.register_node(":stairsleft:slab_" .. subname .. "upside_down", { + replace_name = "stairsleft:slab_".. subname, + groups = {slabs_replace = 1}, + }) + end + + if recipeitem then + minetest.register_craft({ + output = 'stairsleft:slab_' .. subname .. ' 6', + recipe = { + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = 'stairsleft:slab_' .. subname, + burntime = math.floor(baseburntime * 0.5), + }) + end + end +end + + +-- Optionally replace old "upside_down" nodes with new param2 versions. +-- Disabled by default. + +if replace then + minetest.register_abm({ + label = "Slab replace", + nodenames = {"group:slabs_replace"}, + interval = 16, + chance = 1, + action = function(pos, node) + node.name = minetest.registered_nodes[node.name].replace_name + node.param2 = node.param2 + 20 + if node.param2 == 21 then + node.param2 = 23 + elseif node.param2 == 23 then + node.param2 = 21 + end + minetest.set_node(pos, node) + end, + }) +end + + +-- Stair/slab registration function. +-- Nodes will be called stairsleft:{stair,slab}_ + +function stairsleft.register_stair_and_slab(subname, recipeitem, + groups, images, desc_stair, desc_slab, sounds, html, wieldcolors) + stairsleft.register_stair(subname, recipeitem, groups, images, desc_stair, sounds, html, wieldcolors) + stairsleft.register_slab(subname, recipeitem, groups, images, desc_slab, sounds, html, wieldcolors) +end + +-- Register default stairsleft and slabs + +stairsleft.register_stair_and_slab( + "blue", + "color:blue", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color2..":70"}, + "Blue Stair", + "Blue Slab", + default.node_sound_wood_defaults(), + color2, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color2..":70)" +) + +stairsleft.register_stair_and_slab( + "red", + "color:red", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color6..":70"}, + "Red Stair", + "Red Slab", + default.node_sound_wood_defaults(), + color6, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color6..":70)" +) + +stairsleft.register_stair_and_slab( + "white", + "color:white", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color4..":70"}, + "White Stair", + "White Slab", + default.node_sound_wood_defaults(), + color4, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color4..":70)" +) + +stairsleft.register_stair_and_slab( + "black", + "color:black", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color1..":70"}, + "Black Stair", + "Black Slab", + default.node_sound_wood_defaults(), + color1, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color1..":70)" +) + +stairsleft.register_stair_and_slab( + "green", + "color:green", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color3..":70"}, + "Green Stair", + "Green Slab", + default.node_sound_wood_defaults(), + color3, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color3..":70)" +) + +stairsleft.register_stair_and_slab( + "yellow", + "color:yellow", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color7..":70"}, + "Yellow Stair", + "Yellow Slab", + default.node_sound_wood_defaults(), + color7, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color7..":70)" +) + +stairsleft.register_stair_and_slab( + "orange", + "color:orange", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color5..":70"}, + "Orange Stair", + "Orange Slab", + default.node_sound_wood_defaults(), + color5, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color5..":70)" +) + +stairsleft.register_stair_and_slab( + "pink", + "color:pink", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color8..":70"}, + "Pink Stair", + "Pink Slab", + default.node_sound_wood_defaults(), + color8, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color8..":70)" +) + +end \ No newline at end of file diff --git a/files/ComboNodes/stairsleft/license.txt b/files/ComboNodes/stairsleft/license.txt new file mode 100644 index 000000000..8f16bbd7b --- /dev/null +++ b/files/ComboNodes/stairsleft/license.txt @@ -0,0 +1,51 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2016 Kahrl +Copyright (C) 2011-2016 celeron55, Perttu Ahola +Copyright (C) 2012-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (models) +-------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/files/ComboNodes/stairsright/README.txt b/files/ComboNodes/stairsright/README.txt new file mode 100644 index 000000000..d32cd71b9 --- /dev/null +++ b/files/ComboNodes/stairsright/README.txt @@ -0,0 +1,16 @@ +Minetest Game mod: stairs +========================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Kahrl (LGPL 2.1) and +celeron55, Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) + +Authors of media (models) +------------------------- +Jean-Patrick G. (kilbith) (CC BY-SA 3.0): + stairs_stair.obj + + diff --git a/files/ComboNodes/stairsright/depends.txt b/files/ComboNodes/stairsright/depends.txt new file mode 100644 index 000000000..9430a5a24 --- /dev/null +++ b/files/ComboNodes/stairsright/depends.txt @@ -0,0 +1 @@ +color \ No newline at end of file diff --git a/files/ComboNodes/stairsright/init.lua b/files/ComboNodes/stairsright/init.lua new file mode 100644 index 000000000..714e8b61a --- /dev/null +++ b/files/ComboNodes/stairsright/init.lua @@ -0,0 +1,380 @@ +-- Minetest 0.4 mod: stairsright +-- See README.txt for licensing and other information. + + +-- Global namespace for functions + +stairsright = {} + +local source_list = { + {""}, + {"nocombo"}, +} + +for i in ipairs(source_list) do + local combo = source_list[i][1] + + +-- Register aliases for new pine node names + +minetest.register_alias("stairsright:stair_pinewood", "stairsright:stair_pine_wood") +minetest.register_alias("stairsright:slab_pinewood", "stairsright:slab_pine_wood") + + +-- Get setting for replace ABM + +local replace = minetest.settings:get_bool("enable_stairsright_replace_abm") + +local function rotate_and_place(itemstack, placer, pointed_thing) + local p0 = pointed_thing.under + local p1 = pointed_thing.above + local param2 = 0 + + local placer_pos = placer:getpos() + if placer_pos then + param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) + end + + local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) + local fpos = finepos.y % 1 + + if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) + or (fpos < -0.5 and fpos > -0.999999999) then + param2 = param2 + 20 + if param2 == 21 then + param2 = 23 + elseif param2 == 23 then + param2 = 21 + end + end + return minetest.item_place(itemstack, placer, pointed_thing, param2) +end + +-- Register stairsright. +-- Node will be called stairsright:stair_ + +function stairsright.register_stair(subname, recipeitem, groups, images, description, sounds, html, wieldcolors) + groups.stair = 1 + minetest.register_node(":stairsright:stair" .. combo .. "_" .. subname, { + description = description, + wield_image = wieldcolors, + wield_scale = {x=1,y=1,z=0.5}, + drawtype = "mesh", + inventory_image = "stairsright.png^[colorize:#".. html ..":70", + mesh = "stairright.b3d", + tiles = images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = groups, + sounds = sounds, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.5, 0.5}, + }, + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.5, 0.5}, + }, + }, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + return rotate_and_place(itemstack, placer, pointed_thing) + end, + }) + + -- for replace ABM + if replace then + minetest.register_node(":stairsright:stair" .. combo .. "_" .. subname .. "upside_down", { + replace_name = "stairsright:stair" .. combo .. "_" .. subname, + groups = {slabs_replace = 1}, + }) + end + + if recipeitem then + minetest.register_craft({ + output = 'stairsright:stair_' .. subname .. ' 8', + recipe = { + {recipeitem, "", ""}, + {recipeitem, recipeitem, ""}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Flipped recipe for the silly minecrafters + minetest.register_craft({ + output = 'stairsright:stair_' .. subname .. ' 8', + recipe = { + {"", "", recipeitem}, + {"", recipeitem, recipeitem}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = 'stairsright:stair_' .. subname, + burntime = math.floor(baseburntime * 0.75), + }) + end + end +end + + +-- Slab facedir to placement 6d matching table +local slab_trans_dir = {[0] = 8, 0, 2, 1, 3, 4} + +-- Register slabs. +-- Node will be called stairsright:slab_ + +function stairsright.register_slab(subname, recipeitem, groups, images, description, sounds, html, wieldcolors) + groups.slab = 1 + minetest.register_node(":stairsright:right_" .. subname, { + description = description, + wield_image = wieldcolors, + wield_scale = {x=1,y=1,z=0.5}, + inventory_image = "slabs.png^[colorize:#".. html ..":70", + drawtype = "nodebox", + tiles = images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = groups, + sounds = sounds, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + on_place = function(itemstack, placer, pointed_thing) + local under = minetest.get_node(pointed_thing.under) + local wield_item = itemstack:get_name() + local creative_enabled = (creative and creative.is_enabled_for + and creative.is_enabled_for(placer:get_player_name())) + + if under and under.name:find("stairsright:slab_") then + -- place slab using under node orientation + local dir = minetest.dir_to_facedir(vector.subtract( + pointed_thing.above, pointed_thing.under), true) + + local p2 = under.param2 + + -- combine two slabs if possible + if slab_trans_dir[math.floor(p2 / 4)] == dir + and wield_item == under.name then + + if not recipeitem then + return itemstack + end + local player_name = placer:get_player_name() + if minetest.is_protected(pointed_thing.under, player_name) and not + minetest.check_player_privs(placer, "protection_bypass") then + minetest.record_protection_violation(pointed_thing.under, + player_name) + return + end + minetest.set_node(pointed_thing.under, {name = recipeitem, param2 = p2}) + if not creative_enabled then + itemstack:take_item() + end + return itemstack + end + + -- Placing a slab on an upside down slab should make it right-side up. + if p2 >= 20 and dir == 8 then + p2 = p2 - 20 + -- same for the opposite case: slab below normal slab + elseif p2 <= 3 and dir == 4 then + p2 = p2 + 20 + end + + -- else attempt to place node with proper param2 + minetest.item_place_node(ItemStack(wield_item), placer, pointed_thing, p2) + if not creative_enabled then + itemstack:take_item() + end + return itemstack + else + return rotate_and_place(itemstack, placer, pointed_thing) + end + end, + }) + + -- for replace ABM + if replace then + minetest.register_node(":stairsright:slab_" .. subname .. "upside_down", { + replace_name = "stairsright:slab_".. subname, + groups = {slabs_replace = 1}, + }) + end + + if recipeitem then + minetest.register_craft({ + output = 'stairsright:slab_' .. subname .. ' 6', + recipe = { + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = 'stairsright:slab_' .. subname, + burntime = math.floor(baseburntime * 0.5), + }) + end + end +end + + +-- Optionally replace old "upside_down" nodes with new param2 versions. +-- Disabled by default. + +if replace then + minetest.register_abm({ + label = "Slab replace", + nodenames = {"group:slabs_replace"}, + interval = 16, + chance = 1, + action = function(pos, node) + node.name = minetest.registered_nodes[node.name].replace_name + node.param2 = node.param2 + 20 + if node.param2 == 21 then + node.param2 = 23 + elseif node.param2 == 23 then + node.param2 = 21 + end + minetest.set_node(pos, node) + end, + }) +end + + +-- Stair/slab registration function. +-- Nodes will be called stairsright:{stair,slab}_ + +function stairsright.register_stair_and_slab(subname, recipeitem, + groups, images, desc_stair, desc_slab, sounds, html, wieldcolors) + stairsright.register_stair(subname, recipeitem, groups, images, desc_stair, sounds, html, wieldcolors) + stairsright.register_slab(subname, recipeitem, groups, images, desc_slab, sounds, html, wieldcolors) +end + +-- Register default stairsright and slabs + +stairsright.register_stair_and_slab( + "blue", + "color:blue", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color2..":70"}, + "Blue Stair Right", + "Blue Slab", + default.node_sound_wood_defaults(), + color2, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color2..":70)" +) + +stairsright.register_stair_and_slab( + "red", + "color:red", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color6..":70"}, + "Red Stair Right", + "Red Slab", + default.node_sound_wood_defaults(), + color6, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color6..":70)" +) + +stairsright.register_stair_and_slab( + "white", + "color:white", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color4..":70"}, + "White Stair Right", + "White Slab", + default.node_sound_wood_defaults(), + color4, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color4..":70)" +) + +stairsright.register_stair_and_slab( + "black", + "color:black", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color1..":70"}, + "Black Stair Right", + "Black Slab", + default.node_sound_wood_defaults(), + color1, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color1..":70)" +) + +stairsright.register_stair_and_slab( + "green", + "color:green", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color3..":70"}, + "Green Stair Right", + "Green Slab", + default.node_sound_wood_defaults(), + color3, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color3..":70)" +) + +stairsright.register_stair_and_slab( + "yellow", + "color:yellow", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color7..":70"}, + "Yellow Stair Right", + "Yellow Slab", + default.node_sound_wood_defaults(), + color7, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color7..":70)" +) + +stairsright.register_stair_and_slab( + "orange", + "color:orange", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color5..":70"}, + "Orange Stair Right", + "Orange Slab", + default.node_sound_wood_defaults(), + color5, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color5..":70)" +) + +stairsright.register_stair_and_slab( + "pink", + "color:pink", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"color_white2.png^[colorize:#"..color8..":70"}, + "Pink Stair Right", + "Pink Slab", + default.node_sound_wood_defaults(), + color8, + "color_handwhite.png^(color_handwhite2.png^[colorize:#"..color8..":70)" +) + +end \ No newline at end of file diff --git a/files/ComboNodes/stairsright/license.txt b/files/ComboNodes/stairsright/license.txt new file mode 100644 index 000000000..8f16bbd7b --- /dev/null +++ b/files/ComboNodes/stairsright/license.txt @@ -0,0 +1,51 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2016 Kahrl +Copyright (C) 2011-2016 celeron55, Perttu Ahola +Copyright (C) 2012-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (models) +-------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/files/Menu/inventory_plus/build.lua b/files/Menu/inventory_plus/build.lua index e8676ba9b..c347885e3 100644 --- a/files/Menu/inventory_plus/build.lua +++ b/files/Menu/inventory_plus/build.lua @@ -462,6 +462,51 @@ end end ) +-- ComBo Blocks + +-- Stairs (Border Left) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + local name = player:get_player_name() + if fields.stairsleft then --main page + + player:get_inventory():set_list("main", {}) + +player:get_inventory():add_item('main', 'stairsleft:stair_white') +player:get_inventory():add_item('main', 'stairsleft:stair_black') +player:get_inventory():add_item('main', 'stairsleft:stair_red') +player:get_inventory():add_item('main', 'stairsleft:stair_orange') +player:get_inventory():add_item('main', 'stairsleft:stair_yellow') +player:get_inventory():add_item('main', 'stairsleft:stair_pink') +player:get_inventory():add_item('main', 'stairsleft:stair_green') +player:get_inventory():add_item('main', 'stairsleft:stair_blue') + +end +end +) + +-- Stairs (Border Right) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + local name = player:get_player_name() + if fields.stairsright then --main page + + player:get_inventory():set_list("main", {}) + +player:get_inventory():add_item('main', 'stairsright:stair_white') +player:get_inventory():add_item('main', 'stairsright:stair_black') +player:get_inventory():add_item('main', 'stairsright:stair_red') +player:get_inventory():add_item('main', 'stairsright:stair_orange') +player:get_inventory():add_item('main', 'stairsright:stair_yellow') +player:get_inventory():add_item('main', 'stairsright:stair_pink') +player:get_inventory():add_item('main', 'stairsright:stair_green') +player:get_inventory():add_item('main', 'stairsright:stair_blue') + +end +end +) + + -- Stairs minetest.register_on_player_receive_fields(function(player, formname, fields) @@ -483,26 +528,6 @@ end end ) --- Top Slabs - -minetest.register_on_player_receive_fields(function(player, formname, fields) - local name = player:get_player_name() - if fields.tslabs then --main page - - player:get_inventory():set_list("main", {}) - -player:get_inventory():add_item('main', 'stackslabs:top_slabwhite') -player:get_inventory():add_item('main', 'stackslabs:top_slabblack') -player:get_inventory():add_item('main', 'stackslabs:top_slabred') -player:get_inventory():add_item('main', 'stackslabs:top_slaborange') -player:get_inventory():add_item('main', 'stackslabs:top_slabyellow') -player:get_inventory():add_item('main', 'stackslabs:top_slabpink') -player:get_inventory():add_item('main', 'stackslabs:top_slabgreen') -player:get_inventory():add_item('main', 'stackslabs:top_slabblue') - -end -end -) -- Bottom Slabs @@ -525,4 +550,92 @@ end end ) --- End Build Nodes +-- No ComBo Blocks + +-- Stairs (Border Left) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + local name = player:get_player_name() + if fields.stairsleftnocombo then --main page + + player:get_inventory():set_list("main", {}) + +player:get_inventory():add_item('main', 'stairsleft:stairnocombo_white') +player:get_inventory():add_item('main', 'stairsleft:stairnocombo_black') +player:get_inventory():add_item('main', 'stairsleft:stairnocombo_red') +player:get_inventory():add_item('main', 'stairsleft:stairnocombo_orange') +player:get_inventory():add_item('main', 'stairsleft:stairnocombo_yellow') +player:get_inventory():add_item('main', 'stairsleft:stairnocombo_pink') +player:get_inventory():add_item('main', 'stairsleft:stairnocombo_green') +player:get_inventory():add_item('main', 'stairsleft:stairnocombo_blue') + +end +end +) + +-- Stairs (Border Right) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + local name = player:get_player_name() + if fields.stairsrightnocombo then --main page + + player:get_inventory():set_list("main", {}) + +player:get_inventory():add_item('main', 'stairsright:stairnocombo_white') +player:get_inventory():add_item('main', 'stairsright:stairnocombo_black') +player:get_inventory():add_item('main', 'stairsright:stairnocombo_red') +player:get_inventory():add_item('main', 'stairsright:stairnocombo_orange') +player:get_inventory():add_item('main', 'stairsright:stairnocombo_yellow') +player:get_inventory():add_item('main', 'stairsright:stairnocombo_pink') +player:get_inventory():add_item('main', 'stairsright:stairnocombo_green') +player:get_inventory():add_item('main', 'stairsright:stairnocombo_blue') + +end +end +) + + +-- Stairs + +minetest.register_on_player_receive_fields(function(player, formname, fields) + local name = player:get_player_name() + if fields.stairsnocombo then --main page + + player:get_inventory():set_list("main", {}) + +player:get_inventory():add_item('main', 'stairs:stairnocombo_white') +player:get_inventory():add_item('main', 'stairs:stairnocombo_black') +player:get_inventory():add_item('main', 'stairs:stairnocombo_red') +player:get_inventory():add_item('main', 'stairs:stairnocombo_orange') +player:get_inventory():add_item('main', 'stairs:stairnocombo_yellow') +player:get_inventory():add_item('main', 'stairs:stairnocombo_pink') +player:get_inventory():add_item('main', 'stairs:stairnocombo_green') +player:get_inventory():add_item('main', 'stairs:stairnocombo_blue') + +end +end +) + + +-- Bottom Slabs + +minetest.register_on_player_receive_fields(function(player, formname, fields) + local name = player:get_player_name() + if fields.slabsnocombo then --main page + + player:get_inventory():set_list("main", {}) + +player:get_inventory():add_item('main', 'stairs:slabnocombo_white') +player:get_inventory():add_item('main', 'stairs:slabnocombo_black') +player:get_inventory():add_item('main', 'stairs:slabnocombo_red') +player:get_inventory():add_item('main', 'stairs:slabnocombo_orange') +player:get_inventory():add_item('main', 'stairs:slabnocombo_yellow') +player:get_inventory():add_item('main', 'stairs:slabnocombo_pink') +player:get_inventory():add_item('main', 'stairs:slabnocombo_green') +player:get_inventory():add_item('main', 'stairs:slabnocombo_blue') + +end +end +) + +-- End Build Nodes \ No newline at end of file diff --git a/files/Menu/inventory_plus/menu.lua b/files/Menu/inventory_plus/menu.lua index 859fb5d4f..5ccdd0e91 100644 --- a/files/Menu/inventory_plus/menu.lua +++ b/files/Menu/inventory_plus/menu.lua @@ -90,27 +90,27 @@ inventory_plus.get_formspec = function(player, page) .. "image_button_exit[0,0.5;1,1;blocks.png;blocks;]" .. "tooltip[blocks;Block]" - .. "image_button_exit[1,0.5;1,1;stairs.png;stairs;]" - .. "tooltip[stairs;Stair]" + .. "image_button_exit[1,0.5;1,1;stairs.png;stairsnocombo;]" + .. "tooltip[stairsnocombo;Stair (no combo)]" - .. "image_button_exit[2,0.5;1,1;slabs.png;slabs;]" - .. "tooltip[slabs;Slab]" + .. "image_button_exit[2,0.5;1,1;stairsleft.png;stairsleftnocombo;]" + .. "tooltip[stairsleftnocombo;Stair Left (no combo)]" - .. "image_button_exit[3,0.5;1,1;windows.png;windows;]" + .. "image_button_exit[3,0.5;1,1;stairsright.png;stairsrightnocombo;]" + .. "tooltip[stairsrightnocombo;Stair Right (no combo)]" + + .. "image_button_exit[4,0.5;1,1;slabs.png;slabsnocombo;]" + .. "tooltip[slabsnocombo;Slab (no combo)]" + + .. "image_button_exit[5,0.5;1,1;windows.png;windows;]" .. "tooltip[windows;Window]" - .. "image_button_exit[4,0.5;1,1;lights.png;lights;]" + .. "image_button_exit[6,0.5;1,1;lights.png;lights;]" .. "tooltip[lights;Light]" - .. "image_button_exit[5,0.5;1,1;waters.png;waters;]" - .. "tooltip[waters;Water]" - - .. "image_button_exit[6,0.5;1,1;doors.png;doors;] " + .. "image_button_exit[7,0.5;1,1;doors.png;doors;] " .. "tooltip[doors;Door]" - .. "image_button_exit[7,0.5;1,1;carpets.png;carpets;]" - .. "tooltip[carpets;Carpet]" - .. "image_button_exit[0,2.5;1,1;trapdoor.png;trapdoor;]" .. "tooltip[trapdoor;Trapdoor]" @@ -168,6 +168,8 @@ inventory_plus.get_formspec = function(player, page) .. "image_button_exit[2,6.5;1,1;nones.png;none;]" .. "tooltip[none;None]" + .. "image_button[5,6.5;3,1;;nodesnocombo1;Combo Nodes]" + .. "tooltip[nodesnocombo1;Combo Nodes]" .. "" @@ -188,6 +190,12 @@ inventory_plus.get_formspec = function(player, page) .. "image_button_exit[0,0.5;1,1;edgecorner.png;edgecorner;]" .. "tooltip[edgecorner;Edge corner]" + + .. "image_button_exit[1,0.5;1,1;carpets.png;carpets;]" + .. "tooltip[carpets;Carpet]" + + .. "image_button_exit[2,0.5;1,1;waters.png;waters;]" + .. "tooltip[waters;Water]" .. "image_button[0,6.5;1,1;gauche.png;nodes;]" .. "tooltip[nodes;Nodes Page 1]" @@ -202,6 +210,45 @@ inventory_plus.get_formspec = function(player, page) end +-- nodes nocombo + +if page == "nodesnocombo1" then + + local inv = player:get_inventory() or nil + + if not inv then + print ("NO INVENTORY FOUND") + return + end + + formspec = formspec + + .. "image_button_exit[1,0.5;1,1;stairs.png;stairs;]" + .. "tooltip[stairs;Stair]" + + .. "image_button_exit[2,0.5;1,1;stairsleft.png;stairsleft;]" + .. "tooltip[stairsleft;Stair Left]" + + .. "image_button_exit[3,0.5;1,1;stairsright.png;stairsright;]" + .. "tooltip[stairsright;Stair Right]" + + .. "image_button_exit[4,0.5;1,1;slabs.png;slabs;]" + .. "tooltip[slabs;Slab]" + + +.. "image_button[0,6.5;1,1;gauche.png;nodes;]" +.. "tooltip[nodes; Normal Nodes]" + +.. "image_button_exit[1,6.5;1,1;rotate.png;rotate;]" +.. "tooltip[rotate;Rotate]" + +.. "image_button_exit[2,6.5;1,1;nones.png;none;]" +.. "tooltip[none;None]" + +.. "" + +end + if page == "animals" then local inv = player:get_inventory() or nil @@ -397,7 +444,7 @@ if page == "furnitures" then .. "image_button_exit[7,0.5;1,1;carts_rail_straight_pwr.png;rails;]" .. "tooltip[rails;Rail]" -.. "image_button_exit[0,2.5;1,1;volvo_inv.png;bus;]" +.. "image_button_exit[0,2.5;1,1;bus.png;bus;]" .. "tooltip[bus;Bus]" .. "image_button[0,6.5;1,1;gauche.png;main;]" @@ -735,6 +782,22 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) return end + if fields.nodes2 then + + inventory_plus.set_inventory_formspec(player, + inventory_plus.get_formspec(player, "nodes2")) + + return + end + + if fields.nodesnocombo1 then + + inventory_plus.set_inventory_formspec(player, + inventory_plus.get_formspec(player, "nodesnocombo1")) + + return + end + if fields.lettermenu then inventory_plus.set_inventory_formspec(player, @@ -767,14 +830,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) return end -if fields.nodes2 then - - inventory_plus.set_inventory_formspec(player, - inventory_plus.get_formspec(player, "nodes2")) - - return - end - if fields.furnitures then inventory_plus.set_inventory_formspec(player, diff --git a/files/Menu/inventory_plus/textures/stairs.png b/files/Menu/inventory_plus/textures/stairs.png index 1b8df9d0fd5dd0d16f4a868e9509bb54dedbe05b..694a77b511087c37377c0103db37b099bae72f4e 100644 GIT binary patch delta 2467 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 literal 0 HcmV?d00001 diff --git a/files/Menu/inventory_plus/textures/stairsright.png b/files/Menu/inventory_plus/textures/stairsright.png new file mode 100644 index 0000000000000000000000000000000000000000..83bc855d8b0cb6d01433c1d9552ff34e13c70e34 GIT binary patch literal 3524 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