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
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)
minetest.register_node(name, definition)
@ -13,16 +137,90 @@ orion.register_slab_node = function(name, definition)
local upperDef = shallow_copy(definition)
lowerDef["paramtype"] = "light"
lowerDef["description"] = lowerDef["description"] or "" .. " (lower)"
lowerDef["drawtype"] = "nodebox"
lowerDef["node_box"] = {
type = "fixed",
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)
upperDef["paramtype"] = "light"
upperDef["description"] = upperDef["description"] or "".. " (upper)"
upperDef["drawtype"] = "nodebox"
upperDef["node_box"] = {
type = "fixed",
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)
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

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
})
local function populateCreativeInventory(player)
local inventory = player:get_inventory()
inventory:set_list("crafting", nil)
inventory:set_size("crafting", 500)
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
--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
local newTool = ItemStack(tools.name)
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",
tiles = {
"capacitor_top.png",
@ -16,8 +16,7 @@ orion.register_slab_node("sparkdebug:energyvoid", {
sparktech_techy = WRENCHABLE
}
})
orion.register_slab_node("sparkdebug:energysource", {
minetest.register_node("sparkdebug:energysource", {
description = "Energy Source",
tiles = {
"capacitor_top.png",

View File

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

View File

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