local DEFAULT_BG_COLOR = "fc05e344" local DEFAULT_FG_COLOR = "fc059dd0" local DEFAULT_HL_COLOR = "fc059db0" sparktech = {} function sparktech.register_wrench(name, dictionary) local dig_stlye_alt = minetest.settings:get_bool("spark_dig_stlye_alt") local on_use = nil if dig_stlye_alt then on_use = function(one, player, pointedobject) if pointedobject == nil or pointedobject["type"] ~= "object" or pointedobject["ref"] == nil then return nil end local inventory = pointedobject["ref"]:get_wielded_item() player:get_inventory():add_item("main",pointedobject["ref"]:get_wielded_item()) end -- this should work, it doesnt, for some reason end local on_place = function(itemstack, placer, pointed_thing) if pointed_thing["type"] == "node" then local node = minetest.get_node(pointed_thing["under"]) if minetest.get_item_group(node["name"], "sparktech_techy") > 0 then local nodemeta = minetest.get_meta(pointed_thing["under"]) local item = ItemStack(node["name"]) if minetest.get_item_group(item:get_name(), "sparktech_energy_storeonbreak") > 0 then item:set_metadata(nodemeta:get_int("energy")) end minetest.remove_node(pointed_thing["under"]) sparktech.remove_node_from_net(pointed_thing.under, node) local node_inv = nodemeta:get_inventory() local inv = placer:get_inventory() local inventory_lists = node_inv:get_lists() for i, list in pairs(inventory_lists) do for n=1, #list do if inv:room_for_item("main", list[n]) then inv:add_item("main", list[n]) else minetest.item_drop(list[n], placer, pointed_thing["under"]) end end end if inv:room_for_item("main", item) then inv:add_item("main", item) else minetest.item_drop(item, placer, pointed_thing["under"]) end end end return itemstack end if dictionary["on_use"] == nil then dictionary["on_use"] = on_use end if dictionary["on_place"] == nil then dictionary["on_place"] = on_place end minetest.register_tool(name, dictionary) end function sparktech.makebar(texture, posx, posy, sizex, sizey, value, maxvalue, direction) -- direction = where to cut the texture either from thr right(0), below(1) left(2) or above (3) -- default is right(0) --texture texture name , no folder required --sizex the size to modify if direction == nil then direction = 0 end --direction is optional this way -- format : image[X,Y;W,H;texture_name] local ratio = value / maxvalue if direction == 0 then sizex = ratio * sizex elseif direction == 1 then sizey = ratio * sizey elseif direction == 2 then posx = posx + (sizex - (ratio * sizex)) sizex = ratio * sizex elseif direction == 3 then posy = posy + (sizey - (ratio * sizey)) sizey = ratio * sizey end return "image[" .. posx .. "," .. posy .. ";" .. sizex .. "," .. sizey .. ";" .. texture .. "]" end function verify_hexcolor_or_nil(s) if not s or #s ~= 8 or s:find("[^abcdefABCDEF0123456789]") then return nil end return s end function sparktech.add_inventory(size_x, size_y, formspec) -- pass an unfinished formspec with minimum size, this function adds an inventory local bg_color = verify_hexcolor_or_nil(minetest.settings:get("spark_gui_background")) or DEFAULT_BG_COLOR local fg_color = verify_hexcolor_or_nil(minetest.settings:get("spark_gui_foreground")) or DEFAULT_FG_COLOR local fg_highlight = verify_hexcolor_or_nil(minetest.settings:get("spark_gui_highlight")) or DEFAULT_HL_COLOR if not size_x or size_x < 13.9 then size_x = 13.9 end if not size_y or size_y < 0 then size_y = 0 end local l_formspec = "size[" .. tostring(size_x) .. "," .. (size_y + 4.8) .. "]" .. "real_coordinates[true]" .. "list[current_player;main;0," .. size_y .. ";8,3;8]" .. "list[current_player;main;0," .. (size_y + 3.8 ) .. ";8,1;]".. "list[current_player;craft;10.4," .. size_y .. ";3,3]" .. "list[current_player;craftpreview;10.4," .. (size_y + 3.8) .. ";1,1]" .. "listcolors[#" .. fg_color .. ";#" .. fg_highlight .. "]" .. "bgcolor[#" .. bg_color .. ";false]" if not formspec then formspec = "" end l_formspec = l_formspec .. formspec return l_formspec end