Bugfix Release 1.1.2. The cabinet sink water sound is now looped, fixed the three level rack formspec

This commit is contained in:
Andrey2470T 2023-08-17 15:55:08 +03:00
parent 0087608bcc
commit 701a85bd10
6 changed files with 105 additions and 73 deletions

View File

@ -1,10 +1,11 @@
# MultiDecor 1.1.1. Modpack For Minetest. # MultiDecor 1.1.2. Modpack For Minetest.
![logo](https://user-images.githubusercontent.com/25750346/185758916-9acf0ba5-5953-484f-825c-347c6ca7cddd.png) ![logo](https://user-images.githubusercontent.com/25750346/185758916-9acf0ba5-5953-484f-825c-347c6ca7cddd.png)
## Description ## Description
This modpack adds various detailed furniture components, decorations and exterior stuff with various designs and styles of each epoch. Inspired by Homedecor and based on my abandoned Luxury Decor. Currently it contains the decor stuff only of "modern" style. A simple cheap style without any quaintness and luxury. In future there will be added still few sorts of that: baroque, high-tech, classic and royal. This modpack adds various detailed furniture components, decorations and exterior stuff with various designs and styles of each epoch. Inspired by Homedecor and based on my abandoned Luxury Decor. Currently it contains the decor stuff only of "modern" style. A simple cheap style without any quaintness and luxury. In future there will be added still few sorts of that: baroque, high-tech, classic and royal.
## Changelog List ## Changelog List
#### [17.08.23] Release 1.1.2.
#### [16.08.23] Release 1.1.1. #### [16.08.23] Release 1.1.1.
#### [09.03.23] Release 1.1.0. #### [09.03.23] Release 1.1.0.
#### [22.01.23] Release 1.0.5. #### [22.01.23] Release 1.0.5.

View File

@ -38,10 +38,21 @@ function multidecor.register.register_type(type_name)
table.insert(multidecor.register.supported_types, type_name) table.insert(multidecor.register.supported_types, type_name)
end end
-- Checks whether type with 'type_name' name is registered -- Checks whether the given 'name' is in the category with 'category_id' (whether it is registered there).
function multidecor.register.check_for_type(type_name) -- 'category_id': '0' - types, '1' - styles, '2' - materials
for _, type in ipairs(multidecor.register.supported_types) do function multidecor.register.category_contains(name, category_id)
if type == type_name then local lookup_t
if category_id == 0 then
lookup_t = multidecor.register.supported_types
elseif category_id == 1 then
lookup_t = multidecor.register.supported_styles
elseif category_id == 2 then
lookup_t = multidecor.register.supported_materials
end
for _, cat_name in ipairs(lookup_t) do
if cat_name == name then
return true return true
end end
end end
@ -49,15 +60,37 @@ function multidecor.register.check_for_type(type_name)
return false return false
end end
-- Checks whether style with 'style_name' name is registered -- Returns the name from category with 'category_id' for the node with 'name' name.
function multidecor.register.check_for_style(style_name) -- 'category_id': '0' - types, '1' - styles, '2' - materials
for _, style in ipairs(multidecor.register.supported_styles) do function multidecor.register.get_name_from_category(name, category_id)
if style == style_name then local def = minetest.registered_nodes[name]
return true
local ret_cat = ""
local lookup_t
if category_id == 0 then
lookup_t = multidecor.register.supported_types
elseif category_id == 1 then
lookup_t = multidecor.register.supported_styles
elseif category_id == 2 then
lookup_t = multidecor.register.supported_materials
end
for _, cat in ipairs(lookup_t) do
if def.groups[cat] then
ret_cat = cat
end end
end end
return ret_cat
end
return false function multidecor.register.build_description(name, base_desc)
local style = multidecor.register.get_name_from_category(name, 1)
local material = multidecor.register.get_name_from_category(name, 2)
return base_desc .. "\nStyle: " .. style .. (material ~= "" and "\nMaterial: " .. material or "")
end end
--[[def: --[[def:
@ -101,8 +134,8 @@ end
function multidecor.register.register_furniture_unit(name, def, craft_def) function multidecor.register.register_furniture_unit(name, def, craft_def)
local f_def = {} local f_def = {}
assert(multidecor.register.check_for_type(def.type), "The type with a name \"" .. def.type .. "\" is not registered!") assert(multidecor.register.category_contains(def.type, 0), "The type with a name \"" .. def.type .. "\" is not registered!")
assert(multidecor.register.check_for_style(def.style), "The style with a name \"" .. def.style .. "\" is not registered!") assert(multidecor.register.category_contains(def.style, 1), "The style with a name \"" .. def.style .. "\" is not registered!")
f_def.description = def.description f_def.description = def.description
f_def.visual_scale = def.visual_scale or 0.4 f_def.visual_scale = def.visual_scale or 0.4
@ -139,7 +172,7 @@ function multidecor.register.register_furniture_unit(name, def, craft_def)
elseif def.material == "plastic" then elseif def.material == "plastic" then
f_def.groups.snappy = 1.5 f_def.groups.snappy = 1.5
end end
f_def.description = f_def.description .. "\nStyle: " .. def.style .. (def.material and "\nMaterial: " .. def.material or "") f_def.description = f_def.description .. "\nStyle: " .. def.style .. (def.material and "\nMaterial: " .. def.material or "")
if def.bounding_boxes then if def.bounding_boxes then
if f_def.drawtype == "nodebox" then if f_def.drawtype == "nodebox" then
@ -327,7 +360,7 @@ end
function multidecor.register.register_garniture(def) function multidecor.register.register_garniture(def)
local cmn_def = {} local cmn_def = {}
assert(multidecor.register.check_for_style(def.style), "The style with a name \"" .. def.style .. "\" is not registered!") assert(multidecor.register.category_contains(def.style, 1), "The style with a name \"" .. def.style .. "\" is not registered!")
cmn_def.style = def.style cmn_def.style = def.style
cmn_def.material = def.material cmn_def.material = def.material

View File

@ -77,6 +77,50 @@ function multidecor.shelves.rotate_shelf_bbox(obj)
}) })
end end
-- Builds formspec string for the shelf with 'shelf_num' number. The inventory can be detached and node.
function multidecor.shelves.build_formspec(pos, common_name, data, shelf_num, detached)
if detached == nil then
detached = true
end
local inv_name = multidecor.helpers.build_name_from_tmp(common_name, "inv", shelf_num, pos)
local list_name = multidecor.helpers.build_name_from_tmp(common_name, "list", shelf_num, pos)
local list_type = data.invlist_type or "storage"
local padding = 0.25
local list_w = list_type == "storage" and data.inv_size.w or 1
local list_h = list_type == "storage" and data.inv_size.h or 1
local width = list_w > 8 and list_w or 8
local fs_size = {
w = width+1+(width-1)*padding,
h = list_h+5.5+(list_h-1)*padding+3*padding
}
fs_size.h = list_type == "cooker" and fs_size.h + 1 or fs_size.h
local player_list_y = list_h+1+(list_h-1)*padding + (list_type == "cooker" and 1 or 0)
local list_x = list_type == "cooker" and fs_size.w/2-0.5 or 0.5
local list_y = list_type == "cooker" and 1 or 0.5
local fs =
("formspec_version[4]size[%f,%f]"):format(fs_size.w, fs_size.h) ..
("list[current_player;main;0.5,%f;8,4;]"):format(player_list_y)
if detached then
fs = fs .. ("list[detached:%s;%s;%f,%f;%f,%f;]"):format(inv_name, list_name, list_x, list_y, list_w, list_h)
else
fs = fs .. ("list[nodemeta:%f,%f,%f;%s;0.5,0.5;%u,%u;]"):format(pos.x, pos.y, pos.z, list_name, list_w, list_h)
end
if list_type == "trash" then
fs = fs .. "image[0.5,0.5;1,1;multidecor_trash_icon.png;]"
end
if list_type == "cooker" then
fs = fs .. "image[0.5,1;1,1;multidecor_cooker_fire_off.png;]"
end
return fs
end
-- Animates opening or closing the shelf 'obj'. The action directly depends on 'dir_sign' value ('1' is open, '-1' is close) -- Animates opening or closing the shelf 'obj'. The action directly depends on 'dir_sign' value ('1' is open, '-1' is close)
function multidecor.shelves.open_shelf(obj, dir_sign) function multidecor.shelves.open_shelf(obj, dir_sign)
local self = obj:get_luaentity() local self = obj:get_luaentity()
@ -130,41 +174,13 @@ function multidecor.shelves.set_shelves(pos)
end end
for i, shelf_data in ipairs(def.add_properties.shelves_data) do for i, shelf_data in ipairs(def.add_properties.shelves_data) do
local inv_name = multidecor.helpers.build_name_from_tmp(def.add_properties.shelves_data.common_name, "inv", i, pos) local fs = multidecor.shelves.build_formspec(
local list_name = multidecor.helpers.build_name_from_tmp(def.add_properties.shelves_data.common_name, "list", i, pos) pos,
local list_type = shelf_data.invlist_type or "storage" def.add_properties.shelves_data.common_name,
shelf_data,
local padding = 0.25 i
local list_w = list_type == "storage" and shelf_data.inv_size.w or 1 )
local list_h = list_type == "storage" and shelf_data.inv_size.h or 1
local width = list_w > 8 and list_w or 8
local fs_size = {
w = width+1+(width-1)*padding,
h = list_h+5.5+(list_h-1)*padding+3*padding
}
fs_size.h = shelf_data.invlist_type == "cooker" and fs_size.h + 1 or fs_size.h
local player_list_y = list_h+1+(list_h-1)*padding + (shelf_data.invlist_type == "cooker" and 1 or 0)
local list_x = shelf_data.invlist_type == "cooker" and fs_size.w/2-0.5 or 0.5
local list_y = shelf_data.invlist_type == "cooker" and 1 or 0.5
local fs = [[
formspec_version[4]size[%f,%f]
list[detached:%s;%s;%f,%f;%f,%f;]
list[current_player;main;0.5,%f;8,4;]
]]
if list_type == "trash" then
fs = fs .. "image[0.5,0.5;1,1;multidecor_trash_icon.png;]"
end
if list_type == "cooker" then
fs = fs .. "image[0.5,1;1,1;multidecor_cooker_fire_off.png;]"
end
fs = fs:format(
fs_size.w, fs_size.h,
inv_name, list_name, list_x, list_y,
list_w, list_h, player_list_y)
local obj = minetest.add_entity(vector.add(pos, shelf_data.pos), shelf_data.object, minetest.serialize({fs, {name=node.name, pos=pos}, 0, i})) local obj = minetest.add_entity(vector.add(pos, shelf_data.pos), shelf_data.object, minetest.serialize({fs, {name=node.name, pos=pos}, 0, i}))
local move_dist local move_dist

View File

@ -147,7 +147,7 @@ local cmpnts = {
meta:set_string("water_stream_id", tonumber(id)) meta:set_string("water_stream_id", tonumber(id))
local sound_handle = minetest.sound_play("multidecor_tap", {pos=pos, max_hear_distance=12}) local sound_handle = minetest.sound_play("multidecor_tap", {pos=pos, fade=1.0, max_hear_distance=12, loop=true})
meta:set_string("sound_handle", minetest.serialize(sound_handle)) meta:set_string("sound_handle", minetest.serialize(sound_handle))
end end
end, end,

View File

@ -263,7 +263,6 @@ multidecor.register.register_furniture_unit("alarm_clock", {
on_construct = function(pos) on_construct = function(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("is_activated", "false") meta:set_string("is_activated", "false")
meta:set_int("nodetime_elapsed", -1)
end, end,
on_rightclick = function(pos) on_rightclick = function(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
@ -271,9 +270,11 @@ multidecor.register.register_furniture_unit("alarm_clock", {
if meta:get_string("is_activated") == "false" then if meta:get_string("is_activated") == "false" then
meta:set_string("is_activated", "true") meta:set_string("is_activated", "true")
minetest.get_node_timer(pos):start(1) minetest.get_node_timer(pos):start(1)
local handle = minetest.sound_play("multidecor_clock_ticking", {pos=pos, fade=1.0, max_hear_distance=10, loop=true})
meta:set_string("sound_handle", minetest.serialize(handle))
else else
meta:set_string("is_activated", "false") meta:set_string("is_activated", "false")
meta:set_int("nodetime_elapsed", -1)
minetest.get_node_timer(pos):stop() minetest.get_node_timer(pos):stop()
local handle = minetest.deserialize(meta:get_string("sound_handle")) local handle = minetest.deserialize(meta:get_string("sound_handle"))
@ -286,18 +287,9 @@ multidecor.register.register_furniture_unit("alarm_clock", {
on_timer = function(pos) on_timer = function(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local elapsed = meta:get_int("nodetime_elapsed")
elapsed = elapsed + 1
meta:set_int("nodetime_elapsed", elapsed)
local hours, minutes, seconds = get_current_time() local hours, minutes, seconds = get_current_time()
meta:set_string("infotext", get_formatted_time_str(hours, minutes)) meta:set_string("infotext", get_formatted_time_str(hours, minutes))
if elapsed % 8 == 0 then
local handle = minetest.sound_play("multidecor_clock_ticking", {pos=pos, fade=1.0, max_hear_distance=10})
meta:set_string("sound_handle", minetest.serialize(handle))
end
return true return true
end, end,
after_dig_node = function(pos, oldnode, oldmeta) after_dig_node = function(pos, oldnode, oldmeta)

View File

@ -1,18 +1,8 @@
local function get_shelf_formspec(name, pos, w, h)
local listname = multidecor.helpers.build_name_from_tmp(name, "list", 1, pos)
return table.concat({
"formspec_version[5]",
"size[11,9]",
("list[nodemeta:%f,%f,%f;%s;0.5,0.5;%u,%u;]"):format(pos.x, pos.y, pos.z, listname, w, h),
"list[current_player;main;0.5,3.5;8,4;]"
}, "")
end
local shelf_on_construct = function(pos) local shelf_on_construct = function(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local name = minetest.get_node(pos).name local name = minetest.get_node(pos).name
local add_props = minetest.registered_nodes[name].add_properties local add_props = minetest.registered_nodes[name].add_properties
meta:set_string("formspec", get_shelf_formspec(name, pos, add_props.inv_size.w, add_props.inv_size.h)) meta:set_string("formspec", multidecor.shelves.build_formspec(pos, name, add_props, 1, false))
local inv = minetest.get_inventory({type="node", pos=pos}) local inv = minetest.get_inventory({type="node", pos=pos})
local list_name = multidecor.helpers.build_name_from_tmp(name, "list", 1, pos) local list_name = multidecor.helpers.build_name_from_tmp(name, "list", 1, pos)