514 lines
14 KiB
Lua
514 lines
14 KiB
Lua
lavastuff = {}
|
|
|
|
local MODPATH = minetest.get_modpath("lavastuff")
|
|
|
|
local COOLDOWN = dofile(MODPATH.."/cooldowns.lua")
|
|
local S
|
|
|
|
if minetest.get_translator ~= nil then
|
|
S = minetest.get_translator(minetest.get_current_modname())
|
|
else
|
|
S = function(str)
|
|
return(str)
|
|
end
|
|
end
|
|
|
|
lavastuff.enable_tool_fire = minetest.settings:get_bool("lavastuff_enable_tool_fire")
|
|
-- Places fire where the player rightclicks with a lava tool
|
|
|
|
lavastuff.cook_limit = minetest.settings:get("lavastuff_cook_limit")
|
|
-- Tools will not smelt dug items if their cooking time is too long
|
|
|
|
if lavastuff.cook_limit ~= false then
|
|
lavastuff.cook_limit = 15
|
|
end
|
|
|
|
if lavastuff.enable_tool_fire ~= false then
|
|
lavastuff.enable_tool_fire = true
|
|
end
|
|
|
|
minetest.log("action",
|
|
"[lavastuff]: Settings loaded"..
|
|
"\n\tenable_tool_fire = "..dump(lavastuff.enable_tool_fire) ..
|
|
"\n\tcook_limit = "..dump(lavastuff.cook_limit)
|
|
)
|
|
|
|
lavastuff.blacklisted_items = { -- Items lava tools will not smelt
|
|
"default:mese_crystal",
|
|
"default:mese",
|
|
}
|
|
|
|
if minetest.get_modpath("default") then
|
|
lavastuff.game = "minetest_game"
|
|
elseif minetest.get_modpath("mcl_core") then
|
|
lavastuff.game = "mineclone"
|
|
elseif minetest.get_modpath("nc_api_all") then
|
|
lavastuff.game = "nodecore"
|
|
end
|
|
|
|
if not lavastuff.game then
|
|
minetest.log("error", "[lavastuff]: No supported game found! Proceed with caution")
|
|
else
|
|
minetest.log("action", "[lavastuff]: Game detected: "..lavastuff.game)
|
|
end
|
|
|
|
if minetest.get_modpath("fire") then
|
|
lavastuff.fire_node = "fire:basic_flame"
|
|
elseif minetest.get_modpath("mcl_fire") then
|
|
lavastuff.fire_node = "mcl_fire:fire"
|
|
elseif minetest.get_modpath("nc_fire") then
|
|
lavastuff.fire_node = "nc_fire:fire"
|
|
else
|
|
minetest.log("error", "[lavastuff]: No fire mod found! Tool fire will be disabled")
|
|
end
|
|
|
|
if lavastuff.enable_tool_fire == true and lavastuff.fire_node then
|
|
local function activate_func(user, pointedname, pointeddef, pointed)
|
|
if pointeddef.on_ignite then
|
|
pointeddef.on_ignite(pointed.under, user)
|
|
elseif lavastuff.fire_node and minetest.registered_nodes[lavastuff.fire_node] and
|
|
minetest.get_item_group(pointedname, "flammable") >= 1 and
|
|
minetest.get_node(pointed.above).name == "air" then
|
|
minetest.set_node(pointed.above, {name = lavastuff.fire_node})
|
|
|
|
if lavastuff.game == "nodecore" then
|
|
nodecore.fire_check_ignite(pointed.under)
|
|
end
|
|
end
|
|
end
|
|
|
|
function lavastuff.tool_fire_func(itemstack, user, pointed)
|
|
local name = user:get_player_name()
|
|
|
|
if pointed.type == "node" then
|
|
local node = minetest.get_node(pointed.under)
|
|
local def = minetest.registered_nodes[node.name]
|
|
|
|
if def.on_rightclick then
|
|
return def.on_rightclick(pointed.under, node, user, itemstack, pointed)
|
|
end
|
|
|
|
if minetest.is_protected(pointed.under, name) then return end
|
|
|
|
-- Only allow fire every 1+ second(s)
|
|
if not COOLDOWN:get(user) then
|
|
activate_func(user, node.name, def, pointed)
|
|
COOLDOWN:set(user, 1)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function lavastuff.burn_drops(tool)
|
|
local old_handle_node_drops = minetest.handle_node_drops
|
|
|
|
function minetest.handle_node_drops(pos, drops, digger, ...)
|
|
if not digger or digger:get_wielded_item():get_name() ~= (tool) then
|
|
return old_handle_node_drops(pos, drops, digger, ...)
|
|
end
|
|
|
|
-- reset new smelted drops
|
|
local hot_drops = {}
|
|
|
|
-- loop through current node drops
|
|
for _, drop in pairs(drops) do -- get cooked output of current drops
|
|
local stack = ItemStack(drop)
|
|
local output = minetest.get_craft_result({
|
|
method = "cooking",
|
|
width = 1,
|
|
items = {drop}
|
|
})
|
|
|
|
for _, name in pairs(lavastuff.blacklisted_items) do
|
|
if name == drop then
|
|
return old_handle_node_drops(pos, drops, digger, ...)
|
|
end
|
|
end
|
|
|
|
-- if we have cooked result then add to new list
|
|
if output and output.item and not output.item:is_empty() and output.time <= lavastuff.cook_limit then
|
|
table.insert(hot_drops,
|
|
ItemStack({
|
|
name = output.item:get_name(),
|
|
count = output.item:to_table().count,
|
|
})
|
|
)
|
|
else -- if not then return normal drops
|
|
table.insert(hot_drops, stack)
|
|
end
|
|
end
|
|
|
|
return old_handle_node_drops(pos, hot_drops, digger, ...)
|
|
end
|
|
end
|
|
|
|
lavastuff.burn_drops("lavastuff:sword" )
|
|
lavastuff.burn_drops("lavastuff:pick" )
|
|
lavastuff.burn_drops("lavastuff:axe" )
|
|
lavastuff.burn_drops("lavastuff:shovel")
|
|
|
|
--
|
|
-- Crafitem
|
|
--
|
|
|
|
minetest.register_craftitem("lavastuff:ingot", {
|
|
description = S("Lava Ingot"),
|
|
inventory_image = "lavastuff_ingot.png",
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
groups = {craftitem = 1},
|
|
})
|
|
|
|
--
|
|
-- Orb compat and registration
|
|
--
|
|
|
|
if not minetest.get_modpath("mobs_monster") then
|
|
minetest.register_craftitem("lavastuff:orb", {
|
|
description = S("Lava Orb"),
|
|
inventory_image = "zmobs_lava_orb.png",
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
groups = {craftitem = 1},
|
|
})
|
|
|
|
minetest.register_alias("mobs:lava_orb", "lavastuff:orb")
|
|
else
|
|
minetest.register_alias("lavastuff:orb", "mobs:lava_orb")
|
|
end
|
|
|
|
--
|
|
-- Armor Crafts
|
|
--
|
|
|
|
if minetest.get_modpath("3d_armor") or minetest.get_modpath("mcl_armor") then
|
|
minetest.register_craft({
|
|
output = "lavastuff:helmet",
|
|
recipe = {
|
|
{"lavastuff:ingot", "lavastuff:ingot", "lavastuff:ingot"},
|
|
{"lavastuff:ingot", "", "lavastuff:ingot"},
|
|
{"", "", ""},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "lavastuff:chestplate",
|
|
recipe = {
|
|
{"lavastuff:ingot", "", "lavastuff:ingot"},
|
|
{"lavastuff:ingot", "lavastuff:ingot", "lavastuff:ingot"},
|
|
{"lavastuff:ingot", "lavastuff:ingot", "lavastuff:ingot"},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "lavastuff:leggings",
|
|
recipe = {
|
|
{"lavastuff:ingot", "lavastuff:ingot", "lavastuff:ingot"},
|
|
{"lavastuff:ingot", "", "lavastuff:ingot"},
|
|
{"lavastuff:ingot", "", "lavastuff:ingot"},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "lavastuff:boots",
|
|
recipe = {
|
|
{"lavastuff:ingot", "", "lavastuff:ingot"},
|
|
{"lavastuff:ingot", "", "lavastuff:ingot"},
|
|
}
|
|
})
|
|
|
|
if not minetest.get_modpath("mcl_armor") then
|
|
minetest.register_craft({
|
|
output = "lavastuff:shield",
|
|
recipe = {
|
|
{"lavastuff:ingot", "lavastuff:ingot", "lavastuff:ingot"},
|
|
{"lavastuff:ingot", "lavastuff:ingot", "lavastuff:ingot"},
|
|
{"", "lavastuff:ingot", ""},
|
|
}
|
|
})
|
|
end
|
|
end
|
|
|
|
--
|
|
--- Tools
|
|
--
|
|
|
|
minetest.register_tool("lavastuff:sword", {
|
|
description = S("Lava Sword"),
|
|
inventory_image = "lavastuff_sword.png",
|
|
groups = {weapon = 1, sword = 1},
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.6,
|
|
max_drop_level = 1,
|
|
groupcaps = {
|
|
snappy = {
|
|
times = {1.7, 0.7, 0.25},
|
|
uses = 50,
|
|
maxlevel = 3
|
|
},
|
|
},
|
|
damage_groups = {fleshy = 10, burns = 1},
|
|
},
|
|
on_place = lavastuff.tool_fire_func,
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|
|
|
|
minetest.register_alias_force("mobs:pick_lava", "lavastuff:pick")
|
|
minetest.register_tool("lavastuff:pick", {
|
|
description = S("Lava Pickaxe"),
|
|
inventory_image = "lavastuff_pick.png",
|
|
groups = {tool = 1, pickaxe = 1},
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.7,
|
|
max_drop_level = 3,
|
|
groupcaps={
|
|
cracky = {
|
|
times = {1.8, 0.8, 0.40},
|
|
uses = 40,
|
|
maxlevel = 3
|
|
},
|
|
},
|
|
damage_groups = {fleshy = 6, burns = 1},
|
|
},
|
|
on_place = lavastuff.tool_fire_func,
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|
|
|
|
minetest.register_tool("lavastuff:shovel", {
|
|
description = S("Lava Shovel"),
|
|
inventory_image = "lavastuff_shovel.png",
|
|
wield_image = "lavastuff_shovel.png^[transformR90",
|
|
groups = {tool = 1, shovel = 1},
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
crumbly = {
|
|
times = {[1]=1.10, [2]=0.50, [3]=0.30},
|
|
uses = 30,
|
|
maxlevel = 3
|
|
},
|
|
},
|
|
damage_groups = {fleshy=4},
|
|
},
|
|
on_place = lavastuff.tool_fire_func,
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|
|
|
|
minetest.register_tool("lavastuff:axe", {
|
|
description = S("Lava Axe"),
|
|
inventory_image = "lavastuff_axe.png",
|
|
groups = {tool = 1, axe = 1},
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.8,
|
|
max_drop_level = 1,
|
|
groupcaps = {
|
|
choppy = {
|
|
times = {2.00, 0.80, 0.40},
|
|
uses = 40,
|
|
maxlevel = 3
|
|
},
|
|
},
|
|
damage_groups = {fleshy = 7, burns = 1},
|
|
},
|
|
on_place = lavastuff.tool_fire_func,
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|
|
|
|
--
|
|
-- Tool Craft
|
|
--
|
|
|
|
if minetest.get_modpath("mobs_monster") then
|
|
minetest.clear_craft({
|
|
recipe = {
|
|
{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
|
|
{"", "default:obsidian_shard", ""},
|
|
{"", "default:obsidian_shard", ""},
|
|
}
|
|
})
|
|
end
|
|
|
|
--
|
|
-- Armor
|
|
--
|
|
|
|
if minetest.get_modpath("3d_armor") then
|
|
armor.materials.lava = "lavastuff:ingot"
|
|
armor.config.material_lava = true
|
|
|
|
armor:register_armor("lavastuff:helmet_lava", {
|
|
description = S("Lava Helmet"),
|
|
inventory_image = "lavastuff_inv_helmet.png",
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
groups = {armor_head=1, armor_heal=12, armor_use=100, armor_fire=10},
|
|
armor_groups = {fleshy=15},
|
|
damage_groups = {cracky=2, snappy=1, level=3},
|
|
wear = 0,
|
|
})
|
|
minetest.register_alias("lavastuff:helmet", "lavastuff:helmet_lava")
|
|
|
|
armor:register_armor("lavastuff:chestplate_lava", {
|
|
description = S("Lava Chestplate"),
|
|
inventory_image = "lavastuff_inv_chestplate.png",
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
groups = {armor_torso=1, armor_heal=12, armor_use=100, armor_fire=10},
|
|
armor_groups = {fleshy=20},
|
|
damage_groups = {cracky=2, snappy=1, level=3},
|
|
wear = 0,
|
|
})
|
|
minetest.register_alias("lavastuff:chestplate", "lavastuff:chestplate_lava")
|
|
|
|
armor:register_armor("lavastuff:leggings_lava", {
|
|
description = S("Lava Leggings"),
|
|
inventory_image = "lavastuff_inv_leggings.png",
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
groups = {armor_legs=1, armor_heal=12, armor_use=100, armor_fire=10},
|
|
armor_groups = {fleshy=20},
|
|
damage_groups = {cracky=2, snappy=1, level=3},
|
|
wear = 0,
|
|
})
|
|
minetest.register_alias("lavastuff:leggings", "lavastuff:leggings_lava")
|
|
|
|
armor:register_armor("lavastuff:boots_lava", {
|
|
description = S("Lava Boots"),
|
|
inventory_image = "lavastuff_inv_boots.png",
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
groups = {armor_feet=1, armor_heal=12, armor_use=100, armor_fire=10, physics_jump=0.5, physics_speed = 1},
|
|
armor_groups = {fleshy=15},
|
|
damage_groups = {cracky=2, snappy=1, level=3},
|
|
wear = 0,
|
|
})
|
|
minetest.register_alias("lavastuff:boots", "lavastuff:boots_lava")
|
|
|
|
if minetest.get_modpath("shields") then
|
|
armor:register_armor("lavastuff:shield_lava", {
|
|
description = S("Lava Shield"),
|
|
inventory_image = "lavastuff_inven_shield.png",
|
|
light_source = 7, -- Texture will have a glow when dropped
|
|
groups = {armor_shield=1, armor_heal=12, armor_use=100, armor_fire=10},
|
|
armor_groups = {fleshy=20},
|
|
damage_groups = {cracky=2, snappy=1, level=3},
|
|
wear = 0,
|
|
})
|
|
minetest.register_alias("lavastuff:shield", "lavastuff:shield_lava")
|
|
end
|
|
end
|
|
|
|
--
|
|
-- Nodes
|
|
--
|
|
|
|
minetest.register_node("lavastuff:block", {
|
|
description = S("Lava Block"),
|
|
tiles = {"lavastuff_block.png"},
|
|
is_ground_content = false,
|
|
sounds = default and default.node_sound_glass_defaults(),
|
|
groups = {cracky = 2, level = 2},
|
|
light_source = 6,
|
|
})
|
|
|
|
if minetest.get_modpath("moreblocks") then
|
|
stairsplus:register_all("lavastuff", "lava", "lavastuff:ingot", {
|
|
description = "Lava",
|
|
tiles = {"lavastuff_block.png"},
|
|
groups = {cracky = 2, level = 2},
|
|
light_source = 6,
|
|
sounds = default and default.node_sound_glass_defaults(),
|
|
})
|
|
elseif minetest.get_modpath("stairs") then
|
|
stairs.register_stair_and_slab(
|
|
"lava",
|
|
"lavastuff:block",
|
|
{cracky = 2, level = 2},
|
|
{"lavastuff_block.png"},
|
|
S("Lava Stair"),
|
|
S("Lava Slab"),
|
|
default.node_sound_glass_defaults(),
|
|
true,
|
|
S("Inner Lava Stair"),
|
|
S("Outer Lava Stair")
|
|
)
|
|
end
|
|
|
|
--
|
|
--Toolranks support
|
|
--
|
|
|
|
if minetest.get_modpath("toolranks") then
|
|
minetest.override_item("lavastuff:sword", {
|
|
description = toolranks.create_description(S("Lava Sword"), 0, 1),
|
|
original_description = S("Lava Sword"),
|
|
after_use = toolranks.new_afteruse
|
|
})
|
|
|
|
minetest.override_item("lavastuff:pick", {
|
|
description = toolranks.create_description(S("Lava Pickaxe"), 0, 1),
|
|
original_description = S("Lava Pickaxe"),
|
|
after_use = toolranks.new_afteruse
|
|
})
|
|
|
|
minetest.override_item("lavastuff:axe", {
|
|
description = toolranks.create_description(S("Lava Axe"), 0, 1),
|
|
original_description = S("Lava Axe"),
|
|
after_use = toolranks.new_afteruse
|
|
})
|
|
|
|
minetest.override_item("lavastuff:shovel", {
|
|
description = toolranks.create_description(S("Lava Shovel"), 0, 1),
|
|
original_description = S("Lava Shovel"),
|
|
after_use = toolranks.new_afteruse
|
|
})
|
|
end
|
|
|
|
--
|
|
-- Lava in a Bottle
|
|
--
|
|
|
|
minetest.register_node("lavastuff:lava_in_a_bottle", {
|
|
description = S("Lava in a Bottle"),
|
|
drawtype = "plantlike",
|
|
tiles = {{
|
|
name = "lavastuff_lava_in_a_bottle.png",
|
|
animation = {
|
|
type = "vertical_frames",
|
|
aspect_w = 16,
|
|
aspect_h = 16,
|
|
length = 2.0
|
|
}
|
|
}},
|
|
inventory_image = "lavastuff_lava_in_a_bottle.png^[verticalframe:2:0",
|
|
wield_image = "lavastuff_lava_in_a_bottle.png^[verticalframe:2:0",
|
|
paramtype = "light",
|
|
light_source = 9,
|
|
is_ground_content = false,
|
|
walkable = false,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
|
|
},
|
|
groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
|
|
sounds = default and default.node_sound_glass_defaults(),
|
|
})
|
|
|
|
--
|
|
-- Register crafts/tools based on current game
|
|
--
|
|
|
|
minetest.log("action", "[lavastuff]: Base stuff loaded, beginning game compatibility...")
|
|
|
|
if lavastuff.game == "nodecore" then
|
|
dofile(MODPATH .. "/crafts/nodecore.lua")
|
|
dofile(MODPATH.."/items/nodecore.lua")(COOLDOWN, S)
|
|
elseif lavastuff.game == "mineclone" then
|
|
dofile(MODPATH.."/items/mineclone.lua")(COOLDOWN, S)
|
|
dofile(MODPATH .. "/crafts/mineclone.lua")
|
|
else
|
|
if lavastuff.game == "minetest_game" then
|
|
dofile(MODPATH .. "/crafts/minetest_game.lua")
|
|
end
|
|
end
|
|
|
|
minetest.log("action", "[lavastuff]: Mod Loaded!") |