add nocombo and Stair Left & Right
This commit is contained in:
parent
05f4c19148
commit
8c3a831082
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
stairs
|
|
@ -0,0 +1,110 @@
|
|||
combostairleft = {index = {
|
||||
["color:blue"] = "stairsleft:stair_blue",
|
||||
["color:black"] = "stairsleft:stair_black",
|
||||
["color:green"] = "stairsleft:stair_green",
|
||||
["color:red"] = "stairsleft:stair_red",
|
||||
["color:yellow"] = "stairsleft:stair_yellow",
|
||||
["color:orange"] = "stairsleft:stair_orange",
|
||||
["color:pink"] = "stairsleft:stair_pink",
|
||||
["color:white"] = "stairsleft:stair_white",
|
||||
|
||||
}}
|
||||
local creative = minetest.setting_getbool("creative_mode")
|
||||
for k,v1 in pairs(combostairleft.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(combostairleft.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("combostairleft:"..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 = "stairleft.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(combostairleft.index) do
|
||||
if node.name == v then
|
||||
minetest.swap_node(pos, {name = "combostairleft:"..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
|
|
@ -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 <http://unlicense.org>
|
|
@ -0,0 +1 @@
|
|||
stairs
|
|
@ -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
|
|
@ -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 <http://unlicense.org>
|
|
@ -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
|
|
@ -0,0 +1,16 @@
|
|||
Minetest Game mod: stairs
|
||||
=========================
|
||||
See license.txt for license information.
|
||||
|
||||
Authors of source code
|
||||
----------------------
|
||||
Originally by Kahrl <kahrl@gmx.net> (LGPL 2.1) and
|
||||
celeron55, Perttu Ahola <celeron55@gmail.com> (LGPL 2.1)
|
||||
Various Minetest developers and contributors (LGPL 2.1)
|
||||
|
||||
Authors of media (models)
|
||||
-------------------------
|
||||
Jean-Patrick G. (kilbith) <jeanpatrick.guerrero@gmail.com> (CC BY-SA 3.0):
|
||||
stairs_stair.obj
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
color
|
|
@ -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_<subname>
|
||||
|
||||
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_<subname>
|
||||
|
||||
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}_<subname>
|
||||
|
||||
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
|
|
@ -0,0 +1,51 @@
|
|||
License of source code
|
||||
----------------------
|
||||
|
||||
GNU Lesser General Public License, version 2.1
|
||||
Copyright (C) 2011-2016 Kahrl <kahrl@gmx.net>
|
||||
Copyright (C) 2011-2016 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
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) <jeanpatrick.guerrero@gmail.com>
|
||||
|
||||
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/
|
|
@ -0,0 +1,16 @@
|
|||
Minetest Game mod: stairs
|
||||
=========================
|
||||
See license.txt for license information.
|
||||
|
||||
Authors of source code
|
||||
----------------------
|
||||
Originally by Kahrl <kahrl@gmx.net> (LGPL 2.1) and
|
||||
celeron55, Perttu Ahola <celeron55@gmail.com> (LGPL 2.1)
|
||||
Various Minetest developers and contributors (LGPL 2.1)
|
||||
|
||||
Authors of media (models)
|
||||
-------------------------
|
||||
Jean-Patrick G. (kilbith) <jeanpatrick.guerrero@gmail.com> (CC BY-SA 3.0):
|
||||
stairs_stair.obj
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
color
|
|
@ -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_<subname>
|
||||
|
||||
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_<subname>
|
||||
|
||||
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}_<subname>
|
||||
|
||||
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
|
|
@ -0,0 +1,51 @@
|
|||
License of source code
|
||||
----------------------
|
||||
|
||||
GNU Lesser General Public License, version 2.1
|
||||
Copyright (C) 2011-2016 Kahrl <kahrl@gmx.net>
|
||||
Copyright (C) 2011-2016 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
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) <jeanpatrick.guerrero@gmail.com>
|
||||
|
||||
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/
|
|
@ -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
|
||||
)
|
||||
|
||||
-- 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
|
|
@ -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]"
|
||||
|
||||
.. ""
|
||||
|
||||
|
@ -189,6 +191,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]"
|
||||
|
||||
|
@ -198,6 +206,45 @@ inventory_plus.get_formspec = function(player, page)
|
|||
.. "image_button_exit[2,6.5;1,1;nones.png;none;]"
|
||||
.. "tooltip[none;None]"
|
||||
|
||||
.. ""
|
||||
|
||||
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
|
||||
|
@ -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,
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
Loading…
Reference in New Issue