Share Your WorldEdit Files!

User avatar
Eris
Member
Posts: 175
Joined: Thu Nov 19, 2020 23:12
IRC: definitelya Ovalo
In-game: Eris_still_crafts

Re: Share Your WorldEdit Files!

by Eris » Post

Candyland - Source

map converted from Minecraft with mcimport tool from sofar, I just restored it from the many errors during importing. All houses have an interior.

To use the map:
  1. mods: abriglass, abripanes, basic_materials, bedrock, biome_lib, carpet, crops, flowerpot, hardenedclay, lapis, mesecons, nether, plantlife_modpack*, quartz, signs_lib, xdecor;
    *in the modpack, delete the mods dryplants, along_shore, molehills, woodsoils, bushes, bushes_classic, youngtrees, 3dmushrooms, cavestuff, poisonivy, trunks;
  2. To avoid getting the map overrun by weeds and pesky sunflowers, turn off their generation and spread in plantlife_modpack mods (ferns, flowers_plus, nature_classic, vines); replace the contents of each file, respectively:
    • paste this in .../worldmods/plantlife_modpack/ferns/settings.lua
      Spoiler

      Code: Select all

      -- In case you don't wanna have errors:
      
      -- Only change what's behind a "=" (or "--").
      -- Don't use caps (behind a "=").
      
      -- If there's a "false" (behind a "=") you can change it to "true" (and the other way around).
      -- Spelling is important.
      -- If "true" or "false" is necessary as setting, everything(!) which is not spelled "true" will be read as if it were "false" (even "1", "True"...)
      
      -- If you wanna comment something (for example to remember the default value), you can do this by putting "--" in front of the comment.
      -- You can put "--" at the end of a line with "=" in it, or at the beginning of an empty/new line (minetest will ignore what's behind it then).
      -- But don't put "--" in front of a line with "=" in it (or else minetest will ignore the setting and you might get an error).
      
      -- If something is still unclear, don't hesitate to post your question @ https://forum.minetest.net/viewtopic.php?id=6921
      
      abstract_ferns.config = {}
      
      -- Which plants should generate/spawn?
      abstract_ferns.config.enable_lady_fern			= false		--Eris changed from default value = true
      abstract_ferns.config.enable_horsetails			= false		--Eris changed from default value = true
      abstract_ferns.config.enable_treefern			= true
      abstract_ferns.config.enable_giant_treefern		= false		--Eris changed from default value = true
      
      -- Where should they generate/spawn? (if they generate/spawn)
      --
      --  Lady-Fern
      abstract_ferns.config.lady_ferns_near_tree = true
      abstract_ferns.config.lady_ferns_near_rock = true
      abstract_ferns.config.lady_ferns_near_ores = true				-- if there's a bunch of ferns there's ores nearby, this one causes a huge fps drop
      abstract_ferns.config.lady_ferns_in_groups = false				-- this one is meant as a replacement of Ferns_near_Ores: ferns tend to generate in groups, less fps drop, no hint for nearby ores
      --
      --	Horsetails
      abstract_ferns.config.enable_horsetails_spawning	= false		-- horsetails will grow in already explored areas, over time, near water or gravel
      abstract_ferns.config.enable_horsetails_on_grass	= true		-- on dirt with grass and swamp (sumpf mod)
      abstract_ferns.config.enable_horsetails_on_stones	= true		-- on gravel, mossy cobble and silex (stoneage mod)
      --
      -- Tree_Fern
      abstract_ferns.config.enable_treeferns_in_jungle	= false				--Eris changed from default value = true
      abstract_ferns.config.enable_treeferns_in_oases		= false		-- for oases and tropical beaches|--Eris changed from default value = true
      --
      -- Giant_Tree_Fern
      abstract_ferns.config.enable_giant_treeferns_in_jungle	= true
      abstract_ferns.config.enable_giant_treeferns_in_oases	= true	-- for oases and tropical beaches
    • paste this in .../worldmods/plantlife_modpack/flowers_plus/init.lua
      Spoiler

      Code: Select all

      -- support for i18n
      local S = minetest.get_translator("flowers_plus")
      
      -- This file supplies a few additional plants and some related crafts
      -- for the plantlife modpack.  Last revision:  2013-04-24
      
      flowers_plus = {}
      
      local SPAWN_DELAY = 1000
      local SPAWN_CHANCE = -1		--Eris changed from default value = 200
      local flowers_seed_diff = 329
      local lilies_max_count = -1		--Eris changed from default value = 320
      local lilies_rarity = 33
      local seaweed_max_count = -1		--Eris changed from default value = 320
      local seaweed_rarity = 33
      local sunflowers_max_count = -1		--Eris changed from default value = 10
      local sunflowers_rarity = 25
      
      -- register the various rotations of waterlilies
      
      local lilies_list = {
      	{ nil  , nil	   , 1	},
      	{ "225", "22.5"    , 2	},
      	{ "45" , "45"      , 3	},
      	{ "675", "67.5"    , 4	},
      	{ "s1" , "small_1" , 5	},
      	{ "s2" , "small_2" , 6	},
      	{ "s3" , "small_3" , 7	},
      	{ "s4" , "small_4" , 8	},
      }
      
      for i in ipairs(lilies_list) do
      	local deg1 = ""
      	local deg2 = ""
      	local lily_groups = {snappy = 3,flammable=2,flower=1}
      
      	if lilies_list[i][1] ~= nil then
      		deg1 = "_"..lilies_list[i][1]
      		deg2 = "_"..lilies_list[i][2]
      		lily_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
      	end
      
      	minetest.register_node(":flowers:waterlily"..deg1, {
      		description = S("Waterlily"),
      		drawtype = "nodebox",
      		tiles = {
      			"flowers_waterlily"..deg2..".png",
      			"flowers_waterlily"..deg2..".png^[transformFY"
      		},
      		inventory_image = "flowers_waterlily.png",
      		wield_image  = "flowers_waterlily.png",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "facedir",
      		walkable = false,
      		groups = lily_groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = {
      			type = "fixed",
      			fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
      		},
      		node_box = {
      			type = "fixed",
      			fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
      		},
      		buildable_to = true,
      		node_placement_prediction = "",
      
      		liquids_pointable = true,
      		drop = "flowers:waterlily",
      		on_place = function(itemstack, placer, pointed_thing)
      			local keys=placer:get_player_control()
      			local pt = pointed_thing
      
      			local place_pos = nil
      			local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
      			local under_node = minetest.get_node(pt.under)
      			local above_node = minetest.get_node(pt.above)
      			local top_node   = minetest.get_node(top_pos)
      
      			if biome_lib.get_nodedef_field(under_node.name, "buildable_to") then
      				if under_node.name ~= "default:water_source" then
      					place_pos = pt.under
      				elseif top_node.name ~= "default:water_source"
      				       and biome_lib.get_nodedef_field(top_node.name, "buildable_to") then
      					place_pos = top_pos
      				else
      					return
      				end
      			elseif biome_lib.get_nodedef_field(above_node.name, "buildable_to") then
      				place_pos = pt.above
      			end
      
      			if place_pos and not minetest.is_protected(place_pos, placer:get_player_name()) then
      
      			local nodename = "default:cobble" -- if this block appears, something went....wrong :-)
      
      				if not keys["sneak"] then
      					local node = minetest.get_node(pt.under)
      					local waterlily = math.random(1,8)
      					if waterlily == 1 then
      						nodename = "flowers:waterlily"
      					elseif waterlily == 2 then
      						nodename = "flowers:waterlily_225"
      					elseif waterlily == 3 then
      						nodename = "flowers:waterlily_45"
      					elseif waterlily == 4 then
      						nodename = "flowers:waterlily_675"
      					elseif waterlily == 5 then
      						nodename = "flowers:waterlily_s1"
      					elseif waterlily == 6 then
      						nodename = "flowers:waterlily_s2"
      					elseif waterlily == 7 then
      						nodename = "flowers:waterlily_s3"
      					elseif waterlily == 8 then
      						nodename = "flowers:waterlily_s4"
      					end
      					minetest.swap_node(place_pos, {name = nodename, param2 = math.random(0,3) })
      				else
      					local fdir = minetest.dir_to_facedir(placer:get_look_dir())
      					minetest.swap_node(place_pos, {name = "flowers:waterlily", param2 = fdir})
      				end
      
      				if not biome_lib.expect_infinite_stacks then
      					itemstack:take_item()
      				end
      				return itemstack
      			end
      		end,
      	})
      end
      
      local algae_list = { {nil}, {2}, {3}, {4} }
      
      for i in ipairs(algae_list) do
      	local num = ""
      	local algae_groups = {snappy = 3,flammable=2,flower=1}
      
      	if algae_list[i][1] ~= nil then
      		num = "_"..algae_list[i][1]
      		algae_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
      	end
      
      	minetest.register_node(":flowers:seaweed"..num, {
      		description = S("Seaweed"),
      		drawtype = "nodebox",
      		tiles = {
      			"flowers_seaweed"..num..".png",
      			"flowers_seaweed"..num..".png^[transformFY"
      		},
      		inventory_image = "flowers_seaweed_2.png",
      		wield_image  = "flowers_seaweed_2.png",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "facedir",
      		walkable = false,
      		groups = algae_groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = {
      			type = "fixed",
      			fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
      		},
      		node_box = {
      			type = "fixed",
      			fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
      		},
      		buildable_to = true,
      
      		liquids_pointable = true,
      		drop = "flowers:seaweed",
      		on_place = function(itemstack, placer, pointed_thing)
      			local keys=placer:get_player_control()
      			local pt = pointed_thing
      
      			local place_pos = nil
      			local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
      			local under_node = minetest.get_node(pt.under)
      			local above_node = minetest.get_node(pt.above)
      			local top_node   = minetest.get_node(top_pos)
      
      			if biome_lib.get_nodedef_field(under_node.name, "buildable_to") then
      				if under_node.name ~= "default:water_source" then
      					place_pos = pt.under
      				elseif top_node.name ~= "default:water_source"
      				       and biome_lib.get_nodedef_field(top_node.name, "buildable_to") then
      					place_pos = top_pos
      				else
      					return
      				end
      			elseif biome_lib.get_nodedef_field(above_node.name, "buildable_to") then
      				place_pos = pt.above
      			end
      			if not place_pos then return end -- something went wrong :P
      
      			if not minetest.is_protected(place_pos, placer:get_player_name()) then
      
      			local nodename = "default:cobble" -- :D
      
      				if not keys["sneak"] then
      					--local node = minetest.get_node(pt.under)
      					local seaweed = math.random(1,4)
      					if seaweed == 1 then
      						nodename = "flowers:seaweed"
      					elseif seaweed == 2 then
      						nodename = "flowers:seaweed_2"
      					elseif seaweed == 3 then
      						nodename = "flowers:seaweed_3"
      					elseif seaweed == 4 then
      						nodename = "flowers:seaweed_4"
      					end
      					minetest.swap_node(place_pos, {name = nodename, param2 = math.random(0,3) })
      				else
      					local fdir = minetest.dir_to_facedir(placer:get_look_dir())
      					minetest.swap_node(place_pos, {name = "flowers:seaweed", param2 = fdir})
      				end
      
      				if not biome_lib.expect_infinite_stacks then
      					itemstack:take_item()
      				end
      				return itemstack
      			end
      		end,
      	})
      end
      
      local box = {
      	type="fixed",
      	fixed = { { -0.2, -0.5, -0.2, 0.2, 0.5, 0.2 } },
      }
      
      local sunflower_drop = "farming:seed_wheat"
      if minetest.registered_items["farming:seed_spelt"] then
      	sunflower_drop = "farming:seed_spelt"
      end
      
      minetest.register_node(":flowers:sunflower", {
      	description = S("Sunflower"),
      	drawtype = "mesh",
      	paramtype = "light",
      	paramtype2 = "facedir",
      	inventory_image = "flowers_sunflower_inv.png",
      	mesh = "flowers_sunflower.obj",
      	tiles = { "flowers_sunflower.png" },
      	walkable = false,
      	buildable_to = true,
      	is_ground_content = true,
      	groups = { dig_immediate=3, flora=1, flammable=3, attached_node=1 },
      	sounds = default.node_sound_leaves_defaults(),
      	selection_box = box,
      	collision_box = box,
      	drop = {
      		max_items = 1,
      		items = {
      			{items = {sunflower_drop}, rarity = 8},
      			{items = {"flowers:sunflower"}},
      		}
      	}
      })
      
      local extra_aliases = {
      	"waterlily",
      	"waterlily_225",
      	"waterlily_45",
      	"waterlily_675",
      	"seaweed"
      }
      
      for i in ipairs(extra_aliases) do
      	local flower = extra_aliases[i]
      	minetest.register_alias("flowers:flower_"..flower, "flowers:"..flower)
      end
      
      minetest.register_alias( "trunks:lilypad"         ,	"flowers:waterlily_s1" )
      minetest.register_alias( "along_shore:lilypads_1" , "flowers:waterlily_s1" )
      minetest.register_alias( "along_shore:lilypads_2" , "flowers:waterlily_s2" )
      minetest.register_alias( "along_shore:lilypads_3" , "flowers:waterlily_s3" )
      minetest.register_alias( "along_shore:lilypads_4" , "flowers:waterlily_s4" )
      minetest.register_alias( "along_shore:pondscum_1" ,	"flowers:seaweed"      )
      minetest.register_alias( "along_shore:seaweed_1"  ,	"flowers:seaweed"      )
      minetest.register_alias( "along_shore:seaweed_2"  ,	"flowers:seaweed_2"    )
      minetest.register_alias( "along_shore:seaweed_3"  ,	"flowers:seaweed_3"    )
      minetest.register_alias( "along_shore:seaweed_4"  ,	"flowers:seaweed_4"    )
      
      -- ongen registrations
      
      flowers_plus.grow_waterlily = function(pos)
      	local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
      	for i in ipairs(lilies_list) do
      		local chance = math.random(1,8)
      		local ext = ""
      		local num = lilies_list[i][3]
      
      		if lilies_list[i][1] ~= nil then
      			ext = "_"..lilies_list[i][1]
      		end
      
      		if chance == num then
      			minetest.swap_node(right_here, {name="flowers:waterlily"..ext, param2=math.random(0,3)})
      		end
      	end
      end
      
      biome_lib.register_on_generate({
          surface = {"default:water_source"},
          max_count = lilies_max_count,
          rarity = lilies_rarity,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:dirt_with_grass"},
      	near_nodes_size = 4,
      	near_nodes_vertical = 1,
      	near_nodes_count = 1,
          plantlife_limit = -0.9,
      	temp_max = -0.22,
          temp_min = 0.22,
        },
        flowers_plus.grow_waterlily
      )
      
      flowers_plus.grow_seaweed = function(pos)
      	local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
      	minetest.swap_node(right_here, {name="along_shore:seaweed_"..math.random(1,4), param2=math.random(1,3)})
      end
      
      biome_lib.register_on_generate({
          surface = {"default:water_source"},
          max_count = seaweed_max_count,
          rarity = seaweed_rarity,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:dirt_with_grass"},
      	near_nodes_size = 4,
      	near_nodes_vertical = 1,
      	near_nodes_count = 1,
          plantlife_limit = -0.9,
        },
        flowers_plus.grow_seaweed
      )
      
      -- seaweed at beaches
      -- MM: not satisfied with it, but IMHO some beaches should have some algae
      biome_lib.register_on_generate({
          surface = {"default:water_source"},
          max_count = seaweed_max_count,
          rarity = seaweed_rarity,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:sand"},
      	near_nodes_size = 1,
      	near_nodes_vertical = 0,
      	near_nodes_count = 3,
          plantlife_limit = -0.9,
      	temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere
          temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere
        },
        flowers_plus.grow_seaweed
      )
      biome_lib.register_on_generate({
          surface = {"default:sand"},
          max_count = seaweed_max_count*2,
          rarity = seaweed_rarity/2,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:water_source"},
      	near_nodes_size = 1,
      	near_nodes_vertical = 0,
      	near_nodes_count = 3,
          plantlife_limit = -0.9,
      	temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere
          temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere
        },
        flowers_plus.grow_seaweed
      )
      
      biome_lib.register_on_generate({
      	surface = {"default:dirt_with_grass"},
      	avoid_nodes = { "flowers:sunflower" },
      	max_count = sunflowers_max_count,
      	rarity = sunflowers_rarity,
      	min_elevation = 0,
      	plantlife_limit = -0.9,
      	temp_max = 0.53,
      	random_facedir = {0,3},
        },
        "flowers:sunflower"
      )
      
      -- spawn ABM registrations
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY/2,
      	spawn_plants = {
      		"flowers:waterlily",
      		"flowers:waterlily_225",
      		"flowers:waterlily_45",
      		"flowers:waterlily_675",
      		"flowers:waterlily_s1",
      		"flowers:waterlily_s2",
      		"flowers:waterlily_s3",
      		"flowers:waterlily_s4"
      	},
      	avoid_radius = 2.5,
      	spawn_chance = SPAWN_CHANCE*4,
      	spawn_surfaces = {"default:water_source"},
      	avoid_nodes = {"group:flower", "group:flora" },
      	seed_diff = flowers_seed_diff,
      	light_min = 9,
      	depth_max = 2,
      	random_facedir = {0,3}
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:seaweed"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:water_source"},
      	avoid_nodes = {"group:flower", "group:flora"},
      	seed_diff = flowers_seed_diff,
      	light_min = 4,
      	light_max = 10,
      	neighbors = {"default:dirt_with_grass"},
      	facedir = 1
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:seaweed"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:dirt_with_grass"},
      	avoid_nodes = {"group:flower", "group:flora" },
      	seed_diff = flowers_seed_diff,
      	light_min = 4,
      	light_max = 10,
      	neighbors = {"default:water_source"},
      	ncount = 1,
      	facedir = 1
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:seaweed"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:stone"},
      	avoid_nodes = {"group:flower", "group:flora" },
      	seed_diff = flowers_seed_diff,
      	light_min = 4,
      	light_max = 10,
      	neighbors = {"default:water_source"},
      	ncount = 6,
      	facedir = 1
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:sunflower"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:dirt_with_grass"},
      	avoid_nodes = {"group:flower", "flowers:sunflower"},
      	seed_diff = flowers_seed_diff,
      	light_min = 11,
      	light_max = 14,
      	min_elevation = 0,
      	plantlife_limit = -0.9,
      	temp_max = 0.53,
      	random_facedir = {0,3},
      	avoid_radius = 5
      })
      
      -- Cotton plants are now provided by the default "farming" mod.
      -- old cotton plants -> farming cotton stage 8
      -- cotton wads -> string (can be crafted into wool blocks)
      -- potted cotton plants -> potted white dandelions
      
      minetest.register_alias("flowers:cotton_plant", "farming:cotton_8")
      minetest.register_alias("flowers:flower_cotton", "farming:cotton_8")
      minetest.register_alias("flowers:flower_cotton_pot", "flowers:potted_dandelion_white")
      minetest.register_alias("flowers:potted_cotton_plant", "flowers:potted_dandelion_white")
      minetest.register_alias("flowers:cotton", "farming:string")
      minetest.register_alias("flowers:cotton_wad", "farming:string")
      minetest.register_alias("sunflower:sunflower", "flowers:sunflower")
      
      print("[Flowers] Loaded.")
    • paste this in .../worldmods/plantlife_modpack/nature_classic/init.lua
      Spoiler

      Code: Select all

      -- Nature Classic mod
      -- Originally by neko259
      
      -- Nature is slowly capturing the world!
      
      local current_mod_name = minetest.get_current_modname()
      
      nature = {}
      -- support for i18n
      local S = minetest.get_translator("nature_classic")
      
      nature.blossomqueue = {}
      nature.blossomqueue_max = 1000
      
      nature.blossom_decay = 2
      nature.blossom_trunk = "default:tree"
      nature.blossom_node = "nature:blossom"
      nature.blossom_leaves = "default:leaves"
      nature.blossom_textures = { "default_leaves.png^nature_blossom.png" }
      nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2 }
      
      if minetest.get_modpath("moretrees") then
      	nature.blossom_decay = moretrees.leafdecay_radius
      	nature.blossom_trunk = "moretrees:apple_tree_trunk"
      	nature.blossom_node = "moretrees:apple_blossoms"
      	nature.blossom_leaves = "moretrees:apple_tree_leaves"
      	nature.blossom_textures = { "moretrees_apple_tree_leaves.png^nature_blossom.png" }
          nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2, moretrees_leaves = 1 },
      	minetest.register_alias("nature:blossom", "default:leaves")
      end
      
      nature.leaves_blossom_chance = 15
      nature.blossom_leaves_chance = 0	--Eris changed from default value = 5
      nature.blossom_delay = 3600
      nature.apple_delay = 3600
      nature.apple_chance = 0		--Eris changed from default value = 10
      nature.apple_spread = 0		--Eris changed from default value = 2
      
      nature.meta_blossom_time = "blossom_time"
      nature.blossom_duration = nature.blossom_delay
      
      function dumppos(pos)
      	return "("..pos.x..","..pos.y..","..pos.z..")"
      end
      
      dofile(minetest.get_modpath(current_mod_name) .. "/config.lua")
      dofile(minetest.get_modpath(current_mod_name) .. "/global_function.lua")
      dofile(minetest.get_modpath(current_mod_name) .. "/blossom.lua")
      
      minetest.log("info", S("[Nature Classic] loaded!"))
    • paste this in .../worldmods/plantlife_modpack/vines/init.lua
      Spoiler

      Code: Select all

      vines = {
      	name = 'vines',
      	recipes = {}
      }
      
      local enable_roots = minetest.settings:get_bool("vines_enable_roots")
      
      -- support for i18n
      local S = minetest.get_translator("vines")
      
      -- ITEMS
      
      minetest.register_craftitem("vines:vines", {
      	description = S("Vines"),
      	inventory_image = "vines_item.png",
      	groups = {vines = 1, flammable = 2}
      })
      
      -- FUNCTIONS
      
      local function dig_down(pos, node, digger)
      
      	if digger == nil then return end
      
      	local np = {x = pos.x, y = pos.y - 1, z = pos.z}
      	local nn = minetest.get_node(np)
      
      	if minetest.get_item_group(nn.name, "vines") > 0 then
      		minetest.node_dig(np, nn, digger)
      	end
      end
      
      
      vines.register_vine = function( name, defs, biome )
      
      	local groups = {vines = 1, snappy = 3, flammable = 2, attached_node = 1}
      	local vine_name_end = 'vines:' .. name .. '_end'
      	local vine_name_middle = 'vines:' .. name .. '_middle'
      	local vine_image_end = "vines_" .. name .. "_end.png"
      	local vine_image_middle = "vines_" .. name .. "_middle.png"
      	local drop_node = vine_name_end
      
      	biome.spawn_plants = {vine_name_end}
      
      	local vine_group = 'group:' .. name .. '_vines'
      
      	biome.spawn_surfaces[#biome.spawn_surfaces + 1] = vine_group
      
      	local selection_box = {type = "wallmounted",}
      	local drawtype = 'signlike'
      
      	-- different properties for bottom and side vines.
      	if not biome.spawn_on_side then
      
      		selection_box = {
      			type = "fixed", fixed = { -0.4, -1/2, -0.4, 0.4, 1/2, 0.4 }
      		}
      
      		drawtype = 'plantlike'
      	end
      
      	minetest.register_node(vine_name_end, {
      		description = defs.description,
      		walkable = false,
      		climbable = true,
      		wield_image = vine_image_end,
      		drop = "vines:vines",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "wallmounted",
      		buildable_to = false,
      		tiles = {vine_image_end},
      		drawtype = drawtype,
      		inventory_image = vine_image_end,
      		groups = groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = selection_box,
      
      		on_construct = function(pos)
      
      			local timer = minetest.get_node_timer(pos)
      
      			timer:start(math.random(5, 10))
      		end,
      
      		on_timer = function(pos)
      
      			local node = minetest.get_node(pos)
      			local bottom = {x = pos.x, y = pos.y - 1, z = pos.z}
      			local bottom_node = minetest.get_node( bottom )
      
      			if bottom_node.name == "air" then
      
      				if not math.random(defs.average_length) == 1 then
      
      					minetest.set_node(pos, {
      							name = vine_name_middle, param2 = node.param2})
      
      					minetest.set_node(bottom, {
      							name = node.name, param2 = node.param2})
      
      					local timer = minetest.get_node_timer(bottom_node)
      
      					timer:start(math.random(5, 10))
      				end
      			end
      		end,
      
      		after_dig_node = function(pos, node, metadata, digger)
      			dig_down(pos, node, digger)
      		end,
      	})
      
      	minetest.register_node( vine_name_middle, {
      		description = S("Matured") .. " " .. defs.description,
      		walkable = false,
      		climbable = true,
      		drop = "vines:vines",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "wallmounted",
      		buildable_to = false,
      		tiles = {vine_image_middle},
      		wield_image = vine_image_middle,
      		drawtype = drawtype,
      		inventory_image = vine_image_middle,
      		groups = groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = selection_box,
      
      		after_dig_node = function(pos, node, metadata, digger)
      			dig_down(pos, node, digger)
      		end,
      	})
      
      	biome_lib.register_active_spawner(biome)
      end
      
      -- ALIASES
      
      -- used to remove the old vine nodes and give room for the new.
      minetest.register_alias( 'vines:root', 'air' )
      minetest.register_alias( 'vines:root_rotten', 'air' )
      minetest.register_alias( 'vines:vine', 'air' )
      minetest.register_alias( 'vines:vine_rotten', 'air' )
      minetest.register_alias( 'vines:side', 'air' )
      minetest.register_alias( 'vines:side_rotten', 'air' )
      minetest.register_alias( 'vines:jungle', 'air' )
      minetest.register_alias( 'vines:jungle_rotten', 'air' )
      minetest.register_alias( 'vines:willow', 'air' )
      minetest.register_alias( 'vines:willow_rotten', 'air' )
      
      -- CRAFTS
      
      minetest.register_craft({
      	output = 'vines:rope_block',
      	recipe = {
      		{'group:vines', 'group:vines', 'group:vines'},
      		{'group:vines', 'group:wood', 'group:vines'},
      		{'group:vines', 'group:vines', 'group:vines'},
      	}
      })
      
      if minetest.get_modpath("moreblocks") then
      
      	minetest.register_craft({
      		output = 'vines:rope_block',
      		recipe = {
      			{'moreblocks:rope', 'moreblocks:rope', 'moreblocks:rope'},
      			{'moreblocks:rope', 'group:wood', 'moreblocks:rope'},
      			{'moreblocks:rope', 'moreblocks:rope', 'moreblocks:rope'},
      		}
      	})
      end
      
      minetest.register_craft({
      	output = 'vines:shears',
      	recipe = {
      		{'', 'default:steel_ingot', ''},
      		{'group:stick', 'group:wood', 'default:steel_ingot'},
      		{'', '', 'group:stick'}
      	}
      })
      
      -- NODES
      
      minetest.register_node("vines:rope_block", {
      	description = S("Rope"),
      	sunlight_propagates = true,
      	paramtype = "light",
      	tiles = {
      		"default_wood.png^vines_rope.png",
      		"default_wood.png^vines_rope.png",
      		"default_wood.png",
      		"default_wood.png",
      		"default_wood.png^vines_rope.png",
      		"default_wood.png^vines_rope.png",
      	},
      	groups = {flammable = 2, choppy = 2, oddly_breakable_by_hand = 1},
      
      	after_place_node = function(pos)
      
      		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
      		local n = minetest.get_node(p)
      
      		if n.name == "air" then
      			minetest.add_node(p, {name = "vines:rope_end"})
      		end
      	end,
      
      	after_dig_node = function(pos, node, digger)
      
      		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
      		local n = minetest.get_node(p)
      
      		while n.name == 'vines:rope' or n.name == 'vines:rope_end' do
      
      			minetest.remove_node(p)
      
      			p = {x = p.x, y = p.y - 1, z = p.z}
      			n = minetest.get_node(p)
      		end
      	end
      })
      
      minetest.register_node("vines:rope", {
      	description = S("Rope"),
      	walkable = false,
      	climbable = true,
      	sunlight_propagates = true,
      	paramtype = "light",
      	drop = {},
      	tiles = {"vines_rope.png"},
      	drawtype = "plantlike",
      	groups = {flammable = 2, not_in_creative_inventory = 1},
      	sounds = default.node_sound_leaves_defaults(),
      	selection_box = {
      		type = "fixed",
      		fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
      	},
      })
      
      minetest.register_node("vines:rope_end", {
      	description = S("Rope"),
      	walkable = false,
      	climbable = true,
      	sunlight_propagates = true,
      	paramtype = "light",
      	drop = {},
      	tiles = {"vines_rope_end.png"},
      	drawtype = "plantlike",
      	groups = {flammable = 2, not_in_creative_inventory = 1},
      	sounds = default.node_sound_leaves_defaults(),
      
      	after_place_node = function(pos)
      
      		local yesh = {x = pos.x, y = pos.y - 1, z = pos.z}
      
      		minetest.add_node(yesh, {name = "vines:rope"})
      	end,
      
      	selection_box = {
      		type = "fixed",
      		fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
      	},
      
      	on_construct = function(pos)
      
      		local timer = minetest.get_node_timer(pos)
      
      		timer:start(1)
      	end,
      
      	on_timer = function( pos, elapsed )
      
      		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
      		local n = minetest.get_node(p)
      
      		if	n.name == "air" then
      
      			minetest.set_node(pos, {name = "vines:rope"})
      			minetest.add_node(p, {name = "vines:rope_end"})
      		else
      
      			local timer = minetest.get_node_timer(pos)
      
      			timer:start(1)
      		end
      	end
      })
      
      -- SHEARS
      
      minetest.register_tool("vines:shears", {
      	description = S("Shears"),
      	inventory_image = "vines_shears.png",
      	wield_image = "vines_shears.png",
      	stack_max = 1,
      	max_drop_level = 3,
      	tool_capabilities = {
      		full_punch_interval = 1.0,
      		max_drop_level = 1,
      		groupcaps = {
      			snappy = {times = {[3] = 0.2}, uses = 60, maxlevel = 3},
      		}
      	},
      })
      
      -- VINES
      local spawn_root_surfaces = {}
      
      if enable_roots ~= false then
      	spawn_root_surfaces = {
      		"default:dirt_with_grass",
      		"default:dirt"
      	}
      end
      
      vines.register_vine('root',
      	{description = S("Roots"), average_length = 9}, {
      	choose_random_wall = true,
      	avoid_nodes = {"vines:root_middle"},
      	avoid_radius = 5,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 10
      	spawn_surfaces = spawn_root_surfaces,
      	spawn_on_bottom = true,
      	plantlife_limit = -0.6,
      	humidity_min = 0.4,
      })
      
      vines.register_vine('vine',
      	{description = S("Vines"), average_length = 5}, {
      	choose_random_wall = true,
      	avoid_nodes = {"group:vines"},
      	avoid_radius = 5,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 100
      	spawn_surfaces = {
      --		"default:leaves",
      		"default:jungleleaves",
      		"moretrees:jungletree_leaves_red",
      		"moretrees:jungletree_leaves_yellow",
      		"moretrees:jungletree_leaves_green"
      	},
      	spawn_on_bottom = true,
      	plantlife_limit = -0.9,
      	humidity_min = 0.7,
      })
      
      vines.register_vine('side',
      	{description = S("Vines"), average_length = 6}, {
      	choose_random_wall = true,
      	avoid_nodes = {"group:vines", "default:apple"},
      	avoid_radius = 3,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 100
      	spawn_surfaces = {
      --		"default:leaves",
      		"default:jungleleaves",
      		"moretrees:jungletree_leaves_red",
      		"moretrees:jungletree_leaves_yellow",
      		"moretrees:jungletree_leaves_green"
      	},
      	spawn_on_side = true,
      	plantlife_limit = -0.9,
      	humidity_min = 0.4,
      })
      
      vines.register_vine("jungle",
      	{description = S("Jungle Vines"), average_length = 7}, {
      	choose_random_wall = true,
      	neighbors = {
      		"default:jungleleaves",
      		"moretrees:jungletree_leaves_red",
      		"moretrees:jungletree_leaves_yellow",
      		"moretrees:jungletree_leaves_green"
      	},
      	avoid_nodes = {
      		"vines:jungle_middle",
      		"vines:jungle_end",
      	},
      	avoid_radius = 5,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 100
      	spawn_surfaces = {
      		"default:jungletree",
      		"moretrees:jungletree_trunk"
      	},
      	spawn_on_side = true,
      	plantlife_limit = -0.9,
      	humidity_min = 0.2,
      })
      
      vines.register_vine( 'willow',
      	{description = S("Willow Vines"), average_length = 9}, {
      	choose_random_wall = true,
      	avoid_nodes = {"vines:willow_middle"},
      	avoid_radius = 5,
      	near_nodes = {'default:water_source'},
      	near_nodes_size = 1,
      	near_nodes_count = 1,
      	near_nodes_vertical = 7,
      	plantlife_limit = -0.8,
      	spawn_chance = 10,
      	spawn_delay = 500,
      	spawn_on_side = true,
      	spawn_surfaces = {"moretrees:willow_leaves"},
      	humidity_min = 0.5
      })
      
      
      print("[Vines] Loaded!")
  3. You are ready, enjoy!
Attachments
Candyland.zip
Check .we file to see the signs written in the factory.
(252.67 KiB) Downloaded 123 times
Candyland.jpg
Candyland.jpg (994.37 KiB) Viewed 3069 times
Last edited by Eris on Sun Jan 14, 2024 13:30, edited 9 times in total.
Jump in the caac

User avatar
Eris
Member
Posts: 175
Joined: Thu Nov 19, 2020 23:12
IRC: definitelya Ovalo
In-game: Eris_still_crafts

Re: Share Your WorldEdit Files!

by Eris » Post

Winter Spawn - Source
I love winter! :]

To use the map:
  1. mods: abriglass, abripanes, basic_materials, bedrock, biome_lib, carpet, crops, flowerpot, hardenedclay, lapis, mesecons, nether, plantlife_modpack*, quartz, signs_lib, xdecor;
    *in the modpack, delete the mods dryplants, along_shore, molehills, woodsoils, bushes, bushes_classic, youngtrees, 3dmushrooms, cavestuff, poisonivy, trunks;
  2. To avoid getting the map overrun by weeds and pesky sunflowers, turn off their generation and spread in plantlife_modpack mods (ferns, flowers_plus, nature_classic, vines); replace the contents of each file, respectively:
    • paste this in .../worldmods/plantlife_modpack/ferns/settings.lua
      Spoiler

      Code: Select all

      -- In case you don't wanna have errors:
      
      -- Only change what's behind a "=" (or "--").
      -- Don't use caps (behind a "=").
      
      -- If there's a "false" (behind a "=") you can change it to "true" (and the other way around).
      -- Spelling is important.
      -- If "true" or "false" is necessary as setting, everything(!) which is not spelled "true" will be read as if it were "false" (even "1", "True"...)
      
      -- If you wanna comment something (for example to remember the default value), you can do this by putting "--" in front of the comment.
      -- You can put "--" at the end of a line with "=" in it, or at the beginning of an empty/new line (minetest will ignore what's behind it then).
      -- But don't put "--" in front of a line with "=" in it (or else minetest will ignore the setting and you might get an error).
      
      -- If something is still unclear, don't hesitate to post your question @ https://forum.minetest.net/viewtopic.php?id=6921
      
      abstract_ferns.config = {}
      
      -- Which plants should generate/spawn?
      abstract_ferns.config.enable_lady_fern			= false		--Eris changed from default value = true
      abstract_ferns.config.enable_horsetails			= false		--Eris changed from default value = true
      abstract_ferns.config.enable_treefern			= true
      abstract_ferns.config.enable_giant_treefern		= false		--Eris changed from default value = true
      
      -- Where should they generate/spawn? (if they generate/spawn)
      --
      --  Lady-Fern
      abstract_ferns.config.lady_ferns_near_tree = true
      abstract_ferns.config.lady_ferns_near_rock = true
      abstract_ferns.config.lady_ferns_near_ores = true				-- if there's a bunch of ferns there's ores nearby, this one causes a huge fps drop
      abstract_ferns.config.lady_ferns_in_groups = false				-- this one is meant as a replacement of Ferns_near_Ores: ferns tend to generate in groups, less fps drop, no hint for nearby ores
      --
      --	Horsetails
      abstract_ferns.config.enable_horsetails_spawning	= false		-- horsetails will grow in already explored areas, over time, near water or gravel
      abstract_ferns.config.enable_horsetails_on_grass	= true		-- on dirt with grass and swamp (sumpf mod)
      abstract_ferns.config.enable_horsetails_on_stones	= true		-- on gravel, mossy cobble and silex (stoneage mod)
      --
      -- Tree_Fern
      abstract_ferns.config.enable_treeferns_in_jungle	= false				--Eris changed from default value = true
      abstract_ferns.config.enable_treeferns_in_oases		= false		-- for oases and tropical beaches|--Eris changed from default value = true
      --
      -- Giant_Tree_Fern
      abstract_ferns.config.enable_giant_treeferns_in_jungle	= true
      abstract_ferns.config.enable_giant_treeferns_in_oases	= true	-- for oases and tropical beaches
    • paste this in .../worldmods/plantlife_modpack/flowers_plus/init.lua
      Spoiler

      Code: Select all

      -- support for i18n
      local S = minetest.get_translator("flowers_plus")
      
      -- This file supplies a few additional plants and some related crafts
      -- for the plantlife modpack.  Last revision:  2013-04-24
      
      flowers_plus = {}
      
      local SPAWN_DELAY = 1000
      local SPAWN_CHANCE = -1		--Eris changed from default value = 200
      local flowers_seed_diff = 329
      local lilies_max_count = -1		--Eris changed from default value = 320
      local lilies_rarity = 33
      local seaweed_max_count = -1		--Eris changed from default value = 320
      local seaweed_rarity = 33
      local sunflowers_max_count = -1		--Eris changed from default value = 10
      local sunflowers_rarity = 25
      
      -- register the various rotations of waterlilies
      
      local lilies_list = {
      	{ nil  , nil	   , 1	},
      	{ "225", "22.5"    , 2	},
      	{ "45" , "45"      , 3	},
      	{ "675", "67.5"    , 4	},
      	{ "s1" , "small_1" , 5	},
      	{ "s2" , "small_2" , 6	},
      	{ "s3" , "small_3" , 7	},
      	{ "s4" , "small_4" , 8	},
      }
      
      for i in ipairs(lilies_list) do
      	local deg1 = ""
      	local deg2 = ""
      	local lily_groups = {snappy = 3,flammable=2,flower=1}
      
      	if lilies_list[i][1] ~= nil then
      		deg1 = "_"..lilies_list[i][1]
      		deg2 = "_"..lilies_list[i][2]
      		lily_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
      	end
      
      	minetest.register_node(":flowers:waterlily"..deg1, {
      		description = S("Waterlily"),
      		drawtype = "nodebox",
      		tiles = {
      			"flowers_waterlily"..deg2..".png",
      			"flowers_waterlily"..deg2..".png^[transformFY"
      		},
      		inventory_image = "flowers_waterlily.png",
      		wield_image  = "flowers_waterlily.png",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "facedir",
      		walkable = false,
      		groups = lily_groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = {
      			type = "fixed",
      			fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
      		},
      		node_box = {
      			type = "fixed",
      			fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
      		},
      		buildable_to = true,
      		node_placement_prediction = "",
      
      		liquids_pointable = true,
      		drop = "flowers:waterlily",
      		on_place = function(itemstack, placer, pointed_thing)
      			local keys=placer:get_player_control()
      			local pt = pointed_thing
      
      			local place_pos = nil
      			local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
      			local under_node = minetest.get_node(pt.under)
      			local above_node = minetest.get_node(pt.above)
      			local top_node   = minetest.get_node(top_pos)
      
      			if biome_lib.get_nodedef_field(under_node.name, "buildable_to") then
      				if under_node.name ~= "default:water_source" then
      					place_pos = pt.under
      				elseif top_node.name ~= "default:water_source"
      				       and biome_lib.get_nodedef_field(top_node.name, "buildable_to") then
      					place_pos = top_pos
      				else
      					return
      				end
      			elseif biome_lib.get_nodedef_field(above_node.name, "buildable_to") then
      				place_pos = pt.above
      			end
      
      			if place_pos and not minetest.is_protected(place_pos, placer:get_player_name()) then
      
      			local nodename = "default:cobble" -- if this block appears, something went....wrong :-)
      
      				if not keys["sneak"] then
      					local node = minetest.get_node(pt.under)
      					local waterlily = math.random(1,8)
      					if waterlily == 1 then
      						nodename = "flowers:waterlily"
      					elseif waterlily == 2 then
      						nodename = "flowers:waterlily_225"
      					elseif waterlily == 3 then
      						nodename = "flowers:waterlily_45"
      					elseif waterlily == 4 then
      						nodename = "flowers:waterlily_675"
      					elseif waterlily == 5 then
      						nodename = "flowers:waterlily_s1"
      					elseif waterlily == 6 then
      						nodename = "flowers:waterlily_s2"
      					elseif waterlily == 7 then
      						nodename = "flowers:waterlily_s3"
      					elseif waterlily == 8 then
      						nodename = "flowers:waterlily_s4"
      					end
      					minetest.swap_node(place_pos, {name = nodename, param2 = math.random(0,3) })
      				else
      					local fdir = minetest.dir_to_facedir(placer:get_look_dir())
      					minetest.swap_node(place_pos, {name = "flowers:waterlily", param2 = fdir})
      				end
      
      				if not biome_lib.expect_infinite_stacks then
      					itemstack:take_item()
      				end
      				return itemstack
      			end
      		end,
      	})
      end
      
      local algae_list = { {nil}, {2}, {3}, {4} }
      
      for i in ipairs(algae_list) do
      	local num = ""
      	local algae_groups = {snappy = 3,flammable=2,flower=1}
      
      	if algae_list[i][1] ~= nil then
      		num = "_"..algae_list[i][1]
      		algae_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
      	end
      
      	minetest.register_node(":flowers:seaweed"..num, {
      		description = S("Seaweed"),
      		drawtype = "nodebox",
      		tiles = {
      			"flowers_seaweed"..num..".png",
      			"flowers_seaweed"..num..".png^[transformFY"
      		},
      		inventory_image = "flowers_seaweed_2.png",
      		wield_image  = "flowers_seaweed_2.png",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "facedir",
      		walkable = false,
      		groups = algae_groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = {
      			type = "fixed",
      			fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
      		},
      		node_box = {
      			type = "fixed",
      			fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
      		},
      		buildable_to = true,
      
      		liquids_pointable = true,
      		drop = "flowers:seaweed",
      		on_place = function(itemstack, placer, pointed_thing)
      			local keys=placer:get_player_control()
      			local pt = pointed_thing
      
      			local place_pos = nil
      			local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
      			local under_node = minetest.get_node(pt.under)
      			local above_node = minetest.get_node(pt.above)
      			local top_node   = minetest.get_node(top_pos)
      
      			if biome_lib.get_nodedef_field(under_node.name, "buildable_to") then
      				if under_node.name ~= "default:water_source" then
      					place_pos = pt.under
      				elseif top_node.name ~= "default:water_source"
      				       and biome_lib.get_nodedef_field(top_node.name, "buildable_to") then
      					place_pos = top_pos
      				else
      					return
      				end
      			elseif biome_lib.get_nodedef_field(above_node.name, "buildable_to") then
      				place_pos = pt.above
      			end
      			if not place_pos then return end -- something went wrong :P
      
      			if not minetest.is_protected(place_pos, placer:get_player_name()) then
      
      			local nodename = "default:cobble" -- :D
      
      				if not keys["sneak"] then
      					--local node = minetest.get_node(pt.under)
      					local seaweed = math.random(1,4)
      					if seaweed == 1 then
      						nodename = "flowers:seaweed"
      					elseif seaweed == 2 then
      						nodename = "flowers:seaweed_2"
      					elseif seaweed == 3 then
      						nodename = "flowers:seaweed_3"
      					elseif seaweed == 4 then
      						nodename = "flowers:seaweed_4"
      					end
      					minetest.swap_node(place_pos, {name = nodename, param2 = math.random(0,3) })
      				else
      					local fdir = minetest.dir_to_facedir(placer:get_look_dir())
      					minetest.swap_node(place_pos, {name = "flowers:seaweed", param2 = fdir})
      				end
      
      				if not biome_lib.expect_infinite_stacks then
      					itemstack:take_item()
      				end
      				return itemstack
      			end
      		end,
      	})
      end
      
      local box = {
      	type="fixed",
      	fixed = { { -0.2, -0.5, -0.2, 0.2, 0.5, 0.2 } },
      }
      
      local sunflower_drop = "farming:seed_wheat"
      if minetest.registered_items["farming:seed_spelt"] then
      	sunflower_drop = "farming:seed_spelt"
      end
      
      minetest.register_node(":flowers:sunflower", {
      	description = S("Sunflower"),
      	drawtype = "mesh",
      	paramtype = "light",
      	paramtype2 = "facedir",
      	inventory_image = "flowers_sunflower_inv.png",
      	mesh = "flowers_sunflower.obj",
      	tiles = { "flowers_sunflower.png" },
      	walkable = false,
      	buildable_to = true,
      	is_ground_content = true,
      	groups = { dig_immediate=3, flora=1, flammable=3, attached_node=1 },
      	sounds = default.node_sound_leaves_defaults(),
      	selection_box = box,
      	collision_box = box,
      	drop = {
      		max_items = 1,
      		items = {
      			{items = {sunflower_drop}, rarity = 8},
      			{items = {"flowers:sunflower"}},
      		}
      	}
      })
      
      local extra_aliases = {
      	"waterlily",
      	"waterlily_225",
      	"waterlily_45",
      	"waterlily_675",
      	"seaweed"
      }
      
      for i in ipairs(extra_aliases) do
      	local flower = extra_aliases[i]
      	minetest.register_alias("flowers:flower_"..flower, "flowers:"..flower)
      end
      
      minetest.register_alias( "trunks:lilypad"         ,	"flowers:waterlily_s1" )
      minetest.register_alias( "along_shore:lilypads_1" , "flowers:waterlily_s1" )
      minetest.register_alias( "along_shore:lilypads_2" , "flowers:waterlily_s2" )
      minetest.register_alias( "along_shore:lilypads_3" , "flowers:waterlily_s3" )
      minetest.register_alias( "along_shore:lilypads_4" , "flowers:waterlily_s4" )
      minetest.register_alias( "along_shore:pondscum_1" ,	"flowers:seaweed"      )
      minetest.register_alias( "along_shore:seaweed_1"  ,	"flowers:seaweed"      )
      minetest.register_alias( "along_shore:seaweed_2"  ,	"flowers:seaweed_2"    )
      minetest.register_alias( "along_shore:seaweed_3"  ,	"flowers:seaweed_3"    )
      minetest.register_alias( "along_shore:seaweed_4"  ,	"flowers:seaweed_4"    )
      
      -- ongen registrations
      
      flowers_plus.grow_waterlily = function(pos)
      	local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
      	for i in ipairs(lilies_list) do
      		local chance = math.random(1,8)
      		local ext = ""
      		local num = lilies_list[i][3]
      
      		if lilies_list[i][1] ~= nil then
      			ext = "_"..lilies_list[i][1]
      		end
      
      		if chance == num then
      			minetest.swap_node(right_here, {name="flowers:waterlily"..ext, param2=math.random(0,3)})
      		end
      	end
      end
      
      biome_lib.register_on_generate({
          surface = {"default:water_source"},
          max_count = lilies_max_count,
          rarity = lilies_rarity,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:dirt_with_grass"},
      	near_nodes_size = 4,
      	near_nodes_vertical = 1,
      	near_nodes_count = 1,
          plantlife_limit = -0.9,
      	temp_max = -0.22,
          temp_min = 0.22,
        },
        flowers_plus.grow_waterlily
      )
      
      flowers_plus.grow_seaweed = function(pos)
      	local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
      	minetest.swap_node(right_here, {name="along_shore:seaweed_"..math.random(1,4), param2=math.random(1,3)})
      end
      
      biome_lib.register_on_generate({
          surface = {"default:water_source"},
          max_count = seaweed_max_count,
          rarity = seaweed_rarity,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:dirt_with_grass"},
      	near_nodes_size = 4,
      	near_nodes_vertical = 1,
      	near_nodes_count = 1,
          plantlife_limit = -0.9,
        },
        flowers_plus.grow_seaweed
      )
      
      -- seaweed at beaches
      -- MM: not satisfied with it, but IMHO some beaches should have some algae
      biome_lib.register_on_generate({
          surface = {"default:water_source"},
          max_count = seaweed_max_count,
          rarity = seaweed_rarity,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:sand"},
      	near_nodes_size = 1,
      	near_nodes_vertical = 0,
      	near_nodes_count = 3,
          plantlife_limit = -0.9,
      	temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere
          temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere
        },
        flowers_plus.grow_seaweed
      )
      biome_lib.register_on_generate({
          surface = {"default:sand"},
          max_count = seaweed_max_count*2,
          rarity = seaweed_rarity/2,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:water_source"},
      	near_nodes_size = 1,
      	near_nodes_vertical = 0,
      	near_nodes_count = 3,
          plantlife_limit = -0.9,
      	temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere
          temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere
        },
        flowers_plus.grow_seaweed
      )
      
      biome_lib.register_on_generate({
      	surface = {"default:dirt_with_grass"},
      	avoid_nodes = { "flowers:sunflower" },
      	max_count = sunflowers_max_count,
      	rarity = sunflowers_rarity,
      	min_elevation = 0,
      	plantlife_limit = -0.9,
      	temp_max = 0.53,
      	random_facedir = {0,3},
        },
        "flowers:sunflower"
      )
      
      -- spawn ABM registrations
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY/2,
      	spawn_plants = {
      		"flowers:waterlily",
      		"flowers:waterlily_225",
      		"flowers:waterlily_45",
      		"flowers:waterlily_675",
      		"flowers:waterlily_s1",
      		"flowers:waterlily_s2",
      		"flowers:waterlily_s3",
      		"flowers:waterlily_s4"
      	},
      	avoid_radius = 2.5,
      	spawn_chance = SPAWN_CHANCE*4,
      	spawn_surfaces = {"default:water_source"},
      	avoid_nodes = {"group:flower", "group:flora" },
      	seed_diff = flowers_seed_diff,
      	light_min = 9,
      	depth_max = 2,
      	random_facedir = {0,3}
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:seaweed"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:water_source"},
      	avoid_nodes = {"group:flower", "group:flora"},
      	seed_diff = flowers_seed_diff,
      	light_min = 4,
      	light_max = 10,
      	neighbors = {"default:dirt_with_grass"},
      	facedir = 1
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:seaweed"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:dirt_with_grass"},
      	avoid_nodes = {"group:flower", "group:flora" },
      	seed_diff = flowers_seed_diff,
      	light_min = 4,
      	light_max = 10,
      	neighbors = {"default:water_source"},
      	ncount = 1,
      	facedir = 1
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:seaweed"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:stone"},
      	avoid_nodes = {"group:flower", "group:flora" },
      	seed_diff = flowers_seed_diff,
      	light_min = 4,
      	light_max = 10,
      	neighbors = {"default:water_source"},
      	ncount = 6,
      	facedir = 1
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:sunflower"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:dirt_with_grass"},
      	avoid_nodes = {"group:flower", "flowers:sunflower"},
      	seed_diff = flowers_seed_diff,
      	light_min = 11,
      	light_max = 14,
      	min_elevation = 0,
      	plantlife_limit = -0.9,
      	temp_max = 0.53,
      	random_facedir = {0,3},
      	avoid_radius = 5
      })
      
      -- Cotton plants are now provided by the default "farming" mod.
      -- old cotton plants -> farming cotton stage 8
      -- cotton wads -> string (can be crafted into wool blocks)
      -- potted cotton plants -> potted white dandelions
      
      minetest.register_alias("flowers:cotton_plant", "farming:cotton_8")
      minetest.register_alias("flowers:flower_cotton", "farming:cotton_8")
      minetest.register_alias("flowers:flower_cotton_pot", "flowers:potted_dandelion_white")
      minetest.register_alias("flowers:potted_cotton_plant", "flowers:potted_dandelion_white")
      minetest.register_alias("flowers:cotton", "farming:string")
      minetest.register_alias("flowers:cotton_wad", "farming:string")
      minetest.register_alias("sunflower:sunflower", "flowers:sunflower")
      
      print("[Flowers] Loaded.")
    • paste this in .../worldmods/plantlife_modpack/nature_classic/init.lua
      Spoiler

      Code: Select all

      -- Nature Classic mod
      -- Originally by neko259
      
      -- Nature is slowly capturing the world!
      
      local current_mod_name = minetest.get_current_modname()
      
      nature = {}
      -- support for i18n
      local S = minetest.get_translator("nature_classic")
      
      nature.blossomqueue = {}
      nature.blossomqueue_max = 1000
      
      nature.blossom_decay = 2
      nature.blossom_trunk = "default:tree"
      nature.blossom_node = "nature:blossom"
      nature.blossom_leaves = "default:leaves"
      nature.blossom_textures = { "default_leaves.png^nature_blossom.png" }
      nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2 }
      
      if minetest.get_modpath("moretrees") then
      	nature.blossom_decay = moretrees.leafdecay_radius
      	nature.blossom_trunk = "moretrees:apple_tree_trunk"
      	nature.blossom_node = "moretrees:apple_blossoms"
      	nature.blossom_leaves = "moretrees:apple_tree_leaves"
      	nature.blossom_textures = { "moretrees_apple_tree_leaves.png^nature_blossom.png" }
          nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2, moretrees_leaves = 1 },
      	minetest.register_alias("nature:blossom", "default:leaves")
      end
      
      nature.leaves_blossom_chance = 15
      nature.blossom_leaves_chance = 0	--Eris changed from default value = 5
      nature.blossom_delay = 3600
      nature.apple_delay = 3600
      nature.apple_chance = 0		--Eris changed from default value = 10
      nature.apple_spread = 0		--Eris changed from default value = 2
      
      nature.meta_blossom_time = "blossom_time"
      nature.blossom_duration = nature.blossom_delay
      
      function dumppos(pos)
      	return "("..pos.x..","..pos.y..","..pos.z..")"
      end
      
      dofile(minetest.get_modpath(current_mod_name) .. "/config.lua")
      dofile(minetest.get_modpath(current_mod_name) .. "/global_function.lua")
      dofile(minetest.get_modpath(current_mod_name) .. "/blossom.lua")
      
      minetest.log("info", S("[Nature Classic] loaded!"))
    • paste this in .../worldmods/plantlife_modpack/vines/init.lua
      Spoiler

      Code: Select all

      vines = {
      	name = 'vines',
      	recipes = {}
      }
      
      local enable_roots = minetest.settings:get_bool("vines_enable_roots")
      
      -- support for i18n
      local S = minetest.get_translator("vines")
      
      -- ITEMS
      
      minetest.register_craftitem("vines:vines", {
      	description = S("Vines"),
      	inventory_image = "vines_item.png",
      	groups = {vines = 1, flammable = 2}
      })
      
      -- FUNCTIONS
      
      local function dig_down(pos, node, digger)
      
      	if digger == nil then return end
      
      	local np = {x = pos.x, y = pos.y - 1, z = pos.z}
      	local nn = minetest.get_node(np)
      
      	if minetest.get_item_group(nn.name, "vines") > 0 then
      		minetest.node_dig(np, nn, digger)
      	end
      end
      
      
      vines.register_vine = function( name, defs, biome )
      
      	local groups = {vines = 1, snappy = 3, flammable = 2, attached_node = 1}
      	local vine_name_end = 'vines:' .. name .. '_end'
      	local vine_name_middle = 'vines:' .. name .. '_middle'
      	local vine_image_end = "vines_" .. name .. "_end.png"
      	local vine_image_middle = "vines_" .. name .. "_middle.png"
      	local drop_node = vine_name_end
      
      	biome.spawn_plants = {vine_name_end}
      
      	local vine_group = 'group:' .. name .. '_vines'
      
      	biome.spawn_surfaces[#biome.spawn_surfaces + 1] = vine_group
      
      	local selection_box = {type = "wallmounted",}
      	local drawtype = 'signlike'
      
      	-- different properties for bottom and side vines.
      	if not biome.spawn_on_side then
      
      		selection_box = {
      			type = "fixed", fixed = { -0.4, -1/2, -0.4, 0.4, 1/2, 0.4 }
      		}
      
      		drawtype = 'plantlike'
      	end
      
      	minetest.register_node(vine_name_end, {
      		description = defs.description,
      		walkable = false,
      		climbable = true,
      		wield_image = vine_image_end,
      		drop = "vines:vines",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "wallmounted",
      		buildable_to = false,
      		tiles = {vine_image_end},
      		drawtype = drawtype,
      		inventory_image = vine_image_end,
      		groups = groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = selection_box,
      
      		on_construct = function(pos)
      
      			local timer = minetest.get_node_timer(pos)
      
      			timer:start(math.random(5, 10))
      		end,
      
      		on_timer = function(pos)
      
      			local node = minetest.get_node(pos)
      			local bottom = {x = pos.x, y = pos.y - 1, z = pos.z}
      			local bottom_node = minetest.get_node( bottom )
      
      			if bottom_node.name == "air" then
      
      				if not math.random(defs.average_length) == 1 then
      
      					minetest.set_node(pos, {
      							name = vine_name_middle, param2 = node.param2})
      
      					minetest.set_node(bottom, {
      							name = node.name, param2 = node.param2})
      
      					local timer = minetest.get_node_timer(bottom_node)
      
      					timer:start(math.random(5, 10))
      				end
      			end
      		end,
      
      		after_dig_node = function(pos, node, metadata, digger)
      			dig_down(pos, node, digger)
      		end,
      	})
      
      	minetest.register_node( vine_name_middle, {
      		description = S("Matured") .. " " .. defs.description,
      		walkable = false,
      		climbable = true,
      		drop = "vines:vines",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "wallmounted",
      		buildable_to = false,
      		tiles = {vine_image_middle},
      		wield_image = vine_image_middle,
      		drawtype = drawtype,
      		inventory_image = vine_image_middle,
      		groups = groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = selection_box,
      
      		after_dig_node = function(pos, node, metadata, digger)
      			dig_down(pos, node, digger)
      		end,
      	})
      
      	biome_lib.register_active_spawner(biome)
      end
      
      -- ALIASES
      
      -- used to remove the old vine nodes and give room for the new.
      minetest.register_alias( 'vines:root', 'air' )
      minetest.register_alias( 'vines:root_rotten', 'air' )
      minetest.register_alias( 'vines:vine', 'air' )
      minetest.register_alias( 'vines:vine_rotten', 'air' )
      minetest.register_alias( 'vines:side', 'air' )
      minetest.register_alias( 'vines:side_rotten', 'air' )
      minetest.register_alias( 'vines:jungle', 'air' )
      minetest.register_alias( 'vines:jungle_rotten', 'air' )
      minetest.register_alias( 'vines:willow', 'air' )
      minetest.register_alias( 'vines:willow_rotten', 'air' )
      
      -- CRAFTS
      
      minetest.register_craft({
      	output = 'vines:rope_block',
      	recipe = {
      		{'group:vines', 'group:vines', 'group:vines'},
      		{'group:vines', 'group:wood', 'group:vines'},
      		{'group:vines', 'group:vines', 'group:vines'},
      	}
      })
      
      if minetest.get_modpath("moreblocks") then
      
      	minetest.register_craft({
      		output = 'vines:rope_block',
      		recipe = {
      			{'moreblocks:rope', 'moreblocks:rope', 'moreblocks:rope'},
      			{'moreblocks:rope', 'group:wood', 'moreblocks:rope'},
      			{'moreblocks:rope', 'moreblocks:rope', 'moreblocks:rope'},
      		}
      	})
      end
      
      minetest.register_craft({
      	output = 'vines:shears',
      	recipe = {
      		{'', 'default:steel_ingot', ''},
      		{'group:stick', 'group:wood', 'default:steel_ingot'},
      		{'', '', 'group:stick'}
      	}
      })
      
      -- NODES
      
      minetest.register_node("vines:rope_block", {
      	description = S("Rope"),
      	sunlight_propagates = true,
      	paramtype = "light",
      	tiles = {
      		"default_wood.png^vines_rope.png",
      		"default_wood.png^vines_rope.png",
      		"default_wood.png",
      		"default_wood.png",
      		"default_wood.png^vines_rope.png",
      		"default_wood.png^vines_rope.png",
      	},
      	groups = {flammable = 2, choppy = 2, oddly_breakable_by_hand = 1},
      
      	after_place_node = function(pos)
      
      		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
      		local n = minetest.get_node(p)
      
      		if n.name == "air" then
      			minetest.add_node(p, {name = "vines:rope_end"})
      		end
      	end,
      
      	after_dig_node = function(pos, node, digger)
      
      		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
      		local n = minetest.get_node(p)
      
      		while n.name == 'vines:rope' or n.name == 'vines:rope_end' do
      
      			minetest.remove_node(p)
      
      			p = {x = p.x, y = p.y - 1, z = p.z}
      			n = minetest.get_node(p)
      		end
      	end
      })
      
      minetest.register_node("vines:rope", {
      	description = S("Rope"),
      	walkable = false,
      	climbable = true,
      	sunlight_propagates = true,
      	paramtype = "light",
      	drop = {},
      	tiles = {"vines_rope.png"},
      	drawtype = "plantlike",
      	groups = {flammable = 2, not_in_creative_inventory = 1},
      	sounds = default.node_sound_leaves_defaults(),
      	selection_box = {
      		type = "fixed",
      		fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
      	},
      })
      
      minetest.register_node("vines:rope_end", {
      	description = S("Rope"),
      	walkable = false,
      	climbable = true,
      	sunlight_propagates = true,
      	paramtype = "light",
      	drop = {},
      	tiles = {"vines_rope_end.png"},
      	drawtype = "plantlike",
      	groups = {flammable = 2, not_in_creative_inventory = 1},
      	sounds = default.node_sound_leaves_defaults(),
      
      	after_place_node = function(pos)
      
      		local yesh = {x = pos.x, y = pos.y - 1, z = pos.z}
      
      		minetest.add_node(yesh, {name = "vines:rope"})
      	end,
      
      	selection_box = {
      		type = "fixed",
      		fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
      	},
      
      	on_construct = function(pos)
      
      		local timer = minetest.get_node_timer(pos)
      
      		timer:start(1)
      	end,
      
      	on_timer = function( pos, elapsed )
      
      		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
      		local n = minetest.get_node(p)
      
      		if	n.name == "air" then
      
      			minetest.set_node(pos, {name = "vines:rope"})
      			minetest.add_node(p, {name = "vines:rope_end"})
      		else
      
      			local timer = minetest.get_node_timer(pos)
      
      			timer:start(1)
      		end
      	end
      })
      
      -- SHEARS
      
      minetest.register_tool("vines:shears", {
      	description = S("Shears"),
      	inventory_image = "vines_shears.png",
      	wield_image = "vines_shears.png",
      	stack_max = 1,
      	max_drop_level = 3,
      	tool_capabilities = {
      		full_punch_interval = 1.0,
      		max_drop_level = 1,
      		groupcaps = {
      			snappy = {times = {[3] = 0.2}, uses = 60, maxlevel = 3},
      		}
      	},
      })
      
      -- VINES
      local spawn_root_surfaces = {}
      
      if enable_roots ~= false then
      	spawn_root_surfaces = {
      		"default:dirt_with_grass",
      		"default:dirt"
      	}
      end
      
      vines.register_vine('root',
      	{description = S("Roots"), average_length = 9}, {
      	choose_random_wall = true,
      	avoid_nodes = {"vines:root_middle"},
      	avoid_radius = 5,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 10
      	spawn_surfaces = spawn_root_surfaces,
      	spawn_on_bottom = true,
      	plantlife_limit = -0.6,
      	humidity_min = 0.4,
      })
      
      vines.register_vine('vine',
      	{description = S("Vines"), average_length = 5}, {
      	choose_random_wall = true,
      	avoid_nodes = {"group:vines"},
      	avoid_radius = 5,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 100
      	spawn_surfaces = {
      --		"default:leaves",
      		"default:jungleleaves",
      		"moretrees:jungletree_leaves_red",
      		"moretrees:jungletree_leaves_yellow",
      		"moretrees:jungletree_leaves_green"
      	},
      	spawn_on_bottom = true,
      	plantlife_limit = -0.9,
      	humidity_min = 0.7,
      })
      
      vines.register_vine('side',
      	{description = S("Vines"), average_length = 6}, {
      	choose_random_wall = true,
      	avoid_nodes = {"group:vines", "default:apple"},
      	avoid_radius = 3,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 100
      	spawn_surfaces = {
      --		"default:leaves",
      		"default:jungleleaves",
      		"moretrees:jungletree_leaves_red",
      		"moretrees:jungletree_leaves_yellow",
      		"moretrees:jungletree_leaves_green"
      	},
      	spawn_on_side = true,
      	plantlife_limit = -0.9,
      	humidity_min = 0.4,
      })
      
      vines.register_vine("jungle",
      	{description = S("Jungle Vines"), average_length = 7}, {
      	choose_random_wall = true,
      	neighbors = {
      		"default:jungleleaves",
      		"moretrees:jungletree_leaves_red",
      		"moretrees:jungletree_leaves_yellow",
      		"moretrees:jungletree_leaves_green"
      	},
      	avoid_nodes = {
      		"vines:jungle_middle",
      		"vines:jungle_end",
      	},
      	avoid_radius = 5,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 100
      	spawn_surfaces = {
      		"default:jungletree",
      		"moretrees:jungletree_trunk"
      	},
      	spawn_on_side = true,
      	plantlife_limit = -0.9,
      	humidity_min = 0.2,
      })
      
      vines.register_vine( 'willow',
      	{description = S("Willow Vines"), average_length = 9}, {
      	choose_random_wall = true,
      	avoid_nodes = {"vines:willow_middle"},
      	avoid_radius = 5,
      	near_nodes = {'default:water_source'},
      	near_nodes_size = 1,
      	near_nodes_count = 1,
      	near_nodes_vertical = 7,
      	plantlife_limit = -0.8,
      	spawn_chance = 10,
      	spawn_delay = 500,
      	spawn_on_side = true,
      	spawn_surfaces = {"moretrees:willow_leaves"},
      	humidity_min = 0.5
      })
      
      
      print("[Vines] Loaded!")
  3. You are ready, enjoy!
Attachments
winter_spawn.mts
(70.24 KiB) Downloaded 108 times
Winter Spawn.jpg
Winter Spawn.jpg (374.21 KiB) Viewed 3069 times
Last edited by Eris on Sun Jan 14, 2024 13:28, edited 4 times in total.
Jump in the caac

User avatar
Eris
Member
Posts: 175
Joined: Thu Nov 19, 2020 23:12
IRC: definitelya Ovalo
In-game: Eris_still_crafts

Re: Share Your WorldEdit Files!

by Eris » Post

Modern house - Source
I'm glad this turned out cool after conversion, I hope you'll like it!

To use the map:
  1. mods: abriglass, abripanes, basic_materials, bedrock, biome_lib, carpet, crops, flowerpot, hardenedclay, lapis, mesecons, nether, plantlife_modpack*, quartz, signs_lib, xdecor;
    *in the modpack, delete the mods dryplants, along_shore, molehills, woodsoils, bushes, bushes_classic, youngtrees, 3dmushrooms, cavestuff, poisonivy, trunks;
  2. To avoid getting the map overrun by weeds and pesky sunflowers, turn off their generation and spread in plantlife_modpack mods (ferns, flowers_plus, nature_classic, vines); replace the contents of each file, respectively:
    • paste this in .../worldmods/plantlife_modpack/ferns/settings.lua
      Spoiler

      Code: Select all

      -- In case you don't wanna have errors:
      
      -- Only change what's behind a "=" (or "--").
      -- Don't use caps (behind a "=").
      
      -- If there's a "false" (behind a "=") you can change it to "true" (and the other way around).
      -- Spelling is important.
      -- If "true" or "false" is necessary as setting, everything(!) which is not spelled "true" will be read as if it were "false" (even "1", "True"...)
      
      -- If you wanna comment something (for example to remember the default value), you can do this by putting "--" in front of the comment.
      -- You can put "--" at the end of a line with "=" in it, or at the beginning of an empty/new line (minetest will ignore what's behind it then).
      -- But don't put "--" in front of a line with "=" in it (or else minetest will ignore the setting and you might get an error).
      
      -- If something is still unclear, don't hesitate to post your question @ https://forum.minetest.net/viewtopic.php?id=6921
      
      abstract_ferns.config = {}
      
      -- Which plants should generate/spawn?
      abstract_ferns.config.enable_lady_fern			= false		--Eris changed from default value = true
      abstract_ferns.config.enable_horsetails			= false		--Eris changed from default value = true
      abstract_ferns.config.enable_treefern			= true
      abstract_ferns.config.enable_giant_treefern		= false		--Eris changed from default value = true
      
      -- Where should they generate/spawn? (if they generate/spawn)
      --
      --  Lady-Fern
      abstract_ferns.config.lady_ferns_near_tree = true
      abstract_ferns.config.lady_ferns_near_rock = true
      abstract_ferns.config.lady_ferns_near_ores = true				-- if there's a bunch of ferns there's ores nearby, this one causes a huge fps drop
      abstract_ferns.config.lady_ferns_in_groups = false				-- this one is meant as a replacement of Ferns_near_Ores: ferns tend to generate in groups, less fps drop, no hint for nearby ores
      --
      --	Horsetails
      abstract_ferns.config.enable_horsetails_spawning	= false		-- horsetails will grow in already explored areas, over time, near water or gravel
      abstract_ferns.config.enable_horsetails_on_grass	= true		-- on dirt with grass and swamp (sumpf mod)
      abstract_ferns.config.enable_horsetails_on_stones	= true		-- on gravel, mossy cobble and silex (stoneage mod)
      --
      -- Tree_Fern
      abstract_ferns.config.enable_treeferns_in_jungle	= false				--Eris changed from default value = true
      abstract_ferns.config.enable_treeferns_in_oases		= false		-- for oases and tropical beaches|--Eris changed from default value = true
      --
      -- Giant_Tree_Fern
      abstract_ferns.config.enable_giant_treeferns_in_jungle	= true
      abstract_ferns.config.enable_giant_treeferns_in_oases	= true	-- for oases and tropical beaches
    • paste this in .../worldmods/plantlife_modpack/flowers_plus/init.lua
      Spoiler

      Code: Select all

      -- support for i18n
      local S = minetest.get_translator("flowers_plus")
      
      -- This file supplies a few additional plants and some related crafts
      -- for the plantlife modpack.  Last revision:  2013-04-24
      
      flowers_plus = {}
      
      local SPAWN_DELAY = 1000
      local SPAWN_CHANCE = -1		--Eris changed from default value = 200
      local flowers_seed_diff = 329
      local lilies_max_count = -1		--Eris changed from default value = 320
      local lilies_rarity = 33
      local seaweed_max_count = -1		--Eris changed from default value = 320
      local seaweed_rarity = 33
      local sunflowers_max_count = -1		--Eris changed from default value = 10
      local sunflowers_rarity = 25
      
      -- register the various rotations of waterlilies
      
      local lilies_list = {
      	{ nil  , nil	   , 1	},
      	{ "225", "22.5"    , 2	},
      	{ "45" , "45"      , 3	},
      	{ "675", "67.5"    , 4	},
      	{ "s1" , "small_1" , 5	},
      	{ "s2" , "small_2" , 6	},
      	{ "s3" , "small_3" , 7	},
      	{ "s4" , "small_4" , 8	},
      }
      
      for i in ipairs(lilies_list) do
      	local deg1 = ""
      	local deg2 = ""
      	local lily_groups = {snappy = 3,flammable=2,flower=1}
      
      	if lilies_list[i][1] ~= nil then
      		deg1 = "_"..lilies_list[i][1]
      		deg2 = "_"..lilies_list[i][2]
      		lily_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
      	end
      
      	minetest.register_node(":flowers:waterlily"..deg1, {
      		description = S("Waterlily"),
      		drawtype = "nodebox",
      		tiles = {
      			"flowers_waterlily"..deg2..".png",
      			"flowers_waterlily"..deg2..".png^[transformFY"
      		},
      		inventory_image = "flowers_waterlily.png",
      		wield_image  = "flowers_waterlily.png",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "facedir",
      		walkable = false,
      		groups = lily_groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = {
      			type = "fixed",
      			fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
      		},
      		node_box = {
      			type = "fixed",
      			fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
      		},
      		buildable_to = true,
      		node_placement_prediction = "",
      
      		liquids_pointable = true,
      		drop = "flowers:waterlily",
      		on_place = function(itemstack, placer, pointed_thing)
      			local keys=placer:get_player_control()
      			local pt = pointed_thing
      
      			local place_pos = nil
      			local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
      			local under_node = minetest.get_node(pt.under)
      			local above_node = minetest.get_node(pt.above)
      			local top_node   = minetest.get_node(top_pos)
      
      			if biome_lib.get_nodedef_field(under_node.name, "buildable_to") then
      				if under_node.name ~= "default:water_source" then
      					place_pos = pt.under
      				elseif top_node.name ~= "default:water_source"
      				       and biome_lib.get_nodedef_field(top_node.name, "buildable_to") then
      					place_pos = top_pos
      				else
      					return
      				end
      			elseif biome_lib.get_nodedef_field(above_node.name, "buildable_to") then
      				place_pos = pt.above
      			end
      
      			if place_pos and not minetest.is_protected(place_pos, placer:get_player_name()) then
      
      			local nodename = "default:cobble" -- if this block appears, something went....wrong :-)
      
      				if not keys["sneak"] then
      					local node = minetest.get_node(pt.under)
      					local waterlily = math.random(1,8)
      					if waterlily == 1 then
      						nodename = "flowers:waterlily"
      					elseif waterlily == 2 then
      						nodename = "flowers:waterlily_225"
      					elseif waterlily == 3 then
      						nodename = "flowers:waterlily_45"
      					elseif waterlily == 4 then
      						nodename = "flowers:waterlily_675"
      					elseif waterlily == 5 then
      						nodename = "flowers:waterlily_s1"
      					elseif waterlily == 6 then
      						nodename = "flowers:waterlily_s2"
      					elseif waterlily == 7 then
      						nodename = "flowers:waterlily_s3"
      					elseif waterlily == 8 then
      						nodename = "flowers:waterlily_s4"
      					end
      					minetest.swap_node(place_pos, {name = nodename, param2 = math.random(0,3) })
      				else
      					local fdir = minetest.dir_to_facedir(placer:get_look_dir())
      					minetest.swap_node(place_pos, {name = "flowers:waterlily", param2 = fdir})
      				end
      
      				if not biome_lib.expect_infinite_stacks then
      					itemstack:take_item()
      				end
      				return itemstack
      			end
      		end,
      	})
      end
      
      local algae_list = { {nil}, {2}, {3}, {4} }
      
      for i in ipairs(algae_list) do
      	local num = ""
      	local algae_groups = {snappy = 3,flammable=2,flower=1}
      
      	if algae_list[i][1] ~= nil then
      		num = "_"..algae_list[i][1]
      		algae_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
      	end
      
      	minetest.register_node(":flowers:seaweed"..num, {
      		description = S("Seaweed"),
      		drawtype = "nodebox",
      		tiles = {
      			"flowers_seaweed"..num..".png",
      			"flowers_seaweed"..num..".png^[transformFY"
      		},
      		inventory_image = "flowers_seaweed_2.png",
      		wield_image  = "flowers_seaweed_2.png",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "facedir",
      		walkable = false,
      		groups = algae_groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = {
      			type = "fixed",
      			fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
      		},
      		node_box = {
      			type = "fixed",
      			fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
      		},
      		buildable_to = true,
      
      		liquids_pointable = true,
      		drop = "flowers:seaweed",
      		on_place = function(itemstack, placer, pointed_thing)
      			local keys=placer:get_player_control()
      			local pt = pointed_thing
      
      			local place_pos = nil
      			local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
      			local under_node = minetest.get_node(pt.under)
      			local above_node = minetest.get_node(pt.above)
      			local top_node   = minetest.get_node(top_pos)
      
      			if biome_lib.get_nodedef_field(under_node.name, "buildable_to") then
      				if under_node.name ~= "default:water_source" then
      					place_pos = pt.under
      				elseif top_node.name ~= "default:water_source"
      				       and biome_lib.get_nodedef_field(top_node.name, "buildable_to") then
      					place_pos = top_pos
      				else
      					return
      				end
      			elseif biome_lib.get_nodedef_field(above_node.name, "buildable_to") then
      				place_pos = pt.above
      			end
      			if not place_pos then return end -- something went wrong :P
      
      			if not minetest.is_protected(place_pos, placer:get_player_name()) then
      
      			local nodename = "default:cobble" -- :D
      
      				if not keys["sneak"] then
      					--local node = minetest.get_node(pt.under)
      					local seaweed = math.random(1,4)
      					if seaweed == 1 then
      						nodename = "flowers:seaweed"
      					elseif seaweed == 2 then
      						nodename = "flowers:seaweed_2"
      					elseif seaweed == 3 then
      						nodename = "flowers:seaweed_3"
      					elseif seaweed == 4 then
      						nodename = "flowers:seaweed_4"
      					end
      					minetest.swap_node(place_pos, {name = nodename, param2 = math.random(0,3) })
      				else
      					local fdir = minetest.dir_to_facedir(placer:get_look_dir())
      					minetest.swap_node(place_pos, {name = "flowers:seaweed", param2 = fdir})
      				end
      
      				if not biome_lib.expect_infinite_stacks then
      					itemstack:take_item()
      				end
      				return itemstack
      			end
      		end,
      	})
      end
      
      local box = {
      	type="fixed",
      	fixed = { { -0.2, -0.5, -0.2, 0.2, 0.5, 0.2 } },
      }
      
      local sunflower_drop = "farming:seed_wheat"
      if minetest.registered_items["farming:seed_spelt"] then
      	sunflower_drop = "farming:seed_spelt"
      end
      
      minetest.register_node(":flowers:sunflower", {
      	description = S("Sunflower"),
      	drawtype = "mesh",
      	paramtype = "light",
      	paramtype2 = "facedir",
      	inventory_image = "flowers_sunflower_inv.png",
      	mesh = "flowers_sunflower.obj",
      	tiles = { "flowers_sunflower.png" },
      	walkable = false,
      	buildable_to = true,
      	is_ground_content = true,
      	groups = { dig_immediate=3, flora=1, flammable=3, attached_node=1 },
      	sounds = default.node_sound_leaves_defaults(),
      	selection_box = box,
      	collision_box = box,
      	drop = {
      		max_items = 1,
      		items = {
      			{items = {sunflower_drop}, rarity = 8},
      			{items = {"flowers:sunflower"}},
      		}
      	}
      })
      
      local extra_aliases = {
      	"waterlily",
      	"waterlily_225",
      	"waterlily_45",
      	"waterlily_675",
      	"seaweed"
      }
      
      for i in ipairs(extra_aliases) do
      	local flower = extra_aliases[i]
      	minetest.register_alias("flowers:flower_"..flower, "flowers:"..flower)
      end
      
      minetest.register_alias( "trunks:lilypad"         ,	"flowers:waterlily_s1" )
      minetest.register_alias( "along_shore:lilypads_1" , "flowers:waterlily_s1" )
      minetest.register_alias( "along_shore:lilypads_2" , "flowers:waterlily_s2" )
      minetest.register_alias( "along_shore:lilypads_3" , "flowers:waterlily_s3" )
      minetest.register_alias( "along_shore:lilypads_4" , "flowers:waterlily_s4" )
      minetest.register_alias( "along_shore:pondscum_1" ,	"flowers:seaweed"      )
      minetest.register_alias( "along_shore:seaweed_1"  ,	"flowers:seaweed"      )
      minetest.register_alias( "along_shore:seaweed_2"  ,	"flowers:seaweed_2"    )
      minetest.register_alias( "along_shore:seaweed_3"  ,	"flowers:seaweed_3"    )
      minetest.register_alias( "along_shore:seaweed_4"  ,	"flowers:seaweed_4"    )
      
      -- ongen registrations
      
      flowers_plus.grow_waterlily = function(pos)
      	local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
      	for i in ipairs(lilies_list) do
      		local chance = math.random(1,8)
      		local ext = ""
      		local num = lilies_list[i][3]
      
      		if lilies_list[i][1] ~= nil then
      			ext = "_"..lilies_list[i][1]
      		end
      
      		if chance == num then
      			minetest.swap_node(right_here, {name="flowers:waterlily"..ext, param2=math.random(0,3)})
      		end
      	end
      end
      
      biome_lib.register_on_generate({
          surface = {"default:water_source"},
          max_count = lilies_max_count,
          rarity = lilies_rarity,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:dirt_with_grass"},
      	near_nodes_size = 4,
      	near_nodes_vertical = 1,
      	near_nodes_count = 1,
          plantlife_limit = -0.9,
      	temp_max = -0.22,
          temp_min = 0.22,
        },
        flowers_plus.grow_waterlily
      )
      
      flowers_plus.grow_seaweed = function(pos)
      	local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
      	minetest.swap_node(right_here, {name="along_shore:seaweed_"..math.random(1,4), param2=math.random(1,3)})
      end
      
      biome_lib.register_on_generate({
          surface = {"default:water_source"},
          max_count = seaweed_max_count,
          rarity = seaweed_rarity,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:dirt_with_grass"},
      	near_nodes_size = 4,
      	near_nodes_vertical = 1,
      	near_nodes_count = 1,
          plantlife_limit = -0.9,
        },
        flowers_plus.grow_seaweed
      )
      
      -- seaweed at beaches
      -- MM: not satisfied with it, but IMHO some beaches should have some algae
      biome_lib.register_on_generate({
          surface = {"default:water_source"},
          max_count = seaweed_max_count,
          rarity = seaweed_rarity,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:sand"},
      	near_nodes_size = 1,
      	near_nodes_vertical = 0,
      	near_nodes_count = 3,
          plantlife_limit = -0.9,
      	temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere
          temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere
        },
        flowers_plus.grow_seaweed
      )
      biome_lib.register_on_generate({
          surface = {"default:sand"},
          max_count = seaweed_max_count*2,
          rarity = seaweed_rarity/2,
          min_elevation = 1,
      	max_elevation = 40,
      	near_nodes = {"default:water_source"},
      	near_nodes_size = 1,
      	near_nodes_vertical = 0,
      	near_nodes_count = 3,
          plantlife_limit = -0.9,
      	temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere
          temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere
        },
        flowers_plus.grow_seaweed
      )
      
      biome_lib.register_on_generate({
      	surface = {"default:dirt_with_grass"},
      	avoid_nodes = { "flowers:sunflower" },
      	max_count = sunflowers_max_count,
      	rarity = sunflowers_rarity,
      	min_elevation = 0,
      	plantlife_limit = -0.9,
      	temp_max = 0.53,
      	random_facedir = {0,3},
        },
        "flowers:sunflower"
      )
      
      -- spawn ABM registrations
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY/2,
      	spawn_plants = {
      		"flowers:waterlily",
      		"flowers:waterlily_225",
      		"flowers:waterlily_45",
      		"flowers:waterlily_675",
      		"flowers:waterlily_s1",
      		"flowers:waterlily_s2",
      		"flowers:waterlily_s3",
      		"flowers:waterlily_s4"
      	},
      	avoid_radius = 2.5,
      	spawn_chance = SPAWN_CHANCE*4,
      	spawn_surfaces = {"default:water_source"},
      	avoid_nodes = {"group:flower", "group:flora" },
      	seed_diff = flowers_seed_diff,
      	light_min = 9,
      	depth_max = 2,
      	random_facedir = {0,3}
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:seaweed"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:water_source"},
      	avoid_nodes = {"group:flower", "group:flora"},
      	seed_diff = flowers_seed_diff,
      	light_min = 4,
      	light_max = 10,
      	neighbors = {"default:dirt_with_grass"},
      	facedir = 1
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:seaweed"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:dirt_with_grass"},
      	avoid_nodes = {"group:flower", "group:flora" },
      	seed_diff = flowers_seed_diff,
      	light_min = 4,
      	light_max = 10,
      	neighbors = {"default:water_source"},
      	ncount = 1,
      	facedir = 1
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:seaweed"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:stone"},
      	avoid_nodes = {"group:flower", "group:flora" },
      	seed_diff = flowers_seed_diff,
      	light_min = 4,
      	light_max = 10,
      	neighbors = {"default:water_source"},
      	ncount = 6,
      	facedir = 1
      })
      
      biome_lib.register_active_spawner({
      	spawn_delay = SPAWN_DELAY*2,
      	spawn_plants = {"flowers:sunflower"},
      	spawn_chance = SPAWN_CHANCE*2,
      	spawn_surfaces = {"default:dirt_with_grass"},
      	avoid_nodes = {"group:flower", "flowers:sunflower"},
      	seed_diff = flowers_seed_diff,
      	light_min = 11,
      	light_max = 14,
      	min_elevation = 0,
      	plantlife_limit = -0.9,
      	temp_max = 0.53,
      	random_facedir = {0,3},
      	avoid_radius = 5
      })
      
      -- Cotton plants are now provided by the default "farming" mod.
      -- old cotton plants -> farming cotton stage 8
      -- cotton wads -> string (can be crafted into wool blocks)
      -- potted cotton plants -> potted white dandelions
      
      minetest.register_alias("flowers:cotton_plant", "farming:cotton_8")
      minetest.register_alias("flowers:flower_cotton", "farming:cotton_8")
      minetest.register_alias("flowers:flower_cotton_pot", "flowers:potted_dandelion_white")
      minetest.register_alias("flowers:potted_cotton_plant", "flowers:potted_dandelion_white")
      minetest.register_alias("flowers:cotton", "farming:string")
      minetest.register_alias("flowers:cotton_wad", "farming:string")
      minetest.register_alias("sunflower:sunflower", "flowers:sunflower")
      
      print("[Flowers] Loaded.")
    • paste this in .../worldmods/plantlife_modpack/nature_classic/init.lua
      Spoiler

      Code: Select all

      -- Nature Classic mod
      -- Originally by neko259
      
      -- Nature is slowly capturing the world!
      
      local current_mod_name = minetest.get_current_modname()
      
      nature = {}
      -- support for i18n
      local S = minetest.get_translator("nature_classic")
      
      nature.blossomqueue = {}
      nature.blossomqueue_max = 1000
      
      nature.blossom_decay = 2
      nature.blossom_trunk = "default:tree"
      nature.blossom_node = "nature:blossom"
      nature.blossom_leaves = "default:leaves"
      nature.blossom_textures = { "default_leaves.png^nature_blossom.png" }
      nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2 }
      
      if minetest.get_modpath("moretrees") then
      	nature.blossom_decay = moretrees.leafdecay_radius
      	nature.blossom_trunk = "moretrees:apple_tree_trunk"
      	nature.blossom_node = "moretrees:apple_blossoms"
      	nature.blossom_leaves = "moretrees:apple_tree_leaves"
      	nature.blossom_textures = { "moretrees_apple_tree_leaves.png^nature_blossom.png" }
          nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2, moretrees_leaves = 1 },
      	minetest.register_alias("nature:blossom", "default:leaves")
      end
      
      nature.leaves_blossom_chance = 15
      nature.blossom_leaves_chance = 0	--Eris changed from default value = 5
      nature.blossom_delay = 3600
      nature.apple_delay = 3600
      nature.apple_chance = 0		--Eris changed from default value = 10
      nature.apple_spread = 0		--Eris changed from default value = 2
      
      nature.meta_blossom_time = "blossom_time"
      nature.blossom_duration = nature.blossom_delay
      
      function dumppos(pos)
      	return "("..pos.x..","..pos.y..","..pos.z..")"
      end
      
      dofile(minetest.get_modpath(current_mod_name) .. "/config.lua")
      dofile(minetest.get_modpath(current_mod_name) .. "/global_function.lua")
      dofile(minetest.get_modpath(current_mod_name) .. "/blossom.lua")
      
      minetest.log("info", S("[Nature Classic] loaded!"))
    • paste this in .../worldmods/plantlife_modpack/vines/init.lua
      Spoiler

      Code: Select all

      vines = {
      	name = 'vines',
      	recipes = {}
      }
      
      local enable_roots = minetest.settings:get_bool("vines_enable_roots")
      
      -- support for i18n
      local S = minetest.get_translator("vines")
      
      -- ITEMS
      
      minetest.register_craftitem("vines:vines", {
      	description = S("Vines"),
      	inventory_image = "vines_item.png",
      	groups = {vines = 1, flammable = 2}
      })
      
      -- FUNCTIONS
      
      local function dig_down(pos, node, digger)
      
      	if digger == nil then return end
      
      	local np = {x = pos.x, y = pos.y - 1, z = pos.z}
      	local nn = minetest.get_node(np)
      
      	if minetest.get_item_group(nn.name, "vines") > 0 then
      		minetest.node_dig(np, nn, digger)
      	end
      end
      
      
      vines.register_vine = function( name, defs, biome )
      
      	local groups = {vines = 1, snappy = 3, flammable = 2, attached_node = 1}
      	local vine_name_end = 'vines:' .. name .. '_end'
      	local vine_name_middle = 'vines:' .. name .. '_middle'
      	local vine_image_end = "vines_" .. name .. "_end.png"
      	local vine_image_middle = "vines_" .. name .. "_middle.png"
      	local drop_node = vine_name_end
      
      	biome.spawn_plants = {vine_name_end}
      
      	local vine_group = 'group:' .. name .. '_vines'
      
      	biome.spawn_surfaces[#biome.spawn_surfaces + 1] = vine_group
      
      	local selection_box = {type = "wallmounted",}
      	local drawtype = 'signlike'
      
      	-- different properties for bottom and side vines.
      	if not biome.spawn_on_side then
      
      		selection_box = {
      			type = "fixed", fixed = { -0.4, -1/2, -0.4, 0.4, 1/2, 0.4 }
      		}
      
      		drawtype = 'plantlike'
      	end
      
      	minetest.register_node(vine_name_end, {
      		description = defs.description,
      		walkable = false,
      		climbable = true,
      		wield_image = vine_image_end,
      		drop = "vines:vines",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "wallmounted",
      		buildable_to = false,
      		tiles = {vine_image_end},
      		drawtype = drawtype,
      		inventory_image = vine_image_end,
      		groups = groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = selection_box,
      
      		on_construct = function(pos)
      
      			local timer = minetest.get_node_timer(pos)
      
      			timer:start(math.random(5, 10))
      		end,
      
      		on_timer = function(pos)
      
      			local node = minetest.get_node(pos)
      			local bottom = {x = pos.x, y = pos.y - 1, z = pos.z}
      			local bottom_node = minetest.get_node( bottom )
      
      			if bottom_node.name == "air" then
      
      				if not math.random(defs.average_length) == 1 then
      
      					minetest.set_node(pos, {
      							name = vine_name_middle, param2 = node.param2})
      
      					minetest.set_node(bottom, {
      							name = node.name, param2 = node.param2})
      
      					local timer = minetest.get_node_timer(bottom_node)
      
      					timer:start(math.random(5, 10))
      				end
      			end
      		end,
      
      		after_dig_node = function(pos, node, metadata, digger)
      			dig_down(pos, node, digger)
      		end,
      	})
      
      	minetest.register_node( vine_name_middle, {
      		description = S("Matured") .. " " .. defs.description,
      		walkable = false,
      		climbable = true,
      		drop = "vines:vines",
      		sunlight_propagates = true,
      		paramtype = "light",
      		paramtype2 = "wallmounted",
      		buildable_to = false,
      		tiles = {vine_image_middle},
      		wield_image = vine_image_middle,
      		drawtype = drawtype,
      		inventory_image = vine_image_middle,
      		groups = groups,
      		sounds = default.node_sound_leaves_defaults(),
      		selection_box = selection_box,
      
      		after_dig_node = function(pos, node, metadata, digger)
      			dig_down(pos, node, digger)
      		end,
      	})
      
      	biome_lib.register_active_spawner(biome)
      end
      
      -- ALIASES
      
      -- used to remove the old vine nodes and give room for the new.
      minetest.register_alias( 'vines:root', 'air' )
      minetest.register_alias( 'vines:root_rotten', 'air' )
      minetest.register_alias( 'vines:vine', 'air' )
      minetest.register_alias( 'vines:vine_rotten', 'air' )
      minetest.register_alias( 'vines:side', 'air' )
      minetest.register_alias( 'vines:side_rotten', 'air' )
      minetest.register_alias( 'vines:jungle', 'air' )
      minetest.register_alias( 'vines:jungle_rotten', 'air' )
      minetest.register_alias( 'vines:willow', 'air' )
      minetest.register_alias( 'vines:willow_rotten', 'air' )
      
      -- CRAFTS
      
      minetest.register_craft({
      	output = 'vines:rope_block',
      	recipe = {
      		{'group:vines', 'group:vines', 'group:vines'},
      		{'group:vines', 'group:wood', 'group:vines'},
      		{'group:vines', 'group:vines', 'group:vines'},
      	}
      })
      
      if minetest.get_modpath("moreblocks") then
      
      	minetest.register_craft({
      		output = 'vines:rope_block',
      		recipe = {
      			{'moreblocks:rope', 'moreblocks:rope', 'moreblocks:rope'},
      			{'moreblocks:rope', 'group:wood', 'moreblocks:rope'},
      			{'moreblocks:rope', 'moreblocks:rope', 'moreblocks:rope'},
      		}
      	})
      end
      
      minetest.register_craft({
      	output = 'vines:shears',
      	recipe = {
      		{'', 'default:steel_ingot', ''},
      		{'group:stick', 'group:wood', 'default:steel_ingot'},
      		{'', '', 'group:stick'}
      	}
      })
      
      -- NODES
      
      minetest.register_node("vines:rope_block", {
      	description = S("Rope"),
      	sunlight_propagates = true,
      	paramtype = "light",
      	tiles = {
      		"default_wood.png^vines_rope.png",
      		"default_wood.png^vines_rope.png",
      		"default_wood.png",
      		"default_wood.png",
      		"default_wood.png^vines_rope.png",
      		"default_wood.png^vines_rope.png",
      	},
      	groups = {flammable = 2, choppy = 2, oddly_breakable_by_hand = 1},
      
      	after_place_node = function(pos)
      
      		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
      		local n = minetest.get_node(p)
      
      		if n.name == "air" then
      			minetest.add_node(p, {name = "vines:rope_end"})
      		end
      	end,
      
      	after_dig_node = function(pos, node, digger)
      
      		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
      		local n = minetest.get_node(p)
      
      		while n.name == 'vines:rope' or n.name == 'vines:rope_end' do
      
      			minetest.remove_node(p)
      
      			p = {x = p.x, y = p.y - 1, z = p.z}
      			n = minetest.get_node(p)
      		end
      	end
      })
      
      minetest.register_node("vines:rope", {
      	description = S("Rope"),
      	walkable = false,
      	climbable = true,
      	sunlight_propagates = true,
      	paramtype = "light",
      	drop = {},
      	tiles = {"vines_rope.png"},
      	drawtype = "plantlike",
      	groups = {flammable = 2, not_in_creative_inventory = 1},
      	sounds = default.node_sound_leaves_defaults(),
      	selection_box = {
      		type = "fixed",
      		fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
      	},
      })
      
      minetest.register_node("vines:rope_end", {
      	description = S("Rope"),
      	walkable = false,
      	climbable = true,
      	sunlight_propagates = true,
      	paramtype = "light",
      	drop = {},
      	tiles = {"vines_rope_end.png"},
      	drawtype = "plantlike",
      	groups = {flammable = 2, not_in_creative_inventory = 1},
      	sounds = default.node_sound_leaves_defaults(),
      
      	after_place_node = function(pos)
      
      		local yesh = {x = pos.x, y = pos.y - 1, z = pos.z}
      
      		minetest.add_node(yesh, {name = "vines:rope"})
      	end,
      
      	selection_box = {
      		type = "fixed",
      		fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
      	},
      
      	on_construct = function(pos)
      
      		local timer = minetest.get_node_timer(pos)
      
      		timer:start(1)
      	end,
      
      	on_timer = function( pos, elapsed )
      
      		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
      		local n = minetest.get_node(p)
      
      		if	n.name == "air" then
      
      			minetest.set_node(pos, {name = "vines:rope"})
      			minetest.add_node(p, {name = "vines:rope_end"})
      		else
      
      			local timer = minetest.get_node_timer(pos)
      
      			timer:start(1)
      		end
      	end
      })
      
      -- SHEARS
      
      minetest.register_tool("vines:shears", {
      	description = S("Shears"),
      	inventory_image = "vines_shears.png",
      	wield_image = "vines_shears.png",
      	stack_max = 1,
      	max_drop_level = 3,
      	tool_capabilities = {
      		full_punch_interval = 1.0,
      		max_drop_level = 1,
      		groupcaps = {
      			snappy = {times = {[3] = 0.2}, uses = 60, maxlevel = 3},
      		}
      	},
      })
      
      -- VINES
      local spawn_root_surfaces = {}
      
      if enable_roots ~= false then
      	spawn_root_surfaces = {
      		"default:dirt_with_grass",
      		"default:dirt"
      	}
      end
      
      vines.register_vine('root',
      	{description = S("Roots"), average_length = 9}, {
      	choose_random_wall = true,
      	avoid_nodes = {"vines:root_middle"},
      	avoid_radius = 5,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 10
      	spawn_surfaces = spawn_root_surfaces,
      	spawn_on_bottom = true,
      	plantlife_limit = -0.6,
      	humidity_min = 0.4,
      })
      
      vines.register_vine('vine',
      	{description = S("Vines"), average_length = 5}, {
      	choose_random_wall = true,
      	avoid_nodes = {"group:vines"},
      	avoid_radius = 5,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 100
      	spawn_surfaces = {
      --		"default:leaves",
      		"default:jungleleaves",
      		"moretrees:jungletree_leaves_red",
      		"moretrees:jungletree_leaves_yellow",
      		"moretrees:jungletree_leaves_green"
      	},
      	spawn_on_bottom = true,
      	plantlife_limit = -0.9,
      	humidity_min = 0.7,
      })
      
      vines.register_vine('side',
      	{description = S("Vines"), average_length = 6}, {
      	choose_random_wall = true,
      	avoid_nodes = {"group:vines", "default:apple"},
      	avoid_radius = 3,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 100
      	spawn_surfaces = {
      --		"default:leaves",
      		"default:jungleleaves",
      		"moretrees:jungletree_leaves_red",
      		"moretrees:jungletree_leaves_yellow",
      		"moretrees:jungletree_leaves_green"
      	},
      	spawn_on_side = true,
      	plantlife_limit = -0.9,
      	humidity_min = 0.4,
      })
      
      vines.register_vine("jungle",
      	{description = S("Jungle Vines"), average_length = 7}, {
      	choose_random_wall = true,
      	neighbors = {
      		"default:jungleleaves",
      		"moretrees:jungletree_leaves_red",
      		"moretrees:jungletree_leaves_yellow",
      		"moretrees:jungletree_leaves_green"
      	},
      	avoid_nodes = {
      		"vines:jungle_middle",
      		"vines:jungle_end",
      	},
      	avoid_radius = 5,
      	spawn_delay = 500,
      	spawn_chance = -1,		--Eris changed from default value = 100
      	spawn_surfaces = {
      		"default:jungletree",
      		"moretrees:jungletree_trunk"
      	},
      	spawn_on_side = true,
      	plantlife_limit = -0.9,
      	humidity_min = 0.2,
      })
      
      vines.register_vine( 'willow',
      	{description = S("Willow Vines"), average_length = 9}, {
      	choose_random_wall = true,
      	avoid_nodes = {"vines:willow_middle"},
      	avoid_radius = 5,
      	near_nodes = {'default:water_source'},
      	near_nodes_size = 1,
      	near_nodes_count = 1,
      	near_nodes_vertical = 7,
      	plantlife_limit = -0.8,
      	spawn_chance = 10,
      	spawn_delay = 500,
      	spawn_on_side = true,
      	spawn_surfaces = {"moretrees:willow_leaves"},
      	humidity_min = 0.5
      })
      
      
      print("[Vines] Loaded!")
  3. You are ready, enjoy!
Attachments
beachmansion1.jpg
beachmansion1.jpg (842.22 KiB) Viewed 657 times
beachmansion0.jpg
beachmansion0.jpg (798.73 KiB) Viewed 657 times
beach_mansion.mts
(71.93 KiB) Downloaded 127 times
Last edited by Eris on Sun Jan 14, 2024 13:25, edited 2 times in total.
Jump in the caac

User avatar
FunKey
New member
Posts: 7
Joined: Tue Apr 20, 2021 11:51

Re: Share Your WorldEdit Files!

by FunKey » Post

[warning: my bad english]

My version of a blacksmith (mineclone 5).
A problem with chests and armor stand at load time.
With the MTS file the chests and the armors arent visible but there. Opening a chest appairs. A right-click on the armor stand and appairs.
With the WE file the armor arent visible but placing an armor piece appair.
Spoiler
Image
Attachments
[mc5]blacksmith.jpg
[mc5]blacksmith.jpg (282.21 KiB) Viewed 3069 times
[mc5]blacksmith(-1+9+10+11).mts
minetest scheme file
(1.29 KiB) Downloaded 114 times
[mc5]blacksmith(-1+9+10+11).we
world edit file
(56.41 KiB) Downloaded 105 times

User avatar
BRNSystems
New member
Posts: 5
Joined: Sat May 23, 2020 06:12
GitHub: BRNSystems
In-game: BRNSystems

Re: Share Your WorldEdit Files!

by BRNSystems » Post

torpedo.we
(2.36 KiB) Downloaded 100 times
name: torpedo
size: 45 blocks
mods:mesecons, tnt

Papang
Member
Posts: 19
Joined: Sun Jul 10, 2022 17:28
IRC: Papang
In-game: Papang

Re: Share Your WorldEdit Files!

by Papang » Post

Hello,
This is a project i made on server Francophonia and i wanted to share with the community, all the rooms are decorated and furnished like in the real royal castle but only with moreblocks nodes. There might be some errors on building sizes, it was pretty hard to figure that out (especially in some rooms like the Antichambre à l'oeil de boeuf)

Name : Versailles
Size : 98 484 nodes (26 blocks high)
Mods : default & moreblocks & World edit
Screenshots :
Image
Image
Image
Image

Downloads :
VersaillesAB.mts
(81.21 KiB) Downloaded 89 times
VersaillesAB.zip
(597.73 KiB) Downloaded 104 times
For text in signs, use the .we file (compressed in .zip), the .mts file is here in case of problems (no texts on signs). If the file VersaillesAB.we is too big, use the 2 files VersaillesA.we and VersaillesB.we (next message).
Select the 7th node underground (dig 6 nodes) then allocate and replace nodes by air before loading the file.
Enjoy the visit !

Papang
Member
Posts: 19
Joined: Sun Jul 10, 2022 17:28
IRC: Papang
In-game: Papang

Re: Share Your WorldEdit Files!

by Papang » Post

Here are the splitted files :
VersaillesA.zip
(303.79 KiB) Downloaded 95 times
VersaillesB.zip
(279.19 KiB) Downloaded 85 times

mmmax
New member
Posts: 1
Joined: Sat Dec 10, 2022 16:53
In-game: mmmax

Re: Share Your WorldEdit Files!

by mmmax » Post

The Ore refinery in openRA.
mods:
  • default
  • bakedclay
  • moreblocks
  • pipeworks (only for decoration)
screenshot2.png
screenshot2.png (908.03 KiB) Viewed 2055 times
screenshot1.png
screenshot1.png (728.57 KiB) Viewed 2055 times
Ore_refinery.we
(203.31 KiB) Downloaded 88 times

User avatar
Eris
Member
Posts: 175
Joined: Thu Nov 19, 2020 23:12
IRC: definitelya Ovalo
In-game: Eris_still_crafts

Re: Share Your WorldEdit Files!

by Eris » Post

A semi-automatic solution for your steak production in MCLA/MCL 2: simply feed the cows, wait for them to grow and press the button.
It seems the redstone circuit has a bug I sadly don't know how to fix: a redstone torch gets updated every time the mapblock is reloaded, messing up the water bucket dispensers... A fix is required in-code, I think.

EDIT: Added a Mineclonia version and a warning about redstone issue.
Attachments
cooker.we
Mineclonia version.
(53.55 KiB) Downloaded 34 times
cooker.we
Mineclone 2 version (unmaintained!).
(53.36 KiB) Downloaded 60 times
Jump in the caac

Papang
Member
Posts: 19
Joined: Sun Jul 10, 2022 17:28
IRC: Papang
In-game: Papang

Re: Share Your WorldEdit Files!

by Papang » Post

Hello dear community of diggers and builders !
I've just finished my new project on Francophonia's server : The Taj Mahal

It's about 300x600x100 blocks and it needs moreblocks and xdecor mods

Put your first world edit position at ground's level.
Screenshots from francophonia's server vs reality :

Darwaza-i rauza
Image
Image

the mausoleum
Image
Image

Screenshots with default textures (i suggest to change them with better ones) :
Image
Image

I'm sorry but i couldn't save the .we file, so here is the .mts file :
TajMahal.mts
(389.57 KiB) Downloaded 41 times

Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests