X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=mods%2Fnether%2Finit.lua;h=ab15282176c56b43447f5d4cb8b2d12d8b8c9edb;hb=48aa89197636250b3e494e9124c7c5c6e2d63dea;hp=7933c0a9eac6b5f19c846c461dadc383c7f80335;hpb=40a2cabd51da1b606a95b9a16324494340c6ab43;p=Crafter.git diff --git a/mods/nether/init.lua b/mods/nether/init.lua index 7933c0a..ab15282 100644 --- a/mods/nether/init.lua +++ b/mods/nether/init.lua @@ -1,227 +1,17 @@ -local nether_channel = minetest.mod_channel_join("nether_teleporters") +local nether_channels = {} + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + nether_channels[name] = minetest.mod_channel_join(name..":nether_teleporters") +end) local path = minetest.get_modpath("nether") dofile(path.."/schem.lua") - -minetest.register_biome({ - name = "Nether", - node_top = "air", - depth_top = 0, - node_filler = "air", - depth_filler = 0, - node_riverbed = "air", - depth_riverbed= 0, - node_stone = "air", - node_water = "air", - node_dungeon = "air", - node_dungeon_alt = "air", - node_dungeon_stair = "air", - vertical_blend = 0, - y_max = -10000, - y_min = -20000, - heat_point = -100, - humidity_point = -100, -}) - -minetest.register_node("nether:bedrock", { - description = "Bedrock", - tiles = {"bedrock.png"}, - groups = {unbreakable = 1, pathable = 1}, - sounds = main.stoneSound(), - is_ground_content = false, - --light_source = 14, --debugging -}) - - -minetest.register_node("nether:netherrack", { - description = "Netherrack", - tiles = {"netherrack.png"}, - groups = {netherrack = 1, pathable = 1}, - sounds = main.stoneSound(), - is_ground_content = false, - light_source = 7, - drop = { - max_items = 1, - items= { - { - rarity = 0, - tools = {"main:woodpick","main:stonepick","main:ironpick","main:goldpick","main:diamondpick"}, - items = {"nether:netherrack"}, - }, - }, - }, -}) - - -minetest.register_node("nether:obsidian", { - description = "Obsidian", - tiles = {"obsidian.png"}, - groups = {stone = 5, pathable = 1}, - --groups = {stone = 1, pathable = 1}, --leave this here for debug - sounds = main.stoneSound(), - is_ground_content = false, - after_destruct = function(pos, oldnode) - destroy_nether_portal(pos) - end, - --light_source = 7, -}) - ---this is from https://github.com/paramat/lvm_example/blob/master/init.lua ---hi paramat :D - --- Set the 3D noise parameters for the terrain. -local perlin= minetest.get_mapgen_params() -local np_terrain = { - offset = 0, - scale = 1, - spread = {x = 384, y = 192, z = 384}, - seed = 5900033, --perlin.seed - octaves = 5, - persist = 0.63, - lacunarity = 2.0, - --flags = "" -} - - --- Set singlenode mapgen (air nodes only). --- Disable the engine lighting calculation since that will be done for a --- mapchunk of air nodes and will be incorrect after we place nodes. - ---minetest.set_mapgen_params({mgname = "singlenode", flags = "nolight"}) - - --- Get the content IDs for the nodes used. - -local c_sandstone = minetest.get_content_id("nether:netherrack") -local c_bedrock = minetest.get_content_id("nether:bedrock") -local c_air = minetest.get_content_id("air") -local c_lava = minetest.get_content_id("main:lava") - - --- Initialize noise object to nil. It will be created once only during the --- generation of the first mapchunk, to minimise memory use. - -local nobj_terrain = nil - - --- Localise noise buffer table outside the loop, to be re-used for all --- mapchunks, therefore minimising memory use. - -local nvals_terrain = {} - - --- Localise data buffer table outside the loop, to be re-used for all --- mapchunks, therefore minimising memory use. - -local data = {} - - --- On generated function. - --- 'minp' and 'maxp' are the minimum and maximum positions of the mapchunk that --- define the 3D volume. -minetest.register_on_generated(function(minp, maxp, seed) - --nether starts at -10033 y - if maxp.y > -10033 then - return - end - -- Start time of mapchunk generation. - --local t0 = os.clock() - - -- Noise stuff. - - -- Side length of mapchunk. - local sidelen = maxp.x - minp.x + 1 - -- Required dimensions of the 3D noise perlin map. - local permapdims3d = {x = sidelen, y = sidelen, z = sidelen} - -- Create the perlin map noise object once only, during the generation of - -- the first mapchunk when 'nobj_terrain' is 'nil'. - nobj_terrain = minetest.get_perlin_map(np_terrain, permapdims3d) --nobj_terrain or - -- Create a flat array of noise values from the perlin map, with the - -- minimum point being 'minp'. - -- Set the buffer parameter to use and reuse 'nvals_terrain' for this. - nobj_terrain:get3dMap_flat(minp, nvals_terrain) - - -- Voxelmanip stuff. - - -- Load the voxelmanip with the result of engine mapgen. Since 'singlenode' - -- mapgen is used this will be a mapchunk of air nodes. - local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") - -- 'area' is used later to get the voxelmanip indexes for positions. - local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax} - -- Get the content ID data from the voxelmanip in the form of a flat array. - -- Set the buffer parameter to use and reuse 'data' for this. - vm:get_data(data) - - -- Generation loop. - - -- Noise index for the flat array of noise values. - local ni = 1 - -- Process the content IDs in 'data'. - -- The most useful order is a ZYX loop because: - -- 1. This matches the order of the 3D noise flat array. - -- 2. This allows a simple +1 incrementing of the voxelmanip index along x - -- rows. - -- rows. - for z = minp.z, maxp.z do - for y = minp.y, maxp.y do - -- Voxelmanip index for the flat array of content IDs. - -- Initialise to first node in this x row. - local vi = area:index(minp.x, y, z) - for x = minp.x, maxp.x do - -- Consider a 'solidness' value for each node, - -- let's call it 'density', where - -- density = density noise + density gradient. - local density_noise = nvals_terrain[ni] - -- Density gradient is a value that is 0 at water level (y = 1) - -- and falls in value with increasing y. This is necessary to - -- create a 'world surface' with only solid nodes deep underground - -- and only air high above water level. - -- Here '128' determines the typical maximum height of the terrain. - local density_gradient = (1 - y) / 128 - - --print(density_noise, density_gradient) - -- Place solid nodes when 'density' > 0. - --if density_noise + density_gradient > 0 then - if density_noise > 0 and y ~= -10033 then - data[vi] = c_sandstone - -- Otherwise if at or below water level place water. - elseif y == -10033 then - data[vi] = c_bedrock - --elseif y <= 1 then - -- data[vi] = c_water - elseif y > -15000 then - data[vi] = c_air - else - data[vi] = c_lava - end - - -- Increment noise index. - ni = ni + 1 - -- Increment voxelmanip index along x row. - -- The voxelmanip index increases by 1 when - -- moving by 1 node in the +x direction. - vi = vi + 1 - end - end - end - - -- After processing, write content ID data back to the voxelmanip. - vm:set_data(data) - -- Calculate lighting for what has been created. - --vm:calc_lighting() - - vm:set_lighting({day=7,night=7}, minp, maxp) - - -- Write what has been created to the world. - vm:write_to_map() - -- Liquid nodes were placed so set them flowing. - --vm:update_liquids() - - -- Print generation time of this mapchunk. - --local chugent = math.ceil((os.clock() - t0) * 1000) - --print ("[lvm_example] Mapchunk generation time " .. chugent .. " ms") -end) +dofile(path.."/nodes.lua") +dofile(path.."/biomes.lua") +dofile(path.."/craft_recipes.lua") +dofile(path.."/ore.lua") +dofile(path.."/items.lua") minetest.register_node("nether:portal", { @@ -490,9 +280,9 @@ local function teleport_to_overworld(blockpos, action, calls_remaining, param) if calls_remaining == 0 then local portal_exists = minetest.find_node_near(nether_origin_pos, 30, {"nether:portal"}) if portal_exists then - print(teleporting_player) + --print(teleporting_player) if teleporting_player then - teleporting_player:set_pos(portal_exists) + teleporting_player:set_pos(vector.new(portal_exists.x,portal_exists.y-0.5,portal_exists.z)) end end teleporting_player = nil @@ -502,9 +292,9 @@ local function teleport_to_nether(blockpos, action, calls_remaining, param) if calls_remaining == 0 then local portal_exists = minetest.find_node_near(nether_origin_pos, 30, {"nether:portal"}) if portal_exists then - print(teleporting_player) + --print(teleporting_player) if teleporting_player then - teleporting_player:set_pos(portal_exists) + teleporting_player:set_pos(vector.new(portal_exists.x,portal_exists.y-0.5,portal_exists.z)) end end teleporting_player = nil @@ -513,7 +303,8 @@ end --this initializes all teleporter commands from the client minetest.register_on_modchannel_message(function(channel_name, sender, message) - if channel_name == "nether_teleporters" then + local channel_decyphered = channel_name:gsub(sender,"") + if channel_decyphered == ":nether_teleporters" then local player = minetest.get_player_by_name(sender) local pos = player:get_pos()