mirror of
https://bitbucket.org/minetest_gamers/x_enchanting.git
synced 2025-06-30 23:00:24 +02:00
Add looting and make fortune drop more stuff, implement incompatible enchantments
This commit is contained in:
56
init.lua
56
init.lua
@ -13,6 +13,12 @@ minetest.register_on_mods_loaded(function()
|
||||
XEnchanting:set_tool_enchantability(tool_def)
|
||||
end
|
||||
end
|
||||
|
||||
for _, def in pairs(minetest.registered_ores) do
|
||||
if not XEnchanting.registered_ores[def.ore] then
|
||||
XEnchanting.registered_ores[def.ore] = true
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_joinplayer(function(player, last_login)
|
||||
@ -27,7 +33,6 @@ minetest.register_on_leaveplayer(function(player, timed_out)
|
||||
XEnchanting.form_context[player:get_player_name()] = nil
|
||||
end)
|
||||
|
||||
-- Silk Touch
|
||||
local old_handle_node_drops = minetest.handle_node_drops
|
||||
|
||||
function minetest.handle_node_drops(pos, drops, digger)
|
||||
@ -37,29 +42,64 @@ function minetest.handle_node_drops(pos, drops, digger)
|
||||
return old_handle_node_drops(pos, drops, digger)
|
||||
end
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
local wield_stack = digger:get_wielded_item()
|
||||
local wield_stack_meta = wield_stack:get_meta()
|
||||
|
||||
if wield_stack_meta:get_float('is_silk_touch') == 0 then
|
||||
-- Fortune
|
||||
local fortune = wield_stack_meta:get_float('is_fortune')
|
||||
|
||||
if fortune > 0 then
|
||||
local new_drops = {}
|
||||
|
||||
for _, itemstring in ipairs(drops) do
|
||||
if XEnchanting.registered_ores[node.name]
|
||||
or minetest.get_item_group(node.name, 'stone') > 0
|
||||
or minetest.get_item_group(node.name, 'soil') > 0
|
||||
or minetest.get_item_group(node.name, 'sand') > 0
|
||||
or minetest.get_item_group(node.name, 'snowy') > 0
|
||||
or minetest.get_item_group(node.name, 'slippery') > 0
|
||||
or minetest.get_item_group(node.name, 'tree') > 0
|
||||
or minetest.get_item_group(node.name, 'leaves') > 0
|
||||
then
|
||||
local tool_capabilities = wield_stack:get_tool_capabilities()
|
||||
local stack = ItemStack(itemstring)
|
||||
local chance = math.random(1, tool_capabilities.max_drop_level)
|
||||
|
||||
stack:set_count(stack:get_count() * chance)
|
||||
|
||||
if stack:get_count() > 0 then
|
||||
table.insert(new_drops, stack)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if #new_drops > 0 then
|
||||
return old_handle_node_drops(pos, new_drops, digger)
|
||||
end
|
||||
|
||||
return old_handle_node_drops(pos, drops, digger)
|
||||
end
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
-- Silk Touch
|
||||
local silk_touch = wield_stack_meta:get_float('is_silk_touch')
|
||||
|
||||
if minetest.get_item_group(node.name, 'no_silktouch') == 1 then
|
||||
return old_handle_node_drops(pos, drops, digger)
|
||||
if silk_touch > 0
|
||||
and minetest.get_item_group(node.name, 'no_silktouch') == 0
|
||||
then
|
||||
-- drop raw item/node
|
||||
return old_handle_node_drops(pos, { ItemStack(node.name) }, digger)
|
||||
end
|
||||
|
||||
-- drop raw item/node
|
||||
return old_handle_node_drops(pos, { ItemStack(node.name) }, digger)
|
||||
return old_handle_node_drops(pos, drops, digger)
|
||||
end
|
||||
|
||||
minetest.register_on_player_hpchange(function(player, hp_change, reason)
|
||||
-- Curse of Vanishing
|
||||
if (player:get_hp() + hp_change) <= 0 then
|
||||
-- Going to die
|
||||
local player_inv = player:get_inventory() --[[@as InvRef]]
|
||||
|
||||
-- Curse of Vanishing
|
||||
local player_inventory_lists = { 'main', 'craft' }
|
||||
|
||||
for _, list_name in ipairs(player_inventory_lists) do
|
||||
|
Reference in New Issue
Block a user