ufowreck/tools.lua

236 lines
6.4 KiB
Lua

local max_charge = 500000
local power_per_use = max_charge / 50
local power_restore = power_per_use * 0.5
technic.register_power_tool("ufowreck:freezer", max_charge)
technic.register_power_tool("ufowreck:heater", max_charge)
minetest.register_tool("ufowreck:freezer", {
description = "Freezer",
inventory_image = "freezer.png",
paramtype = "light",
light_source = 12,
stack_max = 1,
liquids_pointable = true,
wear_represents = "technic_RE_charge",
on_refil = technic.refill_RE_charge,
on_use = function(itemstack, user, pointed_thing)
local meta = minetest.deserialize(itemstack:get_metadata())
if not meta or not meta.charge then
return
end
if pointed_thing.type ~= "node" then
return
end
local pos = pointed_thing.under
if minetest.is_protected(pos, user:get_player_name()) then
minetest.record_protection_violation(pos, user:get_player_name())
return
end
local charge_to_take = power_per_use
local node = minetest.get_node(pos)
if meta.charge >= charge_to_take and (not (pos == nil)) then
if node.name == "default:dirt" or node.name == "default:dirt_with_coniferous_litter"
or node.name == "default:dirt_with_dry_grass"
or node.name == "default:dirt_with_grass"
or node.name == "default:dirt_with_rainforest_litter"
then
node.name = "default:dirt_with_snow"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
elseif node.name == "default:snowblock" or node.name == "default:dirt_with_snow" or minetest.get_item_group(node.name, "tree") == 1 then
node.name = "default:ice"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
elseif node.name == "default:water_source" or node.name == "default:water_flowing"
or node.name == "default:river_water_source" or node.name == "default:river_water_flowing" then
minetest.add_node(pos, {name="default:ice"})
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
elseif node.name == "default:lava_source" then
node.name = "default:obsidian"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
elseif node.name == "default:lava_flowing" then
node.name = "tubelib:basalt_stone"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
end
meta.charge = meta.charge - charge_to_take
itemstack:set_metadata(minetest.serialize(meta))
technic.set_RE_wear(itemstack, meta.charge, max_charge)
return itemstack
end
end,
})
minetest.register_tool("ufowreck:heater", {
description = "Heater",
inventory_image = "heater.png",
paramtype = "light",
light_source = 12,
stack_max = 1,
liquids_pointable = true,
wear_represents = "technic_RE_charge",
on_refil = technic.refill_RE_charge,
on_use = function(itemstack, user, pointed_thing)
local meta = minetest.deserialize(itemstack:get_metadata())
if not meta or not meta.charge then
return
end
if pointed_thing.type ~= "node" then
return
end
local pos = pointed_thing.under
if minetest.is_protected(pos, user:get_player_name()) then
minetest.record_protection_violation(pos, user:get_player_name())
return
end
local charge_to_take = power_per_use
local node = minetest.get_node(pos)
if meta.charge >= charge_to_take and (not (pos == nil)) then
if node.name == "default:dirt" then
node.name = "default:sand"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
elseif node.name == "default:sand"
then
node.name = "default:glass"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
elseif node.name == "default:dirt_with_snow"
or node.name == "default:dirt_with_coniferous_litter"
or node.name == "default:dirt_with_dry_grass"
or node.name == "default:dirt_with_grass"
or node.name == "default:dirt_with_rainforest_litter"
then
node.name = "default:dirt"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
elseif minetest.get_item_group(node.name, "tree") == 1 then
node.name = "fake_fire:embers"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
elseif node.name == "default:snowblock" or node.name == "default:ice" then
node.name = "default:river_water_source"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
elseif node.name == "default:water_source" or node.name == "default:water_flowing"
or node.name == "default:river_water_source" or node.name == "default:river_water_flowing" then
node.name = "air"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
elseif node.name == "default:obsidian" then
node.name = "default:lava_source"
minetest.swap_node(pos, node)
minetest.sound_play({
name="blaster_long"},{
gain=1,
pos=pos,
max_hear_distance=20,
loop=false})
end
meta.charge = meta.charge - charge_to_take
itemstack:set_metadata(minetest.serialize(meta))
technic.set_RE_wear(itemstack, meta.charge, max_charge)
return itemstack
end
end,
})
minetest.register_tool("ufowreck:broken_raygun", {
description = "Broken Raygun",
inventory_image = "amcaw_raygun.png",
paramtype = "light",
light_source = 12,
stack_max = 1,
on_use = function(itemstack, user, pointed_thing)
minetest.chat_send_player(user:get_player_name(), "This raygun is broken.")
end,
})
minetest.register_craft({
output = "ufowreck:freezer",
recipe = {
{"ufowreck:broken_raygun", "default:ice", "ufowreck:broken_raygun"},
{"default:bronze_ingot", "technic:blue_energy_crystal", ""},
{"ufowreck:broken_raygun", "", ""}
}
})
minetest.register_craft({
output = "ufowreck:heater",
recipe = {
{"ufowreck:broken_raygun", "bucket:bucket_lava", "ufowreck:broken_raygun"},
{"default:bronze_ingot", "technic:red_energy_crystal", ""},
{"ufowreck:broken_raygun", "", ""}
}
})