Aaron Suen 402769962b Disable toolbelt display.
This was effectively never really working in practice on MP, and
only ended up more of an eyesore than anything.  Since it was
really only ever cosmetic, it's probably okay to just leave
this one out.

Clean up some old issues that are probably not worth worrying
about anymore.
2019-03-12 22:12:40 -04:00

132 lines
3.0 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local minetest, table
= minetest, table
local table_remove
= table.remove
-- LUALOCALS > ---------------------------------------------------------
local modname = minetest.get_current_modname()
local function entprops(stack, conf)
local t = {
hp_max = 1,
physical = false,
collide_with_objects = false,
collisionbox = {0, 0, 0, 0, 0, 0},
visual = "wielditem",
visual_size = {x = 0.1, y = 0.1, z = 0.1},
textures = {""},
spritediv = {x = 1, y = 1},
initial_sprite_basepos = {x = 0, y = 0},
is_visible = false,
static_save = false
}
if not stack then return t end
if stack:is_empty() then return t end
local def = minetest.registered_items[stack:get_name()] or {}
if def.virtual_item then return t end
t.is_visible = true
t.textures[1] = stack:get_name()
if conf and conf.slot == 0 then
t.visual_size = {x = 0.2, y = 0.2, z = 0.2}
end
return t
end
local attq = {}
minetest.register_entity(modname .. ":ent", {
initial_properties = entprops(),
on_step = function(self, dtime)
local conf = self.conf
if not conf then return self.object:remove() end
-- if self.ttl then
-- self.ttl = self.ttl - dtime
-- if self.ttl <= 0 then
-- attq[#attq + 1] = conf
-- return self.object:remove()
-- end
-- else self.ttl = math_random() * 5 + 5 end
local player = minetest.get_player_by_name(conf.pname)
if not player then return self.object:remove() end
if not self.att then
self.att = true
return self.object:set_attach(player,
conf.bone, conf.apos, conf.arot)
end
local inv = player:get_inventory()
local sz = inv:get_size("main")
local s = conf.slot + player:get_wield_index()
if s > sz then s = s - sz end
local stack = inv:get_stack("main", s)
local sn = stack:get_name()
if sn ~= self.sn then
self.sn = sn
self.object:set_properties(entprops(stack, conf))
end
end
})
minetest.register_globalstep(function()
local v = table_remove(attq, 1)
if not v then return end
local player = minetest.get_player_by_name(v.pname)
if not player then return end
if not minetest.get_node_or_nil(player:get_pos()) then
attq[#attq + 1] = v
return
end
local obj = minetest.add_entity(v.pos, modname .. ":ent")
local ent = obj:get_luaentity()
ent.conf = v
end)
minetest.register_on_joinplayer(function(player)
local pname = player:get_player_name()
local pos = player:get_pos()
local function addslot(n, b, x, y, z, rx, ry, rz)
attq[#attq + 1] = {
pname = pname,
slot = n,
pos = pos,
bone = b,
apos = {
x = x,
y = y,
z = z
},
arot = {
x = rx or 0,
y = ry or 0,
z = rz or 0
}
}
end
addslot(0, "Arm_Right", -2.5, 8, 0, 2, 178, 60)
-- local function cslot(n, x, z)
-- return addslot(n, nil, x * 1.6,
-- (nodecore.mt_old and -4 or 5.5) + x / 2,
-- z * 2.1)
-- end
-- cslot(1, 1, 1)
-- cslot(2, 0, 1.2)
-- cslot(3, -1, 1)
-- cslot(4, -2, 0)
-- cslot(5, -1, -1)
-- cslot(6, 0, -1.2)
-- cslot(7, 1, -1)
end)