From 6fb69a56a507bfd49294b8fd0578fbe6dd67f59b Mon Sep 17 00:00:00 2001 From: Niklp Date: Sat, 5 Oct 2024 19:22:13 +0200 Subject: [PATCH 01/11] Fix typo in German translation of "Dishwasher" --- homedecor_kitchen/locale/homedecor_kitchen.de.tr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homedecor_kitchen/locale/homedecor_kitchen.de.tr b/homedecor_kitchen/locale/homedecor_kitchen.de.tr index dc170eea..6aea0892 100644 --- a/homedecor_kitchen/locale/homedecor_kitchen.de.tr +++ b/homedecor_kitchen/locale/homedecor_kitchen.de.tr @@ -4,7 +4,7 @@ Refrigerator=Kühlschrank Oven=Backofen Oven (stainless steel)=Backofen (Edelstahl) Microwave Oven=Mikrowelle -Dishwasher=Spülmachine +Dishwasher=Spülmaschine granite=Granit marble=Marmor steel=Stahl From 00ee805ed717cc808726b0cc548a32e42dc89942 Mon Sep 17 00:00:00 2001 From: Mihin Dissanayake <73010893+MihinMUD@users.noreply.github.com> Date: Wed, 16 Oct 2024 04:14:55 +0530 Subject: [PATCH 02/11] Make half doors craftable (#79) --- homedecor_doors_and_gates/init.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/homedecor_doors_and_gates/init.lua b/homedecor_doors_and_gates/init.lua index 9650f2cb..84356de0 100644 --- a/homedecor_doors_and_gates/init.lua +++ b/homedecor_doors_and_gates/init.lua @@ -410,8 +410,8 @@ minetest.register_craft( { type = "shapeless", output = "homedecor:gate_half_door_closed 4", recipe = { - "doors:homedecor_wood_plain_a", - "doors:homedecor_wood_plain_a" + "doors:homedecor_wood_plain", + "doors:homedecor_wood_plain" }, }) @@ -419,8 +419,8 @@ minetest.register_craft( { type = "shapeless", output = "homedecor:gate_half_door_white_closed 4", recipe = { - "doors:homedecor_bedroom_a", - "doors:homedecor_bedroom_a" + "doors:homedecor_basic_panel", + "doors:homedecor_basic_panel" }, }) From 79416b962cdaaca4cb897a95e41315166d07cc5b Mon Sep 17 00:00:00 2001 From: Niklp Date: Sun, 20 Oct 2024 18:24:57 +0200 Subject: [PATCH 03/11] Add `player_monoids` support (#80) * Add `player_monoids` support (*sometimes* broken for whatever reason, see xkcd#1739) * . --- .luacheckrc | 1 + homedecor_seating/init.lua | 42 +++++++++++++++++++++++++++++--------- homedecor_seating/mod.conf | 2 +- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/.luacheckrc b/.luacheckrc index ee964473..f4c7d9ae 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -41,4 +41,5 @@ read_globals = { "doors", "i3", "xcompat", + "player_monoids" } \ No newline at end of file diff --git a/homedecor_seating/init.lua b/homedecor_seating/init.lua index cec447f4..ab145573 100644 --- a/homedecor_seating/init.lua +++ b/homedecor_seating/init.lua @@ -3,6 +3,7 @@ local S = minetest.get_translator("homedecor_seating") local modpath = minetest.get_modpath("homedecor_seating") +local has_player_monoids = minetest.get_modpath("player_monoids") lrfurn = {} @@ -85,7 +86,8 @@ function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) return itemstack end - if physics_cache[clicker:get_player_name()] then + local name = clicker:get_player_name() + if physics_cache[name] then --already sitting lrfurn.stand(clicker) return itemstack end @@ -123,28 +125,48 @@ function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) if not pstatus then sit_pos = spos end end if not sit_pos then - minetest.chat_send_player(clicker:get_player_name(), "sorry, this seat is currently occupied") + minetest.chat_send_player(name, "sorry, this seat is currently occupied") return itemstack end --seat the player clicker:set_pos(sit_pos) - xcompat.player.player_attached[clicker:get_player_name()] = true + xcompat.player.player_attached[name] = true xcompat.player.set_animation(clicker, "sit", 0) - physics_cache[clicker:get_player_name()] = table.copy(clicker:get_physics_override()) - clicker:set_physics_override({speed = 0, jump = 0, gravity = 0}) + if has_player_monoids then + physics_cache[name] = true + player_monoids.speed:add_change(clicker, 0, "homedecor_seating:sit") + player_monoids.jump:add_change(clicker, 0, "homedecor_seating:sit") + player_monoids.gravity:add_change(clicker, 0, "homedecor_seating:sit") + else + physics_cache[name] = table.copy(clicker:get_physics_override()) + clicker:set_physics_override({speed = 0, jump = 0, gravity = 0}) + end return itemstack end function lrfurn.stand(clicker) - xcompat.player.player_attached[clicker:get_player_name()] = false - if physics_cache[clicker:get_player_name()] then - clicker:set_physics_override(physics_cache[clicker:get_player_name()]) - physics_cache[clicker:get_player_name()] = nil + local name = clicker:get_player_name() + xcompat.player.player_attached[name] = false + if physics_cache[name] then + if has_player_monoids then + player_monoids.speed:del_change(clicker, "homedecor_seating:sit") + player_monoids.jump:del_change(clicker, "homedecor_seating:sit") + player_monoids.gravity:del_change(clicker, "homedecor_seating:sit") + else + clicker:set_physics_override(physics_cache[name]) + end + physics_cache[name] = nil else --in case this is called and the cache is empty - clicker:set_physics_override({speed = 1, jump = 1, gravity = 1}) + if has_player_monoids then + player_monoids.speed:del_change(clicker, "homedecor_seating:sit") + player_monoids.jump:del_change(clicker, "homedecor_seating:sit") + player_monoids.gravity:del_change(clicker, "homedecor_seating:sit") + else + clicker:set_physics_override({speed = 1, jump = 1, gravity = 1}) + end end end diff --git a/homedecor_seating/mod.conf b/homedecor_seating/mod.conf index 5d17db39..d0b057fe 100644 --- a/homedecor_seating/mod.conf +++ b/homedecor_seating/mod.conf @@ -1,4 +1,4 @@ name = homedecor_seating description = Homedecor mod: seating depends = homedecor_common -optional_depends = screwdriver, wool, default, unifieddyes, basic_materials +optional_depends = screwdriver, wool, default, unifieddyes, basic_materials, player_monoids From 40898101be246b834cec6e813010e41b54031b4b Mon Sep 17 00:00:00 2001 From: wsor4035 <24964441+wsor4035@users.noreply.github.com> Date: Wed, 30 Oct 2024 22:57:08 -0400 Subject: [PATCH 04/11] replace physics hell with hopefully better entity hell (#81) * replace physics hell with hopefully better entity hell * toss worthless optional depend * no need to save entity if we dont remove it for some reason - crashes, etc * fix sofas * handle the rest of chairs * catch malformed seating, since lua tables are 1 indexed * niklp suggestion --- homedecor_seating/init.lua | 96 +++++++++++++++++++++++++++----------- homedecor_seating/mod.conf | 2 +- 2 files changed, 69 insertions(+), 29 deletions(-) diff --git a/homedecor_seating/init.lua b/homedecor_seating/init.lua index ab145573..4725e4ee 100644 --- a/homedecor_seating/init.lua +++ b/homedecor_seating/init.lua @@ -3,7 +3,6 @@ local S = minetest.get_translator("homedecor_seating") local modpath = minetest.get_modpath("homedecor_seating") -local has_player_monoids = minetest.get_modpath("player_monoids") lrfurn = {} @@ -79,7 +78,54 @@ function lrfurn.fix_sofa_rotation_nsew(pos, placer, itemstack, pointed_thing) minetest.swap_node(pos, { name = node.name, param2 = fdir+colorbits }) end -local physics_cache = {} +local seated_cache = {} + +minetest.register_entity("homedecor_seating:seat", { + initial_properties = { + visual = "cube", + --comment out the following when testing so you can see it + textures = {"blank.png", "blank.png", "blank.png", "blank.png", "blank.png", "blank.png"}, + collisionbox = { -0.01, -0.01, -0.01, 0.01, 0.01, 0.01 }, + selectionbox = { -0.01, -0.01, -0.01, 0.01, 0.01, 0.01, rotate = false }, + static_save = false, + }, + on_punch = function(self) + self.object:remove() + end, +}) + +--we only care about 4 rotations, but just in case someone worldedits, etc - do something other than crash +--radians are stupid, using degrees and then converting +local p2r = { + 0*math.pi/180, + 0*math.pi/180, --correct + 180*math.pi/180, --correct + 90*math.pi/180, --correct + 270*math.pi/180, --correct + 0*math.pi/180, + 0*math.pi/180, + 0*math.pi/180, +} +p2r[0] = p2r[1] + +local p2r_sofa = { + 0*math.pi/180, + 90*math.pi/180, --correct + 270*math.pi/180, --correct + 180*math.pi/180, --correct + 0*math.pi/180, --correct + 0*math.pi/180, + 0*math.pi/180, + 0*math.pi/180, +} +p2r_sofa[0] = p2r_sofa[1] + +local p2r_facedir = { + [0] = 180*math.pi/180, + [1] = 90*math.pi/180, + [2] = 0*math.pi/180, + [3] = 270*math.pi/180, +} function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) if not clicker:is_player() then @@ -87,7 +133,7 @@ function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) end local name = clicker:get_player_name() - if physics_cache[name] then --already sitting + if seated_cache[name] then --already sitting lrfurn.stand(clicker) return itemstack end @@ -132,17 +178,22 @@ function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) --seat the player clicker:set_pos(sit_pos) + local entity = minetest.add_entity(sit_pos, "homedecor_seating:seat") + if not entity then return itemstack end --catch for when the entity fails to spawn just in case + + clicker:set_attach(entity, "", {x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}, true) + local nodedef = minetest.registered_nodes[node.name] + if nodedef.paramtype2 == "facedir" then + entity:set_rotation({x = 0, y = p2r_facedir[node.param2 % 4], z = 0}) + elseif string.find(node.name, "sofa") then + entity:set_rotation({x = 0, y = p2r_sofa[node.param2 % 8], z = 0}) + else + entity:set_rotation({x = 0, y = p2r[node.param2 % 8], z = 0}) + end + xcompat.player.player_attached[name] = true xcompat.player.set_animation(clicker, "sit", 0) - if has_player_monoids then - physics_cache[name] = true - player_monoids.speed:add_change(clicker, 0, "homedecor_seating:sit") - player_monoids.jump:add_change(clicker, 0, "homedecor_seating:sit") - player_monoids.gravity:add_change(clicker, 0, "homedecor_seating:sit") - else - physics_cache[name] = table.copy(clicker:get_physics_override()) - clicker:set_physics_override({speed = 0, jump = 0, gravity = 0}) - end + seated_cache[name] = true return itemstack end @@ -150,23 +201,12 @@ end function lrfurn.stand(clicker) local name = clicker:get_player_name() xcompat.player.player_attached[name] = false - if physics_cache[name] then - if has_player_monoids then - player_monoids.speed:del_change(clicker, "homedecor_seating:sit") - player_monoids.jump:del_change(clicker, "homedecor_seating:sit") - player_monoids.gravity:del_change(clicker, "homedecor_seating:sit") - else - clicker:set_physics_override(physics_cache[name]) - end - physics_cache[name] = nil - else --in case this is called and the cache is empty - if has_player_monoids then - player_monoids.speed:del_change(clicker, "homedecor_seating:sit") - player_monoids.jump:del_change(clicker, "homedecor_seating:sit") - player_monoids.gravity:del_change(clicker, "homedecor_seating:sit") - else - clicker:set_physics_override({speed = 1, jump = 1, gravity = 1}) + if seated_cache[name] then + local attached_to = clicker:get_attach() + if attached_to then --check, a stupid clearobjects might have been called, etc + attached_to:remove() --removing also detaches end + seated_cache[name] = nil end end diff --git a/homedecor_seating/mod.conf b/homedecor_seating/mod.conf index d0b057fe..5d17db39 100644 --- a/homedecor_seating/mod.conf +++ b/homedecor_seating/mod.conf @@ -1,4 +1,4 @@ name = homedecor_seating description = Homedecor mod: seating depends = homedecor_common -optional_depends = screwdriver, wool, default, unifieddyes, basic_materials, player_monoids +optional_depends = screwdriver, wool, default, unifieddyes, basic_materials From d8ae7a360da6204f6bb84d719dd4eeee5df3b6db Mon Sep 17 00:00:00 2001 From: wsor4035 <24964441+wsor4035@users.noreply.github.com> Date: Tue, 5 Nov 2024 01:20:34 -0500 Subject: [PATCH 05/11] handle corner case where player dies while in chair --- homedecor_seating/init.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/homedecor_seating/init.lua b/homedecor_seating/init.lua index 4725e4ee..4f77efd5 100644 --- a/homedecor_seating/init.lua +++ b/homedecor_seating/init.lua @@ -210,6 +210,13 @@ function lrfurn.stand(clicker) end end +--if the player gets killed in the seat, handle it +minetest.register_on_dieplayer(function(player) + if seated_cache[player:get_player_name()] then + lrfurn.stand(player) + end +end) + dofile(modpath.."/longsofas.lua") dofile(modpath.."/sofas.lua") dofile(modpath.."/armchairs.lua") From 94e25c21924cb705c952b5bc58231b88dae2fc1f Mon Sep 17 00:00:00 2001 From: wsor4035 <24964441+wsor4035@users.noreply.github.com> Date: Wed, 6 Nov 2024 23:32:14 -0500 Subject: [PATCH 06/11] free player when seat is dug (#84) --- homedecor_seating/armchairs.lua | 6 ++++-- homedecor_seating/init.lua | 13 ++++++++++++- homedecor_seating/longsofas.lua | 3 ++- homedecor_seating/misc.lua | 18 ++++++++++++------ homedecor_seating/sofas.lua | 3 ++- 5 files changed, 32 insertions(+), 11 deletions(-) diff --git a/homedecor_seating/armchairs.lua b/homedecor_seating/armchairs.lua index 8359c913..2c7d1c3b 100644 --- a/homedecor_seating/armchairs.lua +++ b/homedecor_seating/armchairs.lua @@ -33,7 +33,8 @@ minetest.register_node(":lrfurn:armchair", { on_rotate = unifieddyes.fix_after_screwdriver_nsew, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) - end + end, + on_destruct = lrfurn.on_seat_destruct, }) homedecor.register("armchair", { @@ -59,7 +60,8 @@ homedecor.register("armchair", { on_rotate = unifieddyes.fix_after_screwdriver_nsew, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) - end + end, + on_destruct = lrfurn.on_seat_destruct, }) -- crafts diff --git a/homedecor_seating/init.lua b/homedecor_seating/init.lua index 4f77efd5..c4c0bf9e 100644 --- a/homedecor_seating/init.lua +++ b/homedecor_seating/init.lua @@ -193,7 +193,7 @@ function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) xcompat.player.player_attached[name] = true xcompat.player.set_animation(clicker, "sit", 0) - seated_cache[name] = true + seated_cache[name] = minetest.hash_node_position(pos) return itemstack end @@ -210,6 +210,17 @@ function lrfurn.stand(clicker) end end +function lrfurn.on_seat_destruct(pos) --called when a seat is destroyed + for name, seatpos in pairs(seated_cache) do + if seatpos == minetest.hash_node_position(pos) then + local player = minetest.get_player_by_name(name) + if player then + lrfurn.stand(player) + end + end + end +end + --if the player gets killed in the seat, handle it minetest.register_on_dieplayer(function(player) if seated_cache[player:get_player_name()] then diff --git a/homedecor_seating/longsofas.lua b/homedecor_seating/longsofas.lua index e919ef92..4f1c7c96 100644 --- a/homedecor_seating/longsofas.lua +++ b/homedecor_seating/longsofas.lua @@ -47,7 +47,8 @@ minetest.register_node(":lrfurn:longsofa", { on_dig = unifieddyes.on_dig, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 3) - end + end, + on_destruct = lrfurn.on_seat_destruct, }) minetest.register_craft({ diff --git a/homedecor_seating/misc.lua b/homedecor_seating/misc.lua index b5d9bb64..386de67c 100644 --- a/homedecor_seating/misc.lua +++ b/homedecor_seating/misc.lua @@ -22,7 +22,8 @@ homedecor.register("deckchair", { on_rotate = minetest.get_modpath("screwdriver") and screwdriver.disallow or nil, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) - end + end, + on_destruct = lrfurn.on_seat_destruct, }) minetest.register_alias("homedecor:deckchair_foot", "homedecor:deckchair") @@ -42,7 +43,8 @@ homedecor.register("deckchair_striped_blue", { on_rotate = minetest.get_modpath("screwdriver") and screwdriver.disallow or nil, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) - end + end, + on_destruct = lrfurn.on_seat_destruct, }) homedecor.register("simple_bench", { @@ -62,7 +64,8 @@ homedecor.register("simple_bench", { }, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) - end + end, + on_destruct = lrfurn.on_seat_destruct, }) local bl1_sbox = { @@ -154,7 +157,8 @@ homedecor.register("kitchen_chair_wood", { on_rotate = unifieddyes.fix_after_screwdriver_nsew, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) - end + end, + on_destruct = lrfurn.on_seat_destruct, }) homedecor.register("kitchen_chair_padded", { @@ -180,7 +184,8 @@ homedecor.register("kitchen_chair_padded", { on_rotate = unifieddyes.fix_after_screwdriver_nsew, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) - end + end, + on_destruct = lrfurn.on_seat_destruct, }) local ofchairs_sbox = { @@ -219,7 +224,8 @@ for _, c in pairs(chairs) do on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple or nil, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) - end + end, + on_destruct = lrfurn.on_seat_destruct, }) end diff --git a/homedecor_seating/sofas.lua b/homedecor_seating/sofas.lua index 5ee43f61..130f9c58 100644 --- a/homedecor_seating/sofas.lua +++ b/homedecor_seating/sofas.lua @@ -47,7 +47,8 @@ minetest.register_node(":lrfurn:sofa", { on_dig = unifieddyes.on_dig, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 2) - end + end, + on_destruct = lrfurn.on_seat_destruct, }) minetest.register_craft({ From b51d27135b4fb49d2f5d34547bc5297d0bef29c2 Mon Sep 17 00:00:00 2001 From: wsor4035 <24964441+wsor4035@users.noreply.github.com> Date: Sun, 22 Dec 2024 13:59:17 -0500 Subject: [PATCH 07/11] Jump drive support for seats (#87) * psuedo code for jump drive support * avoid re-calculating node hash in loop * cache new position for next move * clean comment and minetest -> core * cache seat offset for sofas * use first found sitting position * cleanup some comments * bugfix: reported seat occupied when it wasn't --------- Co-authored-by: Luke aka SwissalpS --- homedecor_seating/armchairs.lua | 2 ++ homedecor_seating/init.lua | 47 +++++++++++++++++++++++++++++---- homedecor_seating/longsofas.lua | 1 + homedecor_seating/misc.lua | 6 +++++ homedecor_seating/sofas.lua | 1 + 5 files changed, 52 insertions(+), 5 deletions(-) diff --git a/homedecor_seating/armchairs.lua b/homedecor_seating/armchairs.lua index 2c7d1c3b..6de86d62 100644 --- a/homedecor_seating/armchairs.lua +++ b/homedecor_seating/armchairs.lua @@ -35,6 +35,7 @@ minetest.register_node(":lrfurn:armchair", { return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) end, on_destruct = lrfurn.on_seat_destruct, + on_movenode = lrfurn.on_seat_movenode, }) homedecor.register("armchair", { @@ -62,6 +63,7 @@ homedecor.register("armchair", { return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) end, on_destruct = lrfurn.on_seat_destruct, + on_movenode = lrfurn.on_seat_movenode, }) -- crafts diff --git a/homedecor_seating/init.lua b/homedecor_seating/init.lua index c4c0bf9e..99318e97 100644 --- a/homedecor_seating/init.lua +++ b/homedecor_seating/init.lua @@ -79,6 +79,7 @@ function lrfurn.fix_sofa_rotation_nsew(pos, placer, itemstack, pointed_thing) end local seated_cache = {} +local offset_cache = {} minetest.register_entity("homedecor_seating:seat", { initial_properties = { @@ -161,14 +162,19 @@ function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) --see if we can find a non occupied seat local sit_pos + local sit_hash for hash, spos in pairs(valid_seats) do local pstatus = false for _, ref in pairs(minetest.get_objects_inside_radius(spos, 0.5)) do - if ref:is_player() then + if ref:is_player() and seated_cache[ref:get_player_name()] then pstatus = true end end - if not pstatus then sit_pos = spos end + if not pstatus then + sit_pos = spos + sit_hash = hash + break; + end end if not sit_pos then minetest.chat_send_player(name, "sorry, this seat is currently occupied") @@ -194,6 +200,9 @@ function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) xcompat.player.player_attached[name] = true xcompat.player.set_animation(clicker, "sit", 0) seated_cache[name] = minetest.hash_node_position(pos) + if seated_cache[name] ~= sit_hash then + offset_cache[name] = core.hash_node_position(vector.subtract(pos, sit_pos)) + end return itemstack end @@ -203,14 +212,18 @@ function lrfurn.stand(clicker) xcompat.player.player_attached[name] = false if seated_cache[name] then local attached_to = clicker:get_attach() - if attached_to then --check, a stupid clearobjects might have been called, etc - attached_to:remove() --removing also detaches + -- Check, clearobjects might have been called, etc + if attached_to then + -- Removing also detaches + attached_to:remove() end seated_cache[name] = nil + offset_cache[name] = nil end end -function lrfurn.on_seat_destruct(pos) --called when a seat is destroyed +-- Called when a seat is destroyed +function lrfurn.on_seat_destruct(pos) for name, seatpos in pairs(seated_cache) do if seatpos == minetest.hash_node_position(pos) then local player = minetest.get_player_by_name(name) @@ -221,6 +234,30 @@ function lrfurn.on_seat_destruct(pos) --called when a seat is destroyed end end +function lrfurn.on_seat_movenode(from_pos, to_pos) + local hashed_from_pos = core.hash_node_position(from_pos) + local hashed_to_pos = core.hash_node_position(to_pos) + for name, seatpos in pairs(seated_cache) do + if seatpos == hashed_from_pos then + local player = core.get_player_by_name(name) + if player then + local attached_to = player:get_attach() + -- Check, clearobjects might have been called, etc + if attached_to then + if offset_cache[name] then + -- multi-seat node aka sofas + attached_to:set_pos(vector.subtract(to_pos, + core.get_position_from_hash(offset_cache[name]))) + else + attached_to:set_pos(to_pos) + end + seated_cache[name] = hashed_to_pos + end + end + end + end +end + --if the player gets killed in the seat, handle it minetest.register_on_dieplayer(function(player) if seated_cache[player:get_player_name()] then diff --git a/homedecor_seating/longsofas.lua b/homedecor_seating/longsofas.lua index 4f1c7c96..5d22a69e 100644 --- a/homedecor_seating/longsofas.lua +++ b/homedecor_seating/longsofas.lua @@ -49,6 +49,7 @@ minetest.register_node(":lrfurn:longsofa", { return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 3) end, on_destruct = lrfurn.on_seat_destruct, + on_movenode = lrfurn.on_seat_movenode, }) minetest.register_craft({ diff --git a/homedecor_seating/misc.lua b/homedecor_seating/misc.lua index 386de67c..4ceb5865 100644 --- a/homedecor_seating/misc.lua +++ b/homedecor_seating/misc.lua @@ -24,6 +24,7 @@ homedecor.register("deckchair", { return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) end, on_destruct = lrfurn.on_seat_destruct, + on_movenode = lrfurn.on_seat_movenode, }) minetest.register_alias("homedecor:deckchair_foot", "homedecor:deckchair") @@ -45,6 +46,7 @@ homedecor.register("deckchair_striped_blue", { return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) end, on_destruct = lrfurn.on_seat_destruct, + on_movenode = lrfurn.on_seat_movenode, }) homedecor.register("simple_bench", { @@ -66,6 +68,7 @@ homedecor.register("simple_bench", { return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) end, on_destruct = lrfurn.on_seat_destruct, + on_movenode = lrfurn.on_seat_movenode, }) local bl1_sbox = { @@ -159,6 +162,7 @@ homedecor.register("kitchen_chair_wood", { return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) end, on_destruct = lrfurn.on_seat_destruct, + on_movenode = lrfurn.on_seat_movenode, }) homedecor.register("kitchen_chair_padded", { @@ -186,6 +190,7 @@ homedecor.register("kitchen_chair_padded", { return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) end, on_destruct = lrfurn.on_seat_destruct, + on_movenode = lrfurn.on_seat_movenode, }) local ofchairs_sbox = { @@ -226,6 +231,7 @@ for _, c in pairs(chairs) do return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) end, on_destruct = lrfurn.on_seat_destruct, + on_movenode = lrfurn.on_seat_movenode, }) end diff --git a/homedecor_seating/sofas.lua b/homedecor_seating/sofas.lua index 130f9c58..ff1f3c95 100644 --- a/homedecor_seating/sofas.lua +++ b/homedecor_seating/sofas.lua @@ -49,6 +49,7 @@ minetest.register_node(":lrfurn:sofa", { return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 2) end, on_destruct = lrfurn.on_seat_destruct, + on_movenode = lrfurn.on_seat_movenode, }) minetest.register_craft({ From 7bf4f8e18534df2486bf47411bfc93b97896dd4d Mon Sep 17 00:00:00 2001 From: wsor4035 <24964441+wsor4035@users.noreply.github.com> Date: Fri, 27 Dec 2024 18:09:38 -0500 Subject: [PATCH 08/11] make the bottle opaque to improve rendering performance and hide bad geometry --- homedecor_3d_extras/init.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/homedecor_3d_extras/init.lua b/homedecor_3d_extras/init.lua index 563445f2..69be9a1c 100644 --- a/homedecor_3d_extras/init.lua +++ b/homedecor_3d_extras/init.lua @@ -23,7 +23,6 @@ if minetest.get_modpath("vessels") then }, paramtype = "light", paramtype2 = "facedir", - use_texture_alpha = "blend", }) local sbox = { From ecbedd77de7e7f62592dfc00827667c50ae2d958 Mon Sep 17 00:00:00 2001 From: wsor4035 <24964441+wsor4035@users.noreply.github.com> Date: Fri, 27 Dec 2024 18:35:45 -0500 Subject: [PATCH 09/11] make the items opaque to improve rendering performance and hide bad geometry --- homedecor_3d_extras/init.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/homedecor_3d_extras/init.lua b/homedecor_3d_extras/init.lua index 69be9a1c..3ed2ca6f 100644 --- a/homedecor_3d_extras/init.lua +++ b/homedecor_3d_extras/init.lua @@ -36,7 +36,6 @@ if minetest.get_modpath("vessels") then tiles = {"homedecor_3d_vessels_shelf_glass.png"}, inventory_image = "homedecor_3d_vessels_glass_bottle_inv.png", wield_image = "homedecor_3d_vessels_glass_bottle_inv.png", - use_texture_alpha = "blend", selection_box = sbox }) @@ -55,7 +54,6 @@ if minetest.get_modpath("vessels") then tiles = {"homedecor_3d_vessels_shelf_glass.png"}, inventory_image = "homedecor_3d_vessels_drinking_glass_inv.png", wield_image = "homedecor_3d_vessels_drinking_glass_inv.png", - use_texture_alpha = "blend", selection_box = sbox }) end From f7d51645593600df14e1e693442e5e0d95d63c03 Mon Sep 17 00:00:00 2001 From: wsor4035 <24964441+wsor4035@users.noreply.github.com> Date: Sat, 28 Dec 2024 22:34:54 -0500 Subject: [PATCH 10/11] fix https://github.com/mt-mods/homedecor_modpack/issues/88 - improve usage of use_texture_alpha to improve client rendering (#89) --- homedecor_bathroom/init.lua | 1 - homedecor_doors_and_gates/init.lua | 29 ++++++++++++++++------- homedecor_lighting/init.lua | 3 --- homedecor_roofing/init.lua | 2 +- homedecor_tables/coffeetable.lua | 2 +- homedecor_tables/endtable.lua | 2 +- homedecor_tables/misc.lua | 6 ++--- homedecor_windows_and_treatments/init.lua | 2 +- lavalamp/init.lua | 1 - 9 files changed, 27 insertions(+), 21 deletions(-) diff --git a/homedecor_bathroom/init.lua b/homedecor_bathroom/init.lua index cd2e1e5e..14f726dd 100644 --- a/homedecor_bathroom/init.lua +++ b/homedecor_bathroom/init.lua @@ -239,7 +239,6 @@ homedecor.register("toilet_open", { selection_box = toilet_sbox, collision_box = toilet_cbox, drop = "homedecor:toilet", - use_texture_alpha = "blend", groups = {cracky=3, dig_stone = 2}, _sound_def = { key = "node_sound_stone_defaults", diff --git a/homedecor_doors_and_gates/init.lua b/homedecor_doors_and_gates/init.lua index 84356de0..28146472 100644 --- a/homedecor_doors_and_gates/init.lua +++ b/homedecor_doors_and_gates/init.lua @@ -19,6 +19,7 @@ local door_list = { sounds = default.node_sound_wood_defaults(), sound_open = "homedecor_door_open", sound_close = "homedecor_door_close", + use_texture_alpha = "opaque", }, { name = "exterior_fancy", @@ -26,25 +27,29 @@ local door_list = { sounds = default.node_sound_wood_defaults(), sound_open = "homedecor_door_open", sound_close = "homedecor_door_close", - mesh = "homedecor_door_fancy" + mesh = "homedecor_door_fancy", + use_texture_alpha = "blend", }, { name = "french_oak", description = S("French door, Oak-colored"), sounds = default.node_sound_glass_defaults(), - mesh = "homedecor_door_french" + mesh = "homedecor_door_french", + use_texture_alpha = "blend", }, { name = "french_mahogany", description = S("French door, Mahogany-colored"), sounds = default.node_sound_glass_defaults(), - mesh = "homedecor_door_french" + mesh = "homedecor_door_french", + use_texture_alpha = "blend", }, { name = "french_white", description = S("French door, White"), sounds = default.node_sound_glass_defaults(), - mesh = "homedecor_door_french" + mesh = "homedecor_door_french", + use_texture_alpha = "blend", }, { name = "basic_panel", @@ -52,6 +57,7 @@ local door_list = { sounds = default.node_sound_wood_defaults(), sound_open = "homedecor_door_open", sound_close = "homedecor_door_close", + use_texture_alpha = "opaque", }, { name = "wrought_iron", @@ -59,7 +65,8 @@ local door_list = { sounds = default.node_sound_metal_defaults(), sound_open = "doors_steel_door_open", sound_close = "doors_steel_door_close", - mesh = "homedecor_door_wrought_iron" + mesh = "homedecor_door_wrought_iron", + use_texture_alpha = "clip", }, { name = "carolina", @@ -67,6 +74,7 @@ local door_list = { sounds = default.node_sound_wood_defaults(), sound_open = "homedecor_door_open", sound_close = "homedecor_door_close", + use_texture_alpha = "blend", }, { name = "woodglass", @@ -74,19 +82,22 @@ local door_list = { sounds = default.node_sound_wood_defaults(), sound_open = "homedecor_door_open", sound_close = "homedecor_door_close", - mesh = "homedecor_door_wood_glass_3" + mesh = "homedecor_door_wood_glass_3", + use_texture_alpha = "clip", }, { name = "closet_mahogany", description = S("Mahogany Closet Door"), sounds = default.node_sound_wood_defaults(), - mesh = "homedecor_door_closet" + mesh = "homedecor_door_closet", + use_texture_alpha = "clip", }, { name = "closet_oak", description = S("Oak Closet Door"), sounds = default.node_sound_wood_defaults(), - mesh = "homedecor_door_closet" + mesh = "homedecor_door_closet", + use_texture_alpha = "clip", }, } @@ -99,7 +110,7 @@ local function generate_door(def) local default_settings = { tiles = {{ name = "homedecor_door_" .. def.name .. ".png", backface_culling = true }}, inventory_image = "homedecor_door_" .. def.name .. "_inv.png", - use_texture_alpha = "blend", + use_texture_alpha = def.use_texture_alpha or "blend", groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, mesecons = { effector = { diff --git a/homedecor_lighting/init.lua b/homedecor_lighting/init.lua index adcc3559..ac7b11c5 100644 --- a/homedecor_lighting/init.lua +++ b/homedecor_lighting/init.lua @@ -488,7 +488,6 @@ for brightness_level = 0, 14 do description = S("Ground Lantern/Light"), mesh = "homedecor_ground_lantern.obj", tiles = { gen_ls_tex_yellow, "homedecor_generic_metal_wrought_iron.png" }, - use_texture_alpha = "blend", inventory_image = "homedecor_ground_lantern_inv.png", wield_image = "homedecor_ground_lantern_inv.png", groups = {snappy=3, not_in_creative_inventory = nici, dig_glass=1}, @@ -515,7 +514,6 @@ for brightness_level = 0, 14 do description = S("Hanging Lantern/Light"), mesh = "homedecor_hanging_lantern.obj", tiles = { "homedecor_generic_metal_wrought_iron.png", gen_ls_tex_yellow }, - use_texture_alpha = "blend", inventory_image = "homedecor_hanging_lantern_inv.png", wield_image = "homedecor_hanging_lantern_inv.png", groups = {snappy=3, not_in_creative_inventory = nici, dig_glass=1}, @@ -951,7 +949,6 @@ for _, light_brightn_name in ipairs({"off", "on"}) do gen_ls_tex_yellow, "homedecor_generic_metal_wrought_iron.png" }, - use_texture_alpha = "blend", inventory_image = "homedecor_wall_lamp_inv.png", groups = {snappy=3, not_in_creative_inventory = nici, dig_glass=1}, light_source = onflag and (minetest.LIGHT_MAX - 3) or nil, diff --git a/homedecor_roofing/init.lua b/homedecor_roofing/init.lua index 123f12bd..54993f58 100644 --- a/homedecor_roofing/init.lua +++ b/homedecor_roofing/init.lua @@ -159,7 +159,7 @@ homedecor_roofing.register_slope = function(modname, subname, recipeitem, groups paramtype2 = "facedir", selection_box = slope_cbox, collision_box = slope_cbox, - use_texture_alpha = "blend", + use_texture_alpha = "clip", groups = groups, is_ground_content = false, _mcl_hardness=1.6, diff --git a/homedecor_tables/coffeetable.lua b/homedecor_tables/coffeetable.lua index 16af01e8..70a69d02 100644 --- a/homedecor_tables/coffeetable.lua +++ b/homedecor_tables/coffeetable.lua @@ -57,7 +57,7 @@ minetest.register_node(":lrfurn:coffeetable", { }, paramtype = "light", paramtype2 = "facedir", - use_texture_alpha = "blend", + use_texture_alpha = "clip", groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3, axey=5}, is_ground_content = false, _mcl_hardness=1.6, diff --git a/homedecor_tables/endtable.lua b/homedecor_tables/endtable.lua index e772d4a8..57494c31 100644 --- a/homedecor_tables/endtable.lua +++ b/homedecor_tables/endtable.lua @@ -15,7 +15,7 @@ minetest.register_node(":lrfurn:endtable", { }, paramtype = "light", paramtype2 = "facedir", - use_texture_alpha = "blend", + use_texture_alpha = "clip", groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3, axey=5}, is_ground_content = false, _mcl_hardness=1.6, diff --git a/homedecor_tables/misc.lua b/homedecor_tables/misc.lua index 1cf74504..f38419b6 100644 --- a/homedecor_tables/misc.lua +++ b/homedecor_tables/misc.lua @@ -34,7 +34,7 @@ for _, t in ipairs(leg_materials) do inventory_image = "homedecor_table_legs_"..name..".png", wield_image = "homedecor_table_legs_"..name..".png", walkable = false, - use_texture_alpha = "blend", + use_texture_alpha = "clip", groups = {snappy=3, dig_tree=2}, _sound_def = { key = "node_sound_wood_defaults", @@ -79,7 +79,7 @@ for i, mat in ipairs(tabletop_materials) do 'blank.png', }, wield_image = 'homedecor_'..m..'_table_'..shape..'_inv.png', - use_texture_alpha = "blend", + use_texture_alpha = "clip", groups = { snappy = 3, dig_tree=2 }, _sound_def = { key = s, @@ -117,7 +117,7 @@ for i, mat in ipairs(tabletop_materials) do 'homedecor_'..m..'_table_edges.png', "homedecor_table_legs_"..leg_mat..".png", }, - use_texture_alpha = "blend", + use_texture_alpha = "clip", groups = { snappy = 3, dig_tree=2 }, _sound_def = { key = s diff --git a/homedecor_windows_and_treatments/init.lua b/homedecor_windows_and_treatments/init.lua index d65ff5a2..e8941c3b 100644 --- a/homedecor_windows_and_treatments/init.lua +++ b/homedecor_windows_and_treatments/init.lua @@ -12,7 +12,7 @@ homedecor.register("window_quartered", { "homedecor_window_quartered.png", "homedecor_window_quartered.png" }, - use_texture_alpha = "blend", + use_texture_alpha = "clip", groups = {snappy=3, dig_glass=2}, _sound_def = { key = "node_sound_glass_defaults", diff --git a/lavalamp/init.lua b/lavalamp/init.lua index 72a3171f..d2954922 100644 --- a/lavalamp/init.lua +++ b/lavalamp/init.lua @@ -22,7 +22,6 @@ minetest.register_node("lavalamp:lavalamp", { }, }, }, - use_texture_alpha = "blend", inventory_image = "lavalamp_lamp_inv.png", paramtype = "light", paramtype2 = "color", From e5119cad05ce8829fc2aa1b724f3e2da8767ad6c Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 13 May 2021 16:30:08 -0700 Subject: [PATCH 11/11] Set string in PlayerMetaRef instead of in player object attribute --- homedecor_wardrobe/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homedecor_wardrobe/init.lua b/homedecor_wardrobe/init.lua index 07be366c..6e22d936 100644 --- a/homedecor_wardrobe/init.lua +++ b/homedecor_wardrobe/init.lua @@ -71,9 +71,9 @@ local function set_player_skin(player, skin, save) if save and not skinsdb_mod_path then if skin == default_skin then - player:set_attribute("homedecor:player_skin", "") + player:get_meta():set_string("homedecor:player_skin", "") else - player:set_attribute("homedecor:player_skin", skin) + player:get_meta():set_string("homedecor:player_skin", skin) end end end