mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2025-04-23 07:35:16 +02:00
Add API compatibility with old mcl_itemframes, clean-up
This commit is contained in:
parent
59aec085b1
commit
5ea39f9cc1
3 changed files with 57 additions and 21 deletions
mods/ITEMS/mcl_itemframes
|
@ -1,3 +1,5 @@
|
|||
local S = core.get_translator(core.get_current_modname())
|
||||
|
||||
local entity_stub = {
|
||||
on_activate = function(self)
|
||||
self.object:remove()
|
||||
|
@ -12,12 +14,10 @@ core.register_entity("mcl_itemframes:glow_item_frame_map", entity_stub)
|
|||
core.register_alias("mcl_itemframes:item_frame", "mcl_itemframes:frame")
|
||||
core.register_alias("mcl_itemframes:glow_item_frame", "mcl_itemframes:glow_frame")
|
||||
|
||||
-- TODO: add compatibility with the old API
|
||||
|
||||
core.register_lbm({
|
||||
label = "Convert old itemframes",
|
||||
name = "mcl_itemframes:convert_old_itemframes",
|
||||
nodenames = { "mcl_itemframes:item_frame", "mcl_itemframes:glow_item_frame" },
|
||||
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_","")
|
||||
|
@ -27,3 +27,26 @@ core.register_lbm({
|
|||
mcl_itemframes.update_entity(pos)
|
||||
end
|
||||
})
|
||||
|
||||
function mcl_itemframes.create_custom_frame(_, name, has_glow, tiles, _, ttframe, description, inv_wield_image)
|
||||
if not inv_wield_image or inv_wield_image == "" then
|
||||
inv_wield_image = tiles
|
||||
end
|
||||
|
||||
local def = {
|
||||
node = {
|
||||
description = description,
|
||||
_tt_help = ttframe,
|
||||
_doc_items_longdesc = S("Item frames are decorative blocks in which items can be placed."),
|
||||
_doc_items_usagehelp = S("Just place any item on the item frame. Use the item frame again to retrieve the item."),
|
||||
tiles = {tiles},
|
||||
inventory_image = inv_wield_image,
|
||||
wield_image = inv_wield_image,
|
||||
},
|
||||
}
|
||||
if has_glow then
|
||||
def.object_properties = {glow = 15}
|
||||
end
|
||||
|
||||
return mcl_itemframes.register_itemframe(name, def)
|
||||
end
|
||||
|
|
|
@ -27,7 +27,7 @@ local map_props = {
|
|||
textures = {"blank.png"},
|
||||
}
|
||||
|
||||
mcl_itemframes.tpl_node = {
|
||||
local tpl_node = {
|
||||
drawtype = "mesh",
|
||||
is_ground_content = false,
|
||||
mesh = "mcl_itemframes_frame.obj",
|
||||
|
@ -47,10 +47,12 @@ mcl_itemframes.tpl_node = {
|
|||
allow_metadata_inventory_take = function() return 0 end,
|
||||
}
|
||||
|
||||
mcl_itemframes.tpl_entity = {
|
||||
local tpl_entity = {
|
||||
initial_properties = base_props,
|
||||
}
|
||||
|
||||
local tpl_groups = {dig_immediate = 3, deco_block = 1, dig_by_piston = 1, handy = 1, axey = 1, itemframe = 1}
|
||||
|
||||
-- Utility functions
|
||||
local function find_entity(pos)
|
||||
for _,o in pairs(core.get_objects_inside_radius(pos, 0.45)) do
|
||||
|
@ -110,7 +112,7 @@ end
|
|||
mcl_itemframes.update_entity = update_entity
|
||||
|
||||
-- Node functions
|
||||
function mcl_itemframes.tpl_node.on_rightclick(pos, node, clicker, ostack, pointed_thing)
|
||||
function tpl_node.on_rightclick(pos, node, clicker, ostack, pointed_thing)
|
||||
local name = clicker:get_player_name()
|
||||
if core.is_protected(pos, name) then
|
||||
core.record_protection_violation(pos, name)
|
||||
|
@ -128,16 +130,16 @@ function mcl_itemframes.tpl_node.on_rightclick(pos, node, clicker, ostack, point
|
|||
return ostack
|
||||
end
|
||||
|
||||
mcl_itemframes.tpl_node.on_destruct = remove_entity
|
||||
tpl_node.on_destruct = remove_entity
|
||||
|
||||
function mcl_itemframes.tpl_node.on_construct(pos)
|
||||
function tpl_node.on_construct(pos)
|
||||
local meta = core.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 1)
|
||||
end
|
||||
|
||||
-- Entity functions
|
||||
function mcl_itemframes.tpl_entity:set_item(itemstack, pos)
|
||||
function tpl_entity:set_item(itemstack, pos)
|
||||
if not itemstack or not itemstack.get_name then
|
||||
self.object:remove()
|
||||
update_entity(pos)
|
||||
|
@ -151,7 +153,7 @@ function mcl_itemframes.tpl_entity:set_item(itemstack, pos)
|
|||
local ndef = core.registered_nodes[core.get_node(pos).name]
|
||||
if not ndef._mcl_itemframe then
|
||||
self.object:remove()
|
||||
update_entity()
|
||||
update_entity(pos)
|
||||
return
|
||||
end
|
||||
local def = mcl_itemframes.registered_itemframes[ndef._mcl_itemframe]
|
||||
|
@ -163,6 +165,7 @@ function mcl_itemframes.tpl_entity:set_item(itemstack, pos)
|
|||
self.object:set_pos(vector.add(self._itemframe_pos, dir * 0.42))
|
||||
self.object:set_rotation(vector.dir_to_rotation(dir))
|
||||
|
||||
-- map support
|
||||
if self._map_id then
|
||||
mcl_maps.load_map(self._map_id, function(texture)
|
||||
if self.object and self.object:get_pos() then
|
||||
|
@ -171,24 +174,34 @@ function mcl_itemframes.tpl_entity:set_item(itemstack, pos)
|
|||
end)
|
||||
return
|
||||
end
|
||||
|
||||
local idef = itemstack:get_definition()
|
||||
local ws = idef.wield_scale
|
||||
self.object:set_properties(table_merge(base_props, {
|
||||
wield_item = self._item,
|
||||
visual_size = {x = base_props.visual_size.x / ws.x, y = base_props.visual_size.y / ws.y},
|
||||
-- apply the wield_scale to the set item
|
||||
visual_size = {
|
||||
x = base_props.visual_size.x / ws.x,
|
||||
y = base_props.visual_size.y / ws.y
|
||||
},
|
||||
}, def.object_properties or {}))
|
||||
end
|
||||
|
||||
function mcl_itemframes.tpl_entity:get_staticdata()
|
||||
local s = {item = self._item, itemframe_pos = self._itemframe_pos, itemstack = self._itemstack, map_id = self._map_id}
|
||||
function tpl_entity:get_staticdata()
|
||||
local s = {
|
||||
item = self._item,
|
||||
itemframe_pos = self._itemframe_pos,
|
||||
itemstack = self._itemstack,
|
||||
map_id = self._map_id
|
||||
}
|
||||
s.props = self.object:get_properties()
|
||||
return core.serialize(s)
|
||||
end
|
||||
|
||||
function mcl_itemframes.tpl_entity:on_activate(staticdata, dtime_s)
|
||||
function tpl_entity:on_activate(staticdata, dtime_s)
|
||||
local s = core.deserialize(staticdata)
|
||||
if (type(staticdata) == "string" and dtime_s and dtime_s > 0) then
|
||||
--try to re-initialize items without proper staticdata
|
||||
-- try to re-initialize items without proper staticdata
|
||||
local p = core.find_node_near(self.object:get_pos(), 1, {"group:itemframe"})
|
||||
self.object:remove()
|
||||
if p then
|
||||
|
@ -205,7 +218,7 @@ function mcl_itemframes.tpl_entity:on_activate(staticdata, dtime_s)
|
|||
end
|
||||
end
|
||||
|
||||
function mcl_itemframes.tpl_entity:on_step(dtime)
|
||||
function tpl_entity:on_step(dtime)
|
||||
self._timer = (self._timer and self._timer - dtime) or 1
|
||||
if self._timer > 0 then return end
|
||||
self._timer = 1
|
||||
|
@ -223,20 +236,20 @@ function mcl_itemframes.register_itemframe(name, def)
|
|||
local nodename = "mcl_itemframes:"..name
|
||||
table.insert(mcl_itemframes.registered_nodes, nodename)
|
||||
mcl_itemframes.registered_itemframes[name] = def
|
||||
core.register_node(":"..nodename, table_merge(mcl_itemframes.tpl_node, def.node, {
|
||||
core.register_node(":"..nodename, table_merge(tpl_node, def.node, {
|
||||
_mcl_itemframe = name,
|
||||
groups = table_merge({dig_immediate = 3, deco_block = 1, dig_by_piston = 1, handy = 1, axey = 1, itemframe = 1}, def.node.groups),
|
||||
groups = table_merge(tpl_groups, def.node.groups)
|
||||
}))
|
||||
end
|
||||
|
||||
core.register_entity("mcl_itemframes:item", mcl_itemframes.tpl_entity)
|
||||
core.register_entity("mcl_itemframes:item", tpl_entity)
|
||||
|
||||
core.register_lbm({
|
||||
label = "Respawn item frame item entities",
|
||||
name = "mcl_itemframes:respawn_entities",
|
||||
nodenames = {"group:itemframe"},
|
||||
run_at_every_load = true,
|
||||
action = function(pos,_)
|
||||
action = function(pos)
|
||||
update_entity(pos)
|
||||
end
|
||||
})
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
name = mcl_itemframes
|
||||
depends = mcl_core, mcl_sounds, mcl_compass, mcl_maps, screwdriver, awards
|
||||
depends = mcl_core, mcl_clock, mcl_sounds, mcl_maps, screwdriver, awards
|
||||
|
|
Loading…
Add table
Reference in a new issue