forked from mtcontrib/minetest-mod-snow
fix stairs and slabs
This commit is contained in:
parent
acb5141cbe
commit
de80a0910e
2
init.lua
2
init.lua
@ -50,7 +50,6 @@ http://github.com/Splizard/minetest-mod-snow/
|
|||||||
-- Original init.lua File Broken into Smaller Files
|
-- Original init.lua File Broken into Smaller Files
|
||||||
dofile(minetest.get_modpath("snow").."/src/abms.lua")
|
dofile(minetest.get_modpath("snow").."/src/abms.lua")
|
||||||
dofile(minetest.get_modpath("snow").."/src/aliases.lua")
|
dofile(minetest.get_modpath("snow").."/src/aliases.lua")
|
||||||
dofile(minetest.get_modpath("snow").."/src/basic_stairs_slabs.lua")
|
|
||||||
dofile(minetest.get_modpath("snow").."/src/crafting.lua")
|
dofile(minetest.get_modpath("snow").."/src/crafting.lua")
|
||||||
dofile(minetest.get_modpath("snow").."/src/snowball.lua")
|
dofile(minetest.get_modpath("snow").."/src/snowball.lua")
|
||||||
|
|
||||||
@ -63,6 +62,7 @@ dofile(minetest.get_modpath("snow").."/src/util.lua")
|
|||||||
-- To get Xmas tree saplings, the "christmas_content", true or false, in "util.lua" has to be determined first.
|
-- To get Xmas tree saplings, the "christmas_content", true or false, in "util.lua" has to be determined first.
|
||||||
-- That means "nodes.lua", where the saplings are controlled, has to come after "util.lua". ~ LazyJ
|
-- That means "nodes.lua", where the saplings are controlled, has to come after "util.lua". ~ LazyJ
|
||||||
dofile(minetest.get_modpath("snow").."/src/nodes.lua")
|
dofile(minetest.get_modpath("snow").."/src/nodes.lua")
|
||||||
|
dofile(minetest.get_modpath("snow").."/src/basic_stairs_slabs.lua")
|
||||||
dofile(minetest.get_modpath("snow").."/src/mapgen.lua")
|
dofile(minetest.get_modpath("snow").."/src/mapgen.lua")
|
||||||
dofile(minetest.get_modpath("snow").."/src/sled.lua")
|
dofile(minetest.get_modpath("snow").."/src/sled.lua")
|
||||||
dofile(minetest.get_modpath("snow").."/src/falling_snow.lua")
|
dofile(minetest.get_modpath("snow").."/src/falling_snow.lua")
|
||||||
|
16
src/abms.lua
16
src/abms.lua
@ -4,7 +4,7 @@ minetest.register_abm({
|
|||||||
interval = 1,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
minetest.add_node(pos,{name="default:snow"})
|
minetest.add_node(pos, {name="default:snow"})
|
||||||
minetest.set_node_level(pos, 7*(tonumber(node.name:sub(-1))))
|
minetest.set_node_level(pos, 7*(tonumber(node.name:sub(-1))))
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
@ -42,15 +42,17 @@ minetest.register_abm({
|
|||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
nodenames = {"group:melts"},
|
nodenames = {"group:melts"},
|
||||||
neighbors = {"group:igniter","default:torch","default:furnace_active","group:hot"},
|
neighbors = {"group:igniter", "default:torch", "default:furnace_active", "group:hot"},
|
||||||
interval = 2,
|
interval = 10,
|
||||||
chance = 2,
|
chance = 2,
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
local intensity = minetest.get_item_group(node.name,"melts")
|
local intensity = minetest.get_item_group(node.name,"melts")
|
||||||
if intensity == 1 then
|
if intensity == 1 then
|
||||||
minetest.add_node(pos,{name="default:water_source"})
|
minetest.set_node(pos, {name="default:water_source"})
|
||||||
elseif intensity == 2 then
|
elseif intensity == 2 then
|
||||||
minetest.add_node(pos,{name="default:water_flowing", param2=7})
|
minetest.set_node(pos, {name="default:water_flowing", param2=7})
|
||||||
|
elseif intensity == 3 then
|
||||||
|
minetest.set_node(pos, {name="default:water_flowing", param2=3})
|
||||||
--[[ LazyJ, you need to add param2, which defines the amount of the flowing water ~ HybridDog 2015_03_06
|
--[[ LazyJ, you need to add param2, which defines the amount of the flowing water ~ HybridDog 2015_03_06
|
||||||
This was causing "melts=2" nodes to just disappear so I changed it to replace the
|
This was causing "melts=2" nodes to just disappear so I changed it to replace the
|
||||||
node with a water_source for a couple seconds and then replace the water_source with
|
node with a water_source for a couple seconds and then replace the water_source with
|
||||||
@ -76,6 +78,8 @@ minetest.register_abm({
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
--]]
|
--]]
|
||||||
|
else
|
||||||
|
return
|
||||||
end
|
end
|
||||||
nodeupdate(pos)
|
nodeupdate(pos)
|
||||||
end,
|
end,
|
||||||
@ -184,7 +188,7 @@ minetest.register_abm({
|
|||||||
nodenames = {"snow:xmas_tree"},
|
nodenames = {"snow:xmas_tree"},
|
||||||
interval = 10,
|
interval = 10,
|
||||||
chance = 50,
|
chance = 50,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node)
|
||||||
|
|
||||||
-- 'If' there is air in each of the 8 nodes dirctly above the sapling,... ~LazyJ
|
-- 'If' there is air in each of the 8 nodes dirctly above the sapling,... ~LazyJ
|
||||||
for i = 1,8 do
|
for i = 1,8 do
|
||||||
|
@ -6,23 +6,18 @@
|
|||||||
-- ADD CHECK FOR MOREBLOCKS/SKIP IF NOT FOUND CODE STUFF HERE
|
-- ADD CHECK FOR MOREBLOCKS/SKIP IF NOT FOUND CODE STUFF HERE
|
||||||
|
|
||||||
|
|
||||||
|
-- what of the recipeitem can be copied
|
||||||
|
local recipe_values = {
|
||||||
|
"description", "tiles", "groups", "sounds", "use_texture_alpha", "sunlight_propagates",
|
||||||
|
"freezemelt", "liquidtype", "sunlight_propagates",
|
||||||
|
"stair_desc", "slab_desc"
|
||||||
|
}
|
||||||
|
|
||||||
|
local stairdef = {
|
||||||
|
|
||||||
snow_stairs = {} -- This is a little trick. Without it Minetest will complain
|
|
||||||
-- "attempt to index global 'snow' (a nil value)" and
|
|
||||||
-- refuse to load. So a value without definition "={}"is assigned to snow.
|
|
||||||
|
|
||||||
-- Node will be called snow:stair_<subname>
|
|
||||||
function snow_stairs.register_stair(subname, recipeitem, groups, images, description, sounds)
|
|
||||||
minetest.register_node("snow:stair_" .. subname, {
|
|
||||||
description = description,
|
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
tiles = images,
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = groups,
|
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults({
|
||||||
footstep = {name="default_snow_footstep", gain=0.25},
|
footstep = {name="default_snow_footstep", gain=0.25},
|
||||||
dig = {name="default_dig_crumbly", gain=0.4},
|
dig = {name="default_dig_crumbly", gain=0.4},
|
||||||
@ -69,14 +64,28 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
|
|||||||
|
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
pos.y = pos.y - 1
|
pos.y = pos.y - 1
|
||||||
if minetest.get_node(pos).name == "default:dirt_with_grass"
|
local node = minetest.get_node(pos)
|
||||||
|
if node.name == "default:dirt_with_grass"
|
||||||
-- Thinking in terms of layers, dirt_with_snow could also double as
|
-- Thinking in terms of layers, dirt_with_snow could also double as
|
||||||
-- dirt_with_frost which adds subtlety to the winterscape. ~ LazyJ, 2014_04_04
|
-- dirt_with_frost which adds subtlety to the winterscape. ~ LazyJ, 2014_04_04
|
||||||
or minetest.get_node(pos).name == "default:dirt" then
|
or node.name == "default:dirt" then
|
||||||
minetest.set_node(pos, {name="default:dirt_with_snow"})
|
node.name = "default:dirt_with_snow"
|
||||||
|
minetest.set_node(pos, node)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
}
|
||||||
|
|
||||||
|
-- Node will be called snow:stair_<subname>
|
||||||
|
local function register_stair(subname, recipeitem, newdef)
|
||||||
|
local def = table.copy(stairdef)
|
||||||
|
|
||||||
|
|
||||||
|
for n,i in pairs(newdef) do
|
||||||
|
def[n] = i
|
||||||
|
end
|
||||||
|
|
||||||
|
local name = "snow:stair_" .. subname
|
||||||
|
minetest.register_node(name, def)
|
||||||
--[[
|
--[[
|
||||||
-- for replace ABM
|
-- for replace ABM
|
||||||
minetest.register_node("snow:stair_" .. subname.."upside_down", {
|
minetest.register_node("snow:stair_" .. subname.."upside_down", {
|
||||||
@ -85,7 +94,7 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
|
|||||||
})
|
})
|
||||||
--]]
|
--]]
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'snow:stair_' .. subname .. ' 6',
|
output = name .. " 6",
|
||||||
recipe = {
|
recipe = {
|
||||||
{recipeitem, "", ""},
|
{recipeitem, "", ""},
|
||||||
{recipeitem, recipeitem, ""},
|
{recipeitem, recipeitem, ""},
|
||||||
@ -95,7 +104,7 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
|
|||||||
|
|
||||||
-- Flipped recipe
|
-- Flipped recipe
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'snow:stair_' .. subname .. ' 6',
|
output = name .. " 6",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"", "", recipeitem},
|
{"", "", recipeitem},
|
||||||
{"", recipeitem, recipeitem},
|
{"", recipeitem, recipeitem},
|
||||||
@ -104,48 +113,41 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Node will be called snow:slab_<subname>
|
|
||||||
function snow_stairs.register_slab(subname, recipeitem, groups, images, description, sounds)
|
local slabdef = table.copy(stairdef)
|
||||||
minetest.register_node("snow:slab_" .. subname, {
|
slabdef.node_box = {
|
||||||
description = description,
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
is_ground_content = true,
|
|
||||||
groups = groups,
|
|
||||||
sounds = default.node_sound_dirt_defaults({
|
|
||||||
footstep = {name="default_snow_footstep", gain=0.25},
|
|
||||||
dig = {name="default_dig_crumbly", gain=0.4},
|
|
||||||
dug = {name="default_snow_footstep", gain=0.75},
|
|
||||||
place = {name="default_place_node", gain=1.0}
|
|
||||||
}),
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
||||||
},
|
}
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
slabdef.on_place = nil
|
||||||
|
|
||||||
|
-- Node will be called snow:slab_<subname>
|
||||||
|
local function register_slab(subname, recipeitem, newdef)
|
||||||
|
local def = table.copy(slabdef)
|
||||||
|
|
||||||
|
local name = "snow:slab_" .. subname
|
||||||
|
def.on_place = function(itemstack, placer, pointed_thing)
|
||||||
if pointed_thing.type ~= "node" then
|
if pointed_thing.type ~= "node" then
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
-- If it's being placed on an another similar one, replace it with
|
-- If it's being placed on an another similar one, replace it with
|
||||||
-- a full block
|
-- a full block
|
||||||
local slabpos = nil
|
local slabpos, slabnode
|
||||||
local slabnode = nil
|
|
||||||
local p0 = pointed_thing.under
|
local p0 = pointed_thing.under
|
||||||
local p1 = pointed_thing.above
|
local p1 = pointed_thing.above
|
||||||
local n0 = minetest.get_node(p0)
|
local n0 = minetest.get_node(p0)
|
||||||
local n1 = minetest.get_node(p1)
|
local n1 = minetest.get_node(p1)
|
||||||
local param2 = 0
|
|
||||||
|
|
||||||
local n0_is_upside_down = (n0.name == "snow:slab_" .. subname and
|
local n0_is_upside_down = (n0.name == name and
|
||||||
n0.param2 >= 20)
|
n0.param2 >= 20)
|
||||||
|
|
||||||
if n0.name == "snow:slab_" .. subname and not n0_is_upside_down and p0.y+1 == p1.y then
|
if n0.name == name
|
||||||
|
and not n0_is_upside_down
|
||||||
|
and p0.y+1 == p1.y then
|
||||||
slabpos = p0
|
slabpos = p0
|
||||||
slabnode = n0
|
slabnode = n0
|
||||||
elseif n1.name == "snow:slab_" .. subname then
|
elseif n1.name == name then
|
||||||
slabpos = p1
|
slabpos = p1
|
||||||
slabnode = n1
|
slabnode = n1
|
||||||
end
|
end
|
||||||
@ -169,6 +171,7 @@ function snow_stairs.register_slab(subname, recipeitem, groups, images, descript
|
|||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local param2
|
||||||
-- Upside down slabs
|
-- Upside down slabs
|
||||||
if p0.y-1 == p1.y then
|
if p0.y-1 == p1.y then
|
||||||
-- Turn into full block if pointing at a existing slab
|
-- Turn into full block if pointing at a existing slab
|
||||||
@ -194,27 +197,20 @@ function snow_stairs.register_slab(subname, recipeitem, groups, images, descript
|
|||||||
|
|
||||||
-- Place upside down slab
|
-- Place upside down slab
|
||||||
param2 = 20
|
param2 = 20
|
||||||
end
|
elseif n0_is_upside_down
|
||||||
|
and p0.y+1 ~= p1.y then
|
||||||
-- If pointing at the side of a upside down slab
|
-- If pointing at the side of a upside down slab
|
||||||
if n0_is_upside_down and p0.y+1 ~= p1.y then
|
|
||||||
param2 = 20
|
param2 = 20
|
||||||
end
|
end
|
||||||
|
|
||||||
return minetest.item_place(itemstack, placer, pointed_thing, param2)
|
return minetest.item_place(itemstack, placer, pointed_thing, param2)
|
||||||
end,
|
|
||||||
|
|
||||||
on_construct = function(pos)
|
|
||||||
pos.y = pos.y - 1
|
|
||||||
if minetest.get_node(pos).name == "default:dirt_with_grass"
|
|
||||||
-- Thinking in terms of layers, dirt_with_snow could also double as
|
|
||||||
-- dirt_with_frost which adds subtlety to the winterscape. ~ LazyJ, 2014_04_04
|
|
||||||
or minetest.get_node(pos).name == "default:dirt" then
|
|
||||||
minetest.set_node(pos, {name="default:dirt_with_snow"})
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
})
|
for n,i in pairs(newdef) do
|
||||||
|
def[n] = i
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node(name, def)
|
||||||
--[[
|
--[[
|
||||||
-- for replace ABM
|
-- for replace ABM
|
||||||
minetest.register_node("snow:slab_" .. subname.."upside_down", {
|
minetest.register_node("snow:slab_" .. subname.."upside_down", {
|
||||||
@ -224,7 +220,7 @@ function snow_stairs.register_slab(subname, recipeitem, groups, images, descript
|
|||||||
--]]
|
--]]
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'snow:slab_' .. subname .. ' 6',
|
output = name .. " 6",
|
||||||
recipe = {
|
recipe = {
|
||||||
{recipeitem, recipeitem, recipeitem},
|
{recipeitem, recipeitem, recipeitem},
|
||||||
},
|
},
|
||||||
@ -259,9 +255,31 @@ minetest.register_abm({
|
|||||||
-- features (freezing, melting, and how they change dirt and dirt_with_grass). ~ LazyJ
|
-- features (freezing, melting, and how they change dirt and dirt_with_grass). ~ LazyJ
|
||||||
|
|
||||||
-- Nodes will be called snow:{stair,slab}_<subname>
|
-- Nodes will be called snow:{stair,slab}_<subname>
|
||||||
function snow_stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, freezemelt, liquidtype, paramtype, sunlight_propagates)
|
local function register_stair_and_slab(subname, recipeitem, def)
|
||||||
snow_stairs.register_stair(subname, recipeitem, groups, images, desc_stair, freezemelt, liquidtype, paramtype, sunlight_propagates)
|
local recipedef = minetest.registered_nodes[recipeitem]
|
||||||
snow_stairs.register_slab(subname, recipeitem, groups, images, desc_slab, freezemelt, liquidtype, paramtype, sunlight_propagates)
|
for _,i in pairs(recipe_values) do
|
||||||
|
if def[i] == nil
|
||||||
|
and recipedef[i] ~= nil then
|
||||||
|
def[i] = recipedef[i]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local groups = table.copy(def.groups)
|
||||||
|
groups.cooks_into_ice = nil
|
||||||
|
if groups.melts then
|
||||||
|
groups.melts = math.min(groups.melts+1, 3)
|
||||||
|
end
|
||||||
|
def.groups = groups
|
||||||
|
|
||||||
|
local stair_desc = def.stair_desc
|
||||||
|
def.stair_desc = nil
|
||||||
|
local slab_desc = def.slab_desc
|
||||||
|
def.slab_desc = nil
|
||||||
|
|
||||||
|
def.description = stair_desc
|
||||||
|
register_stair(subname, recipeitem, def)
|
||||||
|
|
||||||
|
def.description = slab_desc
|
||||||
|
register_slab(subname, recipeitem, def)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -269,58 +287,16 @@ list_of_snow_stuff = {
|
|||||||
--{"row[1] = first item in row",
|
--{"row[1] = first item in row",
|
||||||
-- "row[2] = second item in row",
|
-- "row[2] = second item in row",
|
||||||
-- "row[3] = third item in row", and so on, and so on...}, ~ LazyJ
|
-- "row[3] = third item in row", and so on, and so on...}, ~ LazyJ
|
||||||
{"ice", "default:ice", "default_ice.png", "Ice Stairs", "Ice Slabs"},
|
{"ice", "default:ice", "Ice Stairs", "Ice Slabs"},
|
||||||
{"snowblock", "default:snowblock", "default_snow.png", "Snowblock Stairs", "Snowblock Slabs"},
|
{"snowblock", "default:snowblock", "Snowblock Stairs", "Snowblock Slabs"},
|
||||||
{"snow_cobble", "snow:snow_cobble", "snow_snow_cobble.png", "Snow Cobble Stairs", "Snow Cobble Slabs"},
|
{"snow_cobble", "snow:snow_cobble", "Snow Cobble Stairs", "Snow Cobble Slabs"},
|
||||||
{"snow_brick", "snow:snow_brick", "snow_snow_brick.png", "Snow Brick Stair", "Snow Brick Slab"},
|
{"snow_brick", "snow:snow_brick", "Snow Brick Stair", "Snow Brick Slab"},
|
||||||
|
{"ice_brick", "snow:ice_brick", "Ice Brick Stair", "Ice Brick Slab"},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, row in ipairs(list_of_snow_stuff) do
|
for _, row in pairs(list_of_snow_stuff) do
|
||||||
local snow_subname = row[1]
|
register_stair_and_slab(row[1], row[2], {
|
||||||
local snow_recipeitem = row[2]
|
stair_desc = row[3],
|
||||||
local snow_images = row[3]
|
slab_desc = row[4],
|
||||||
local snow_desc_stair = row[4]
|
})
|
||||||
local snow_desc_slab = row[5]
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
snow_stairs.register_stair_and_slab(snow_subname, snow_recipeitem,
|
|
||||||
{cracky=2, crumbly=2, choppy=2, oddly_breakable_by_hand=2, melts=1, icemaker=1},
|
|
||||||
{snow_images},
|
|
||||||
snow_desc_stair,
|
|
||||||
snow_desc_slab,
|
|
||||||
"default:water_source",
|
|
||||||
"none",
|
|
||||||
"light",
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
end -- End the "list of snow stuff" part of the above section. ~ LazyJ
|
|
||||||
|
|
||||||
|
|
||||||
-- Snow stairs and slabs should be easier to break than the more dense and
|
|
||||||
-- manufactured, other snow-type nodes in the list above. ~ lazyJ
|
|
||||||
minetest.override_item("snow:stair_snowblock", {
|
|
||||||
groups = {cracky=3, crumbly=3, choppy=3, oddly_breakable_by_hand=3, melts=2, icemaker=1},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.override_item("snow:slab_snowblock", {
|
|
||||||
groups = {cracky=3, crumbly=3, choppy=3, oddly_breakable_by_hand=3, melts=2, icemaker=1},
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Everything above is made of snow and uses snow sounds, ice, however, should sound more like glass
|
|
||||||
-- and be harder to dig. ~ LazyJ
|
|
||||||
minetest.override_item("snow:stair_ice", {
|
|
||||||
groups = {cracky=1, crumbly=1, choppy=1, oddly_breakable_by_hand=1, melts=2, icemaker=1},
|
|
||||||
use_texture_alpha = true,
|
|
||||||
sounds = default.node_sound_glass_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.override_item("snow:slab_ice", {
|
|
||||||
groups = {cracky=1, crumbly=1, choppy=1, oddly_breakable_by_hand=1, melts=2, icemaker=1},
|
|
||||||
use_texture_alpha = true,
|
|
||||||
sounds = default.node_sound_glass_defaults(),
|
|
||||||
})
|
|
||||||
|
Loading…
Reference in New Issue
Block a user