Update of MinetestForFun Game Creative (from Classic)

This commit is contained in:
LeMagnesium 2016-02-25 13:30:11 +01:00
parent 3c2783fe67
commit c522ae4ac2
40 changed files with 696 additions and 268 deletions

View File

@ -1 +1 @@
name = MinetestForFun CREATIVE name = MinetestForFun Game Creative

View File

@ -1,2 +1,3 @@
# Enable jungles on new worlds, disable biome blend and mud flow (faster, looks better). # Enable jungles on new worlds, disable biome blend and mud flow (faster, looks better).
mgv6_spflags = jungles, nobiomeblend, nomudflow mgv6_spflags = jungles, nobiomeblend, nomudflow
disable_fire = true

View File

@ -9,8 +9,7 @@
# 0 to disable # 0 to disable
#share_bones_time = 1200 #share_bones_time = 1200
# Whether standard fire should be disabled ('basic flame' nodes will disappear) # Whether fire should be disabled (all fire nodes will instantly disappear)
# 'permanent flame' nodes will remain with either setting
#disable_fire = false #disable_fire = false
# Whether steel tools, torches and cobblestone should be given to new players # Whether steel tools, torches and cobblestone should be given to new players

View File

@ -183,6 +183,11 @@ end)
-- respawn player at bed if enabled and valid position is found -- respawn player at bed if enabled and valid position is found
minetest.register_on_respawnplayer(function(player) minetest.register_on_respawnplayer(function(player)
--MFF DEBUT crabman(8/01/2016 ) respawn player in special area(event) if a spawn is set.
if ((minetest.get_modpath("areas") ~= nil) and (areas:onRespawn(player))) then
return true
end
if not enable_respawn then if not enable_respawn then
return false return false
end end

View File

@ -1,11 +1,16 @@
-- minetest/creative/init.lua -- minetest/creative/init.lua
creative_inventory = {} creative_inventory = {}
creative_inventory.creative_inventory_size = 0
-- Create detached creative inventory after loading all mods -- Create detached creative inventory after loading all mods
minetest.after(0, function() creative_inventory.init_creative_inventory = function(player)
local inv = minetest.create_detached_inventory("creative", { local player_name = player:get_player_name()
creative_inventory[player_name] = {}
creative_inventory[player_name].size = 0
creative_inventory[player_name].filter = nil
creative_inventory[player_name].start_i = 1
local inv = minetest.create_detached_inventory("creative_" .. player_name, {
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
if minetest.setting_getbool("creative_mode") then if minetest.setting_getbool("creative_mode") then
return count return count
@ -35,19 +40,41 @@ minetest.after(0, function()
end end
end, end,
}) })
creative_inventory.update(player_name, nil, 2)
--print("creative inventory size: "..dump(creative_inventory[player_name].size))
end
local function tab_category(tab_id)
local id_category = {
nil, -- Reserved for crafting tab.
minetest.registered_items,
minetest.registered_nodes,
minetest.registered_tools,
minetest.registered_craftitems
}
-- If index out of range, show default ("All") page.
return id_category[tab_id] or id_category[2]
end
function creative_inventory.update(player_name, filter, tab_id)
local creative_list = {} local creative_list = {}
for name,def in pairs(minetest.registered_items) do local inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name})
if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0)
and def.description and def.description ~= "" then for name, def in pairs(tab_category(tab_id)) do
if not (def.groups.not_in_creative_inventory == 1) and
def.description and def.description ~= "" and
(not filter or def.name:find(filter, 1, true)) then
creative_list[#creative_list+1] = name creative_list[#creative_list+1] = name
end end
end end
table.sort(creative_list) table.sort(creative_list)
inv:set_size("main", #creative_list) inv:set_size("main", #creative_list)
inv:set_list("main", creative_list) inv:set_list("main", creative_list)
creative_inventory.creative_inventory_size = #creative_list creative_inventory[player_name].size = #creative_list
--print("creative inventory size: "..dump(creative_inventory.creative_inventory_size)) end
end)
-- Create the trash field -- Create the trash field
local trash = minetest.create_detached_inventory("creative_trash", { local trash = minetest.create_detached_inventory("creative_trash", {
@ -66,70 +93,117 @@ local trash = minetest.create_detached_inventory("creative_trash", {
}) })
trash:set_size("main", 1) trash:set_size("main", 1)
creative_inventory.set_creative_formspec = function(player, start_i, pagenum, tab_id)
creative_inventory.set_creative_formspec = function(player, start_i, pagenum) local player_name = player:get_player_name()
local filter = creative_inventory[player_name].filter or ""
pagenum = math.floor(pagenum) pagenum = math.floor(pagenum)
local pagemax = math.floor((creative_inventory.creative_inventory_size-1) / (6*4) + 1) local pagemax = math.floor((creative_inventory[player_name].size - 1) / (3*8) + 1)
player:set_inventory_formspec( tab_id = tab_id or 2
"size[13,7.5]"..
--"image[6,0.6;1,2;player.png]".. player:set_inventory_formspec([[
default.gui_bg.. size[8,8.6]
default.gui_bg_img.. image[4.06,3.4;0.8,0.8;trash_icon.png]
default.gui_slots.. list[current_player;main;0,4.7;8,1;]
"list[current_player;main;5,3.5;8,1;]".. list[current_player;main;0,5.85;8,3;8]
"list[current_player;main;5,4.75;8,3;8]".. list[detached:creative_trash;main;4,3.3;1,1;]
"list[current_player;craft;8,0;3,3;]".. tablecolumns[color;text;color;text]
"list[current_player;craftpreview;12,1;1,1;]".. tableoptions[background=#00000000;highlight=#00000000;border=false]
"image[11,1;1,1;gui_furnace_arrow_bg.png^[transformR270]".. button[5.4,3.2;0.8,0.9;creative_prev;<]
"list[detached:creative;main;0.3,0.5;4,6;"..tostring(start_i).."]".. button[7.25,3.2;0.8,0.9;creative_next;>]
"label[2.0,6.55;"..tostring(pagenum).."/"..tostring(pagemax).."]".. button[2.1,3.4;0.8,0.5;search;?]
"button[0.3,6.5;1.6,1;creative_prev;<<]".. button[2.75,3.4;0.8,0.5;clear;X]
"button[2.7,6.5;1.6,1;creative_next;>>]".. tooltip[search;Search]
"listring[current_player;main]".. tooltip[clear;Reset]
"listring[current_player;craft]".. listring[current_player;main]
"listring[current_player;main]".. ]] ..
"listring[detached:creative;main]".. "field[0.3,3.5;2.2,1;filter;;".. filter .."]"..
"label[5,1.5;Trash:]".. "listring[detached:creative_".. player_name ..";main]"..
"list[detached:creative_trash;main;5,2;1,1;]".. "tabheader[0,0;tabs;Crafting,All,Nodes,Tools,Items;".. tostring(tab_id) ..";true;false]"..
default.get_hotbar_bg(5,3.5) "list[detached:creative_".. player_name ..";main;0,0;8,3;".. tostring(start_i) .."]"..
"table[6.05,3.35;1.15,0.5;pagenum;#FFFF00,".. tostring(pagenum) ..",#FFFFFF,/ ".. tostring(pagemax) .."]"..
default.get_hotbar_bg(0,4.7)..
default.gui_bg .. default.gui_bg_img .. default.gui_slots
) )
end end
creative_inventory.set_crafting_formspec = function(player)
player:set_inventory_formspec([[
size[8,8.6]
list[current_player;craft;2,0.75;3,3;]
list[current_player;craftpreview;6,1.75;1,1;]
list[current_player;main;0,4.7;8,1;]
list[current_player;main;0,5.85;8,3;8]
list[detached:creative_trash;main;0,2.75;1,1;]
image[0.06,2.85;0.8,0.8;trash_icon.png]
image[5,1.75;1,1;gui_furnace_arrow_bg.png^[transformR270]
tabheader[0,0;tabs;Crafting,All,Nodes,Tools,Items;1;true;false]
listring[current_player;main]
listring[current_player;craft]
]] ..
default.get_hotbar_bg(0,4.7)..
default.gui_bg .. default.gui_bg_img .. default.gui_slots
)
end
minetest.register_on_joinplayer(function(player) minetest.register_on_joinplayer(function(player)
-- If in creative mode, modify player's inventory forms -- If in creative mode, modify player's inventory forms
if not minetest.setting_getbool("creative_mode") then if not minetest.setting_getbool("creative_mode") then
return return
end end
creative_inventory.set_creative_formspec(player, 0, 1) creative_inventory.init_creative_inventory(player)
creative_inventory.set_creative_formspec(player, 0, 1, 2)
end) end)
minetest.register_on_player_receive_fields(function(player, formname, fields) minetest.register_on_player_receive_fields(function(player, formname, fields)
if not minetest.setting_getbool("creative_mode") then if not minetest.setting_getbool("creative_mode") then
return return
end end
-- Figure out current page from formspec -- Figure out current page from formspec
local current_page = 0 local player_name = player:get_player_name()
local formspec = player:get_inventory_formspec() local formspec = player:get_inventory_formspec()
local start_i = string.match(formspec, "list%[detached:creative;main;[%d.]+,[%d.]+;[%d.]+,[%d.]+;(%d+)%]") local filter = formspec:match("filter;;([%w_:]+)") or ""
local start_i = formspec:match("list%[detached:creative_".. player_name ..";.*;(%d+)%]")
local tab_id = tonumber(formspec:match("tabheader%[.*;(%d+)%;.*%]"))
local inv_size = creative_inventory[player_name].size
start_i = tonumber(start_i) or 0 start_i = tonumber(start_i) or 0
if fields.creative_prev then if fields.quit then
start_i = start_i - 4*6 if tab_id == 1 then
end creative_inventory.set_crafting_formspec(player)
if fields.creative_next then end
start_i = start_i + 4*6 elseif fields.tabs then
end if tonumber(fields.tabs) == 1 then
creative_inventory.set_crafting_formspec(player)
else
creative_inventory.update(player_name, filter, tonumber(fields.tabs))
creative_inventory.set_creative_formspec(player, 0, 1, tonumber(fields.tabs))
end
elseif fields.clear then
creative_inventory[player_name].filter = ""
creative_inventory.update(player_name, nil, tab_id)
creative_inventory.set_creative_formspec(player, 0, 1, tab_id)
elseif fields.search then
creative_inventory[player_name].filter = fields.filter:lower()
creative_inventory.update(player_name, fields.filter:lower(), tab_id)
creative_inventory.set_creative_formspec(player, 0, 1, tab_id)
else
if fields.creative_prev then
start_i = start_i - 3*8
if start_i < 0 then
start_i = inv_size - (inv_size % (3*8))
if inv_size == start_i then
start_i = math.max(0, inv_size - (3*8))
end
end
elseif fields.creative_next then
start_i = start_i + 3*8
if start_i >= inv_size then
start_i = 0
end
end
if start_i < 0 then creative_inventory.set_creative_formspec(player, start_i, start_i / (3*8) + 1, tab_id)
start_i = start_i + 4*6
end end
if start_i >= creative_inventory.creative_inventory_size then
start_i = start_i - 4*6
end
if start_i < 0 or start_i >= creative_inventory.creative_inventory_size then
start_i = 0
end
creative_inventory.set_creative_formspec(player, start_i, start_i / (6*4) + 1)
end) end)
if minetest.setting_getbool("creative_mode") then if minetest.setting_getbool("creative_mode") then
@ -137,7 +211,7 @@ if minetest.setting_getbool("creative_mode") then
minetest.register_item(":", { minetest.register_item(":", {
type = "none", type = "none",
wield_image = "wieldhand.png", wield_image = "wieldhand.png",
wield_scale = {x=1,y=1,z=2.5}, wield_scale = {x=1, y=1, z=2.5},
range = 10, range = 10,
tool_capabilities = { tool_capabilities = {
full_punch_interval = 0.5, full_punch_interval = 0.5,
@ -164,7 +238,7 @@ if minetest.setting_getbool("creative_mode") then
end end
local inv = digger:get_inventory() local inv = digger:get_inventory()
if inv then if inv then
for _,item in ipairs(drops) do for _, item in ipairs(drops) do
item = ItemStack(item):get_name() item = ItemStack(item):get_name()
if not inv:contains_item("main", item) then if not inv:contains_item("main", item) then
inv:add_item("main", item) inv:add_item("main", item)
@ -172,5 +246,4 @@ if minetest.setting_getbool("creative_mode") then
end end
end end
end end
end end

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 B

View File

@ -148,6 +148,14 @@ BlockMen (CC BY-SA 3.0):
heart.png heart.png
gui_*.png gui_*.png
sofar (CC BY-SA 3.0):
default_book_written.png, based on default_book.png
default_aspen_sapling
default_aspen_leaves
default_aspen_tree
default_aspen_tree_top, derived from default_pine_tree_top (by paramat)
default_aspen_wood, derived from default_pine_wood (by paramat)
Neuromancer (CC BY-SA 2.0): Neuromancer (CC BY-SA 2.0):
default_cobble.png, based on texture by Brane praefect default_cobble.png, based on texture by Brane praefect
default_mossycobble.png, based on texture by Brane praefect default_mossycobble.png, based on texture by Brane praefect

View File

@ -68,9 +68,9 @@ minetest.register_alias("steel_ingot", "default:steel_ingot")
minetest.register_alias("clay_brick", "default:clay_brick") minetest.register_alias("clay_brick", "default:clay_brick")
minetest.register_alias("snow", "default:snow") minetest.register_alias("snow", "default:snow")
-- 'mese_block' was used for a while for the block form of mese
minetest.register_alias("default:mese_block", "default:mese")
-- Aliases for corrected pine node names -- Aliases for corrected pine node names
minetest.register_alias("default:pinetree", "default:pine_tree") minetest.register_alias("default:pinetree", "default:pine_tree")
minetest.register_alias("default:pinewood", "default:pine_wood") minetest.register_alias("default:pinewood", "default:pine_wood")
-- Mese now comes in the form of blocks, ore, crystal and fragments
minetest.register_alias("default:mese", "default:mese_block")

View File

@ -35,6 +35,13 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
output = 'default:aspen_wood 4',
recipe = {
{'default:aspen_tree'},
}
})
minetest.register_craft({ minetest.register_craft({
output = 'default:stick 9', output = 'default:stick 9',
recipe = { recipe = {

View File

@ -85,12 +85,42 @@ minetest.register_craftitem("default:book", {
minetest.register_craftitem("default:book_written", { minetest.register_craftitem("default:book_written", {
description = "Book With Text", description = "Book With Text",
inventory_image = "default_book.png", inventory_image = "default_book_written.png",
groups = {book=1, not_in_creative_inventory=1}, groups = {book=1, not_in_creative_inventory=1},
stack_max = 1, stack_max = 1,
on_use = book_on_use, on_use = book_on_use,
}) })
minetest.register_craft({
type = "shapeless",
output = "default:book_written",
recipe = { "default:book", "default:book_written" }
})
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
if itemstack:get_name() ~= "default:book_written" then
return
end
local copy = ItemStack("default:book_written")
local original
local index
for i = 1, player:get_inventory():get_size("craft") do
if old_craft_grid[i]:get_name() == "default:book_written" then
original = old_craft_grid[i]
index = i
end
end
if not original then
return
end
local copymeta = original:get_metadata()
-- copy of the book held by player's mouse cursor
itemstack:set_metadata(copymeta)
-- put the book with metadata back in the craft grid
craft_inv:set_stack("craft", index, original)
end)
minetest.register_craftitem("default:coal_lump", { minetest.register_craftitem("default:coal_lump", {
description = "Coal Lump", description = "Coal Lump",
wield_scale = {x = 1, y = 1, z = 2}, wield_scale = {x = 1, y = 1, z = 2},

View File

@ -53,7 +53,7 @@ function default.register_ores()
-- Clay -- Clay
minetest.register_ore({ minetest.register_ore({
ore_type = "blob", ore_type = "blob",
ore = "default:clay", ore = "default:clay",
wherein = {"default:sand"}, wherein = {"default:sand"},
@ -63,75 +63,76 @@ function default.register_ores()
y_max = 0, y_max = 0,
noise_threshhold = 0.0, noise_threshhold = 0.0,
noise_params = { noise_params = {
offset = 0.5, offset = 0.35,
scale = 0.2, scale = 0.2,
spread = {x = 5, y = 5, z = 5}, spread = {x = 5, y = 5, z = 5},
seed = -316, seed = -316,
octaves = 1, octaves = 1,
persist = 0.0 persist = 0.5
}, },
}) })
-- Sand -- Sand
minetest.register_ore({ minetest.register_ore({
ore_type = "blob", ore_type = "blob",
ore = "default:sand", ore = "default:sand",
wherein = {"default:stone"}, wherein = {"default:stone", "default:sandstone",
"default:desert_stone"},
clust_scarcity = 24 * 24 * 24, clust_scarcity = 24 * 24 * 24,
clust_size = 7, clust_size = 7,
y_min = -63, y_min = -63,
y_max = 4, y_max = 4,
noise_threshhold = 0.0, noise_threshhold = 0,
noise_params = { noise_params = {
offset = 0.5, offset = 0.35,
scale = 0.2, scale = 0.2,
spread = {x = 5, y = 5, z = 5}, spread = {x = 5, y = 5, z = 5},
seed = 2316, seed = 2316,
octaves = 1, octaves = 1,
persist = 0.0 persist = 0.5
}, },
}) })
-- Dirt -- Dirt
minetest.register_ore({ minetest.register_ore({
ore_type = "blob", ore_type = "blob",
ore = "default:dirt", ore = "default:dirt",
wherein = {"default:stone"}, wherein = {"default:stone", "default:sandstone"},
clust_scarcity = 24 * 24 * 24, clust_scarcity = 24 * 24 * 24,
clust_size = 7, clust_size = 7,
y_min = -63, y_min = -63,
y_max = 31000, y_max = 31000,
noise_threshhold = 0.0, noise_threshhold = 0,
noise_params = { noise_params = {
offset = 0.5, offset = 0.35,
scale = 0.2, scale = 0.2,
spread = {x = 5, y = 5, z = 5}, spread = {x = 5, y = 5, z = 5},
seed = 17676, seed = 17676,
octaves = 1, octaves = 1,
persist = 0.0 persist = 0.5
}, },
}) })
-- Gravel -- Gravel
minetest.register_ore({ minetest.register_ore({
ore_type = "blob", ore_type = "blob",
ore = "default:gravel", ore = "default:gravel",
wherein = {"default:stone"}, wherein = {"default:stone"},
clust_scarcity = 24 * 24 * 24, clust_scarcity = 24 * 24 * 24,
clust_size = 7, clust_size = 7,
y_min = -31000, y_min = -31000,
y_max = 31000, y_max = 31000,
noise_threshhold = 0.0, noise_threshhold = 0,
noise_params = { noise_params = {
offset = 0.5, offset = 0.35,
scale = 0.2, scale = 0.2,
spread = {x = 5, y = 5, z = 5}, spread = {x = 5, y = 5, z = 5},
seed = 766, seed = 766,
octaves = 1, octaves = 1,
persist = 0.0 persist = 0.5
}, },
}) })
@ -202,8 +203,8 @@ function default.register_ores()
clust_scarcity = 9 * 9 * 9, clust_scarcity = 9 * 9 * 9,
clust_num_ores = 5, clust_num_ores = 5,
clust_size = 3, clust_size = 3,
y_min = -63, y_min = -63,
y_max = -16, y_max = -16,
}) })
minetest.register_ore({ minetest.register_ore({
@ -215,6 +216,7 @@ function default.register_ores()
clust_size = 3, clust_size = 3,
y_min = -30000, y_min = -30000,
y_max = -64, y_max = -64,
flags = "absheight",
}) })
minetest.register_ore({ minetest.register_ore({
@ -226,6 +228,7 @@ function default.register_ores()
clust_size = 6, clust_size = 6,
y_min = -30000, y_min = -30000,
y_max = -64, y_max = -64,
flags = "absheight",
}) })
minetest.register_ore({ minetest.register_ore({
@ -262,6 +265,7 @@ function default.register_ores()
clust_size = 3, clust_size = 3,
y_min = -1024, y_min = -1024,
y_max = -256, y_max = -256,
flags = "absheight",
}) })
minetest.register_ore({ minetest.register_ore({
@ -273,6 +277,7 @@ function default.register_ores()
clust_size = 2, clust_size = 2,
y_min = -30000, y_min = -30000,
y_max = -1024, y_max = -1024,
flags = "absheight",
}) })
minetest.register_ore({ minetest.register_ore({
@ -337,6 +342,7 @@ function default.register_ores()
clust_size = 2, clust_size = 2,
y_min = -255, y_min = -255,
y_max = -64, y_max = -64,
flags = "absheight",
}) })
minetest.register_ore({ minetest.register_ore({
@ -348,6 +354,7 @@ function default.register_ores()
clust_size = 3, clust_size = 3,
y_min = -30000, y_min = -30000,
y_max = -256, y_max = -256,
flags = "absheight",
}) })
-- Diamond -- Diamond
@ -381,9 +388,9 @@ function default.register_ores()
ore = "default:stone_with_diamond", ore = "default:stone_with_diamond",
wherein = "default:stone", wherein = "default:stone",
clust_scarcity = 30 * 30 * 30, clust_scarcity = 30 * 30 * 30,
clust_num_ores = 64, clust_num_ores = 32,
clust_size = 5, clust_size = 5,
y_max = -1024, y_max = -4096,
y_min = -30000, y_min = -30000,
}) })
@ -698,6 +705,24 @@ function default.register_biomes()
humidity_point = 35, humidity_point = 35,
}) })
minetest.register_biome({
name = "tundra_beach",
--node_dust = "",
node_top = "default:gravel",
depth_top = 1,
node_filler = "default:gravel",
depth_filler = 2,
--node_stone = "",
--node_water_top = "",
--depth_water_top = ,
--node_water = "",
--node_river_water = "",
y_min = -3,
y_max = 1,
heat_point = 15,
humidity_point = 35,
})
minetest.register_biome({ minetest.register_biome({
name = "tundra_ocean", name = "tundra_ocean",
--node_dust = "", --node_dust = "",
@ -711,7 +736,7 @@ function default.register_biomes()
--node_water = "", --node_water = "",
--node_river_water = "", --node_river_water = "",
y_min = -112, y_min = -112,
y_max = 1, y_max = -4,
heat_point = 15, heat_point = 15,
humidity_point = 35, humidity_point = 35,
}) })
@ -767,12 +792,30 @@ function default.register_biomes()
--depth_water_top = , --depth_water_top = ,
--node_water = "", --node_water = "",
--node_river_water = "", --node_river_water = "",
y_min = 5, y_min = 6,
y_max = 31000, y_max = 31000,
heat_point = 40, heat_point = 40,
humidity_point = 35, humidity_point = 35,
}) })
minetest.register_biome({
name = "stone_grassland_dunes",
--node_dust = "",
node_top = "default:sand",
depth_top = 1,
node_filler = "default:sand",
depth_filler = 2,
--node_stone = "",
--node_water_top = "",
--depth_water_top = ,
--node_water = "",
--node_river_water = "",
y_min = 5,
y_max = 5,
heat_point = 40,
humidity_point = 35,
})
minetest.register_biome({ minetest.register_biome({
name = "stone_grassland_ocean", name = "stone_grassland_ocean",
--node_dust = "", --node_dust = "",
@ -804,12 +847,30 @@ function default.register_biomes()
--depth_water_top = , --depth_water_top = ,
--node_water = "", --node_water = "",
--node_river_water = "", --node_river_water = "",
y_min = 5, y_min = 6,
y_max = 31000, y_max = 31000,
heat_point = 40, heat_point = 40,
humidity_point = 65, humidity_point = 65,
}) })
minetest.register_biome({
name = "coniferous_forest_dunes",
--node_dust = "",
node_top = "default:sand",
depth_top = 1,
node_filler = "default:sand",
depth_filler = 3,
--node_stone = "",
--node_water_top = "",
--depth_water_top = ,
--node_water = "",
--node_river_water = "",
y_min = 5,
y_max = 5,
heat_point = 40,
humidity_point = 65,
})
minetest.register_biome({ minetest.register_biome({
name = "coniferous_forest_ocean", name = "coniferous_forest_ocean",
--node_dust = "", --node_dust = "",
@ -841,12 +902,30 @@ function default.register_biomes()
--depth_water_top = , --depth_water_top = ,
--node_water = "", --node_water = "",
--node_river_water = "", --node_river_water = "",
y_min = 5, y_min = 6,
y_max = 31000, y_max = 31000,
heat_point = 60, heat_point = 60,
humidity_point = 35, humidity_point = 35,
}) })
minetest.register_biome({
name = "sandstone_grassland_dunes",
--node_dust = "",
node_top = "default:sand",
depth_top = 1,
node_filler = "default:sand",
depth_filler = 2,
node_stone = "default:sandstone",
--node_water_top = "",
--depth_water_top = ,
--node_water = "",
--node_river_water = "",
y_min = 5,
y_max = 5,
heat_point = 60,
humidity_point = 35,
})
minetest.register_biome({ minetest.register_biome({
name = "sandstone_grassland_ocean", name = "sandstone_grassland_ocean",
--node_dust = "", --node_dust = "",
@ -1086,6 +1165,10 @@ function default.register_biomes()
y_max = -113, y_max = -113,
heat_point = 50, heat_point = 50,
humidity_point = 50, humidity_point = 50,
node_underwater = "default:sand",
height_shore = 3,
node_shore_filler = "default:sand",
node_shore_top = "default:sand",
}) })
end end
@ -1117,7 +1200,7 @@ function default.register_mgv6_decorations()
y_max = 1, y_max = 1,
decoration = "default:papyrus", decoration = "default:papyrus",
height = 2, height = 2,
height_max = 4, y_max = 4,
spawn_by = "default:water_source", spawn_by = "default:water_source",
num_spawn_by = 1, num_spawn_by = 1,
}) })
@ -1140,7 +1223,7 @@ function default.register_mgv6_decorations()
y_max = 30, y_max = 30,
decoration = "default:cactus", decoration = "default:cactus",
height = 3, height = 3,
height_max = 4, y_max = 4,
}) })
-- Long grasses -- Long grasses
@ -1217,7 +1300,9 @@ local function register_grass_decoration(offset, scale, length)
persist = 0.6 persist = 0.6
}, },
biomes = {"stone_grassland", "sandstone_grassland", biomes = {"stone_grassland", "sandstone_grassland",
"deciduous_forest", "coniferous_forest"}, "deciduous_forest", "coniferous_forest",
"stone_grassland_dunes", "sandstone_grassland_dunes",
"coniferous_forest_dunes"},
y_min = 1, y_min = 1,
y_max = 31000, y_max = 31000,
decoration = "default:grass_"..length, decoration = "default:grass_"..length,
@ -1247,7 +1332,7 @@ end
function default.register_decorations() function default.register_decorations()
minetest.clear_registered_decorations() minetest.clear_registered_decorations()
-- Apple tree -- Apple tree and log
minetest.register_decoration({ minetest.register_decoration({
deco_type = "schematic", deco_type = "schematic",
@ -1268,7 +1353,40 @@ function default.register_decorations()
flags = "place_center_x, place_center_z", flags = "place_center_x, place_center_z",
}) })
-- Jungle tree minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:dirt_with_grass"},
sidelen = 16,
noise_params = {
offset = 0.002,
scale = 0.001,
spread = {x = 250, y = 250, z = 250},
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = {"deciduous_forest"},
y_min = 1,
y_max = 31000,
schematic = {
size = { x = 3, y = 3, z = 1},
data = {
{ name = "air", prob = 0 },
{ name = "air", prob = 0 },
{ name = "air", prob = 0 },
{ name = "default:tree", param2 = 12, prob = 191 },
{ name = "default:tree", param2 = 12 },
{ name = "default:tree", param2 = 12, prob = 127 },
{ name = "air", prob = 0 },
{ name = "flowers:mushroom_brown", prob = 63 },
{ name = "air", prob = 0 },
},
},
flags = "place_center_x",
rotation = "random",
})
-- Jungle tree and log
minetest.register_decoration({ minetest.register_decoration({
deco_type = "schematic", deco_type = "schematic",
@ -1283,7 +1401,33 @@ function default.register_decorations()
rotation = "random", rotation = "random",
}) })
-- Taiga and temperate coniferous forest pine tree minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:dirt_with_grass", "default:dirt"},
sidelen = 80,
fill_ratio = 0.01,
biomes = {"rainforest", "rainforest_swamp"},
y_min = 1,
y_max = 31000,
schematic = {
size = { x = 3, y = 3, z = 1},
data = {
{ name = "air", prob = 0 },
{ name = "air", prob = 0 },
{ name = "air", prob = 0 },
{ name = "default:jungletree", param2 = 12, prob = 191 },
{ name = "default:jungletree", param2 = 12 },
{ name = "default:jungletree", param2 = 12, prob = 127 },
{ name = "air", prob = 0 },
{ name = "flowers:mushroom_brown", prob = 127 },
{ name = "air", prob = 0 },
},
},
flags = "place_center_x",
rotation = "random",
})
-- Taiga and temperate coniferous forest pine tree and log
minetest.register_decoration({ minetest.register_decoration({
deco_type = "schematic", deco_type = "schematic",
@ -1304,7 +1448,33 @@ function default.register_decorations()
flags = "place_center_x, place_center_z", flags = "place_center_x, place_center_z",
}) })
-- Acacia tree minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
sidelen = 80,
fill_ratio = 0.003,
biomes = {"taiga", "coniferous_forest"},
y_min = 1,
y_max = 31000,
schematic = {
size = { x = 3, y = 3, z = 1},
data = {
{ name = "air", prob = 0 },
{ name = "air", prob = 0 },
{ name = "air", prob = 0 },
{ name = "default:pine_tree", param2 = 12, prob = 191 },
{ name = "default:pine_tree", param2 = 12 },
{ name = "default:pine_tree", param2 = 12, prob = 127 },
{ name = "air", prob = 0 },
{ name = "flowers:mushroom_red", prob = 63 },
{ name = "air", prob = 0 },
},
},
flags = "place_center_x",
rotation = "random",
})
-- Acacia tree and log
minetest.register_decoration({ minetest.register_decoration({
deco_type = "schematic", deco_type = "schematic",
@ -1326,6 +1496,90 @@ function default.register_decorations()
rotation = "random", rotation = "random",
}) })
minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:dirt_with_dry_grass"},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.001,
spread = {x = 250, y = 250, z = 250},
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = {"savanna"},
y_min = 1,
y_max = 31000,
schematic = {
size = { x = 3, y = 2, z = 1},
data = {
{ name = "air", prob = 0 },
{ name = "air", prob = 0 },
{ name = "air", prob = 0 },
{ name = "default:acacia_tree", param2 = 12, prob = 191 },
{ name = "default:acacia_tree", param2 = 12 },
{ name = "default:acacia_tree", param2 = 12, prob = 127 },
},
},
flags = "place_center_x",
rotation = "random",
})
-- Aspen tree and log
minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:dirt_with_grass"},
sidelen = 16,
noise_params = {
offset = 0.01,
scale = -0.02,
spread = {x = 250, y = 250, z = 250},
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = {"deciduous_forest"},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:dirt_with_grass"},
sidelen = 16,
noise_params = {
offset = 0.0005,
scale = -0.001,
spread = {x = 250, y = 250, z = 250},
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = {"deciduous_forest"},
y_min = 1,
y_max = 31000,
schematic = {
size = { x = 3, y = 3, z = 1},
data = {
{ name = "air", prob = 0 },
{ name = "air", prob = 0 },
{ name = "air", prob = 0 },
{ name = "default:aspen_tree", param2 = 12 },
{ name = "default:aspen_tree", param2 = 12 },
{ name = "default:aspen_tree", param2 = 12, prob = 127 },
{ name = "flowers:mushroom_red", prob = 63 },
{ name = "flowers:mushroom_brown", prob = 63 },
{ name = "air", prob = 0 },
},
},
flags = "place_center_x",
rotation = "random",
})
-- Large cactus -- Large cactus
minetest.register_decoration({ minetest.register_decoration({
@ -1367,7 +1621,7 @@ function default.register_decorations()
y_max = 31000, y_max = 31000,
decoration = "default:cactus", decoration = "default:cactus",
height = 2, height = 2,
height_max = 5, y_max = 5,
}) })
-- Papyrus -- Papyrus
@ -1481,13 +1735,13 @@ function default.generate_nyancats(minp, maxp, seed)
local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1) local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
local pr = PseudoRandom(seed + 9324342) local pr = PseudoRandom(seed + 9324342)
local max_num_nyancats = math.floor(volume / (16 * 16 * 16)) local max_num_nyancats = math.floor(volume / (16 * 16 * 16))
for i = 1, max_num_nyancats do for i = 1,max_num_nyancats do
if pr:next(0, 1000) == 0 then if pr:next(0, 1000) == 0 then
local x0 = pr:next(minp.x, maxp.x) local x0 = pr:next(minp.x, maxp.x)
local y0 = pr:next(minp.y, maxp.y) local y0 = pr:next(minp.y, maxp.y)
local z0 = pr:next(minp.z, maxp.z) local z0 = pr:next(minp.z, maxp.z)
local p0 = {x = x0, y = y0, z = z0} local p0 = { x =x0, y = y0, z = z0}
default.make_nyancat(p0, pr:next(0, 3), pr:next(3, 15)) default.make_nyancat(p0, pr:next(0, 3), pr:next(10, 15))
end end
end end
end end
@ -1506,8 +1760,8 @@ if mg_params.mgname == "v6" then
default.register_mgv6_decorations() default.register_mgv6_decorations()
minetest.register_on_generated(default.generate_nyancats) minetest.register_on_generated(default.generate_nyancats)
elseif mg_params.mgname ~= "singlenode" then elseif mg_params.mgname ~= "singlenode" then
default.register_ores()
default.register_biomes() default.register_biomes()
default.register_ores()
default.register_decorations() default.register_decorations()
minetest.register_on_generated(default.generate_nyancats) minetest.register_on_generated(default.generate_nyancats)
end end

View File

@ -80,6 +80,11 @@ default:acacia_wood
default:acacia_leaves default:acacia_leaves
default:acacia_sapling default:acacia_sapling
default:aspen_tree
default:aspen_wood
default:aspen_leaves
default:aspen_sapling
default:cherry_tree default:cherry_tree
default:cherry_log default:cherry_log
default:cherry_plank default:cherry_plank
@ -195,9 +200,13 @@ default:nyancat_rainbow
minetest.register_node("default:stone", { minetest.register_node("default:stone", {
description = "Stone", description = "Stone",
tiles = {"default_stone.png"}, tiles = {"default_stone.png"},
is_ground_content = false,
groups = {cracky = 3, stone = 1}, groups = {cracky = 3, stone = 1},
drop = 'default:cobble', drop = {
legacy_mineral = true, items = {
{items = {"default:cobble"}},
},
},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
}) })
@ -230,7 +239,7 @@ minetest.register_node("default:mossycobble", {
description = "Mossy Cobblestone", description = "Mossy Cobblestone",
tiles = {"default_mossycobble.png"}, tiles = {"default_mossycobble.png"},
is_ground_content = false, is_ground_content = false,
groups = {cracky = 3, stone = 1}, groups = {cracky=3, stone=1},
drop = "default:mossycobble", drop = "default:mossycobble",
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
}) })
@ -239,9 +248,9 @@ minetest.register_node("default:mossycobble", {
minetest.register_node("default:desert_stone", { minetest.register_node("default:desert_stone", {
description = "Desert Stone", description = "Desert Stone",
tiles = {"default_desert_stone.png"}, tiles = {"default_desert_stone.png"},
legacy_mineral = true,
groups = {crumbly = 1, cracky = 3, stone = 1}, groups = {crumbly = 1, cracky = 3, stone = 1},
drop = 'default:desert_cobble', drop = 'default:desert_cobble',
legacy_mineral = true,
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
}) })

View File

@ -95,7 +95,7 @@ minetest.register_on_joinplayer(function(player)
default.player_attached[player:get_player_name()] = false default.player_attached[player:get_player_name()] = false
default.player_set_model(player, "character.b3d") default.player_set_model(player, "character.b3d")
player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30) player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30)
-- set GUI -- set GUI
if not minetest.setting_getbool("creative_mode") then if not minetest.setting_getbool("creative_mode") then
player:set_inventory_formspec(default.gui_survival_form) player:set_inventory_formspec(default.gui_survival_form)

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

View File

@ -14,7 +14,7 @@ minetest.register_item(":", {
snappy = {times = {[3] = 0.25}, uses = 0, maxlevel = 1}, snappy = {times = {[3] = 0.25}, uses = 0, maxlevel = 1},
oddly_breakable_by_hand = {times = {[1] = 3.50, [2] = 2.00, [3] = 0.65}, uses = 0} oddly_breakable_by_hand = {times = {[1] = 3.50, [2] = 2.00, [3] = 0.65}, uses = 0}
}, },
damage_groups = {fleshy=1}, damage_groups = {fleshy = 2},
} }
}) })

View File

@ -16,9 +16,9 @@ function default.can_grow(pos)
if is_soil == 0 then if is_soil == 0 then
return false return false
end end
local light_level = minetest.get_node_light(pos) local ll = minetest.get_node_light(pos)
if not light_level or light_level < 13 then if not ll or ll < 13 then -- Minimum light level for growth
return false return false -- matches grass, wheat and cotton
end end
return true return true
end end
@ -28,9 +28,10 @@ end
minetest.register_abm({ minetest.register_abm({
nodenames = {"default:sapling", "default:junglesapling", nodenames = {"default:sapling", "default:junglesapling",
"default:pine_sapling", "default:acacia_sapling"}, "default:pine_sapling", "default:acacia_sapling",
interval = 10, "default:aspen_sapling"},
chance = 50, interval = 5,
chance = 40,
action = function(pos, node) action = function(pos, node)
if not default.can_grow(pos) then if not default.can_grow(pos) then
return return
@ -65,6 +66,10 @@ minetest.register_abm({
minetest.log("action", "An acacia sapling grows into a tree at ".. minetest.log("action", "An acacia sapling grows into a tree at "..
minetest.pos_to_string(pos)) minetest.pos_to_string(pos))
default.grow_new_acacia_tree(pos) default.grow_new_acacia_tree(pos)
elseif node.name == "default:aspen_sapling" then
minetest.log("action", "An aspen sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_aspen_tree(pos)
end end
end end
}) })
@ -360,7 +365,6 @@ function default.grow_pine_tree(pos)
vm:update_map() vm:update_map()
end end
-- New apple tree -- New apple tree
function default.grow_new_apple_tree(pos) function default.grow_new_apple_tree(pos)
@ -396,6 +400,14 @@ function default.grow_new_acacia_tree(pos)
path, random, nil, false) path, random, nil, false)
end end
-- New aspen tree
function default.grow_new_aspen_tree(pos)
local path = minetest.get_modpath("default") .. "/schematics/aspen_tree_from_sapling.mts"
minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2},
path, 0, nil, false)
end
-- From BFD: -- From BFD:
minetest.register_node("default:mg_cherry_sapling", { minetest.register_node("default:mg_cherry_sapling", {

View File

@ -6,6 +6,7 @@ License of source code:
----------------------- -----------------------
Copyright (C) 2012 PilzAdam Copyright (C) 2012 PilzAdam
modified by BlockMen (added sounds, glassdoors[glass, obsidian glass], trapdoor) modified by BlockMen (added sounds, glassdoors[glass, obsidian glass], trapdoor)
Steel trapdoor added by sofar.
This program is free software. It comes without any warranty, to This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it the extent permitted by applicable law. You can redistribute it
@ -27,14 +28,18 @@ following Textures created by BlockMen (WTFPL):
door_obsidian_glass_side.png door_obsidian_glass_side.png
following textures created by celeron55 (CC BY-SA 3.0): following textures created by celeron55 (CC BY-SA 3.0):
door_trapdoor_side.png
door_glass_a.png door_glass_a.png
door_glass_b.png door_glass_b.png
following Textures created by PenguinDad (CC BY-SA 4.0): following Textures created by PenguinDad (CC BY-SA 4.0):
door_glass.png door_glass.png
door_obsidian_glass.png door_obsidian_glass.png
following textures created by sofar (CC-BY-SA-3.0)
doors_trapdoor_steel.png
doors_trapdoor_steel_side.png
door_trapdoor_side.png
All other textures (created by PilzAdam): WTFPL All other textures (created by PilzAdam): WTFPL

View File

@ -28,19 +28,19 @@ function doors3.get_pos(pos, dir, p1, b)
else else
if p1 == 1 then if p1 == 1 then
if dir == 1 then if dir == 1 then
pos2.x=pos2.x+1--ok pos2.x=pos2.x+1
elseif dir == 2 then elseif dir == 2 then
pos2.z=pos2.z-1 pos2.z=pos2.z-1
elseif dir == 3 then elseif dir == 3 then
pos2.x=pos2.x-1 pos2.x=pos2.x-1
else else
pos2.z=pos2.z+1--ok pos2.z=pos2.z+1
end end
else else
if dir == 1 then if dir == 1 then
pos2.z=pos2.z+1 pos2.z=pos2.z+1
elseif dir == 2 then elseif dir == 2 then
pos2.x=pos2.x+1--ok pos2.x=pos2.x+1
elseif dir == 3 then elseif dir == 3 then
pos2.z=pos2.z-1 pos2.z=pos2.z-1
else else
@ -246,11 +246,6 @@ function doors3.register_door(name, def)
snd_2 = def.sound_close_door snd_2 = def.sound_close_door
end end
local b = minetest.get_meta(pos):get_int("right") local b = minetest.get_meta(pos):get_int("right")
if b ~= 0 then
minetest.sound_play(snd_1, {pos = pos, gain = 0.3, max_hear_distance = 10})
else
minetest.sound_play(snd_2, {pos = pos, gain = 0.3, max_hear_distance = 10})
end
local pos2 = doors3.get_pos(pos, oldparam2, params[1], b) local pos2 = doors3.get_pos(pos, oldparam2, params[1], b)
local node = minetest.get_node_or_nil(pos2) local node = minetest.get_node_or_nil(pos2)
@ -261,6 +256,13 @@ function doors3.register_door(name, def)
end end
end end
end end
--if double doors, only 2eme play sound
if b ~= 0 then
minetest.sound_play(snd_1, {pos = pos, gain = 0.3, max_hear_distance = 10})
else
minetest.sound_play(snd_2, {pos = pos, gain = 0.3, max_hear_distance = 10})
end
end end

View File

@ -25,8 +25,8 @@ function doors.register_door(name, def)
if not def.sound_open_door then if not def.sound_open_door then
def.sound_open_door = "doors_door_open" def.sound_open_door = "doors_door_open"
end end
minetest.register_craftitem(name, { minetest.register_craftitem(name, {
description = def.description, description = def.description,
inventory_image = def.inventory_image, inventory_image = def.inventory_image,
@ -100,7 +100,7 @@ function doors.register_door(name, def)
local tt = def.tiles_top local tt = def.tiles_top
local tb = def.tiles_bottom local tb = def.tiles_bottom
local function after_dig_node(pos, name, digger) local function after_dig_node(pos, name, digger)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
if node.name == name then if node.name == name then
@ -134,16 +134,16 @@ function doors.register_door(name, def)
end end
local p2 = minetest.get_node(pos).param2 local p2 = minetest.get_node(pos).param2
p2 = params[p2+1] p2 = params[p2+1]
minetest.swap_node(pos, {name=replace_dir, param2=p2}) minetest.swap_node(pos, {name=replace_dir, param2=p2})
pos.y = pos.y-dir pos.y = pos.y-dir
minetest.swap_node(pos, {name=replace, param2=p2}) minetest.swap_node(pos, {name=replace, param2=p2})
local snd_1 = def.sound_close_door local snd_1 = def.sound_close_door
local snd_2 = def.sound_open_door local snd_2 = def.sound_open_door
if params[1] == 3 then if params[1] == 3 then
snd_1 = def.sound_open_door snd_1 = def.sound_open_door
snd_2 = def.sound_close_door snd_2 = def.sound_close_door
end end
@ -206,18 +206,18 @@ function doors.register_door(name, def)
fixed = def.selection_box_bottom fixed = def.selection_box_bottom
}, },
groups = def.groups, groups = def.groups,
after_dig_node = function(pos, oldnode, oldmetadata, digger) after_dig_node = function(pos, oldnode, oldmetadata, digger)
pos.y = pos.y+1 pos.y = pos.y+1
after_dig_node(pos, name.."_t_1", digger) after_dig_node(pos, name.."_t_1", digger)
end, end,
on_rightclick = function(pos, node, clicker) on_rightclick = function(pos, node, clicker)
if check_player_priv(pos, clicker) then if check_player_priv(pos, clicker) then
on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0}) on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
end end
end, end,
on_rotate = function(pos, node, user, mode, new_param2) on_rotate = function(pos, node, user, mode, new_param2)
return on_rotate(pos, node, 1, user, name.."_t_1", mode) return on_rotate(pos, node, 1, user, name.."_t_1", mode)
end, end,
@ -244,18 +244,18 @@ function doors.register_door(name, def)
fixed = def.selection_box_top fixed = def.selection_box_top
}, },
groups = def.groups, groups = def.groups,
after_dig_node = function(pos, oldnode, oldmetadata, digger) after_dig_node = function(pos, oldnode, oldmetadata, digger)
pos.y = pos.y-1 pos.y = pos.y-1
after_dig_node(pos, name.."_b_1", digger) after_dig_node(pos, name.."_b_1", digger)
end, end,
on_rightclick = function(pos, node, clicker) on_rightclick = function(pos, node, clicker)
if check_player_priv(pos, clicker) then if check_player_priv(pos, clicker) then
on_rightclick(pos, -1, name.."_b_1", name.."_t_2", name.."_b_2", {1,2,3,0}) on_rightclick(pos, -1, name.."_b_1", name.."_t_2", name.."_b_2", {1,2,3,0})
end end
end, end,
on_rotate = function(pos, node, user, mode, new_param2) on_rotate = function(pos, node, user, mode, new_param2)
return on_rotate(pos, node, -1, user, name.."_b_1", mode) return on_rotate(pos, node, -1, user, name.."_b_1", mode)
end, end,
@ -282,18 +282,18 @@ function doors.register_door(name, def)
fixed = def.selection_box_bottom fixed = def.selection_box_bottom
}, },
groups = def.groups, groups = def.groups,
after_dig_node = function(pos, oldnode, oldmetadata, digger) after_dig_node = function(pos, oldnode, oldmetadata, digger)
pos.y = pos.y+1 pos.y = pos.y+1
after_dig_node(pos, name.."_t_2", digger) after_dig_node(pos, name.."_t_2", digger)
end, end,
on_rightclick = function(pos, node, clicker) on_rightclick = function(pos, node, clicker)
if check_player_priv(pos, clicker) then if check_player_priv(pos, clicker) then
on_rightclick(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2}) on_rightclick(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2})
end end
end, end,
on_rotate = function(pos, node, user, mode, new_param2) on_rotate = function(pos, node, user, mode, new_param2)
return on_rotate(pos, node, 1, user, name.."_t_2", mode) return on_rotate(pos, node, 1, user, name.."_t_2", mode)
end, end,
@ -320,18 +320,18 @@ function doors.register_door(name, def)
fixed = def.selection_box_top fixed = def.selection_box_top
}, },
groups = def.groups, groups = def.groups,
after_dig_node = function(pos, oldnode, oldmetadata, digger) after_dig_node = function(pos, oldnode, oldmetadata, digger)
pos.y = pos.y-1 pos.y = pos.y-1
after_dig_node(pos, name.."_b_2", digger) after_dig_node(pos, name.."_b_2", digger)
end, end,
on_rightclick = function(pos, node, clicker) on_rightclick = function(pos, node, clicker)
if check_player_priv(pos, clicker) then if check_player_priv(pos, clicker) then
on_rightclick(pos, -1, name.."_b_2", name.."_t_1", name.."_b_1", {3,0,1,2}) on_rightclick(pos, -1, name.."_b_2", name.."_t_1", name.."_b_1", {3,0,1,2})
end end
end, end,
on_rotate = function(pos, node, user, mode, new_param2) on_rotate = function(pos, node, user, mode, new_param2)
return on_rotate(pos, node, -1, user, name.."_b_2", mode) return on_rotate(pos, node, -1, user, name.."_b_2", mode)
end, end,
@ -512,7 +512,19 @@ function doors.register_trapdoor(name, def)
local name_closed = name local name_closed = name
local name_opened = name.."_open" local name_opened = name.."_open"
def.on_rightclick = function (pos, node) local function check_player_priv(pos, player)
if not def.only_placer_can_open then
return true
end
local meta = minetest.get_meta(pos)
local pn = player:get_player_name()
return meta:get_string("doors_owner") == pn
end
def.on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
if not check_player_priv(pos, clicker) then
return
end
local newname = node.name == name_closed and name_opened or name_closed local newname = node.name == name_closed and name_opened or name_closed
local sound = false local sound = false
if node.name == name_closed then sound = def.sound_open end if node.name == name_closed then sound = def.sound_open end
@ -520,41 +532,54 @@ function doors.register_trapdoor(name, def)
if sound then if sound then
minetest.sound_play(sound, {pos = pos, gain = 0.3, max_hear_distance = 10}) minetest.sound_play(sound, {pos = pos, gain = 0.3, max_hear_distance = 10})
end end
minetest.set_node(pos, {name = newname, param1 = node.param1, param2 = node.param2}) minetest.swap_node(pos, {name = newname, param1 = node.param1, param2 = node.param2})
end end
def.on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple
-- Common trapdoor configuration -- Common trapdoor configuration
def.drawtype = "nodebox" def.drawtype = "nodebox"
def.paramtype = "light" def.paramtype = "light"
def.paramtype2 = "facedir" def.paramtype2 = "facedir"
def.is_ground_content = false def.is_ground_content = false
def.can_dig = check_player_priv
if def.only_placer_can_open then
def.after_place_node = function(pos, placer, itemstack, pointed_thing)
local pn = placer:get_player_name()
local meta = minetest.get_meta(pos)
meta:set_string("doors_owner", pn)
meta:set_string("infotext", "Owned by "..pn)
return minetest.setting_getbool("creative_mode")
end
end
local def_opened = table.copy(def) local def_opened = table.copy(def)
local def_closed = table.copy(def) local def_closed = table.copy(def)
def_closed.node_box = { def_closed.node_box = {
type = "fixed", type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5} fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5}
} }
def_closed.selection_box = { def_closed.selection_box = {
type = "fixed", type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5} fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5}
} }
def_closed.tiles = { def.tile_front, def.tile_front, def.tile_side, def.tile_side, def_closed.tiles = { def.tile_front, def.tile_front, def.tile_side, def.tile_side,
def.tile_side, def.tile_side } def.tile_side, def.tile_side }
def_opened.node_box = { def_opened.node_box = {
type = "fixed", type = "fixed",
fixed = {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5} fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5}
} }
def_opened.selection_box = { def_opened.selection_box = {
type = "fixed", type = "fixed",
fixed = {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5} fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5}
} }
def_opened.tiles = { def.tile_side, def.tile_side, def.tile_side, def.tile_side, def_opened.tiles = { def.tile_side, def.tile_side,
def.tile_front, def.tile_front } def.tile_side .. '^[transform3',
def.tile_side .. '^[transform1',
def.tile_front, def.tile_front }
def_opened.drop = name_closed def_opened.drop = name_closed
def_opened.groups.not_in_creative_inventory = 1 def_opened.groups.not_in_creative_inventory = 1
@ -576,6 +601,19 @@ doors.register_trapdoor("doors:trapdoor", {
sound_close = "doors_door_close" sound_close = "doors_door_close"
}) })
doors.register_trapdoor("doors:trapdoor_steel", {
description = "Steel Trapdoor",
inventory_image = "doors_trapdoor_steel.png",
wield_image = "doors_trapdoor_steel.png",
tile_front = "doors_trapdoor_steel.png",
tile_side = "doors_trapdoor_steel_side.png",
only_placer_can_open = true,
groups = {snappy=1, bendy=2, cracky=1, melty=2, level=2, door=1},
sounds = default.node_sound_wood_defaults(),
sound_open = "doors_door_open",
sound_close = "doors_door_close"
})
minetest.register_craft({ minetest.register_craft({
output = 'doors:trapdoor 2', output = 'doors:trapdoor 2',
recipe = { recipe = {
@ -585,6 +623,14 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
output = 'doors:trapdoor_steel',
recipe = {
{'default:steel_ingot', 'default:steel_ingot'},
{'default:steel_ingot', 'default:steel_ingot'},
}
})
doors.register_trapdoor("doors:trapdoor_cherry", { doors.register_trapdoor("doors:trapdoor_cherry", {
description = "Cherry tree trapdoor", description = "Cherry tree trapdoor",
inventory_image = "doors_trapdoor_cherry.png", inventory_image = "doors_trapdoor_cherry.png",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 B

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 B

View File

@ -147,120 +147,84 @@ minetest.register_abm({
-- Mushrooms -- Mushrooms
-- --
local mushrooms_datas = { minetest.register_node("flowers:mushroom_red", {
{"brown", 2}, description = "Red Mushroom",
{"red", -6} tiles = {"flowers_mushroom_red.png"},
} inventory_image = "flowers_mushroom_red.png",
wield_image = "flowers_mushroom_red.png",
drawtype = "plantlike",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flammable = 3, attached_node = 1},
sounds = default.node_sound_leaves_defaults(),
on_use = minetest.item_eat(-5),
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
}
})
for _, m in pairs(mushrooms_datas) do minetest.register_node("flowers:mushroom_brown", {
local name, nut = m[1], m[2] description = "Brown Mushroom",
tiles = {"flowers_mushroom_brown.png"},
-- Register fertile mushrooms inventory_image = "flowers_mushroom_brown.png",
wield_image = "flowers_mushroom_brown.png",
-- These are placed by mapgen and the growing ABM. drawtype = "plantlike",
-- These drop an infertile mushroom, and 0 to 3 spore paramtype = "light",
-- nodes with an average of 1.25 per mushroom, for sunlight_propagates = true,
-- a slow multiplication of mushrooms when farming. walkable = false,
buildable_to = true,
minetest.register_node("flowers:mushroom_fertile_" .. name, { groups = {snappy = 3, flammable = 3, attached_node = 1},
description = string.sub(string.upper(name), 0, 1) .. sounds = default.node_sound_leaves_defaults(),
string.sub(name, 2) .. " Fertile Mushroom", on_use = minetest.item_eat(1),
tiles = {"flowers_mushroom_" .. name .. ".png"}, selection_box = {
inventory_image = "flowers_mushroom_" .. name .. ".png", type = "fixed",
wield_image = "flowers_mushroom_" .. name .. ".png", fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
drawtype = "plantlike", }
paramtype = "light", })
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flammable = 3, attached_node = 1,
not_in_creative_inventory = 1},
drop = {
items = {
{items = {"flowers:mushroom_" .. name}},
{items = {"flowers:mushroom_spores_" .. name}, rarity = 4},
{items = {"flowers:mushroom_spores_" .. name}, rarity = 2},
{items = {"flowers:mushroom_spores_" .. name}, rarity = 2}
}
},
sounds = default.node_sound_leaves_defaults(),
on_use = minetest.item_eat(nut),
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
}
})
-- Register infertile mushrooms
-- These do not drop spores, to avoid the use of repeated digging
-- and placing of a single mushroom to generate unlimited spores.
minetest.register_node("flowers:mushroom_" .. name, {
description = string.sub(string.upper(name), 0, 1) ..
string.sub(name, 2) .. " Mushroom",
tiles = {"flowers_mushroom_" .. name .. ".png"},
inventory_image = "flowers_mushroom_" .. name .. ".png",
wield_image = "flowers_mushroom_" .. name .. ".png",
drawtype = "plantlike",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flammable = 3, attached_node = 1},
sounds = default.node_sound_leaves_defaults(),
on_use = minetest.item_eat(nut),
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
}
})
-- Register mushroom spores
minetest.register_node("flowers:mushroom_spores_" .. name, {
description = string.sub(string.upper(name), 0, 1) ..
string.sub(name, 2) .. " Mushroom Spores",
drawtype = "signlike",
tiles = {"flowers_mushroom_spores_" .. name .. ".png"},
inventory_image = "flowers_mushroom_spores_" .. name .. ".png",
wield_image = "flowers_mushroom_spores_" .. name .. ".png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
selection_box = {
type = "wallmounted",
},
groups = {dig_immediate = 3, attached_node = 1},
})
end
-- Register growing ABM
-- mushroom spread and death
minetest.register_abm({ minetest.register_abm({
nodenames = {"flowers:mushroom_spores_brown", "flowers:mushroom_spores_red"}, nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"},
interval = 11, interval = 11,
chance = 50, chance = 50,
action = function(pos, node) action = function(pos, node)
local node_under = minetest.get_node_or_nil({x = pos.x, if minetest.get_node_light(pos, nil) == 15 then
y = pos.y - 1, z = pos.z}) minetest.remove_node(pos)
end
local random = {
x = pos.x + math.random(-2,2),
y = pos.y + math.random(-1,1),
z = pos.z + math.random(-2,2)
}
local random_node = minetest.get_node_or_nil(random)
if not random_node then
return
end
if random_node.name ~= "air" then
return
end
local node_under = minetest.get_node_or_nil({x = random.x,
y = random.y - 1, z = random.z})
if not node_under then if not node_under then
return return
end end
if minetest.get_item_group(node_under.name, "soil") ~= 0 and if minetest.get_item_group(node_under.name, "soil") ~= 0 and
minetest.get_node_light(pos, nil) <= 13 then minetest.get_node_light(pos, nil) <= 9 and
if node.name == "flowers:mushroom_spores_brown" then minetest.get_node_light(random, nil) <= 9 then
minetest.set_node(pos, {name = "flowers:mushroom_fertile_brown"}) minetest.set_node(random, {name = node.name})
elseif node.name == "flowers:mushroom_spores_red" then
minetest.set_node(pos, {name = "flowers:mushroom_fertile_red"})
end
end end
end end
}) })
-- these old mushroom related nodes can be simplified now
minetest.register_alias("flowers:mushroom_spores_brown", "flowers:mushroom_brown")
minetest.register_alias("flowers:mushroom_spores_red", "flowers:mushroom_red")
minetest.register_alias("flowers:mushroom_fertile_brown", "flowers:mushroom_brown")
minetest.register_alias("flowers:mushroom_fertile_red", "flowers:mushroom_red")
-- --
-- Waterlily -- Waterlily

View File

@ -70,8 +70,8 @@ function flowers.register_mgv6_decorations()
register_mgv6_flower("viola") register_mgv6_flower("viola")
register_mgv6_flower("dandelion_white") register_mgv6_flower("dandelion_white")
register_mgv6_mushroom("mushroom_fertile_brown") register_mgv6_mushroom("mushroom_brown")
register_mgv6_mushroom("mushroom_fertile_red") register_mgv6_mushroom("mushroom_red")
register_mgv6_waterlily() register_mgv6_waterlily()
end end
@ -87,8 +87,8 @@ local function register_flower(seed, name)
place_on = {"default:dirt_with_grass"}, place_on = {"default:dirt_with_grass"},
sidelen = 16, sidelen = 16,
noise_params = { noise_params = {
offset = -0.02, offset = -0.015,
scale = 0.03, scale = 0.025,
spread = {x = 200, y = 200, z = 200}, spread = {x = 200, y = 200, z = 200},
seed = seed, seed = seed,
octaves = 3, octaves = 3,
@ -151,8 +151,8 @@ function flowers.register_decorations()
register_flower(1133, "viola") register_flower(1133, "viola")
register_flower(73133, "dandelion_white") register_flower(73133, "dandelion_white")
register_mushroom("mushroom_fertile_brown") register_mushroom("mushroom_brown")
register_mushroom("mushroom_fertile_red") register_mushroom("mushroom_red")
register_waterlily() register_waterlily()
end end
@ -216,7 +216,7 @@ minetest.register_decoration({
-- Mods using singlenode mapgen can call these functions to enable -- Mods using singlenode mapgen can call these functions to enable
-- the use of minetest.generate_ores or minetest.generate_decorations -- the use of minetest.generate_ores or minetest.generate_decorations
-- Enable in mapgen v6 only
local mg_params = minetest.get_mapgen_params() local mg_params = minetest.get_mapgen_params()
if mg_params.mgname == "v6" then if mg_params.mgname == "v6" then
flowers.register_mgv6_decorations() flowers.register_mgv6_decorations()

View File

@ -36,6 +36,10 @@ local function screwdriver_handler(itemstack, user, pointed_thing, mode)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local ndef = minetest.registered_nodes[node.name] local ndef = minetest.registered_nodes[node.name]
-- verify node is facedir (expected to be rotatable)
if ndef.paramtype2 ~= "facedir" then
return
end
-- Compute param2 -- Compute param2
local rotationPart = node.param2 % 32 -- get first 4 bits local rotationPart = node.param2 % 32 -- get first 4 bits
local preservePart = node.param2 - rotationPart local preservePart = node.param2 - rotationPart

View File

@ -22,6 +22,7 @@ local replace = minetest.setting_getbool("enable_stairs_replace_abm")
-- Node will be called stairs:stair_<subname> -- Node will be called stairs:stair_<subname>
function stairs.register_stair(subname, recipeitem, groups, images, description, sounds) function stairs.register_stair(subname, recipeitem, groups, images, description, sounds)
groups.stair = 1
minetest.register_node(":stairs:stair_" .. subname, { minetest.register_node(":stairs:stair_" .. subname, {
description = description, description = description,
drawtype = "mesh", drawtype = "mesh",
@ -111,6 +112,7 @@ end
-- Node will be called stairs:slab_<subname> -- Node will be called stairs:slab_<subname>
function stairs.register_slab(subname, recipeitem, groups, images, description, sounds) function stairs.register_slab(subname, recipeitem, groups, images, description, sounds)
groups.slab = 1
minetest.register_node(":stairs:slab_" .. subname, { minetest.register_node(":stairs:slab_" .. subname, {
description = description, description = description,
drawtype = "nodebox", drawtype = "nodebox",
@ -170,7 +172,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
end end
return itemstack return itemstack
end end
-- 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
@ -287,6 +289,13 @@ stairs.register_stair_and_slab("acacia_wood", "default:acacia_wood",
"Acacia Wood Slab", "Acacia Wood Slab",
default.node_sound_wood_defaults()) default.node_sound_wood_defaults())
stairs.register_stair_and_slab("aspen_wood", "default:aspen_wood",
{snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
{"default_aspen_wood.png"},
"Aspen Wood Stair",
"Aspen Wood Slab",
default.node_sound_wood_defaults())
stairs.register_stair_and_slab("stone", "default:stone", stairs.register_stair_and_slab("stone", "default:stone",
{cracky = 3}, {cracky = 3},
{"default_stone.png"}, {"default_stone.png"},
@ -335,7 +344,7 @@ stairs.register_stair_and_slab("sandstone", "default:sandstone",
"Sandstone Stair", "Sandstone Stair",
"Sandstone Slab", "Sandstone Slab",
default.node_sound_stone_defaults()) default.node_sound_stone_defaults())
stairs.register_stair_and_slab("sandstonebrick", "default:sandstonebrick", stairs.register_stair_and_slab("sandstonebrick", "default:sandstonebrick",
{crumbly = 2, cracky = 2}, {crumbly = 2, cracky = 2},
{"default_sandstone_brick.png"}, {"default_sandstone_brick.png"},

View File

@ -52,7 +52,7 @@ minetest.register_node("vessels:shelf", {
local stack = inv:get_stack(from_list, from_index) local stack = inv:get_stack(from_list, from_index)
local to_stack = inv:get_stack(to_list, to_index) local to_stack = inv:get_stack(to_list, to_index)
if to_list == "vessels" then if to_list == "vessels" then
if minetest.get_item_group(stack:get_name(), "vessel") ~= 0 if minetest.get_item_group(stack:get_name(), "vessel") ~= 0
and to_stack:is_empty() then and to_stack:is_empty() then
return 1 return 1
else else

View File

@ -9,7 +9,7 @@ local wool = {}
-- colors, and then some recipes using more specific colors for a few non-base -- colors, and then some recipes using more specific colors for a few non-base
-- colors available. When crafting, the last recipes will be checked first. -- colors available. When crafting, the last recipes will be checked first.
wool.dyes = { wool.dyes = {
{"white", "White", nil}, {"white", "White", "basecolor_white"},
{"grey", "Grey", "basecolor_grey"}, {"grey", "Grey", "basecolor_grey"},
{"black", "Black", "basecolor_black"}, {"black", "Black", "basecolor_black"},
{"red", "Red", "basecolor_red"}, {"red", "Red", "basecolor_red"},