mirror of
https://github.com/minetest-mods/technic.git
synced 2025-07-03 08:40:36 +02:00
Move files to subfolders
This commit is contained in:
120
technic/tools/cans.lua
Normal file
120
technic/tools/cans.lua
Normal file
@ -0,0 +1,120 @@
|
||||
local water_can_max_load = 16
|
||||
local lava_can_max_load = 8
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:water_can 1',
|
||||
recipe = {
|
||||
{'technic:zinc_ingot', 'technic:rubber','technic:zinc_ingot'},
|
||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
||||
{'technic:zinc_ingot', 'default:steel_ingot', 'technic:zinc_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:lava_can 1',
|
||||
recipe = {
|
||||
{'technic:zinc_ingot', 'technic:stainless_steel_ingot','technic:zinc_ingot'},
|
||||
{'technic:stainless_steel_ingot', '', 'technic:stainless_steel_ingot'},
|
||||
{'technic:zinc_ingot', 'technic:stainless_steel_ingot', 'technic:zinc_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
minetest.register_tool("technic:water_can", {
|
||||
description = "Water Can",
|
||||
inventory_image = "technic_water_can.png",
|
||||
stack_max = 1,
|
||||
liquids_pointable = true,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
|
||||
if pointed_thing.type ~= "node" then
|
||||
return end
|
||||
n = minetest.env:get_node(pointed_thing.under)
|
||||
|
||||
item=itemstack:to_table()
|
||||
local load=nil
|
||||
if item["metadata"]=="" then load=0
|
||||
else load=tonumber(item["metadata"])
|
||||
end
|
||||
|
||||
if n.name == "default:water_source" then
|
||||
if load+1<17 then
|
||||
minetest.env:add_node(pointed_thing.under, {name="air"})
|
||||
load=load+1;
|
||||
item["metadata"]=tostring(load)
|
||||
technic.set_RE_wear(item,load,water_can_max_load)
|
||||
itemstack:replace(item)
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
item=itemstack:to_table()
|
||||
if load==0 then return end
|
||||
|
||||
if n.name == "default:water_flowing" then
|
||||
minetest.env:add_node(pointed_thing.under, {name="default:water_source"})
|
||||
load=load-1;
|
||||
item["metadata"]=tostring(load)
|
||||
technic.set_RE_wear(item,load,water_can_max_load)
|
||||
itemstack:replace(item)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
n = minetest.env:get_node(pointed_thing.above)
|
||||
if n.name == "air" then
|
||||
minetest.env:add_node(pointed_thing.above, {name="default:water_source"})
|
||||
load=load-1;
|
||||
item["metadata"]=tostring(load)
|
||||
technic.set_RE_wear(item,load,water_can_max_load)
|
||||
itemstack:replace(item)
|
||||
return itemstack
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_tool("technic:lava_can", {
|
||||
description = "Lava Can",
|
||||
inventory_image = "technic_lava_can.png",
|
||||
stack_max = 1,
|
||||
liquids_pointable = true,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then return end
|
||||
n = minetest.env:get_node(pointed_thing.under)
|
||||
item=itemstack:to_table()
|
||||
local load=nil
|
||||
if item["metadata"]=="" then load=0
|
||||
else load=tonumber(item["metadata"])
|
||||
end
|
||||
|
||||
if n.name == "default:lava_source" then
|
||||
if load+1<17 then
|
||||
minetest.env:add_node(pointed_thing.under, {name="air"})
|
||||
load=load+1;
|
||||
item["metadata"]=tostring(load)
|
||||
technic.set_RE_wear(item,load,lava_can_max_load)
|
||||
itemstack:replace(item)
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
item=itemstack:to_table()
|
||||
if load==0 then return end
|
||||
|
||||
if n.name == "default:lava_flowing" then
|
||||
minetest.env:add_node(pointed_thing.under, {name="default:lava_source"})
|
||||
load=load-1;
|
||||
item["metadata"]=tostring(load)
|
||||
technic.set_RE_wear(item,load,lava_can_max_load)
|
||||
itemstack:replace(item)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
n = minetest.env:get_node(pointed_thing.above)
|
||||
if n.name == "air" then
|
||||
minetest.env:add_node(pointed_thing.above, {name="default:lava_source"})
|
||||
load=load-1;
|
||||
item["metadata"]=tostring(load)
|
||||
technic.set_RE_wear(item,load,lava_can_max_load)
|
||||
itemstack:replace(item)
|
||||
return itemstack
|
||||
end
|
||||
end,
|
||||
})
|
269
technic/tools/chainsaw.lua
Normal file
269
technic/tools/chainsaw.lua
Normal file
@ -0,0 +1,269 @@
|
||||
-- Configuration
|
||||
local chainsaw_max_charge = 30000 -- 30000 - Maximum charge of the saw
|
||||
local chainsaw_charge_per_node = 12 -- 12 - Gives 2500 nodes on a single charge (about 50 complete normal trees)
|
||||
local chainsaw_leaves = true -- true - Cut down entire trees, leaves and all
|
||||
|
||||
technic.register_LV_power_tool ("technic:chainsaw",chainsaw_max_charge)
|
||||
|
||||
minetest.register_tool("technic:chainsaw", {
|
||||
description = "Chainsaw",
|
||||
inventory_image = "technic_chainsaw.png",
|
||||
stack_max = 1,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type=="node" then
|
||||
item=itemstack:to_table()
|
||||
local meta=get_item_meta(item["metadata"])
|
||||
if meta==nil then return end --tool not charged
|
||||
if meta["charge"]==nil then return end
|
||||
-- Send current charge to digging function so that the chainsaw will stop after digging a number of nodes.
|
||||
local charge=meta["charge"]
|
||||
if charge < chainsaw_charge_per_node then return end -- only cut if charged
|
||||
|
||||
charge=chainsaw_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,charge)
|
||||
technic.set_RE_wear(item,charge,chainsaw_max_charge)
|
||||
meta["charge"]=charge
|
||||
item["metadata"]=set_item_meta(meta)
|
||||
itemstack:replace(item)
|
||||
return itemstack
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:chainsaw',
|
||||
recipe = {
|
||||
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:battery'},
|
||||
{'technic:stainless_steel_ingot', 'technic:motor', 'technic:battery'},
|
||||
{'', '', 'default:copper_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
-- The default stuff
|
||||
local timber_nodenames={["default:jungletree"] = true,
|
||||
["default:papyrus"] = true,
|
||||
["default:cactus"] = true,
|
||||
["default:tree"] = true,
|
||||
["default:apple"] = true
|
||||
}
|
||||
|
||||
if chainsaw_leaves == true then
|
||||
timber_nodenames["default:leaves"] = true
|
||||
end
|
||||
|
||||
-- Support moretrees if it is there
|
||||
if( minetest.get_modpath("moretrees") ~= nil ) then
|
||||
timber_nodenames["moretrees:apple_tree_trunk"] = true
|
||||
timber_nodenames["moretrees:apple_tree_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:beech_trunk"] = true
|
||||
timber_nodenames["moretrees:beech_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:birch_trunk"] = true
|
||||
timber_nodenames["moretrees:birch_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:fir_trunk"] = true
|
||||
timber_nodenames["moretrees:fir_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:oak_trunk"] = true
|
||||
timber_nodenames["moretrees:oak_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:palm_trunk"] = true
|
||||
timber_nodenames["moretrees:palm_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:pine_trunk"] = true
|
||||
timber_nodenames["moretrees:pine_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:rubber_tree_trunk"] = true
|
||||
timber_nodenames["moretrees:rubber_tree_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:rubber_tree_trunk_empty"] = true
|
||||
timber_nodenames["moretrees:rubber_tree_trunk_sideways_empty"] = true
|
||||
timber_nodenames["moretrees:sequoia_trunk"] = true
|
||||
timber_nodenames["moretrees:sequoia_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:spruce_trunk"] = true
|
||||
timber_nodenames["moretrees:spruce_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:willow_trunk"] = true
|
||||
timber_nodenames["moretrees:willow_trunk_sideways"] = true
|
||||
timber_nodenames["moretrees:jungletree_trunk"] = true
|
||||
timber_nodenames["moretrees:jungletree_trunk_sideways"] = true
|
||||
|
||||
if chainsaw_leaves == true then
|
||||
timber_nodenames["moretrees:apple_tree_leaves"] = true
|
||||
timber_nodenames["moretrees:oak_leaves"] = true
|
||||
timber_nodenames["moretrees:sequoia_leaves"] = true
|
||||
timber_nodenames["moretrees:birch_leaves"] = true
|
||||
timber_nodenames["moretrees:birch_leaves"] = true
|
||||
timber_nodenames["moretrees:palm_leaves"] = true
|
||||
timber_nodenames["moretrees:spruce_leaves"] = true
|
||||
timber_nodenames["moretrees:spruce_leaves"] = true
|
||||
timber_nodenames["moretrees:pine_leaves"] = true
|
||||
timber_nodenames["moretrees:willow_leaves"] = true
|
||||
timber_nodenames["moretrees:rubber_tree_leaves"] = true
|
||||
timber_nodenames["moretrees:jungletree_leaves_green"] = true
|
||||
timber_nodenames["moretrees:jungletree_leaves_yellow"] = true
|
||||
timber_nodenames["moretrees:jungletree_leaves_red"] = true
|
||||
end
|
||||
end
|
||||
|
||||
-- Support growing_trees if it is there
|
||||
if( minetest.get_modpath("growing_trees") ~= nil ) then
|
||||
timber_nodenames["growing_trees:trunk"] = true
|
||||
timber_nodenames["growing_trees:medium_trunk"] = true
|
||||
timber_nodenames["growing_trees:big_trunk"] = true
|
||||
timber_nodenames["growing_trees:trunk_top"] = true
|
||||
timber_nodenames["growing_trees:trunk_sprout"] = true
|
||||
timber_nodenames["growing_trees:branch_sprout"] = true
|
||||
timber_nodenames["growing_trees:branch"] = true
|
||||
timber_nodenames["growing_trees:branch_xmzm"] = true
|
||||
timber_nodenames["growing_trees:branch_xpzm"] = true
|
||||
timber_nodenames["growing_trees:branch_xmzp"] = true
|
||||
timber_nodenames["growing_trees:branch_xpzp"] = true
|
||||
timber_nodenames["growing_trees:branch_zz"] = true
|
||||
timber_nodenames["growing_trees:branch_xx"] = true
|
||||
|
||||
if chainsaw_leaves == true then
|
||||
timber_nodenames["growing_trees:leaves"] = true
|
||||
end
|
||||
end
|
||||
|
||||
-- Support growing_cactus if it is there
|
||||
if( minetest.get_modpath("growing_cactus") ~= nil ) then
|
||||
timber_nodenames["growing_cactus:sprout"] = true
|
||||
timber_nodenames["growing_cactus:branch_sprout_vertical"] = true
|
||||
timber_nodenames["growing_cactus:branch_sprout_vertical_fixed"] = true
|
||||
timber_nodenames["growing_cactus:branch_sprout_xp"] = true
|
||||
timber_nodenames["growing_cactus:branch_sprout_xm"] = true
|
||||
timber_nodenames["growing_cactus:branch_sprout_zp"] = true
|
||||
timber_nodenames["growing_cactus:branch_sprout_zm"] = true
|
||||
timber_nodenames["growing_cactus:trunk"] = true
|
||||
timber_nodenames["growing_cactus:branch_trunk"] = true
|
||||
timber_nodenames["growing_cactus:branch"] = true
|
||||
timber_nodenames["growing_cactus:branch_xp"] = true
|
||||
timber_nodenames["growing_cactus:branch_xm"] = true
|
||||
timber_nodenames["growing_cactus:branch_zp"] = true
|
||||
timber_nodenames["growing_cactus:branch_zm"] = true
|
||||
timber_nodenames["growing_cactus:branch_zz"] = true
|
||||
timber_nodenames["growing_cactus:branch_xx"] = true
|
||||
end
|
||||
|
||||
-- Support farming_plus if it is there
|
||||
if( minetest.get_modpath("farming_plus") ~= nil ) then
|
||||
if chainsaw_leaves == true then
|
||||
timber_nodenames["farming_plus:cocoa_leaves"] = true
|
||||
end
|
||||
end
|
||||
|
||||
-- Table for saving what was sawed down
|
||||
local produced
|
||||
|
||||
-- Saw down trees entry point
|
||||
chainsaw_dig_it = function(pos, player,current_charge)
|
||||
local remaining_charge=current_charge
|
||||
|
||||
-- Save the currently installed dropping mechanism so we can restore it.
|
||||
local original_handle_node_drops = minetest.handle_node_drops
|
||||
|
||||
-- A bit of trickery here: use a different node drop callback
|
||||
-- and restore the original afterwards.
|
||||
minetest.handle_node_drops = chainsaw_handle_node_drops
|
||||
|
||||
-- clear result and start sawing things down
|
||||
produced = {}
|
||||
remaining_charge = recursive_dig(pos, remaining_charge, player)
|
||||
minetest.sound_play("chainsaw", {pos = pos, gain = 1.0, max_hear_distance = 10,})
|
||||
|
||||
-- Restore the original noder drop handler
|
||||
minetest.handle_node_drops = original_handle_node_drops
|
||||
|
||||
-- Now drop items for the player
|
||||
local number, produced_item, p
|
||||
for produced_item,number in pairs(produced) do
|
||||
--print("ADDING ITEM: " .. produced_item .. " " .. number)
|
||||
-- Drop stacks of 99 or less
|
||||
p = {
|
||||
x = pos.x + math.random()*4,
|
||||
y = pos.y,
|
||||
z = pos.z + math.random()*4
|
||||
}
|
||||
while number > 99 do
|
||||
minetest.env:add_item(p, produced_item .. " 99")
|
||||
p = {
|
||||
x = pos.x + math.random()*4,
|
||||
y = pos.y,
|
||||
z = pos.z + math.random()*4
|
||||
}
|
||||
number = number - 99
|
||||
end
|
||||
minetest.env:add_item(p, produced_item .. " " .. number)
|
||||
end
|
||||
return remaining_charge
|
||||
end
|
||||
|
||||
-- Override the default handling routine to be able to count up the
|
||||
-- items sawed down so that we can drop them i an nice single stack
|
||||
chainsaw_handle_node_drops = function(pos, drops, digger)
|
||||
-- Add dropped items to list of collected nodes
|
||||
local _, dropped_item
|
||||
for _, dropped_item in ipairs(drops) do
|
||||
if produced[dropped_item] == nil then
|
||||
produced[dropped_item] = 1
|
||||
else
|
||||
produced[dropped_item] = produced[dropped_item] + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- This function does all the hard work. Recursively we dig the node at hand
|
||||
-- if it is in the table and then search the surroundings for more stuff to dig.
|
||||
recursive_dig = function(pos, remaining_charge, player)
|
||||
local node=minetest.env:get_node(pos)
|
||||
local i=1
|
||||
-- Lookup node name in timber table:
|
||||
if timber_nodenames[node.name] ~= nil then
|
||||
-- Return if we are out of power
|
||||
if remaining_charge < chainsaw_charge_per_node then
|
||||
return 0
|
||||
end
|
||||
local np
|
||||
-- wood found - cut it.
|
||||
minetest.env:dig_node(pos)
|
||||
|
||||
remaining_charge=remaining_charge-chainsaw_charge_per_node
|
||||
-- check surroundings and run recursively if any charge left
|
||||
np={x=pos.x+1, y=pos.y, z=pos.z}
|
||||
if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
|
||||
remaining_charge = recursive_dig(np, remaining_charge)
|
||||
end
|
||||
np={x=pos.x+1, y=pos.y, z=pos.z+1}
|
||||
if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
|
||||
remaining_charge = recursive_dig(np, remaining_charge)
|
||||
end
|
||||
np={x=pos.x+1, y=pos.y, z=pos.z-1}
|
||||
if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
|
||||
remaining_charge = recursive_dig(np, remaining_charge)
|
||||
end
|
||||
|
||||
np={x=pos.x-1, y=pos.y, z=pos.z}
|
||||
if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
|
||||
remaining_charge = recursive_dig(np, remaining_charge)
|
||||
end
|
||||
np={x=pos.x-1, y=pos.y, z=pos.z+1}
|
||||
if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
|
||||
remaining_charge = recursive_dig(np, remaining_charge)
|
||||
end
|
||||
np={x=pos.x-1, y=pos.y, z=pos.z-1}
|
||||
if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
|
||||
remaining_charge = recursive_dig(np, remaining_charge)
|
||||
end
|
||||
|
||||
np={x=pos.x, y=pos.y+1, z=pos.z}
|
||||
if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
|
||||
remaining_charge = recursive_dig(np, remaining_charge)
|
||||
end
|
||||
|
||||
np={x=pos.x, y=pos.y, z=pos.z+1}
|
||||
if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
|
||||
remaining_charge = recursive_dig(np, remaining_charge)
|
||||
end
|
||||
np={x=pos.x, y=pos.y, z=pos.z-1}
|
||||
if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
|
||||
remaining_charge = recursive_dig(np, remaining_charge)
|
||||
end
|
||||
return remaining_charge
|
||||
end
|
||||
-- Nothing sawed down
|
||||
return remaining_charge
|
||||
end
|
||||
|
174
technic/tools/flashlight.lua
Normal file
174
technic/tools/flashlight.lua
Normal file
@ -0,0 +1,174 @@
|
||||
-- original code comes from walkin_light mod by Echo http://minetest.net/forum/viewtopic.php?id=2621
|
||||
|
||||
local flashlight_max_charge=30000
|
||||
technic.register_LV_power_tool ("technic:flashlight",flashlight_max_charge)
|
||||
|
||||
minetest.register_tool("technic:flashlight", {
|
||||
description = "Flashlight",
|
||||
inventory_image = "technic_flashlight.png",
|
||||
stack_max = 1,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "technic:flashlight",
|
||||
recipe = {
|
||||
{"technic:rubber","glass","technic:rubber"},
|
||||
{"technic:stainless_steel_ingot","technic:battery","technic:stainless_steel_ingot"},
|
||||
{"","technic:battery",""}
|
||||
}
|
||||
})
|
||||
|
||||
local players = {}
|
||||
local player_positions = {}
|
||||
local last_wielded = {}
|
||||
|
||||
function round(num)
|
||||
return math.floor(num + 0.5)
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local player_name = player:get_player_name()
|
||||
table.insert(players, player_name)
|
||||
local pos = player:getpos()
|
||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
||||
player_positions[player_name] = {}
|
||||
player_positions[player_name]["x"] = rounded_pos.x;
|
||||
player_positions[player_name]["y"] = rounded_pos.y;
|
||||
player_positions[player_name]["z"] = rounded_pos.z;
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
local player_name = player:get_player_name()
|
||||
for i,v in ipairs(players) do
|
||||
if v == player_name then
|
||||
table.remove(players, i)
|
||||
last_wielded[player_name] = nil
|
||||
-- Neuberechnung des Lichts erzwingen
|
||||
local pos = player:getpos()
|
||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="air"})
|
||||
player_positions[player_name]["x"] = nil
|
||||
player_positions[player_name]["y"] = nil
|
||||
player_positions[player_name]["z"] = nil
|
||||
player_positions[player_name]["m"] = nil
|
||||
player_positions[player_name] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
for i,player_name in ipairs(players) do
|
||||
local player = minetest.env:get_player_by_name(player_name)
|
||||
if player then
|
||||
flashlight_weared=check_for_flashlight(player)
|
||||
local pos = player:getpos()
|
||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
||||
local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]}
|
||||
|
||||
if last_wielded[player_name] and not flashlight_weared then --remove light, flashlight weared out or was removed from hotbar
|
||||
local node=minetest.env:get_node_or_nil(old_pos)
|
||||
if node then
|
||||
if node.name=="technic:light" then
|
||||
minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
|
||||
minetest.env:add_node(old_pos,{type="node",name="air"})
|
||||
last_wielded[player_name]=false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
player_moved=not(old_pos.x==rounded_pos.x and old_pos.y==rounded_pos.y and old_pos.z==rounded_pos.z)
|
||||
if player_moved and last_wielded[player_name] and flashlight_weared then
|
||||
|
||||
local node=minetest.env:get_node_or_nil(rounded_pos)
|
||||
if node then
|
||||
if node.name=="air" then
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
|
||||
end
|
||||
end
|
||||
local node=minetest.env:get_node_or_nil(old_pos)
|
||||
if node then
|
||||
if node.name=="technic:light" then
|
||||
minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
|
||||
minetest.env:add_node(old_pos,{type="node",name="air"})
|
||||
end
|
||||
end
|
||||
player_positions[player_name]["x"] = rounded_pos.x
|
||||
player_positions[player_name]["y"] = rounded_pos.y
|
||||
player_positions[player_name]["z"] = rounded_pos.z
|
||||
|
||||
else if not last_wielded[player_name] and flashlight_weared then
|
||||
local node=minetest.env:get_node_or_nil(rounded_pos)
|
||||
if node then
|
||||
if node.name=="air" then
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
|
||||
end
|
||||
end
|
||||
player_positions[player_name]["x"] = rounded_pos.x
|
||||
player_positions[player_name]["y"] = rounded_pos.y
|
||||
player_positions[player_name]["z"] = rounded_pos.z
|
||||
last_wielded[player_name]=true
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_node("technic:light", {
|
||||
drawtype = "glasslike",
|
||||
tile_images = {"technic_light.png"},
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
is_ground_content = true,
|
||||
light_propagates = true,
|
||||
sunlight_propagates = true,
|
||||
light_source = 15,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {0, 0, 0, 0, 0, 0},
|
||||
},
|
||||
})
|
||||
minetest.register_node("technic:light_off", {
|
||||
drawtype = "glasslike",
|
||||
tile_images = {"technic_light.png"},
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
is_ground_content = true,
|
||||
light_propagates = true,
|
||||
sunlight_propagates = true,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {0, 0, 0, 0, 0, 0},
|
||||
},
|
||||
})
|
||||
|
||||
function check_for_flashlight (player)
|
||||
if player==nil then return false end
|
||||
local inv = player:get_inventory()
|
||||
local hotbar=inv:get_list("main")
|
||||
for i=1,8,1 do
|
||||
|
||||
if hotbar[i]:get_name() == "technic:flashlight" then
|
||||
local item=hotbar[i]:to_table()
|
||||
local meta=get_item_meta(item["metadata"])
|
||||
if meta==nil then return false end --flashlight not charghed
|
||||
if meta["charge"]==nil then return false end
|
||||
charge=meta["charge"]
|
||||
if charge-2>0 then
|
||||
charge =charge-2;
|
||||
technic.set_RE_wear(item,charge,flashlight_max_charge)
|
||||
meta["charge"]=charge
|
||||
item["metadata"]=set_item_meta(meta)
|
||||
hotbar[i]:replace(item)
|
||||
inv:set_stack("main",i,hotbar[i])
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
176
technic/tools/flashlight_old.lua
Normal file
176
technic/tools/flashlight_old.lua
Normal file
@ -0,0 +1,176 @@
|
||||
-- original code comes from walkin_light mod by Echo http://minetest.net/forum/viewtopic.php?id=2621
|
||||
|
||||
flashlight_max_charge=30000
|
||||
|
||||
minetest.register_tool("technic:flashlight", {
|
||||
description = "Flashlight",
|
||||
inventory_image = "technic_flashlight.png",
|
||||
stack_max = 1,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "technic:flashlight",
|
||||
recipe = {
|
||||
{"glass","glass","glass"},
|
||||
{"technic:stainless_steel_ingot","technic:battery","technic:stainless_steel_ingot"},
|
||||
{"","technic:battery",""}
|
||||
}
|
||||
})
|
||||
local players = {}
|
||||
local player_positions = {}
|
||||
local last_wielded = {}
|
||||
|
||||
function round(num)
|
||||
return math.floor(num + 0.5)
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local player_name = player:get_player_name()
|
||||
table.insert(players, player_name)
|
||||
last_wielded[player_name] = flashlight_weared(player)
|
||||
local pos = player:getpos()
|
||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
||||
local wielded_item = player:get_wielded_item():get_name()
|
||||
if flashlight_weared(player)==true then
|
||||
-- Neuberechnung des Lichts erzwingen
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="air"})
|
||||
end
|
||||
player_positions[player_name] = {}
|
||||
player_positions[player_name]["x"] = rounded_pos.x;
|
||||
player_positions[player_name]["y"] = rounded_pos.y;
|
||||
player_positions[player_name]["z"] = rounded_pos.z;
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
local player_name = player:get_player_name()
|
||||
for i,v in ipairs(players) do
|
||||
if v == player_name then
|
||||
table.remove(players, i)
|
||||
last_wielded[player_name] = nil
|
||||
-- Neuberechnung des Lichts erzwingen
|
||||
local pos = player:getpos()
|
||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="air"})
|
||||
player_positions[player_name]["x"] = nil
|
||||
player_positions[player_name]["y"] = nil
|
||||
player_positions[player_name]["z"] = nil
|
||||
player_positions[player_name]["m"] = nil
|
||||
player_positions[player_name] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
for i,player_name in ipairs(players) do
|
||||
local player = minetest.env:get_player_by_name(player_name)
|
||||
if flashlight_weared(player)==true then
|
||||
-- Fackel ist in der Hand
|
||||
local pos = player:getpos()
|
||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
||||
if (last_wielded[player_name] ~= true) or (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then
|
||||
-- Fackel gerade in die Hand genommen oder zu neuem Node bewegt
|
||||
local is_air = minetest.env:get_node_or_nil(rounded_pos)
|
||||
if is_air == nil or (is_air ~= nil and (is_air.name == "air" or is_air.name == "technic:light")) then
|
||||
-- wenn an aktueller Position "air" ist, Fackellicht setzen
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
|
||||
end
|
||||
if (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then
|
||||
-- wenn Position ge<67>nder, dann altes Licht l<>schen
|
||||
local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]}
|
||||
-- Neuberechnung des Lichts erzwingen
|
||||
local is_light = minetest.env:get_node_or_nil(old_pos)
|
||||
if is_light ~= nil and is_light.name == "technic:light" then
|
||||
minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
|
||||
minetest.env:add_node(old_pos,{type="node",name="air"})
|
||||
end
|
||||
end
|
||||
-- gemerkte Position ist nun die gerundete neue Position
|
||||
player_positions[player_name]["x"] = rounded_pos.x
|
||||
player_positions[player_name]["y"] = rounded_pos.y
|
||||
player_positions[player_name]["z"] = rounded_pos.z
|
||||
end
|
||||
|
||||
last_wielded[player_name] = true;
|
||||
elseif last_wielded[player_name] == true then
|
||||
-- Fackel nicht in der Hand, aber beim letzten Durchgang war die Fackel noch in der Hand
|
||||
local pos = player:getpos()
|
||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
||||
repeat
|
||||
local is_light = minetest.env:get_node_or_nil(rounded_pos)
|
||||
if is_light ~= nil and is_light.name == "technic:light" then
|
||||
-- minetest.env:remove_node(rounded_pos)
|
||||
-- Erzwinge Neuberechnung des Lichts
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
|
||||
minetest.env:add_node(rounded_pos,{type="node",name="air"})
|
||||
end
|
||||
until minetest.env:get_node_or_nil(rounded_pos) ~= "technic:light"
|
||||
local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]}
|
||||
repeat
|
||||
is_light = minetest.env:get_node_or_nil(old_pos)
|
||||
if is_light ~= nil and is_light.name == "technic:light" then
|
||||
-- minetest.env:remove_node(old_pos)
|
||||
-- Erzwinge Neuberechnung des Lichts
|
||||
minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
|
||||
minetest.env:add_node(old_pos,{type="node",name="air"})
|
||||
end
|
||||
until minetest.env:get_node_or_nil(old_pos) ~= "technic:light"
|
||||
last_wielded[player_name] = true
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_node("technic:light", {
|
||||
drawtype = "glasslike",
|
||||
tile_images = {"technic_light.png"},
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
is_ground_content = true,
|
||||
light_propagates = true,
|
||||
sunlight_propagates = true,
|
||||
light_source = 15,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {0, 0, 0, 0, 0, 0},
|
||||
},
|
||||
})
|
||||
minetest.register_node("technic:light_off", {
|
||||
drawtype = "glasslike",
|
||||
tile_images = {"technic_light.png"},
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
is_ground_content = true,
|
||||
light_propagates = true,
|
||||
sunlight_propagates = true,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {0, 0, 0, 0, 0, 0},
|
||||
},
|
||||
})
|
||||
|
||||
function flashlight_weared (player)
|
||||
flashlight_on=false
|
||||
local inv = player:get_inventory()
|
||||
local hotbar=inv:get_list("main")
|
||||
for i=1,8,1 do
|
||||
|
||||
if hotbar[i]:get_name() == "technic:flashlight" then
|
||||
item=hotbar[i]:to_table()
|
||||
if item["metadata"]=="" or item["metadata"]=="0" then return flashlight_on end --flashlight not charghed
|
||||
charge=tonumber(item["metadata"])
|
||||
if charge-2>0 then
|
||||
flashlight_on=true
|
||||
charge =charge-2;
|
||||
set_RE_wear(item,charge,flashlight_max_charge)
|
||||
item["metadata"]=tostring(charge)
|
||||
hotbar[i]:replace(item)
|
||||
inv:set_stack("main",i,hotbar[i])
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return flashlight_on
|
||||
end
|
16
technic/tools/init.lua
Normal file
16
technic/tools/init.lua
Normal file
@ -0,0 +1,16 @@
|
||||
local path = technic.modpath.."/tools"
|
||||
|
||||
if technic.config:getBool("enable_mining_drill") then
|
||||
dofile(path.."/mining_drill.lua")
|
||||
end
|
||||
if technic.config:getBool("enable_mining_laser") then
|
||||
dofile(path.."/mining_laser_mk1.lua")
|
||||
end
|
||||
if technic.config:getBool("enable_flashlight") then
|
||||
dofile(path.."/flashlight.lua")
|
||||
end
|
||||
dofile(path.."/cans.lua")
|
||||
dofile(path.."/chainsaw.lua")
|
||||
dofile(path.."/tree_tap.lua")
|
||||
dofile(path.."/sonic_screwdriver.lua")
|
||||
|
384
technic/tools/mining_drill.lua
Normal file
384
technic/tools/mining_drill.lua
Normal file
@ -0,0 +1,384 @@
|
||||
local mining_drill_max_charge=60000
|
||||
local mining_drill_mk2_max_charge=240000
|
||||
local mining_drill_mk3_max_charge=960000
|
||||
local mining_drill_power_usage=200
|
||||
local mining_drill_mk2_power_usage=600
|
||||
local mining_drill_mk3_power_usage=1800
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:mining_drill',
|
||||
recipe = {
|
||||
{'technic:stainless_steel_ingot', 'technic:diamond_drill_head', 'technic:stainless_steel_ingot'},
|
||||
{'technic:stainless_steel_ingot', 'technic:motor', 'technic:stainless_steel_ingot'},
|
||||
{'', 'technic:red_energy_crystal', 'moreores:copper_ingot'},
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = 'technic:mining_drill_mk2',
|
||||
recipe = {
|
||||
{'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'},
|
||||
{'technic:stainless_steel_ingot', 'technic:mining_drill', 'technic:stainless_steel_ingot'},
|
||||
{'', 'technic:green_energy_crystal', ''},
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = 'technic:mining_drill_mk3',
|
||||
recipe = {
|
||||
{'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'},
|
||||
{'technic:stainless_steel_ingot', 'technic:mining_drill_mk2', 'technic:stainless_steel_ingot'},
|
||||
{'', 'technic:blue_energy_crystal', ''},
|
||||
}
|
||||
})
|
||||
|
||||
function drill_dig_it (pos, player,drill_type,mode)
|
||||
|
||||
local charge
|
||||
|
||||
if mode==1 then
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
|
||||
if mode==2 then -- 3 deep
|
||||
dir=drill_dig_it1(player)
|
||||
if dir==0 then -- x+
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
if dir==1 then -- x-
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x-1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x-1
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
if dir==2 then -- z+
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z+1
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
if dir==3 then -- z-
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z+1
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
end
|
||||
|
||||
if mode==3 then -- 3 wide
|
||||
dir=drill_dig_it1(player)
|
||||
if dir==0 or dir==1 then -- x
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z-2
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
if dir==2 or dir==3 then -- z
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x-2
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
end
|
||||
|
||||
if mode==4 then -- 3 tall, selected in the middle
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.y=pos.y+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.y=pos.y-2
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
|
||||
if mode==5 then -- 3 x 3
|
||||
local dir=player:get_look_dir()
|
||||
if math.abs(dir.y)<0.5 then
|
||||
dir=drill_dig_it1(player)
|
||||
if dir==0 or dir==1 then -- x
|
||||
drill_dig_it2(pos,player)
|
||||
end
|
||||
if dir==2 or dir==3 then -- z
|
||||
drill_dig_it3(pos,player)
|
||||
end
|
||||
else
|
||||
drill_dig_it4(pos,player)
|
||||
end
|
||||
end
|
||||
|
||||
if drill_type==1 then charge=mining_drill_power_usage end
|
||||
if drill_type==2 then
|
||||
if mode==1 then charge=mining_drill_mk2_power_usage end
|
||||
if (mode==2 or mode==3 or mode==4) then charge=mining_drill_mk2_power_usage*3 end
|
||||
end
|
||||
if drill_type==3 then
|
||||
if mode==1 then charge=mining_drill_power_usage end
|
||||
if (mode==2 or mode==3 or mode==4) then charge=mining_drill_mk2_power_usage*6 end
|
||||
if mode==5 then charge=mining_drill_mk2_power_usage*9 end
|
||||
end
|
||||
minetest.sound_play("mining_drill", {pos = pos, gain = 1.0, max_hear_distance = 10,})
|
||||
return charge
|
||||
end
|
||||
|
||||
function drill_dig_it0 (pos,player)
|
||||
local node=minetest.env:get_node(pos)
|
||||
if node.name == "air" or node.name == "ignore" then return end
|
||||
if node.name == "default:lava_source" then return end
|
||||
if node.name == "default:lava_flowing" then return end
|
||||
if node.name == "default:water_source" then minetest.env:remove_node(pos) return end
|
||||
if node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end
|
||||
minetest.node_dig(pos,node,player)
|
||||
end
|
||||
|
||||
function drill_dig_it1 (player)
|
||||
local dir=player:get_look_dir()
|
||||
if math.abs(dir.x)>math.abs(dir.z) then
|
||||
if dir.x>0 then return 0 end
|
||||
return 1
|
||||
end
|
||||
if dir.z>0 then return 2 end
|
||||
return 3
|
||||
end
|
||||
|
||||
function drill_dig_it2 (pos,player)
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z-2
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z+1
|
||||
pos.y=pos.y+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z-2
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z+1
|
||||
pos.y=pos.y-2
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.z=pos.z-2
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
function drill_dig_it3 (pos,player)
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x-2
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
pos.y=pos.y+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x-2
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
pos.y=pos.y-2
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x-2
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
|
||||
function drill_dig_it4 (pos,player)
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x-2
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
pos.z=pos.z+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x-2
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
pos.z=pos.z-2
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x+1
|
||||
drill_dig_it0 (pos,player)
|
||||
pos.x=pos.x-2
|
||||
drill_dig_it0 (pos,player)
|
||||
end
|
||||
|
||||
technic.register_MV_power_tool ("technic:mining_drill",mining_drill_max_charge)
|
||||
minetest.register_tool("technic:mining_drill", {
|
||||
description = "Mining Drill Mk1",
|
||||
inventory_image = "technic_mining_drill.png",
|
||||
stack_max = 1,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type=="node" then
|
||||
local item=itemstack:to_table()
|
||||
local meta=get_item_meta(item["metadata"])
|
||||
if meta==nil then return end --tool not charghed
|
||||
if meta["charge"]==nil then return end
|
||||
local charge=meta["charge"]
|
||||
if charge-mining_drill_power_usage>0 then
|
||||
charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,1,1)
|
||||
charge =charge-mining_drill_power_usage;
|
||||
meta["charge"]=charge
|
||||
item["metadata"]=set_item_meta(meta)
|
||||
technic.set_RE_wear(item,charge,mining_drill_max_charge)
|
||||
itemstack:replace(item)
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_tool("technic:mining_drill_mk2", {
|
||||
description = "Mining Drill Mk2",
|
||||
inventory_image = "technic_mining_drill_mk2.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
mining_drill_mk2_handler(itemstack,user,pointed_thing)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
technic.register_HV_power_tool ("technic:mining_drill_mk2",mining_drill_mk2_max_charge)
|
||||
|
||||
for i=1,4,1 do
|
||||
technic.register_HV_power_tool ("technic:mining_drill_mk2_"..i,mining_drill_mk2_max_charge)
|
||||
minetest.register_tool("technic:mining_drill_mk2_"..i, {
|
||||
description = "Mining Drill Mk2 in Mode "..i,
|
||||
inventory_image = "technic_mining_drill_mk2.png^technic_tool_mode"..i..".png",
|
||||
wield_image = "technic_mining_drill_mk2.png",
|
||||
groups = {not_in_creative_inventory=1},
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
mining_drill_mk2_handler(itemstack,user,pointed_thing)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_tool("technic:mining_drill_mk3", {
|
||||
description = "Mining Drill Mk3",
|
||||
inventory_image = "technic_mining_drill_mk3.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
mining_drill_mk3_handler(itemstack,user,pointed_thing)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
technic.register_HV_power_tool ("technic:mining_drill_mk3",mining_drill_mk3_max_charge)
|
||||
|
||||
for i=1,5,1 do
|
||||
technic.register_HV_power_tool ("technic:mining_drill_mk3_"..i,mining_drill_mk3_max_charge)
|
||||
minetest.register_tool("technic:mining_drill_mk3_"..i, {
|
||||
description = "Mining Drill Mk3 in Mode "..i,
|
||||
inventory_image = "technic_mining_drill_mk3.png^technic_tool_mode"..i..".png",
|
||||
wield_image = "technic_mining_drill_mk3.png",
|
||||
groups = {not_in_creative_inventory=1},
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
mining_drill_mk3_handler(itemstack,user,pointed_thing)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
function mining_drill_mk2_handler (itemstack,user,pointed_thing)
|
||||
local keys=user:get_player_control()
|
||||
local player_name=user:get_player_name()
|
||||
local item=itemstack:to_table()
|
||||
local meta=get_item_meta(item["metadata"])
|
||||
if meta==nil or keys["sneak"]==true then return mining_drill_mk2_setmode(user,itemstack) end
|
||||
if meta["mode"]==nil then return mining_drill_mk2_setmode(user,itemstack) end
|
||||
if pointed_thing.type~="node" then return end
|
||||
if meta["charge"]==nil then return end
|
||||
charge=meta["charge"]
|
||||
if charge-mining_drill_power_usage>0 then
|
||||
local charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,2,meta["mode"])
|
||||
charge=charge-charge_to_take;
|
||||
if charge<0 then charge=0 end
|
||||
meta["charge"]=charge
|
||||
item["metadata"]=set_item_meta(meta)
|
||||
technic.set_RE_wear(item,charge,mining_drill_mk2_max_charge)
|
||||
itemstack:replace(item)
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
function mining_drill_mk3_handler (itemstack,user,pointed_thing)
|
||||
local keys=user:get_player_control()
|
||||
local player_name=user:get_player_name()
|
||||
local item=itemstack:to_table()
|
||||
local meta=get_item_meta(item["metadata"])
|
||||
if meta==nil or keys["sneak"]==true then return mining_drill_mk3_setmode(user,itemstack) end
|
||||
if meta["mode"]==nil then return mining_drill_mk3_setmode(user,itemstack) end
|
||||
if pointed_thing.type~="node" then return end
|
||||
if meta["charge"]==nil then return end
|
||||
local charge=meta["charge"]
|
||||
if charge-mining_drill_power_usage>0 then
|
||||
local charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,3,meta["mode"])
|
||||
charge=charge-charge_to_take;
|
||||
if charge<0 then charge=0 end
|
||||
meta["charge"]=charge
|
||||
item["metadata"]=set_item_meta(meta)
|
||||
technic.set_RE_wear(item,charge,mining_drill_mk3_max_charge)
|
||||
itemstack:replace(item)
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
mining_drill_mode_text={
|
||||
{"Single node."},
|
||||
{"3 nodes deep."},
|
||||
{"3 modes wide."},
|
||||
{"3 modes tall."},
|
||||
{"3x3 nodes."},
|
||||
}
|
||||
|
||||
function mining_drill_mk2_setmode(user,itemstack)
|
||||
local player_name=user:get_player_name()
|
||||
local item=itemstack:to_table()
|
||||
local meta=get_item_meta(item["metadata"])
|
||||
if meta==nil then
|
||||
meta={}
|
||||
mode=0
|
||||
end
|
||||
if meta["mode"]==nil then
|
||||
minetest.chat_send_player(player_name,"Hold shift and use to change Mining Drill Mk2 modes.")
|
||||
meta["mode"]=0
|
||||
mode=0
|
||||
end
|
||||
mode=(meta["mode"])
|
||||
mode=mode+1
|
||||
if mode>=5 then mode=1 end
|
||||
minetest.chat_send_player(player_name, "Mining Drill Mk2 mode : "..mode.." - "..mining_drill_mode_text[mode][1] )
|
||||
item["name"]="technic:mining_drill_mk2_"..mode
|
||||
meta["mode"]=mode
|
||||
item["metadata"]=set_item_meta(meta)
|
||||
itemstack:replace(item)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
function mining_drill_mk3_setmode(user,itemstack)
|
||||
local player_name=user:get_player_name()
|
||||
local item=itemstack:to_table()
|
||||
local meta=get_item_meta(item["metadata"])
|
||||
if meta==nil then
|
||||
meta={}
|
||||
mode=0
|
||||
end
|
||||
if meta["mode"]==nil then
|
||||
minetest.chat_send_player(player_name,"Hold shift and use to change Mining Drill Mk3 modes.")
|
||||
meta["mode"]=0
|
||||
mode=0
|
||||
end
|
||||
mode=(meta["mode"])
|
||||
mode=mode+1
|
||||
if mode>=6 then mode=1 end
|
||||
minetest.chat_send_player(player_name, "Mining Drill Mk3 mode : "..mode.." - "..mining_drill_mode_text[mode][1] )
|
||||
item["name"]="technic:mining_drill_mk3_"..mode
|
||||
meta["mode"]=mode
|
||||
item["metadata"]=set_item_meta(meta)
|
||||
itemstack:replace(item)
|
||||
return itemstack
|
||||
end
|
179
technic/tools/mining_laser.lua
Normal file
179
technic/tools/mining_laser.lua
Normal file
@ -0,0 +1,179 @@
|
||||
local laser_mk1_max_charge=40000
|
||||
technic.register_LV_power_tool ("technic:laser_mk1",laser_mk1_max_charge)
|
||||
|
||||
local laser_shoot = function(itemstack, player, pointed_thing)
|
||||
local laser_straight_mode=0
|
||||
local playerpos=player:getpos()
|
||||
local dir=player:get_look_dir()
|
||||
if pointed_thing.type=="node" then
|
||||
pos=minetest.get_pointed_thing_position(pointed_thing, above)
|
||||
local node = minetest.env:get_node(pos)
|
||||
if node.name~="ignore" then
|
||||
minetest.node_dig(pos,node,player)
|
||||
end
|
||||
laser_straight_mode=1
|
||||
end
|
||||
|
||||
direction_y=math.abs(math.floor(dir.y*100))
|
||||
if direction_y>50 then entity_name="technic:laser_beam_entityV"
|
||||
else entity_name="technic:laser_beam_entity" end
|
||||
|
||||
if laser_straight_mode==1 then
|
||||
pos1=minetest.get_pointed_thing_position(pointed_thing, under)
|
||||
pos1.x=math.floor(pos1.x)
|
||||
pos1.y=math.floor(pos1.y)
|
||||
pos1.z=math.floor(pos1.z)
|
||||
obj=minetest.env:add_entity(pos1,entity_name)
|
||||
else
|
||||
obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.6,z=playerpos.z},entity_name)
|
||||
end
|
||||
if obj:get_luaentity().player == nil then
|
||||
obj:get_luaentity().player = player
|
||||
end
|
||||
if laser_straight_mode==1 and direction_y<50 then
|
||||
obj:setvelocity({x=dir.x*8, y=0, z=dir.z*8})
|
||||
else if laser_straight_mode==1 and direction_y>50 then
|
||||
obj:setvelocity({x=0, y=dir.y*8, z=dir.z*8})
|
||||
end
|
||||
end
|
||||
if laser_straight_mode==0 then
|
||||
obj:setvelocity({x=dir.x*8, y=dir.y*8, z=dir.z*8})
|
||||
end
|
||||
obj:setacceleration({x=0, y=0, z=0})
|
||||
obj:setyaw(player:get_look_yaw()+math.pi)
|
||||
if obj:get_luaentity().player == nil then
|
||||
obj:get_luaentity().player = player
|
||||
end
|
||||
--obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name()
|
||||
minetest.sound_play("technic_laser", {pos = playerpos, gain = 1.0, max_hear_distance = 10,})
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
minetest.register_tool("technic:laser_mk1", {
|
||||
description = "Mining Laser MK1",
|
||||
inventory_image = "technic_mining_laser_mk1.png",
|
||||
stack_max = 1,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
item=itemstack:to_table()
|
||||
local meta=get_item_meta(item["metadata"])
|
||||
if meta==nil then return end --tool not charghed
|
||||
if meta["charge"]==nil then return end
|
||||
charge=meta["charge"]
|
||||
if charge-400>0 then
|
||||
laser_shoot(item, user, pointed_thing)
|
||||
charge = charge-400;
|
||||
technic.set_RE_wear(item,charge,laser_mk1_max_charge)
|
||||
meta["charge"]=charge
|
||||
item["metadata"]=set_item_meta(meta)
|
||||
itemstack:replace(item)
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:laser_mk1',
|
||||
recipe = {
|
||||
{'default:diamond', 'default:steel_ingot', 'technic:battery'},
|
||||
{'', 'default:steel_ingot', 'technic:battery'},
|
||||
{'', '', 'default:copper_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_node("technic:laser_beam_box", {
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -0.5 , -0.1, -0.1 , 0.1 , 0.1 , 0.1 },
|
||||
{ -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1 },
|
||||
}
|
||||
},
|
||||
tiles = {"technic_laser_beam.png"},
|
||||
groups = {not_in_creative_inventory=1},
|
||||
})
|
||||
|
||||
minetest.register_node("technic:laser_beam_boxV", {
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1 },
|
||||
{ -0.1 , -0.5, -0.1 , 0.1 , 0.1 , 0.1 },
|
||||
|
||||
}
|
||||
},
|
||||
tiles = {"technic_laser_beam.png"},
|
||||
groups = {not_in_creative_inventory=1},
|
||||
})
|
||||
|
||||
LASER_BEAM_ENTITY={
|
||||
physical = false,
|
||||
timer=0,
|
||||
visual = "wielditem",
|
||||
visual_size = {x=0.2, y=0.2},
|
||||
textures = {"technic:laser_beam_box"},
|
||||
lastpos={},
|
||||
max_range=10,
|
||||
count=0,
|
||||
-- digger=nil,
|
||||
collisionbox = {0,0,0,0,0,0},
|
||||
}
|
||||
|
||||
LASER_BEAM_ENTITY.on_step = function(self, dtime)
|
||||
self.timer=self.timer+dtime
|
||||
local pos = self.object:getpos()
|
||||
if self.player~=nil then if self.lastpos.x~=nil then lazer_it (pos, self.player) end end
|
||||
if self.lastpos.x ~=nil and self.lastpos.y ~=nil and self.lastpos.y ~=nil then
|
||||
temp1={x=math.floor(self.lastpos.x),y=math.floor(self.lastpos.y),z=math.floor(self.lastpos.z)}
|
||||
temp2={x=math.floor(pos.x),y=math.floor(pos.y),z=math.floor(pos.z)}
|
||||
if temp1.x==temp2.x and temp1.y==temp2.y and temp1.z==temp2.z then return end
|
||||
end
|
||||
self.lastpos={x=pos.x, y=pos.y, z=pos.z}
|
||||
self.count=self.count+1
|
||||
if self.count==self.max_range then self.object:remove() end
|
||||
end
|
||||
|
||||
LASER_BEAM_ENTITYV={
|
||||
physical = false,
|
||||
timer=0,
|
||||
visual = "wielditem",
|
||||
visual_size = {x=0.2, y=0.2},
|
||||
textures = {"technic:laser_beam_boxV"},
|
||||
lastpos={},
|
||||
max_range=15,
|
||||
count=0,
|
||||
collisionbox = {0,0,0,0,0,0},
|
||||
}
|
||||
|
||||
LASER_BEAM_ENTITYV.on_step = function(self, dtime)
|
||||
self.timer=self.timer+dtime
|
||||
local pos = self.object:getpos()
|
||||
if self.player~=nil then if self.lastpos.x~=nil then lazer_it (pos, self.player) end end
|
||||
if self.lastpos.x ~=nil and self.lastpos.y ~=nil and self.lastpos.y ~=nil then
|
||||
temp1={x=math.floor(self.lastpos.x),y=math.floor(self.lastpos.y),z=math.floor(self.lastpos.z)}
|
||||
temp2={x=math.floor(pos.x),y=math.floor(pos.y),z=math.floor(pos.z)}
|
||||
if temp1.x==temp2.x and temp1.y==temp2.y and temp1.z==temp2.z then return end
|
||||
end
|
||||
self.lastpos={x=pos.x, y=pos.y, z=pos.z}
|
||||
self.count=self.count+1
|
||||
if self.count==self.max_range then self.object:remove() end
|
||||
end
|
||||
|
||||
|
||||
minetest.register_entity("technic:laser_beam_entity", LASER_BEAM_ENTITY)
|
||||
minetest.register_entity("technic:laser_beam_entityV", LASER_BEAM_ENTITYV)
|
||||
|
||||
function lazer_it (pos, player)
|
||||
local pos1={}
|
||||
-- pos1.x=math.floor(pos.x)
|
||||
-- pos1.y=math.floor(pos.y)
|
||||
-- pos1.z=math.floor(pos.z)
|
||||
local node = minetest.env:get_node(pos)
|
||||
if node.name == "air" or node.name == "ignore" or node.name == "default:lava_source" or node.name == "default:lava_flowing" then return end
|
||||
if node.name == "default:water_source" or node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end
|
||||
if player then minetest.node_dig(pos,node,player) end
|
||||
end
|
59
technic/tools/sonic_screwdriver.lua
Normal file
59
technic/tools/sonic_screwdriver.lua
Normal file
@ -0,0 +1,59 @@
|
||||
local sonic_screwdriver_max_charge=15000
|
||||
technic.register_HV_power_tool ("technic:sonic_screwdriver",sonic_screwdriver_max_charge)
|
||||
|
||||
minetest.register_tool("technic:sonic_screwdriver", {
|
||||
description = "Sonic Screwdriver",
|
||||
inventory_image = "technic_sonic_screwdriver.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
-- Must be pointing to facedir applicable node
|
||||
if pointed_thing.type~="node" then return end
|
||||
local pos=minetest.get_pointed_thing_position(pointed_thing,above)
|
||||
local node=minetest.env:get_node(pos)
|
||||
local node_name=node.name
|
||||
if minetest.registered_nodes[node_name].paramtype2 == "facedir" or minetest.registered_nodes[node_name].paramtype2 == "wallmounted" then
|
||||
if node.param2==nil then return end
|
||||
item=itemstack:to_table()
|
||||
local meta1=get_item_meta(item["metadata"])
|
||||
if meta1==nil then return end --tool not charghed
|
||||
if meta1["charge"]==nil then return end
|
||||
charge=meta1["charge"]
|
||||
if charge-100>0 then
|
||||
minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.3, max_hear_distance = 10,})
|
||||
local n = node.param2
|
||||
if minetest.registered_nodes[node_name].paramtype2 == "facedir" then
|
||||
n = n+1
|
||||
if n == 4 then n = 0 end
|
||||
else
|
||||
n = n+1
|
||||
if n == 6 then n = 0 end
|
||||
end
|
||||
-- hacky_swap_node, unforunatly.
|
||||
local meta = minetest.env:get_meta(pos)
|
||||
local meta0 = meta:to_table()
|
||||
node.param2 = n
|
||||
minetest.env:set_node(pos,node)
|
||||
meta = minetest.env:get_meta(pos)
|
||||
meta:from_table(meta0)
|
||||
|
||||
charge=charge-100;
|
||||
meta1["charge"]=charge
|
||||
item["metadata"]=set_item_meta(meta1)
|
||||
technic.set_RE_wear(item,charge,sonic_screwdriver_max_charge)
|
||||
itemstack:replace(item)
|
||||
end
|
||||
return itemstack
|
||||
else
|
||||
return itemstack
|
||||
end
|
||||
end,
|
||||
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "technic:sonic_screwdriver",
|
||||
recipe = {
|
||||
{"default:diamond"},
|
||||
{"technic:battery"},
|
||||
{"technic:stainless_steel_ingot"}
|
||||
}
|
||||
})
|
60
technic/tools/tree_tap.lua
Normal file
60
technic/tools/tree_tap.lua
Normal file
@ -0,0 +1,60 @@
|
||||
minetest.register_tool("technic:treetap", {
|
||||
description = "Tree Tap",
|
||||
inventory_image = "technic_tree_tap.png",
|
||||
on_use = function(itemstack,user,pointed_thing)
|
||||
if pointed_thing.type~="node" then return end
|
||||
if user:get_inventory():room_for_item("main",ItemStack("technic:raw_latex")) then
|
||||
local pos=minetest.get_pointed_thing_position(pointed_thing,above)
|
||||
local node=minetest.env:get_node(pos)
|
||||
local node_name=node.name
|
||||
if node_name == "moretrees:rubber_tree_trunk" then
|
||||
node.name = "moretrees:rubber_tree_trunk_empty"
|
||||
user:get_inventory():add_item("main",ItemStack("technic:raw_latex"))
|
||||
minetest.env:set_node(pos,node)
|
||||
local item=itemstack:to_table()
|
||||
local item_wear=tonumber((item["wear"]))
|
||||
item_wear=item_wear+819
|
||||
if item_wear>65535 then itemstack:clear() return itemstack end
|
||||
item["wear"]=tostring(item_wear)
|
||||
itemstack:replace(item)
|
||||
return itemstack
|
||||
else
|
||||
return itemstack
|
||||
end
|
||||
else return end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "technic:treetap",
|
||||
recipe = {
|
||||
{"pipeworks:tube", "default:wood", "default:stick"},
|
||||
{"", "default:stick", "default:stick"}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:raw_latex", {
|
||||
description = "Raw Latex",
|
||||
inventory_image = "technic_raw_latex.png",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "technic:rubber",
|
||||
recipe = "technic:raw_latex",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:rubber", {
|
||||
description = "Rubber Fiber",
|
||||
inventory_image = "technic_rubber.png",
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"moretrees:rubber_tree_trunk_empty"},
|
||||
interval = 60,
|
||||
chance = 15,
|
||||
action = function(pos, node)
|
||||
node.name = "moretrees:rubber_tree_trunk"
|
||||
minetest.env:set_node(pos, node)
|
||||
end
|
||||
})
|
Reference in New Issue
Block a user