From 40c00d9094c8f86046f85d01c007e63f02385ca8 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 15 May 2016 05:59:38 +0100 Subject: [PATCH] Move crafting to new file. Start work on new airgen. Clean up functions --- crafting.lua | 124 +++++++++++++++++++++++++++++++++++++ functions.lua | 161 ++++++++++++++++++++++++------------------------ init.lua | 1 + nodes.lua | 166 +++++++++----------------------------------------- 4 files changed, 231 insertions(+), 221 deletions(-) create mode 100644 crafting.lua diff --git a/crafting.lua b/crafting.lua new file mode 100644 index 0000000..c27fa71 --- /dev/null +++ b/crafting.lua @@ -0,0 +1,124 @@ +-- Crafting + +minetest.register_craft({ + output = "moonrealm:airlock", + recipe = { + {"default:steel_ingot", "", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, + }, +}) + +minetest.register_craft({ + output = "moonrealm:airgen", + recipe = { + {"default:steel_ingot", "moonrealm:waterice", "default:steel_ingot"}, + {"moonrealm:waterice", "default:mese", "moonrealm:waterice"}, + {"default:steel_ingot", "moonrealm:waterice", "default:steel_ingot"}, + }, +}) + +minetest.register_craft({ + output = "default:water_source", + recipe = { + {"moonrealm:waterice"}, + }, +}) + +minetest.register_craft({ + output = "moonrealm:hlsource", + recipe = { + {"moonrealm:appleleaf", "moonrealm:appleleaf", "moonrealm:appleleaf"}, + {"moonrealm:appleleaf", "moonrealm:waterice", "moonrealm:appleleaf"}, + {"moonrealm:appleleaf", "moonrealm:appleleaf", "moonrealm:appleleaf"}, + }, +}) + +minetest.register_craft({ + output = "moonrealm:stonebrick 4", + recipe = { + {"moonrealm:stone", "moonrealm:stone"}, + {"moonrealm:stone", "moonrealm:stone"}, + } +}) + +minetest.register_craft({ + output = "default:furnace", + recipe = { + {"moonrealm:stone", "moonrealm:stone", "moonrealm:stone"}, + {"moonrealm:stone", "", "moonrealm:stone"}, + {"moonrealm:stone", "moonrealm:stone", "moonrealm:stone"}, + }, +}) + +minetest.register_craft({ + output = "moonrealm:stoneslab 4", + recipe = { + {"moonrealm:stone", "moonrealm:stone"}, + } +}) + +minetest.register_craft({ + output = "moonrealm:stonestair 4", + recipe = { + {"moonrealm:stone", ""}, + {"moonrealm:stone", "moonrealm:stone"}, + } +}) + +minetest.register_craft({ + output = "moonrealm:helmet", + recipe = { + {"default:mese_crystal"}, + {"default:glass"}, + {"default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "moonrealm:lifesupport", + recipe = { + {"default:steel_ingot","default:steel_ingot" , "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "moonrealm:spacesuit", + recipe = { + {"wool:white", "moonrealm:helmet", "wool:white"}, + {"", "moonrealm:lifesupport", ""}, + {"wool:white", "", "wool:white"}, + } +}) + +minetest.register_craft({ + output = "moonrealm:light 8", + recipe = { + {"moonrealm:glass", "moonrealm:glass", "moonrealm:glass"}, + {"moonrealm:glass", "default:mese", "moonrealm:glass"}, + {"moonrealm:glass", "moonrealm:glass", "moonrealm:glass"}, + }, +}) + +minetest.register_craft({ + type = "shapeless", + output = "moonrealm:light 1", + recipe = {"moonrealm:glass", "default:mese_crystal"}, +}) + + +-- Cooking + +minetest.register_craft({ + type = "cooking", + output = "moonrealm:glass", + recipe = "moonrealm:dust", +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:mese_crystal", + burntime = 50, +}) diff --git a/functions.lua b/functions.lua index b43d123..11e60cc 100644 --- a/functions.lua +++ b/functions.lua @@ -1,33 +1,37 @@ -- Space apple tree function moonrealm_appletree(pos) - local x = pos.x - local y = pos.y - local z = pos.z + local px = pos.x + local py = pos.y + local pz = pos.z local c_tree = minetest.get_content_id("default:tree") local c_apple = minetest.get_content_id("default:apple") local c_appleleaf = minetest.get_content_id("moonrealm:appleleaf") local c_soil = minetest.get_content_id("moonrealm:soil") - local c_lsair = minetest.get_content_id("moonrealm:air") + local c_air = minetest.get_content_id("moonrealm:air") local vm = minetest.get_voxel_manip() - local pos1 = {x = x - 2, y = y - 1, z = z - 2} - local pos2 = {x = x + 2, y = y + 4, z = z + 2} + local pos1 = {x = px - 2, y = py - 1, z = pz - 2} + local pos2 = {x = px + 2, y = py + 4, z = pz + 2} local emin, emax = vm:read_from_map(pos1, pos2) local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) local data = vm:get_data() -- check for soil - local vi = area:index(x, y - 1, z) - if data[vi] ~= c_soil then + if data[area:index(px, py - 1, pz)] ~= c_soil then + vm:set_data(data) + vm:write_to_map() return end - for j = 1, 4 do -- check for air - for k = -2, 2 do - local vi = area:index(x - 2, y + j, z + k) - for i = -2, 2 do - if data[vi] ~= c_lsair then + -- check for air + for z = pos1.z, pos2.z do + for y = py, pos2.y do + local vi = area:index(pos1.x, y, z) + for x = pos1.x, pos2.x do + if data[vi] ~= c_air then + vm:set_data(data) + vm:write_to_map() return end vi = vi + 1 @@ -35,13 +39,14 @@ function moonrealm_appletree(pos) end end - for j = 4, -1, -1 do - if j >= 2 or j <= 4 then - for k = -2, 2 do -- branches, leaves, apples underneath - local vi = area:index(x - 1, y + j, z + k) - local viu = area:index(x - 2, y + j - 1, z + k) - for i = -2, 2 do - if math.abs(i) + math.abs(k) == 2 then + for y = pos2.y, pos1.y, -1 do + if y >= py + 2 then + -- branches, leaves, apples underneath + for z = pos1.z, pos2.z do + local vi = area:index(pos1.x, y, z) + local viu = area:index(pos1.x, y - 1, z) + for x = pos1.x, pos2.x do + if math.abs(x - px) + math.abs(z - pz) == 2 then data[vi] = c_tree elseif math.random() < 0.8 then data[vi] = c_appleleaf @@ -53,8 +58,9 @@ function moonrealm_appletree(pos) viu = viu + 1 end end - else -- trunk - local vi = area:index(x, y + j, z) + else + -- trunk + local vi = area:index(px, y, pz) data[vi] = c_tree end end @@ -70,49 +76,43 @@ end -- Vacuum or air flows into a dug hole minetest.register_on_dignode(function(pos, oldnode, digger) - local x = pos.x - local y = pos.y - local z = pos.z - local c_lsair = minetest.get_content_id("moonrealm:air") + local px = pos.x + local py = pos.y + local pz = pos.z + local c_air = minetest.get_content_id("moonrealm:air") local c_vacuum = minetest.get_content_id("moonrealm:vacuum") local vm = minetest.get_voxel_manip() - local pos1 = {x = x - 1, y = y - 1, z = z - 1} - local pos2 = {x = x + 1, y = y + 1, z = z + 1} + local pos1 = {x = px - 1, y = py - 1, z = pz - 1} + local pos2 = {x = px + 1, y = py + 1, z = pz + 1} local emin, emax = vm:read_from_map(pos1, pos2) local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) local data = vm:get_data() - local vic = area:index(x, y, z) + local vip = area:index(px, py, pz) - for j = -1, 1 do - for k = -1, 1 do - local vi = area:index(x - 1, y + j, z + k) - for i = -1, 1 do - if not (i == 0 and j == 0 and k == 0) then - local nodid = data[vi] - if nodid == c_lsair then - local spread = minetest.get_meta({x = x + i, y = y + j, z = z + k}):get_int("spread") - if spread > 0 then - data[vic] = c_lsair - minetest.get_meta(pos):set_int("spread", (spread - 1)) - vm:set_data(data) - vm:write_to_map() - vm:update_map() - print ("[moonrealm] air flows into hole") - return - end + for z = pos1.z, pos2.z do + for y = pos1.y, pos2.y do + local vi = area:index(pos1.x, y, z) + for x = pos1.x, pos2.x do + if not (x == px and y == py and z == pz) then + if data[vi] == c_air then + data[vip] = c_air + vm:set_data(data) + vm:write_to_map() + print ("[moonrealm] air flows into hole") + return end end vi = vi + 1 end end end - data[vic] = c_vacuum + + data[vip] = c_vacuum vm:set_data(data) vm:write_to_map() - vm:update_map() print ("[moonrealm] vacuum flows into hole") end) @@ -120,7 +120,7 @@ end) -- Air spread ABM -minetest.register_abm({ +--[[minetest.register_abm({ nodenames = {"moonrealm:air"}, neighbors = {"moonrealm:vacuum"}, interval = 13, @@ -164,41 +164,39 @@ minetest.register_abm({ vm:set_data(data) vm:write_to_map() - vm:update_map() + --vm:update_map() not needed as no effect on lighting end -}) +})--]] -- Hydroponic saturation ABM minetest.register_abm({ - nodenames = {"moonrealm:hlsource"}, + nodenames = {"moonrealm:hlsource", "moonrealm:hlflowing"}, neighbors = {"moonrealm:dust", "moonrealm:dustprint1", "moonrealm:dustprint2"}, interval = 29, chance = 9, catch_up = false, action = function(pos, node, active_object_count, active_object_count_wider) - local x = pos.x - local y = pos.y - local z = pos.z - + local px = pos.x + local py = pos.y + local pz = pos.z local c_dust = minetest.get_content_id("moonrealm:dust") local c_dustp1 = minetest.get_content_id("moonrealm:dustprint1") local c_dustp2 = minetest.get_content_id("moonrealm:dustprint2") local c_soil = minetest.get_content_id("moonrealm:soil") local vm = minetest.get_voxel_manip() - local pos1 = {x = x - 2, y = y - 4, z = z - 2} - local pos2 = {x = x + 2, y = y, z = z + 2} + local pos1 = {x = px - 2, y = py, z = pz - 2} + local pos2 = {x = px + 2, y = py, z = pz + 2} local emin, emax = vm:read_from_map(pos1, pos2) local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) local data = vm:get_data() - for j = -4, 0 do - for k = -2, 2 do - local vi = area:index(x - 2, y + j, z + k) - for i = -2, 2 do - if not (i == 0 and j == 0 and k == 0) then + for z = pos1.z, pos2.z do + local vi = area:index(pos1.x, py, z) + for x = pos1.x, pos2.x do + if not (x == px and z == pz) then local nodid = data[vi] if nodid == c_dust or nodid == c_dustp1 @@ -210,11 +208,9 @@ minetest.register_abm({ vi = vi + 1 end end - end vm:set_data(data) vm:write_to_map() - vm:update_map() end }) @@ -227,40 +223,39 @@ minetest.register_abm({ chance = 9, catch_up = false, action = function(pos, node) - local x = pos.x - local y = pos.y - local z = pos.z + local px = pos.x + local py = pos.y + local pz = pos.z local c_dust = minetest.get_content_id("moonrealm:dust") local c_hlsource = minetest.get_content_id("moonrealm:hlsource") + local c_hlflowing = minetest.get_content_id("moonrealm:hlflowing") local vm = minetest.get_voxel_manip() - local pos1 = {x = x - 2, y = y, z = z - 2} - local pos2 = {x = x + 2, y = y + 4, z = z + 2} + local pos1 = {x = px - 2, y = py, z = pz - 2} + local pos2 = {x = px + 2, y = py, z = pz + 2} local emin, emax = vm:read_from_map(pos1, pos2) local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) local data = vm:get_data() - local vic = area:index(x, y, z) - for j = 0, 4 do - for k = -2, 2 do - local vi = area:index(x - 2, y + j, z + k) - for i = -2, 2 do - if not (i == 0 and j == 0 and k == 0) then - local nodid = data[vi] - if nodid == c_hlsource then - return - end + local vip = area:index(px, py, pz) + + for z = pos1.z, pos2.z do + local vi = area:index(pos1.x, py, z) + for x = pos1.x, pos2.x do + local nodid = data[vi] + if nodid == c_hlsource or nodid == c_hlflowing then + vm:set_data(data) + vm:write_to_map() + return end vi = vi + 1 end end - end - data[vic] = c_dust + data[vip] = c_dust vm:set_data(data) vm:write_to_map() - vm:update_map() print ("[moonrealm] soil dries") end, diff --git a/init.lua b/init.lua index 324833d..58d8f0e 100644 --- a/init.lua +++ b/init.lua @@ -103,6 +103,7 @@ local np_terblen = { -- Do files dofile(minetest.get_modpath("moonrealm") .. "/nodes.lua") +dofile(minetest.get_modpath("moonrealm") .. "/crafting.lua") dofile(minetest.get_modpath("moonrealm") .. "/functions.lua") diff --git a/nodes.lua b/nodes.lua index 19032e8..07e361e 100644 --- a/nodes.lua +++ b/nodes.lua @@ -1,3 +1,5 @@ +-- Nodes + minetest.register_node("moonrealm:stone", { description = "Moon Stone", tiles = {"moonrealm_stone.png"}, @@ -120,24 +122,37 @@ minetest.register_node("moonrealm:airgen", { groups = {cracky = 3}, sounds = default.node_sound_stone_defaults(), on_construct = function(pos) - local x = pos.x - local y = pos.y - local z = pos.z - for i = -1, 1 do - for j = -1, 1 do - for k = -1, 1 do - if not (i == 0 and j == 0 and k == 0) then - local nodename = minetest.get_node({x = x + i, y = y + j, z = z + k}).name - if nodename == "moonrealm:vacuum" then - minetest.add_node({x = x + i, y = y + j, z = z + k},{name="moonrealm:air"}) - minetest.get_meta({x = x + i, y = y + j, z = z + k}):set_int("spread", 16) - print ("[moonrealm] Added moonrealm air node") + local xa = pos.x + local ya = pos.y + local za = pos.z + + local c_air = minetest.get_content_id("moonrealm:air") + local c_vacuum = minetest.get_content_id("moonrealm:vacuum") + + local vm = minetest.get_voxel_manip() + local pos1 = {x = xa - 16, y = ya - 16, z = za - 16} + local pos2 = {x = xa + 16, y = ya + 16, z = za + 16} + local emin, emax = vm:read_from_map(pos1, pos2) + local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) + local data = vm:get_data() + + for z = pos1.z, pos2.z do + for y = pos1.y, pos2.y do + local vi = area:index(pos1.x, y, z) + for x = pos1.x, pos2.x do + if data[vi] == c_vacuum then + data[vi] = c_air end + vi = vi + 1 end end end - end + vm:set_data(data) + vm:write_to_map() + --vm:update_map() not needed as no effect on lighting + + print ("[moonrealm] air generated") end }) @@ -363,128 +378,3 @@ minetest.register_craftitem("moonrealm:lifesupport", { inventory_image = "moonrealm_lifesupport.png", groups = {not_in_creative_inventory = 1}, }) - --- Crafting - -minetest.register_craft({ - output = "moonrealm:airlock", - recipe = { - {"default:steel_ingot", "", "default:steel_ingot"}, - {"default:steel_ingot", "default:mese", "default:steel_ingot"}, - {"default:steel_ingot", "", "default:steel_ingot"}, - }, -}) - -minetest.register_craft({ - output = "moonrealm:airgen", - recipe = { - {"default:steel_ingot", "moonrealm:waterice", "default:steel_ingot"}, - {"moonrealm:waterice", "default:mese", "moonrealm:waterice"}, - {"default:steel_ingot", "moonrealm:waterice", "default:steel_ingot"}, - }, -}) - -minetest.register_craft({ - output = "default:water_source", - recipe = { - {"moonrealm:waterice"}, - }, -}) - -minetest.register_craft({ - output = "moonrealm:hlsource", - recipe = { - {"moonrealm:appleleaf", "moonrealm:appleleaf", "moonrealm:appleleaf"}, - {"moonrealm:appleleaf", "moonrealm:waterice", "moonrealm:appleleaf"}, - {"moonrealm:appleleaf", "moonrealm:appleleaf", "moonrealm:appleleaf"}, - }, -}) - -minetest.register_craft({ - output = "moonrealm:stonebrick 4", - recipe = { - {"moonrealm:stone", "moonrealm:stone"}, - {"moonrealm:stone", "moonrealm:stone"}, - } -}) - -minetest.register_craft({ - output = "default:furnace", - recipe = { - {"moonrealm:stone", "moonrealm:stone", "moonrealm:stone"}, - {"moonrealm:stone", "", "moonrealm:stone"}, - {"moonrealm:stone", "moonrealm:stone", "moonrealm:stone"}, - }, -}) - -minetest.register_craft({ - output = "moonrealm:stoneslab 4", - recipe = { - {"moonrealm:stone", "moonrealm:stone"}, - } -}) - -minetest.register_craft({ - output = "moonrealm:stonestair 4", - recipe = { - {"moonrealm:stone", ""}, - {"moonrealm:stone", "moonrealm:stone"}, - } -}) - -minetest.register_craft({ - output = "moonrealm:helmet", - recipe = { - {"default:mese_crystal"}, - {"default:glass"}, - {"default:steel_ingot"}, - } -}) - -minetest.register_craft({ - output = "moonrealm:lifesupport", - recipe = { - {"default:steel_ingot","default:steel_ingot" , "default:steel_ingot"}, - {"default:steel_ingot", "", "default:steel_ingot"}, - {"default:steel_ingot", "default:mese", "default:steel_ingot"}, - } -}) - -minetest.register_craft({ - output = "moonrealm:spacesuit", - recipe = { - {"wool:white", "moonrealm:helmet", "wool:white"}, - {"", "moonrealm:lifesupport", ""}, - {"wool:white", "", "wool:white"}, - } -}) - -minetest.register_craft({ - output = "moonrealm:light 8", - recipe = { - {"moonrealm:glass", "moonrealm:glass", "moonrealm:glass"}, - {"moonrealm:glass", "default:mese", "moonrealm:glass"}, - {"moonrealm:glass", "moonrealm:glass", "moonrealm:glass"}, - }, -}) - -minetest.register_craft({ - type = "shapeless", - output = "moonrealm:light 1", - recipe = {"moonrealm:glass", "default:mese_crystal"}, -}) - - --- Cooking - -minetest.register_craft({ - type = "cooking", - output = "moonrealm:glass", - recipe = "moonrealm:dust", -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:mese_crystal", - burntime = 50, -})