Compare commits

...

6 Commits

15 changed files with 333 additions and 54 deletions

View File

@ -6,6 +6,130 @@ function shallow_copy(table)
return newTable return newTable
end end
local maskName = "orionapi"
local opaqueNodes = {}
-- slabtypes
SLAB_NONE = 0
SLAB_LOWER = 1
SLAB_UPPER = 2
SLAB_COMBO = 3
local placeCombinedNode = function(position, secondNode)
end
local onPlace = function(itemstack, placer, pointed_thing)
if not pointed_thing.type == "node" then return minetest.item_place(itemstack, player, pointed_thing) end
local under = pointed_thing.under
local above = pointed_thing.above
if above.y == under.y +1 then -- looking from above
local pointedNode = minetest.get_node(under)
local newSlabName = itemstack:get_name()
if minetest.registered_nodes[pointedNode.name] and
minetest.registered_nodes[pointedNode.name].groups and
minetest.registered_nodes[pointedNode.name].groups.orion_slabtype == SLAB_LOWER then
if pointedNode.name == newSlabName then -- Same slabs twice, place the normal block
minetest.swap_node(under, {name = pointedNode.name:gsub("%_lower", "")})
return itemstack:take_item(itemstack:get_count() -1)
else
local lowerName = pointedNode.name:gsub("%_lower", "")
lowerName = lowerName:gsub(":", "_")
local upperName = newSlabName:gsub("%_lower", "")
upperName = upperName:gsub(":", "_")
local nodeName = maskName .. ":" .. upperName .. "_" .. lowerName
if minetest.registered_nodes[nodeName] then
minetest.swap_node(under, {name = nodeName})
return itemstack:take_item(itemstack:get_count() -1)
end
end
else
local otherNode = minetest.get_node(above)
local newSlabName = itemstack:get_name()
if minetest.registered_nodes[otherNode.name] and
minetest.registered_nodes[otherNode.name].groups and
minetest.registered_nodes[otherNode.name].groups.orion_slabtype == SLAB_UPPER then
if otherNode.name:gsub("%_upper", "_lower") == newSlabName then -- Same slabs twice, place the normal block
minetest.swap_node(above, {name = otherNode.name:gsub("%_upper", "")})
return itemstack:take_item(itemstack:get_count() -1)
else
local upperName = otherNode.name:gsub("%_upper", "")
upperName = upperName:gsub(":", "_")
local lowerName = newSlabName:gsub("%_lower", "")
lowerName = lowerName:gsub(":", "_")
local nodeName = maskName .. ":" .. upperName .. "_" .. lowerName
if minetest.registered_nodes[nodeName] then
minetest.swap_node(above, {name = nodeName})
return itemstack:take_item(itemstack:get_count() -1)
end
end
end
end
elseif above.y == under.y -1 then -- pointed to lower side
local pointedNode = minetest.get_node(under)
local newSlabName = itemstack:get_name()
if minetest.registered_nodes[pointedNode.name] and
minetest.registered_nodes[pointedNode.name].groups and
minetest.registered_nodes[pointedNode.name].groups.orion_slabtype == SLAB_UPPER then
if pointedNode.name:gsub("%_upper", "_lower") == newSlabName then -- Same slabs twice, place the normal block
minetest.swap_node(under, {name = pointedNode.name:gsub("%_upper", "")})
return itemstack:take_item(itemstack:get_count() -1)
else
local upperName = pointedNode.name:gsub("%_upper", "")
upperName = upperName:gsub(":", "_")
local lowerName = newSlabName:gsub("%_lower", "")
lowerName = lowerName:gsub(":", "_")
local nodeName = maskName .. ":" .. upperName .. "_" .. lowerName
if minetest.registered_nodes[nodeName] then
minetest.swap_node(under, {name = nodeName})
return itemstack:take_item(itemstack:get_count() -1)
end
end
else
local otherNode = minetest.get_node(above)
local newSlabName = itemstack:get_name()
if minetest.registered_nodes[otherNode.name] and
minetest.registered_nodes[otherNode.name].groups and
minetest.registered_nodes[otherNode.name].groups.orion_slabtype == SLAB_LOWER then
if otherNode.name == newSlabName then -- Same slabs twice, place the normal block
minetest.swap_node(above, {name = otherNode.name:gsub("%_lower", "")})
return itemstack:take_item(itemstack:get_count() -1)
else
local upperName = otherNode.name:gsub("%_lower", "")
upperName = upperName:gsub(":", "_")
local lowerName = newSlabName:gsub("%_lower", "")
lowerName = lowerName:gsub(":", "_")
local nodeName = maskName .. ":" .. lowerName .. "_" .. upperName
if minetest.registered_nodes[nodeName] then
minetest.swap_node(above, {name = nodeName})
return itemstack:take_item(itemstack:get_count() -1)
end
end
else
if otherNode.name == "air" then
local newName = newSlabName:gsub("%_lower", "_upper")
minetest.set_node(above, {name = newName})
return itemstack:take_item(itemstack:get_count() -1)
end
end
end
else -- any side was targeted
-- if there is an "upper" variant here, place an upper variant
-- if there is a normal node here try to determin magically weather to place upper or lower
end
return minetest.item_place(itemstack, player, pointed_thing)
end
orion.register_slab_node = function(name, definition) orion.register_slab_node = function(name, definition)
minetest.register_node(name, definition) minetest.register_node(name, definition)
@ -13,16 +137,90 @@ orion.register_slab_node = function(name, definition)
local upperDef = shallow_copy(definition) local upperDef = shallow_copy(definition)
lowerDef["paramtype"] = "light" lowerDef["paramtype"] = "light"
lowerDef["description"] = lowerDef["description"] or "" .. " (lower)"
lowerDef["drawtype"] = "nodebox" lowerDef["drawtype"] = "nodebox"
lowerDef["node_box"] = { lowerDef["node_box"] = {
type = "fixed", type = "fixed",
fixed = {-0.50, -0.50, -0.50, 0.50, 0.00, 0.50} } fixed = {-0.50, -0.50, -0.50, 0.50, 0.00, 0.50} }
lowerDef["on_place"] = onPlace
local lowerGroups = shallow_copy(definition["groups"])
lowerDef.node_placement_prediction = "air"
lowerGroups.orion_slabtype = SLAB_LOWER
lowerDef["groups"] = lowerGroups
minetest.register_node(name .. "_lower", lowerDef) minetest.register_node(name .. "_lower", lowerDef)
upperDef["paramtype"] = "light" upperDef["paramtype"] = "light"
upperDef["description"] = upperDef["description"] or "".. " (upper)"
upperDef["drawtype"] = "nodebox" upperDef["drawtype"] = "nodebox"
upperDef["node_box"] = { upperDef["node_box"] = {
type = "fixed", type = "fixed",
fixed = {-0.50, 0.00, -0.50, 0.50, 0.50, 0.50 } } fixed = {-0.50, 0.00, -0.50, 0.50, 0.50, 0.50 } }
upperDef["drop"] = {
max_items = 1,
items = {
{ items = { name .. "_lower" } }
}
}
local upperGroups = shallow_copy(definition["groups"])
upperGroups.not_in_creative_inventory = 1
upperGroups.orion_slabtype = SLAB_UPPER
upperDef["groups"] = upperGroups
minetest.register_node(name .. "_upper", upperDef) minetest.register_node(name .. "_upper", upperDef)
name = string.gsub(name, ":","_")
if definition.drawtype ~= "glasslike" and definition.drawtype ~= "allfaces_optional" then
for secondName, secondDefinition in pairs(opaqueNodes) do
local secondUpper = shallow_copy(definition)
local secondLower = shallow_copy(definition)
local escapedName = string.gsub(secondName, ":", "_")
local firstTiles = shallow_copy(definition["tiles"])
if #firstTiles == 1 then
firstTiles[2] = firstTiles[1]
firstTiles[3] = firstTiles[1]
firstTiles[4] = firstTiles[1]
firstTiles[5] = firstTiles[1]
firstTiles[6] = firstTiles[1]
end
local secondTiles = shallow_copy(secondDefinition["tiles"])
if #secondTiles == 1 then
secondTiles[2] = secondTiles[1]
secondTiles[3] = secondTiles[1]
secondTiles[4] = secondTiles[1]
secondTiles[5] = secondTiles[1]
secondTiles[6] = secondTiles[1]
end
secondLower["tiles"] = {
firstTiles[1],
secondTiles[2],
firstTiles[3] .. "^[lowpart:50:" .. secondTiles[3],
firstTiles[4] .. "^[lowpart:50:" .. secondTiles[4],
firstTiles[5] .. "^[lowpart:50:" .. secondTiles[5],
firstTiles[6] .. "^[lowpart:50:" .. secondTiles[6],
}
secondUpper["tiles"] = {
secondTiles[1],
firstTiles[2],
secondTiles[3] .. "^[lowpart:50:" .. firstTiles[3],
secondTiles[4] .. "^[lowpart:50:" .. firstTiles[4],
secondTiles[5] .. "^[lowpart:50:" .. firstTiles[5],
secondTiles[6] .. "^[lowpart:50:" .. firstTiles[6],
}
local groups = shallow_copy(definition["groups"])
local secondGroup = shallow_copy(definition["groups"])
for key, value in pairs(secondGroup) do
if not groups[key] then groups[key] = value end
end
groups.not_in_creative_inventory = 1
groups.orion_slabtype = SLAB_COMBO
secondLower.groups = groups
secondLower.description = definition["description"] .. " (upper)\n" .. secondDefinition["description"] .. " (lower)"
minetest.register_node(":" ..maskName .. ":" .. name .. "_" .. escapedName, secondLower)
secondUpper.groups = groups
secondUpper.description = secondDefinition["description"] .. " (upper)\n" .. definition["description"] .. " (lower)"
minetest.register_node(":" ..maskName .. ":" .. escapedName .. "_" .. name, secondUpper)
end
opaqueNodes[name] = definition
end
end end

View File

@ -0,0 +1 @@
orionapi

13
mods/orionbuild/init.lua Normal file
View File

@ -0,0 +1,13 @@
local NAME = minetest.get_current_modname()
local PATH = minetest.get_modpath(NAME) .."/lua/"
local MODFILES = minetest.get_dir_list(PATH, false)
spacenum = 20 - string.len(NAME)
-- This assumes that the lua/ subdir contains lua code only.
for i=1,table.getn(MODFILES),1
do
minetest.debug(""..NAME .. string.rep(" ",spacenum) .."load " .. MODFILES[i])
dofile(PATH .. MODFILES[i])
end

View File

@ -0,0 +1,10 @@
NAME = minetest:get_current_modname()
local bricks = {"copper", "gold", "iron", "nickel", "stone", "stone2"}
for key, brickName in pairs(bricks) do
orion.register_slab_node(NAME .. ":" .. brickName .. "_brick", {
tiles = { NAME .. "_" .. brickName .. "_brick.png" },
groups = { solids = 3 },
paramtype2 = "facedir",
})
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

View File

@ -98,16 +98,16 @@ minetest.register_chatcommand("resetscale", {
end end
}) })
local function populateCreativeInventory(player) local function populateCreativeInventory(player)
local inventory = player:get_inventory() local inventory = player:get_inventory()
inventory:set_list("crafting", nil) inventory:set_list("crafting", nil)
inventory:set_size("crafting", 500) inventory:set_size("crafting", 500)
for name, node in pairs(minetest.registered_nodes) do for name, node in pairs(minetest.registered_nodes) do
inventory:add_item("crafting", ItemStack(node.name .. " 256")) if node.groups.not_in_creative_inventory ~= 1 then
inventory:add_item("crafting", ItemStack(node.name .. " 256"))
end
end end
--for name, item in pairs(minetest.registered_items) do
-- inventory:add_item("crafting", ItemStack(item.name .. " 256"))
--end
for name, tools in pairs(minetest.registered_tools) do for name, tools in pairs(minetest.registered_tools) do
local newTool = ItemStack(tools.name) local newTool = ItemStack(tools.name)
local meta = newTool:get_meta() local meta = newTool:get_meta()

View File

@ -0,0 +1 @@
orionapi

View File

@ -1,4 +1,4 @@
orion.register_slab_node("sparkdebug:energyvoid", { minetest.register_node("sparkdebug:energyvoid", {
description = "Energy Void", description = "Energy Void",
tiles = { tiles = {
"capacitor_top.png", "capacitor_top.png",
@ -16,8 +16,7 @@ orion.register_slab_node("sparkdebug:energyvoid", {
sparktech_techy = WRENCHABLE sparktech_techy = WRENCHABLE
} }
}) })
minetest.register_node("sparkdebug:energysource", {
orion.register_slab_node("sparkdebug:energysource", {
description = "Energy Source", description = "Energy Source",
tiles = { tiles = {
"capacitor_top.png", "capacitor_top.png",

View File

@ -23,31 +23,31 @@ local function process(itemstack, curr, node)
end end
minetest.register_chatcommand("fillblock", { minetest.register_chatcommand("fillblock", {
desc = "Set the fill block for the Land Clear tool", desc = "Set the fill block for the Land Clear tool",
params = "nodestring", params = "nodestring",
func = function (name, param) func = function (name, param)
local player = minetest.get_player_by_name(name) local player = minetest.get_player_by_name(name)
if player then if player then
player:set_attribute("sparkdebug_clearnode", param) player:set_attribute("sparkdebug_clearnode", param)
return true, "It is done." return true, "It is done."
else else
return false, "Player not online." return false, "Player not online."
end end
end end
}) })
minetest.register_tool("sparkdebug:landclear", { minetest.register_tool("sparkdebug:landclear", {
description = "Land Clear", description = "Land Clear",
inventory_image = "landclear.png", inventory_image = "landclear.png",
stack_max = 1, stack_max = 1,
range = 50.0, range = 50.0,
on_use = function(itemstack, player, pointed_thing) on_use = function(itemstack, player, pointed_thing)
if pointed_thing["type"] == "node" then if pointed_thing["type"] == "node" then
return process(itemstack, pointed_thing.under, player:get_attribute("sparkdebug_clearnode") or "air") return process(itemstack, pointed_thing.under, player:get_attribute("sparkdebug_clearnode") or "air")
end end
return itemstack return itemstack
end, end,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
return process(itemstack, placer:get_pos(), placer:get_attribute("sparkdebug_clearnode") or "air") return process(itemstack, placer:get_pos(), placer:get_attribute("sparkdebug_clearnode") or "air")
end end
}) })

View File

@ -1,37 +1,87 @@
local NAME = minetest.get_current_modname() local NAME = minetest.get_current_modname()
local MAX_ENERGY = 30 local MAX_ENERGY = 40
local timer = function(pos, elapsed, light_level) local setEnergyLevelNode = function(pos)
local meta = minetest.get_meta(pos)
energy = meta:get_int("energy")
local light_level = sparktech.getoption(pos, "light_level")
local enabled = sparktech.getoption(pos, "enabled")
local maxLevel = math.floor(energy / 10)
if not enabled then maxLevel = 0 end
local level = math.min(light_level, maxLevel)
if level == 0 then
minetest.swap_node(pos, {name = NAME .. ":light_off"})
elseif level == 1 then
minetest.swap_node(pos, {name = NAME .. ":light_lv1"})
elseif level == 2 then
minetest.swap_node(pos, {name = NAME .. ":light_lv2"})
elseif level == 3 then
minetest.swap_node(pos, {name = NAME .. ":light_lv3"})
end
return level
end
local optionsChanged = function(pos, name)
local timer = minetest.get_node_timer(pos)
if name == "enabled" then
if sparktech.getoption(pos, name) then
setEnergyLevelNode(pos)
timer:start(1.0)
else
minetest.swap_node(pos, {name = NAME .. ":light_off"})
timer:stop()
end
end
if name == "light_level" then
if setEnergyLevelNode(pos) > 0 then
timer:start(1.0)
else
timer:stop()
end
end
end
local op_punch = function(pos)
local lightLevel = sparktech.getoption(pos, "light_level")
lightLevel = lightLevel -1
if lightLevel == -1 then lightLevel = 3 end
sparktech.setoption(pos, "light_level", lightLevel)
end
local timer = function(pos, elapsed, energyDrain)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local energy = meta:get_int("energy") local energy = meta:get_int("energy")
if energy >= light_level or not sparktech.getoption(pos, "enabled") then if sparktech.getoption(pos, "enabled") then
energy = energy - light_level energy = energy - energyDrain
meta:set_int("energy", energy) meta:set_int("energy", energy)
else else
minetest.swap_node(pos, {name = NAME .. ":light_off"}) minetest.swap_node(pos, {name = NAME .. ":light_off"})
minetest.get_node_timer(pos):start(1.0) -- TODO: energy wakeup? minetest.get_node_timer(pos):start(1.0) -- TODO: energy wakeup?
return return
end end
if energy <= light_level then setEnergyLevelNode(pos, 3)
minetest.swap_node(pos, {name = NAME .. ":light_off"})
elseif energy < 10 then
minetest.swap_node(pos, {name = NAME .. ":light_lv1"})
elseif energy < 20 then
minetest.swap_node(pos, {name = NAME .. ":light_lv2"})
else
minetest.swap_node(pos, {name = NAME .. ":light_lv3"})
end
minetest.get_node_timer(pos):start(1.0) -- TODO: energy wakeup? minetest.get_node_timer(pos):start(1.0) -- TODO: energy wakeup?
end end
minetest.register_node(NAME .. ":light_off", { minetest.register_node(NAME .. ":light_off", {
description = "Unpowered light", description = "Unpowered light",
tiles = { tiles = {
NAME .. "_lamp_off.png", NAME .. "_lamp_off.png",
}, },
on_timer = function(pos, elapsed) timer(pos, elapsed, 0) end, on_timer = function(pos, elapsed) timer(pos, elapsed, 0) end,
on_construct = function(pos, elapsed) timer(pos, elapsed, 0) end, on_construct = function(pos, elapsed) timer(pos, elapsed, 0) end,
on_punch = op_punch,
groups = { groups = {
sparktech_techy = WRENCHABLE, sparktech_techy = WRENCHABLE,
sparktech_energy_type = ENERGY_CONSUMER, sparktech_energy_type = ENERGY_CONSUMER,
@ -42,7 +92,7 @@ minetest.register_node(NAME .. ":light_off", {
}, },
_sparkoption = { _sparkoption = {
enabled = true, enabled = true,
light_level = 0 light_level = 3
}, },
_sparkoutput = { _sparkoutput = {
brightness = function(node) return 0 end brightness = function(node) return 0 end
@ -50,6 +100,7 @@ minetest.register_node(NAME .. ":light_off", {
_sparkoutputtype = { _sparkoutputtype = {
brightness = type(0) brightness = type(0)
}, },
_sparkoptionchanged = optionsChanged,
light_source = 0 light_source = 0
}) })
@ -61,6 +112,7 @@ minetest.register_node(NAME .. ":light_lv1", {
}, },
on_timer = function(pos, elapsed) timer(pos, elapsed, 1) end, on_timer = function(pos, elapsed) timer(pos, elapsed, 1) end,
on_construct = function(pos, elapsed) timer(pos, elapsed, 1) end, on_construct = function(pos, elapsed) timer(pos, elapsed, 1) end,
on_punch = op_punch,
groups = { groups = {
sparktech_techy = WRENCHABLE, sparktech_techy = WRENCHABLE,
sparktech_energy_type = ENERGY_CONSUMER, sparktech_energy_type = ENERGY_CONSUMER,
@ -71,7 +123,7 @@ minetest.register_node(NAME .. ":light_lv1", {
}, },
_sparkoption = { _sparkoption = {
enabled = true, enabled = true,
light_level = 0 light_level = 3
}, },
_sparkoutput = { _sparkoutput = {
brightness = function(node) return 1 end brightness = function(node) return 1 end
@ -79,6 +131,7 @@ minetest.register_node(NAME .. ":light_lv1", {
_sparkoutputtype = { _sparkoutputtype = {
brightness = type(1) brightness = type(1)
}, },
_sparkoptionchanged = optionsChanged,
drop = NAME .. ":light_off", drop = NAME .. ":light_off",
light_source = minetest.LIGHT_MAX / 3 light_source = minetest.LIGHT_MAX / 3
}) })
@ -91,6 +144,7 @@ minetest.register_node(NAME .. ":light_lv2", {
}, },
on_timer = function(pos, elapsed) timer(pos, elapsed, 2) end, on_timer = function(pos, elapsed) timer(pos, elapsed, 2) end,
on_construct = function(pos, elapsed) timer(pos, elapsed, 2) end, on_construct = function(pos, elapsed) timer(pos, elapsed, 2) end,
on_punch = op_punch,
groups = { groups = {
sparktech_techy = WRENCHABLE, sparktech_techy = WRENCHABLE,
sparktech_energy_type = ENERGY_CONSUMER, sparktech_energy_type = ENERGY_CONSUMER,
@ -101,7 +155,7 @@ minetest.register_node(NAME .. ":light_lv2", {
}, },
_sparkoption = { _sparkoption = {
enabled = true, enabled = true,
light_level = 0 light_level = 3
}, },
_sparkoutput = { _sparkoutput = {
brightness = function(node) return 2 end brightness = function(node) return 2 end
@ -109,6 +163,7 @@ minetest.register_node(NAME .. ":light_lv2", {
_sparkoutputtype = { _sparkoutputtype = {
brightness = type(2) brightness = type(2)
}, },
_sparkoptionchanged = optionsChanged,
drop = NAME .. ":light_off", drop = NAME .. ":light_off",
light_source = (2 *minetest.LIGHT_MAX /3) light_source = (2 *minetest.LIGHT_MAX /3)
}) })
@ -120,7 +175,8 @@ minetest.register_node(NAME .. ":light_lv3", {
NAME .. "_lamp_3.png", NAME .. "_lamp_3.png",
}, },
on_timer = function(pos, elapsed) timer(pos, elapsed, 3) end, on_timer = function(pos, elapsed) timer(pos, elapsed, 3) end,
on_construct = function(pos, elapsed) timer(pos, elapsed, 3) end, on_construct = function(pos, elapsed) timer(pos, elapsed, 3) end,
on_punch = op_punch,
groups = { groups = {
sparktech_techy = WRENCHABLE, sparktech_techy = WRENCHABLE,
sparktech_energy_type = ENERGY_CONSUMER, sparktech_energy_type = ENERGY_CONSUMER,
@ -131,7 +187,7 @@ minetest.register_node(NAME .. ":light_lv3", {
}, },
_sparkoption = { _sparkoption = {
enabled = true, enabled = true,
light_level = 0 light_level = 3
}, },
_sparkoutput = { _sparkoutput = {
brightness = function(node) return 3 end brightness = function(node) return 3 end
@ -139,6 +195,7 @@ minetest.register_node(NAME .. ":light_lv3", {
_sparkoutputtype = { _sparkoutputtype = {
brightness = type(3) brightness = type(3)
}, },
_sparkoptionchanged = optionsChanged,
drop = NAME .. ":light_off", drop = NAME .. ":light_off",
light_source = minetest.LIGHT_MAX light_source = minetest.LIGHT_MAX
}) })