mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-30 17:37:32 +01:00
Rewrite wrench. INCOMPATIBLE WITH OLD ITEMS
You must place all of your picked up nodes before updating and pick them back up after.
This commit is contained in:
parent
0d32e05b52
commit
731a82169b
458
wrench/init.lua
458
wrench/init.lua
@ -1,286 +1,60 @@
|
||||
--[[
|
||||
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)
|
||||
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.
|
||||
--]]
|
||||
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
|
||||
wrench = {}
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
dofile(modpath.."/support.lua")
|
||||
dofile(modpath.."/technic.lua")
|
||||
|
||||
local function get_meta_type(name, metaname)
|
||||
local def = wrench.registered_nodes[name]
|
||||
if not def or not def.metas or not def.metas[metaname] then
|
||||
return nil
|
||||
end
|
||||
return def.metas[metaname]
|
||||
end
|
||||
|
||||
for name,info in pairs(supported_nodes) do
|
||||
local function get_pickup_name(name)
|
||||
return "wrench:picked_up_"..(name:gsub(":", "_"))
|
||||
end
|
||||
|
||||
local function restore(pos, placer, itemstack)
|
||||
local name = itemstack:get_name()
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local data = minetest.deserialize(itemstack:get_metadata())
|
||||
minetest.set_node(pos, {name = data.name})
|
||||
local lists = data.lists
|
||||
for listname, list in pairs(lists) do
|
||||
inv:set_list(listname, list)
|
||||
end
|
||||
for name, value in pairs(data.metas) do
|
||||
local meta_type = get_meta_type(data.name, name)
|
||||
if meta_type == wrench.META_TYPE_INT then
|
||||
meta:set_int(name, value)
|
||||
elseif meta_type == wrench.META_TYPE_FLOAT then
|
||||
meta:set_float(name, value)
|
||||
elseif meta_type == wrench.META_TYPE_STRING then
|
||||
meta:set_string(name, value)
|
||||
end
|
||||
end
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end
|
||||
|
||||
for name, info in pairs(wrench.registered_nodes) do
|
||||
local olddef = minetest.registered_nodes[name]
|
||||
if olddef ~= nil then
|
||||
if olddef then
|
||||
local newdef = {}
|
||||
for key,value in pairs(olddef) do
|
||||
for key, value in pairs(olddef) do
|
||||
newdef[key] = value
|
||||
end
|
||||
newdef.stack_max = 1
|
||||
@ -289,33 +63,8 @@ for name,info in pairs(supported_nodes) do
|
||||
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)
|
||||
newdef.after_place_node = restore
|
||||
minetest.register_node(":"..get_pickup_name(name), newdef)
|
||||
end
|
||||
end
|
||||
|
||||
@ -328,75 +77,76 @@ minetest.register_tool("wrench:wrench", {
|
||||
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}
|
||||
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
|
||||
if not placer or not pos then
|
||||
return
|
||||
end
|
||||
if minetest.is_protected(pos, placer:get_player_name()) then
|
||||
minetest.record_protection_violation(pos, placer:get_player_name())
|
||||
return
|
||||
end
|
||||
local name = minetest.get_node(pos).name
|
||||
local support = supported_nodes[name]
|
||||
if support == nil then return end
|
||||
local def = wrench.registered_nodes[name]
|
||||
if not def then
|
||||
return
|
||||
end
|
||||
|
||||
local stack = ItemStack(get_pickup_name(name))
|
||||
local player_inv = placer:get_inventory()
|
||||
if not player_inv:room_for_item("main", stack) then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
if support.owner_protection ~= nil then
|
||||
if def.owned 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 "..
|
||||
if owner and owner ~= placer:get_player_name() then
|
||||
minetest.log("action", placer:get_player_name()..
|
||||
" tried to pick up a owned node belonging to "..
|
||||
owner.." at "..
|
||||
minetest.pos_to_string(pos))
|
||||
return
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local metadata = {}
|
||||
metadata.name = name
|
||||
|
||||
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()
|
||||
local lists = {}
|
||||
for _, listname in pairs(def.lists or {}) do
|
||||
if not inv:is_empty(listname) then
|
||||
empty = false
|
||||
end
|
||||
list_str[lists[i]] = list
|
||||
local list = inv:get_list(listname)
|
||||
for i, stack in pairs(list) do
|
||||
list[i] = stack:to_string()
|
||||
end
|
||||
lists[listname] = list
|
||||
end
|
||||
metadata_str.lists = list_str
|
||||
metadata.lists = lists
|
||||
|
||||
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)}
|
||||
local metas = {}
|
||||
for name, meta_type in pairs(def.metas or {}) do
|
||||
if meta_type == wrench.META_TYPE_INT then
|
||||
metas[name] = meta:get_int(name)
|
||||
elseif meta_type == wrench.META_TYPE_FLOAT then
|
||||
metas[name] = meta:get_float(name)
|
||||
elseif meta_type == wrench.META_TYPE_STRING then
|
||||
metas[name] = meta:get_string(name)
|
||||
end
|
||||
end
|
||||
metadata_str.metas = meta_str
|
||||
metadata.metas = metas
|
||||
|
||||
local player_inv = placer:get_inventory()
|
||||
local stack = {name = name}
|
||||
if player_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
|
||||
player_inv:add_item("main", stack)
|
||||
else
|
||||
stack.name = supported_nodes[name].name
|
||||
stack.metadata = minetest.serialize(metadata_str)
|
||||
player_inv:add_item("main", stack)
|
||||
end
|
||||
end
|
||||
stack:set_metadata(minetest.serialize(metadata))
|
||||
minetest.remove_node(pos)
|
||||
itemstack:add_wear(65535 / 20)
|
||||
player_inv:add_item("main", stack)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
@ -404,8 +154,8 @@ minetest.register_tool("wrench:wrench", {
|
||||
minetest.register_craft({
|
||||
output = "wrench:wrench",
|
||||
recipe = {
|
||||
{"default:steel_ingot","","default:steel_ingot"},
|
||||
{"","default:steel_ingot",""},
|
||||
{"","default:steel_ingot",""},
|
||||
{"default:steel_ingot", "", "default:steel_ingot"},
|
||||
{"", "default:steel_ingot", ""},
|
||||
{"", "default:steel_ingot", ""},
|
||||
},
|
||||
})
|
||||
|
71
wrench/support.lua
Normal file
71
wrench/support.lua
Normal file
@ -0,0 +1,71 @@
|
||||
--[[
|
||||
supported_nodes
|
||||
This table stores all nodes that are compatible with the wrench mod.
|
||||
Syntax:
|
||||
[<node name>] = {
|
||||
lists = {"<inventory list name>"},
|
||||
metas = {["<meta name>"] = STRING,
|
||||
["<meta name>"] = INT,
|
||||
["<meta name>"] = FLOAT},
|
||||
owned = true,
|
||||
store_meta_always = true,
|
||||
}
|
||||
owned - 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)
|
||||
--]]
|
||||
|
||||
wrench.META_TYPE_INT = 0
|
||||
wrench.META_TYPE_FLOAT = 1
|
||||
wrench.META_TYPE_STRING = 2
|
||||
|
||||
local INT, STRING, FLOAT =
|
||||
wrench.META_TYPE_INT,
|
||||
wrench.META_TYPE_STRING,
|
||||
wrench.META_TYPE_FLOAT
|
||||
|
||||
wrench.registered_nodes = {
|
||||
["default:chest"] = {
|
||||
lists = {"main"},
|
||||
},
|
||||
["default:chest_locked"] = {
|
||||
lists = {"main"},
|
||||
metas = {owner = STRING,
|
||||
infotext = STRING},
|
||||
owned = true,
|
||||
},
|
||||
["default:furnace"] = {
|
||||
lists = {"fuel", "src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
fuel_totaltime = FLOAT,
|
||||
fuel_time = FLOAT,
|
||||
src_totaltime = FLOAT,
|
||||
src_time = FLOAT},
|
||||
},
|
||||
["default:furnace_active"] = {
|
||||
lists = {"fuel", "src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
fuel_totaltime = FLOAT,
|
||||
fuel_time = FLOAT,
|
||||
src_totaltime = FLOAT,
|
||||
src_time = FLOAT},
|
||||
store_meta_always = true,
|
||||
},
|
||||
["default:sign_wall"] = {
|
||||
metas = {infotext = STRING,
|
||||
text = STRING},
|
||||
},
|
||||
}
|
||||
|
||||
function wrench:original_name(name)
|
||||
for key, value in pairs(self.registered_nodes) do
|
||||
if name == value.name then
|
||||
return key
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function wrench:register_node(name, def)
|
||||
self.registered_nodes[name] = def
|
||||
end
|
||||
|
286
wrench/technic.lua
Normal file
286
wrench/technic.lua
Normal file
@ -0,0 +1,286 @@
|
||||
|
||||
local INT, STRING, FLOAT =
|
||||
wrench.META_TYPE_INT,
|
||||
wrench.META_TYPE_STRING,
|
||||
wrench.META_TYPE_FLOAT
|
||||
|
||||
wrench:register_node("technic:iron_chest", {
|
||||
lists = {"main"},
|
||||
})
|
||||
wrench:register_node("technic:iron_locked_chest", {
|
||||
lists = {"main"},
|
||||
metas = {infotext = STRING,
|
||||
owner = STRING},
|
||||
owned = true,
|
||||
})
|
||||
wrench:register_node("technic:copper_chest", {
|
||||
lists = {"main"},
|
||||
})
|
||||
wrench:register_node("technic:copper_locked_chest", {
|
||||
lists = {"main"},
|
||||
metas = {infotext = STRING,
|
||||
owner = STRING},
|
||||
owned = true,
|
||||
})
|
||||
wrench:register_node("technic:silver_chest", {
|
||||
lists = {"main"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING},
|
||||
})
|
||||
wrench:register_node("technic:silver_locked_chest", {
|
||||
lists = {"main"},
|
||||
metas = {infotext = STRING,
|
||||
owner = STRING,
|
||||
formspec = STRING},
|
||||
owned = true,
|
||||
})
|
||||
wrench:register_node("technic:gold_chest", {
|
||||
lists = {"main"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING},
|
||||
})
|
||||
wrench:register_node("technic:gold_locked_chest", {
|
||||
lists = {"main"},
|
||||
metas = {infotext = STRING,
|
||||
owner = STRING,
|
||||
formspec = STRING},
|
||||
owned = true,
|
||||
})
|
||||
wrench:register_node("technic:mithril_chest", {
|
||||
lists = {"main"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING},
|
||||
})
|
||||
wrench:register_node("technic:mithril_locked_chest", {
|
||||
lists = {"main"},
|
||||
metas = {infotext = STRING,
|
||||
owner = STRING,
|
||||
formspec = STRING},
|
||||
owned = true,
|
||||
})
|
||||
wrench:register_node("technic:lv_electric_furnace", {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:lv_electric_furnace_active", {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:mv_electric_furnace", {
|
||||
lists = {"src", "dst", "upgrade1", "upgrade2"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
MV_EU_demand = INT,
|
||||
MV_EU_input = INT,
|
||||
tube_time = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:mv_electric_furnace_active", {
|
||||
lists = {"src", "dst", "upgrade1", "upgrade2"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
MV_EU_demand = INT,
|
||||
MV_EU_input = INT,
|
||||
tube_time = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:coal_alloy_furnace", {
|
||||
lists = {"fuel", "src", "src2", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
fuel_totaltime = FLOAT,
|
||||
fuel_time = FLOAT,
|
||||
src_totaltime = FLOAT,
|
||||
src_time = FLOAT},
|
||||
})
|
||||
wrench:register_node("technic:coal_alloy_furnace_active", {
|
||||
lists = {"fuel", "src", "src2", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
fuel_totaltime = FLOAT,
|
||||
fuel_time = FLOAT,
|
||||
src_totaltime = FLOAT,
|
||||
src_time = FLOAT},
|
||||
})
|
||||
wrench:register_node("technic:alloy_furnace", {
|
||||
lists = {"src", "src2", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
tube_time = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:alloy_furnace_active", {
|
||||
lists = {"src", "src2", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
tube_time = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:mv_alloy_furnace", {
|
||||
lists = {"src", "src2", "dst", "upgrade1", "upgrade2"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
MV_EU_demand = INT,
|
||||
MV_EU_input = INT,
|
||||
tube_time = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:mv_alloy_furnace_active", {
|
||||
lists = {"src", "src2", "dst", "upgrade1", "upgrade2"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
MV_EU_demand = INT,
|
||||
MV_EU_input = INT,
|
||||
tube_time = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:tool_workshop", {
|
||||
lists = {"src"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT},
|
||||
})
|
||||
wrench:register_node("technic:grinder", {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:grinder_active", {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:mv_grinder", {
|
||||
lists = {"src", "dst", "upgrade1", "upgrade2"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
MV_EU_demand = INT,
|
||||
MV_EU_input = INT,
|
||||
tube_time = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:mv_grinder_active", {
|
||||
lists = {"src", "dst", "upgrade1", "upgrade2"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
MV_EU_demand = INT,
|
||||
MV_EU_input = INT,
|
||||
tube_time = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:extractor", {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:extractor_active", {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:compressor", {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:compressor_active", {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
src_time = INT},
|
||||
})
|
||||
wrench:register_node("technic:cnc", {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
src_time = INT,
|
||||
cnc_product = STRING},
|
||||
})
|
||||
wrench:register_node("technic:cnc_active", {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
LV_EU_demand = INT,
|
||||
LV_EU_input = INT,
|
||||
src_time = INT,
|
||||
cnc_product = STRING},
|
||||
})
|
||||
|
||||
|
||||
local chest_mark_colors = {
|
||||
'_black',
|
||||
'_blue',
|
||||
'_brown',
|
||||
'_cyan',
|
||||
'_dark_green',
|
||||
'_dark_grey',
|
||||
'_green',
|
||||
'_grey',
|
||||
'_magenta',
|
||||
'_orange',
|
||||
'_pink',
|
||||
'_red',
|
||||
'_violet',
|
||||
'_white',
|
||||
'_yellow',
|
||||
'',
|
||||
}
|
||||
|
||||
for i = 1, 15 do
|
||||
wrench:register_node("technic:gold_chest"..chest_mark_colors[i], {
|
||||
lists = {"main"},
|
||||
metas = {infotext = STRING,formspec = STRING},
|
||||
})
|
||||
wrench:register_node("technic:gold_locked_chest"..chest_mark_colors[i], {
|
||||
lists = {"main"},
|
||||
metas = {infotext = STRING,owner = STRING,formspec = STRING},
|
||||
owned = true,
|
||||
})
|
||||
end
|
||||
|
||||
for tier, _ in pairs(technic.machines) do
|
||||
local ltier = tier:lower()
|
||||
for i = 0, 8 do
|
||||
wrench:register_node("technic:"..ltier.."_battery_box"..i, {
|
||||
lists = {"src", "dst"},
|
||||
metas = {infotext = STRING,
|
||||
formspec = STRING,
|
||||
[tier.."_EU_demand"] = INT,
|
||||
[tier.."_EU_supply"] = INT,
|
||||
[tier.."_EU_input"] = INT,
|
||||
internal_EU_charge = INT,
|
||||
last_side_shown = INT},
|
||||
})
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user