summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--technic/tools/mining_drill.lua10
-rw-r--r--wrench/depends.txt3
-rw-r--r--wrench/init.lua411
-rw-r--r--wrench/textures/technic_wrench.pngbin0 -> 249 bytes
4 files changed, 424 insertions, 0 deletions
diff --git a/technic/tools/mining_drill.lua b/technic/tools/mining_drill.lua
index 860127f..1d57e70 100644
--- a/technic/tools/mining_drill.lua
+++ b/technic/tools/mining_drill.lua
@@ -29,6 +29,16 @@ minetest.register_craft({
{'', 'technic:blue_energy_crystal', ''},
}
})
+for i=1,4,1 do
+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_'..i, 'technic:stainless_steel_ingot' },
+ {'', 'technic:blue_energy_crystal', ''},
+ }
+})
+end
function drill_dig_it (pos, player,drill_type,mode)
diff --git a/wrench/depends.txt b/wrench/depends.txt
new file mode 100644
index 0000000..f6abc61
--- /dev/null
+++ b/wrench/depends.txt
@@ -0,0 +1,3 @@
+default
+technic
+technic_chests \ No newline at end of file
diff --git a/wrench/init.lua b/wrench/init.lua
new file mode 100644
index 0000000..2c64d78
--- /dev/null
+++ b/wrench/init.lua
@@ -0,0 +1,411 @@
+--[[
+ Wrench mod
+ Adds a wrench that allows the player to pickup nodes that contain an inventory with items or metadata that needs perserving.
+ The wrench has the same tool capability as the normal hand.
+ To pickup a node simply right click on it. If the node contains a formspec, you will need to shift+right click instead.
+ supported_nodes
+ This table stores all nodes that are compatible with the wrench mod.
+ Syntax:
+ [<node name>] = {
+ name = "wrench:<temporary node name>",
+ lists = {"<inventory list name>"},
+ metas = {{string="<meta name>"},{int="<meta name>"},{float="<meta name>"}},
+ owner_protection[optional] = 1,
+ store_meta_always[optional] = 1,
+ }
+ <temporary node name> - can be anything as long as it is unique
+ [optional] - parameters do not have to be included
+ owner_protection - nodes that are protected by owner requirements (Ex. locked chests)
+ store_meta_always - when nodes are broken this ensures metadata and inventory is always stored (Ex. active state for machines)
+--]]
+local supported_nodes = {
+["default:chest"] = {
+ name="wrench:default_chest",
+ lists={"main"},
+ metas={},
+},
+["default:chest_locked"] = {
+ name="wrench:default_chest_locked",
+ lists={"main"},
+ metas={{string="owner"},{string="infotext"}},
+ owner_protection=1,
+},
+["default:furnace"] = {
+ name="wrench:default_furnace",
+ lists={"fuel", "src", "dst"},
+ metas={{string="infotext"},{float="fuel_totaltime"},{float="fuel_time"},{float="src_totaltime"},{float="src_time"}},
+},
+["default:furnace_active"] = {
+ name="wrench:default_furnace",
+ lists={"fuel", "src", "dst"},
+ metas={{string="infotext"},{float="fuel_totaltime"},{float="fuel_time"},{float="src_totaltime"},{float="src_time"}},
+ store_meta_always=1,
+},
+["default:sign_wall"] = {
+ name="wrench:default_sing_wall",
+ lists={},
+ metas={{string="infotext"},{string="text"}},
+},
+["technic:iron_chest"] = {
+ name="wrench:technic_iron_chest",
+ lists={"main"},
+ metas={},
+},
+["technic:iron_locked_chest"] = {
+ name="wrench:technic_iron_locked_chest",
+ lists={"main"},
+ metas={{string="infotext"},{string="owner"}},
+ owner_protection=1,
+},
+["technic:copper_chest"] = {
+ name="wrench:technic_copper_chest",
+ lists={"main"},
+ metas={},
+},
+["technic:copper_locked_chest"] = {
+ name="wrench:technic_copper_locked_chest",
+ lists={"main"},
+ metas={{string="infotext"},{string="owner"}},
+ owner_protection=1,
+},
+["technic:silver_chest"] = {
+ name="wrench:technic_silver_chest",
+ lists={"main"},
+ metas={{string="infotext"},{string="formspec"}},
+},
+["technic:silver_locked_chest"] = {
+ name="wrench:technic_silver_locked_chest",
+ lists={"main"},
+ metas={{string="infotext"},{string="owner"},{string="formspec"}},
+ owner_protection=1,
+ },
+["technic:gold_chest"] = {
+ name="wrench:technic_gold_chest",
+ lists={"main"},
+ metas={{string="infotext"},{string="formspec"}},
+},
+["technic:gold_locked_chest"] = {
+ name="wrench:technic_gold_locked_chest",
+ lists={"main"},
+ metas={{string="infotext"},{string="owner"},{string="formspec"}},
+ owner_protection=1,
+},
+["technic:mithril_chest"] = {
+ name="wrench:technic_mithril_chest",
+ lists={"main"},
+ metas={{string="infotext"},{string="formspec"}},
+},
+["technic:mithril_locked_chest"] = {
+ name="wrench:technic_mithril_locked_chest",
+ lists={"main"},
+ metas={{string="infotext"},{string="owner"},{string="formspec"}},
+ owner_protection=1,
+},
+["technic:electric_furnace"] = {
+ name="wrench:technic_electric_furnace",
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="src_time"}},
+},
+["technic:electric_furnace_active"] = {
+ name="wrench:technic_electric_furnace_active",
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="src_time"}},
+ store_meta_always=1,
+},
+["technic:mv_electric_furnace"] = {
+ name="wrench:technic_mv_electric_furnace",
+ lists={"src", "dst", "upgrade1", "upgrade2"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="MV_EU_demand"},{int="MV_EU_input"},{int="tube_time"},{int="src_time"}},
+},
+["technic:mv_electric_furnace_active"] = {
+ name="wrench:technic_mv_electric_furnace_active",
+ lists={"src", "dst", "upgrade1", "upgrade2"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="MV_EU_demand"},{int="MV_EU_input"},{int="tube_time"},{int="src_time"}},
+ store_meta_always=1,
+},
+["technic:coal_alloy_furnace"] = {
+ name="wrench:technic_coal_alloy_furnace",
+ lists={"fuel", "src", "src2", "dst"},
+ metas={{string="infotext"},{float="fuel_totaltime"},{float="fuel_time"},{float="src_totaltime"},{float="src_time"}},
+},
+["technic:coal_alloy_furnace_active"] = {
+ name="wrench:technic_coal_alloy_furnace_active",
+ lists={"fuel", "src", "src2", "dst"},
+ metas={{string="infotext"},{float="fuel_totaltime"},{float="fuel_time"},{float="src_totaltime"},{float="src_time"}},
+ store_meta_always=1,
+},
+["technic:alloy_furnace"] = {
+ name="wrench:technic_alloy_furnace",
+ lists={"src", "src2", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="tube_time"},{int="src_time"}},
+},
+["technic:alloy_furnace_active"] = {
+ name="wrench:technic_alloy_furnace_active",
+ lists={"src", "src2", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="tube_time"},{int="src_time"}},
+ store_meta_always=1,
+},
+["technic:mv_alloy_furnace"] = {
+ name="wrench:technic_mv_alloy_furnace",
+ lists={"src", "src2", "dst", "upgrade1", "upgrade2"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="MV_EU_demand"},{int="MV_EU_input"},{int="tube_time"},{int="src_time"}},
+},
+["technic:mv_alloy_furnace_active"] = {
+ name="wrench:technic_mv_alloy_furnace_active",
+ lists={"src", "src2", "dst", "upgrade1", "upgrade2"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="MV_EU_demand"},{int="MV_EU_input"},{int="tube_time"},{int="src_time"}},
+ store_meta_always=1,
+},
+["technic:tool_workshop"] = {
+ name="wrench:technic_tool_workshop",
+ lists={"src"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"}},
+},
+["technic:grinder"] = {
+ name="wrench:technic_grinder",
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="src_time"}},
+},
+["technic:grinder_active"] = {
+ name="wrench:technic_grinder_active",
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="src_time"}},
+ store_meta_always=1,
+},
+["technic:mv_grinder"] = {
+ name="wrench:technic_mv_grinder",
+ lists={"src", "dst", "upgrade1", "upgrade2"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="MV_EU_demand"},{int="MV_EU_input"},{int="tube_time"},{int="src_time"}},
+},
+["technic:mv_grinder_active"] = {
+ name="wrench:technic_mv_grinder_active",
+ lists={"src", "dst", "upgrade1", "upgrade2"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="MV_EU_demand"},{int="MV_EU_input"},{int="tube_time"},{int="src_time"}},
+ store_meta_always=1,
+},
+["technic:extractor"] = {
+ name="wrench:technic_extractor",
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="src_time"}},
+},
+["technic:extractor_active"] = {
+ name="wrench:technic_extractor_active",
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="src_time"}},
+ store_meta_always=1,
+},
+["technic:compressor"] = {
+ name="wrench:technic_compressor",
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="src_time"}},
+},
+["technic:compressor_active"] = {
+ name="wrench:technic_compressor_active",
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="src_time"}},
+ store_meta_always=1,
+},
+["technic:cnc"] = {
+ name="wrench:technic_cnc",
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="src_time"},{string="cnc_product"}},
+},
+["technic:cnc_active"] = {
+ name="wrench:technic_cnc_active",
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="state"},{int="LV_EU_demand"},{int="LV_EU_input"},{int="src_time"},{string="cnc_product"}},
+ store_meta_always=1,
+},
+}
+local chest_mark_colors = {
+ {'_black','Black'},
+ {'_blue','Blue'},
+ {'_brown','Brown'},
+ {'_cyan','Cyan'},
+ {'_dark_green','Dark Green'},
+ {'_dark_grey','Dark Grey'},
+ {'_green','Green'},
+ {'_grey','Grey'},
+ {'_magenta','Magenta'},
+ {'_orange','Orange'},
+ {'_pink','Pink'},
+ {'_red','Red'},
+ {'_violet','Violet'},
+ {'_white','White'},
+ {'_yellow','Yellow'},
+ {'','None'}
+}
+for i=1,15,1 do
+ supported_nodes["technic:gold_chest"..chest_mark_colors[i][1]] = {
+ name="wrench:technic_gold_chest"..chest_mark_colors[i][1],
+ lists={"main"},
+ metas={{string="infotext"},{string="formspec"}},
+ }
+ supported_nodes["technic:gold_locked_chest"..chest_mark_colors[i][1]] = {
+ name="wrench:technic_gold_locked_chest"..chest_mark_colors[i][1],
+ lists={"main"},
+ metas={{string="infotext"},{string="owner"},{string="formspec"}},
+ owner_protection=1,
+ }
+end
+for i=0,8,1 do
+ if i==0 then i="" end
+ supported_nodes["technic:battery_box"..i] = {
+ name="wrench:technic_battery_box"..i,
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="LV_EU_demand"},{int="LV_EU_supply"},{int="LV_EU_input"},{int="internal_EU_charge"},{float="last_side_shown"}},
+ store_meta_always=1,
+ }
+ supported_nodes["technic:mv_battery_box"..i] = {
+ name="wrench:technic_mv_battery_box"..i,
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="MV_EU_demand"},{int="MV_EU_supply"},{int="MV_EU_input"},{int="internal_EU_charge"},{float="last_side_shown"}},
+ store_meta_always=1,
+ }
+ supported_nodes["technic:hv_battery_box"..i] = {
+ name="wrench:technic_hv_battery_box"..i,
+ lists={"src", "dst"},
+ metas={{string="infotext"},{string="formspec"},{int="HV_EU_demand"},{int="HV_EU_supply"},{int="HV_EU_input"},{int="internal_EU_charge"},{float="last_side_shown"}},
+ store_meta_always=1,
+ }
+end
+
+local function convert_to_original_name(name)
+ for key,value in pairs(supported_nodes) do
+ if name == value.name then return key end
+ end
+end
+
+for name,info in pairs(supported_nodes) do
+ local olddef = minetest.registered_nodes[name]
+ if olddef ~= nil then
+ local newdef = {}
+ for key,value in pairs(olddef) do
+ newdef[key] = value
+ end
+ newdef.stack_max = 1
+ newdef.description = newdef.description.." with items"
+ newdef.groups = {}
+ newdef.groups.not_in_creative_inventory = 1
+ newdef.on_construct = nil
+ newdef.on_destruct = nil
+ newdef.after_place_node = function(pos, placer, itemstack)
+ minetest.set_node(pos, {name = convert_to_original_name(itemstack:get_name()),
+ param2 = minetest.get_node(pos).param2})
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ local item_meta =itemstack:to_table()
+ local data = minetest.deserialize(item_meta["metadata"])
+ local lists = data.lists
+ for listname,list in pairs(lists) do
+ inv:set_list(listname, list)
+ end
+ local metas = data.metas
+ local temp = nil
+ for i=1,#metas,1 do
+ temp = metas[i]
+ if temp.string ~= nil then
+ meta:set_string(temp.string, temp.value)
+ end
+ if temp.int ~= nil then
+ meta:set_int(temp.int, temp.value)
+ end
+ if temp.float ~= nil then
+ meta:set_float(temp.float, temp.value)
+ end
+ end
+ end
+ minetest.register_node(info.name, newdef)
+ end
+end
+
+minetest.register_tool("wrench:wrench", {
+ description = "Wrench",
+ inventory_image = "technic_wrench.png",
+ tool_capabilities = {
+ full_punch_interval = 0.9,
+ max_drop_level = 0,
+ groupcaps = {
+ crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
+ snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
+ oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40}, uses=0, maxlevel=3}
+ },
+ damage_groups = {fleshy=1},
+ },
+ on_place = function(itemstack, placer, pointed_thing)
+ if not placer:is_player() then return end
+ local pos = pointed_thing.under
+ if pos == nil then return end
+ local name = minetest.get_node(pos).name
+ local support = supported_nodes[name]
+ if support == nil then return end
+ local meta = minetest.get_meta(pos)
+ if support.owner_protection ~= nil then
+ local owner = meta:get_string("owner")
+ if owner ~= nil then
+ if owner ~= placer:get_player_name() then
+ minetest.log("action", placer:get_player_name()..
+ " tried to destroy a locked chest belonging to "..
+ owner.." at "..
+ minetest.pos_to_string(pos))
+ return
+ end
+ end
+ end
+
+ local lists = support.lists
+ local inv = meta:get_inventory()
+ local empty = true
+ local metadata_str = {}
+ local list_str = {}
+ for i=1,#lists,1 do
+ if not inv:is_empty(lists[i]) then empty = false end
+ local list = inv:get_list(lists[i])
+ for j=1,#list,1 do
+ list[j] = list[j]:to_string()
+ end
+ list_str[lists[i]] = list
+ end
+ metadata_str.lists = list_str
+
+ local metas = support.metas
+ local meta_str = {}
+ for i=1,#metas,1 do
+ local temp = metas[i]
+ if temp.string ~= nil then
+ meta_str[i] = {string = temp.string, value = meta:get_string(temp.string)}
+ end
+ if temp.int ~= nil then
+ meta_str[i] = {int = temp.int, value = meta:get_int(temp.int)}
+ end
+ if temp.float ~= nil then
+ meta_str[i] = {float = temp.float, value = meta:get_float(temp.float)}
+ end
+ end
+ metadata_str.metas = meta_str
+
+ inv = placer:get_inventory()
+ local stack = {name = name}
+ if inv:room_for_item("main", stack) then
+ minetest.remove_node(pos)
+ itemstack:add_wear(65535/20)
+ if empty and #lists > 0 and support.store_meta_always == nil then
+ inv:add_item("main", stack)
+ else
+ stack.name = supported_nodes[name].name
+ stack.metadata = minetest.serialize(metadata_str)
+ inv:add_item("main", stack)
+ end
+ end
+ return itemstack
+ end,
+})
+
+minetest.register_craft({
+ output = "wrench:wrench",
+ recipe = {
+ {"default:steel_ingot","","default:steel_ingot"},
+ {"","default:steel_ingot",""},
+ {"","default:steel_ingot",""},
+ },
+})
diff --git a/wrench/textures/technic_wrench.png b/wrench/textures/technic_wrench.png
new file mode 100644
index 0000000..471b47e
--- /dev/null
+++ b/wrench/textures/technic_wrench.png
Binary files differ