kpoppel
2013-05-06 d98405f1299c8d73956b7ff560515d4a5c35529f
Merge branch 'master' of https://github.com/kpoppel/technic
11 files added
21 files modified
2 files deleted
1214 ■■■■ changed files
.gitignore 4 ●●●● patch | view | raw | blame | history
aaa_recipeshook/depends.txt 1 ●●●● patch | view | raw | blame | history
aaa_recipeshook/init.lua 29 ●●●●● patch | view | raw | blame | history
framedglass/depends.txt 1 ●●●● patch | view | raw | blame | history
framedglass/init.lua 77 ●●●●● patch | view | raw | blame | history
framedglass/textures/framedglass_glass_face_clean.png patch | view | raw | blame | history
framedglass/textures/framedglass_glass_face_streaks.png patch | view | raw | blame | history
framedglass/textures/framedglass_steel_frame.png patch | view | raw | blame | history
framedglass/textures/framedglass_wooden_frame.png patch | view | raw | blame | history
item_drop/depends.txt 1 ●●●● patch | view | raw | blame | history
item_drop/init.lua 159 ●●●●● patch | view | raw | blame | history
item_drop/item_entity.lua 92 ●●●● patch | view | raw | blame | history
item_drop/item_entity_old.lua 126 ●●●●● patch | view | raw | blame | history
item_drop/sounds/item_drop_pickup.1.ogg patch | view | raw | blame | history
item_drop/sounds/item_drop_pickup.2.ogg patch | view | raw | blame | history
item_drop/sounds/item_drop_pickup.3.ogg patch | view | raw | blame | history
item_drop/sounds/item_drop_pickup.4.ogg patch | view | raw | blame | history
technic/alloy_furnaces_commons.lua 10 ●●●●● patch | view | raw | blame | history
technic/config.lua 49 ●●●● patch | view | raw | blame | history
technic/depends.txt 2 ●●●●● patch | view | raw | blame | history
technic/geothermal.lua 4 ●●●● patch | view | raw | blame | history
technic/grinder.lua 9 ●●●●● patch | view | raw | blame | history
technic/mining_drill.lua 11 ●●●● patch | view | raw | blame | history
technic/rubber.lua 26 ●●●● patch | view | raw | blame | history
technic/sonic_screwdriver.lua 2 ●●● patch | view | raw | blame | history
technic/textures/technic_hv_cable.png patch | view | raw | blame | history
technic/textures/technic_hv_cable_wield.png patch | view | raw | blame | history
technic/textures/technic_mv_cable_wield.png patch | view | raw | blame | history
technic/wires_hv.lua 398 ●●●●● patch | view | raw | blame | history
technic_worldgen/depends.txt 1 ●●●● patch | view | raw | blame | history
technic_worldgen/nodes.lua 2 ●●●●● patch | view | raw | blame | history
technic_worldgen/oregen.lua 4 ●●●● patch | view | raw | blame | history
unified_inventory/api.lua 205 ●●●●● patch | view | raw | blame | history
unified_inventory/depends.txt 1 ●●●● patch | view | raw | blame | history
.gitignore
@@ -161,3 +161,7 @@
# Mac crap
.DS_Store
#gedit backup files
*~
aaa_recipeshook/depends.txt
File was deleted
aaa_recipeshook/init.lua
File was deleted
framedglass/depends.txt
New file
@@ -0,0 +1 @@
default
framedglass/init.lua
New file
@@ -0,0 +1,77 @@
-- Minetest 0.4.5 mod: framedglass
minetest.register_craft({
    output = 'framedglass:wooden_framed_glass 4',
    recipe = {
        {'default:glass', 'default:glass', 'default:stick'},
        {'default:glass', 'default:glass', 'default:stick'},
        {'default:stick', 'default:stick', ''},
    }
})
minetest.register_craft({
    output = 'framedglass:steel_framed_glass 4',
    recipe = {
        {'default:glass', 'default:glass', 'default:steel_ingot'},
        {'default:glass', 'default:glass', 'default:steel_ingot'},
        {'default:steel_ingot', 'default:steel_ingot', ''},
    }
})
minetest.register_craft({
    output = 'framedglass:wooden_framed_obsidian_glass 4',
    recipe = {
        {'default:obsidian_glass', 'default:obsidian_glass', 'default:stick'},
        {'default:obsidian_glass', 'default:obsidian_glass', 'default:stick'},
        {'default:stick', 'default:stick', ''},
    }
})
minetest.register_craft({
    output = 'framedglass:steel_framed_obsidian_glass 4',
    recipe = {
        {'default:obsidian_glass', 'default:obsidian_glass', 'default:steel_ingot'},
        {'default:obsidian_glass', 'default:obsidian_glass', 'default:steel_ingot'},
        {'default:steel_ingot', 'default:steel_ingot', ''},
    }
})
minetest.register_node("framedglass:wooden_framed_glass", {
    description = "Wooden-framed Glass",
    drawtype = "glasslike_framed",
    tiles = {"framedglass_wooden_frame.png","framedglass_glass_face_streaks.png"},
    paramtype = "light",
    sunlight_propagates = true,
    groups = {cracky=3,oddly_breakable_by_hand=3},
    sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("framedglass:steel_framed_glass", {
    description = "Steel-framed Glass",
    drawtype = "glasslike_framed",
    tiles = {"framedglass_steel_frame.png","framedglass_glass_face_streaks.png"},
    paramtype = "light",
    sunlight_propagates = true,
    groups = {cracky=3,oddly_breakable_by_hand=3},
    sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("framedglass:wooden_framed_obsidian_glass", {
    description = "Wooden-framed Obsidian Glass",
    drawtype = "glasslike_framed",
    tiles = {"framedglass_wooden_frame.png","framedglass_glass_face_clean.png"},
    paramtype = "light",
    sunlight_propagates = true,
    groups = {cracky=3,oddly_breakable_by_hand=3},
    sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("framedglass:steel_framed_obsidian_glass", {
    description = "Steel-framed Obsidian Glass",
    drawtype = "glasslike_framed",
    tiles = {"framedglass_steel_frame.png","framedglass_glass_face_clean.png"},
    paramtype = "light",
    sunlight_propagates = true,
    groups = {cracky=3,oddly_breakable_by_hand=3},
    sounds = default.node_sound_glass_defaults(),
})
framedglass/textures/framedglass_glass_face_clean.png
framedglass/textures/framedglass_glass_face_streaks.png
framedglass/textures/framedglass_steel_frame.png
framedglass/textures/framedglass_wooden_frame.png
item_drop/depends.txt
New file
@@ -0,0 +1 @@
technic
item_drop/init.lua
@@ -1,109 +1,72 @@
dofile(minetest.get_modpath("item_drop").."/item_entity.lua")
time_pick = 3
minetest.register_globalstep(function(dtime)
    for _,player in ipairs(minetest.get_connected_players()) do
        local pos = player:getpos()
        pos.y = pos.y+0.5
        local inv = player:get_inventory()
        for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do
            if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
                if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
                    if object:get_luaentity().timer > time_pick then
                        inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
                        if object:get_luaentity().itemstring ~= "" then
                            minetest.sound_play("item_drop_pickup", {
                                to_player = player:get_player_name(),
                            })
                        end
                        object:get_luaentity().itemstring = ""
                        object:remove()
                    end
                end
            end
        end
        for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 3)) do
            if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
                --print(dump(object:getpos().y-player:getpos().y))
                if object:getpos().y-player:getpos().y > 0 then
                    if object:get_luaentity().collect then
                        if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
                            if object:get_luaentity().timer > time_pick then
                                local pos1 = pos
                                pos1.y = pos1.y+0.2
                                local pos2 = object:getpos()
                                local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
                                vec.x = vec.x*3
                                vec.y = vec.y*3
                                vec.z = vec.z*3
                                object:setvelocity(vec)
                                minetest.after(1, function(args)
                                    local lua = object:get_luaentity()
                                    if object == nil or lua == nil or lua.itemstring == nil then
                                        return
                                    end
                                    if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
                                        inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
                                        if object:get_luaentity().itemstring ~= "" then
                                            minetest.sound_play("item_drop_pickup", {
                                                to_player = player:get_player_name(),
                                            })
                                        end
                                        object:get_luaentity().itemstring = ""
                                        object:remove()
                                    else
                                        object:setvelocity({x=0,y=0,z=0})
                                    end
                                end, {player, object})
                            end
                        end
                    else
                        minetest.after(0.5, function(entity)
                            entity.collect = true
                        end, object:get_luaentity())
                    end
                end
            end
        end
    end
end)
function minetest.handle_node_drops(pos, drops, digger)
    for _,item in ipairs(drops) do
        local count, name
        if type(item) == "string" then
            count = 1
            name = item
        else
            count = item:get_count()
            name = item:get_name()
if technic.config:getBool("enable_item_pickup") then
    minetest.register_globalstep(function(dtime)
        for _,player in ipairs(minetest.get_connected_players()) do
            local pos = player:getpos()
            pos.y = pos.y+0.5
            local inv = player:get_inventory()
            for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 2)) do
                if not object:is_player() and object:get_luaentity() then
                    local obj=object:get_luaentity()
                    if obj.name == "__builtin:item" then
                        if inv:room_for_item("main", ItemStack(obj.itemstring)) then
                            if obj.timer > time_pick then
                                inv:add_item("main", ItemStack(obj.itemstring))
                                if obj.itemstring ~= "" then
                                    minetest.sound_play("item_drop_pickup",{pos = pos, gain = 1.0, max_hear_distance = 10})
                                end
                                if object:get_luaentity() then
                                    object:get_luaentity().itemstring = ""
                                    object:remove()
                                end
                            end
                        end
                    end
                end
            end
        end
        for i=1,count do
            local obj = minetest.env:add_item(pos, name)
            if obj ~= nil then
                obj:get_luaentity().collect = true
                local x = math.random(1, 5)
                if math.random(1,2) == 1 then
                    x = -x
                end
                local z = math.random(1, 5)
                if math.random(1,2) == 1 then
                    z = -z
                end
                obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z})
                obj:get_luaentity().timer = time_pick
                -- FIXME this doesnt work for deactiveted objects
                if minetest.setting_get("remove_items") and tonumber(minetest.setting_get("remove_items")) then
                    minetest.after(tonumber(minetest.setting_get("remove_items")), function(obj)
                        obj:remove()
                    end, obj)
    end)
end
if technic.config:getBool("enable_item_drop") then
    function minetest.handle_node_drops(pos, drops, digger)
        for _,item in ipairs(drops) do
            local count, name
            if type(item) == "string" then
                count = 1
                name = item
            else
                count = item:get_count()
                name = item:get_name()
            end
            for i=1,count do
                local obj = minetest.env:add_item(pos, name)
                if obj ~= nil then
                    obj:get_luaentity().collect = true
                    local x = math.random(1, 5)
                    if math.random(1,2) == 1 then
                        x = -x
                    end
                    local z = math.random(1, 5)
                    if math.random(1,2) == 1 then
                        z = -z
                    end
                    obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z})
                    obj:get_luaentity().timer = time_pick
                    -- FIXME this doesnt work for deactiveted objects
                    if minetest.setting_get("remove_items") and tonumber(minetest.setting_get("remove_items")) then
                        minetest.after(tonumber(minetest.setting_get("remove_items")), function(obj)
                            obj:remove()
                        end, obj)
                    end
                end
            end
        end
    end
end
--[[
minetest.register_on_dieplayer(function(name, pos)
    local inv = name:get_inventory()
@@ -137,4 +100,4 @@
    end
end)
]]--
print("DROPS LOADED!")
print("DROPS LOADED!")
item_drop/item_entity.lua
@@ -24,7 +24,7 @@
    itemstring = '',
    physical_state = true,
    timer = 0,
    set_item = function(self, itemstring)
        self.itemstring = itemstring
        local stack = ItemStack(itemstring)
@@ -62,15 +62,21 @@
        return minetest.serialize({
            itemstring = self.itemstring,
            always_collect = self.always_collect,
            timer = self.timer,
        })
    end,
    on_activate = function(self, staticdata)
    on_activate = function(self, staticdata, dtime_s)
        if string.sub(staticdata, 1, string.len("return")) == "return" then
            local data = minetest.deserialize(staticdata)
            if data and type(data) == "table" then
                self.itemstring = data.itemstring
                self.always_collect = data.always_collect
                self.timer = data.timer
                if not self.timer then
                    self.timer = 0
                end
                self.timer = self.timer+dtime_s
            end
        else
            self.itemstring = staticdata
@@ -80,18 +86,79 @@
        self.object:setacceleration({x=0, y=-10, z=0})
        self:set_item(self.itemstring)
    end,
    on_step = function(self, dtime)
        local time = minetest.setting_get("remove_items")
        if not time then
            time = 300
        end
        if not self.timer then
            self.timer = 0
        end
        self.timer = self.timer + dtime
        if (self.timer > 300) then
        if time ~= 0 and (self.timer > time) then
            self.object:remove()
        end
        local p = self.object:getpos()
        local name = minetest.env:get_node(p).name
        if name == "default:lava_flowing" or name == "default:lava_source" then
            minetest.sound_play("builtin_item_lava", {pos=self.object:getpos(),gain = 1.0, max_hear_distance = 10})
            self.object:remove()
            return
        end
        if minetest.registered_nodes[name].liquidtype == "flowing" then
            get_flowing_dir = function(self)
                local pos = self.object:getpos()
                local param2 = minetest.env:get_node(pos).param2
                for i,d in ipairs({-1, 1, -1, 1}) do
                    if i<3 then
                        pos.x = pos.x+d
                    else
                        pos.z = pos.z+d
                    end
                    local name = minetest.env:get_node(pos).name
                    local par2 = minetest.env:get_node(pos).param2
                    if name == "default:water_flowing" and par2 < param2 then
                        return pos
                    end
                    if i<3 then
                        pos.x = pos.x-d
                    else
                        pos.z = pos.z-d
                    end
                end
            end
            local vec = get_flowing_dir(self)
            if vec then
                local v = self.object:getvelocity()
                if vec and vec.x-p.x > 0 then
                    self.object:setvelocity({x=0.5,y=v.y,z=0})
                elseif vec and vec.x-p.x < 0 then
                    self.object:setvelocity({x=-0.5,y=v.y,z=0})
                elseif vec and vec.z-p.z > 0 then
                    self.object:setvelocity({x=0,y=v.y,z=0.5})
                elseif vec and vec.z-p.z < 0 then
                    self.object:setvelocity({x=0,y=v.y,z=-0.5})
                end
                self.object:setacceleration({x=0, y=-10, z=0})
                self.physical_state = true
                self.object:set_properties({
                    physical = true
                })
                return
            end
        end
        p.y = p.y - 0.3
        local nn = minetest.env:get_node(p).name
        -- If node is not registered or node is walkably solid and resting on nodebox
        local v = self.object:getvelocity()
        if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable and v.y == 0 then
        -- If node is not registered or node is walkably solid
        if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable then
            if self.physical_state then
                self.object:setvelocity({x=0,y=0,z=0})
                self.object:setacceleration({x=0, y=0, z=0})
@@ -114,13 +181,12 @@
    on_punch = function(self, hitter)
        if self.itemstring ~= '' then
            local left = hitter:get_inventory():add_item("main", self.itemstring)
            if not left:is_empty() then
                self.itemstring = left:to_string()
                return
            end
            hitter:get_inventory():add_item("main", self.itemstring)
        end
        self.object:remove()
    end,
})
print("ITEM ENTITY LOADED")
if minetest.setting_get("log_mods") then
    minetest.log("action", "builtin_item loaded")
end
item_drop/item_entity_old.lua
New file
@@ -0,0 +1,126 @@
-- Minetest: builtin/item_entity.lua
function minetest.spawn_item(pos, item)
    -- Take item in any format
    local stack = ItemStack(item)
    local obj = minetest.env:add_entity(pos, "__builtin:item")
    obj:get_luaentity():set_item(stack:to_string())
    return obj
end
minetest.register_entity(":__builtin:item", {
    initial_properties = {
        hp_max = 1,
        physical = true,
        collisionbox = {-0.17,-0.17,-0.17, 0.17,0.17,0.17},
        visual = "sprite",
        visual_size = {x=0.5, y=0.5},
        textures = {""},
        spritediv = {x=1, y=1},
        initial_sprite_basepos = {x=0, y=0},
        is_visible = false,
    },
    itemstring = '',
    physical_state = true,
    timer = 0,
    set_item = function(self, itemstring)
        self.itemstring = itemstring
        local stack = ItemStack(itemstring)
        local itemtable = stack:to_table()
        local itemname = nil
        if itemtable then
            itemname = stack:to_table().name
        end
        local item_texture = nil
        local item_type = ""
        if minetest.registered_items[itemname] then
            item_texture = minetest.registered_items[itemname].inventory_image
            item_type = minetest.registered_items[itemname].type
        end
        prop = {
            is_visible = true,
            visual = "sprite",
            textures = {"unknown_item.png"}
        }
        if item_texture and item_texture ~= "" then
            prop.visual = "sprite"
            prop.textures = {item_texture}
            prop.visual_size = {x=0.50, y=0.50}
        else
            prop.visual = "wielditem"
            prop.textures = {itemname}
            prop.visual_size = {x=0.20, y=0.20}
            prop.automatic_rotate = math.pi * 0.25
        end
        self.object:set_properties(prop)
    end,
    get_staticdata = function(self)
        --return self.itemstring
        return minetest.serialize({
            itemstring = self.itemstring,
            always_collect = self.always_collect,
        })
    end,
    on_activate = function(self, staticdata)
        if string.sub(staticdata, 1, string.len("return")) == "return" then
            local data = minetest.deserialize(staticdata)
            if data and type(data) == "table" then
                self.itemstring = data.itemstring
                self.always_collect = data.always_collect
            end
        else
            self.itemstring = staticdata
        end
        self.object:set_armor_groups({immortal=1})
        self.object:setvelocity({x=0, y=2, z=0})
        self.object:setacceleration({x=0, y=-10, z=0})
        self:set_item(self.itemstring)
    end,
    on_step = function(self, dtime)
        self.timer = self.timer + dtime
        if (self.timer > 300) then
            self.object:remove()
        end
        local p = self.object:getpos()
        p.y = p.y - 0.3
        local nn = minetest.env:get_node(p).name
        -- If node is not registered or node is walkably solid and resting on nodebox
        local v = self.object:getvelocity()
        if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable and v.y == 0 then
            if self.physical_state then
                self.object:setvelocity({x=0,y=0,z=0})
                self.object:setacceleration({x=0, y=0, z=0})
                self.physical_state = false
                self.object:set_properties({
                    physical = false
                })
            end
        else
            if not self.physical_state then
                self.object:setvelocity({x=0,y=0,z=0})
                self.object:setacceleration({x=0, y=-10, z=0})
                self.physical_state = true
                self.object:set_properties({
                    physical = true
                })
            end
        end
    end,
    on_punch = function(self, hitter)
        if self.itemstring ~= '' then
            local left = hitter:get_inventory():add_item("main", self.itemstring)
            if not left:is_empty() then
                self.itemstring = left:to_string()
                return
            end
        end
        self.object:remove()
    end,
})
print("ITEM ENTITY LOADED")
item_drop/sounds/item_drop_pickup.1.ogg
Binary files differ
item_drop/sounds/item_drop_pickup.2.ogg
Binary files differ
item_drop/sounds/item_drop_pickup.3.ogg
Binary files differ
item_drop/sounds/item_drop_pickup.4.ogg
Binary files differ
technic/alloy_furnaces_commons.lua
@@ -19,14 +19,12 @@
alloy_recipes[registered_recipes_count].dst_name=string3
alloy_recipes[registered_recipes_count].dst_count=count3
registered_recipes_count=registered_recipes_count+1
if UI_recipes_hook then
    minetest.register_craft({
if unified_inventory then
    unified_inventory.register_craft({
    type = "alloy",
    output = string3.." "..count3,
    recipe = {
        {string1.." "..count1},
        {string2.." "..count2},
            }
    items = {string1.." "..count1,string2.." "..count2},
    width = 2,
    })
    end
end
technic/config.lua
@@ -1,7 +1,42 @@
enable_technic_inventory=true
enable_mining_drill=true
enable_mining_laser=true
enable_flashlight=true
enable_rubber_tree_generation=true
enable_marble_generation=true
enable_granite_generation=true
technic.config = {}
technic.config.loaded = {}
technic.config.default = {
    enable_mining_drill = "true",
    enable_mining_laser = "true",
    enable_flashlight = "true",
    enable_item_drop = "true",
    enable_item_pickup = "true",
    enable_rubber_tree_generation = "true",
    enable_marble_generation = "true",
    enable_granite_generation = "true"
}
function technic.config:load(filename)
    file, error = io.open(filename, "r")
    if error then return end
    local line = file:read("*l")
    while line do
        local found, _, setting, value = line:find("^([^#%s=]+)%s?=%s?([^%s#]+)")
        if found then
            self.loaded[setting] = value
        end
        line = file:read("*l")
    end
    file:close()
end
technic.config:load(minetest.get_worldpath().."/technic.conf")
function technic.config:get(setting)
    if self.loaded[setting] then
        return self.loaded[setting]
    else
        return self.default[setting]
    end
end
function technic.config:getBool(setting)
    return string.lower(self:get(setting)) == "true"
end
technic/depends.txt
@@ -2,5 +2,3 @@
moreores
pipeworks
mesecons
technic_worldgen
technic/geothermal.lua
@@ -4,8 +4,8 @@
    output = 'technic:geothermal',
    recipe = {
        {'default:stone', 'default:stone', 'default:stone'},
        {'moreores:copper_ingot', 'technic:diamond', 'moreores:copper_ingot'},
        {'default:stone', 'moreores:copper_ingot', 'default:stone'},
        {'default:copper_ingot', 'default:diamond', 'default:copper_ingot'},
        {'default:stone', 'default:copper_ingot', 'default:stone'},
    }
})
technic/grinder.lua
@@ -7,11 +7,12 @@
grinder_recipes[registered_grinder_recipes_count].src_name=string1
grinder_recipes[registered_grinder_recipes_count].dst_name=string2
registered_grinder_recipes_count=registered_grinder_recipes_count+1
if UI_recipes_hook then
    minetest.register_craft({
if unified_inventory then
    unified_inventory.register_craft({
    type = "grinding",
    output = string2,
    recipe = string1,
    items = {string1},
    width = 0,
    })
    end
end
@@ -22,11 +23,9 @@
register_grinder_recipe("default:desert_stone","default:desert_sand")
register_grinder_recipe("default:iron_lump","technic:iron_dust 2") 
register_grinder_recipe("default:coal_lump","technic:coal_dust 2") 
register_grinder_recipe("moreores:copper_lump","technic:copper_dust 2")
register_grinder_recipe("default:copper_lump","technic:copper_dust 2")
register_grinder_recipe("moreores:tin_lump","technic:tin_dust 2") 
register_grinder_recipe("moreores:silver_lump","technic:silver_dust 2")
register_grinder_recipe("moreores:gold_lump","technic:gold_dust 2")
register_grinder_recipe("default:gold_lump","technic:gold_dust 2") 
register_grinder_recipe("moreores:mithril_lump","technic:mithril_dust 2") 
register_grinder_recipe("technic:chromium_lump","technic:chromium_dust 2") 
technic/mining_drill.lua
@@ -217,11 +217,11 @@
    stack_max = 1,
    on_use = function(itemstack, user, pointed_thing)
        if pointed_thing.type=="node" then 
        item=itemstack:to_table()
        local item=itemstack:to_table()
        local meta=get_item_meta(item["metadata"])
        if meta==nil then return end --tool not charghed
        if meta["charge"]==nil then return end
        charge=meta["charge"]
        local charge=meta["charge"]
        if charge-mining_drill_power_usage>0 then
            charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,1,1)
            charge =charge-mining_drill_power_usage;
@@ -287,7 +287,7 @@
    local keys=user:get_player_control()
    local player_name=user:get_player_name()
    local item=itemstack:to_table()
    meta=get_item_meta(item["metadata"])
    local meta=get_item_meta(item["metadata"])
    if meta==nil or keys["sneak"]==true then return mining_drill_mk2_setmode(user,itemstack) end
    if meta["mode"]==nil then return mining_drill_mk2_setmode(user,itemstack) end
    if pointed_thing.type~="node" then return end
@@ -309,14 +309,13 @@
    local keys=user:get_player_control()
    local player_name=user:get_player_name()
    local item=itemstack:to_table()
    meta=get_item_meta(item["metadata"])
    local meta=get_item_meta(item["metadata"])
    if meta==nil or keys["sneak"]==true then return mining_drill_mk3_setmode(user,itemstack) end
    if meta["mode"]==nil then return mining_drill_mk3_setmode(user,itemstack) end
    if pointed_thing.type~="node" then return end
    if meta["charge"]==nil then return end
    charge=meta["charge"]
    local charge=meta["charge"]
    if charge-mining_drill_power_usage>0 then
        print(dump(meta))
        local charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,3,meta["mode"])
        charge=charge-charge_to_take;
        if charge<0 then charge=0 end
technic/rubber.lua
@@ -88,14 +88,12 @@
    end
})
minetest.register_on_generated(function(minp, maxp, blockseed)
    if math.random(1, 100) > 5 then
        return
    end
    local tmp = {x=(maxp.x-minp.x)/2+minp.x, y=(maxp.y-minp.y)/2+minp.y, z=(maxp.z-minp.z)/2+minp.z}
    local pos = minetest.env:find_node_near(tmp, maxp.x-minp.x, {"default:dirt_with_grass"})
    if pos ~= nil then
            rubber_tree={
if technic.config:getBool("enable_rubber_tree_generation") then
    minetest.register_on_generated(function(minp, maxp, blockseed)
        if math.random(1, 100) > 5 then
            return
        end
        local rubber_tree={
            axiom="FFFFA",
            rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
            rules_b="[&FFA]////[&FFA]////[&FFA]",
@@ -107,10 +105,14 @@
            thin_trunks=false;
            fruit_tree=false,
            fruit=""
            }
            minetest.env:spawn_tree({x=pos.x, y=pos.y+1, z=pos.z},rubber_tree)
    end
end)
        }
        local tmp = {x=(maxp.x-minp.x)/2+minp.x, y=(maxp.y-minp.y)/2+minp.y, z=(maxp.z-minp.z)/2+minp.z}
        local pos = minetest.env:find_node_near(tmp, maxp.x-minp.x, {"default:dirt_with_grass"})
        if pos ~= nil then
            minetest.env:spawn_tree({x=pos.x, y=pos.y+1, z=pos.z}, rubber_tree)
        end
    end)
end
-- ========= FUEL =========
technic/sonic_screwdriver.lua
@@ -52,7 +52,7 @@
minetest.register_craft({
    output = "technic:sonic_screwdriver",
    recipe = {
        {"technic:diamond"},
        {"default:diamond"},
        {"technic:battery"},
        {"technic:stainless_steel_ingot"}
        }
technic/textures/technic_hv_cable.png
technic/textures/technic_hv_cable_wield.png
technic/textures/technic_mv_cable_wield.png

technic/wires_hv.lua
New file
@@ -0,0 +1,398 @@
--HV cable node boxes
minetest.register_craft({
    output = 'technic:hv_cable 3',
    recipe ={
        {'technic:rubber','technic:rubber','technic:rubber'},
        {'technic:mv_cable','technic:mv_cable','technic:mv_cable'},
        {'technic:rubber','technic:rubber','technic:rubber'},
        }
})
minetest.register_craftitem("technic:hv_cable", {
    description = "Gigh Voltage Copper Cable",
    stack_max = 99,
})
minetest.register_node("technic:hv_cable", {
    description = "High Voltage Copper Cable",
    tiles = {"technic_hv_cable.png"},
    inventory_image = "technic_hv_cable_wield.png",
    wield_image = "technic_hv_cable_wield.png",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
    sounds = default.node_sound_wood_defaults(),
    drop = "technic:hv_cable",
    hv_cablelike=1,
    rules_x1=0,
    rules_x2=0,
    rules_y1=0,
    rules_y2=0,
    rules_z1=0,
    rules_z2=0,
    paramtype = "light",
        drawtype = "nodebox",
    selection_box = {
        type = "fixed",
                fixed = {
        { -0.1 , -0.1 , -0.1 , 0.1 ,  0.1 , 0.1  },
        }},
    node_box = {
        type = "fixed",
                fixed = {
        { -0.125 , -0.125 , -0.125 , 0.125 ,  0.125 , 0.125  },
        }},
    on_construct = function(pos)
    meta=minetest.env:get_meta(pos)
    meta:set_float("hv_cablelike",1)
    meta:set_float("x1",0)
    meta:set_float("x2",0)
    meta:set_float("y1",0)
    meta:set_float("y2",0)
    meta:set_float("z1",0)
    meta:set_float("z2",0)
    HV_check_connections (pos)
    end,
    after_dig_node = function (pos, oldnode, oldmetadata, digger)
    HV_check_connections_on_destroy (pos)
    end,
})
str_y1=        { -0.125 , -0.125 , -0.125 , 0.125 , 0.5, 0.125  }    --0 y+
str_x1=        { -0.125 , -0.125 , -0.125 , 0.5, 0.125 , 0.125  }    --0 x+
str_z1=        { -0.125 , -0.125 ,  0.125 ,  0.125 , 0.125 , 0.5 }   --0 z+
str_z2=        { -0.125 , -0.125, -0.5 ,  0.125 ,  0.125 , 0.125  }  --0 z-
str_y2=        { -0.125 , -0.5, -0.125 ,  0.125 ,  0.125 , 0.125  }  --0 y-
str_x2=        { -0.5 , -0.125, -0.125 ,  0.125 ,  0.125 , 0.125  }  --0 x-
local x1,x2,y1,y2,z1,z2
local count=0
for x1 = 0, 1, 1 do    --x-
for x2 = 0, 1, 1 do    --x+
for y1 = 0, 1, 1 do    --y-
for y2 = 0, 1, 1 do    --y-
for z1 = 0, 1, 1 do    --z-
for z2 = 0, 1, 1 do    --z+
temp_x1={} temp_x2={} temp_y1={} temp_y2={} temp_z1={} temp_z2={}
if x1==1 then     temp_x1=str_x1  end
if x2==1 then     temp_x2=str_x2  end
if y1==1 then     temp_y1=str_y1  end
if y2==1 then     temp_y2=str_y2  end
if z1==1 then     temp_z1=str_z1  end
if z2==1 then     temp_z2=str_z2  end
minetest.register_node("technic:hv_cable"..count, {
    description = "Gigh Voltage Copper Cable",
    tiles = {"technic_hv_cable.png"},
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
    sounds = default.node_sound_wood_defaults(),
    drop = "technic:hv_cable",
    rules_x1=0,
    rules_x2=0,
    rules_y1=0,
    rules_y2=0,
    rules_z1=0,
    rules_z2=0,
    cablelike=1,
    paramtype = "light",
        drawtype = "nodebox",
    selection_box = {
        type = "fixed",
           fixed = {
        temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
        }},
    node_box = {
        type = "fixed",
           fixed = {
        temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
        }},
    after_dig_node = function (pos, oldnode, oldmetadata, digger)
    HV_check_connections_on_destroy (pos)
    end,
})
count=count+1 end end end end end end
HV_check_connections = function(pos)
        local pos1={}
        pos1.x=pos.x
        pos1.y=pos.y
        pos1.z=pos.z
        pos1.x=pos1.x+1
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        x2=1
        x1=minetest.env:get_meta(pos1):get_float("x1")
        y1=minetest.env:get_meta(pos1):get_float("y1")
        y2=minetest.env:get_meta(pos1):get_float("y2")
        z1=minetest.env:get_meta(pos1):get_float("z1")
        z2=minetest.env:get_meta(pos1):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos1,"technic:hv_cable"..rule)
        meta=minetest.env:get_meta(pos1)
        meta:set_float("x2",x2)
        meta=minetest.env:get_meta(pos)
        x1=1
        x2=minetest.env:get_meta(pos):get_float("x2")
        y1=minetest.env:get_meta(pos):get_float("y1")
        y2=minetest.env:get_meta(pos):get_float("y2")
        z1=minetest.env:get_meta(pos):get_float("z1")
        z2=minetest.env:get_meta(pos):get_float("z2")
        meta:set_float("x1",x1)
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos,"technic:hv_cable"..rule)
        end
        pos1.x=pos1.x-2
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        x1=1
        x2=minetest.env:get_meta(pos1):get_float("x2")
        y1=minetest.env:get_meta(pos1):get_float("y1")
        y2=minetest.env:get_meta(pos1):get_float("y2")
        z1=minetest.env:get_meta(pos1):get_float("z1")
        z2=minetest.env:get_meta(pos1):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos1,"technic:hv_cable"..rule)
        meta=minetest.env:get_meta(pos1)
        meta:set_float("x1",x1)
        meta=minetest.env:get_meta(pos)
        x2=1
        x1=minetest.env:get_meta(pos):get_float("x1")
        y1=minetest.env:get_meta(pos):get_float("y1")
        y2=minetest.env:get_meta(pos):get_float("y2")
        z1=minetest.env:get_meta(pos):get_float("z1")
        z2=minetest.env:get_meta(pos):get_float("z2")
        meta:set_float("x2",x2)
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos,"technic:hv_cable"..rule)
        end
        pos1.x=pos1.x+1
        pos1.y=pos1.y+1
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        y2=1
        x1=minetest.env:get_meta(pos1):get_float("x1")
        x2=minetest.env:get_meta(pos1):get_float("x2")
        y1=minetest.env:get_meta(pos1):get_float("y1")
        z1=minetest.env:get_meta(pos1):get_float("z1")
        z2=minetest.env:get_meta(pos1):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos1,"technic:hv_cable"..rule)
        meta=minetest.env:get_meta(pos1)
        meta:set_float("y2",y2)
        meta=minetest.env:get_meta(pos)
        y1=1
        x1=minetest.env:get_meta(pos):get_float("x1")
        x2=minetest.env:get_meta(pos):get_float("x2")
        y2=minetest.env:get_meta(pos):get_float("y2")
        z1=minetest.env:get_meta(pos):get_float("z1")
        z2=minetest.env:get_meta(pos):get_float("z2")
        meta:set_float("y1",y1)
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos,"technic:hv_cable"..rule)
        end
        if minetest.env:get_meta(pos1):get_float("technic_hv_power_machine")==1 then
        y1=1
        x1=minetest.env:get_meta(pos):get_float("x1")
        x2=minetest.env:get_meta(pos):get_float("x2")
        y2=minetest.env:get_meta(pos):get_float("y2")
        z1=minetest.env:get_meta(pos):get_float("z1")
        z2=minetest.env:get_meta(pos):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos,"technic:hv_cable"..rule)
        meta=minetest.env:get_meta(pos)
        meta:set_float("y1",y1)
        end
        pos1.y=pos1.y-2
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        y1=1
        x1=minetest.env:get_meta(pos1):get_float("x1")
        x2=minetest.env:get_meta(pos1):get_float("x2")
        y2=minetest.env:get_meta(pos1):get_float("y2")
        z1=minetest.env:get_meta(pos1):get_float("z1")
        z2=minetest.env:get_meta(pos1):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos1,"technic:hv_cable"..rule)
        meta=minetest.env:get_meta(pos1)
        meta:set_float("y1",y1)
        meta=minetest.env:get_meta(pos)
        y2=1
        x1=minetest.env:get_meta(pos):get_float("x1")
        x2=minetest.env:get_meta(pos):get_float("x2")
        y1=minetest.env:get_meta(pos):get_float("y1")
        z1=minetest.env:get_meta(pos):get_float("z1")
        z2=minetest.env:get_meta(pos):get_float("z2")
        meta:set_float("y2",y2)
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos,"technic:hv_cable"..rule)
        end
        pos1.y=pos1.y+1
        pos1.z=pos1.z+1
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        z2=1
        x1=minetest.env:get_meta(pos1):get_float("x1")
        x2=minetest.env:get_meta(pos1):get_float("x2")
        y1=minetest.env:get_meta(pos1):get_float("y1")
        y2=minetest.env:get_meta(pos1):get_float("y2")
        z1=minetest.env:get_meta(pos1):get_float("z1")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos1,"technic:hv_cable"..rule)
        meta=minetest.env:get_meta(pos1)
        meta:set_float("z2",z2)
        meta=minetest.env:get_meta(pos)
        z1=1
        x1=minetest.env:get_meta(pos):get_float("x1")
        x2=minetest.env:get_meta(pos):get_float("x2")
        y1=minetest.env:get_meta(pos):get_float("y1")
        y2=minetest.env:get_meta(pos):get_float("y2")
        z2=minetest.env:get_meta(pos):get_float("z2")
        meta:set_float("z1",z1)
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos,"technic:hv_cable"..rule)
        end
        pos1.z=pos1.z-2
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        z1=1
        x1=minetest.env:get_meta(pos1):get_float("x1")
        x2=minetest.env:get_meta(pos1):get_float("x2")
        y1=minetest.env:get_meta(pos1):get_float("y1")
        y2=minetest.env:get_meta(pos1):get_float("y2")
        z2=minetest.env:get_meta(pos1):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos1,"technic:hv_cable"..rule)
        meta=minetest.env:get_meta(pos1)
        meta:set_float("z1",z1)
        meta=minetest.env:get_meta(pos)
        z2=1
        x1=minetest.env:get_meta(pos):get_float("x1")
        x2=minetest.env:get_meta(pos):get_float("x2")
        y1=minetest.env:get_meta(pos):get_float("y1")
        y2=minetest.env:get_meta(pos):get_float("y2")
        z1=minetest.env:get_meta(pos):get_float("z1")
        meta:set_float("z2",z2)
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        hacky_swap_node(pos,"technic:hv_cable"..rule)
        end
        pos1.z=pos1.z+1
end
HV_check_connections_on_destroy = function(pos)
        local pos1={}
        pos1.x=pos.x
        pos1.y=pos.y
        pos1.z=pos.z
        pos1.x=pos1.x+1
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        x2=0
        x1=minetest.env:get_meta(pos1):get_float("x1")
        y1=minetest.env:get_meta(pos1):get_float("y1")
        y2=minetest.env:get_meta(pos1):get_float("y2")
        z1=minetest.env:get_meta(pos1):get_float("z1")
        z2=minetest.env:get_meta(pos1):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        if rule==0 then hacky_swap_node(pos1,"technic:hv_cable") end
        if rule>0  then    hacky_swap_node(pos1,"technic:hv_cable"..rule) end
        meta=minetest.env:get_meta(pos1)
        meta:set_float("x2",x2)
        end
        pos1.x=pos1.x-2
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        x1=0
        x2=minetest.env:get_meta(pos1):get_float("x2")
        y1=minetest.env:get_meta(pos1):get_float("y1")
        y2=minetest.env:get_meta(pos1):get_float("y2")
        z1=minetest.env:get_meta(pos1):get_float("z1")
        z2=minetest.env:get_meta(pos1):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        if rule==0 then hacky_swap_node(pos1,"technic:hv_cable") end
        if rule>0  then    hacky_swap_node(pos1,"technic:hv_cable"..rule) end
        meta=minetest.env:get_meta(pos1)
        meta:set_float("x1",x1)
        end
        pos1.x=pos1.x+1
        pos1.y=pos1.y+1
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        y2=0
        x1=minetest.env:get_meta(pos1):get_float("x1")
        x2=minetest.env:get_meta(pos1):get_float("x2")
        y1=minetest.env:get_meta(pos1):get_float("y1")
        z1=minetest.env:get_meta(pos1):get_float("z1")
        z2=minetest.env:get_meta(pos1):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        if rule==0 then hacky_swap_node(pos1,"technic:hv_cable") end
        if rule>0  then    hacky_swap_node(pos1,"technic:hv_cable"..rule) end
        meta=minetest.env:get_meta(pos1)
        meta:set_float("y2",y2)
        end
        pos1.y=pos1.y-2
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        y1=0
        x1=minetest.env:get_meta(pos1):get_float("x1")
        x2=minetest.env:get_meta(pos1):get_float("x2")
        y2=minetest.env:get_meta(pos1):get_float("y2")
        z1=minetest.env:get_meta(pos1):get_float("z1")
        z2=minetest.env:get_meta(pos1):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        if rule==0 then hacky_swap_node(pos1,"technic:hv_cable") end
        if rule>0  then    hacky_swap_node(pos1,"technic:hv_cable"..rule) end
        meta=minetest.env:get_meta(pos1)
        meta:set_float("y1",y1)
        end
        pos1.y=pos1.y+1
        pos1.z=pos1.z+1
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        z2=0
        x1=minetest.env:get_meta(pos1):get_float("x1")
        x2=minetest.env:get_meta(pos1):get_float("x2")
        y1=minetest.env:get_meta(pos1):get_float("y1")
        y2=minetest.env:get_meta(pos1):get_float("y2")
        z1=minetest.env:get_meta(pos1):get_float("z1")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        if rule==0 then hacky_swap_node(pos1,"technic:hv_cable") end
        if rule>0  then    hacky_swap_node(pos1,"technic:hv_cable"..rule) end
        meta=minetest.env:get_meta(pos1)
        meta:set_float("z2",z2)
        end
        pos1.z=pos1.z-2
        if minetest.env:get_meta(pos1):get_float("hv_cablelike")==1 then
        z1=0
        x1=minetest.env:get_meta(pos1):get_float("x1")
        x2=minetest.env:get_meta(pos1):get_float("x2")
        y1=minetest.env:get_meta(pos1):get_float("y1")
        y2=minetest.env:get_meta(pos1):get_float("y2")
        z2=minetest.env:get_meta(pos1):get_float("z2")
        rule=make_rule_number(x1,x2,y1,y2,z1,z2)
        if rule==0 then hacky_swap_node(pos1,"technic:hv_cable") end
        if rule>0  then    hacky_swap_node(pos1,"technic:hv_cable"..rule) end
        meta=minetest.env:get_meta(pos1)
        meta:set_float("z1",z1)
        end
        pos1.y=pos1.y+1
end
technic_worldgen/depends.txt
@@ -1 +1,2 @@
default
technic
technic_worldgen/nodes.lua
@@ -56,3 +56,5 @@
        {'technic:marble','technic:marble'}
    }
})
minetest.register_alias("technic:diamond_block", "default:diamondblock")
technic_worldgen/oregen.lua
@@ -28,6 +28,7 @@
    height_min     = -31000,
    height_max     = 2,
})
if technic.config:getBool("enable_marble_generation") then
minetest.register_ore({
    ore_type       = "sheet",
    ore            = "technic:marble",
@@ -40,6 +41,8 @@
    noise_threshhold = 0.4,
    noise_params = {offset=0, scale=15, spread={x=150, y=150, z=150}, seed=23, octaves=3, persist=0.70}
})
end
if technic.config:getBool("enable_granite_generation") then
minetest.register_ore({
    ore_type       = "sheet",
    ore            = "technic:granite",
@@ -52,4 +55,5 @@
    noise_threshhold = 0.4,
    noise_params = {offset=0, scale=15, spread={x=130, y=130, z=130}, seed=24, octaves=3, persist=0.70}
})
end
unified_inventory/api.lua
@@ -10,6 +10,8 @@
unified_inventory.activefilter = {}
unified_inventory.alternate = {}
unified_inventory.current_item = {}
unified_inventory.crafts_table ={}
unified_inventory.crafts_table_count=0
-- default inventory page
unified_inventory.default = "craft"
@@ -26,8 +28,18 @@
        if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0)
                and def.description and def.description ~= "" then
            table.insert(unified_inventory.items_list, name)
            local recipes=minetest.get_all_craft_recipes(name)
            if unified_inventory.crafts_table[name]==nil then
                unified_inventory.crafts_table[name] = {}
            end
            if recipes then
                for i=1,#recipes,1 do
                    table.insert(unified_inventory.crafts_table[name],recipes[i])
                end
            end
        end
    end
    --print(dump(unified_inventory.crafts_table))
    table.sort(unified_inventory.items_list)
    unified_inventory.items_list_size = #unified_inventory.items_list
    print ("Unified Inventory. inventory size: "..unified_inventory.items_list_size)
@@ -37,7 +49,6 @@
minetest.register_on_joinplayer(function(player)
    local player_name = player:get_player_name()
    unified_inventory.players[player_name]={}
    unified_inventory.players[player_name]["sound_volume"]=minetest.setting_get("sound_volume")*10
    unified_inventory.current_index[player_name] = 1
    unified_inventory.filtered_items_list[player_name] = {}
    unified_inventory.filtered_items_list[player_name] = unified_inventory.items_list
@@ -48,7 +59,7 @@
    unified_inventory.current_item[player_name] =nil
    unified_inventory.set_inventory_formspec(player,unified_inventory.get_formspec(player, unified_inventory.default))
--crafting guide inventories
--crafting guide inventories
local inv = minetest.create_detached_inventory(player:get_player_name().."craftrecipe",{
    allow_put = function(inv, listname, index, stack, player)
        return 0
@@ -206,9 +217,9 @@
            formspec = formspec.."label[2,0;"..item_name.."]"    
            local alternates = 0
            local alternate = unified_inventory.alternate[player_name]
            local crafts = crafts_table[item_name]
            local crafts = unified_inventory.crafts_table[item_name]
            if crafts ~= nil then
            if crafts ~= nil and #crafts>0 then
                alternates = #crafts
                local craft = crafts[alternate]
                local method = "Crafting"
@@ -440,7 +451,7 @@
        if item_name then
            local alternates = 0
            local alternate=unified_inventory.alternate[player_name]
            local crafts = crafts_table[item_name]
            local crafts = unified_inventory.crafts_table[item_name]
            if crafts ~= nil then
                alternates = #crafts
            end
@@ -537,134 +548,63 @@
-- update_recipe
unified_inventory.update_recipe = function(player, stack_name, alternate)
    --print("Lookup:"..stack_name)
    local inv = minetest.get_inventory({type="detached", name=player:get_player_name().."craftrecipe"})    
    for i=0,inv:get_size("build"),1 do
        inv:set_stack("build", i, nil)
    end
    inv:set_stack("cook", 1, nil)
    inv:set_stack("fuel", 1, nil)
    inv:set_stack("output", 1, stack_name)
    local def
    inv:set_stack("output", 1, nil)
    alternate = tonumber(alternate) or 1
    local crafts = crafts_table[stack_name]
    if crafts == nil then
        --minetest.chat_send_player(player:get_player_name(), "no recipe available for "..stack_name)
        return
    end
    local crafts = unified_inventory.crafts_table[stack_name]
    print(dump(crafts))
    local next=next
    if next(crafts) == nil then return end -- no craft recipes
    if alternate < 1 or alternate > #crafts then
        alternate = 1
    end
    local craft = crafts[alternate]
    --print (dump(craft))
    --minetest.chat_send_player(player:get_player_name(), "recipe for "..stack_name..": "..dump(craft))
    local itemstack = ItemStack(craft.output)
    inv:set_stack("output", 1, itemstack)
    inv:set_stack("output", 1, craft.output)
    local items=craft.items
    -- cook, fuel, grinding recipes
    if craft.type == "cooking" or craft.type == "fuel" or craft.type == "grinding" then
        def=unified_inventory.find_item_def(craft.recipe)
        def=unified_inventory.find_item_def(craft["items"][1])
        if def then
            inv:set_stack("build", 1, def)
        end
        return 
    end
    -- build (shaped or shapeless)
    if craft.recipe[1] then
        def=unified_inventory.find_item_def(craft.recipe[1])
        if def then
            inv:set_stack("build", 1, def)
        else
            def=unified_inventory.find_item_def(craft.recipe[1][1])
            if def then
                inv:set_stack("build", 1, def)
            end
            def=unified_inventory.find_item_def(craft.recipe[1][2])
            if def then
                inv:set_stack("build", 2, def)
            end
            def=unified_inventory.find_item_def(craft.recipe[1][3])
            if def then
                inv:set_stack("build", 3, def)
            end
    if craft.width==0 then
    local build_table={1,2,3}
    for i=1,3,1 do
        if craft.items[i] then
            def=unified_inventory.find_item_def(craft.items[i])
            if def then inv:set_stack("build", build_table[i], def) end
        end
    end
    if craft.recipe[2] then
        def=unified_inventory.find_item_def(craft.recipe[2])
        if def then
            inv:set_stack("build", 2, def)
        else
            def=unified_inventory.find_item_def(craft.recipe[2][1])
            if def then
                inv:set_stack("build", 4, def)
    end
    if craft.width==1 then
    local build_table={1,4,7}
    for i=1,3,1 do
        if craft.items[i] then
            def=unified_inventory.find_item_def(craft.items[i])
            if def then inv:set_stack("build", build_table[i], def) end
        end
    end
    end
    if craft.width==2 then
    local build_table={1,2,4,5,7,8}
    for i=1,6,1 do
        if craft.items[i] then
            def=unified_inventory.find_item_def(craft.items[i])
            if def then inv:set_stack("build", build_table[i], def) end
        end
    end
    end
    if craft.width==3 then
        for i=1,9,1 do
            if craft.items[i] then
                def=unified_inventory.find_item_def(craft.items[i])
                if def then inv:set_stack("build", i, def) end
            end
            def=unified_inventory.find_item_def(craft.recipe[2][2])
            if def then
                inv:set_stack("build", 5, def)
            end
            def=unified_inventory.find_item_def(craft.recipe[2][3])
            if def then
                inv:set_stack("build", 6, def)
            end
        end
    end
    if craft.recipe[3] then
        def=unified_inventory.find_item_def(craft.recipe[3])
        if def then
            inv:set_stack("build", 3, def)
        else
            def=unified_inventory.find_item_def(craft.recipe[3][1])
            if def then
                inv:set_stack("build", 7, def)
            end
            def=unified_inventory.find_item_def(craft.recipe[3][2])
            if def then
                inv:set_stack("build", 8, def)
            end
            def=unified_inventory.find_item_def(craft.recipe[3][3])
            if def then
                inv:set_stack("build", 9, def)
            end
        end
    end
    if craft.recipe[4] then
        def=unified_inventory.find_item_def(craft.recipe[4])
        if def then
            inv:set_stack("build", 4, def)
        end
    end
    if craft.recipe[5] then
        def=unified_inventory.find_item_def(craft.recipe[5])
        if def then
            inv:set_stack("build", 5, def)
        end
    end
    if craft.recipe[6] then
        def=unified_inventory.find_item_def(craft.recipe[6])
        if def then
            inv:set_stack("build", 6, def)
        end
    end
    if craft.recipe[7] then
        def=unified_inventory.find_item_def(craft.recipe[7])
        if def then
            inv:set_stack("build", 7, def)
        end
    end
    if craft.recipe[8] then
        def=unified_inventory.find_item_def(craft.recipe[8])
        if def then
            inv:set_stack("build", 8, def)
        end
    end
    if craft.recipe[9] then
        def=unified_inventory.find_item_def(craft.recipe[9])
        if def then
            inv:set_stack("build", 9, def)
        end
    end
end
@@ -674,14 +614,39 @@
    if string.find(def1, "group:") then
        def1=string.gsub(def1, "group:", "")
        def1=string.gsub(def1, '\"', "")
        for name,def in pairs(minetest.registered_items) do
                if def.groups[def1] == 1 and def.groups.not_in_creative_inventory ~= 1 then
                    return def
                end
        end
        local items=unified_inventory.items_in_group(def1)
        return items[1]
    else
    return def1
        return def1
    end
end
return nil
end
unified_inventory.items_in_group = function(group)
    local items = {}
    for name, item in pairs(minetest.registered_items) do
        for _, g in ipairs(group:split(',')) do
            if item.groups[g] then
                table.insert(items,name)
            end
        end
    end
    return items
end
-- register_craft
unified_inventory.register_craft = function(options)
    if  options.output == nil then
        return
    end
    local itemstack = ItemStack(options.output)
    if itemstack:is_empty() then
        return
    end
    if unified_inventory.crafts_table[itemstack:get_name()]==nil then
        unified_inventory.crafts_table[itemstack:get_name()] = {}
    end
    table.insert(unified_inventory.crafts_table[itemstack:get_name()],options)
    --crafts_table_count=crafts_table_count+1
end
unified_inventory/depends.txt
@@ -1,2 +1 @@
aaa_recipeshook
creative