mods that hopefully work for a TechAge-based pack
This commit is contained in:
1 parent
4e6b08d194
commit
c27db2a537
6234 files changed
+375578
No files matched your search
@@ -0,0 +1,211 @@
|
||||
--[[
|
||||
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2017-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
local M = minetest.get_meta
|
||||
local S = techage.S
|
||||
local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end
|
||||
|
||||
local InvalidBlocks = {}
|
||||
|
||||
local function base_checks(user, pointed_thing, place)
|
||||
if pointed_thing.type ~= "node" then
|
||||
return false
|
||||
end
|
||||
|
||||
if not user then
|
||||
return false
|
||||
end
|
||||
|
||||
local pos = place and pointed_thing.above or pointed_thing.under
|
||||
local player_name = user:get_player_name()
|
||||
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true, pos, player_name
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
local function add_to_inventory(pos, item, user)
|
||||
local inv = user:get_inventory()
|
||||
if inv and item and inv:room_for_item("main", item) then
|
||||
inv:add_item("main", item)
|
||||
else
|
||||
minetest.item_drop(item, user, pos)
|
||||
end
|
||||
end
|
||||
|
||||
local function take_from_inventory(user)
|
||||
local inv = user:get_inventory()
|
||||
local stack = inv:get_stack("main", 1)
|
||||
local taken = stack:take_item(1)
|
||||
|
||||
if taken:get_count() == 1 then
|
||||
local imeta = taken:get_meta()
|
||||
if imeta:get_string("node_number") ~= "" then
|
||||
inv:set_stack("main", 1, stack)
|
||||
return taken
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
local function remove_node(pos, digger)
|
||||
local node = minetest.get_node(pos)
|
||||
local number = M(pos):get_string("node_number")
|
||||
local item = ItemStack(node.name)
|
||||
local imeta = item:get_meta()
|
||||
local ndef = minetest.registered_nodes[node.name]
|
||||
local oldmetadata = minetest.get_meta(pos):to_table()
|
||||
|
||||
if InvalidBlocks[node.name] then
|
||||
return
|
||||
end
|
||||
|
||||
if ndef.ta_can_remove then
|
||||
if not ndef.ta_can_remove(pos, digger) then
|
||||
return
|
||||
end
|
||||
elseif ndef.can_dig and not ndef.can_dig(pos, digger) then
|
||||
return
|
||||
end
|
||||
|
||||
if ndef and ndef.ta_preserve_nodedata then
|
||||
local s, label = ndef.ta_preserve_nodedata(pos, node, digger)
|
||||
imeta:set_string("node_data", s)
|
||||
minetest.remove_node(pos)
|
||||
if ndef.after_dig_node then
|
||||
ndef.after_dig_node(pos, node, oldmetadata, digger)
|
||||
end
|
||||
if number ~= "" then
|
||||
techage.post_remove_node(pos)
|
||||
imeta:set_string("node_number", number)
|
||||
local desc = ndef.description .. " : " .. number
|
||||
if label and label ~= "" and label ~= "empty" then
|
||||
desc = desc .. "\n(" .. label .. ")"
|
||||
end
|
||||
imeta:set_string("description", desc)
|
||||
else
|
||||
local desc = ndef.description .. " (preserved)"
|
||||
if label and label ~= "" and label ~= "empty" then
|
||||
desc = desc .. "\n(" .. label .. ")"
|
||||
end
|
||||
imeta:set_string("description", desc)
|
||||
end
|
||||
return item
|
||||
elseif number ~= "" and ndef and ndef.after_dig_node then
|
||||
minetest.remove_node(pos)
|
||||
ndef.after_dig_node(pos, node, oldmetadata, digger)
|
||||
techage.post_remove_node(pos)
|
||||
imeta:set_string("node_number", number)
|
||||
imeta:set_string("description", ndef.description .. " : " .. number)
|
||||
return item
|
||||
end
|
||||
end
|
||||
|
||||
local function place_node(pos, item, placer, pointed_thing)
|
||||
local imeta = item:get_meta()
|
||||
local number = imeta:get_string("node_number")
|
||||
local name = item:get_name()
|
||||
local param2 = minetest.dir_to_facedir(placer:get_look_dir())
|
||||
local ndef = minetest.registered_nodes[name]
|
||||
|
||||
if ndef and ndef.ta_restore_nodedata then
|
||||
if number ~= "" then
|
||||
techage.pre_add_node(pos, number)
|
||||
end
|
||||
minetest.add_node(pos, {name = name, param2 = param2})
|
||||
local s = imeta:get_string("node_data")
|
||||
ndef.ta_restore_nodedata(pos, s, placer)
|
||||
return true
|
||||
elseif number ~= "" and ndef and ndef.after_place_node then
|
||||
techage.pre_add_node(pos, number)
|
||||
minetest.add_node(pos, {name = name, param2 = param2})
|
||||
ndef.after_place_node(pos, placer, item, pointed_thing)
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
local function on_place_node(itemstack, pos, user, player_name, pointed_thing)
|
||||
local item = take_from_inventory(user)
|
||||
if item then
|
||||
if place_node(pos, item, user, pointed_thing) then
|
||||
itemstack:add_wear(65636/200)
|
||||
minetest.sound_play("techage_cordless_screwdriver", {
|
||||
pos = pos,
|
||||
gain = 1,
|
||||
max_hear_distance = 10})
|
||||
return itemstack
|
||||
else
|
||||
add_to_inventory(pos, item, user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function on_remove_node(itemstack, pos, user, player_name)
|
||||
local item = remove_node(pos, user)
|
||||
if item then
|
||||
add_to_inventory(pos, item, user)
|
||||
itemstack:add_wear(65636/200)
|
||||
minetest.sound_play("techage_cordless_screwdriver", {
|
||||
pos = pos,
|
||||
gain = 1,
|
||||
max_hear_distance = 10})
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
local function on_place(itemstack, user, pointed_thing)
|
||||
local res, pos, player_name = base_checks(user, pointed_thing, true)
|
||||
if res then
|
||||
return on_place_node(itemstack, pos, user, player_name, pointed_thing)
|
||||
end
|
||||
end
|
||||
|
||||
local function on_use(itemstack, user, pointed_thing)
|
||||
local res, pos, player_name = base_checks(user, pointed_thing, false)
|
||||
if res then
|
||||
return on_remove_node(itemstack, pos, user, player_name)
|
||||
end
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
minetest.register_tool("techage:cordless_screwdriver", {
|
||||
description = S("TechAge Cordless Screwdriver"),
|
||||
inventory_image = "techage_cordless_screwdriver.png",
|
||||
wield_image = "techage_cordless_screwdriver.png",
|
||||
groups = {cracky=1, book=1},
|
||||
on_use = on_use,
|
||||
on_place = on_place,
|
||||
node_placement_prediction = "",
|
||||
stack_max = 1,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:cordless_screwdriver",
|
||||
recipe = {
|
||||
{"", "basic_materials:steel_bar", ""},
|
||||
{"basic_materials:plastic_sheet", "basic_materials:motor", "basic_materials:plastic_sheet"},
|
||||
{"", "techage:ta4_battery", ""},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_alias("techage:repairkit", "techage:cordless_screwdriver")
|
||||
minetest.register_alias("techage:assembly_tool", "techage:cordless_screwdriver")
|
||||
|
||||
function techage.disable_block_for_assembly_tool(block_name)
|
||||
InvalidBlocks[block_name] = true
|
||||
end
|
||||
@@ -0,0 +1,244 @@
|
||||
--[[
|
||||
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2017-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
local M = minetest.get_meta
|
||||
local S = techage.S
|
||||
|
||||
local Cable1 = techage.ElectricCable
|
||||
local Cable2 = techage.TA4_Cable
|
||||
local Pipe2 = techage.LiquidPipe
|
||||
local menu = techage.menu
|
||||
|
||||
local N = techage.get_node_lvm
|
||||
local CTL = function(pos) return (minetest.registered_nodes[N(pos).name] or {}).control end
|
||||
|
||||
local function network_check(start_pos, Cable, player_name)
|
||||
-- local ndef = techage.networks.net_def(start_pos, Cable.tube_type)
|
||||
-- local outdir = nil
|
||||
-- local num = 0
|
||||
-- if ndef and ndef.ntype ~= "junc" then
|
||||
-- outdir = M(start_pos):get_int("outdir")
|
||||
-- end
|
||||
-- networks.connection_walk(start_pos, outdir, Cable, function(pos, indir, node)
|
||||
-- local distance = vector.distance(start_pos, pos)
|
||||
-- num = num + 1
|
||||
-- if distance < 50 and num < 100 then
|
||||
-- local state = techage.power.power_available(pos, Cable) and "power" or "no power"
|
||||
-- techage.mark_position(player_name, pos, state, "#ff0000", 6)
|
||||
-- end
|
||||
-- end)
|
||||
end
|
||||
|
||||
local function read_state(itemstack, user, pointed_thing)
|
||||
local pos = pointed_thing.under
|
||||
if pos and user then
|
||||
local time = math.floor(minetest.get_timeofday() * 24 * 6)
|
||||
local hours = math.floor(time / 6)
|
||||
local mins = (time % 6) * 10
|
||||
if mins < 10 then mins = "00" end
|
||||
|
||||
local number = techage.get_node_number(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local ndef = minetest.registered_nodes[node.name]
|
||||
|
||||
if node.name == "default:water_source" then
|
||||
local player_name = user:get_player_name()
|
||||
techage.valid_place_for_windturbine(pos, player_name, 0)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.chat_send_player(user:get_player_name(), S("Time")..": "..hours..":"..mins.." ")
|
||||
local data = minetest.get_biome_data(pos)
|
||||
if data then
|
||||
local name = minetest.get_biome_name(data.biome)
|
||||
minetest.chat_send_player(user:get_player_name(), S("Biome")..": "..name..", "..S("Position temperature")..": "..math.floor(data.heat).." ")
|
||||
end
|
||||
|
||||
if number then
|
||||
if ndef and ndef.description then
|
||||
local info = techage.send_single("0", number, "info", nil)
|
||||
if info and info ~= "" and info ~= "unsupported" then
|
||||
info = tostring(info)
|
||||
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..":\n"..info.." ")
|
||||
end
|
||||
local state = techage.send_single("0", number, "state", nil)
|
||||
if state and state ~= "" and state ~= "unsupported" then
|
||||
state = dump(state)
|
||||
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": state = "..state.." ")
|
||||
end
|
||||
local state = techage.send_single("0", number, "count", nil)
|
||||
if state and state ~= "" and state ~= "unsupported" then
|
||||
state = dump(state)
|
||||
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": count = "..state.." ")
|
||||
end
|
||||
local fuel = techage.send_single("0", number, "fuel", nil)
|
||||
if fuel and fuel ~= "" and fuel ~= "unsupported" then
|
||||
fuel = dump(fuel)
|
||||
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": fuel = "..fuel.." ")
|
||||
end
|
||||
local output = techage.send_single("0", number, "output", nil)
|
||||
if output and output ~= "" and output ~= "unsupported" then
|
||||
output = dump(output)
|
||||
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": output = "..output.." ")
|
||||
end
|
||||
local load, abs = techage.send_single("0", number, "load", nil)
|
||||
if load and load ~= "" and load ~= "unsupported" then
|
||||
load, abs = dump(load), abs and dump(abs) or "--"
|
||||
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": load = "..load.." % / "..abs.." units ")
|
||||
end
|
||||
local delivered = techage.send_single("0", number, "delivered", nil)
|
||||
if delivered and delivered ~= "" and delivered ~= "unsupported" then
|
||||
delivered = dump(delivered)
|
||||
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": delivered = "..delivered.." ku ")
|
||||
end
|
||||
local consumption = techage.send_single("0", number, "consumption", nil)
|
||||
if consumption and consumption ~= "" and consumption ~= "unsupported" then
|
||||
consumption = dump(consumption)
|
||||
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": consumption = "..consumption.." kud ")
|
||||
end
|
||||
local flowrate = techage.send_single("0", number, "flowrate", nil)
|
||||
if flowrate and flowrate ~= "" and flowrate ~= "unsupported" then
|
||||
flowrate = dump(flowrate)
|
||||
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": flowrate = "..flowrate.." ")
|
||||
end
|
||||
local owner = M(pos):get_string("owner") or ""
|
||||
if owner ~= "" then
|
||||
minetest.chat_send_player(user:get_player_name(), S("Node owner")..": "..owner.." ")
|
||||
end
|
||||
if ndef and ndef.networks and ndef.networks.pipe2 and ndef.networks.pipe2.ntype == "pump" then
|
||||
local tbl = networks.liquid.get_liquids(pos, Pipe2)
|
||||
if #tbl > 0 then
|
||||
local names = table.concat(tbl, ", ")
|
||||
minetest.chat_send_player(user:get_player_name(), S("Pump connected to tank(s) with: @1", names))
|
||||
else
|
||||
minetest.chat_send_player(user:get_player_name(), S("Pump connected to no/empty tank(s)."))
|
||||
end
|
||||
end
|
||||
|
||||
minetest.chat_send_player(user:get_player_name(), S("Position")..": "..minetest.pos_to_string(pos).." ")
|
||||
itemstack:add_wear(65636/200)
|
||||
return itemstack
|
||||
end
|
||||
elseif ndef and ndef.description then
|
||||
if ndef.techage_info then
|
||||
local info = ndef.techage_info(pos) or ""
|
||||
minetest.chat_send_player(user:get_player_name(), ndef.description..":\n"..info)
|
||||
end
|
||||
local owner = M(pos):get_string("owner") or ""
|
||||
if owner ~= "" then
|
||||
minetest.chat_send_player(user:get_player_name(), S("Node owner")..": "..owner.." ")
|
||||
end
|
||||
minetest.chat_send_player(user:get_player_name(), S("Position")..": "..minetest.pos_to_string(pos).." ")
|
||||
itemstack:add_wear(65636/200)
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local context = {}
|
||||
|
||||
local function settings_menu(pos, playername)
|
||||
if minetest.is_protected(pos, playername) then
|
||||
return
|
||||
end
|
||||
-- Check node settings in addition
|
||||
local access = M(pos):get_string("access")
|
||||
local owner = M(pos):get_string("owner")
|
||||
if access == "private" and playername ~= owner then
|
||||
return
|
||||
end
|
||||
|
||||
local number = techage.get_node_number(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local ndef = minetest.registered_nodes[node.name]
|
||||
local form_def
|
||||
|
||||
if ndef then
|
||||
if ndef.ta3_formspec or ndef.ta4_formspec then
|
||||
form_def = ndef.ta3_formspec or ndef.ta4_formspec
|
||||
elseif ndef.ta5_formspec then
|
||||
local player = minetest.get_player_by_name(playername)
|
||||
if techage.get_expoints(player) >= ndef.ta5_formspec.ex_points then
|
||||
form_def = ndef.ta5_formspec.menu
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context[playername] = pos
|
||||
if form_def then
|
||||
minetest.show_formspec(playername, "techage:ta_formspec",
|
||||
menu.generate_formspec(pos, ndef, form_def, playername))
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "techage:ta_formspec" then
|
||||
return false
|
||||
end
|
||||
|
||||
local playername = player:get_player_name()
|
||||
local pos = context[playername]
|
||||
if pos then
|
||||
--context[playername] = nil
|
||||
local number = techage.get_node_number(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local ndef = minetest.registered_nodes[node.name]
|
||||
local form_def = ndef and (ndef.ta3_formspec or ndef.ta4_formspec or (ndef.ta5_formspec and ndef.ta5_formspec.menu))
|
||||
|
||||
if form_def then
|
||||
if menu.eval_input(pos, form_def, fields, playername) then
|
||||
--context[playername] = pos
|
||||
minetest.after(0.2, function()
|
||||
minetest.show_formspec(playername, "techage:ta_formspec",
|
||||
menu.generate_formspec(pos, ndef, form_def, playername))
|
||||
end)
|
||||
if ndef.ta_after_formspec then
|
||||
ndef.ta_after_formspec(pos, fields, playername)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return true
|
||||
end)
|
||||
|
||||
|
||||
local function on_place(itemstack, placer, pointed_thing)
|
||||
if pointed_thing.type == "node" then
|
||||
local pos = pointed_thing.under
|
||||
local playername = placer:get_player_name()
|
||||
if placer:get_player_control().sneak then
|
||||
settings_menu(pos, playername)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_tool("techage:end_wrench", {
|
||||
description = S("TechAge Info Tool (use = read status info)"),
|
||||
inventory_image = "techage_end_wrench.png",
|
||||
wield_image = "techage_end_wrench.png",
|
||||
groups = {cracky=1, book=1},
|
||||
on_use = read_state,
|
||||
on_place = on_place,
|
||||
node_placement_prediction = "",
|
||||
liquids_pointable = true,
|
||||
stack_max = 1,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:end_wrench",
|
||||
recipe = {
|
||||
{"", "", "default:steel_ingot"},
|
||||
{"", "techage:iron_ingot", ""},
|
||||
{"default:steel_ingot", "", ""},
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,41 @@
|
||||
local S = techage.S
|
||||
|
||||
local function remove_pipe(itemstack, user, pointed_thing)
|
||||
local pos = pointed_thing.under
|
||||
if pos and user then
|
||||
if minetest.is_protected(pos, user:get_player_name()) then
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
|
||||
if(pos ~= nil) then
|
||||
local node = minetest.get_node(pos)
|
||||
if(node.name == "techage:oil_drillbit2") then
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
itemstack:add_wear(65636/200)
|
||||
return itemstack
|
||||
|
||||
end -- if(node.name
|
||||
|
||||
end -- if(pos ~= nil)
|
||||
|
||||
end -- remove_pipe
|
||||
|
||||
|
||||
minetest.register_tool("techage:ta3_drill_pipe_wrench", {
|
||||
description = S("TA3 Drill Pipe Wrench"),
|
||||
inventory_image = "techage_pipe_wrench.png",
|
||||
wield_image = "techage_pipe_wrench.png",
|
||||
groups = {cracky=1},
|
||||
on_use = remove_pipe,
|
||||
stack_max = 1,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:ta3_drill_pipe_wrench",
|
||||
recipe = {
|
||||
{"default:diamond", "default:diamond", ""},
|
||||
{"dye:red", "default:steel_ingot", "dye:red"},
|
||||
{"default:steel_ingot", "", "default:steel_ingot"},
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,160 @@
|
||||
--[[
|
||||
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2020-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Screwdriver
|
||||
|
||||
]]--
|
||||
if minetest.global_exists("screwdriver") then
|
||||
|
||||
local S = techage.S
|
||||
local M = minetest.get_meta
|
||||
|
||||
local USES = 2000
|
||||
|
||||
local function base_checks(user, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then
|
||||
return false
|
||||
end
|
||||
|
||||
if not user then
|
||||
return false
|
||||
end
|
||||
|
||||
local pos = pointed_thing.under
|
||||
local player_name = user:get_player_name()
|
||||
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
return false
|
||||
end
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
local ndef = minetest.registered_nodes[node.name]
|
||||
|
||||
if not ndef then
|
||||
return false
|
||||
end
|
||||
|
||||
if ndef.on_rotate == screwdriver.disallow and not ndef.ta_rotate_node then
|
||||
return false
|
||||
end
|
||||
|
||||
local yaw = user:get_look_horizontal()
|
||||
local dir = minetest.yaw_to_dir(yaw)
|
||||
local facedir = minetest.dir_to_facedir(dir)
|
||||
|
||||
return true, pos, player_name, facedir, node, ndef
|
||||
end
|
||||
|
||||
|
||||
local function store_node_param2(user, node)
|
||||
user:get_meta():set_int("techage_screwdriver_param2", node.param2)
|
||||
minetest.chat_send_player(user:get_player_name(), S("Block alignment stored!"))
|
||||
end
|
||||
|
||||
local function turn_node_param2(pos, node, ndef, user)
|
||||
local param2 = user:get_meta():get_int("techage_screwdriver_param2") or 0
|
||||
if ndef.ta_rotate_node then
|
||||
ndef.ta_rotate_node(pos, node, param2)
|
||||
else
|
||||
minetest.swap_node(pos, {name = node.name, param2 = param2})
|
||||
minetest.check_for_falling(pos)
|
||||
end
|
||||
end
|
||||
|
||||
local function turn_left(pos, node, ndef)
|
||||
local param2 = techage.param2_turn_left(node.param2)
|
||||
if ndef.ta_rotate_node then
|
||||
ndef.ta_rotate_node(pos, node, param2)
|
||||
else
|
||||
minetest.swap_node(pos, {name = node.name, param2 = param2})
|
||||
minetest.check_for_falling(pos)
|
||||
end
|
||||
end
|
||||
|
||||
local function turn_up(pos, node, ndef, facedir)
|
||||
local param2 = techage.param2_turn_up(facedir, node.param2)
|
||||
if ndef.ta_rotate_node then
|
||||
ndef.ta_rotate_node(pos, node, param2)
|
||||
else
|
||||
minetest.swap_node(pos, {name = node.name, param2 = param2})
|
||||
minetest.check_for_falling(pos)
|
||||
end
|
||||
end
|
||||
|
||||
-- on_use == on_left_click == turn left
|
||||
local function on_use(itemstack, user, pointed_thing)
|
||||
local res, pos, player_name, facedir, node, ndef = base_checks(user, pointed_thing)
|
||||
if res then
|
||||
if ndef.paramtype2 == "facedir" then
|
||||
if user:get_player_control().sneak then
|
||||
store_node_param2(user, node)
|
||||
else
|
||||
turn_left(pos, node, ndef)
|
||||
end
|
||||
else
|
||||
return screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, USES)
|
||||
end
|
||||
|
||||
if not minetest.is_creative_enabled(player_name) then
|
||||
itemstack:add_wear(65535 / (USES - 1))
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
-- on_place == on_right_click == turn up
|
||||
local function on_place(itemstack, user, pointed_thing)
|
||||
local res, pos, player_name, facedir, node, ndef = base_checks(user, pointed_thing)
|
||||
if res then
|
||||
-- Support for anvil
|
||||
if node.name == "anvil:anvil" then
|
||||
return screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, USES)
|
||||
end
|
||||
|
||||
if ndef.paramtype2 == "facedir" then
|
||||
if ndef.on_rotate ~= screwdriver.rotate_simple then
|
||||
if user:get_player_control().sneak then
|
||||
turn_node_param2(pos, node, ndef, user)
|
||||
else
|
||||
turn_up(pos, node, ndef, facedir)
|
||||
end
|
||||
else
|
||||
return itemstack
|
||||
end
|
||||
else
|
||||
return screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, USES)
|
||||
end
|
||||
|
||||
if not minetest.is_creative_enabled(player_name) then
|
||||
itemstack:add_wear(65535 / (USES - 1))
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.register_tool("techage:screwdriver", {
|
||||
description = S("Techage Screwdriver\n(See: TA3 > Tools)"),
|
||||
inventory_image = "techage_screwdriver.png",
|
||||
on_use = on_use,
|
||||
on_place = on_place,
|
||||
node_placement_prediction = "",
|
||||
stack_max = 1,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:screwdriver",
|
||||
recipe = {
|
||||
{"", "default:diamond", ""},
|
||||
{"", "basic_materials:steel_bar", ""},
|
||||
{"", "techage:baborium_ingot", ""},
|
||||
},
|
||||
})
|
||||
|
||||
end
|
||||
@@ -0,0 +1,68 @@
|
||||
--[[
|
||||
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Trowel tool to hide/open cable/pipe/tube nodes
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
local P = minetest.string_to_pos
|
||||
local M = minetest.get_meta
|
||||
local S = techage.S
|
||||
|
||||
local function replace_node(itemstack, placer, pointed_thing)
|
||||
if pointed_thing.type == "node" then
|
||||
local pos = pointed_thing.under
|
||||
local name = placer:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
return
|
||||
end
|
||||
local node = minetest.get_node(pos)
|
||||
local res = false
|
||||
if minetest.get_item_group(node.name, "techage_trowel") == 1 then
|
||||
res = networks.hide_node(pos, node, placer)
|
||||
elseif networks.hidden_name(pos) or M(pos):get_string("techage_hidden_nodename") ~= "" then
|
||||
res = networks.open_node(pos, node, placer)
|
||||
else
|
||||
minetest.chat_send_player(placer:get_player_name(), "Invalid/unsuported block!")
|
||||
return
|
||||
end
|
||||
if res then
|
||||
minetest.sound_play("default_dig_snappy", {
|
||||
pos = pos,
|
||||
gain = 1,
|
||||
max_hear_distance = 5})
|
||||
elseif placer and placer.get_player_name then
|
||||
minetest.chat_send_player(placer:get_player_name(), "Invalid fill material in inventory slot 1!")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_tool("techage:trowel", {
|
||||
description = S("TechAge Trowel"),
|
||||
inventory_image = "techage_trowel.png",
|
||||
wield_image = "techage_trowel.png",
|
||||
use_texture_alpha = techage.CLIP,
|
||||
groups = {cracky=1},
|
||||
on_use = replace_node,
|
||||
on_place = replace_node,
|
||||
node_placement_prediction = "",
|
||||
stack_max = 1,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:trowel",
|
||||
recipe = {
|
||||
{"basic_materials:steel_bar", "basic_materials:steel_bar", ""},
|
||||
{"basic_materials:steel_bar", "default:stick", ""},
|
||||
{"", "", "default:stick"},
|
||||
},
|
||||
})
|
||||
Reference in new issue
Block a user