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
|
||||
dofile(minetest.get_modpath("snow").."/src/abms.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/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.
|
||||
-- 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/basic_stairs_slabs.lua")
|
||||
dofile(minetest.get_modpath("snow").."/src/mapgen.lua")
|
||||
dofile(minetest.get_modpath("snow").."/src/sled.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,
|
||||
chance = 1,
|
||||
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))))
|
||||
end,
|
||||
})
|
||||
@ -42,15 +42,17 @@ minetest.register_abm({
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"group:melts"},
|
||||
neighbors = {"group:igniter","default:torch","default:furnace_active","group:hot"},
|
||||
interval = 2,
|
||||
neighbors = {"group:igniter", "default:torch", "default:furnace_active", "group:hot"},
|
||||
interval = 10,
|
||||
chance = 2,
|
||||
action = function(pos, node)
|
||||
local intensity = minetest.get_item_group(node.name,"melts")
|
||||
if intensity == 1 then
|
||||
minetest.add_node(pos,{name="default:water_source"})
|
||||
minetest.set_node(pos, {name="default:water_source"})
|
||||
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
|
||||
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
|
||||
@ -76,6 +78,8 @@ minetest.register_abm({
|
||||
end
|
||||
end)
|
||||
--]]
|
||||
else
|
||||
return
|
||||
end
|
||||
nodeupdate(pos)
|
||||
end,
|
||||
@ -184,7 +188,7 @@ minetest.register_abm({
|
||||
nodenames = {"snow:xmas_tree"},
|
||||
interval = 10,
|
||||
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
|
||||
for i = 1,8 do
|
||||
|
@ -6,23 +6,18 @@
|
||||
-- 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"
|
||||
}
|
||||
|
||||
|
||||
|
||||
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,
|
||||
local stairdef = {
|
||||
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},
|
||||
@ -69,14 +64,28 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
|
||||
|
||||
on_construct = function(pos)
|
||||
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
|
||||
-- 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"})
|
||||
or node.name == "default:dirt" then
|
||||
node.name = "default:dirt_with_snow"
|
||||
minetest.set_node(pos, node)
|
||||
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
|
||||
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({
|
||||
output = 'snow:stair_' .. subname .. ' 6',
|
||||
output = name .. " 6",
|
||||
recipe = {
|
||||
{recipeitem, "", ""},
|
||||
{recipeitem, recipeitem, ""},
|
||||
@ -95,7 +104,7 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
|
||||
|
||||
-- Flipped recipe
|
||||
minetest.register_craft({
|
||||
output = 'snow:stair_' .. subname .. ' 6',
|
||||
output = name .. " 6",
|
||||
recipe = {
|
||||
{"", "", recipeitem},
|
||||
{"", recipeitem, recipeitem},
|
||||
@ -104,48 +113,41 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
|
||||
})
|
||||
end
|
||||
|
||||
-- Node will be called snow:slab_<subname>
|
||||
function snow_stairs.register_slab(subname, recipeitem, groups, images, description, sounds)
|
||||
minetest.register_node("snow:slab_" .. subname, {
|
||||
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 = {
|
||||
|
||||
local slabdef = table.copy(stairdef)
|
||||
slabdef.node_box = {
|
||||
type = "fixed",
|
||||
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
|
||||
return itemstack
|
||||
end
|
||||
|
||||
-- If it's being placed on an another similar one, replace it with
|
||||
-- a full block
|
||||
local slabpos = nil
|
||||
local slabnode = nil
|
||||
local slabpos, slabnode
|
||||
local p0 = pointed_thing.under
|
||||
local p1 = pointed_thing.above
|
||||
local n0 = minetest.get_node(p0)
|
||||
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)
|
||||
|
||||
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
|
||||
slabnode = n0
|
||||
elseif n1.name == "snow:slab_" .. subname then
|
||||
elseif n1.name == name then
|
||||
slabpos = p1
|
||||
slabnode = n1
|
||||
end
|
||||
@ -169,6 +171,7 @@ function snow_stairs.register_slab(subname, recipeitem, groups, images, descript
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local param2
|
||||
-- Upside down slabs
|
||||
if p0.y-1 == p1.y then
|
||||
-- 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
|
||||
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 n0_is_upside_down and p0.y+1 ~= p1.y then
|
||||
param2 = 20
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
})
|
||||
for n,i in pairs(newdef) do
|
||||
def[n] = i
|
||||
end
|
||||
|
||||
minetest.register_node(name, def)
|
||||
--[[
|
||||
-- for replace ABM
|
||||
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({
|
||||
output = 'snow:slab_' .. subname .. ' 6',
|
||||
output = name .. " 6",
|
||||
recipe = {
|
||||
{recipeitem, recipeitem, recipeitem},
|
||||
},
|
||||
@ -259,9 +255,31 @@ minetest.register_abm({
|
||||
-- features (freezing, melting, and how they change dirt and dirt_with_grass). ~ LazyJ
|
||||
|
||||
-- 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)
|
||||
snow_stairs.register_stair(subname, recipeitem, groups, images, desc_stair, freezemelt, liquidtype, paramtype, sunlight_propagates)
|
||||
snow_stairs.register_slab(subname, recipeitem, groups, images, desc_slab, freezemelt, liquidtype, paramtype, sunlight_propagates)
|
||||
local function register_stair_and_slab(subname, recipeitem, def)
|
||||
local recipedef = minetest.registered_nodes[recipeitem]
|
||||
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
|
||||
|
||||
|
||||
@ -269,58 +287,16 @@ list_of_snow_stuff = {
|
||||
--{"row[1] = first item in row",
|
||||
-- "row[2] = second item in row",
|
||||
-- "row[3] = third item in row", and so on, and so on...}, ~ LazyJ
|
||||
{"ice", "default:ice", "default_ice.png", "Ice Stairs", "Ice Slabs"},
|
||||
{"snowblock", "default:snowblock", "default_snow.png", "Snowblock Stairs", "Snowblock Slabs"},
|
||||
{"snow_cobble", "snow:snow_cobble", "snow_snow_cobble.png", "Snow Cobble Stairs", "Snow Cobble Slabs"},
|
||||
{"snow_brick", "snow:snow_brick", "snow_snow_brick.png", "Snow Brick Stair", "Snow Brick Slab"},
|
||||
{"ice", "default:ice", "Ice Stairs", "Ice Slabs"},
|
||||
{"snowblock", "default:snowblock", "Snowblock Stairs", "Snowblock Slabs"},
|
||||
{"snow_cobble", "snow:snow_cobble", "Snow Cobble Stairs", "Snow Cobble Slabs"},
|
||||
{"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
|
||||
local snow_subname = row[1]
|
||||
local snow_recipeitem = row[2]
|
||||
local snow_images = row[3]
|
||||
local snow_desc_stair = row[4]
|
||||
local snow_desc_slab = row[5]
|
||||
|
||||
|
||||
|
||||
|
||||
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(),
|
||||
})
|
||||
for _, row in pairs(list_of_snow_stuff) do
|
||||
register_stair_and_slab(row[1], row[2], {
|
||||
stair_desc = row[3],
|
||||
slab_desc = row[4],
|
||||
})
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user