Add node metadata storage and Technic machine support
authormetalstache <ashenkster69@gmail.com>
Thu, 1 Aug 2013 22:46:20 +0000 (18:46 -0400)
committermetalstache <ashenkster69@gmail.com>
Thu, 1 Aug 2013 22:46:20 +0000 (18:46 -0400)
wrench/init.lua

index 09503497cf2b52566ad02e71e4eb6fe59d2a36d0..a64a81afbfcd23290bbc45dacbd1dab705267f9d 100644 (file)
@@ -1,29 +1,44 @@
+--[""] = {name="", lists={}, metas={}},
 local supported_nodes = {
-["default:chest"] = {name="wrench:default_chest", lists={"main"}},
-["default:furnace"] = {name="wrench:default_furnace", lists={"fuel", "src", "dst"}},
-["default:furnace_active"] = {name="wrench:default_furnace", lists={"fuel", "src", "dst"}},
-["technic:iron_chest"] = {name="wrench:technic_iron_chest", lists={"main"}},
-["technic:iron_locked_chest"] = {name="wrench:technic_iron_locked_chest", lists={"main"}},
-["technic:copper_chest"] = {name="wrench:technic_copper_chest", lists={"main"}},
-["technic:copper_locked_chest"] = {name="wrench:technic_copper_locked_chest", lists={"main"}},
-["technic:silver_chest"] = {name="wrench:technic_silver_chest", lists={"main"}},
-["technic:silver_locked_chest"] = {name="wrench:technic_silver_locked_chest", lists={"main"}},
-["technic:gold_chest"] = {name="wrench:technic_gold_chest", lists={"main"}},
-["technic:gold_locked_chest"] = {name="wrench:technic_gold_locked_chest", lists={"main"}},
-["technic:mithril_chest"] = {name="wrench:technic_mithril_chest", lists={"main"}},
-["technic:mithril_locked_chest"] = {name="wrench:technic_mithril_locked_chest", lists={"main"}},
-["technic:electric_furnace"] = {name="wrench:technic_electric_furnace", lists={"src", "dst"}},
-["technic:electric_furnace_active"] = {name="wrench:technic_electric_furnace_active", lists={"src", "dst"}},
-["technic:mv_electric_furnace"] = {name="wrench:technic_mv_electric_furnace", lists={"src", "dst", "upgrade1", "upgrade2"}},
-["technic:mv_electric_furnace_active"] = {name="wrench:technic_mv_electric_furnace_active", lists={"src", "dst", "upgrade1", "upgrade2"}},
-["technic:coal_alloy_furnace"] = {name="wrench:technic_coal_alloy_furnace", lists={"fuel", "src", "src2", "dst"}},
-["technic:coal_alloy_furnace_active"] = {name="wrench:technic_coal_alloy_furnace_active", lists={"fuel", "src", "src2", "dst"}},
-["technic:alloy_furnace"] = {name="wrench:technic_alloy_furnace", lists={"src", "src2", "dst"}},
-["technic:alloy_furnace_active"] = {name="wrench:technic_alloy_furnace_active", lists={"src", "src2", "dst"}},
-["technic:mv_alloy_furnace"] = {name="wrench:technic_mv_alloy_furnace", lists={"src", "src2", "dst", "upgrade1", "upgrade2"}},
-["technic:mv_alloy_furnace_active"] = {name="wrench:technic_mv_alloy_furnace_active", lists={"src", "src2", "dst", "upgrade1", "upgrade2"}},
-["technic:grinder"] = {name="wrench:technic_grinder", lists={"src", "dst"}},
-["technic:grinder_active"] = {name="wrench:technic_grinder_active", lists={"src", "dst"}},
+["default:chest"] = {name="wrench:default_chest", lists={"main"}, metas={}},
+["default:chest_locked"] = {name="wrench:default_chest_locked", lists={"main"}, metas={{string="owner"},{string="infotext"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["technic:battery_box"] = {name="wrench:technic_battery_box", 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"}}},
+["technic:mv_battery_box"] = {name="wrench:technic_mv_battery_box", 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"}}},
+["technic:hv_battery_box"] = {name="wrench:technic_hv_battery_box", 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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
+["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"}}},
 }
 local chest_mark_colors = {
     {'_black','Black'},
@@ -44,8 +59,8 @@ local chest_mark_colors = {
     {'','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"}}
-       supported_nodes["technic:gold_locked_chest"..chest_mark_colors[i][1]] = {name="wrench:technic_gold_locked_chest"..chest_mark_colors[i][1], lists={"main"}}
+       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"}}}
 end
 
 local function convert_to_original_name(name)
@@ -54,36 +69,50 @@ local function convert_to_original_name(name)
        end
 end
 
-for name,_ in pairs(supported_nodes) do
+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
-               name = supported_nodes[name].name
                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)
-                       if olddef.after_place_node ~= nil then olddef.after_place_node(pos, placer, itemstack) end
-                       if not placer:is_player() then return end
                        local node = minetest.get_node(pos)
                        local item = convert_to_original_name(itemstack:get_name())
                        minetest.set_node(pos, {name = item, param2 = node.param2})
-                       local inv = minetest.get_meta(pos):get_inventory()
-                       local data = minetest.deserialize(itemstack:get_metadata())
-                       for listname,list in pairs(data) do
-                               inv:set_list(listname, list)
-                       end
+                       minetest.after(0.5, function(pos, placer, itemstack)
+                               local meta = minetest.get_meta(pos)
+                               local inv = meta:get_inventory()
+                               local data = minetest.deserialize(itemstack:get_metadata())
+                               local lists = data.lists
+                               for listname,list in pairs(lists) do
+                                       inv:set_list(listname, list)
+                               end
+                               local metas = data.metas
+                               for i=1,#metas,1 do
+                                       local 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, pos, placer, itemstack)
                end
-               minetest.register_node(name, newdef)
+               minetest.register_node(info.name, newdef)
        end
 end
 
-
 minetest.register_tool("wrench:wrench", {
        description = "Wrench",
        inventory_image = "technic_wrench.png",
@@ -104,19 +133,23 @@ minetest.register_tool("wrench:wrench", {
                local name = minetest.get_node(pos).name
                local support = supported_nodes[name]
                if support == nil then return end
-               if name:find("_locked_chest") ~= nil then
-                       local meta = minetest.get_meta(pos)
-                       if not has_locked_chest_privilege(meta, placer) then
-                               minetest.log("action", player:get_player_name()..
-                               " tried to destroy a locked chest belonging to "..
-                               meta:get_string("owner").." at "..
-                               minetest.pos_to_string(pos))
-                               return
+               local meta = minetest.get_meta(pos)
+               if name:find("_locked") ~= nil then
+                       if meta:get_string("owner") ~= nil then
+                               if meta:get_string("owner") ~= placer:get_player_name() then
+                                       minetest.log("action", placer:get_player_name()..
+                                       " tried to destroy a locked chest belonging to "..
+                                       meta:get_string("owner").." at "..
+                                       minetest.pos_to_string(pos))
+                                       return
+                               end
                        end
                end
+               
                local lists = support.lists
-               local inv = minetest.get_meta(pos):get_inventory()
+               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
@@ -126,17 +159,34 @@ minetest.register_tool("wrench:wrench", {
                        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 = {}
-               stack.name = name
+               local stack = {name = name}
                if inv:room_for_item("main", stack) then
                        minetest.remove_node(pos)
                        itemstack:add_wear(65535/20)
-                       if empty then
+                       if empty and #lists > 0 then
                                inv:add_item("main", stack)
                        else
                                stack.name = supported_nodes[name].name
-                               stack.metadata = minetest.serialize(list_str)
+                               stack.metadata = minetest.serialize(metadata_str)
                                inv:add_item("main", stack)
                        end
                end