Compare commits
5 Commits
3f92ed6bc4
...
d8ce7ba84e
Author | SHA1 | Date |
---|---|---|
|
d8ce7ba84e | |
|
a2acecd330 | |
|
2a8051a5ba | |
|
640317878e | |
|
d28cc59bea |
|
@ -7,7 +7,7 @@ Shows wielded items in-world.
|
|||
Modern alternative to [`wield3d`](https://github.com/stujones11/wield3d):
|
||||
|
||||
* Relies less on deprecated engine APIs, doesn't aim to support older MT versions
|
||||
* Supports colored items. Works well with [`epidermis`](https://github.com/epidermis).
|
||||
* Supports colored items. Works well with [`epidermis`](https://github.com/appgurueu/epidermis).
|
||||
* Supports glow (for environmental lighting use a wielded light mod)
|
||||
* Indicates size of stacks
|
||||
* Provides a proper API for mods to use
|
||||
|
|
26
init.lua
26
init.lua
|
@ -1,19 +1,19 @@
|
|||
visible_wielditem = {}
|
||||
|
||||
local entity_name = "visible_wielditem:visible_wielditem"
|
||||
|
||||
local entities = {}
|
||||
|
||||
local function create_entity(player)
|
||||
local entity = minetest.add_entity(player:get_pos(), "visible_wielditem:visible_wielditem"):get_luaentity()
|
||||
entity:_set_player(player)
|
||||
entities[player:get_player_name()] = entity
|
||||
local pos = player:get_pos()
|
||||
if not pos then return end -- HACK deal with player object being invalidated before on_leaveplayer has been called
|
||||
minetest.add_entity(pos, entity_name):get_luaentity():_set_player(player)
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(create_entity)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
local player_name = player:get_player_name()
|
||||
entities[player_name]:remove()
|
||||
entities[player_name] = nil
|
||||
entities[player:get_player_name()]:_remove()
|
||||
end)
|
||||
|
||||
visible_wielditem.model_attachments = {
|
||||
|
@ -72,9 +72,9 @@ function visible_wielditem.get_attachment(modelname, itemname)
|
|||
end
|
||||
if tweaks.scale then attachment.scale = attachment.scale * tweaks.scale end
|
||||
end
|
||||
local def = minetest.registered_items[itemname]
|
||||
local def = minetest.registered_items[itemname] or {}
|
||||
local item_tweaks = visible_wielditem.item_tweaks
|
||||
apply_tweaks(item_tweaks.types[def and def.type or "unknown"])
|
||||
apply_tweaks(item_tweaks.types[def.type or "unknown"])
|
||||
for groupname, rating in pairs(def.groups or {}) do
|
||||
if rating ~= 0 then
|
||||
apply_tweaks(item_tweaks.groups[groupname])
|
||||
|
@ -85,7 +85,7 @@ function visible_wielditem.get_attachment(modelname, itemname)
|
|||
return attachment
|
||||
end
|
||||
|
||||
minetest.register_entity("visible_wielditem:visible_wielditem", {
|
||||
minetest.register_entity(entity_name, {
|
||||
initial_properties = {
|
||||
physical = false,
|
||||
collide_with_objects = false,
|
||||
|
@ -127,6 +127,7 @@ minetest.register_entity("visible_wielditem:visible_wielditem", {
|
|||
self._player = player -- HACK this assumes that PlayerRefs don't change
|
||||
self:_set_item(player:get_wielded_item())
|
||||
self:_update_attachment()
|
||||
entities[player:get_player_name()] = self
|
||||
end,
|
||||
on_deactivate = function(self)
|
||||
create_entity(self._player)
|
||||
|
@ -148,6 +149,11 @@ minetest.register_entity("visible_wielditem:visible_wielditem", {
|
|||
}
|
||||
self:_update_attachment()
|
||||
end,
|
||||
_remove = function(self)
|
||||
self.on_deactivate = modlib.func.no_op -- don't recreate entity; it's supposed to be removed
|
||||
self.object:remove()
|
||||
entities[self._player:get_player_name()] = nil
|
||||
end
|
||||
-- TODO on_step: reattach regularly to work around engine bugs?
|
||||
})
|
||||
|
||||
|
@ -158,4 +164,4 @@ modlib.minetest.register_on_wielditem_change(function(player, _, _, item)
|
|||
else -- recreate entity if necessary
|
||||
create_entity(player)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
|
Loading…
Reference in New Issue