MineClone2/mods/PLAYER/mcl_death_drop/init.lua

57 lines
2.0 KiB
Lua
Raw Normal View History

2021-03-27 20:12:48 +01:00
local random = math.random
mcl_death_drop = {}
mcl_death_drop.registered_dropped_lists = {}
function mcl_death_drop.register_dropped_list(inv, listname, drop)
2021-03-27 20:23:51 +01:00
table.insert(mcl_death_drop.registered_dropped_lists, {inv=inv, listname=listname, drop=drop})
2021-03-27 20:12:48 +01:00
end
mcl_death_drop.register_dropped_list("PLAYER", "main", true)
mcl_death_drop.register_dropped_list("PLAYER", "craft", true)
mcl_death_drop.register_dropped_list("PLAYER", "armor", true)
2021-03-27 23:07:46 +01:00
mcl_death_drop.register_dropped_list(function(player) return select(3, armor:get_valid_player(player)) end , "armor", false)
2021-03-27 20:12:48 +01:00
minetest.register_on_dieplayer(function(player)
local keep = minetest.settings:get_bool("mcl_keepInventory", false)
if keep == false then
-- Drop inventory, crafting grid and armor
2021-03-27 20:23:51 +01:00
local playerinv = player:get_inventory()
local pos = player:get_pos()
-- No item drop if in deep void
2021-04-15 23:41:34 +02:00
local _, void_deadly = mcl_worlds.is_in_void(pos)
2021-03-27 20:12:48 +01:00
for l=1,#mcl_death_drop.registered_dropped_lists do
local inv = mcl_death_drop.registered_dropped_lists[l].inv
2021-03-27 20:23:51 +01:00
if inv == "PLAYER" then
inv = playerinv
elseif type(inv) == "function" then
inv = inv(player)
end
2021-03-27 20:12:48 +01:00
local listname = mcl_death_drop.registered_dropped_lists[l].listname
local drop = mcl_death_drop.registered_dropped_lists[l].drop
if inv ~= nil then
for i, stack in ipairs(inv:get_list(listname)) do
2021-03-27 20:12:48 +01:00
local x = random(0, 9)/3
local z = random(0, 9)/3
pos.x = pos.x + x
pos.z = pos.z + z
2020-11-02 13:38:17 +01:00
if not void_deadly and drop and not mcl_enchanting.has_enchantment(stack, "curse_of_vanishing") then
local def = minetest.registered_items[stack:get_name()]
if def and def.on_drop then
stack = def.on_drop(stack, player, pos)
end
minetest.add_item(pos, stack)
end
pos.x = pos.x - x
pos.z = pos.z - z
end
inv:set_list(listname, {})
end
end
armor:set_player_armor(player)
armor:update_inventory(player)
end
end)