mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2025-04-23 07:35:16 +02:00
Clean-up
This commit is contained in:
parent
663df00d7f
commit
59aec085b1
4 changed files with 115 additions and 101 deletions
mods/ITEMS/mcl_itemframes
|
@ -1,10 +1,19 @@
|
|||
# mcl_itemframes
|
||||
# `mcl_itemframes` API
|
||||
|
||||
## Functions
|
||||
* mcl_itemframes.register_itemframe(name, itemframe_definition)
|
||||
* mcl_itemframes.remove_entity(pos)
|
||||
* Removes the item entity belonging to the itemframe at `pos`, does not delete the item(inventory) of the itemframe.
|
||||
* mcl_itemframes.update_entity(pos)
|
||||
* Updates the item entity belonging to the itemframe at `pos` according to it's set item (node inventory)
|
||||
|
||||
* `mcl_itemframes.register_itemframe(name, itemframe_definition)`
|
||||
* `mcl_itemframes.remove_entity(pos)`
|
||||
* Removes the item entity belonging to the itemframe at `pos`, does not delete the item (inventory) of the itemframe.
|
||||
* `mcl_itemframes.update_entity(pos)`
|
||||
* Updates the item entity belonging to the itemframe at `pos` according to it's set item (node inventory).
|
||||
|
||||
## Tables
|
||||
|
||||
* `mcl_itemframes.registered_nodes`
|
||||
* List of all nodes registered by `mcl_itemframes`.
|
||||
* `mcl_itemframes.registered_itemframes`
|
||||
* Dictionary of registered itemframe definitions, indexed by `name`, as passed into the registration function.
|
||||
|
||||
## Itemframe definition
|
||||
|
||||
|
|
|
@ -4,23 +4,25 @@ local entity_stub = {
|
|||
end
|
||||
}
|
||||
|
||||
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)
|
||||
core.register_entity("mcl_itemframes:item_frame_item", entity_stub)
|
||||
core.register_entity("mcl_itemframes:item_frame_map", entity_stub)
|
||||
core.register_entity("mcl_itemframes:glow_item_frame_item", entity_stub)
|
||||
core.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")
|
||||
core.register_alias("mcl_itemframes:item_frame", "mcl_itemframes:frame")
|
||||
core.register_alias("mcl_itemframes:glow_item_frame", "mcl_itemframes:glow_frame")
|
||||
|
||||
minetest.register_lbm({
|
||||
-- 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" },
|
||||
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)
|
||||
node.param2 = core.dir_to_wallmounted(core.facedir_to_dir(node.param2))
|
||||
core.swap_node(pos, node)
|
||||
mcl_itemframes.remove_entity(pos)
|
||||
mcl_itemframes.update_entity(pos)
|
||||
end
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
mcl_itemframes = {}
|
||||
mcl_itemframes.registered_nodes = {}
|
||||
mcl_itemframes.registered_itemframes = {}
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local function table_merge(t, ...)
|
||||
local t2 = table.copy(t)
|
||||
|
@ -15,17 +14,17 @@ local fbox = {
|
|||
|
||||
local base_props = {
|
||||
visual = "wielditem",
|
||||
visual_size = { x = 0.3, y = 0.3 },
|
||||
visual_size = {x = 0.3, y = 0.3},
|
||||
physical = false,
|
||||
pointable = false,
|
||||
textures = { "blank.png" },
|
||||
textures = {"blank.png"},
|
||||
}
|
||||
|
||||
local map_props = {
|
||||
visual = "upright_sprite",
|
||||
visual_size = { x = 1, y = 1 },
|
||||
visual_size = {x = 1, y = 1},
|
||||
collide_with_objects = false,
|
||||
textures = { "blank.png" },
|
||||
textures = {"blank.png"},
|
||||
}
|
||||
|
||||
mcl_itemframes.tpl_node = {
|
||||
|
@ -51,9 +50,10 @@ mcl_itemframes.tpl_node = {
|
|||
mcl_itemframes.tpl_entity = {
|
||||
initial_properties = base_props,
|
||||
}
|
||||
--Utility functions
|
||||
|
||||
-- Utility functions
|
||||
local function find_entity(pos)
|
||||
for _,o in pairs(minetest.get_objects_inside_radius(pos, 0.45)) do
|
||||
for _,o in pairs(core.get_objects_inside_radius(pos, 0.45)) do
|
||||
local l = o:get_luaentity()
|
||||
if l and l.name == "mcl_itemframes:item" then
|
||||
return l
|
||||
|
@ -64,7 +64,7 @@ end
|
|||
local function find_or_create_entity(pos)
|
||||
local l = find_entity(pos)
|
||||
if not l then
|
||||
l = minetest.add_entity(pos, "mcl_itemframes:item"):get_luaentity()
|
||||
l = core.add_entity(pos, "mcl_itemframes:item"):get_luaentity()
|
||||
end
|
||||
return l
|
||||
end
|
||||
|
@ -78,8 +78,8 @@ end
|
|||
mcl_itemframes.remove_entity = remove_entity
|
||||
|
||||
local function drop_item(pos)
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
minetest.add_item(pos, inv:get_stack("main", 1))
|
||||
local inv = core.get_meta(pos):get_inventory()
|
||||
core.add_item(pos, inv:get_stack("main", 1))
|
||||
inv:set_stack("main", 1, ItemStack(""))
|
||||
remove_entity(pos)
|
||||
end
|
||||
|
@ -92,7 +92,7 @@ end
|
|||
|
||||
local function update_entity(pos)
|
||||
if not pos then return end
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
local inv = core.get_meta(pos):get_inventory()
|
||||
local itemstack = inv:get_stack("main", 1)
|
||||
if not itemstack then
|
||||
remove_entity(pos)
|
||||
|
@ -109,20 +109,20 @@ local function update_entity(pos)
|
|||
end
|
||||
mcl_itemframes.update_entity = update_entity
|
||||
|
||||
--Node functions
|
||||
-- Node functions
|
||||
function mcl_itemframes.tpl_node.on_rightclick(pos, node, clicker, ostack, pointed_thing)
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
if core.is_protected(pos, name) then
|
||||
core.record_protection_violation(pos, name)
|
||||
return ostack
|
||||
end
|
||||
local pstack = ItemStack(ostack)
|
||||
local itemstack = pstack:take_item()
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
local inv = core.get_meta(pos):get_inventory()
|
||||
drop_item(pos)
|
||||
inv:set_stack("main", 1, itemstack)
|
||||
update_entity(pos)
|
||||
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
if not core.is_creative_enabled(clicker:get_player_name()) then
|
||||
return pstack
|
||||
end
|
||||
return ostack
|
||||
|
@ -131,7 +131,7 @@ end
|
|||
mcl_itemframes.tpl_node.on_destruct = remove_entity
|
||||
|
||||
function mcl_itemframes.tpl_node.on_construct(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local meta = core.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 1)
|
||||
end
|
||||
|
@ -148,7 +148,7 @@ function mcl_itemframes.tpl_entity:set_item(itemstack, pos)
|
|||
else
|
||||
pos = self._itemframe_pos
|
||||
end
|
||||
local ndef = minetest.registered_nodes[minetest.get_node(pos).name]
|
||||
local ndef = core.registered_nodes[core.get_node(pos).name]
|
||||
if not ndef._mcl_itemframe then
|
||||
self.object:remove()
|
||||
update_entity()
|
||||
|
@ -159,14 +159,14 @@ function mcl_itemframes.tpl_entity:set_item(itemstack, pos)
|
|||
self._stack = itemstack
|
||||
self._map_id = get_map_id(itemstack)
|
||||
|
||||
local dir = minetest.wallmounted_to_dir(minetest.get_node(pos).param2)
|
||||
local dir = core.wallmounted_to_dir(core.get_node(pos).param2)
|
||||
self.object:set_pos(vector.add(self._itemframe_pos, dir * 0.42))
|
||||
self.object:set_rotation(vector.dir_to_rotation(dir))
|
||||
|
||||
if self._map_id then
|
||||
mcl_maps.load_map(self._map_id, function(texture)
|
||||
if self.object and self.object:get_pos() then
|
||||
self.object:set_properties(table_merge(map_props, { textures = { texture }}))
|
||||
self.object:set_properties(table_merge(map_props, {textures = {texture}}))
|
||||
end
|
||||
end)
|
||||
return
|
||||
|
@ -175,21 +175,21 @@ function mcl_itemframes.tpl_entity:set_item(itemstack, pos)
|
|||
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 },
|
||||
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 }
|
||||
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 minetest.serialize(s)
|
||||
return core.serialize(s)
|
||||
end
|
||||
|
||||
function mcl_itemframes.tpl_entity:on_activate(staticdata, dtime_s)
|
||||
local s = minetest.deserialize(staticdata)
|
||||
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
|
||||
local p = minetest.find_node_near(self.object:get_pos(), 1, {"group:itemframe"})
|
||||
local p = core.find_node_near(self.object:get_pos(), 1, {"group:itemframe"})
|
||||
self.object:remove()
|
||||
if p then
|
||||
update_entity(p)
|
||||
|
@ -209,11 +209,11 @@ function mcl_itemframes.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
|
||||
if minetest.get_item_group(minetest.get_node(self._itemframe_pos).name, "itemframe") <= 0 then
|
||||
if core.get_item_group(core.get_node(self._itemframe_pos).name, "itemframe") <= 0 then
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
if minetest.get_item_group(self._item, "clock") > 0 then
|
||||
if core.get_item_group(self._item, "clock") > 0 then
|
||||
self:set_item(ItemStack("mcl_clock:clock_"..mcl_clock.get_clock_frame()))
|
||||
end
|
||||
end
|
||||
|
@ -223,76 +223,25 @@ 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
|
||||
minetest.register_node(":"..nodename, table_merge(mcl_itemframes.tpl_node, def.node, {
|
||||
core.register_node(":"..nodename, table_merge(mcl_itemframes.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({dig_immediate = 3, deco_block = 1, dig_by_piston = 1, handy = 1, axey = 1, itemframe = 1}, def.node.groups),
|
||||
}))
|
||||
end
|
||||
|
||||
minetest.register_entity("mcl_itemframes:item", mcl_itemframes.tpl_entity)
|
||||
core.register_entity("mcl_itemframes:item", mcl_itemframes.tpl_entity)
|
||||
|
||||
mcl_itemframes.register_itemframe("frame", {
|
||||
node = {
|
||||
description = S("Item Frame"),
|
||||
_tt_help = S("Can hold an item"),
|
||||
_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 = { "mcl_itemframes_itemframe_background.png" },
|
||||
inventory_image = "mcl_itemframes_item_frame.png",
|
||||
wield_image = "mcl_itemframes_item_frame.png",
|
||||
},
|
||||
})
|
||||
|
||||
mcl_itemframes.register_itemframe("glow_frame", {
|
||||
node = {
|
||||
description = S("Glow Item Frame"),
|
||||
_tt_help = S("Can hold an item and glows"),
|
||||
_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 = { "mcl_itemframes_glow_item_frame_border.png" },
|
||||
inventory_image = "mcl_itemframes_glow_item_frame.png",
|
||||
wield_image = "mcl_itemframes_glow_item_frame.png",
|
||||
},
|
||||
object_properties = { glow = 15 },
|
||||
})
|
||||
|
||||
awards.register_achievement("mcl_itemframes:glowframe", {
|
||||
title = S("Glow and Behold!"),
|
||||
description = S("Craft a glow item frame."),
|
||||
icon = "mcl_itemframes_glow_item_frame.png",
|
||||
trigger = {
|
||||
type = "craft",
|
||||
item = "mcl_itemframes:glow_item_frame",
|
||||
target = 1
|
||||
},
|
||||
type = "Advancement",
|
||||
group = "Overworld",
|
||||
})
|
||||
|
||||
minetest.register_lbm({
|
||||
core.register_lbm({
|
||||
label = "Respawn item frame item entities",
|
||||
name = "mcl_itemframes:respawn_entities",
|
||||
nodenames = { "group:itemframe" },
|
||||
nodenames = {"group:itemframe"},
|
||||
run_at_every_load = true,
|
||||
action = function(pos,_)
|
||||
update_entity(pos)
|
||||
end
|
||||
})
|
||||
|
||||
-- Register the base frame's recipes.
|
||||
minetest.register_craft({
|
||||
output = "mcl_itemframes:frame",
|
||||
recipe = {
|
||||
{ "mcl_core:stick", "mcl_core:stick", "mcl_core:stick" },
|
||||
{ "mcl_core:stick", "mcl_mobitems:leather", "mcl_core:stick" },
|
||||
{ "mcl_core:stick", "mcl_core:stick", "mcl_core:stick" },
|
||||
}
|
||||
})
|
||||
local modpath = core.get_modpath(core.get_current_modname())
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'mcl_itemframes:glow_frame',
|
||||
recipe = { 'mcl_mobitems:glow_ink_sac', 'mcl_itemframes:item_frame' },
|
||||
})
|
||||
|
||||
dofile(minetest.get_modpath(minetest.get_current_modname()).."/compat.lua")
|
||||
dofile(modpath .. "/register.lua")
|
||||
dofile(modpath .. "/compat.lua")
|
||||
|
|
54
mods/ITEMS/mcl_itemframes/register.lua
Normal file
54
mods/ITEMS/mcl_itemframes/register.lua
Normal file
|
@ -0,0 +1,54 @@
|
|||
local S = core.get_translator(core.get_current_modname())
|
||||
|
||||
mcl_itemframes.register_itemframe("frame", {
|
||||
node = {
|
||||
description = S("Item Frame"),
|
||||
_tt_help = S("Can hold an item"),
|
||||
_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 = {"mcl_itemframes_itemframe_background.png"},
|
||||
inventory_image = "mcl_itemframes_item_frame.png",
|
||||
wield_image = "mcl_itemframes_item_frame.png",
|
||||
},
|
||||
})
|
||||
|
||||
mcl_itemframes.register_itemframe("glow_frame", {
|
||||
node = {
|
||||
description = S("Glow Item Frame"),
|
||||
_tt_help = S("Can hold an item and glows"),
|
||||
_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 = {"mcl_itemframes_glow_item_frame_border.png"},
|
||||
inventory_image = "mcl_itemframes_glow_item_frame.png",
|
||||
wield_image = "mcl_itemframes_glow_item_frame.png",
|
||||
},
|
||||
object_properties = {glow = 15},
|
||||
})
|
||||
|
||||
awards.register_achievement("mcl_itemframes:glowframe", {
|
||||
title = S("Glow and Behold!"),
|
||||
description = S("Craft a glow item frame."),
|
||||
icon = "mcl_itemframes_glow_item_frame.png",
|
||||
trigger = {
|
||||
type = "craft",
|
||||
item = "mcl_itemframes:glow_item_frame",
|
||||
target = 1
|
||||
},
|
||||
type = "Advancement",
|
||||
group = "Overworld",
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
output = "mcl_itemframes:frame",
|
||||
recipe = {
|
||||
{"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"},
|
||||
{"mcl_core:stick", "mcl_mobitems:leather", "mcl_core:stick"},
|
||||
{"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"},
|
||||
}
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
type = "shapeless",
|
||||
output = "mcl_itemframes:glow_frame",
|
||||
recipe = {"mcl_mobitems:glow_ink_sac", "mcl_itemframes:frame"},
|
||||
})
|
Loading…
Add table
Reference in a new issue