Replace spaces with tabs

This commit is contained in:
octacian 2017-07-25 10:47:25 -07:00
parent be54e91335
commit 5a5ca11ecd
No known key found for this signature in database
GPG Key ID: E84291D11A3509B5
13 changed files with 762 additions and 333 deletions

@ -7,8 +7,8 @@ MicroExpansion - ME [microexpansion]
* **Licence:** Code: MIT (see LICENSE), Media: CC-BY-SA 3.0 * **Licence:** Code: MIT (see LICENSE), Media: CC-BY-SA 3.0
* [Github Repository](https://github.com/octacian/microexpansion) * [Github Repository](https://github.com/octacian/microexpansion)
* **Downloads:** * **Downloads:**
* [Master (Unstable)](https://github.com/octacian/microexpansion/archive/master.zip) * [Master (Unstable)](https://github.com/octacian/microexpansion/archive/master.zip)
* ...or browse the code on [GitHub](https://github.com/octacian/microexpansion) * ...or browse the code on [GitHub](https://github.com/octacian/microexpansion)
**Note**: MicroExpansion requires that you have `minetest-dev` with [this commit](https://github.com/minetest/minetest/commit/f2f9a923515386d787a245fac52f78e815b3a839) or later. **Note**: MicroExpansion requires that you have `minetest-dev` with [this commit](https://github.com/minetest/minetest/commit/f2f9a923515386d787a245fac52f78e815b3a839) or later.

230
api.lua

@ -3,150 +3,150 @@ local BASENAME = "microexpansion"
-- [function] Register Recipe -- [function] Register Recipe
function microexpansion.register_recipe(output, recipe) function microexpansion.register_recipe(output, recipe)
-- Check if disabled -- Check if disabled
if recipe.disabled == true then if recipe.disabled == true then
return return
end end
local function isint(n) local function isint(n)
return n==math.floor(n) return n==math.floor(n)
end end
local function get_amount(_) local function get_amount(_)
if isint(recipe[_][1]) then if isint(recipe[_][1]) then
return recipe[_][1] return recipe[_][1]
else return 1 end else return 1 end
end end
local function get_type(_) local function get_type(_)
if type(recipe[_][2]) == "string" then if type(recipe[_][2]) == "string" then
return recipe[_][2] return recipe[_][2]
end end
end end
local function register(_) local function register(_)
local def = { local def = {
type = get_type(_), type = get_type(_),
output = output.." "..tostring(get_amount(_)), output = output.." "..tostring(get_amount(_)),
recipe = recipe[_][3] or recipe[_][2] recipe = recipe[_][3] or recipe[_][2]
} }
minetest.register_craft(def) minetest.register_craft(def)
end end
for _, i in ipairs(recipe) do for _, i in ipairs(recipe) do
-- Check if disabled -- Check if disabled
if recipe.disabled == true then if recipe.disabled == true then
return return
end end
register(_) register(_)
end end
end end
-- [function] Register oredef -- [function] Register oredef
function microexpansion.register_oredef(ore, def) function microexpansion.register_oredef(ore, def)
-- Check if disabled -- Check if disabled
if def.disabled == true then if def.disabled == true then
return return
end end
local function register(_) local function register(_)
local def = def[_] local def = def[_]
def.ore = "microexpansion:"..ore def.ore = "microexpansion:"..ore
minetest.register_ore(def) minetest.register_ore(def)
end end
for _, i in ipairs(def) do for _, i in ipairs(def) do
-- Check if disabled -- Check if disabled
if def.disabled == true then if def.disabled == true then
return return
end end
register(_) register(_)
end end
end end
-- [local function] Choose description colour -- [local function] Choose description colour
local function desc_colour(status, desc) local function desc_colour(status, desc)
if status == "unstable" then if status == "unstable" then
return minetest.colorize("orange", desc) return minetest.colorize("orange", desc)
elseif status == "no" then elseif status == "no" then
return minetest.colorize("red", desc) return minetest.colorize("red", desc)
else else
return minetest.colorize("white", desc) return minetest.colorize("white", desc)
end end
end end
-- [function] Register Item -- [function] Register Item
function microexpansion.register_item(itemstring, def) function microexpansion.register_item(itemstring, def)
-- Check if disabled -- Check if disabled
if def.disabled == true then if def.disabled == true then
return return
end end
-- Set usedfor -- Set usedfor
if def.usedfor then if def.usedfor then
def.description = def.description .. "\n"..minetest.colorize("grey", def.usedfor) def.description = def.description .. "\n"..minetest.colorize("grey", def.usedfor)
end end
-- Update inventory image -- Update inventory image
if def.inventory_image then if def.inventory_image then
def.inventory_image = BASENAME.."_"..def.inventory_image..".png" def.inventory_image = BASENAME.."_"..def.inventory_image..".png"
else else
def.inventory_image = BASENAME.."_"..itemstring..".png" def.inventory_image = BASENAME.."_"..itemstring..".png"
end end
-- Colour description -- Colour description
def.description = desc_colour(def.status, def.description) def.description = desc_colour(def.status, def.description)
-- Register craftitem -- Register craftitem
minetest.register_craftitem(BASENAME..":"..itemstring, def) minetest.register_craftitem(BASENAME..":"..itemstring, def)
-- if recipe, Register recipe -- if recipe, Register recipe
if def.recipe then if def.recipe then
microexpansion.register_recipe(BASENAME..":"..itemstring, def.recipe) microexpansion.register_recipe(BASENAME..":"..itemstring, def.recipe)
end end
end end
-- [function] Register Node -- [function] Register Node
function microexpansion.register_node(itemstring, def) function microexpansion.register_node(itemstring, def)
-- Check if disabled -- Check if disabled
if def.disabled == true then if def.disabled == true then
return return
end end
-- Set usedfor -- Set usedfor
if def.usedfor then if def.usedfor then
def.description = def.description .. "\n"..minetest.colorize("grey", def.usedfor) def.description = def.description .. "\n"..minetest.colorize("grey", def.usedfor)
end end
-- Update texture -- Update texture
if auto_complete ~= false then if auto_complete ~= false then
for _,i in ipairs(def.tiles) do for _,i in ipairs(def.tiles) do
if #def.tiles[_]:split("^") <= 1 then if #def.tiles[_]:split("^") <= 1 then
local prefix = "" local prefix = ""
if def.type == "ore" then if def.type == "ore" then
prefix = "ore_" prefix = "ore_"
end end
def.tiles[_] = BASENAME.."_"..prefix..i..".png" def.tiles[_] = BASENAME.."_"..prefix..i..".png"
end end
end end
end end
-- Colour description -- Colour description
def.description = desc_colour(def.status, def.description) def.description = desc_colour(def.status, def.description)
-- Update connect_sides -- Update connect_sides
if def.connect_sides == "nobottom" then if def.connect_sides == "nobottom" then
def.connect_sides = { "top", "front", "left", "back", "right" } def.connect_sides = { "top", "front", "left", "back", "right" }
elseif def.connect_sides == "machine" then elseif def.connect_sides == "machine" then
def.connect_sides = { "top", "bottom", "left", "back", "right" } def.connect_sides = { "top", "bottom", "left", "back", "right" }
end end
-- Register node -- Register node
minetest.register_node(BASENAME..":"..itemstring, def) minetest.register_node(BASENAME..":"..itemstring, def)
-- if recipe, Register recipe -- if recipe, Register recipe
if def.recipe then if def.recipe then
microexpansion.register_recipe(BASENAME..":"..itemstring, def.recipe) microexpansion.register_recipe(BASENAME..":"..itemstring, def.recipe)
end end
-- if oredef, Register oredef -- if oredef, Register oredef
if def.oredef then if def.oredef then
microexpansion.register_oredef(BASENAME..":"..itemstring, def.oredef) microexpansion.register_oredef(BASENAME..":"..itemstring, def.oredef)
end end
end end

@ -1,7 +1,11 @@
-- microexpansion/init.lua -- microexpansion/init.lua
microexpansion = {} microexpansion = {}
microexpansion.modpath = minetest.get_modpath("microexpansion") -- modpath microexpansion.data = {}
local modpath = microexpansion.modpath -- modpath pointer microexpansion.modpath = minetest.get_modpath("microexpansion") -- Get modpath
microexpansion.worldpath = minetest.get_worldpath() -- Get worldpath
local modpath = microexpansion.modpath -- Modpath pointer
local worldpath = microexpansion.worldpath -- Worldpath pointer
-- Formspec GUI related stuff -- Formspec GUI related stuff
microexpansion.gui_bg = "bgcolor[#080808BB;true]background[5,5;1,1;gui_formbg.png;true]" microexpansion.gui_bg = "bgcolor[#080808BB;true]background[5,5;1,1;gui_formbg.png;true]"
@ -9,14 +13,45 @@ microexpansion.gui_slots = "listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]"
-- logger -- logger
function microexpansion.log(content, log_type) function microexpansion.log(content, log_type)
if not content then return false end assert(content, "microexpansion.log: missing content")
if log_type == nil then log_type = "action" end if not content then return false end
minetest.log(log_type, "[MicroExpansion] "..content) if log_type == nil then log_type = "action" end
minetest.log(log_type, "[MicroExpansion] "..content)
end end
-- Load API -- Load API
dofile(modpath.."/api.lua") dofile(modpath.."/api.lua")
-----------------
---- ME DATA ----
-----------------
-- [function] Load
function microexpansion.load()
local res = io.open(worldpath.."/microexpansion.txt", "r")
if res then
res = minetest.deserialize(res:read("*all"))
if type(res) == "table" then
microexpansion.networks = res.networks or {}
end
end
end
-- Load
microexpansion.load()
-- [function] Save
function microexpansion.save()
local data = {
networks = microexpansion.networks,
}
io.open(worldpath.."/microexpansion.txt", "w"):write(minetest.serialize(data))
end
-- [register on] Server Shutdown
minetest.register_on_shutdown(microexpansion.save)
------------------- -------------------
----- MODULES ----- ----- MODULES -----
------------------- -------------------
@ -27,40 +62,40 @@ local settings = Settings(modpath.."/modules.conf"):to_table()
-- [function] Get module path -- [function] Get module path
function microexpansion.get_module_path(name) function microexpansion.get_module_path(name)
local module_path = modpath.."/modules/"..name local module_path = modpath.."/modules/"..name
if io.open(module_path.."/init.lua") then if io.open(module_path.."/init.lua") then
return module_path return module_path
end end
end end
-- [function] Load module (overrides modules.conf) -- [function] Load module (overrides modules.conf)
function microexpansion.load_module(name) function microexpansion.load_module(name)
if loaded_modules[name] ~= false then if loaded_modules[name] ~= false then
local module_init = microexpansion.get_module_path(name).."/init.lua" local module_init = microexpansion.get_module_path(name).."/init.lua"
if module_init then if module_init then
dofile(module_init) dofile(module_init)
loaded_modules[name] = true loaded_modules[name] = true
return true return true
else else
microexpansion.log("Invalid module \""..name.."\". The module either does not exist ".. microexpansion.log("Invalid module \""..name.."\". The module either does not exist "..
"or is missing an init.lua file.", "error") "or is missing an init.lua file.", "error")
end end
else else
return true return true
end end
end end
-- [function] Require module (does not override modules.conf) -- [function] Require module (does not override modules.conf)
function microexpansion.require_module(name) function microexpansion.require_module(name)
if settings[name] and settings[name] ~= false then if settings[name] and settings[name] ~= false then
return microexpansion.load_module(name) return microexpansion.load_module(name)
end end
end end
for name,enabled in pairs(settings) do for name,enabled in pairs(settings) do
if enabled ~= false then if enabled ~= false then
microexpansion.load_module(name) microexpansion.load_module(name)
end end
end end

@ -4,42 +4,42 @@ local me = microexpansion
-- [register] Incranium Ore -- [register] Incranium Ore
me.register_node("incranium", { me.register_node("incranium", {
description = "Incranium Ore", description = "Incranium Ore",
tiles = { "incranium" }, tiles = { "incranium" },
is_ground_content = true, is_ground_content = true,
groups = { cracky=3, stone=1 }, groups = { cracky=3, stone=1 },
type = "ore", type = "ore",
oredef = { oredef = {
{ {
ore_type = "blob", ore_type = "blob",
wherein = "default:stone", wherein = "default:stone",
clust_scarcity = 4*4*4, clust_scarcity = 4*4*4,
clust_num_ores = 4, clust_num_ores = 4,
clust_size = 3, clust_size = 3,
y_min = -300, y_min = -300,
y_max = -90, y_max = -90,
}, },
}, },
disabled = true, disabled = true,
}) })
-- "Supernatet", pronounced "Super-nat-et" is Latin for "float", this ore will -- "Supernatet", pronounced "Super-nat-et" is Latin for "float", this ore will
-- float up if there are no blocks above it, so be careful! -- float up if there are no blocks above it, so be careful!
-- Supernatet ore will be used to craft wings of flight -- Supernatet ore will be used to craft wings of flight
me.register_node("supernatet", { me.register_node("supernatet", {
description = "Supernatant Ore", description = "Supernatant Ore",
tiles = { "default_stone.png^microexpansion_ore_supernatet.png" }, tiles = { "default_stone.png^microexpansion_ore_supernatet.png" },
is_ground_content = true, is_ground_content = true,
type = "ore", type = "ore",
groups = { cracky=3, stone=1 }, groups = { cracky=3, stone=1 },
oredef = { oredef = {
ore_type = "blob", ore_type = "blob",
wherein = "default:stone", wherein = "default:stone",
clust_scarcity = 4*4*4, clust_scarcity = 4*4*4,
clust_num_ores = 4, clust_num_ores = 4,
clust_size = 3, clust_size = 3,
y_min = -300, y_min = -300,
y_max = -90, y_max = -90,
}, },
status = "unstable", status = "unstable",
}) })

@ -4,8 +4,8 @@ local me = microexpansion
-- [register node] Controller -- [register node] Controller
me.register_node("ctrl", { me.register_node("ctrl", {
description = "Power Controller", description = "Power Controller",
tiles = { tiles = {
"ctrl_sides", "ctrl_sides",
"ctrl_bottom", "ctrl_bottom",
"ctrl_sides", "ctrl_sides",
@ -13,8 +13,8 @@ me.register_node("ctrl", {
"ctrl_sides", "ctrl_sides",
"ctrl_sides" "ctrl_sides"
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@ -31,29 +31,66 @@ me.register_node("ctrl", {
{-0.1875, -0.5, -0.1875, 0.1875, -0.25, 0.1875}, -- Bottom2 {-0.1875, -0.5, -0.1875, 0.1875, -0.25, 0.1875}, -- Bottom2
}, },
}, },
groups = { cracky = 1, me_connect = 1, }, groups = { cracky = 1, me_connect = 1, },
connect_sides = "nobottom", connect_sides = "nobottom",
status = "no", status = "unstable",
after_place_node = function(pos, player)
local name = player:get_player_name()
local meta = minetest.get_meta(pos)
local id = power.new_id()
meta:set_string("infotext", "Network Controller (owned by "..name..")"
.."\nNetwork ID: "..id)
meta:set_string("network_id", id)
meta:set_string("owner", name)
-- Initialize other meta
meta:set_int("input", 0)
meta:set_int("output", 0)
meta:set_int("storage", 0)
me.networks[id] = pos
-- Trace Network
power.trace(pos)
end,
on_destruct = function(pos, player)
local meta = minetest.get_meta(pos)
local id = meta:get_string("network_id")
me.networks[id] = nil
-- Remove unit from network
me.network_remove(pos)
-- Trace/clear network
power.trace(pos)
end,
machine = {
type = "transporter",
},
}) })
-- [register node] Cable -- [register node] Cable
me.register_node("cable", { me.register_machine("cable", {
description = "ME Cable", description = "ME Cable",
tiles = { tiles = {
"cable", "cable",
}, },
drawtype = "nodebox", drawtype = "nodebox",
node_box = { node_box = {
type = "connected", type = "connected",
fixed = {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, fixed = {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25},
connect_top = {-0.25, -0.25, -0.25, 0.25, 0.5, 0.25}, -- y+ connect_top = {-0.25, -0.25, -0.25, 0.25, 0.5, 0.25}, -- y+
connect_bottom = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25}, -- y- connect_bottom = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25}, -- y-
connect_front = {-0.25, -0.25, -0.5, 0.25, 0.25, 0.25}, -- z- connect_front = {-0.25, -0.25, -0.5, 0.25, 0.25, 0.25}, -- z-
connect_back = {-0.25, -0.25, 0.25, 0.25, 0.25, 0.5 }, -- z+ connect_back = {-0.25, -0.25, 0.25, 0.25, 0.25, 0.5 }, -- z+
connect_left = {-0.5, -0.25, -0.25, 0.25, 0.25, 0.25}, -- x- connect_left = {-0.5, -0.25, -0.25, 0.25, 0.25, 0.25}, -- x-
connect_right = {-0.25, -0.25, -0.25, 0.5, 0.25, 0.25}, -- x+ connect_right = {-0.25, -0.25, -0.25, 0.5, 0.25, 0.25}, -- x+
}, },
connects_to = {"group:me_connect"}, paramtype = "light",
groups = { crumbly = 1, me_connect = 1, }, groups = { crumbly = 1, },
status = "no", status = "unstable",
machine = {
type = "transporter",
},
}) })

@ -3,34 +3,41 @@
local me = microexpansion local me = microexpansion
-- [register node] Fuel Fired Generator -- [register node] Fuel Fired Generator
me.register_node("fuel_fired_generator", { me.register_machine("fuel_fired_generator", {
description = "Fuel-Fired Generator", description = "Fuel-Fired Generator",
tiles = { tiles = {
"machine_sides", "machine_sides",
"machine_sides",
"machine_sides", "machine_sides",
"machine_sides", "machine_sides",
"machine_sides", "machine_sides",
"machine_sides", "machine_sides",
"fuelgen_front", "fuelgen_front",
}, },
recipe = { recipe = {
{ 1, { { 1, {
{ "default:steel_ingot", "default:furnace", "default:steel_ingot" }, { "default:steel_ingot", "default:furnace", "default:steel_ingot" },
{"default:steel_ingot", "microexpansion:machine_casing", "default:steel_ingot" }, {"default:steel_ingot", "microexpansion:machine_casing", "default:steel_ingot" },
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" },
}, },
} }
}, },
groups = { cracky = 1, me_connect = 1, }, groups = { cracky = 1 },
connect_sides = "machine", connect_sides = "machine",
paramtype2 = "facedir", paramtype2 = "facedir",
status = "no", status = "unstable",
machine = {
type = "provider",
on_survey = function(pos)
return 5 -- Generate 5 ME/tick
end,
},
}) })
-- [register node] Super Smelter -- [register node] Super Smelter
me.register_node("super_smelter", { me.register_node("super_smelter", {
description = "Super Smelter", description = "Super Smelter",
tiles = { tiles = {
"machine_sides", "machine_sides",
"machine_sides", "machine_sides",
"machine_sides", "machine_sides",
@ -38,24 +45,30 @@ me.register_node("super_smelter", {
"machine_sides", "machine_sides",
"super_smelter_front", "super_smelter_front",
}, },
recipe = { recipe = {
{ 1, { { 1, {
{ "default:furnace", "default:furnace", "default:furnace" }, { "default:furnace", "default:furnace", "default:furnace" },
{ "default:steel_ingot", "microexpansion:machine_casing", "default:steel_ingot" }, { "default:steel_ingot", "microexpansion:machine_casing", "default:steel_ingot" },
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" },
}, },
}, },
}, },
groups = { cracky = 1, me_connect = 1, }, groups = { cracky = 1, me_connect = 1, },
connect_sides = "machine", connect_sides = "machine",
paramtype2 = "facedir", paramtype2 = "facedir",
status = "no", status = "unstable",
machine = {
type = "consumer",
on_survey = function(pos)
return 5 -- Consume 5 ME/tick
end,
},
}) })
-- [register item] Geothermal Generator -- [register item] Geothermal Generator
me.register_node("geo_generator", { me.register_node("geo_generator", {
description = "Geothermal Generator", description = "Geothermal Generator",
tiles = { tiles = {
"machine_sides", "machine_sides",
"machine_sides", "machine_sides",
"machine_sides", "machine_sides",
@ -63,8 +76,14 @@ me.register_node("geo_generator", {
"machine_sides", "machine_sides",
"geogen_front", "geogen_front",
}, },
groups = { cracky = 1, me_connect = 1, }, groups = { cracky = 1, me_connect = 1, },
connect_sides = "machine", connect_sides = "machine",
paramtype2 = "facedir", paramtype2 = "facedir",
status = "no", status = "unstable",
machine = {
type = "provider",
on_survey = function(pos)
return 10 -- Generate 10 ME/tick
end,
},
}) })

@ -1,10 +1,16 @@
-- power/init.lua -- power/init.lua
local path = microexpansion.get_module_path("power") local me = microexpansion
-- Power generators, wires, etc... local networks = me.networks
local path = microexpansion.get_module_path("power")
me.power = {}
local power = me.power
-- Load Resources -- Load Resources
dofile(path.."/ctrl.lua") -- Controller dofile(path.."/network.lua") -- Network Management
dofile(path.."/register.lua") -- Machine Registration
dofile(path.."/ctrl.lua") -- Controller/wires
dofile(path.."/gen.lua") -- Generators dofile(path.."/gen.lua") -- Generators

244
modules/power/network.lua Normal file

@ -0,0 +1,244 @@
-- power/network.lua
local me = microexpansion
---
--- Helper Functions
---
-- [local function] Renumber table
local function renumber_table(t)
local result = {}
for _, value in pairs(t) do
result[#result+1] = value
end
return result
end
-- [local function] Get netitem by position
local function get_netitem_by_pos(list, pos)
for _, i in pairs(list) do
if vector.equals(pos, i.pos) then
return i
end
end
end
---
--- API Functions
---
-- [function] Get node
function me.get_node(pos)
local node = minetest.get_node_or_nil(pos)
if node then return node end
local vm = VoxelManip()
local MinEdge, MaxEdge = vm:read_from_map(pos, pos)
return minetest.get_node(pos)
end
-- [function] Generate new network ID
function power.new_id()
local count = 1
for _, i in pairs(me.networks) do
count = count + 1
end
return "network_"..count
end
-- [function] Can connect
function power.can_connect(pos)
local node = me.get_node(pos)
local res = minetest.get_item_group(node.name, "me_connect")
if res == 1 then
return true
else
return false
end
end
-- [function] Get connected nodes
function power.get_connected_nodes(pos, include_ctrl)
local nodes = {
{x=pos.x+1, y=pos.y, z=pos.z},
{x=pos.x-1, y=pos.y, z=pos.z},
{x=pos.x, y=pos.y+1, z=pos.z},
{x=pos.x, y=pos.y-1, z=pos.z},
{x=pos.x, y=pos.y, z=pos.z+1},
{x=pos.x, y=pos.y, z=pos.z-1},
}
for _, pos in pairs(nodes) do
if not power.can_connect(pos) then
nodes[_] = nil
else
if include_ctrl == false then
if me.get_node(pos).name == "microexpansion:ctrl" then
nodes[_] = nil
end
end
end
end
return renumber_table(nodes)
end
-- [function] Add machine to network
function power.add_machine(pos, def)
end
-- [function] Remove machine from network
function power.remove_machine(pos)
local meta = minetest.get_meta(pos)
meta:set_string("network_ignore", "true")
end
-- [function] Trace network
function power.trace(pos)
local netpos = me.networks[minetest.get_meta(pos):get_string("network_id")]
-- if no network, return
if not netpos then
return
end
local meta = minetest.get_meta(netpos)
local netid = meta:get_string("network_id")
local list = {}
local demand
local delete = false
if meta:get_string("network_ignore") == "true" then
delete = true
end
-- [local function] Indexed
local function indexed(pos)
for _, i in pairs(list) do
if vector.equals(pos, i.pos) then
return true
end
end
end
-- [local function] Trace
local function trace(nodes)
for _, pos in pairs(nodes) do
if not indexed(pos) then
local machine = minetest.get_meta(pos)
if machine:get_string("network_ignore") ~= "true" then
local node = me.get_node(pos).name
local desc = minetest.registered_nodes[node].description
if delete then
machine:set_string("network_id", nil)
machine:set_string("infotext", desc.."\nNo Network")
me.network_set_demand(pos, 0)
else
machine:set_string("network_id", netid)
machine:set_string("infotext", desc.."\nNetwork ID: "..netid)
end
list[#list + 1] = { pos = pos, demand = machine:get_int("demand") }
trace(power.get_connected_nodes(pos, false))
end
end
end
end
trace(power.get_connected_nodes(netpos))
-- Check original list
local original = minetest.deserialize(meta:get_string("netitems"))
if original then
for _, i in pairs(original) do
if not indexed(i.pos) then
local node = me.get_node(i.pos).name
local desc = minetest.registered_nodes[node].description
local machine = minetest.get_meta(i.pos)
machine:set_string("network_id", nil)
machine:set_string("infotext", desc.."\nNo Network")
me.network_set_demand(pos, 0)
end
end
end
meta:set_string("netitems", minetest.serialize(list))
-- Update infotext
meta:set_string("infotext", "Network Controller (owned by "..
meta:get_string("owner")..")\nNetwork ID: "..meta:get_string("network_id")..
"\nDemand: "..dump(me.network_get_demand(netpos)))
end
---
--- Load Management
---
-- [function] Get load information
function me.network_get_load(pos)
local ctrl = me.networks[minetest.get_meta(pos):get_string("network_id")]
if ctrl then
local meta = minetest.get_meta(ctrl)
local list = minetest.deserialize(meta:get_string("netitems"))
end
end
---- Generators ----
---- Output ----
-- [function] Get total network demand
function me.network_get_demand(pos)
local ctrl = me.networks[minetest.get_meta(pos):get_string("network_id")]
-- if no network, return
if not ctrl then
return
end
local meta = minetest.get_meta(ctrl)
local list = minetest.deserialize(meta:get_string("netitems"))
local demand = 0
for _, i in pairs(list) do
if i.demand then
demand = demand + i.demand
end
end
return demand
end
-- [function] Set demand for machine
function me.network_set_demand(pos, demand)
-- Update original metadata
minetest.get_meta(pos):set_int("demand", demand)
local ctrl = me.networks[minetest.get_meta(pos):get_string("network_id")]
-- if no network, return
if not ctrl then
return
end
local meta = minetest.get_meta(ctrl)
local list = minetest.deserialize(meta:get_string("netitems"))
local item = get_netitem_by_pos(list, pos)
if not item then
return
end
item.demand = demand
meta:set_string("netitems", minetest.serialize(list))
-- Update infotext
meta:set_string("infotext", "Network Controller (owned by "..
meta:get_string("owner")..")\nNetwork ID: "..meta:get_string("network_id")..
"\nDemand: "..dump(me.network_get_demand(pos)))
end
---- Storage ----

@ -0,0 +1,88 @@
-- power/register.lua
--[[ Machine Registration API ]]
local me = microexpansion
local power = me.power
-- [function] Register machine
function me.register_machine(itemstring, def)
-- Set after_place_node
def.after_place_node = function(pos, player)
if def.after_place_node then
def.after_place_node(pos, player)
end
local meta = minetest.get_meta(pos)
local nodes = me.get_connected_nodes(pos)
meta:set_string("infotext", def.description.."\nNo Network")
for _, pos2 in pairs(nodes) do
local id = minetest.get_meta(pos2):get_string("network_id")
if id ~= "" then
meta:set_string("infotext", def.description.."\nNetwork ID: "..id)
meta:set_string("network_id", id)
end
end
-- Trace Network
power.trace(pos)
-- Set demand
if def.demand then
me.network_set_demand(pos, def.demand)
end
if type(def.machine) == "table" then
power.add_machine(pos, def.machine)
end
end
-- Set on_destruct
def.on_destruct = function(pos, player)
if def.on_destruct then
def.on_destruct(pos, player)
end
local meta = minetest.get_meta(pos)
if meta:get_string("network_id") ~= "" then
-- Set demand
me.network_set_demand(pos, 0)
-- Remove item from network
me.network_remove(pos)
-- Retrace Network
power.trace(pos)
end
end
-- Set connects_to
def.connects_to = {"group:me_connect"}
-- Set me_connect group
def.groups = def.groups or {}
def.groups.me_connect = 1
me.register_node(itemstring, def)
end
-- [function] Get machine definition
function me.get_def(name, key)
if type(name) == "table" then
local node = me.get_node(name)
if node then
name = node.name
end
end
local def = minetest.registered_nodes[name]
-- Check name and if registered
if not name or not def then
return
end
if key then
return def[key]
else
return def
end
end

@ -7,24 +7,24 @@ local me = microexpansion
-- [register item] Steel Infused Obsidian Ingot -- [register item] Steel Infused Obsidian Ingot
me.register_item("steel_infused_obsidian_ingot", { me.register_item("steel_infused_obsidian_ingot", {
description = "Steel Infused Obsidian Ingot", description = "Steel Infused Obsidian Ingot",
recipe = { recipe = {
{ 1, { { 1, {
{ "default:steel_ingot", "default:obsidian_shard", "default:steel_ingot" }, { "default:steel_ingot", "default:obsidian_shard", "default:steel_ingot" },
}, },
}, },
}, },
}) })
-- [register item] Machine Casing -- [register item] Machine Casing
me.register_item("machine_casing", { me.register_item("machine_casing", {
description = "Machine Casing", description = "Machine Casing",
recipe = { recipe = {
{ 1, { { 1, {
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
{"default:steel_ingot", "default:copper_ingot", "default:steel_ingot"}, {"default:steel_ingot", "default:copper_ingot", "default:steel_ingot"},
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
}, },
}, },
}, },
}) })

@ -4,97 +4,97 @@ local BASENAME = "microexpansion"
-- [function] register cell -- [function] register cell
function microexpansion.register_cell(itemstring, def) function microexpansion.register_cell(itemstring, def)
if not def.inventory_image then if not def.inventory_image then
def.inventory_image = itemstring def.inventory_image = itemstring
end end
-- register craftitem -- register craftitem
minetest.register_craftitem(BASENAME..":"..itemstring, { minetest.register_craftitem(BASENAME..":"..itemstring, {
description = def.description, description = def.description,
inventory_image = BASENAME.."_"..def.inventory_image..".png", inventory_image = BASENAME.."_"..def.inventory_image..".png",
groups = {microexpansion_cell = 1}, groups = {microexpansion_cell = 1},
stack_max = 1, stack_max = 1,
microexpansion = { microexpansion = {
base_desc = def.description, base_desc = def.description,
drive = { drive = {
capacity = def.capacity or 5000, capacity = def.capacity or 5000,
}, },
}, },
}) })
-- if recipe, register recipe -- if recipe, register recipe
if def.recipe then if def.recipe then
-- if recipe, register recipe -- if recipe, register recipe
if def.recipe then if def.recipe then
microexpansion.register_recipe(BASENAME..":"..itemstring, def.recipe) microexpansion.register_recipe(BASENAME..":"..itemstring, def.recipe)
end end
end end
end end
-- [function] Get cell size -- [function] Get cell size
function microexpansion.get_cell_size(name) function microexpansion.get_cell_size(name)
local item = minetest.registered_craftitems[name] local item = minetest.registered_craftitems[name]
if item then if item then
return item.microexpansion.drive.capacity return item.microexpansion.drive.capacity
end end
end end
-- [function] Calculate max stacks -- [function] Calculate max stacks
function microexpansion.int_to_stacks(int) function microexpansion.int_to_stacks(int)
return math.floor(int / 99) return math.floor(int / 99)
end end
-- [function] Calculate number of pages -- [function] Calculate number of pages
function microexpansion.int_to_pagenum(int) function microexpansion.int_to_pagenum(int)
return math.floor(microexpansion.int_to_stacks(int) / 32) return math.floor(microexpansion.int_to_stacks(int) / 32)
end end
-- [function] Move items from inv to inv -- [function] Move items from inv to inv
function microexpansion.move_inv(inv1, inv2) function microexpansion.move_inv(inv1, inv2)
local finv, tinv = inv1.inv, inv2.inv local finv, tinv = inv1.inv, inv2.inv
local fname, tname = inv1.name, inv2.name local fname, tname = inv1.name, inv2.name
for i,v in ipairs(finv:get_list(fname) or {}) do for i,v in ipairs(finv:get_list(fname) or {}) do
if tinv and tinv:room_for_item(tname, v) then if tinv and tinv:room_for_item(tname, v) then
local leftover = tinv:add_item( tname, v ) local leftover = tinv:add_item( tname, v )
finv:remove_item(fname, v) finv:remove_item(fname, v)
if leftover and not(leftover:is_empty()) then if leftover and not(leftover:is_empty()) then
finv:add_item(fname, v) finv:add_item(fname, v)
end end
end end
end end
end end
-- [function] Update cell description -- [function] Update cell description
function microexpansion.cell_desc(inv, listname, spos) function microexpansion.cell_desc(inv, listname, spos)
local stack = inv:get_stack(listname, spos) local stack = inv:get_stack(listname, spos)
if stack:get_name() ~= "" then if stack:get_name() ~= "" then
local meta = stack:get_meta() local meta = stack:get_meta()
local base_desc = minetest.registered_craftitems[stack:get_name()].microexpansion.base_desc local base_desc = minetest.registered_craftitems[stack:get_name()].microexpansion.base_desc
local max_slots = inv:get_size("main") local max_slots = inv:get_size("main")
local max_items = math.floor(max_slots * 99) local max_items = math.floor(max_slots * 99)
local slots, items = 0, 0 local slots, items = 0, 0
-- Get amount of items in drive -- Get amount of items in drive
for i = 1, max_items do for i = 1, max_items do
local stack = inv:get_stack("main", i) local stack = inv:get_stack("main", i)
local item = stack:get_name() local item = stack:get_name()
if item ~= "" then if item ~= "" then
slots = slots + 1 slots = slots + 1
local num = stack:get_count() local num = stack:get_count()
if num == 0 then num = 1 end if num == 0 then num = 1 end
items = items + num items = items + num
end end
end end
-- Calculate Percentage -- Calculate Percentage
local percent = math.floor(items / max_items * 100) local percent = math.floor(items / max_items * 100)
-- Update description -- Update description
meta:set_string("description", base_desc.."\n".. meta:set_string("description", base_desc.."\n"..
minetest.colorize("grey", tostring(items).."/"..tostring(max_items).." Items ("..tostring(percent).."%)")) minetest.colorize("grey", tostring(items).."/"..tostring(max_items).." Items ("..tostring(percent).."%)"))
-- Update stack -- Update stack
inv:set_stack(listname, spos, stack) inv:set_stack(listname, spos, stack)
end end
end end

@ -2,24 +2,24 @@
-- [drive] 8k -- [drive] 8k
microexpansion.register_cell("cell_8k", { microexpansion.register_cell("cell_8k", {
description = "8k ME Storage Cell", description = "8k ME Storage Cell",
capacity = 8000, capacity = 8000,
}) })
-- [drive] 16k -- [drive] 16k
microexpansion.register_cell("cell_16k", { microexpansion.register_cell("cell_16k", {
description = "16k ME Storage Cell", description = "16k ME Storage Cell",
capacity = 16000, capacity = 16000,
}) })
-- [drive] 32k -- [drive] 32k
microexpansion.register_cell("cell_32k", { microexpansion.register_cell("cell_32k", {
description = "32k ME Storage Cell", description = "32k ME Storage Cell",
capacity = 32000, capacity = 32000,
}) })
-- [drive] 64k -- [drive] 64k
microexpansion.register_cell("cell_64k", { microexpansion.register_cell("cell_64k", {
description = "64k ME Storage Cell", description = "64k ME Storage Cell",
capacity = 64000, capacity = 64000,
}) })

@ -2,9 +2,9 @@
-- [register tool] Pickaxe -- [register tool] Pickaxe
minetest.register_tool("microexpansion:xtremo_pickaxe", { minetest.register_tool("microexpansion:xtremo_pickaxe", {
description = "In Xtremo Pickaxe", description = "In Xtremo Pickaxe",
inventory_image = "microexpansion_in_xtremo_pickaxe.png", inventory_image = "microexpansion_in_xtremo_pickaxe.png",
tool_capabilities = { tool_capabilities = {
full_punch_interval = 0.9, full_punch_interval = 0.9,
max_drop_level=3, max_drop_level=3,
groupcaps={ groupcaps={
@ -16,9 +16,9 @@ minetest.register_tool("microexpansion:xtremo_pickaxe", {
-- [register tool] Axe -- [register tool] Axe
minetest.register_tool("microexpansion:xtremo_axe", { minetest.register_tool("microexpansion:xtremo_axe", {
description = "In Xtremo Axe", description = "In Xtremo Axe",
inventory_image = "microexpansion_in_xtremo_axe.png", inventory_image = "microexpansion_in_xtremo_axe.png",
tool_capabilities = { tool_capabilities = {
full_punch_interval = 0.9, full_punch_interval = 0.9,
max_drop_level=3, max_drop_level=3,
groupcaps={ groupcaps={