Make compat conversion more reliable, convert facedir to wallmounted p2

This commit is contained in:
cora 2024-01-17 01:58:28 +01:00 committed by the-real-herowl
parent 877eb6ccd6
commit 9e3a0b8316
2 changed files with 38 additions and 15 deletions
mods/ITEMS/mcl_itemframes

View file

@ -1,4 +1,3 @@
local entity_stub = {
on_activate = function(self)
local pos = self.object:get_pos()
@ -7,6 +6,24 @@ local entity_stub = {
end
}
minetest.register_entity("mcl_itemframes:map", entity_stub)
minetest.register_entity("mcl_itemframes:glow_item", entity_stub)
minetest.register_entity("mcl_itemframes:glow_map", entity_stub)
minetest.register_entity("mcl_itemframes:item_frame_item", entity_stub)
minetest.register_entity("mcl_itemframes:item_frame_map", entity_stub)
minetest.register_entity("mcl_itemframes:glow_item_frame_item", entity_stub)
minetest.register_entity("mcl_itemframes:glow_item_frame_map", entity_stub)
minetest.register_alias("mcl_itemframes:item_frame", "mcl_itemframes:frame")
minetest.register_alias("mcl_itemframes:glow_item_frame", "mcl_itemframes:glow_frame")
minetest.register_lbm({
label = "Convert old itemframes",
name = "mcl_itemframes:convert_old_itemframes",
nodenames = { "mcl_itemframes:item_frame", "mcl_itemframes:glow_item_frame" },
run_at_every_load = false,
action = function(pos, node)
node.name = node.name:gsub("item_","")
node.param2 = minetest.dir_to_wallmounted(minetest.facedir_to_dir(node.param2))
minetest.swap_node(pos, node)
mcl_itemframes.remove_entity(pos)
mcl_itemframes.update_entity(pos)
end
})

View file

@ -73,6 +73,7 @@ local function remove_entity(pos)
l.object:remove()
end
end
mcl_itemframes.remove_entity = remove_entity
local function drop_item(pos)
local inv = minetest.get_meta(pos):get_inventory()
@ -88,6 +89,7 @@ local function get_map_id(itemstack)
end
local function update_entity(pos)
if not pos then return end
local inv = minetest.get_meta(pos):get_inventory()
local itemstack = inv:get_stack("main", 1)
if not itemstack then
@ -127,6 +129,11 @@ end
-- Entity functions
function mcl_itemframes.tpl_entity:set_item(itemstack, pos)
if not itemstack or not itemstack.get_name then
self.object:remove()
update_entity(pos)
return
end
self._itemframe_pos = pos
self._item = itemstack:get_name()
self._stack = itemstack
@ -155,16 +162,15 @@ end
function mcl_itemframes.tpl_entity:on_activate(staticdata, dtime_s)
local s = minetest.deserialize(staticdata)
if s then
if not s._itemframe_pos or not s._itemstack or not s._item then
--try to re-initialize items without proper staticdata
local p = minetest.find_node_near(self.object:get_pos(), 1, {"group:itemframe"})
self.object:remove()
if p then
update_entity(p)
end
return
if (type(staticdata) == "string" and dtime_s and dtime_s > 0) then
--try to re-initialize items without proper staticdata
local p = minetest.find_node_near(self.object:get_pos(), 1, {"group:itemframe"})
self.object:remove()
if p then
update_entity(p)
end
return
elseif s then
self._itemframe_pos = s.itemframe_pos
self._itemstack = s.itemstack
self._item = s.item
@ -200,7 +206,7 @@ end
minetest.register_entity("mcl_itemframes:item", mcl_itemframes.tpl_entity)
mcl_itemframes.register_itemframe("item_frame", {
mcl_itemframes.register_itemframe("frame", {
node = {
description = S("Item Frame"),
_tt_help = S("Can hold an item"),
@ -212,7 +218,7 @@ mcl_itemframes.register_itemframe("item_frame", {
},
})
mcl_itemframes.register_itemframe("glow_item_frame", {
mcl_itemframes.register_itemframe("glow_frame", {
node = {
description = S("Glow Item Frame"),
_tt_help = S("Can hold an item and glows"),