diff options
198 files changed, 4941 insertions, 0 deletions
| diff --git a/crystal.lua b/crystal.lua new file mode 100644 index 0000000..c5da26e --- /dev/null +++ b/crystal.lua @@ -0,0 +1,197 @@ +-- Crystal Spike (Hurts if you touch it - thanks to ZonerDarkRevention for his DokuCraft DeviantArt crystal texture) +minetest.register_node("ethereal:crystal_spike", { +	description = "Crystal Spike", +	drawtype = "plantlike", +	tiles = { "crystal_spike.png" }, +	inventory_image = "crystal_spike.png", +	wield_image = "crystal_spike.png", +	paramtype = "light", +	light_source = LIGHT_MAX - 7, +	walkable = false, +	damage_per_second = 1, +	groups = {cracky=1,falling_node=1,puts_out_fire=1}, +	sounds = default.node_sound_glass_defaults(), +	selection_box = { +		type = "fixed", +		fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, +	}, +}) + +-- Crystal Ingot +minetest.register_craftitem("ethereal:crystal_ingot", { +	description = "Crystal Ingot", +	inventory_image = "crystal_ingot.png", +}) + +minetest.register_craft({ +	output = "ethereal:crystal_ingot", +	recipe = { +		{"default:mese_crystal", "ethereal:crystal_spike", ""}, +		{"", "", ""}, +		{"", "", ""}, +	} +}) + +-- Crystal Block +minetest.register_node("ethereal:crystal_block", { +	description = "Crystal Block", +	tiles = {"crystal_block.png"}, +	light_source = LIGHT_MAX - 5, +	groups = {cracky=1,level=2,puts_out_fire}, +	sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:crystal_block", +	recipe = { +		{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"}, +		{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"}, +		{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"}, +	} +}) + +minetest.register_craft({ +	output = "ethereal:crystal_ingot 9", +	recipe = { +		{"ethereal:crystal_block"}, +	} +}) + +-- Crystal Sword (Powerful wee beastie) +minetest.register_tool("ethereal:sword_crystal", { +	description = "Crystal Sword", +	inventory_image = "crystal_sword.png", +	tool_capabilities = { +		full_punch_interval = 0.6, +		max_drop_level=1, +		groupcaps={ +			snappy={times={[1]=1.70, [2]=0.70, [3]=0.25}, uses=50, maxlevel=3}, +		}, +		damage_groups = {fleshy=10}, +	} +}) + +minetest.register_craft({ +	output = "ethereal:sword_crystal", +	recipe = { +		{"", "ethereal:crystal_ingot", ""}, +		{"", "ethereal:crystal_ingot", ""}, +		{"", "default:steel_ingot", ""}, +	} +}) + +-- Crystal Axe +minetest.register_tool("ethereal:axe_crystal", { +	description = "Crystal Axe", +	inventory_image = "crystal_axe.png", +	tool_capabilities = { +		full_punch_interval = 0.8, +		max_drop_level=1, +		groupcaps={ +			choppy={times={[1]=2.00, [2]=0.80, [3]=0.40}, uses=30, maxlevel=2}, +		}, +		damage_groups = {fleshy=7}, +	}, +}) + +minetest.register_craft({ +	output = 'ethereal:axe_crystal', +	recipe = { +		{'ethereal:crystal_ingot', 'ethereal:crystal_ingot'}, +		{'ethereal:crystal_ingot', 'default:steel_ingot'}, +		{'', 'default:steel_ingot'}, +	} +}) + +-- Crystal Pick (This will last a while) +minetest.register_tool("ethereal:pick_crystal", { +	description = "Crystal Pickaxe", +	inventory_image = "crystal_pick.png", +	tool_capabilities = { +		full_punch_interval = 0.7, +		max_drop_level=3, +		groupcaps={ +			cracky = {times={[1]=1.8, [2]=0.8, [3]=0.40}, uses=40, maxlevel=3}, +		}, +		damage_groups = {fleshy=7}, +	}, +}) + +minetest.register_craft({ +	output = "ethereal:pick_crystal", +	recipe = { +		{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"}, +		{"", "default:steel_ingot", ""}, +		{"", "default:steel_ingot", ""}, +	} +}) + +-- Crystal Shovel (with Soft Touch so player can dig up dirt with grass intact) +minetest.register_tool("ethereal:shovel_crystal", { +	description = "Crystal (soft touch) Shovel", +	inventory_image = "crystal_shovel.png", +	wield_image = "crystal_shovel.png^[transformR90", + +	on_use = function(itemstack, user, pointed_thing) + +		if pointed_thing.type == "node" then + +		-- Check if node protected +		if not minetest.is_protected(pointed_thing.under, user:get_player_name()) then + +			local pos = pointed_thing.under +			local nn = minetest.get_node(pos).name +			local is_crumbly = minetest.get_item_group(nn, "crumbly") + +			-- Is node dirt, sand or gravel +			if is_crumbly == 1 or is_crumbly == 2 or is_crumbly == 3 then + +				local inv = user:get_inventory() + +				minetest.env:remove_node(pointed_thing.under) +				nodeupdate(pos) +				 +				inv:add_item("main", {name = nn}) +				itemstack:add_wear(65535/100) -- 111 uses +				minetest.sound_play("default_dirt_footstep", {pos = pos, gain = 0.35}) +				return itemstack +			end + +		end +		end + +	end, +}) + +minetest.register_craft({ +	output = "ethereal:shovel_crystal", +	recipe = { +		{"", "ethereal:crystal_ingot", ""}, +		{"", "default:steel_ingot", ""}, +		{"", "default:steel_ingot", ""}, +	} +}) + +-- Crystal Gilly Staff (replenishes air supply when used, great for exploring underwater) +minetest.register_tool("ethereal:crystal_gilly_staff", { +	description = "Crystal Gilly Staff", +	inventory_image = "crystal_gilly_staff.png", +	wield_image = "crystal_gilly_staff.png", + +	on_use = function(itemstack, user, pointed_thing) + +		if user:get_breath() < 10 then +			user:set_breath(10) +		end + +	end, +}) + +minetest.register_craft({ +	output = "ethereal:crystal_gilly_staff", +	recipe = { +		{"ethereal:green_moss", "ethereal:gray_moss", "ethereal:fiery_moss"}, +		{"ethereal:crystal_moss", "ethereal:crystal_ingot", "ethereal:mushroom_moss"}, +		{"", "ethereal:crystal_ingot", ""}, +	} +}) diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..47c2796 --- /dev/null +++ b/depends.txt @@ -0,0 +1,4 @@ +default
 +farming
 +stairs
 +bakedclay?
\ No newline at end of file diff --git a/dirt.lua b/dirt.lua new file mode 100644 index 0000000..250b9a2 --- /dev/null +++ b/dirt.lua @@ -0,0 +1,139 @@ +-- Override default Dirt (to stop caves cutting away dirt) +minetest.override_item("default:dirt", {is_ground_content = false}) + +-- Green Dirt +minetest.register_node("ethereal:green_dirt", { +	description = "Green Dirt", +	tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"}, +	is_ground_content = false, +	groups = {crumbly=3,soil=1,ethereal_grass=1}, +	drop = "default:dirt", +	sounds = default.node_sound_dirt_defaults() +}) + +-- Dry Dirt +minetest.register_node("ethereal:dry_dirt", { +	description = "Dried Dirt", +	tiles = {"ethereal_dry_dirt.png"}, +	is_ground_content = false, +	groups = {crumbly=3}, +	sounds = default.node_sound_dirt_defaults() +}) + +minetest.register_craft({ +	type = "cooking", +	output = "ethereal:dry_dirt", +	recipe = "default:dirt", +	cooktime = 3, +}) + +local dirt = {} +dirt.type = { +	{"Bamboo"}, {"Jungle"}, {"Grove"}, {"Prairie"}, {"Cold"}, {"Crystal"}, {"Mushroom"}, {"Fiery"}, {"Gray"}, +} + +for _, row in ipairs(dirt.type) do + +	local desc = row[1] +	local name = desc:lower() + +	minetest.register_node("ethereal:"..name.."_dirt", { +		description = desc.." Dirt", +		tiles = {"ethereal_grass_"..name.."_top.png", "default_dirt.png", +				"default_dirt.png^ethereal_grass_"..name.."_side.png"}, +		is_ground_content = false, +		groups = {crumbly=3,soil=1,ethereal_grass=1}, +		drop = "default:dirt", +		sounds = default.node_sound_dirt_defaults() +	}) + +end + +-- Compatibility with old maps +minetest.register_alias("ethereal:crystal_topped_dirt", "ethereal:crystal_dirt") +minetest.register_alias("ethereal:fiery_dirt_top", "ethereal:fiery_dirt") +minetest.register_alias("ethereal:gray_dirt_top", "ethereal:gray_dirt") +minetest.register_alias("ethereal:green_dirt_top", "ethereal:green_dirt") + +-- Check surrounding grass and change dirt to Same colour (by Sokomine) +minetest.register_abm({ +	nodenames = {"default:dirt_with_grass"}, +	interval = 5, +	chance = 5, +	action = function(pos, node) +		local count_grasses = {} +		local curr_max  = 0 +		local curr_type = "ethereal:green_dirt_top"; -- Fallback Colour +		local positions = minetest.find_nodes_in_area( {x=(pos.x-2), y=(pos.y-2), z=(pos.z-2)}, +							       {x=(pos.x+2), y=(pos.y+2), z=(pos.z+2)}, +								"group:ethereal_grass" ) +		for _,p in ipairs(positions) do +			-- count the new grass node +			local n = minetest.get_node( p ) +			if( n and n.name ) then +				if( not( count_grasses[ n.name ] )) then +					count_grasses[ n.name ] = 1 +				else +					count_grasses[ n.name ] = count_grasses[ n.name ] + 1 +				end +				-- we found a grass type of which there"s more than the current max +				if( count_grasses[ n.name ] > curr_max ) then +					curr_max  = count_grasses[ n.name ] +					curr_type = n.name +				end +			end +		end +		minetest.set_node(pos, {name = curr_type }) +        end +}) + +-- If Grass devoid of light, change to Dirt +minetest.register_abm({ +	nodenames = {"group:ethereal_grass"}, +	interval = 5, +	chance = 20, +	action = function(pos, node) +		local name = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name +		local nodedef = minetest.registered_nodes[name] +		if name ~= "ignore" and nodedef +				and not ((nodedef.sunlight_propagates or nodedef.paramtype == "light") +				and nodedef.liquidtype == "none") then +			minetest.set_node(pos, {name = "default:dirt"}) +		end +	end +}) + +-- If Baked Clay mod not active, make Red and Orange nodes +if not minetest.get_modpath("bakedclay") then + +	minetest.register_node(":bakedclay:red", { +		description = "Red Baked Clay", +		tiles = {"baked_clay_red.png"}, +		groups = {cracky=3}, +		is_ground_content = false, +		sounds = default.node_sound_stone_defaults(), +	}) +	 +	stairs.register_stair_and_slab("bakedclay_red", "bakedclay:red", +		{cracky=3, not_in_craft_guide=1}, +		{"baked_clay_red.png"}, +		"Baked Clay Red Stair", +		"Baked Clay Red Slab", +		default.node_sound_stone_defaults()) + +	minetest.register_node(":bakedclay:orange", { +		description = "Orange Baked Clay", +		tiles = {"baked_clay_orange.png"}, +		groups = {cracky=3}, +		is_ground_content = false, +		sounds = default.node_sound_stone_defaults(), +	}) +	 +	stairs.register_stair_and_slab("bakedclay_orange", "bakedclay:orange", +		{cracky=3, not_in_craft_guide=1}, +		{"baked_clay_orange.png"}, +		"Baked Clay Orange Stair", +		"Baked Clay Orange Slab", +		default.node_sound_stone_defaults()) + +end diff --git a/extra.lua b/extra.lua new file mode 100644 index 0000000..d7ae671 --- /dev/null +++ b/extra.lua @@ -0,0 +1,302 @@ +-- Vines +minetest.register_node("ethereal:vine", { +	description = "Vine", +	drawtype = "signlike", +	tiles = {"vine.png"}, +	inventory_image = "vine.png", +	wield_image = "vine.png", +	paramtype = "light", +	paramtype2 = "wallmounted", +	walkable = false, +	climbable = true, +	is_ground_content = false, +	selection_box = { +		type = "wallmounted", +		--wall_top = = <default> +		--wall_bottom = = <default> +		--wall_side = = <default> +	}, +	groups = {choppy=3, oddly_breakable_by_hand=1}, +	legacy_wallmounted = true, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:vine 2", +	recipe = { +		{"group:leaves", "group:leaves", ""}, +		{"group:leaves", "group:leaves", ""}, +		{"group:leaves", "group:leaves", ""}, +	} +}) + +-- stone Ladder +minetest.register_node("ethereal:stone_ladder", { +	description = "Stone Ladder", +	drawtype = "signlike", +	tiles = {"stone_ladder.png"}, +	inventory_image = "stone_ladder.png", +	wield_image = "stone_ladder.png", +	paramtype = "light", +	paramtype2 = "wallmounted", +	walkable = false, +	climbable = true, +	is_ground_content = false, +	selection_box = { +		type = "wallmounted", +		--wall_top = = <default> +		--wall_bottom = = <default> +		--wall_side = = <default> +	}, +	groups = {cracky=3, oddly_breakable_by_hand=1}, +	legacy_wallmounted = true, +	sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:stone_ladder 4", +	recipe = { +		{"default:cobble", "", "default:cobble"}, +		{"default:cobble", "default:cobble", "default:cobble"}, +		{"default:cobble", "", "default:cobble"}, +	} +}) + +-- Paper Wall +minetest.register_node("ethereal:paper_wall", { +	drawtype = "nodebox", +	description = ("Paper Wall"), +	tiles = {"paper_wall.png",}, +	paramtype = "light", +	groups = {snappy=3}, +	sounds = default.node_sound_wood_defaults(), +	walkable = true, +	paramtype2 = "facedir", +	selection_box = { +		type = "fixed", +		fixed = { -0.5, -0.5, 5/11, 0.5, 0.5, 8/16 } +	}, +	node_box = { +		type = "fixed", +		fixed = { +			{ -0.5, -0.5, 5/11, 0.5, 0.5, 8/16 } +		} +	}, +}) + +minetest.register_craft({ +	output = "ethereal:paper_wall", +	recipe = { +		{"default:stick", "default:paper", "default:stick"}, +		{"default:stick", "default:paper", "default:stick"}, +		{"default:stick", "default:paper", "default:stick"}, +	} +}) + +-- Glostone (A little bit of light decoration) +minetest.register_node("ethereal:glostone", { +	description = "Glo Stone", +	tiles = {"glostone.png"}, +	groups = {cracky=3}, +	light_source = LIGHT_MAX - 1, +	drop = "ethereal:glostone", +	sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:glostone", +	recipe = { +		{"default:torch", "default:stone", "dye:yellow"}, +		{"", "", ""}, +		{"", "", ""}, +	} +}) + +-- Ladder (Changes default recipe to give 2x ladders instead of only 1) +minetest.register_craft({ +	output = "default:ladder 2", +	recipe = { +		{"group:stick", "", "group:stick"}, +		{"group:stick", "group:stick", "group:stick"}, +		{"group:stick", "", "group:stick"}, +	} +}) + +-- Signs (Changes default recipe to give 4x signs instead of only 1) +minetest.register_craft({ +	output = "default:sign_wall 4", +	recipe = { +		{"group:wood", "group:wood", "group:wood"}, +		{"group:wood", "group:wood", "group:wood"}, +		{"", "group:stick", ""}, +	} +}) + +-- Charcoal Lump +minetest.register_craftitem("ethereal:charcoal_lump", { +	description = "Lump of Charcoal", +	inventory_image = "charcoal_lump.png", +}) + +minetest.register_craft({ +	output = "ethereal:charcoal_lump 2", +	recipe = { +		{"ethereal:scorched_tree"} +	} +}) + +minetest.register_craft({ +	output = "ethereal:charcoal_lump 4", +	type = "cooking", +	recipe = "group:tree", +	cooktime = 4 +}) + +minetest.register_craft({ +	type = "fuel", +	recipe = "ethereal:charcoal_lump", +	burntime = 10, +}) + +-- Make Torch from Charcoal Lump +minetest.register_craft({ +	output = "default:torch 4", +	recipe = { +		{"ethereal:charcoal_lump"}, +		{"default:stick"}, +	} +}) + +-- Obsidian Brick +minetest.register_node("ethereal:obsidian_brick", { +	description = "Obsidian Brick", +	inventory_image = minetest.inventorycube("obsidian_brick.png"), +	tiles = {"obsidian_brick.png"}, +	paramtype = "facedir", +	groups = {cracky=1,level=3}, +	sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_craft({ +	output = 'ethereal:obsidian_brick 2', +	recipe = { +		{'default:obsidian', 'default:obsidian'}, +		{'default:obsidian', 'default:obsidian'}, +	} +}) + +-- Quicksand (old style, sinking inside shows black instead of yellow effect, +-- works ok with noclip enabled though) +minetest.register_node("ethereal:quicksand", { +	description = "Quicksand", +	tiles = {"default_sand.png"}, +	drop = "default:sand", +	liquid_viscosity = 15, +	liquidtype = "source", +	liquid_alternative_flowing = "ethereal:quicksand", +	liquid_alternative_source = "ethereal:quicksand", +	liquid_renewable = false, +	liquid_range = 0, +	drowning = 1, +	walkable = false, +	climbable = false, +	post_effect_color = { r=230, g=210, b=160, a=245 }, +	groups = {crumbly=3, falling_node=1, sand=1, liquid=3, disable_jump=1}, +	sounds = default.node_sound_sand_defaults(), +}) + +-- Quicksand (new style, sinking inside shows yellow effect with or without noclip, +-- but old quicksand is shown as black until block placed nearby to update light) +minetest.register_node("ethereal:quicksand2", { +	description = "Quicksand", +	tiles = {"default_sand.png"}, +	drawtype = "glasslike", +	paramtype = "light", +	drop = "default:sand", +	liquid_viscosity = 15, +	liquidtype = "source", +	liquid_alternative_flowing = "ethereal:quicksand2", +	liquid_alternative_source = "ethereal:quicksand2", +	liquid_renewable = false, +	liquid_range = 0, +	drowning = 1, +	walkable = false, +	climbable = false, +	post_effect_color = { r=230, g=210, b=160, a=245 }, +	groups = {crumbly=3, falling_node=1, sand=1, liquid=3, disable_jump=1}, +	sounds = default.node_sound_sand_defaults(), +}) + +-- Illuminated Cave Shrooms (Red, Green and Blue) +minetest.register_node("ethereal:illumishroom", { +	description = "Red Illumishroom", +	drawtype = "plantlike", +	tiles = { "illumishroom.png" }, +	inventory_image = "illumishroom.png", +	wield_image = "illumishroom.png", +	paramtype = "light", +	light_source = 5, +	walkable = false, +	groups = {dig_immediate=3, attached_node=1,flammable=3}, +	sounds = default.node_sound_leaves_defaults(), +	selection_box = { +		type = "fixed", +		fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, +	}, +}) + +minetest.register_node("ethereal:illumishroom2", { +	description = "Green Illumishroom", +	drawtype = "plantlike", +	tiles = { "illumishroom2.png" }, +	inventory_image = "illumishroom2.png", +	wield_image = "illumishroom2.png", +	paramtype = "light", +	light_source = 5, +	walkable = false, +	groups = {dig_immediate=3, attached_node=1,flammable=3}, +	sounds = default.node_sound_leaves_defaults(), +	selection_box = { +		type = "fixed", +		fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, +	}, +}) + +minetest.register_node("ethereal:illumishroom3", { +	description = "Cyan Illumishroom", +	drawtype = "plantlike", +	tiles = { "illumishroom3.png" }, +	inventory_image = "illumishroom3.png", +	wield_image = "illumishroom3.png", +	paramtype = "light", +	light_source = 5, +	walkable = false, +	groups = {dig_immediate=3, attached_node=1,flammable=3}, +	sounds = default.node_sound_leaves_defaults(), +	selection_box = { +		type = "fixed", +		fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, +	}, +}) + +-- Generate Illumishroom in caves next to coal +minetest.register_on_generated(function(minp, maxp, seed) + +	local coal_nodes = minetest.find_nodes_in_area(minp, maxp, "default:stone_with_coal") + +	for key, pos in pairs(coal_nodes) do + +		local bpos = { x=pos.x, y=pos.y + 1, z=pos.z } +		nod = minetest.get_node(bpos).name + +		if nod == "air" then +			if bpos.y > -3000 and bpos.y < -2000 then +				minetest.add_node(bpos, {name = "ethereal:illumishroom3"}) +			elseif bpos.y > -2000 and bpos.y < -1000 then +				minetest.add_node(bpos, {name = "ethereal:illumishroom2"}) +			elseif bpos.y > -1000 and bpos.y < -30 then +				minetest.add_node(bpos, {name = "ethereal:illumishroom"}) +			end +		end +	end +end) diff --git a/fences.lua b/fences.lua new file mode 100644 index 0000000..76e7b44 --- /dev/null +++ b/fences.lua @@ -0,0 +1,45 @@ +local fence = {} + +fence.type = { +	{"junglewood",	"Jungle Wood", 	"default_junglewood.png",	"default:junglewood"}, +	{"scorched",	"Scorched", 	"scorched_tree.png",		"ethereal:scorched_tree"}, +	{"frostwood",	"Frost Wood",	"frost_wood.png",			"ethereal:frost_wood"}, +	{"redwood",		"Redwood",		"redwood_wood.png",			"ethereal:redwood_wood"}, +	{"willow",		"Willow",		"willow_wood.png",			"ethereal:willow_wood"}, +	{"yellowwood",	"Healing Wood",	"yellow_wood.png",			"ethereal:yellow_wood"}, +	{"palm",		"Palm Wood",	"moretrees_palm_wood.png",	"ethereal:palm_wood"}, +	{"banana",		"Banana Wood",	"banana_wood.png",			"ethereal:banana_wood"}, +	{"mushroom",	"Mushroom",		"mushroom_trunk.png",		"ethereal:mushroom_trunk"}, +	{"acacia",		"Acacia Wood",	"moretrees_acacia_wood.png","ethereal:acacia_wood"}, +} + +for _, row in ipairs(fence.type) do +	local name = row[1] +	local desc = row[2] +	local texture = row[3] +	local nod = row[4] + +minetest.register_node("ethereal:fence_"..name, { +	description = desc.." Fence", +	drawtype = "fencelike", +	tiles = {texture}, +	inventory_image = "default_fence_overlay.png^"..texture.."^default_fence_overlay.png^[makealpha:255,126,126", +	wield_image = "default_fence_overlay.png^"..texture.."^default_fence_overlay.png^[makealpha:255,126,126", +	paramtype = "light", +	selection_box = { +		type = "fixed", +		fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, +	}, +	groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, +	sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:fence_"..name.." 4", +	recipe = { +		{nod, "group:stick", nod}, +		{nod, "group:stick", nod}, +	} +}) + +end diff --git a/fishing.lua b/fishing.lua new file mode 100644 index 0000000..7ac3bdc --- /dev/null +++ b/fishing.lua @@ -0,0 +1,99 @@ +-- Raw Fish (Thanks to Altairas for her Fish image on DeviantArt) +minetest.register_craftitem("ethereal:fish_raw", { +	description = "Raw Fish", +	inventory_image = "fish_raw.png", +	on_use = minetest.item_eat(2), +}) + +-- Cooked Fish +minetest.register_craftitem("ethereal:fish_cooked", { +	description = "Cooked Fish", +	inventory_image = "fish_cooked.png", +	on_use = minetest.item_eat(5), +}) + +-- Sashimi (Thanks to Natalia Grosner for letting me use the sashimi image) +minetest.register_craftitem("ethereal:sashimi", { +	description = "Sashimi", +	inventory_image = "sashimi.png", +	on_use = minetest.item_eat(4), +}) + +minetest.register_craft({ +	output = "ethereal:sashimi 2", +	recipe = { +		{'ethereal:seaweed','ethereal:fish_raw','ethereal:seaweed'}, +	} +}) + +-- Worm +minetest.register_craftitem("ethereal:worm", { +	description = "Worm", +	inventory_image = "worm.png", +}) + +-- Fishing Rod +minetest.register_craftitem("ethereal:fishing_rod", { +	description = "Fishing Rod", +	inventory_image = "fishing_rod.png", +	stack_max = 1, +	liquids_pointable = true, +}) + +-- Fishing Rod (Baited) +minetest.register_craftitem("ethereal:fishing_rod_baited", { +	description = "Baited Fishing Rod", +	inventory_image = "fishing_rod_baited.png", +	wield_image = "fishing_rod_wield.png", +	stack_max = 1, +	liquids_pointable = true, +	on_use = function (itemstack, user, pointed_thing) +		if pointed_thing and pointed_thing.under then +			local node = minetest.env:get_node(pointed_thing.under) +			if string.find(node.name, "default:water_source") then +				if math.random(1, 100) < 5 then +					local inv = user:get_inventory() +					if inv:room_for_item("main", {name="ethereal:fish_raw"}) then +						inv:add_item("main", {name="ethereal:fish_raw"}) +						return {name="ethereal:fishing_rod"} +					else +				minetest.chat_send_player(user:get_player_name(), "Your Fish Got Away! Inventory Too Full") +					end +				end +			end +		end +	end, +}) + +-- Fishing Rod +minetest.register_craft({ +	output = "ethereal:fishing_rod", +	recipe = { +			{"","","default:stick"}, +			{"", "default:stick", "farming:string"}, +			{"default:stick", "", "farming:string"}, +		} +}) + +-- Sift through 2 Dirt Blocks to find Worm +minetest.register_craft({ +	output = "ethereal:worm", +	recipe = { +		{"default:dirt","default:dirt"}, +	} +}) + +-- Cooking Fish +minetest.register_craft({ +	type = "cooking", +	output = "ethereal:fish_cooked", +	recipe = "ethereal:fish_raw", +	cooktime = 2, +}) + +-- Baiting Fishing Rod +minetest.register_craft({ +	type = "shapeless", +	output = "ethereal:fishing_rod_baited", +	recipe = {"ethereal:fishing_rod", "ethereal:worm"}, +}) diff --git a/flowers.lua b/flowers.lua new file mode 100644 index 0000000..39ba76a --- /dev/null +++ b/flowers.lua @@ -0,0 +1,34 @@ +-- Flowers spread over all types of soil +minetest.register_abm({ +	nodenames = {"group:flora"}, +	neighbors = {"group:soil"}, +	interval = 40, +	chance = 20, +	action = function(pos, node) +		local light = minetest.get_node_light(pos) +		if not light or light < 13 then +			return +		end +		 +		local pos0 = {x=pos.x-4,y=pos.y-4,z=pos.z-4} +		local pos1 = {x=pos.x+4,y=pos.y+4,z=pos.z+4} +	 +		local flowers = minetest.find_nodes_in_area(pos0, pos1, "group:flora") +		if #flowers > 3 then +			return +		end +		 +		local seedling = minetest.find_nodes_in_area(pos0, pos1, {"group:soil"}) +		if #seedling > 0 then +			seedling = seedling[math.random(#seedling)] +			seedling.y = seedling.y + 1 +			light = minetest.get_node_light(seedling) +			if not light or light < 13 then +				return +			end +			if minetest.get_node(seedling).name == "air" then +				minetest.set_node(seedling, {name=node.name}) +			end +		end +	end, +}) diff --git a/gates.lua b/gates.lua new file mode 100644 index 0000000..aab18fa --- /dev/null +++ b/gates.lua @@ -0,0 +1,126 @@ +-- Node Box coords +local nb_gap = 	{ +		{-1, 0.1875, -0.0625, -0.5, 0.3125, 0.0625}, +		{-1, -0.1875, -0.0625, -0.5, -0.3125, 0.0625}, +		{0.5, 0.1875, -0.0625, 1, 0.3125, 0.0625}, +		{0.5, -0.1875, -0.0625, 1, -0.3125, 0.0625} +		} + +local nb_pil = 	{ +		{0.5, -0.5, -0.09375, 0.5625, 0.5, 0.09375}, +		{-0.5625, -0.5, -0.09375, -0.5, 0.5, 0.09375}, +		{-0.5, -0.3125, -0.0625, -0.375, 0.3125, 0.0625}, +		{0.375, -0.3125, -0.0625, 0.5, 0.3125, 0.0625} +		} + +-- Open/Close Gates +function gate_rightclick(pos, node) +	local data = nil +	data = string.split(node.name, "_", 2) +	local gate = data[1].."_" +	local open = data[2] +	 +	if open == "open" then +		minetest.sound_play("door_close", {pos=pos, gain = 0.3, max_hear_distance = 10}) +		minetest.set_node(pos, {name=gate.."closed", param2=node.param2}) +	else +		minetest.sound_play("door_open", {pos=pos, gain = 0.3, max_hear_distance = 10}) +		minetest.set_node(pos, {name=gate.."open", param2=node.param2}) +	end +end + +local gate = {} + +gate.type = { +	{"wood",		"Wood",			"default_wood.png",			"default:wood"}, +	{"junglewood",	"Jungle Wood", 	"default_junglewood.png",	"default:junglewood"}, +	{"scorched",	"Scorched", 	"scorched_tree.png",		"ethereal:scorched_tree"}, +	{"frostwood",	"Frost Wood",	"frost_wood.png",			"ethereal:frost_wood"}, +	{"redwood",		"Redwood",		"redwood_wood.png",			"ethereal:redwood_wood"}, +	{"willow",		"Willow",		"willow_wood.png",			"ethereal:willow_wood"}, +	{"yellowwood",	"Healing Wood",	"yellow_wood.png",			"ethereal:yellow_wood"}, +	{"palm",		"Palm Wood",	"moretrees_palm_wood.png",	"ethereal:palm_wood"}, +	{"banana",		"Banana Wood",	"banana_wood.png",			"ethereal:banana_wood"}, +	{"mushroom",	"Mushroom",		"mushroom_trunk.png",		"ethereal:mushroom_trunk"}, +	{"acacia",		"Acacia Wood",	"moretrees_acacia_wood.png","ethereal:acacia_wood"}, + +} + +for _, row in ipairs(gate.type) do +	local name = row[1] +	local desc = row[2] +	local texture = row[3] +	local nod = row[4] +	 +minetest.register_node("ethereal:"..name.."gate_open", { +	tiles = {texture}, +	paramtype = "light", +	paramtype2 = "facedir", +	sunlight_propagates = true, +	walkable = true, +	groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, not_in_inventory = 1}, +	drop = "ethereal:"..name.."gate_closed", +	drawtype = "nodebox", +	node_box = { +		type = "fixed", +		fixed = { +			{-0.5, -0.3125, 0.4375, -0.375, 0.3125, 0.5}, +			{0.375, -0.3125, 0.4375, 0.5, 0.3125, 0.5}, +			{-0.5, 0.1875, 0.0625, -0.375, 0.3125, 0.4375}, +			{-0.5, -0.1875, 0.0625, -0.375, -0.3125, 0.4375}, +			{0.375, 0.1875, 0.0625, 0.5, 0.3125, 0.4375}, +			{0.375, -0.1875, 0.0625, 0.5, -0.3125, 0.4375}, +			nb_pil[1], nb_pil[2], +			nb_pil[3], nb_pil[4], +			nb_gap[1], nb_gap[2], +			nb_gap[3], nb_gap[4], +			} +	}, +	selection_box = { +		type = "fixed", +		fixed = { +			{-0.5, -0.3125, -0.0625, -0.375, 0.3125, 0.5}, +			{0.375, -0.3125, -0.0625, 0.5, 0.3125, 0.5}, +			} +	}, +	on_rightclick = gate_rightclick, +}) + +minetest.register_node("ethereal:"..name.."gate_closed", { +	description = name.." fence gate", +	tiles = {texture}, +	inventory_image = "default_gate_overlay.png^"..texture.."^default_gate_overlay.png^[makealpha:255,126,126", +	wield_image = "default_gate_overlay.png^"..texture.."^default_gate_overlay.png^[makealpha:255,126,126", +	paramtype = "light", +	paramtype2 = "facedir", +	sunlight_propagates = true, +	walkable = true, +	groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, +	drawtype = "nodebox", +	node_box = { +		type = "fixed", +		fixed = { +			nb_pil[1], nb_pil[2], +			nb_pil[3], nb_pil[4], +			{-0.0625, -0.3125, -0.0625, 0.0625, 0.3125, 0.0625}, +			{-1, 0.1875, -0.0625, 1, 0.3125, 0.0625}, +			{-1, -0.1875, -0.0625, 1, -0.3125, 0.0625}, +		} +	}, +	selection_box = { +		type = "fixed", +		fixed = {{-0.5, -0.3125, -0.0625, 0.5, 0.3125, 0.0625}} +	}, +	on_rightclick = gate_rightclick, +}) + +-- Fencegate Recipe +minetest.register_craft({ +	output = "ethereal:"..name.."gate_closed", +	recipe = { +		 {"group:stick", nod, "group:stick"}, +		 {"group:stick", nod, "group:stick"}, +	} +}) + +end diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..7b01c01 --- /dev/null +++ b/init.lua @@ -0,0 +1,66 @@ +--[[
 +
 +	Minetest Ethereal Mod 1.12 (7th November 2014)
 +
 +	Created by ChinChow
 +
 +	Updated by TenPlus1
 +
 +]]
 +
 +ethereal = {}
 +ethereal.mapstyle = 0 -- 0 for spread-style, 1 for layered-style
 +ethereal.leaftype = 0 -- 0 for 2D plantlike, 1 for 3D allfaces
 +
 +-- Set following to 1 to enable biome or 0 to disable
 +
 +ethereal.bamboo 		= 1 -- Bamboo with sprouts
 +ethereal.mesa   		= 1 -- Mesa red and orange clay with giant redwood
 +ethereal.alpine 		= 1 -- Snowy grass
 +ethereal.healing 		= 1 -- Snowy peaks with healing trees
 +ethereal.snowy 			= 1 -- Cold grass with pine trees and snow spots
 +ethereal.frost 			= 1 -- Blue dirt with blue/pink frost trees
 +ethereal.grassy 		= 1 -- Green grass with flowers and trees
 +ethereal.caves 			= 1 -- Desert stone ares with huge caverns underneath
 +ethereal.grayness 		= 1 -- Grey grass with willow trees
 +ethereal.grassytwo 		= 1 -- Sparse trees with old trees and flowers
 +ethereal.prairie 		= 1 -- Flowery grass with many plants and flowers
 +ethereal.jumble 		= 1 -- Green grass with trees and jungle grass
 +ethereal.junglee 		= 1 -- Jungle grass with tall jungle trees
 +ethereal.desert 		= 1 -- Desert sand with cactus
 +ethereal.grove 			= 1 -- Banana groves and ferns
 +ethereal.mushroom 		= 1 -- Purple grass with giant mushrooms
 +ethereal.desertstone 	= 1 -- Desert stone with smaller cactus
 +ethereal.quicksand 		= 1 -- Quicksand banks
 +ethereal.lake 			= 1 -- Small sandy lake areas with gravel below
 +ethereal.plains 		= 1 -- Dry dirt with scorched trees
 +ethereal.fiery 			= 1 -- Red grass with lava craters
 +ethereal.sandclay		= 1 -- Sand areas with clay underneath
 +
 +if ethereal.mapstyle == 0 then
 +	dofile(minetest.get_modpath("ethereal").."/mapgen_v7s.lua")
 +else
 +	dofile(minetest.get_modpath("ethereal").."/mapgen_v7l.lua")
 +end
 +
 +dofile(minetest.get_modpath("ethereal").."/plantlife.lua")
 +dofile(minetest.get_modpath("ethereal").."/mushroom.lua")
 +dofile(minetest.get_modpath("ethereal").."/onion.lua")
 +dofile(minetest.get_modpath("ethereal").."/crystal.lua")
 +dofile(minetest.get_modpath("ethereal").."/papyrus.lua")
 +dofile(minetest.get_modpath("ethereal").."/flowers.lua")
 +dofile(minetest.get_modpath("ethereal").."/water.lua")
 +dofile(minetest.get_modpath("ethereal").."/dirt.lua")
 +dofile(minetest.get_modpath("ethereal").."/leaves.lua")
 +dofile(minetest.get_modpath("ethereal").."/wood.lua")
 +dofile(minetest.get_modpath("ethereal").."/sapling.lua")
 +dofile(minetest.get_modpath("ethereal").."/strawberry.lua")
 +dofile(minetest.get_modpath("ethereal").."/fishing.lua")
 +dofile(minetest.get_modpath("ethereal").."/extra.lua")
 +dofile(minetest.get_modpath("ethereal").."/sealife.lua")
 +dofile(minetest.get_modpath("ethereal").."/fences.lua")
 +dofile(minetest.get_modpath("ethereal").."/gates.lua")
 +--dofile(minetest.get_modpath("ethereal").."/stairs.lua")
 +
 +-- Xanadu server Only
 +--dofile(minetest.get_modpath("ethereal").."/plantpack.lua")
 diff --git a/leaves.lua b/leaves.lua new file mode 100644 index 0000000..4285210 --- /dev/null +++ b/leaves.lua @@ -0,0 +1,273 @@ +-- Leaf style (set in init.lua file) +if ethereal.leaftype == 0 then +	leaftype = "plantlike" +else +	leaftype = "allfaces_optional" +end + +--= Define leaves for ALL trees (and Mushroom Tops) + +-- Acacia Leaves +minetest.register_node("ethereal:acacia_leaves", { +	description = "Acacia Leaves", +	drawtype = leaftype, +	tiles = {"moretrees_acacia_leaves.png"}, +	inventory_image = "moretrees_acacia_leaves.png", +	paramtype = "light", +	walkable = false, +	visual_scale = 1.2, +	waving = 1, +	groups = {snappy=3, leafdecay=3, leaves=1, flammable=2}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:acacia_sapling"}, rarity = 50}, +			{	items = {"ethereal:acacia_leaves"}} +		} +	}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Willow Twig +minetest.register_node("ethereal:willow_twig", { +	description = "Willow Twig", +	drawtype = "plantlike", +	tiles = {"willow_twig.png"}, +	inventory_image = "willow_twig.png", +	paramtype = "light", +	walkable = false, +	visual_scale = 1.2, +	waving = 1, +	groups = {snappy=3, leafdecay=3, leaves=1, flammable=2}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:willow_sapling"}, rarity = 50}, +			{	items = {"ethereal:willow_twig"}} +		} +	}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Redwood leaves +minetest.register_node("ethereal:redwood_leaves", { +	description = "Redwood Leaves", +	drawtype = leaftype, +	visual_scale = 1.2, +	tiles = {"redwood_leaves.png"}, +	inventory_image = "redwood_leaves.png", +	paramtype = "light", +	walkable = false, +	waving = 1, +	groups = {snappy=3, leafdecay=3, leaves=1, flammable=2}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:redwood_sapling"}, rarity = 50}, +			{	items = {"ethereal:redwood_leaves"}} +		} +	}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Default Apple Tree Leaves +minetest.register_node(":default:leaves", { +	description = "Leaves", +	drawtype = leaftype, +	visual_scale = 1.2, +	tiles = {"default_leaves.png"}, +	inventory_image = "default_leaves.png", +	paramtype = "light", +	walkable = false, +	waving = 1, +	groups = {snappy=3, leafdecay=3, leaves=1, flammable=2}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:tree_sapling"}, rarity = 20}, +			{	items = {"default:leaves"}} +		} +	}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Default Orange Tree Leaves +minetest.register_node("ethereal:orange_leaves", { +	description = "Orange Leaves", +	drawtype = leaftype, +	visual_scale = 1.2, +	tiles = {"orange_leaves.png"}, +	inventory_image = "orange_leaves.png", +	paramtype = "light", +	walkable = false, +	waving = 1, +	groups = {snappy=3, leafdecay=3, leaves=1, flammable=2}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:orange_tree_sapling"}, rarity = 20}, +			{	items = {"ethereal:orange_leaves"}} +		} +	}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Default Jungle Tree Leaves +minetest.register_node(":default:jungleleaves", { +	description = "Jungle Leaves", +	drawtype = leaftype, +	visual_scale = 1.2, +	tiles = {"default_jungleleaves.png"}, +	inventory_image = "default_jungleleaves.png", +	paramtype = "light", +	walkable = false, +	waving = 1, +	groups = {snappy=3, leafdecay=3, leaves=1, flammable=2}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:jungle_tree_sapling"}, rarity = 20}, +			{	items = {"default:jungleleaves"}} +		} +	}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Default Banana Tree Leaves +minetest.register_node("ethereal:bananaleaves", { +	description = "Banana Leaves", +	drawtype = leaftype, +	visual_scale = 1.2, +	tiles = {"banana_leaf.png"}, +	inventory_image = "banana_leaf.png", +	paramtype = "light", +	walkable = false, +	waving = 1, +	groups = {snappy=3, leafdecay=3, leaves=1, flammable=2}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:banana_tree_sapling"}, rarity = 20}, +			{	items = {"ethereal:bananaleaves"}} +		} +	}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Healing Tree Leaves +minetest.register_node("ethereal:yellowleaves", { +	description = "Healing Tree Leaves", +	drawtype = leaftype, +	visual_scale = 1.2, +	tiles = {"yellow_leaves.png"}, +	inventory_image = "yellow_leaves.png", +	paramtype = "light", +	walkable = false, +	waving = 1, +	groups = {snappy=3, leafdecay=3, leaves=1}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:yellow_tree_sapling"}, rarity = 50}, +			{	items = {"ethereal:yellowleaves"}} +		} +	}, +	-- Leaves are edible, heal half a heart +	on_use = minetest.item_eat(1), +	sounds = default.node_sound_leaves_defaults(), +	light_source = 9, +}) + +-- Palm Tree Leaves +minetest.register_node("ethereal:palmleaves", { +	description = "Palm Leaves", +	drawtype = leaftype, +	visual_scale = 1.2, +	tiles = {"moretrees_palm_leaves.png"}, +	inventory_image = "moretrees_palm_leaves.png", +	paramtype = "light", +	walkable = false, +	waving = 1, +	groups = {snappy=3, leafdecay=3, leaves=1, flammable=2}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:palm_sapling"}, rarity = 20}, +			{	items = {"ethereal:palmleaves"}} +		} +	}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Pine Tree Leaves +minetest.register_node("ethereal:pineleaves", { +	description = "Pine Needles", +	drawtype = leaftype, +	visual_scale = 1.2, +	tiles = {"pine_leaves.png"}, +	inventory_image = "pine_leaves.png", +	paramtype = "light", +	walkable = false, +	waving = 1, +	groups = {snappy=3, leafdecay=3, leaves=1, flammable=2}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:pine_tree_sapling"}, rarity = 20}, +			{	items = {"ethereal:pine_nuts"}, rarity = 5}, +			{	items = {"ethereal:pineleaves"},} +		} +	}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Frost Tree Leaves +minetest.register_node("ethereal:frost_leaves", { +	description = "Frost Leaves", +	drawtype = leaftype, +	visual_scale = 1.2, +	tiles = {"ethereal_frost_leaves.png"}, +	inventory_image = "ethereal_frost_leaves.png", +	paramtype = "light", +	walkable = false, +	waving = 1, +	groups = {snappy=3, leafdecay=3, puts_out_fire=1}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:frost_tree_sapling"}, rarity = 20}, +			{	items = {"ethereal:frost_leaves"}} +		} +	}, +	light_source = 9, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Mushroom Tops +minetest.register_node("ethereal:mushroom", { +	description = "Mushroom Cap", +	tiles = {"mushroom_block.png"}, +	groups = {choppy=2, oddly_breakable_by_hand=1, flammable=2}, +	drop = { +		max_items = 1, +		items = { +			{	items = {"ethereal:mushroom_sapling"}, rarity = 20}, +			{	items = {"ethereal:mushroom"}} +		} +	}, +	sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ +	type = "fuel", +	recipe = "ethereal:mushroom", +	burntime = 10, +}) + +-- Mushroom Pore (Spongelike block inside mushrooms that has special properties) +minetest.register_node("ethereal:mushroom_pore", { +	description = "Mushroom Pore", +	tiles = {"mushroom_pore.png"}, +	groups = {snappy=3,cracky=3,choppy=3,oddly_breakable_by_hand=3,disable_jump=1, fall_damage_add_percent=-100}, +	sounds = default.node_sound_dirt_defaults(), +}) diff --git a/license.txt b/license.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/license.txt @@ -0,0 +1,674 @@ +                    GNU GENERAL PUBLIC LICENSE +                       Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +                            Preamble + +  The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +  The licenses for most software and other practical works are designed +to take away your freedom to share and change the works.  By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users.  We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors.  You can apply it to +your programs, too. + +  When we speak of free software, we are referring to freedom, not +price.  Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +  To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights.  Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + +  For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received.  You must make sure that they, too, receive +or can get the source code.  And you must show them these terms so they +know their rights. + +  Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +  For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software.  For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +  Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so.  This is fundamentally incompatible with the aim of +protecting users' freedom to change the software.  The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable.  Therefore, we +have designed this version of the GPL to prohibit the practice for those +products.  If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + +  Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary.  To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + +  The precise terms and conditions for copying, distribution and +modification follow. + +                       TERMS AND CONDITIONS + +  0. Definitions. + +  "This License" refers to version 3 of the GNU General Public License. + +  "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +  "The Program" refers to any copyrightable work licensed under this +License.  Each licensee is addressed as "you".  "Licensees" and +"recipients" may be individuals or organizations. + +  To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy.  The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + +  A "covered work" means either the unmodified Program or a work based +on the Program. + +  To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy.  Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +  To "convey" a work means any kind of propagation that enables other +parties to make or receive copies.  Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +  An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License.  If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +  1. Source Code. + +  The "source code" for a work means the preferred form of the work +for making modifications to it.  "Object code" means any non-source +form of a work. + +  A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +  The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form.  A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +  The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities.  However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work.  For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +  The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + +  The Corresponding Source for a work in source code form is that +same work. + +  2. Basic Permissions. + +  All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met.  This License explicitly affirms your unlimited +permission to run the unmodified Program.  The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work.  This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +  You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force.  You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright.  Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + +  Conveying under any other circumstances is permitted solely under +the conditions stated below.  Sublicensing is not allowed; section 10 +makes it unnecessary. + +  3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +  No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +  When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + +  4. Conveying Verbatim Copies. + +  You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +  You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +  5. Conveying Modified Source Versions. + +  You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + +    a) The work must carry prominent notices stating that you modified +    it, and giving a relevant date. + +    b) The work must carry prominent notices stating that it is +    released under this License and any conditions added under section +    7.  This requirement modifies the requirement in section 4 to +    "keep intact all notices". + +    c) You must license the entire work, as a whole, under this +    License to anyone who comes into possession of a copy.  This +    License will therefore apply, along with any applicable section 7 +    additional terms, to the whole of the work, and all its parts, +    regardless of how they are packaged.  This License gives no +    permission to license the work in any other way, but it does not +    invalidate such permission if you have separately received it. + +    d) If the work has interactive user interfaces, each must display +    Appropriate Legal Notices; however, if the Program has interactive +    interfaces that do not display Appropriate Legal Notices, your +    work need not make them do so. + +  A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit.  Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +  6. Conveying Non-Source Forms. + +  You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + +    a) Convey the object code in, or embodied in, a physical product +    (including a physical distribution medium), accompanied by the +    Corresponding Source fixed on a durable physical medium +    customarily used for software interchange. + +    b) Convey the object code in, or embodied in, a physical product +    (including a physical distribution medium), accompanied by a +    written offer, valid for at least three years and valid for as +    long as you offer spare parts or customer support for that product +    model, to give anyone who possesses the object code either (1) a +    copy of the Corresponding Source for all the software in the +    product that is covered by this License, on a durable physical +    medium customarily used for software interchange, for a price no +    more than your reasonable cost of physically performing this +    conveying of source, or (2) access to copy the +    Corresponding Source from a network server at no charge. + +    c) Convey individual copies of the object code with a copy of the +    written offer to provide the Corresponding Source.  This +    alternative is allowed only occasionally and noncommercially, and +    only if you received the object code with such an offer, in accord +    with subsection 6b. + +    d) Convey the object code by offering access from a designated +    place (gratis or for a charge), and offer equivalent access to the +    Corresponding Source in the same way through the same place at no +    further charge.  You need not require recipients to copy the +    Corresponding Source along with the object code.  If the place to +    copy the object code is a network server, the Corresponding Source +    may be on a different server (operated by you or a third party) +    that supports equivalent copying facilities, provided you maintain +    clear directions next to the object code saying where to find the +    Corresponding Source.  Regardless of what server hosts the +    Corresponding Source, you remain obligated to ensure that it is +    available for as long as needed to satisfy these requirements. + +    e) Convey the object code using peer-to-peer transmission, provided +    you inform other peers where the object code and Corresponding +    Source of the work are being offered to the general public at no +    charge under subsection 6d. + +  A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +  A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling.  In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage.  For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product.  A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +  "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source.  The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + +  If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information.  But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +  The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed.  Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +  Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +  7. Additional Terms. + +  "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law.  If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +  When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it.  (Additional permissions may be written to require their own +removal in certain cases when you modify the work.)  You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +  Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + +    a) Disclaiming warranty or limiting liability differently from the +    terms of sections 15 and 16 of this License; or + +    b) Requiring preservation of specified reasonable legal notices or +    author attributions in that material or in the Appropriate Legal +    Notices displayed by works containing it; or + +    c) Prohibiting misrepresentation of the origin of that material, or +    requiring that modified versions of such material be marked in +    reasonable ways as different from the original version; or + +    d) Limiting the use for publicity purposes of names of licensors or +    authors of the material; or + +    e) Declining to grant rights under trademark law for use of some +    trade names, trademarks, or service marks; or + +    f) Requiring indemnification of licensors and authors of that +    material by anyone who conveys the material (or modified versions of +    it) with contractual assumptions of liability to the recipient, for +    any liability that these contractual assumptions directly impose on +    those licensors and authors. + +  All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10.  If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term.  If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +  If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +  Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + +  8. Termination. + +  You may not propagate or modify a covered work except as expressly +provided under this License.  Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +  However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +  Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +  Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License.  If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +  9. Acceptance Not Required for Having Copies. + +  You are not required to accept this License in order to receive or +run a copy of the Program.  Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance.  However, +nothing other than this License grants you permission to propagate or +modify any covered work.  These actions infringe copyright if you do +not accept this License.  Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +  10. Automatic Licensing of Downstream Recipients. + +  Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License.  You are not responsible +for enforcing compliance by third parties with this License. + +  An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations.  If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +  You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License.  For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +  11. Patents. + +  A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based.  The +work thus licensed is called the contributor's "contributor version". + +  A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version.  For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +  Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +  In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement).  To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +  If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients.  "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +  If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +  A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License.  You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + +  Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +  12. No Surrender of Others' Freedom. + +  If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License.  If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all.  For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + +  13. Use with the GNU Affero General Public License. + +  Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work.  The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +  14. Revised Versions of this License. + +  The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time.  Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +  Each version is given a distinguishing version number.  If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation.  If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + +  If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +  Later license versions may give you additional or different +permissions.  However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +  15. Disclaimer of Warranty. + +  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +  16. Limitation of Liability. + +  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + +  17. Interpretation of Sections 15 and 16. + +  If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +                     END OF TERMS AND CONDITIONS + +            How to Apply These Terms to Your New Programs + +  If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +  To do so, attach the following notices to the program.  It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + +    <one line to give the program's name and a brief idea of what it does.> +    Copyright (C) <year>  <name of author> + +    This program is free software: you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation, either version 3 of the License, or +    (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +    GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program.  If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + +  If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + +    <program>  Copyright (C) <year>  <name of author> +    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +    This is free software, and you are welcome to redistribute it +    under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License.  Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + +  You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + +  The GNU General Public License does not permit incorporating your program +into proprietary programs.  If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library.  If this is what you want to do, use the GNU Lesser General +Public License instead of this License.  But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/mapgen_v7l.lua b/mapgen_v7l.lua new file mode 100644 index 0000000..be4c2b5 --- /dev/null +++ b/mapgen_v7l.lua @@ -0,0 +1,560 @@ +-- Disable Ridges (NOTE: changed sidelen from 16 to 80 in all decoration)
 +minetest.register_on_mapgen_init(function(mapgen_params)
 +   mapgen_params.flags = "nov7_ridges"
 +   minetest.set_mapgen_params(mapgen_params)
 +end)
 +
 +-- Warm Biome
 +minetest.register_biome({
 +	name           = "clay",
 +	node_top       = "default:sand",			depth_top      = 3,
 +	node_filler    = "default:clay",			depth_filler   = 2,
 +	height_min     = 1,							height_max     = 11,
 +	heat_point     = 65.0,						humidity_point = 2.0,
 +})
 +
 +minetest.register_biome({
 +	name = "lake",
 +	node_top = "default:sand",					depth_top = 2,
 +	node_filler = "default:gravel",				depth_filler = 1,
 +	node_water = "default:water_source",		node_dust_water= "default:water_source",
 +	height_min = -31000,						height_max = 3,
 +	heat_point = 50,							humidity_point = 40,
 +})
 +
 +minetest.register_biome({
 +	name = "quicksand",
 +	node_top = "ethereal:quicksand2",		depth_top = 3,
 +	node_filler = "default:gravel",			depth_filler = 1,
 +	height_min = 1,							height_max = 1,
 +	heat_point = 50,						humidity_point = 38,
 +})
 +
 +minetest.register_biome({
 +	name           = "grass",
 +	node_top       = "ethereal:green_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 3,
 +	height_min     = 1,							height_max     = 20,
 +	heat_point     = 10.0,						humidity_point = 40.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "prairie",
 +	node_top       = "ethereal:prairie_dirt",	depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 3,
 +	height_min     = 21,						height_max     = 40,
 +	heat_point     = 10.0,						humidity_point = 40.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "cold",
 +	node_top       = "ethereal:cold_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 3,
 +	height_min     = 41,						height_max     = 60,
 +	heat_point     = 10.0,						humidity_point = 40.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "snow",
 +	node_top       = "default:dirt_with_snow",	depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 3,
 +	height_min     = 61,						height_max     = 80,
 +	heat_point     = 10.0,						humidity_point = 40.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "alpine",
 +	node_top       = "default:snowblock", 		depth_top      = 1,
 +	node_filler    = "default:dirt_with_snow",	depth_filler   = 1,
 +	height_min     = 81,						height_max     = 120,
 +	heat_point     = 10.0,						humidity_point = 40.0,
 +})
 +
 +-- Cold Biome
 +minetest.register_biome({
 +	name           = "ice",
 +	node_top       = "default:ice",						depth_top      = 1,
 +	node_filler    = "default:water_source",			depth_filler   = 1,
 +	height_min     = 1,									height_max     = 1,
 +	heat_point     = 5.0,								humidity_point = 30.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "gray",
 +	node_top       = "ethereal:gray_dirt	",			depth_top      = 1,
 +	node_filler    = "default:dirt",					depth_filler   = 3,
 +	height_min     = 1,									height_max     = 30,
 +	heat_point     = 15.0,								humidity_point = 30.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "frost",
 +	node_top       = "ethereal:crystal_dirt",			depth_top      = 1,
 +	node_filler    = "default:dirt",					depth_filler   = 3,
 +	height_min     = 31,								height_max     = 60,
 +	heat_point     = 15.0,								humidity_point = 30.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "cold2",
 +	node_top       = "ethereal:cold_dirt",				depth_top      = 1,
 +	node_filler    = "default:dirt",					depth_filler   = 3,
 +	height_min     = 61,								height_max     = 90,
 +	heat_point     = 15.0,								humidity_point = 30.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "healing",
 +	node_top       = "default:dirt_with_snow",			depth_top      = 1,
 +	node_filler    = "default:dirt",					depth_filler   = 3,
 +	height_min     = 91,								height_max     = 120,
 +	heat_point     = 15.0,								humidity_point = 30.0,
 +})
 +
 +-- Humid Biome
 +minetest.register_biome({
 +	name           = "jungle",	
 +	node_top       = "ethereal:jungle_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",				depth_filler   = 3,
 +	height_min     = 1,								height_max     = 20,
 +	heat_point     = 40.0,							humidity_point = 60.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "bamboo",
 +	node_top       = "ethereal:bamboo_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",				depth_filler   = 3,
 +	height_min     = 21,							height_max     = 40,
 +	heat_point     = 40.0,							humidity_point = 60.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "mushroom",
 +	node_top       = "ethereal:mushroom_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",				depth_filler   = 3,
 +	height_min     = 41,							height_max     = 60,
 +	heat_point     = 40.0,							humidity_point = 60.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "grove",
 +	node_top       = "ethereal:grove_dirt",			depth_top      = 1,
 +	node_filler    = "default:dirt",				depth_filler   = 3,
 +	height_min     = 61,							height_max     = 100,
 +	heat_point     = 40.0,							humidity_point = 60.0,
 +})
 +
 +-- Hot Biomes
 +minetest.register_biome({
 +	name           = "plains",
 +	node_top       = "ethereal:dry_dirt",			depth_top      = 1,
 +	node_filler    = "default:dirt",				depth_filler   = 3,
 +	height_min     = 4,								height_max     = 36,
 +	heat_point     = 59.0,							humidity_point = 25.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "fiery",
 +	node_top       = "ethereal:fiery_dirt",			depth_top      = 1,
 +	node_filler    = "default:dirt",				depth_filler   = 3,
 +	height_min     = 16,							height_max     = 35,
 +	heat_point     = 60.0,							humidity_point = 25.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "desertstone",
 +	node_top       = "default:sandstone",			depth_top      = 3,
 +	node_filler    = "default:desert_stone",		depth_filler   = 70,
 +	height_min     = 36,							height_max     = 50,
 +	heat_point     = 60.0,							humidity_point = 25.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "desert",
 +	node_top       = "default:desert_sand",			depth_top      = 5,
 +	node_filler    = "default:desert_stone",		depth_filler   = 70,
 +	height_min     = 51,							height_max     = 80,
 +	heat_point     = 60.0,							humidity_point = 25.0,
 +})
 +
 +-- Caves and Mesa
 +minetest.register_biome({
 +	name           = "mesa",
 +	node_top       = "bakedclay:red",				depth_top      = 1,
 +	node_filler    = "bakedclay:orange",			depth_filler   = 5,
 +	height_min     = 1,								height_max     = 40,
 +	heat_point     = 15.0,							humidity_point = 20.0,
 +})
 +
 +minetest.register_biome({
 +	name           = "caves",
 +	node_top       = "default:desert_stone",		depth_top      = 3,
 +	node_filler    = "air",							depth_filler   = 8,
 +	height_min     = 41,							height_max     = 60,
 +	heat_point     = 15.0,							humidity_point = 20.0,
 +})
 +
 +-- Schematics
 +local path = minetest.get_modpath("ethereal").."/schematics/"
 +
 +minetest.register_decoration({					-- Acacia Tree
 +	deco_type = "schematic",
 +	place_on = {"default:desert_sand"},
 +	sidelen = 16,
 +	fill_ratio = 0.004,
 +	biomes = {"desert"},
 +	schematic = path.."acaciatree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Redwood Tree
 +	deco_type = "schematic",
 +	place_on = {"bakedclay:red","bakedclay:orange"},
 +	sidelen = 80,
 +	fill_ratio = 0.025,
 +	biomes = {"mesa"},
 +	schematic = path.."redwood.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Pine Tree
 +	deco_type = "schematic",
 +	place_on = {"ethereal:cold_dirt", "default:dirt_with_snow"},
 +	sidelen = 80,
 +	fill_ratio = 0.025,
 +	biomes = {"snow", "cold", "cold2"},
 +	schematic = path.."pinetree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Apple Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:green_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.030,
 +	biomes = {"grass"},
 +	schematic = path.."tree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Orange Tree
 +	deco_type = "schematic",
 +	place_on = {"ethereal:prairie_dirt"},
 +	sidelen = 80,
 +	fill_ratio = 0.005,
 +	biomes = {"prairie"},
 +	schematic = path.."orangetree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Big Old Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:green_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.010,
 +	biomes = {"grass"},
 +	schematic = path.."bigtree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Willow Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:gray_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.025,
 +	biomes = {"gray"},
 +	schematic = path.."willow.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Healing Tree
 +	deco_type = "schematic",
 +	place_on = "default:dirt_with_snow",
 +	sidelen = 80,
 +	fill_ratio = 0.04,
 +	biomes = {"healing"},
 +	schematic = path.."yellowtree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Frost Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:crystal_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.010,
 +	biomes = {"frost"},
 +	schematic = path.."frosttrees.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Jungle Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:jungle_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.3,
 +	biomes = {"jungle"},
 +	schematic = path.."jungletree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Banana Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:grove_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.015,
 +	biomes = {"grove"},
 +	schematic = path.."bananatree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Giant Mushroom
 +	deco_type = "schematic",
 +	place_on = "ethereal:mushroom_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.070,
 +	biomes = {"mushroom"},
 +	schematic = path.."mushroomone.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Small Lava Crater
 +	deco_type = "schematic",
 +	place_on = "ethereal:fiery_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.012,
 +	biomes = {"fiery"},
 +	schematic = path.."volcanom.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({					-- Large Lava Crater
 +	deco_type = "schematic",
 +	place_on = "ethereal:fiery_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.010,
 +	biomes = {"fiery"},
 +	schematic = path.."volcanol.mts",
 +	flags = "place_center_x, place_center_z",
 +--	replacements = {{"default:stone", "default:desert_stone"}},
 +})
 +
 +minetest.register_decoration({					-- Scorched Tree
 +	deco_type = "simple",
 +	place_on = "ethereal:dry_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.006,
 +	biomes = {"plains", "plains2"},
 +	decoration = "ethereal:scorched_tree",
 +	height_max = 6,
 +})
 +
 +-- Decoration
 +minetest.register_decoration({					-- Bamboo Stalks
 +	deco_type = "simple",
 +	place_on = "ethereal:bamboo_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.055,
 +	biomes = {"bamboo"},
 +	decoration = "ethereal:bamboo",
 +	height_max = 5,
 +})
 +
 +minetest.register_decoration({					-- Bamboo Sprouts and Grass for filler
 +	deco_type = "simple",
 +	place_on = "ethereal:bamboo_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.25,
 +	biomes = {"bamboo"},
 +	decoration = {"ethereal:bamboo_sprout", "default:grass_2", "default:grass_3"},
 +})
 +
 +minetest.register_decoration({					-- Dry Shrub
 +	deco_type = "simple",
 +	place_on = {"default:sand", "bakedclay:red"},
 +	sidelen = 80,
 +	fill_ratio = 0.015,
 +	biomes = {"lake", "clay", "mesa"},
 +	decoration = "default:dry_shrub",
 +})
 +
 +minetest.register_decoration({					-- Grass
 +	deco_type = "simple",
 +	place_on = {"ethereal:green_dirt", "ethereal:prairie_dirt", "ethereal:jungle_dirt", "ethereal:grove_dirt"},
 +	sidelen = 80,
 +	fill_ratio = 0.40,
 +	biomes = {"grass", "prairie", "cold", "cold2", "jungle", "grove"},
 +	decoration = "default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5",
 +})
 +
 +minetest.register_decoration({					-- Flowers
 +	deco_type = "simple",
 +	place_on = "ethereal:green_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.030,
 +	biomes = {"grass"},
 +	decoration = {"flowers:dandelion_white", "flowers:dandelion_yellow", "flowers:geranium", "flowers:rose", "flowers:tulip", "flowers:viola"},
 +})
 +
 +minetest.register_decoration({					-- Flowers & Strawberry
 +	deco_type = "simple",
 +	place_on = "ethereal:prairie_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.050,
 +	biomes = {"prairie"},
 +	decoration = {"flowers:dandelion_white", "flowers:dandelion_yellow", "flowers:geranium", "flowers:rose", "flowers:tulip", "flowers:viola", "ethereal:strawberry_7"},
 +})
 +
 +minetest.register_decoration({					-- Wild Onions
 +	deco_type = "simple",
 +	place_on = {"ethereal:green_dirt", "ethereal:prairie_dirt"},
 +	sidelen = 80,
 +	fill_ratio = 0.25,
 +	biomes = {"grass", "prairie"},
 +	decoration = "ethereal:onion_4",
 +})
 +
 +minetest.register_decoration({					-- Snowy Grass
 +	deco_type = "simple",
 +	place_on = {"ethereal:cold_dirt", "default:dirt_with_snow", "ethereal:gray_dirt_top"},
 +	sidelen = 80,
 +	fill_ratio = 0.05,
 +	biomes = {"cold", "cold2", "snow", "gray"},
 +	decoration = "ethereal:snowygrass",
 +})
 +
 +minetest.register_decoration({					-- Snow
 +	deco_type = "simple",
 +	place_on = {"ethereal:cold_dirt", "default:dirt_with_snow", "default:snowblock"},
 +	sidelen = 80,
 +	fill_ratio = 0.80,
 +	biomes = {"cold", "cold2", "snow", "alpine"},
 +	decoration = "default:snow",
 +})
 +
 +minetest.register_decoration({					-- Crystal Spike & Grass
 +	deco_type = "simple",
 +	place_on = "ethereal:crystal_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.02,
 +	biomes = {"frost"},
 +	decoration = {"ethereal:crystal_spike", "ethereal:crystalgrass"},
 +})
 +
 +minetest.register_decoration({					-- Wild Mushroom
 +	deco_type = "simple",
 +	place_on = "ethereal:mushroom_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.015,
 +	biomes = {"mushroom"},
 +	decoration = "ethereal:mushroom_plant",
 +})
 +
 +minetest.register_decoration({					-- Jungle Grass
 +	deco_type = "simple",
 +	place_on = {"ethereal:jungle_dirt"},
 +	sidelen = 80,
 +	fill_ratio = 0.18,
 +	biomes = {"jungle"},
 +	decoration = "default:junglegrass",
 +})
 +
 +minetest.register_decoration({					-- Ferns
 +	deco_type = "simple",
 +	place_on = "ethereal:grove_dirt",
 +	sidelen = 80,
 +	fill_ratio = 0.20,
 +	biomes = {"grove"},
 +	decoration = "ethereal:fern",
 +})
 +
 +minetest.register_decoration({					-- Red Shrub
 +	deco_type = "simple",
 +	place_on = "ethereal:fiery_dirt", 
 +	sidelen = 80,
 +	fill_ratio = 0.20,
 +	biomes = {"fiery"},
 +	decoration = "ethereal:dry_shrub",
 +})
 +
 +minetest.register_decoration({					-- Cactus
 +	deco_type = "simple",
 +	place_on = "default:sandstone",
 +	sidelen = 80,
 +	fill_ratio = 0.010,
 +	biomes = {"desertstone"},
 +	decoration = "default:cactus",
 +	height_max = 3,
 +})
 +
 +minetest.register_decoration({					-- Papyrus
 +	deco_type = "simple",
 +	place_on = {"ethereal:green_dirt", "ethereal:jungle_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.1,
 +	biomes = {"grass", "jungle"},
 +	decoration = "default:papyrus",
 +	height_max = 4,
 +	spawn_by = "default:water_source",
 +	num_spawn_by = 1,
 +})
 +
 +-- Palm Tree on Sand near Water
 +minetest.register_on_generated(function(minp, maxp, seed)
 +	if maxp.y >= 2 and minp.y <= 0 then
 +		local perlin1 = minetest.get_perlin(354, 3, 0.7, 100)
 +		-- Assume X and Z lengths are equal
 +		local divlen = 8
 +		local divs = (maxp.x-minp.x)/divlen+1;
 +		for divx=0,divs-1 do
 +		for divz=0,divs-1 do
 +			local x0 = minp.x + math.floor((divx+0)*divlen)
 +			local z0 = minp.z + math.floor((divz+0)*divlen)
 +			local x1 = minp.x + math.floor((divx+1)*divlen)
 +			local z1 = minp.z + math.floor((divz+1)*divlen)
 +			-- Find random positions for palm based on this random
 +			local pr = PseudoRandom(seed+1)
 +				local x = pr:next(x0, x1)
 +				local z = pr:next(z0, z1)
 +				if minetest.get_node({x=x,y=1,z=z}).name == "default:sand" and
 +					minetest.find_node_near({x=x,y=1,z=z}, 1, "default:water_source") then
 +					schematic = path.."palmtree.mts"
 +					minetest.place_schematic({x=x-4,y=2,z=z-4}, schematic, 0, "", 0)
 +				end
 +			end
 +		end
 +	end
 +end)
 +
 +-- Farming Redo Plants
 +if minetest.get_modpath("farming") and farming.mod == "redo" then
 +
 +minetest.register_decoration({					-- Potato
 +	deco_type = "simple",
 +	place_on = {"ethereal:jungle_dirt"},
 +	sidelen = 80,
 +	fill_ratio = 0.045,
 +	biomes = {"jungle"},
 +	decoration = "farming:potato_3",
 +})
 +
 +minetest.register_decoration({					-- Carrot, Cucumber, Potato, Tomato, Corn, Coffee, Raspberry, Rhubarb
 +	deco_type = "simple",
 +	place_on = {"ethereal:green_dirt", "ethereal:prairie_dirt"},
 +	sidelen = 80,
 +	fill_ratio = 0.05,
 +	biomes = {"grass", "prairie"},
 +	decoration = {"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4"},
 +})
 +
 +minetest.register_decoration({					-- Melon, Pumpkin
 +	deco_type = "simple",
 +	place_on = {"default:green_dirt", "ethereal:jungle_dirt"},
 +	sidelen = 80,
 +	fill_ratio = 0.015,
 +	biomes = {"grass", "jungle"},
 +	decoration = {"farming:melon_8", "farming:pumpkin_8"},
 +	spawn_by = "default:water_source",
 +	num_spawn_by = 1,
 +})
 +
 +end
 diff --git a/mapgen_v7s.lua b/mapgen_v7s.lua new file mode 100644 index 0000000..0453487 --- /dev/null +++ b/mapgen_v7s.lua @@ -0,0 +1,617 @@ +-- Biomes
 +if ethereal.bamboo == 1 then
 +minetest.register_biome({
 +	name           = "bamboo",
 +	node_top       = "ethereal:bamboo_dirt",	depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 1,							height_max     = 71,
 +	heat_point     = 45.0,						humidity_point = 75.0,
 +})
 +end
 +
 +if ethereal.mesa == 1 then
 +minetest.register_biome({
 +	name           = "mesa",
 +	node_top       = "bakedclay:red",			depth_top      = 1,
 +	node_filler    = "bakedclay:orange",		depth_filler   = 5,
 +	height_min     = 2,							height_max     = 71,
 +	heat_point     = 25.0,						humidity_point = 28.0,
 +})
 +end
 +
 +if ethereal.alpine == 1 then
 +minetest.register_biome({
 +	name           = "alpine",
 +	node_top       = "default:dirt_with_snow",	depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 2,
 +	height_min     = 40,						height_max     = 90,
 +	heat_point     = 10.0,						humidity_point = 40.0,
 +})
 +end
 +
 +if ethereal.healing == 1 then
 +minetest.register_biome({
 +	name           = "healing",
 +	node_top       = "default:dirt_with_snow",	depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 2,
 +	height_min     = 75,						height_max     = 140,
 +	heat_point     = 10.0,						humidity_point = 40.0,
 +})
 +end
 +
 +if ethereal.snowy == 1 then
 +minetest.register_biome({
 +	name           = "snowy",
 +	node_top       = "ethereal:cold_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 2,
 +	height_min     = 5,							height_max     = 40,
 +	heat_point     = 10.0,						humidity_point = 40.0,
 +})
 +end
 +
 +if ethereal.frost == 1 then
 +minetest.register_biome({
 +	name           = "frost",
 +	node_top       = "ethereal:crystal_dirt",	depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 1,							height_max     = 71,
 +	heat_point     = 10.0,						humidity_point = 40.0,
 +})
 +end
 +
 +if ethereal.grassy == 1 then
 +minetest.register_biome({
 +	name           = "grassy",
 +	node_top       = "ethereal:green_dirt", 	depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 1,							height_max     = 91,
 +	heat_point     = 13.0,						humidity_point = 40.0,
 +})
 +end
 +
 +if ethereal.caves == 1 then
 +minetest.register_biome({
 +	name           = "caves",
 +	node_top       = "default:desert_stone",	depth_top      = 3,
 +	node_filler    = "air",						depth_filler   = 8,
 +	height_min     = 4,							height_max     = 41,
 +	heat_point     = 15.0,						humidity_point = 25.0,
 +})
 +end
 +
 +if ethereal.grayness == 1 then
 +minetest.register_biome({
 +	name           = "grayness",
 +	node_top       = "ethereal:gray_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 1,							height_max     = 41,
 +	heat_point     = 15.0,						humidity_point = 30.0,
 +})
 +end
 +
 +if ethereal.grassytwo == 1 then
 +minetest.register_biome({
 +	name           = "grassytwo",
 +	node_top       = "ethereal:green_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 1,							height_max     = 91,
 +	heat_point     = 15.0,						humidity_point = 40.0,
 +})
 +end
 +
 +if ethereal.prairie == 1 then
 +minetest.register_biome({
 +	name           = "prairie",
 +	node_top       = "ethereal:prairie_dirt",	depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 3,							height_max     = 26,
 +	heat_point     = 20.0,						humidity_point = 40.0,
 +})
 +end
 +
 +if ethereal.jumble == 1 then
 +minetest.register_biome({
 +	name           = "jumble",
 +	node_top       = "ethereal:green_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 1,							height_max     = 71,
 +	heat_point     = 25.0,						humidity_point = 50.0,
 +})
 +end
 +
 +if ethereal.junglee == 1 then
 +minetest.register_biome({
 +	name           = "junglee",
 +	node_top       = "ethereal:jungle_dirt",	depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 1,							height_max     = 71,
 +	heat_point     = 30.0,						humidity_point = 60.0,
 +})
 +end
 +
 +if ethereal.desert ==1 then
 +minetest.register_biome({
 +	name           = "desert",
 +	node_top       = "default:desert_sand",		depth_top      = 5,
 +	node_filler    = "default:desert_stone",	depth_filler   = 70,
 +	height_min     = 3,							height_max     = 23,
 +	heat_point     = 35.0,						humidity_point = 20.0,
 +})
 +end
 +
 +if ethereal.grove == 1 then
 +minetest.register_biome({
 +	name           = "grove",
 +	node_top       = "ethereal:grove_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 3,							height_max     = 23,
 +	heat_point     = 40.0,						humidity_point = 60.0,
 +})
 +end
 +
 +if ethereal.mushroom == 1 then
 +minetest.register_biome({
 +	name           = "mushroom",
 +	node_top       = "ethereal:mushroom_dirt",	depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 1,							height_max     = 50,
 +	heat_point     = 45.0,						humidity_point = 65.0,
 +})
 +end
 +
 +if ethereal.desertstone == 1 then
 +minetest.register_biome({
 +	name           = "desertstone",
 +	node_top       = "default:sandstone",		depth_top      = 7,
 +	node_filler    = "default:desert_stone",	depth_filler   = 70,
 +	height_min     = 3,							height_max     = 23,
 +	heat_point     = 50.0,						humidity_point = 20.0,
 +})
 +end
 +
 +if ethereal.quicksand == 1 then
 +minetest.register_biome({
 +	name			= "quicksand",
 +	node_top		= "ethereal:quicksand2",	depth_top = 3,
 +	node_filler		= "default:gravel",			depth_filler = 1,
 +	height_min		= 1,						height_max = 1,
 +	heat_point		= 50,						humidity_point = 38,
 +})
 +end
 +
 +if ethereal.lake == 1 then
 +minetest.register_biome({
 +	name			= "lake",
 +	node_top		= "default:sand",			depth_top = 2,
 +	node_filler		= "default:gravel",			depth_filler = 1,
 +	node_water		= "default:water_source",	node_dust_water= "default:water_source",
 +	height_min		= -31000,					height_max = 3,
 +	heat_point		= 50,						humidity_point = 40,
 +})
 +end
 +
 +if ethereal.plains == 1 then
 +minetest.register_biome({
 +	name           = "plains",
 +	node_top       = "ethereal:dry_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 3,							height_max     = 61,
 +	heat_point     = 55.0,						humidity_point = 25.0,
 +})
 +end
 +
 +if ethereal.fiery == 1 then
 +minetest.register_biome({
 +	name           = "fiery",
 +	node_top       = "ethereal:fiery_dirt",		depth_top      = 1,
 +	node_filler    = "default:dirt",			depth_filler   = 5,
 +	height_min     = 5,							height_max     = 65,
 +	heat_point     = 80.0,						humidity_point = 10.0,
 +})
 +end
 +
 +if ethereal.sandclay == 1 then
 +minetest.register_biome({
 +	name           = "sandclay",
 +	node_top       = "default:sand",			depth_top      = 3,
 +	node_filler    = "default:clay",			depth_filler   = 2,
 +	height_min     = 1,							height_max     = 11,
 +	heat_point     = 65.0,						humidity_point = 2.0,
 +})
 +end
 +
 +-- Schematics Decoration
 +local path = minetest.get_modpath("ethereal").."/schematics/"
 +
 +minetest.register_decoration({							-- Redwood Tree
 +	deco_type = "schematic",
 +	place_on = {"bakedclay:red","bakedclay:orange"},
 +	sidelen = 16,
 +	fill_ratio = 0.01, -- was 0.025
 +	biomes = {"mesa"},
 +	schematic = path.."redwood.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Banana Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:grove_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.015,
 +	biomes = {"grove"},
 +	schematic = path.."bananatree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Healing Tree
 +	deco_type = "schematic",
 +	place_on = "default:dirt_with_snow",
 +	sidelen = 16,
 +	fill_ratio = 0.04,
 +	biomes = {"healing"},
 +	schematic = path.."yellowtree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Frost Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:crystal_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.010,
 +	biomes = {"frost"},
 +	schematic = path.."frosttrees.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Giant Mushroom
 +	deco_type = "schematic",
 +	place_on = "ethereal:mushroom_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.070,
 +	biomes = {"mushroom"},
 +	schematic = path.."mushroomone.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Small Lava Crater
 +	deco_type = "schematic",
 +	place_on = "ethereal:fiery_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.012,
 +	biomes = {"fiery"},
 +	schematic = path.."volcanom.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Large Lava Crater
 +	deco_type = "schematic",
 +	place_on = "ethereal:fiery_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.010,
 +	biomes = {"fiery"},
 +	schematic = path.."volcanol.mts",
 +	flags = "place_center_x, place_center_z",
 +--	replacements = {{"default:stone", "default:desert_stone"}},
 +})
 +
 +minetest.register_decoration({							-- Jungle Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:jungle_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.3, -- was 0.250
 +	biomes = {"junglee"},
 +	schematic = path.."jungletree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Willow Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:gray_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.025,
 +	biomes = {"grayness"},
 +	schematic = path.."willow.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Pine Tree
 +	deco_type = "schematic",
 +	place_on = {"ethereal:cold_dirt", "default:dirt_with_snow"},
 +	sidelen = 16,
 +	fill_ratio = 0.025,
 +	biomes = {"snowy", "alpine"},
 +	schematic = path.."pinetree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Apple Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:green_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.030,
 +	biomes = {"grassy, jumble"},
 +	schematic = path.."tree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({
 +	deco_type = "schematic",
 +	place_on = {"ethereal:green_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.005,
 +	biomes = {"grassytwo"},
 +	schematic = path.."tree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Orange Tree
 +	deco_type = "schematic",
 +	place_on = {"ethereal:prairie_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.005,
 +	biomes = {"prairie"},
 +	schematic = path.."orangetree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Acacia Tree
 +	deco_type = "schematic",
 +	place_on = {"default:desert_sand"},
 +	sidelen = 16,
 +	fill_ratio = 0.004,
 +	biomes = {"desert"},
 +	schematic = path.."acaciatree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Big Old Tree
 +	deco_type = "schematic",
 +	place_on = "ethereal:green_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.010,
 +	biomes = {"grassytwo"},
 +	schematic = path.."bigtree.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({							-- Old Rail Section
 +	deco_type = "schematic",
 +	place_on = "default:sandstone",
 +	sidelen = 16,
 +	fill_ratio = 0.002,
 +	biomes = {"desertsandstone"},
 +	schematic = path.."rail.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +minetest.register_decoration({
 +	deco_type = "schematic",
 +	place_on = "default:sandstone",
 +	sidelen = 16,
 +	fill_ratio = 0.002,
 +	biomes = {"desertsandstone"},
 +	schematic = path.."railtwo.mts",
 +	flags = "place_center_x, place_center_z",
 +})
 +
 +-- Simple Decoration
 +minetest.register_decoration({							-- Scorched Tree
 +	deco_type = "simple",
 +	place_on = "ethereal:dry_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.006,
 +	biomes = {"plains"},
 +	decoration = "ethereal:scorched_tree",
 +	height_max = 6,
 +})
 +
 +minetest.register_decoration({							-- Bamboo Stalks
 +	deco_type = "simple",
 +	place_on = "ethereal:bamboo_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.055,
 +	biomes = {"bamboo"},
 +	decoration = "ethereal:bamboo",
 +	height_max = 5,
 +})
 +
 +minetest.register_decoration({							-- Bamboo Sprouts & Grass
 +	deco_type = "simple",
 +	place_on = "ethereal:bamboo_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.25,
 +	biomes = {"bamboo"},
 +	decoration = {"ethereal:bamboo_sprout", "default:grass_2", "default:grass_3"},
 +})
 +
 +minetest.register_decoration({							-- Dry Shrub
 +	deco_type = "simple",
 +	place_on = {"ethereal:dry_dirt", "default:sand", "default:desert_sand", "sandstone", "bakedclay:red"},
 +	sidelen = 16,
 +	fill_ratio = 0.015,
 +	biomes = {"plains", "lake", "desert", "desertstone", "mesa"},
 +	decoration = "default:dry_shrub",
 +})
 +
 +minetest.register_decoration({							-- Flowers & Strawberry
 +	deco_type = "simple",
 +	place_on = "ethereal:green_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.030,
 +	biomes = {"grassy", "grassy", "grassytwo"},
 +	decoration = {"flowers:dandelion_white", "flowers:dandelion_yellow", "flowers:geranium", "flowers:rose", "flowers:tulip", "flowers:viola", "ethereal:strawberry_7"},
 +})
 +
 +minetest.register_decoration({							-- Prairie Flowers & Strawberry
 +	deco_type = "simple",
 +	place_on = "ethereal:prairie_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.050,
 +	biomes = {"prairie"},
 +	decoration = {"flowers:dandelion_white", "flowers:dandelion_yellow", "flowers:geranium", "flowers:rose", "flowers:tulip", "flowers:viola", "ethereal:strawberry_7"},
 +})
 +
 +minetest.register_decoration({							-- Crystal Spike & Crystal Grass
 +	deco_type = "simple",
 +	place_on = "ethereal:crystal_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.02,
 +	biomes = {"frost"},
 +	decoration = {"ethereal:crystal_spike", "ethereal:crystalgrass"},
 +})
 +
 +minetest.register_decoration({							-- Red Shrub
 +	deco_type = "simple",
 +	place_on = "ethereal:fiery_dirt", 
 +	sidelen = 16,
 +	fill_ratio = 0.20,
 +	biomes = {"fiery"},
 +	decoration = "ethereal:dry_shrub",
 +})
 +
 +minetest.register_decoration({							-- Snowy Grass
 +	deco_type = "simple",
 +	place_on = {"ethereal:gray_dirt", "ethereal:cold_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.05,
 +	biomes = {"grayness", "snowy"},
 +	decoration = "ethereal:snowygrass",
 +})
 +
 +minetest.register_decoration({							-- Cactus
 +	deco_type = "simple",
 +	place_on = "default:sandstone",
 +	sidelen = 16,
 +	fill_ratio = 0.010,
 +	biomes = {"desertstone"},
 +	decoration = "default:cactus",
 +	height_max = 3,
 +})
 +
 +minetest.register_decoration({							-- Wild Mushroom
 +	deco_type = "simple",
 +	place_on = "ethereal:mushroom_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.015,
 +	biomes = {"mushroom"},
 +	decoration = "ethereal:mushroom_plant",
 +})
 +
 +minetest.register_decoration({							-- Jungle Grass
 +	deco_type = "simple",
 +	place_on = {"ethereal:jungle_dirt", "ethereal:green_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.18,
 +	biomes = {"junglee", "jumble"},
 +	decoration = "default:junglegrass",
 +})
 +
 +minetest.register_decoration({							-- Grass
 +	deco_type = "simple",
 +	place_on = {"ethereal:green_dirt_top", "ethereal:jungle_dirt", "ethereal:prairie_dirt", "ethereal:grove_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.40, -- was 0.50
 +	biomes = {"grassy", "grassytwo", "jumble", "junglee", "prairie", "grove"},
 +	decoration = "default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5",
 +})
 +
 +minetest.register_decoration({							-- Ferns
 +	deco_type = "simple",
 +	place_on = "ethereal:grove_dirt",
 +	sidelen = 16,
 +	fill_ratio = 0.20,
 +	biomes = {"grove"},
 +	decoration = "ethereal:fern",
 +})
 +
 +minetest.register_decoration({							-- Snow
 +	deco_type = "simple",
 +	place_on = {"ethereal:cold_dirt", "default:dirt_with_snow"},
 +	sidelen = 16,
 +	fill_ratio = 0.80,
 +	biomes = {"snowy", "alpine"},
 +	decoration = "default:snow",
 +})
 +
 +minetest.register_decoration({							-- Wild Onion
 +	deco_type = "simple",
 +	place_on = {"ethereal:green_dirt", "ethereal:prairie_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.25, -- was 0.35
 +	biomes = {"grassy", "grassytwo", "jumble", "prairie"},
 +	decoration = "ethereal:onion_4",
 +})
 +
 +minetest.register_decoration({							-- Papyrus
 +	deco_type = "simple",
 +	place_on = {"ethereal:green_dirt", "ethereal:jungle_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.1,
 +	biomes = {"grassy", "junglee"},
 +	decoration = "default:papyrus",
 +	height_max = 4,
 +	spawn_by = "default:water_source",
 +	num_spawn_by = 1,
 +})
 +
 +-- Palm Tree on Sand next to Water
 +minetest.register_on_generated(function(minp, maxp, seed)
 +	--if maxp.y >= 2 and minp.y <= 0 then -- orig
 +	if maxp.y > 1 and minp.y < 1 then -- new
 +		local perlin1 = minetest.get_perlin(354, 3, 0.7, 100)
 +		-- Assume X and Z lengths are equal
 +		local divlen = 8
 +		local divs = (maxp.x-minp.x)/divlen+1;
 +		for divx=0,divs-1 do
 +		for divz=0,divs-1 do
 +			local x0 = minp.x + math.floor((divx+0)*divlen)
 +			local z0 = minp.z + math.floor((divz+0)*divlen)
 +			local x1 = minp.x + math.floor((divx+1)*divlen)
 +			local z1 = minp.z + math.floor((divz+1)*divlen)
 +			-- Find random positions for palm based on this random
 +			local pr = PseudoRandom(seed+1)
 +				local x = pr:next(x0, x1)
 +				local z = pr:next(z0, z1)
 +				if minetest.get_node({x=x,y=1,z=z}).name == "default:sand" and
 +					minetest.find_node_near({x=x,y=1,z=z}, 1, "default:water_source") then
 +					schematic = path.."palmtree.mts"
 +					minetest.place_schematic({x=x-4,y=2,z=z-4}, schematic, 0, '', 0)
 +				end
 +			end
 +		end
 +	end
 +end)
 +
 +-- Farming Redo Plants
 +if minetest.get_modpath("farming") and farming.mod == "redo" then
 +
 +minetest.register_decoration({						-- Potato
 +	deco_type = "simple",
 +	place_on = {"ethereal:jungle_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.045,
 +	biomes = {"junglee"},
 +	decoration = "farming:potato_3",
 +})
 +
 +minetest.register_decoration({						-- Carrot, Cucumber, Potato, Tomato, Corn, Coffee, Raspberry, Rhubarb
 +	deco_type = "simple",
 +	place_on = {"ethereal:green_dirt", "ethereal:prairie_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.05,
 +	biomes = {"grassy", "grassytwo", "prairie", "jumble"},
 +	decoration = {"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4"},
 +})
 +
 +minetest.register_decoration({						-- Melon, Pumpkin
 +	deco_type = "simple",
 +	place_on = {"default:green_dirt", "ethereal:jungle_dirt"},
 +	sidelen = 16,
 +	fill_ratio = 0.015,
 +	biomes = {"grassy", "grassytwo", "junglee", "jumble"},
 +	decoration = {"farming:melon_8", "farming:pumpkin_8"},
 +	spawn_by = "default:water_source",
 +	num_spawn_by = 1,
 +})
 +
 +end
 diff --git a/mushroom.lua b/mushroom.lua new file mode 100644 index 0000000..4b4e4ec --- /dev/null +++ b/mushroom.lua @@ -0,0 +1,178 @@ +-- Mushroom Spores
 +minetest.register_craftitem("ethereal:mushroom_craftingitem", {
 +	description = "Mushroom Spores",
 +	groups = {not_in_creative_inventory=1},
 +	inventory_image = "mushroom_spores.png",
 +	on_place = function(itemstack, placer, pointed_thing)
 +		return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:mushroom_garden_1")
 +	end,
 +})
 +
 +-- Mushroom Plant (Must be farmed to become edible)
 +minetest.register_node("ethereal:mushroom_plant", {
 +	description = "Mushroom (edible)",
 +	drawtype = "plantlike",
 +	tiles = {"mushroom.png"},
 +	inventory_image = "mushroom.png",
 +	selection_box = {type = "fixed",fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}},
 +	drop = "ethereal:mushroom_craftingitem",
 +	wield_image = "mushroom.png",
 +	paramtype = "light",
 +	sunlight_propagates = true,
 +	walkable = false,
 +	groups = {snappy=2,dig_immediate=3,flammable=2},
 +	sounds = default.node_sound_defaults(),
 +	on_use = minetest.item_eat(1),
 +})
 +
 +-- Mushroom Soup (Heals 1 heart)
 +minetest.register_craftitem("ethereal:mushroom_soup", {
 +	description = "Mushroom Soup",
 +	inventory_image = "mushroom_soup.png",
 +	on_use = minetest.item_eat(2, "ethereal:bowl"),
 +})
 +
 +minetest.register_craft({
 +	output = "ethereal:mushroom_soup",
 +	recipe = {
 +		{"ethereal:mushroom_plant", ""},
 +		{"ethereal:mushroom_plant", ""},
 +		{"ethereal:bowl", ""},
 +	}
 +})
 +
 +-- Cooked Mushroom Soup (Heals 1 and half heart)
 +minetest.register_craftitem("ethereal:mushroom_soup_cooked", {
 +	description = "Mushroom Soup Cooked",
 +	inventory_image = "mushroom_soup_cooked.png",
 +	on_use = minetest.item_eat(3, "ethereal:bowl"),
 +})
 +
 +minetest.register_craft({
 +	type = "cooking",
 +	cooktime = 10,
 +	output = "ethereal:mushroom_soup_cooked",
 +	recipe = "ethereal:mushroom_soup"
 +})
 +
 +-- Define Mushroom growth stages
 +minetest.register_node("ethereal:mushroom_1", {
 +	drawtype = "plantlike",
 +	tiles = {"ethereal_mushroom_garden_1.png"},
 +	paramtype = "light",
 +	sunlight_propagates = true,
 +	walkable = false,
 +	buildable_to = true,
 +	drop = {
 +		items = {
 +			{items = {"ethereal:mushroom_craftingitem 1"},rarity=1},
 +			{items = {"ethereal:mushroom_plant 1"},rarity=14},
 +			}
 +	},
 +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},},
 +	groups = {snappy=3,flammable=2,plant=1,mushroom=1,attached_node=1,growing=1,not_in_creative_inventory=1},
 +	sounds = default.node_sound_leaves_defaults(),
 +})
 +minetest.register_alias("ethereal:mushroom_garden_1", "ethereal:mushroom_1")
 +
 +minetest.register_node("ethereal:mushroom_2", {
 +	drawtype = "plantlike",
 +	tiles = {"ethereal_mushroom_garden_2.png"},
 +	paramtype = "light",
 +	sunlight_propagates = true,
 +	walkable = false,
 +	drop = {
 +		items = {
 +			{items = {"ethereal:mushroom_craftingitem 1"},rarity=1},
 +			{items = {"ethereal:mushroom_plant 1"},rarity=7},
 +			}
 +	},
 +	buildable_to = true,
 +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},},
 +	groups = {snappy=3,flammable=2,plant=1,mushroom=2,attached_node=1,growing=1,not_in_creative_inventory=1},
 +	sounds = default.node_sound_leaves_defaults(),
 +})
 +minetest.register_alias("ethereal:mushroom_garden_2", "ethereal:mushroom_2")
 +
 +minetest.register_node("ethereal:mushroom_3", {
 +	drawtype = "plantlike",
 +	tiles = {"ethereal_mushroom_garden_3.png"},
 +	paramtype = "light",
 +	sunlight_propagates = true,
 +	walkable = false,
 +	drop = {
 +		items = {
 +			{items = {"ethereal:mushroom_craftingitem 1"},rarity=1},
 +			{items = {"ethereal:mushroom_plant 3"},rarity=3},
 +			}
 +	},
 +	buildable_to = true,
 +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},},
 +	groups = {snappy=3,flammable=2,plant=1,mushroom=3,attached_node=1,growing=1,not_in_creative_inventory=1},
 +	sounds = default.node_sound_leaves_defaults(),
 +})
 +minetest.register_alias("ethereal:mushroom_garden_3", "ethereal:mushroom_3")
 +
 +minetest.register_node("ethereal:mushroom_4", {
 +	drawtype = "plantlike",
 +	tiles = {"ethereal_mushroom_garden_4.png"},
 +	paramtype = "light",
 +	sunlight_propagates = true,
 +	walkable = false,
 +	buildable_to = true,
 +	drop = {
 +		items = {
 +			{items = {"ethereal:mushroom_craftingitem 1"},rarity=1},
 +			{items = {"ethereal:mushroom_plant 3"},rarity=1},
 +			{items = {"ethereal:mushroom_plant 3"},rarity=7},
 +			}
 +	},
 +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},},
 +	groups = {snappy=3,flammable=2,plant=1,mushroom=4,attached_node=1,not_in_creative_inventory=1},
 +	sounds = default.node_sound_leaves_defaults(),
 +})
 +minetest.register_alias("ethereal:mushroom_garden_4", "ethereal:mushroom_4")
 +
 +-- Abm for growing Mushroom
 +if farming.mod ~= "redo" then
 +
 +minetest.register_abm({
 +	nodenames = {"group:mushroom"},
 +	neighbors = {"farming:soil_wet"},
 +	interval = 30,
 +	chance = 2,
 +	action = function(pos, node)
 +		-- return if already full grown
 +		if minetest.get_item_group(node.name, "mushroom") == 4 then
 +			return
 +		end
 +		
 +		-- check if on wet soil
 +		pos.y = pos.y-1
 +		local n = minetest.get_node(pos)
 +		if minetest.get_item_group(n.name, "soil") < 3 then
 +			return
 +		end
 +		pos.y = pos.y+1
 +		
 +		-- check light
 +		if not minetest.get_node_light(pos) then
 +			return
 +		end
 +		if minetest.get_node_light(pos) < 5 then
 +			return
 +		end
 +		
 +		-- grow
 +		local height = minetest.get_item_group(node.name, "mushroom") + 1
 +		minetest.set_node(pos, {name="ethereal:mushroom_garden_"..height})
 +	end
 +})
 +
 +else
 +	print ("[MOD] Ethereal - Detected and using Farming Redo mod")
 +end
 +
 +-- Temporary compatibility lines for Xanadu server
 +minetest.register_alias("ethereal:mushroom_7", "ethereal:mushroom_3")
 +minetest.register_alias("ethereal:mushroom_8", "ethereal:mushroom_4")
 diff --git a/onion.lua b/onion.lua new file mode 100644 index 0000000..24d51b2 --- /dev/null +++ b/onion.lua @@ -0,0 +1,150 @@ +-- Wild Onion Plant
 +minetest.register_craftitem("ethereal:wild_onion_plant", {
 +	description = "Wild Onion",
 +	groups = {not_in_creative_inventory=1},
 +	inventory_image = "wild_onion.png",
 +	on_use = minetest.item_eat(2),
 +	on_place = function(itemstack, placer, pointed_thing)
 +		return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:wild_onion_1")
 +	end
 +})
 +minetest.register_alias("ethereal:wild_onion_craftingitem", "ethereal:wild_onion_plant")
 +
 +-- Define Onion growth stages
 +minetest.register_node("ethereal:onion_1", {
 +	drawtype = "plantlike",
 +	tiles = {"ethereal_wild_onion_1.png"},
 +	paramtype = "light",
 +	sunlight_propagates = true,
 +	walkable = false,
 +	buildable_to = true,
 +	drop = {
 +		items = {
 +			{items = {"ethereal:wild_onion_plant 1"},rarity=1},
 +			}
 +	},
 +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},},
 +	groups = {snappy=3,flammable=2,plant=1,attached_node=1,onion=1,growing=1,not_in_creative_inventory=1},
 +	sounds = default.node_sound_leaves_defaults(),
 +})
 +minetest.register_alias("ethereal:wild_onion_1", "ethereal:onion_1")
 +
 +minetest.register_node("ethereal:onion_2", {
 +	drawtype = "plantlike",
 +	tiles = {"ethereal_wild_onion_2.png"},
 +	paramtype = "light",
 +	sunlight_propagates = true,
 +	walkable = false,
 +	buildable_to = true,
 +	drop = {
 +		items = {
 +			{items = {"ethereal:wild_onion_plant 1"},rarity=1},
 +		}
 +	},
 +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},},
 +	groups = {snappy=3,flammable=2,plant=1,attached_node=1,onion=2,growing=1,not_in_creative_inventory=1},
 +	sounds = default.node_sound_leaves_defaults(),
 +})
 +minetest.register_alias("ethereal:wild_onion_2", "ethereal:onion_2")
 +
 +minetest.register_node("ethereal:onion_3", {
 +	drawtype = "plantlike",
 +	tiles = {"ethereal_wild_onion_3.png"},
 +	paramtype = "light",
 +	sunlight_propagates = true,
 +	walkable = false,
 +	buildable_to = true,
 +	is_ground_content = true,
 +	drop = {
 +		items = {
 +			{items = {"ethereal:wild_onion_plant 1"},rarity=1},
 +			{items = {"ethereal:wild_onion_plant 2"},rarity=3},
 +			}
 +	},
 +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},},
 +	groups = {snappy=3,flammable=2,plant=1,attached_node=1,onion=3,growing=1,not_in_creative_inventory=1},
 +	sounds = default.node_sound_leaves_defaults(),
 +})
 +minetest.register_alias("ethereal:wild_onion_3", "ethereal:onion_3")
 +
 +minetest.register_node("ethereal:onion_4", {
 +	drawtype = "plantlike",
 +	tiles = {"ethereal_wild_onion_4.png"},
 +	paramtype = "light",
 +	sunlight_propagates = true,
 +	walkable = false,
 +	buildable_to = true,
 +	drop = {
 +		items = {
 +			{items = {"ethereal:wild_onion_plant 1"},rarity=1},
 +			{items = {"ethereal:wild_onion_plant 3"},rarity=3},
 +			}
 +	},
 +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},},
 +	groups = {snappy=3,flammable=2,plant=1,attached_node=1,onion=4,growing=1,not_in_creative_inventory=1},
 +	sounds = default.node_sound_leaves_defaults(),
 +})
 +minetest.register_alias("ethereal:wild_onion_4", "ethereal:onion_4")
 +
 +minetest.register_node("ethereal:onion_5", {
 +	drawtype = "plantlike",
 +	tiles = {"ethereal_wild_onion_5.png"},
 +	paramtype = "light",
 +	sunlight_propagates = true,
 +	walkable = false,
 +	buildable_to = true,
 +	drop = {
 +		items = {
 +			{items = {"ethereal:wild_onion_plant 2"},rarity=1},
 +			{items = {"ethereal:wild_onion_plant 3"},rarity=2},
 +			}
 +	},
 +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},},
 +	groups = {snappy=3,flammable=2,plant=1,attached_node=1,onion=5,not_in_creative_inventory=1},
 +	sounds = default.node_sound_leaves_defaults(),
 +})
 +minetest.register_alias("ethereal:wild_onion_5", "ethereal:onion_5")
 +
 +-- Abm for growing Wild Onion
 +if farming.mod ~= "redo" then
 +
 +minetest.register_abm({
 +	nodenames = {"group:onion"},
 +	neighbors = {"farming:soil_wet"},
 +	interval = 50,
 +	chance = 3,
 +	action = function(pos, node)
 +		-- return if already full grown
 +		if minetest.get_item_group(node.name, "onion") == 5 then
 +			return
 +		end
 +		
 +		-- check if on wet soil
 +		pos.y = pos.y-1
 +		local n = minetest.get_node(pos)
 +		if minetest.get_item_group(n.name, "soil") < 3 then
 +			return
 +		end
 +		pos.y = pos.y+1
 +		
 +		-- check light
 +		if not minetest.get_node_light(pos) then
 +			return
 +		end
 +		if minetest.get_node_light(pos) < 13 then
 +			return
 +		end
 +		
 +		-- grow
 +		local height = minetest.get_item_group(node.name, "onion") + 1
 +		minetest.set_node(pos, {name="ethereal:wild_onion_"..height})
 +	end
 +})
 +
 +end
 +
 +-- Temporary compatibility lines for Xanadu server
 +minetest.register_alias("ethereal:onion_7", "ethereal:onion_4")
 +minetest.register_alias("ethereal:onion_8", "ethereal:onion_5")
 +minetest.register_alias("ethereal:wild_onion_7", "ethereal:onion_4")
 +minetest.register_alias("ethereal:wild_onion_8", "ethereal:onion_5")
 diff --git a/papyrus.lua b/papyrus.lua new file mode 100644 index 0000000..e17dee2 --- /dev/null +++ b/papyrus.lua @@ -0,0 +1,42 @@ +-- Override default Papyrus to make it walkable +minetest.override_item("default:papyrus", {walkable=true, sunlight_propagates=true}) + + +-- Have Papyrus grow up to 4 high and Bamboo grow up to 5 in height (shared abm) +minetest.register_abm({ +	nodenames = {"default:papyrus", "ethereal:bamboo"}, +	neighbors = {"group:soil"}, +	interval = 50, +	chance = 20, +	action = function(pos, node) + +		local type = minetest.get_node(pos).name +		local high = 4 + +		pos.y = pos.y-1 +		local name = minetest.get_node(pos).name + +		if minetest.get_item_group(name, "soil") < 1 or minetest.find_node_near(pos, 3, {"group:water"}) == nil then +			return +		end + +		if type == "ethereal:bamboo" then +			high = 5 +		end + +		pos.y = pos.y+1 +		local height = 0 + +		while minetest.get_node(pos).name == type and height < high do +			height = height+1 +			pos.y = pos.y+1 +		end + +		if height < high then +			if minetest.get_node(pos).name == "air" then +				minetest.set_node(pos, {name=type}) +			end +		end + +	end, +}) diff --git a/plantlife.lua b/plantlife.lua new file mode 100644 index 0000000..9e85b06 --- /dev/null +++ b/plantlife.lua @@ -0,0 +1,505 @@ +-- Fern (boston) +minetest.register_node("ethereal:fern", { +	description = "Fern", +	drawtype = "plantlike", +	visual_scale = 1.2, +	tiles = {"fern.png"}, +	inventory_image = "fern.png", +	wield_image = "fern.png", +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	is_ground_content = true, +	buildable_to = true, +	drop = { +		max_items = 1, +		items = { +			{items = {"ethereal:fern_tubers"},rarity = 6}, +			{items = {"ethereal:fern"}}, +		} +	}, +	groups = {snappy=3,flora=1,attached_node=1,flammable=2}, +	sounds = default.node_sound_leaves_defaults(), +	selection_box = { +		type = "fixed", +		fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, +	}, +}) + +-- Boston Ferns sometimes drop edible Tubers (heals 1/2 heart when eaten) +minetest.register_craftitem("ethereal:fern_tubers", { +	description = "Fern Tubers", +	inventory_image = "fern_tubers.png", +	on_use = minetest.item_eat(1), +}) + +-- Red Shrub (not flammable) +minetest.register_node("ethereal:dry_shrub", { +	description = "Fiery Dry Shrub", +	drawtype = "plantlike", +	visual_scale = 1.0, +	tiles = {"ethereal_dry_shrub.png"}, +	inventory_image = "ethereal_dry_shrub.png", +	wield_image = "ethereal_dry_shrub.png", +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	is_ground_content = true, +	buildable_to = true, +	groups = {snappy=3,flora=1,attached_node=1}, +	sounds = default.node_sound_leaves_defaults(), +	selection_box = { +		type = "fixed", +		fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, +	}, +}) + +-- Grey Shrub (not Flammable - too cold to burn) +minetest.register_node("ethereal:snowygrass", { +	description = "Snowy Grass", +	drawtype = "plantlike", +	visual_scale = 0.9, +	tiles = {"ethereal_snowygrass.png"}, +	inventory_image = "ethereal_snowygrass.png", +	wield_image = "ethereal_snowygrass.png", +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	buildable_to = true, +	is_ground_content = true, +	groups = {snappy=3,flora=1,attached_node=1}, +	sounds = default.node_sound_leaves_defaults(), +	selection_box = { +		type = "fixed", +		fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, +	}, +}) + +-- Crystal Shrub (not Flammable - too cold to burn) +minetest.register_node("ethereal:crystalgrass", { +	description = "Crystal Grass", +	drawtype = "plantlike", +	visual_scale = 0.9, +	tiles = {"ethereal_crystalgrass.png"}, +	inventory_image = "ethereal_crystalgrass.png", +	wield_image = "ethereal_crystalgrass.png", +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	buildable_to = true, +	is_ground_content = true, +	groups = {snappy=3,flora=1,attached_node=1}, +	sounds = default.node_sound_leaves_defaults(), +	selection_box = { +		type = "fixed", +		fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, +	}, +}) + +-- Define Moss Types (Has grass textures on all sides) +function ethereal.add_moss(typ, descr, texture, receipe_item) +	minetest.register_node("ethereal:"..typ.."_moss", { +		description = descr.." Moss", +		tiles = { texture }, +		groups = {crumbly=3 }, +		sounds = default.node_sound_dirt_defaults +	}) + +	minetest.register_craft({ +		output = "ethereal:"..typ.."_moss", +		recipe = {{"default:dirt", receipe_item }}  +	}) +end + +ethereal.add_moss( "crystal",	"Crystal",	"ethereal_grass_crystal_top.png",	"ethereal:frost_leaves") +ethereal.add_moss( "mushroom",	"Mushroom",	"ethereal_grass_mushroom_top.png",	"ethereal:mushroom") +ethereal.add_moss( "fiery",		"Fiery",	"ethereal_grass_fiery_top.png",		"ethereal:dry_shrub") +ethereal.add_moss( "gray",		"Gray",		"ethereal_grass_gray_top.png",		"ethereal:snowygrass") +ethereal.add_moss( "green",		"Green",	"default_grass.png",				"default:jungleleaves") + +-- Banana (Heals one heart when eaten) +minetest.register_node("ethereal:banana", { +	description = "Banana", +	drawtype = "torchlike", +	visual_scale = 1.0, +	tiles = {"banana_single.png"}, +	inventory_image = "banana_single.png", +	paramtype = "light", +	sunlight_propagates = true, +	walkable = false, +	selection_box = { +		type = "fixed", +		fixed = {-0.2, -0.5, -0.2, 0.2, 0.2, 0.2} +	}, +	groups = {fleshy=3,dig_immediate=3,flammable=2,leafdecay=1,leafdecay_drop=1}, +	on_use = minetest.item_eat(2), +	sounds = default.node_sound_leaves_defaults(), +	after_place_node = function(pos, placer, itemstack) +		if placer:is_player() then +			minetest.set_node(pos, {name="ethereal:banana", param2=1}) +		end +	end, +}) + +-- Banana Dough +minetest.register_craftitem("ethereal:banana_dough", { +	description = "Banana Dough", +	inventory_image = "banana_dough.png", +}) + +minetest.register_craft({ +	type = "shapeless", +	output = "ethereal:banana_dough", +	recipe = {"farming:flour", "ethereal:banana"} +}) + +minetest.register_craft({ +	type = "cooking", +	cooktime = 14, +	output = "ethereal:banana_bread", +	recipe = "ethereal:banana_dough" +}) + +-- Orange (Heals 2 hearts when eaten) +minetest.register_node("ethereal:orange", { +	description = "Orange", +	drawtype = "plantlike", +	visual_scale = 1.0, +	tiles = {"farming_orange.png"}, +	inventory_image = "farming_orange.png", +	paramtype = "light", +	sunlight_propagates = true, +	walkable = false, +	selection_box = { +		type = "fixed", +		fixed = {-0.2, -0.3, -0.2, 0.2, 0.2, 0.2} +	}, +	groups = {fleshy=3,dig_immediate=3,flammable=2,leafdecay=1,leafdecay_drop=1}, +	on_use = minetest.item_eat(4), +	sounds = default.node_sound_leaves_defaults(), +	after_place_node = function(pos, placer, itemstack) +		if placer:is_player() then +			minetest.set_node(pos, {name="ethereal:orange", param2=1}) +		end +	end, +}) + +-- Pine Nuts (Heals 1/2 heart when eaten) +minetest.register_craftitem("ethereal:pine_nuts", { +	description = "Pine Nuts", +	inventory_image = "pine_nuts.png", +	on_use = minetest.item_eat(1), +}) + +-- Banana Loaf (Heals 3 hearts when eaten) +minetest.register_craftitem("ethereal:banana_bread", { +	description = "Banana Loaf", +	inventory_image = "banana_bread.png", +	on_use = minetest.item_eat(6), +}) + +-- Coconut (Gives 4 coconut slices, each heal 1/2 heart) +minetest.register_node("ethereal:coconut", { +	drawtype = "plantlike", +	walkable = false, +	paramtype = "light", +	description = "Coconut", +	tiles = {"moretrees_coconut.png"}, +	groups = {cracky=2,snappy=2,choppy=2,flammable=1,leafdecay=3,leafdecay_drop=1}, +	drop = "ethereal:coconut_slice 4", +	sounds = default.node_sound_wood_defaults(), +}) + +-- Coconut Slice (Heals half heart when eaten) +minetest.register_craftitem("ethereal:coconut_slice", { +	description = "Coconut Slice", +	inventory_image = "moretrees_coconut_slice.png", +	on_use = minetest.item_eat(1), +}) + +-- Golden Apple (Found on Healing Tree, heals all 10 hearts) +minetest.register_node("ethereal:golden_apple", { +	description = "Golden Apple", +	drawtype = "plantlike", +	visual_scale = 1.0, +	tiles = {"default_apple_gold.png"}, +	inventory_image = "default_apple_gold.png", +	paramtype = "light", +	sunlight_propagates = true, +	walkable = false, +	selection_box = { +		type = "fixed", +		fixed = {-0.2, -0.3, -0.2, 0.2, 0.2, 0.2} +	}, +	groups = {fleshy=3,dig_immediate=3,leafdecay=3,leafdecay_drop=1}, +	on_use = minetest.item_eat(20), +	sounds = default.node_sound_leaves_defaults(), +	after_place_node = function(pos, placer, itemstack) +		if placer:is_player() then +			minetest.set_node(pos, {name="ethereal:golden_apple", param2=1}) +		end +	end, +}) + +-- Bamboo (thanks to Nelo-slay on DeviantArt for the free Bamboo base image) +minetest.register_node("ethereal:bamboo", { +	description = "bamboo", +	drawtype = "plantlike", +	tiles = {"bamboo.png"}, +	inventory_image = "bamboo.png", +	wield_image = "bamboo.png", +	paramtype = "light", +	sunlight_propagates = true, +	is_ground_content = true, +	walkable = true, +	selection_box = { +		type = "fixed", +		fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} +	}, +	groups = {choppy=3, oddly_breakable_by_hand=1, flammable=2},--, attached_node=1}, +	sounds = default.node_sound_leaves_defaults(), +	after_dig_node = function(pos, node, metadata, digger) +		default.dig_up(pos, node, digger) +	end, +}) + +-- Bamboo Sprout +minetest.register_node("ethereal:bamboo_sprout", { +	description = "Bamboo Sprout", +	drawtype = "plantlike", +	tiles = {"bamboo_sprout.png"}, +	inventory_image = "bamboo_sprout.png", +	wield_image = "bamboo_sprout.png", +	paramtype = "light", +	sunlight_propagates = true, +	walkable = false, +	is_ground_content = true, +	buildable_to = true, +	groups = {snappy=3,flora=1,attached_node=1,flammable=2}, +	sounds = default.node_sound_leaves_defaults(), +	selection_box = { +		type = "fixed", +		fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, +	}, +	-- sprouts are edible if cooked in stew +}) + +-- Wooden Bowl (for Mushroom Soup) +minetest.register_craftitem("ethereal:bowl", { +	description = "Bowl", +	inventory_image = "bowl.png", +}) + +minetest.register_craft({ +	output = "ethereal:bowl", +	recipe = { +		{"group:wood", "", "group:wood"}, +		{"", "group:wood", ""}, +		{"", "", ""}, +	} +}) + +-- Hearty Stew (Heals 4 hearts - thanks to ZonerDarkRevention for his DokuCraft DeviantArt bowl texture) +minetest.register_craftitem("ethereal:hearty_stew", { +	description = "Hearty Stew", +	inventory_image = "hearty_stew.png", +	on_use = minetest.item_eat(8, "ethereal:bowl"), +}) + +-- Cooked Hearty Stew (Heals 5 hearts) +minetest.register_craftitem("ethereal:hearty_stew_cooked", { +	description = "Hearty Stew Cooked", +	inventory_image = "hearty_stew_cooked.png", +	on_use = minetest.item_eat(10, "ethereal:bowl"), +}) + +-- Hearty Stew +minetest.register_craft({ +	output = "ethereal:hearty_stew", +	recipe = { +		{"ethereal:wild_onion_plant","ethereal:mushroom_plant", "ethereal:bamboo_sprout"}, +		{"","ethereal:mushroom_plant", ""}, +		{"","ethereal:bowl", ""}, +	} +}) + +minetest.register_craft({ +	output = "ethereal:hearty_stew", +	recipe = { +		{"ethereal:wild_onion_plant","ethereal:mushroom_plant", "ethereal:fern_tubers"}, +		{"","ethereal:mushroom_plant", ""}, +		{"","ethereal:bowl", ""}, +	} +}) + +-- Cooked Hearty Stew +minetest.register_craft({ +	type = "cooking", +	cooktime = 10, +	output = "ethereal:hearty_stew_cooked", +	recipe = "ethereal:hearty_stew" +}) + +-- Mushroom Tops give 4x Mushrooms for Planting +minetest.register_craft({ +	output = "ethereal:mushroom_craftingitem 4", +	type = shapeless, +	recipe = { +		{"ethereal:mushroom", ""}, +		{"", ""}, +		{"", ""}, +	} +}) + +-- Bamboo Flooring +minetest.register_node("ethereal:bamboo_floor", { +	description = ("Bamboo Floor"), +	drawtype = 'nodebox', +	tiles = { "bamboo_floor.png" }, +	wield_image = "bamboo_floor.png", +	inventory_image = "bamboo_floor.png", +	paramtype = "light", +	paramtype2 = "wallmounted", +	walkable = true, +	node_box = { +		type = "wallmounted", +		wall_top    = {-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5}, +		wall_bottom = {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, +		wall_side   = {-0.5, -0.5, -0.5, -0.4375, 0.5, 0.5}, +	}, +	selection_box = {type = "wallmounted"}, +	groups = { snappy = 3, choppy = 3 , flammable=2}, +	sounds = default.node_sound_wood_defaults(), +}) + +-- Craft Bamboo into Bamboo Flooring +minetest.register_craft({ +	output = "ethereal:bamboo_floor 2", +	recipe = { +		{"ethereal:bamboo", "ethereal:bamboo", "ethereal:bamboo"}, +		{"ethereal:bamboo", "ethereal:bamboo", "ethereal:bamboo"}, +		{"ethereal:bamboo", "ethereal:bamboo", "ethereal:bamboo"}, +	} +}) + +-- Craft Bamboo into Paper +minetest.register_craft({ +	output = "default:paper 6", +	recipe = { +		{"ethereal:bamboo", "ethereal:bamboo"}, +		{"ethereal:bamboo", "ethereal:bamboo"}, +		{"ethereal:bamboo", "ethereal:bamboo"}, +	} +}) + +-- Gravel (5x cobble in X pattern gives 5 gravel) +minetest.register_craft({ +	output = "default:gravel 5", +	recipe = { +		{"default:cobble", "", "default:cobble"}, +		{"", "default:cobble", ""}, +		{"default:cobble", "", "default:cobble"}, +	} +}) + +-- Dirt (5x gravel in X pattern gives 5 dirt) +minetest.register_craft({ +	output = "default:dirt 5", +	recipe = { +		{"default:gravel", "", "default:gravel"}, +		{"", "default:gravel", ""}, +		{"default:gravel", "", "default:gravel"}, +	} +}) + +-- Sand (5x dirt in X pattern gives 5 sand) +minetest.register_craft({ +	output = "default:sand 5", +	recipe = { +		{"default:dirt", "", "default:dirt"}, +		{"", "default:dirt", ""}, +		{"default:dirt", "", "default:dirt"}, +	} +}) + +-- Snow (5x ice in X pattern gives 5 snow) +minetest.register_craft({ +	output = "default:snow 5", +	recipe = { +		{"default:ice", "", "default:ice"}, +		{"", "default:ice", ""}, +		{"default:ice", "", "default:ice"}, +	} +}) + +-- Paper (2x3 string = 4 paper) +minetest.register_craft({ +	output = "default:paper 4", +	recipe = { +		{"farming:string", "farming:string", ""}, +		{"farming:string", "farming:string", ""}, +		{"farming:string", "farming:string", ""}, +	} +}) + +-- Bucket of Cactus Pulp +minetest.register_craftitem("ethereal:bucket_cactus", { +	description = "Bucket of Cactus Pulp", +	inventory_image = "bucket_cactus.png", +	stack_max = 1, +	on_use = minetest.item_eat(2, "bucket:bucket_empty"), +}) + +minetest.register_craft({ +	output = "ethereal:bucket_cactus", +	type = shapeless, +	recipe = { +		{"bucket:bucket_empty","default:cactus"}, +	} +}) + +-- Palm Wax +minetest.register_craftitem("ethereal:palm_wax", { +	description = "Palm Wax", +	inventory_image = "palm_wax.png", +}) + +minetest.register_craft({ +	type = "cooking", +	cooktime = 10, +	output = "ethereal:palm_wax", +	recipe = "ethereal:palmleaves" +}) + +-- Candle from Wax and String/Cotton +minetest.register_node("ethereal:candle", { +	description = "Candle", +	drawtype = "plantlike", +	inventory_image = "candle_static.png", +	tiles = { +		{name="candle.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.0}}, +	},	 +	paramtype = "light", +	light_source = LIGHT_MAX-3, +	sunlight_propagates = true, +	walkable = false, +	groups = {dig_immediate=3, attached_node=1}, +	sounds = default.node_sound_defaults(), +	selection_box = { +		type = "fixed", +		fixed = { -0.15, -0.5, -0.15, 0.15, 0.2, 0.15 }, +	}, +}) + +minetest.register_craft({ +	output = "ethereal:candle 6", +	recipe = { +		{"","farming:cotton"}, +		{"","ethereal:palm_wax"}, +		{"","ethereal:palm_wax"}, +	} +}) diff --git a/plantpack.lua b/plantpack.lua new file mode 100644 index 0000000..830671d --- /dev/null +++ b/plantpack.lua @@ -0,0 +1,128 @@ + +--= Register Biome Decoration Using Plants Mega Pack Lite + +--= Desert Biome + +-- Cactus + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"default:desert_sand", "default:sandstone"}, +	sidelen = 16, +	fill_ratio = 0.005, +	biomes = {"desert", "desertstone"}, +	decoration = {"bakedclay:cactus_echinocereus", "bakedclay:cactus_matucana", "bakedclay:cactus_baseball", "bakedclay:cactus_golden"}, +}) + +-- Desert Plants + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"default:desert_sand", "default:sandstone", "default:sand"}, +	sidelen = 16, +	fill_ratio = 0.003, +	biomes = {"desert", "desertstone"}, +	decoration = {"bakedclay:desert_kangaroo", "bakedclay:desert_brittle", "bakedclay:desert_ocotillo", "bakedclay:desert_whitesage"}, +}) + +--=  Prairie Biome + +-- Grass + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"ethereal:prairie_dirt", "ethereal:green_dirt"}, +	sidelen = 16, +	fill_ratio = 0.005, +	biomes = {"prairie", "grassy", "grassytwo"}, +	decoration = {"bakedclay:grass_prairie", "bakedclay:grass_cord", "bakedclay:grass_wheatgrass", "bakedclay:desert_whitesage"}, +}) + +-- Flowers + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"ethereal:prairie_grass", "ethereal:green_dirt", "ethereal:grove_dirt", "ethereal:bamboo_dirt"}, +	sidelen = 16, +	fill_ratio = 0.005, +	biomes = {"prairie", "grassy", "grassytwo", "bamboo"}, +	decoration = {"bakedclay:flower_jacobsladder", "bakedclay:flower_thistle", "bakedclay:flower_wildcarrot"}, +}) + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"ethereal:prairie_grass", "ethereal:green_dirt", "ethereal:grove_dirt"}, +	sidelen = 16, +	fill_ratio = 0.005, +	biomes = {"prairie", "grassy", "grassytwo", "grove"}, +	decoration = {"bakedclay:flower_delphinium", "bakedclay:flower_celosia", "bakedclay:flower_daisy", "bakedclay:flower_bluerose"}, +}) + +--= Shrubs + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"ethereal:prairie_grass", "ethereal:green_dirt", "ethereal:grove_dirt", "ethereal:jungle_grass", "ethereal:gray_dirt"}, +	sidelen = 16, +	fill_ratio = 0.005, +	biomes = {"prairie", "grassy", "grassytwo", "grove", "junglee", "grayness", "jumble"}, +	decoration = {"bakedclay:shrub_kerria", "bakedclay:shrub_spicebush"}, +}) + +--= Jungle Biome + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"ethereal:jungle_dirt", "ethereal:green_dirt"}, +	sidelen = 16, +	fill_ratio = 0.007, +	biomes = {"junglee", "jumble"}, +	decoration = {"bakedclay:rainforest_guzmania", "bakedclay:rainforest_devil", "bakedclay:rainforest_lazarus", "bakedclay:rainforest_lollipop", "bakedclay:mushroom_woolly"}, +}) + +--= Cold Biomes + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"default:dirt_with_snow", "ethereal:cold_dirt", "ethereal:gray_dirt"}, +	sidelen = 16, +	fill_ratio = 0.005, +	biomes = {"snowy", "alpine", "grayness"}, +	decoration = {"bakedclay:mountain_edelweiss", "bakedclay:mountain_armeria", "bakedclay:mountain_bellflower", "bakedclay:mountain_willowherb", "bakedclay:mountain_bistort"}, + +}) + +--= Mushroom Biome + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"ethereal:mushroom_dirt"}, +	sidelen = 16, +	fill_ratio = 0.005, +	biomes = {"mushroom"}, +	decoration = {"bakedclay:mushroom_powderpuff", "bakedclay:mushroom_chanterelle", "bakedclay:mushroom_parasol"}, +}) + +--= Lakeside + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"default:sand", "default:green_dirt"}, +	sidelen = 16, +	fill_ratio = 0.015, +	biomes = {"sandclay", "lake", "grassy", "grassytwo", "jumble"}, +	decoration = {"bakedclay:wetlands_cattails", "bakedclay:wetlands_pickerel", "bakedclay:wetlands_mannagrass", "bakedclay:wetlands_turtle"}, +	spawn_by = "default:water_source", +	num_spawn_by = 1, +}) + +--= Harsh Biomes + +minetest.register_decoration({ +	deco_type = "simple", +	place_on = {"ethereal:mushroom_dirt", "ethereal:green_dirt", "ethereal:gray_dirt", "ethereal:cold_dirt", "ethereal:dirt_with_snow", "ethereal:jungle_dirt", "ethereal:prairie_dirt", "ethereal:grove_dirt", "ethereal:dry_dirt", "ethereal:fiery_dirt", "default:sand", "default:desert_sand", "bakedclay:red", "ethereal:bamboo_dirt"}, +	sidelen = 16, +	fill_ratio = 0.004, +	biomes = {"mushroom", "prairie", "grayness", "plains", "desert", "lake", "junglee", "grassy", "grassytwo", "jumble", "snowy", "alpine", "fiery", "mesa", "bamboo"}, +	decoration = {"bakedclay:spooky_thornbush", "bakedclay:spooky_baneberry"}, +}) diff --git a/sapling.lua b/sapling.lua new file mode 100644 index 0000000..addc5af --- /dev/null +++ b/sapling.lua @@ -0,0 +1,91 @@ +-- Function to Register Saplings +ethereal.register_sapling = function( sapling_node_name, sapling_descr, sapling_texture ) + +	-- if the sapling does not exist yet, create a node for it +	if( not( minetest.registered_nodes[ sapling_node_name ] )) then +		minetest.register_node( sapling_node_name, { +			description = sapling_descr, +			drawtype = "plantlike", +			visual_scale = 1.0, +			tiles = {sapling_texture}, +			inventory_image = sapling_texture, +			wield_image = sapling_texture, +			paramtype = "light", +			sunlight_propagates = true, +			walkable = false, +			selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, +			groups = {snappy=2,dig_immediate=3,flammable=2,ethereal_sapling=1,attached_node=1}, +			sounds = default.node_sound_defaults(), +		}) +	end + +end + +-- Register Saplings +ethereal.register_sapling( "ethereal:willow_sapling", "Willow Sapling", "willow_sapling.png" ) +ethereal.register_sapling( "ethereal:yellow_tree_sapling", "Healing Tree Sapling", "yellow_tree_sapling.png" ) +ethereal.register_sapling( "ethereal:tree_sapling", "Tree Sapling", "ethereal_tree_sapling.png" ) +ethereal.register_sapling( "ethereal:jungle_tree_sapling","Jungletree Sapling", "ethereal_jungle_tree_sapling.png" ) +ethereal.register_sapling( "ethereal:pine_tree_sapling", "Pine Sapling", "ethereal_pine_tree_sapling.png" ) +ethereal.register_sapling( "ethereal:big_tree_sapling", "Big Tree Sapling", "ethereal_big_tree_sapling.png" ) +ethereal.register_sapling( "ethereal:banana_tree_sapling", "Banana Tree Sapling", "banana_tree_sapling.png" ) +ethereal.register_sapling( "ethereal:frost_tree_sapling", "Frost Sapling", "ethereal_frost_tree_sapling.png" ) +ethereal.register_sapling( "ethereal:gray_tree_sapling", "Gray Sapling", "ethereal_gray_tree_sapling.png" ) +ethereal.register_sapling( "ethereal:mushroom_sapling", "Mushroom Sapling", "ethereal_mushroom_sapling.png" ) +ethereal.register_sapling( "ethereal:palm_sapling", "Palm Sapling", "moretrees_palm_sapling.png" ) +ethereal.register_sapling( "ethereal:redwood_sapling", "Redwood Sapling", "redwood_sapling.png" ) +ethereal.register_sapling( "ethereal:orange_tree_sapling", "Orange Tree Sapling", "orange_tree_sapling.png" ) +ethereal.register_sapling( "ethereal:acacia_sapling", "Acacia Sapling", "moretrees_acacia_sapling.png" ) + + +ethereal.place_tree = function (pos, ofx, ofz, schem) +	-- Remove Sapling and Place Tree Schematic +	minetest.env:set_node(pos, {name="air"}) +	pos.x = pos.x - ofx +	pos.z = pos.z - ofz +	minetest.place_schematic(pos, minetest.get_modpath("ethereal").."/schematics/"..schem..".mts", "0", {}, false ); +end + +-- Grow saplings +minetest.register_abm({ +	nodenames = {"group:ethereal_sapling"}, +	interval = 20, +	chance = 25, +	action = function(pos, node) + +		local under =  minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name; + +		-- Check if Sapling is growing on correct substrate +		if (node.name == "ethereal:yellow_tree_sapling" and under == "default:dirt_with_snow") then +			ethereal.place_tree(pos, 4, 4, "yellowtree") +		elseif (node.name == "ethereal:tree_sapling" and under == "ethereal:green_dirt") then +			ethereal.place_tree(pos, 2, 2, "tree") +		elseif (node.name == "ethereal:jungle_tree_sapling" and under == "ethereal:jungle_dirt") then +			ethereal.place_tree(pos, 6, 6, "jungletree") +		elseif (node.name == "ethereal:pine_tree_sapling" and under == "ethereal:cold_dirt") then +			ethereal.place_tree(pos, 3, 3, "pinetree") +		elseif (node.name == "ethereal:big_tree_sapling" and under == "ethereal:green_dirt") then +			ethereal.place_tree(pos, 4, 4, "bigtree") +		elseif (node.name == "ethereal:banana_tree_sapling" and under == "ethereal:grove_dirt") then +			ethereal.place_tree(pos, 3, 3, "bananatree") +		elseif (node.name == "ethereal:frost_tree_sapling" and under == "ethereal:crystal_dirt") then +			ethereal.place_tree(pos, 4, 4, "frosttrees") +		elseif (node.name == "ethereal:gray_tree_sapling" and under == "ethereal:gray_dirt") then +			ethereal.place_tree(pos, 2, 2, "graytrees") +		elseif (node.name == "ethereal:mushroom_sapling" and under == "ethereal:mushroom_dirt") then +			ethereal.place_tree(pos, 4, 4, "mushroomone") +		elseif (node.name == "ethereal:palm_sapling" and under == "default:sand") then +			ethereal.place_tree(pos, 4, 4, "palmtree") +		elseif (node.name == "ethereal:willow_sapling" and under == "ethereal:gray_dirt") then +			ethereal.place_tree(pos, 5, 5, "willow") +		elseif (node.name == "ethereal:redwood_sapling" and under == "bakedclay:red") then +			ethereal.place_tree(pos, 9, 9, "redwood") +		elseif (node.name == "ethereal:orange_tree_sapling" and under == "ethereal:prairie_dirt") then +			ethereal.place_tree(pos, 1, 1, "orangetree") +		elseif (node.name == "ethereal:acacia_sapling" and under == "default:desert_sand") then +			ethereal.place_tree(pos, 5, 5, "acaciatree") + +		end + +	end, +}) diff --git a/schematics/acaciatree.mts b/schematics/acaciatree.mtsBinary files differ new file mode 100644 index 0000000..f89a22b --- /dev/null +++ b/schematics/acaciatree.mts diff --git a/schematics/bananatree.mts b/schematics/bananatree.mtsBinary files differ new file mode 100644 index 0000000..2149d98 --- /dev/null +++ b/schematics/bananatree.mts diff --git a/schematics/bigtree.mts b/schematics/bigtree.mtsBinary files differ new file mode 100644 index 0000000..61446fd --- /dev/null +++ b/schematics/bigtree.mts diff --git a/schematics/deadtree.mts b/schematics/deadtree.mtsBinary files differ new file mode 100644 index 0000000..005b79d --- /dev/null +++ b/schematics/deadtree.mts diff --git a/schematics/frosttrees.mts b/schematics/frosttrees.mtsBinary files differ new file mode 100644 index 0000000..50499bc --- /dev/null +++ b/schematics/frosttrees.mts diff --git a/schematics/graytrees.mts b/schematics/graytrees.mtsBinary files differ new file mode 100644 index 0000000..347b29c --- /dev/null +++ b/schematics/graytrees.mts diff --git a/schematics/jungletree.mts b/schematics/jungletree.mtsBinary files differ new file mode 100644 index 0000000..a4aaa01 --- /dev/null +++ b/schematics/jungletree.mts diff --git a/schematics/mushroomone.mts b/schematics/mushroomone.mtsBinary files differ new file mode 100644 index 0000000..24c6868 --- /dev/null +++ b/schematics/mushroomone.mts diff --git a/schematics/orangetree.mts b/schematics/orangetree.mtsBinary files differ new file mode 100644 index 0000000..4536dd0 --- /dev/null +++ b/schematics/orangetree.mts diff --git a/schematics/palmtree.mts b/schematics/palmtree.mtsBinary files differ new file mode 100644 index 0000000..7408398 --- /dev/null +++ b/schematics/palmtree.mts diff --git a/schematics/pinetree.mts b/schematics/pinetree.mtsBinary files differ new file mode 100644 index 0000000..d25b903 --- /dev/null +++ b/schematics/pinetree.mts diff --git a/schematics/rail.mts b/schematics/rail.mtsBinary files differ new file mode 100644 index 0000000..7e6f65b --- /dev/null +++ b/schematics/rail.mts diff --git a/schematics/railtwo.mts b/schematics/railtwo.mtsBinary files differ new file mode 100644 index 0000000..c4351d2 --- /dev/null +++ b/schematics/railtwo.mts diff --git a/schematics/redwood.mts b/schematics/redwood.mtsBinary files differ new file mode 100644 index 0000000..32a164f --- /dev/null +++ b/schematics/redwood.mts diff --git a/schematics/tree.mts b/schematics/tree.mtsBinary files differ new file mode 100644 index 0000000..4ba4898 --- /dev/null +++ b/schematics/tree.mts diff --git a/schematics/volcanol.mts b/schematics/volcanol.mtsBinary files differ new file mode 100644 index 0000000..93f0104 --- /dev/null +++ b/schematics/volcanol.mts diff --git a/schematics/volcanom.mts b/schematics/volcanom.mtsBinary files differ new file mode 100644 index 0000000..e618927 --- /dev/null +++ b/schematics/volcanom.mts diff --git a/schematics/willow.mts b/schematics/willow.mtsBinary files differ new file mode 100644 index 0000000..35557a8 --- /dev/null +++ b/schematics/willow.mts diff --git a/schematics/yellowtree.mts b/schematics/yellowtree.mtsBinary files differ new file mode 100644 index 0000000..0c482e5 --- /dev/null +++ b/schematics/yellowtree.mts diff --git a/sealife.lua b/sealife.lua new file mode 100644 index 0000000..7d31a38 --- /dev/null +++ b/sealife.lua @@ -0,0 +1,162 @@ +-- Seaweed +minetest.register_node("ethereal:seaweed", { +	description = "Seaweed", +	drawtype = "plantlike", +	tiles = {"seaweed.png"}, +	inventory_image = "seaweed.png", +	wield_image = "seaweed.png", +	paramtype = "light", +	walkable = false, +	climbable = true, +	drowning = 1, +	selection_box = {type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}}, +	post_effect_color = {a=64, r=100, g=100, b=200}, +	groups = {snappy=3}, +	on_use = minetest.item_eat(1), +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft( { +	type = "shapeless", +	output = "dye:dark_green 3", +	recipe = {"ethereal:seaweed",}, +}) + +-- Blue Coral +minetest.register_node("ethereal:coral2", { +	description = "Blue Coral", +	drawtype = "plantlike", +	tiles = {"coral2.png"}, +	inventory_image = "coral2.png", +	paramtype = "light", +	selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, +	light_source = 3, +	groups = {snappy=3}, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft( { +	type = "shapeless", +	output = "dye:cyan 3", +	recipe = {"ethereal:coral2",}, +}) + +-- Orange Coral +minetest.register_node("ethereal:coral3", { +	description = "Orange Coral", +	drawtype = "plantlike", +	tiles = {"coral3.png"}, +	inventory_image = "coral3.png", +	paramtype = "light", +	selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, +	light_source = 3, +	groups = {snappy=3}, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft( { +	type = "shapeless", +	output = "dye:orange 3", +	recipe = {"ethereal:coral3",}, +}) + +-- Pink Coral +minetest.register_node("ethereal:coral4", { +	description = "Pink Coral", +	drawtype = "plantlike", +	tiles = {"coral4.png"}, +	inventory_image = "coral4.png", +	paramtype = "light", +	selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, +	light_source = 3, +	groups = {snappy=3}, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft( { +	type = "shapeless", +	output = "dye:pink 3", +	recipe = {"ethereal:coral4",}, +}) + +-- Green Coral +minetest.register_node("ethereal:coral5", { +	description = "Green Coral", +	drawtype = "plantlike", +	tiles = {"coral5.png"}, +	inventory_image = "coral5.png", +	paramtype = "light", +	selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, +	light_source = 3, +	groups = {snappy=3}, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft( { +	type = "shapeless", +	output = "dye:green 3", +	recipe = {"ethereal:coral5",}, +}) + +-- Undersea Sand +minetest.register_node("ethereal:sandy", { +	description = "Sandy", +	tiles = {"default_sand.png"}, +	is_ground_content = true, +	groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, +	drop = "default:sand", +	sounds = default.node_sound_sand_defaults(), +}) + +-- Register Undersea Sand +minetest.register_ore({ +	ore_type       = "scatter", +	ore            = "ethereal:sandy", +	wherein        = "default:sand", +	clust_scarcity = 10*10*10, +	clust_num_ores = 24, +	clust_size     = 4, +	height_max     = -14, +	height_min     = -100, +}) + +-- Randomly generate Coral or Seaweed and have Seaweed grow up to 10 high +minetest.register_abm({ +	nodenames = {"ethereal:sandy"}, +	neighbors = {"group:water"}, +	interval = 15, +	chance = 10, + +	action = function(pos, node) + +		sel = math.random(1,5) +		if sel == 1 or minetest.get_node(pos).name == "ethereal:seaweed" then + +			local height = 0 + +			while minetest.get_node(pos).name == "ethereal:seaweed" +			or minetest.get_node(pos).name == "ethereal:sandy" +			and height < 14 do +				height = height + 1 +				pos.y = pos.y + 1 +			end + +			if height < 14 and pos.y < 0 then +				if minetest.get_node(pos).name == "default:water_source" then +					minetest.set_node(pos, {name="ethereal:seaweed"}) +--					print ("GOING UP") +				end +			end + +		else + +			pos.y = pos.y + 1 + +			if minetest.get_node(pos).name == "default:water_source" then +				minetest.set_node(pos, {name="ethereal:coral"..sel}) +--				print ("CORAL ", sel) +			end + +		end +	end, +}) diff --git a/stairs.lua b/stairs.lua new file mode 100644 index 0000000..b086658 --- /dev/null +++ b/stairs.lua @@ -0,0 +1,102 @@ +-- Register Stairs & Slabs + +stairs.register_stair_and_slab("crystal_block", "ethereal:crystal_block", +	{cracky=1, level=2, not_in_craft_guide=1}, +	{"crystal_block.png"}, +	"Crystal Block Stair", +	"Crystal Block Slab", +	default.node_sound_glass_defaults()) + +stairs.register_stair_and_slab("icebrick", "ethereal:icebrick", +	{crumbly=3, melts = 1, not_in_craft_guide=1}, +	{"brick_ice.png"}, +	"Ice Brick Stair", +	"Ice Brick Slab", +	default.node_sound_glass_defaults()) +		 +stairs.register_stair_and_slab("snowbrick", "ethereal:snowbrick", +	{crumbly=3, melts = 1, not_in_craft_guide=1}, +	{"brick_snow.png"}, +	"Snow Brick Stair", +	"Snow Brick Slab", +	default.node_sound_dirt_defaults({ +		footstep = {name="default_snow_footstep", gain=0.25}, +		dug = {name="default_snow_footstep", gain=0.75}, +	})) + +stairs.register_stair_and_slab("dry_dirt", "ethereal:dry_dirt", +	{crumbly=3, not_in_craft_guide=1}, +	{"ethereal_dry_dirt.png"}, +	"Dry Dirt Stair", +	"Dry Dirt Slab", +	default.node_sound_dirt_defaults()) + +stairs.register_stair_and_slab("mushroom_trunk", "ethereal:mushroom_trunk", +	{choppy=2,oddly_breakable_by_hand=1,flammable=2, not_in_craft_guide=1}, +	{"mushroom_trunk.png"}, +	"Mushroom Trunk Stair", +	"Mushroom Trunk Slab", +	default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("mushroom", "ethereal:mushroom", +	{choppy=2,oddly_breakable_by_hand=1,flammable=2, not_in_craft_guide=1}, +	{"mushroom_block.png"}, +	"Mushroom Top Stair", +	"Mushroom Top Slab", +	default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("frost_wood", "ethereal:frost_wood", +	{choppy=2,oddly_breakable_by_hand=1,put_out_fire=1, not_in_craft_guide=1}, +	{"frost_wood.png"}, +	"Frost Wood Stair", +	"Frost Wood Slab", +	default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("yellow_wood", "ethereal:yellow_wood", +	{choppy=2,oddly_breakable_by_hand=1,put_out_fire=1, not_in_craft_guide=1}, +	{"yellow_wood.png"}, +	"Healing Wood Stair", +	"Healing Wood Slab", +	default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("palm_wood", "ethereal:palm_wood", +	{choppy=2,oddly_breakable_by_hand=1,flammable=3, not_in_craft_guide=1}, +	{"moretrees_palm_wood.png"}, +	"Palm Wood Stair", +	"Palm Wood Slab", +	default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("banana_wood", "ethereal:banana_wood", +	{choppy=2,oddly_breakable_by_hand=1,flammable=3, not_in_craft_guide=1}, +	{"banana_wood.png"}, +	"Banana Wood Stair", +	"Banana Wood Slab", +	default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("willow_wood", "ethereal:willow_wood", +	{choppy=2,oddly_breakable_by_hand=1,flammable=3, not_in_craft_guide=1}, +	{"willow_wood.png"}, +	"Willow Wood Stair", +	"Willow Wood Slab", +	default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("redwood_wood", "ethereal:redwood_wood", +	{choppy=2,oddly_breakable_by_hand=1,flammable=3, not_in_craft_guide=1}, +	{"redwood_wood.png"}, +	"Redwood stair", +	"Redwood Slab", +	default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("acacia_wood", "ethereal:acacia_wood", +	{choppy=2,oddly_breakable_by_hand=1,flammable=3, not_in_craft_guide=1}, +	{"moretrees_acacia_wood.png"}, +	"Acacia Wood Stair", +	"Acacia Wood Slab", +	default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("obsidian_brick", "ethereal:obsidian_brick", +	{cracky=1,level=3, not_in_craft_guide=1}, +	{"obsidian_brick.png"}, +	"Obsidian Brick Stair", +	"Obsidian Brick Slab", +	default.node_sound_stone_defaults()) diff --git a/strawberry.lua b/strawberry.lua new file mode 100644 index 0000000..0236e90 --- /dev/null +++ b/strawberry.lua @@ -0,0 +1,181 @@ +-- Strawberry (can also be planted as seed) +minetest.register_craftitem("ethereal:strawberry", { +	description = "Strawberry", +	inventory_image = "strawberry.png", +	on_use = minetest.item_eat(1), +	on_place = function(itemstack, placer, pointed_thing) +		return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:strawberry_1") +	end, +}) + +-- Define Strawberry Bush growth stages +minetest.register_node("ethereal:strawberry_1", { +	drawtype = "plantlike", +	tiles = {"strawberry_1.png"}, +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	buildable_to = true, +	drop = 	"", +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, +	groups = {snappy=3,flammable=2,plant=1,not_in_creative_inventory=1,attached_node=1,strawberry=1,growing=1}, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("ethereal:strawberry_2", { +	drawtype = "plantlike", +	tiles = {"strawberry_2.png"}, +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	buildable_to = true, +	drop = 	"", +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, +	groups = {snappy=3,flammable=2,plant=1,not_in_creative_inventory=1,attached_node=1,strawberry=2,growing=1}, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("ethereal:strawberry_3", { +	drawtype = "plantlike", +	tiles = {"strawberry_3.png"}, +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	buildable_to = true, +	drop = 	"", +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, +	groups = {snappy=3,flammable=2,plant=1,not_in_creative_inventory=1,attached_node=1,strawberry=3,growing=1}, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("ethereal:strawberry_4", { +	drawtype = "plantlike", +	tiles = {"strawberry_4.png"}, +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	buildable_to = true, +	drop = 	"", +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, +	groups = {snappy=3,flammable=2,plant=1,not_in_creative_inventory=1,attached_node=1,strawberry=4,growing=1}, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("ethereal:strawberry_5", { +	drawtype = "plantlike", +	tiles = {"strawberry_5.png"}, +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	buildable_to = true, +	drop = 	"", +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, +	groups = {snappy=3,flammable=2,plant=1,not_in_creative_inventory=1,attached_node=1,strawberry=5,growing=1}, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("ethereal:strawberry_6", { +	drawtype = "plantlike", +	tiles = {"strawberry_6.png"}, +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	buildable_to = true, +	drop = 	{ +		items = { +			{items = {"ethereal:strawberry 1"},rarity=2}, +			{items = {"ethereal:strawberry 2"},rarity=3}, +		} +	}, +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, +	groups = {snappy=3,flammable=2,plant=1,not_in_creative_inventory=1,attached_node=1,strawberry=6,growing=1}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Mapgen places this stage on map so will use is_ground_content=true +minetest.register_node("ethereal:strawberry_7", { +	drawtype = "plantlike", +	tiles = {"strawberry_7.png"}, +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	buildable_to = true, +	is_ground_content = true, +	drop = 	{ +		items = { +			{items = {"ethereal:strawberry 1"},rarity=1}, +			{items = {"ethereal:strawberry 2"},rarity=3}, +		} +	}, +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, +	groups = {snappy=3,flammable=2,plant=1,not_in_creative_inventory=1,attached_node=1,strawberry=7,growing=1}, +	sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("ethereal:strawberry_8", { +	drawtype = "plantlike", +	tiles = {"strawberry_8.png"}, +	paramtype = "light", +	sunlight_propagates = true, +	waving = 1, +	walkable = false, +	buildable_to = true, +	drop = 	{ +		items = { +			{items = {"ethereal:strawberry 2"},rarity=1}, +			{items = {"ethereal:strawberry 3"},rarity=3}, +		} +	}, +	selection_box = {type = "fixed",fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, +	groups = {snappy=3,flammable=2,plant=1,not_in_creative_inventory=1,attached_node=1,strawberry=8}, +	sounds = default.node_sound_leaves_defaults(), +}) + +-- Register Alias for backward compatibility with already generated Ethereal worlds +minetest.register_alias("ethereal:strawberry_bush", "ethereal:strawberry_7") +minetest.register_alias("ethereal:seed_strawberry", "ethereal:strawberry") + +-- Amb for growing Strawberry Bush +if farming.mod ~= "redo" then + +minetest.register_abm({ +	nodenames = {"group:strawberry"}, +	neighbors = {"farming:soil_wet"}, +	interval = 50, +	chance = 3, +	action = function(pos, node) +		-- return if already full grown +		if minetest.get_item_group(node.name, "strawberry") == 8 then +			return +		end +		 +		-- check if on wet soil +		pos.y = pos.y-1 +		local n = minetest.get_node(pos) +		if minetest.get_item_group(n.name, "soil") < 3 then +			return +		end +		pos.y = pos.y+1 +		 +		-- check light +		if not minetest.get_node_light(pos) then +			return +		end +		if minetest.get_node_light(pos) < 13 then +			return +		end +		 +		-- grow +		local height = minetest.get_item_group(node.name, "strawberry") + 1 +		minetest.set_node(pos, {name="ethereal:strawberry_"..height}) +	end +}) + +end diff --git a/textures/baked_clay_orange.png b/textures/baked_clay_orange.pngBinary files differ new file mode 100644 index 0000000..847b793 --- /dev/null +++ b/textures/baked_clay_orange.png diff --git a/textures/baked_clay_red.png b/textures/baked_clay_red.pngBinary files differ new file mode 100644 index 0000000..e716218 --- /dev/null +++ b/textures/baked_clay_red.png diff --git a/textures/bamboo.png b/textures/bamboo.pngBinary files differ new file mode 100644 index 0000000..f02dd53 --- /dev/null +++ b/textures/bamboo.png diff --git a/textures/bamboo_floor.png b/textures/bamboo_floor.pngBinary files differ new file mode 100644 index 0000000..1a83cb9 --- /dev/null +++ b/textures/bamboo_floor.png diff --git a/textures/bamboo_sprout.png b/textures/bamboo_sprout.pngBinary files differ new file mode 100644 index 0000000..1b13327 --- /dev/null +++ b/textures/bamboo_sprout.png diff --git a/textures/banana_bread.png b/textures/banana_bread.pngBinary files differ new file mode 100644 index 0000000..d309ff8 --- /dev/null +++ b/textures/banana_bread.png diff --git a/textures/banana_dough.png b/textures/banana_dough.pngBinary files differ new file mode 100644 index 0000000..645f7ed --- /dev/null +++ b/textures/banana_dough.png diff --git a/textures/banana_leaf.png b/textures/banana_leaf.pngBinary files differ new file mode 100644 index 0000000..0d744ec --- /dev/null +++ b/textures/banana_leaf.png diff --git a/textures/banana_single.png b/textures/banana_single.pngBinary files differ new file mode 100644 index 0000000..b15ed2f --- /dev/null +++ b/textures/banana_single.png diff --git a/textures/banana_tree_sapling.png b/textures/banana_tree_sapling.pngBinary files differ new file mode 100644 index 0000000..1c3c826 --- /dev/null +++ b/textures/banana_tree_sapling.png diff --git a/textures/banana_trunk.png b/textures/banana_trunk.pngBinary files differ new file mode 100644 index 0000000..12888ca --- /dev/null +++ b/textures/banana_trunk.png diff --git a/textures/banana_trunk_top.png b/textures/banana_trunk_top.pngBinary files differ new file mode 100644 index 0000000..7767962 --- /dev/null +++ b/textures/banana_trunk_top.png diff --git a/textures/banana_wood.png b/textures/banana_wood.pngBinary files differ new file mode 100644 index 0000000..ef3b16e --- /dev/null +++ b/textures/banana_wood.png diff --git a/textures/bowl.png b/textures/bowl.pngBinary files differ new file mode 100644 index 0000000..486bd7b --- /dev/null +++ b/textures/bowl.png diff --git a/textures/brick_ice.png b/textures/brick_ice.pngBinary files differ new file mode 100644 index 0000000..d1bb034 --- /dev/null +++ b/textures/brick_ice.png diff --git a/textures/brick_snow.png b/textures/brick_snow.pngBinary files differ new file mode 100644 index 0000000..4d76e05 --- /dev/null +++ b/textures/brick_snow.png diff --git a/textures/bucket_cactus.png b/textures/bucket_cactus.pngBinary files differ new file mode 100644 index 0000000..520707b --- /dev/null +++ b/textures/bucket_cactus.png diff --git a/textures/bucket_cactus.png_hd b/textures/bucket_cactus.png_hdBinary files differ new file mode 100644 index 0000000..696277b --- /dev/null +++ b/textures/bucket_cactus.png_hd diff --git a/textures/candle.png b/textures/candle.pngBinary files differ new file mode 100644 index 0000000..0ed21b4 --- /dev/null +++ b/textures/candle.png diff --git a/textures/candle_static.png b/textures/candle_static.pngBinary files differ new file mode 100644 index 0000000..b7c7157 --- /dev/null +++ b/textures/candle_static.png diff --git a/textures/charcoal_lump.png b/textures/charcoal_lump.pngBinary files differ new file mode 100644 index 0000000..44caf80 --- /dev/null +++ b/textures/charcoal_lump.png diff --git a/textures/coral2.png b/textures/coral2.pngBinary files differ new file mode 100644 index 0000000..bee9561 --- /dev/null +++ b/textures/coral2.png diff --git a/textures/coral3.png b/textures/coral3.pngBinary files differ new file mode 100644 index 0000000..15d31ac --- /dev/null +++ b/textures/coral3.png diff --git a/textures/coral4.png b/textures/coral4.pngBinary files differ new file mode 100644 index 0000000..4fb343c --- /dev/null +++ b/textures/coral4.png diff --git a/textures/coral5.png b/textures/coral5.pngBinary files differ new file mode 100644 index 0000000..c602bce --- /dev/null +++ b/textures/coral5.png diff --git a/textures/crystal_axe.png b/textures/crystal_axe.pngBinary files differ new file mode 100644 index 0000000..747ead4 --- /dev/null +++ b/textures/crystal_axe.png diff --git a/textures/crystal_block.png b/textures/crystal_block.pngBinary files differ new file mode 100644 index 0000000..0057ce9 --- /dev/null +++ b/textures/crystal_block.png diff --git a/textures/crystal_gilly_staff.png b/textures/crystal_gilly_staff.pngBinary files differ new file mode 100644 index 0000000..33841c5 --- /dev/null +++ b/textures/crystal_gilly_staff.png diff --git a/textures/crystal_ingot.png b/textures/crystal_ingot.pngBinary files differ new file mode 100644 index 0000000..ce14a10 --- /dev/null +++ b/textures/crystal_ingot.png diff --git a/textures/crystal_pick.png b/textures/crystal_pick.pngBinary files differ new file mode 100644 index 0000000..0ebd7e7 --- /dev/null +++ b/textures/crystal_pick.png diff --git a/textures/crystal_shovel.png b/textures/crystal_shovel.pngBinary files differ new file mode 100644 index 0000000..3448deb --- /dev/null +++ b/textures/crystal_shovel.png diff --git a/textures/crystal_spike.png b/textures/crystal_spike.pngBinary files differ new file mode 100644 index 0000000..61b4d88 --- /dev/null +++ b/textures/crystal_spike.png diff --git a/textures/crystal_sword.png b/textures/crystal_sword.pngBinary files differ new file mode 100644 index 0000000..70dfdbf --- /dev/null +++ b/textures/crystal_sword.png diff --git a/textures/default_apple_gold.png b/textures/default_apple_gold.pngBinary files differ new file mode 100644 index 0000000..fcd3224 --- /dev/null +++ b/textures/default_apple_gold.png diff --git a/textures/default_fence_overlay.png b/textures/default_fence_overlay.pngBinary files differ new file mode 100644 index 0000000..780e736 --- /dev/null +++ b/textures/default_fence_overlay.png diff --git a/textures/default_gate_overlay.png b/textures/default_gate_overlay.pngBinary files differ new file mode 100644 index 0000000..008c0ec --- /dev/null +++ b/textures/default_gate_overlay.png diff --git a/textures/ethereal_big_tree_sapling.png b/textures/ethereal_big_tree_sapling.pngBinary files differ new file mode 100644 index 0000000..5ca6210 --- /dev/null +++ b/textures/ethereal_big_tree_sapling.png diff --git a/textures/ethereal_crystalgrass.png b/textures/ethereal_crystalgrass.pngBinary files differ new file mode 100644 index 0000000..c38397c --- /dev/null +++ b/textures/ethereal_crystalgrass.png diff --git a/textures/ethereal_dry_dirt.png b/textures/ethereal_dry_dirt.pngBinary files differ new file mode 100644 index 0000000..626e7ef --- /dev/null +++ b/textures/ethereal_dry_dirt.png diff --git a/textures/ethereal_dry_shrub.png b/textures/ethereal_dry_shrub.pngBinary files differ new file mode 100644 index 0000000..88bf2c5 --- /dev/null +++ b/textures/ethereal_dry_shrub.png diff --git a/textures/ethereal_frost_leaves.png b/textures/ethereal_frost_leaves.pngBinary files differ new file mode 100644 index 0000000..57e8d8a --- /dev/null +++ b/textures/ethereal_frost_leaves.png diff --git a/textures/ethereal_frost_tree.png b/textures/ethereal_frost_tree.pngBinary files differ new file mode 100644 index 0000000..fb25466 --- /dev/null +++ b/textures/ethereal_frost_tree.png diff --git a/textures/ethereal_frost_tree_sapling.png b/textures/ethereal_frost_tree_sapling.pngBinary files differ new file mode 100644 index 0000000..793b226 --- /dev/null +++ b/textures/ethereal_frost_tree_sapling.png diff --git a/textures/ethereal_frost_tree_top.png b/textures/ethereal_frost_tree_top.pngBinary files differ new file mode 100644 index 0000000..84f19f0 --- /dev/null +++ b/textures/ethereal_frost_tree_top.png diff --git a/textures/ethereal_grass_bamboo_side.png b/textures/ethereal_grass_bamboo_side.pngBinary files differ new file mode 100644 index 0000000..3a618b5 --- /dev/null +++ b/textures/ethereal_grass_bamboo_side.png diff --git a/textures/ethereal_grass_bamboo_top.png b/textures/ethereal_grass_bamboo_top.pngBinary files differ new file mode 100644 index 0000000..47109b9 --- /dev/null +++ b/textures/ethereal_grass_bamboo_top.png diff --git a/textures/ethereal_grass_cold_side.png b/textures/ethereal_grass_cold_side.pngBinary files differ new file mode 100644 index 0000000..d9d4d2f --- /dev/null +++ b/textures/ethereal_grass_cold_side.png diff --git a/textures/ethereal_grass_cold_top.png b/textures/ethereal_grass_cold_top.pngBinary files differ new file mode 100644 index 0000000..86f92ce --- /dev/null +++ b/textures/ethereal_grass_cold_top.png diff --git a/textures/ethereal_grass_crystal_side.png b/textures/ethereal_grass_crystal_side.pngBinary files differ new file mode 100644 index 0000000..9af3d08 --- /dev/null +++ b/textures/ethereal_grass_crystal_side.png diff --git a/textures/ethereal_grass_crystal_top.png b/textures/ethereal_grass_crystal_top.pngBinary files differ new file mode 100644 index 0000000..a5d8173 --- /dev/null +++ b/textures/ethereal_grass_crystal_top.png diff --git a/textures/ethereal_grass_fiery_side.png b/textures/ethereal_grass_fiery_side.pngBinary files differ new file mode 100644 index 0000000..c522a42 --- /dev/null +++ b/textures/ethereal_grass_fiery_side.png diff --git a/textures/ethereal_grass_fiery_top.png b/textures/ethereal_grass_fiery_top.pngBinary files differ new file mode 100644 index 0000000..dba09a9 --- /dev/null +++ b/textures/ethereal_grass_fiery_top.png diff --git a/textures/ethereal_grass_gray_side.png b/textures/ethereal_grass_gray_side.pngBinary files differ new file mode 100644 index 0000000..294b9c9 --- /dev/null +++ b/textures/ethereal_grass_gray_side.png diff --git a/textures/ethereal_grass_gray_top.png b/textures/ethereal_grass_gray_top.pngBinary files differ new file mode 100644 index 0000000..547b3a4 --- /dev/null +++ b/textures/ethereal_grass_gray_top.png diff --git a/textures/ethereal_grass_grove_side.png b/textures/ethereal_grass_grove_side.pngBinary files differ new file mode 100644 index 0000000..a52e3cf --- /dev/null +++ b/textures/ethereal_grass_grove_side.png diff --git a/textures/ethereal_grass_grove_top.png b/textures/ethereal_grass_grove_top.pngBinary files differ new file mode 100644 index 0000000..b15b5be --- /dev/null +++ b/textures/ethereal_grass_grove_top.png diff --git a/textures/ethereal_grass_jungle_side.png b/textures/ethereal_grass_jungle_side.pngBinary files differ new file mode 100644 index 0000000..1c765ac --- /dev/null +++ b/textures/ethereal_grass_jungle_side.png diff --git a/textures/ethereal_grass_jungle_top.png b/textures/ethereal_grass_jungle_top.pngBinary files differ new file mode 100644 index 0000000..9b3e0a1 --- /dev/null +++ b/textures/ethereal_grass_jungle_top.png diff --git a/textures/ethereal_grass_mushroom_side.png b/textures/ethereal_grass_mushroom_side.pngBinary files differ new file mode 100644 index 0000000..a5adde0 --- /dev/null +++ b/textures/ethereal_grass_mushroom_side.png diff --git a/textures/ethereal_grass_mushroom_top.png b/textures/ethereal_grass_mushroom_top.pngBinary files differ new file mode 100644 index 0000000..90772a7 --- /dev/null +++ b/textures/ethereal_grass_mushroom_top.png diff --git a/textures/ethereal_grass_prairie_side.png b/textures/ethereal_grass_prairie_side.pngBinary files differ new file mode 100644 index 0000000..3398be2 --- /dev/null +++ b/textures/ethereal_grass_prairie_side.png diff --git a/textures/ethereal_grass_prairie_top.png b/textures/ethereal_grass_prairie_top.pngBinary files differ new file mode 100644 index 0000000..b1c227a --- /dev/null +++ b/textures/ethereal_grass_prairie_top.png diff --git a/textures/ethereal_gray_tree_sapling.png b/textures/ethereal_gray_tree_sapling.pngBinary files differ new file mode 100644 index 0000000..e46f05b --- /dev/null +++ b/textures/ethereal_gray_tree_sapling.png diff --git a/textures/ethereal_jungle_tree_sapling.png b/textures/ethereal_jungle_tree_sapling.pngBinary files differ new file mode 100644 index 0000000..c70615f --- /dev/null +++ b/textures/ethereal_jungle_tree_sapling.png diff --git a/textures/ethereal_mushroom_garden_1.png b/textures/ethereal_mushroom_garden_1.pngBinary files differ new file mode 100644 index 0000000..c0d095d --- /dev/null +++ b/textures/ethereal_mushroom_garden_1.png diff --git a/textures/ethereal_mushroom_garden_2.png b/textures/ethereal_mushroom_garden_2.pngBinary files differ new file mode 100644 index 0000000..ea74e0a --- /dev/null +++ b/textures/ethereal_mushroom_garden_2.png diff --git a/textures/ethereal_mushroom_garden_3.png b/textures/ethereal_mushroom_garden_3.pngBinary files differ new file mode 100644 index 0000000..85c797b --- /dev/null +++ b/textures/ethereal_mushroom_garden_3.png diff --git a/textures/ethereal_mushroom_garden_4.png b/textures/ethereal_mushroom_garden_4.pngBinary files differ new file mode 100644 index 0000000..fd06524 --- /dev/null +++ b/textures/ethereal_mushroom_garden_4.png diff --git a/textures/ethereal_mushroom_sapling.png b/textures/ethereal_mushroom_sapling.pngBinary files differ new file mode 100644 index 0000000..3579a8a --- /dev/null +++ b/textures/ethereal_mushroom_sapling.png diff --git a/textures/ethereal_pine_tree_sapling.png b/textures/ethereal_pine_tree_sapling.pngBinary files differ new file mode 100644 index 0000000..3d6c0c1 --- /dev/null +++ b/textures/ethereal_pine_tree_sapling.png diff --git a/textures/ethereal_snowygrass.png b/textures/ethereal_snowygrass.pngBinary files differ new file mode 100644 index 0000000..10374fb --- /dev/null +++ b/textures/ethereal_snowygrass.png diff --git a/textures/ethereal_tree_sapling.png b/textures/ethereal_tree_sapling.pngBinary files differ new file mode 100644 index 0000000..c6c6217 --- /dev/null +++ b/textures/ethereal_tree_sapling.png diff --git a/textures/ethereal_wild_onion_1.png b/textures/ethereal_wild_onion_1.pngBinary files differ new file mode 100644 index 0000000..0132e79 --- /dev/null +++ b/textures/ethereal_wild_onion_1.png diff --git a/textures/ethereal_wild_onion_2.png b/textures/ethereal_wild_onion_2.pngBinary files differ new file mode 100644 index 0000000..a042b3c --- /dev/null +++ b/textures/ethereal_wild_onion_2.png diff --git a/textures/ethereal_wild_onion_3.png b/textures/ethereal_wild_onion_3.pngBinary files differ new file mode 100644 index 0000000..16c515a --- /dev/null +++ b/textures/ethereal_wild_onion_3.png diff --git a/textures/ethereal_wild_onion_4.png b/textures/ethereal_wild_onion_4.pngBinary files differ new file mode 100644 index 0000000..ed8c259 --- /dev/null +++ b/textures/ethereal_wild_onion_4.png diff --git a/textures/ethereal_wild_onion_5.png b/textures/ethereal_wild_onion_5.pngBinary files differ new file mode 100644 index 0000000..5f60e09 --- /dev/null +++ b/textures/ethereal_wild_onion_5.png diff --git a/textures/farming_orange.png b/textures/farming_orange.pngBinary files differ new file mode 100644 index 0000000..8b9ec29 --- /dev/null +++ b/textures/farming_orange.png diff --git a/textures/fern.png b/textures/fern.pngBinary files differ new file mode 100644 index 0000000..4db4f88 --- /dev/null +++ b/textures/fern.png diff --git a/textures/fern_tubers.png b/textures/fern_tubers.pngBinary files differ new file mode 100644 index 0000000..ddc5a22 --- /dev/null +++ b/textures/fern_tubers.png diff --git a/textures/fish_cooked.png b/textures/fish_cooked.pngBinary files differ new file mode 100644 index 0000000..2a330ea --- /dev/null +++ b/textures/fish_cooked.png diff --git a/textures/fish_raw.png b/textures/fish_raw.pngBinary files differ new file mode 100644 index 0000000..9842b58 --- /dev/null +++ b/textures/fish_raw.png diff --git a/textures/fishing_rod.png b/textures/fishing_rod.pngBinary files differ new file mode 100644 index 0000000..371561d --- /dev/null +++ b/textures/fishing_rod.png diff --git a/textures/fishing_rod_baited.png b/textures/fishing_rod_baited.pngBinary files differ new file mode 100644 index 0000000..22989f3 --- /dev/null +++ b/textures/fishing_rod_baited.png diff --git a/textures/fishing_rod_wield.png b/textures/fishing_rod_wield.pngBinary files differ new file mode 100644 index 0000000..5a10cf5 --- /dev/null +++ b/textures/fishing_rod_wield.png diff --git a/textures/frost_wood.png b/textures/frost_wood.pngBinary files differ new file mode 100644 index 0000000..bc8fbe8 --- /dev/null +++ b/textures/frost_wood.png diff --git a/textures/glostone.png b/textures/glostone.pngBinary files differ new file mode 100644 index 0000000..c4e4c28 --- /dev/null +++ b/textures/glostone.png diff --git a/textures/hearty_stew.png b/textures/hearty_stew.pngBinary files differ new file mode 100644 index 0000000..b3ac2c0 --- /dev/null +++ b/textures/hearty_stew.png diff --git a/textures/hearty_stew_cooked.png b/textures/hearty_stew_cooked.pngBinary files differ new file mode 100644 index 0000000..24f20de --- /dev/null +++ b/textures/hearty_stew_cooked.png diff --git a/textures/illumishroom.png b/textures/illumishroom.pngBinary files differ new file mode 100644 index 0000000..9cd5575 --- /dev/null +++ b/textures/illumishroom.png diff --git a/textures/illumishroom2.png b/textures/illumishroom2.pngBinary files differ new file mode 100644 index 0000000..0921c64 --- /dev/null +++ b/textures/illumishroom2.png diff --git a/textures/illumishroom3.png b/textures/illumishroom3.pngBinary files differ new file mode 100644 index 0000000..afc5311 --- /dev/null +++ b/textures/illumishroom3.png diff --git a/textures/moretrees_acacia_leaves.png b/textures/moretrees_acacia_leaves.pngBinary files differ new file mode 100644 index 0000000..08cf399 --- /dev/null +++ b/textures/moretrees_acacia_leaves.png diff --git a/textures/moretrees_acacia_sapling.png b/textures/moretrees_acacia_sapling.pngBinary files differ new file mode 100644 index 0000000..07170a0 --- /dev/null +++ b/textures/moretrees_acacia_sapling.png diff --git a/textures/moretrees_acacia_trunk.png b/textures/moretrees_acacia_trunk.pngBinary files differ new file mode 100644 index 0000000..169823d --- /dev/null +++ b/textures/moretrees_acacia_trunk.png diff --git a/textures/moretrees_acacia_trunk_top.png b/textures/moretrees_acacia_trunk_top.pngBinary files differ new file mode 100644 index 0000000..2cf5ef0 --- /dev/null +++ b/textures/moretrees_acacia_trunk_top.png diff --git a/textures/moretrees_acacia_wood.png b/textures/moretrees_acacia_wood.pngBinary files differ new file mode 100644 index 0000000..f5e6a68 --- /dev/null +++ b/textures/moretrees_acacia_wood.png diff --git a/textures/moretrees_coconut.png b/textures/moretrees_coconut.pngBinary files differ new file mode 100644 index 0000000..1783f6f --- /dev/null +++ b/textures/moretrees_coconut.png diff --git a/textures/moretrees_coconut_slice.png b/textures/moretrees_coconut_slice.pngBinary files differ new file mode 100644 index 0000000..91f957f --- /dev/null +++ b/textures/moretrees_coconut_slice.png diff --git a/textures/moretrees_palm_leaves.png b/textures/moretrees_palm_leaves.pngBinary files differ new file mode 100644 index 0000000..90b0700 --- /dev/null +++ b/textures/moretrees_palm_leaves.png diff --git a/textures/moretrees_palm_sapling.png b/textures/moretrees_palm_sapling.pngBinary files differ new file mode 100644 index 0000000..48b8cd2 --- /dev/null +++ b/textures/moretrees_palm_sapling.png diff --git a/textures/moretrees_palm_trunk.png b/textures/moretrees_palm_trunk.pngBinary files differ new file mode 100644 index 0000000..a064157 --- /dev/null +++ b/textures/moretrees_palm_trunk.png diff --git a/textures/moretrees_palm_trunk_top.png b/textures/moretrees_palm_trunk_top.pngBinary files differ new file mode 100644 index 0000000..655cd24 --- /dev/null +++ b/textures/moretrees_palm_trunk_top.png diff --git a/textures/moretrees_palm_wood.png b/textures/moretrees_palm_wood.pngBinary files differ new file mode 100644 index 0000000..c0c0ed6 --- /dev/null +++ b/textures/moretrees_palm_wood.png diff --git a/textures/mushroom.png b/textures/mushroom.pngBinary files differ new file mode 100644 index 0000000..d318de0 --- /dev/null +++ b/textures/mushroom.png diff --git a/textures/mushroom_block.png b/textures/mushroom_block.pngBinary files differ new file mode 100644 index 0000000..709c2fe --- /dev/null +++ b/textures/mushroom_block.png diff --git a/textures/mushroom_block.png_OLD b/textures/mushroom_block.png_OLDBinary files differ new file mode 100644 index 0000000..d81ea44 --- /dev/null +++ b/textures/mushroom_block.png_OLD diff --git a/textures/mushroom_pore.png b/textures/mushroom_pore.pngBinary files differ new file mode 100644 index 0000000..54f5dc8 --- /dev/null +++ b/textures/mushroom_pore.png diff --git a/textures/mushroom_soup.png b/textures/mushroom_soup.pngBinary files differ new file mode 100644 index 0000000..4d4a5b3 --- /dev/null +++ b/textures/mushroom_soup.png diff --git a/textures/mushroom_soup_cooked.png b/textures/mushroom_soup_cooked.pngBinary files differ new file mode 100644 index 0000000..a3bf981 --- /dev/null +++ b/textures/mushroom_soup_cooked.png diff --git a/textures/mushroom_spores.png b/textures/mushroom_spores.pngBinary files differ new file mode 100644 index 0000000..989bf41 --- /dev/null +++ b/textures/mushroom_spores.png diff --git a/textures/mushroom_trunk.png b/textures/mushroom_trunk.pngBinary files differ new file mode 100644 index 0000000..16859be --- /dev/null +++ b/textures/mushroom_trunk.png diff --git a/textures/mushroom_trunk_top.png b/textures/mushroom_trunk_top.pngBinary files differ new file mode 100644 index 0000000..c580203 --- /dev/null +++ b/textures/mushroom_trunk_top.png diff --git a/textures/obsidian_brick.png b/textures/obsidian_brick.pngBinary files differ new file mode 100644 index 0000000..62c5688 --- /dev/null +++ b/textures/obsidian_brick.png diff --git a/textures/orange_leaves.png b/textures/orange_leaves.pngBinary files differ new file mode 100644 index 0000000..ea83d98 --- /dev/null +++ b/textures/orange_leaves.png diff --git a/textures/orange_tree_sapling.png b/textures/orange_tree_sapling.pngBinary files differ new file mode 100644 index 0000000..76cb043 --- /dev/null +++ b/textures/orange_tree_sapling.png diff --git a/textures/palm_wax.png b/textures/palm_wax.pngBinary files differ new file mode 100644 index 0000000..0646874 --- /dev/null +++ b/textures/palm_wax.png diff --git a/textures/paper_wall.png b/textures/paper_wall.pngBinary files differ new file mode 100644 index 0000000..1908e48 --- /dev/null +++ b/textures/paper_wall.png diff --git a/textures/pine_leaves.png b/textures/pine_leaves.pngBinary files differ new file mode 100644 index 0000000..a15ebf9 --- /dev/null +++ b/textures/pine_leaves.png diff --git a/textures/pine_nuts.png b/textures/pine_nuts.pngBinary files differ new file mode 100644 index 0000000..090687e --- /dev/null +++ b/textures/pine_nuts.png diff --git a/textures/purple_leaves.png b/textures/purple_leaves.pngBinary files differ new file mode 100644 index 0000000..06160b1 --- /dev/null +++ b/textures/purple_leaves.png diff --git a/textures/red_leaves.png b/textures/red_leaves.pngBinary files differ new file mode 100644 index 0000000..22dbb06 --- /dev/null +++ b/textures/red_leaves.png diff --git a/textures/redwood_leaves.png b/textures/redwood_leaves.pngBinary files differ new file mode 100644 index 0000000..9cb0799 --- /dev/null +++ b/textures/redwood_leaves.png diff --git a/textures/redwood_sapling.png b/textures/redwood_sapling.pngBinary files differ new file mode 100644 index 0000000..90396d9 --- /dev/null +++ b/textures/redwood_sapling.png diff --git a/textures/redwood_trunk.png b/textures/redwood_trunk.pngBinary files differ new file mode 100644 index 0000000..fc6a325 --- /dev/null +++ b/textures/redwood_trunk.png diff --git a/textures/redwood_trunk_top.png b/textures/redwood_trunk_top.pngBinary files differ new file mode 100644 index 0000000..40ca89e --- /dev/null +++ b/textures/redwood_trunk_top.png diff --git a/textures/redwood_wood.png b/textures/redwood_wood.pngBinary files differ new file mode 100644 index 0000000..9991ed7 --- /dev/null +++ b/textures/redwood_wood.png diff --git a/textures/sashimi.png b/textures/sashimi.pngBinary files differ new file mode 100644 index 0000000..5263e7b --- /dev/null +++ b/textures/sashimi.png diff --git a/textures/scarlet_leaves.png b/textures/scarlet_leaves.pngBinary files differ new file mode 100644 index 0000000..d8566b2 --- /dev/null +++ b/textures/scarlet_leaves.png diff --git a/textures/scorched_tree.png b/textures/scorched_tree.pngBinary files differ new file mode 100644 index 0000000..d4028ed --- /dev/null +++ b/textures/scorched_tree.png diff --git a/textures/scorched_tree_top.png b/textures/scorched_tree_top.pngBinary files differ new file mode 100644 index 0000000..5ea751c --- /dev/null +++ b/textures/scorched_tree_top.png diff --git a/textures/seaweed.png b/textures/seaweed.pngBinary files differ new file mode 100644 index 0000000..a3e58bf --- /dev/null +++ b/textures/seaweed.png diff --git a/textures/stone_ladder.png b/textures/stone_ladder.pngBinary files differ new file mode 100644 index 0000000..60f848e --- /dev/null +++ b/textures/stone_ladder.png diff --git a/textures/strawberry.png b/textures/strawberry.pngBinary files differ new file mode 100644 index 0000000..5b43e6b --- /dev/null +++ b/textures/strawberry.png diff --git a/textures/strawberry_1.png b/textures/strawberry_1.pngBinary files differ new file mode 100644 index 0000000..3fa21ed --- /dev/null +++ b/textures/strawberry_1.png diff --git a/textures/strawberry_2.png b/textures/strawberry_2.pngBinary files differ new file mode 100644 index 0000000..751115e --- /dev/null +++ b/textures/strawberry_2.png diff --git a/textures/strawberry_3.png b/textures/strawberry_3.pngBinary files differ new file mode 100644 index 0000000..8b7a7b8 --- /dev/null +++ b/textures/strawberry_3.png diff --git a/textures/strawberry_4.png b/textures/strawberry_4.pngBinary files differ new file mode 100644 index 0000000..dcf0017 --- /dev/null +++ b/textures/strawberry_4.png diff --git a/textures/strawberry_5.png b/textures/strawberry_5.pngBinary files differ new file mode 100644 index 0000000..a2decaa --- /dev/null +++ b/textures/strawberry_5.png diff --git a/textures/strawberry_6.png b/textures/strawberry_6.pngBinary files differ new file mode 100644 index 0000000..a4d0d60 --- /dev/null +++ b/textures/strawberry_6.png diff --git a/textures/strawberry_7.png b/textures/strawberry_7.pngBinary files differ new file mode 100644 index 0000000..ace223c --- /dev/null +++ b/textures/strawberry_7.png diff --git a/textures/strawberry_8.png b/textures/strawberry_8.pngBinary files differ new file mode 100644 index 0000000..6d7280b --- /dev/null +++ b/textures/strawberry_8.png diff --git a/textures/vine.png b/textures/vine.pngBinary files differ new file mode 100644 index 0000000..9774755 --- /dev/null +++ b/textures/vine.png diff --git a/textures/wild_onion.png b/textures/wild_onion.pngBinary files differ new file mode 100644 index 0000000..0ba1537 --- /dev/null +++ b/textures/wild_onion.png diff --git a/textures/willow_sapling.png b/textures/willow_sapling.pngBinary files differ new file mode 100644 index 0000000..28a69a4 --- /dev/null +++ b/textures/willow_sapling.png diff --git a/textures/willow_trunk.png b/textures/willow_trunk.pngBinary files differ new file mode 100644 index 0000000..f7e1517 --- /dev/null +++ b/textures/willow_trunk.png diff --git a/textures/willow_trunk_top.png b/textures/willow_trunk_top.pngBinary files differ new file mode 100644 index 0000000..cf3305e --- /dev/null +++ b/textures/willow_trunk_top.png diff --git a/textures/willow_twig.png b/textures/willow_twig.pngBinary files differ new file mode 100644 index 0000000..247ffb1 --- /dev/null +++ b/textures/willow_twig.png diff --git a/textures/willow_wood.png b/textures/willow_wood.pngBinary files differ new file mode 100644 index 0000000..180f299 --- /dev/null +++ b/textures/willow_wood.png diff --git a/textures/worm.png b/textures/worm.pngBinary files differ new file mode 100644 index 0000000..ceb5fec --- /dev/null +++ b/textures/worm.png diff --git a/textures/yellow_leaves.png b/textures/yellow_leaves.pngBinary files differ new file mode 100644 index 0000000..47084f4 --- /dev/null +++ b/textures/yellow_leaves.png diff --git a/textures/yellow_tree.png b/textures/yellow_tree.pngBinary files differ new file mode 100644 index 0000000..0f9fae9 --- /dev/null +++ b/textures/yellow_tree.png diff --git a/textures/yellow_tree_sapling.png b/textures/yellow_tree_sapling.pngBinary files differ new file mode 100644 index 0000000..419dff0 --- /dev/null +++ b/textures/yellow_tree_sapling.png diff --git a/textures/yellow_tree_top.png b/textures/yellow_tree_top.pngBinary files differ new file mode 100644 index 0000000..e423cdb --- /dev/null +++ b/textures/yellow_tree_top.png diff --git a/textures/yellow_wood.png b/textures/yellow_wood.pngBinary files differ new file mode 100644 index 0000000..b172c80 --- /dev/null +++ b/textures/yellow_wood.png diff --git a/water.lua b/water.lua new file mode 100644 index 0000000..4ea4f48 --- /dev/null +++ b/water.lua @@ -0,0 +1,108 @@ +-- Ice Brick +minetest.register_node("ethereal:icebrick", { +	description = "Ice Brick", +	tiles = {"brick_ice.png"}, +	paramtype = "light", +	freezemelt = "default:water_source", +	groups = {cracky=3, melts=1}, +	sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft({ +	output = 'ethereal:icebrick 4', +	recipe = { +		{'default:ice', 'default:ice'}, +		{'default:ice', 'default:ice'}, +	} +}) + +-- Snow Brick +minetest.register_node("ethereal:snowbrick", { +	description = "Snow Brick", +	tiles = {"brick_snow.png"}, +	paramtype = "light", +--	leveled = 7, +	drawtype = "nodebox", +	freezemelt = "default:water_source", +	groups = {crumbly=3, melts=1}, +	sounds = default.node_sound_dirt_defaults({ +		footstep = {name="default_snow_footstep", gain=0.25}, +		dug = {name="default_snow_footstep", gain=0.75}, +	}), +	on_construct = function(pos) +		pos.y = pos.y - 1 +		if minetest.get_node(pos).name == "default:dirt_with_grass" then +			minetest.set_node(pos, {name="default:dirt_with_snow"}) +		end +	end, +}) + +minetest.register_craft({ +	output = 'ethereal:snowbrick 4', +	recipe = { +		{'default:snowblock', 'default:snowblock'}, +		{'default:snowblock', 'default:snowblock'}, +	} +}) + +-- Over time Cobble placed in water changes to Mossy Cobble +minetest.register_abm({ +	nodenames = {"default:cobble"}, +	neighbors={"default:water_source"}, +	interval = 30, +	chance = 10, +	action = function(pos, node) +	        minetest.add_node(pos, {name="default:mossycobble"}) +	end +}) + +-- If Crystal Spike, Crystal Dirt, Snow near Water, change Water to Ice +minetest.register_abm({ +	nodenames = {"ethereal:crystal_spike", "ethereal:crystal_dirt", "default:snow", "default:snowblock", "ethereal:snowbrick"}, +	neighbors = {"default:water_source"}, +	interval = 15, +	chance = 2, +	action = function(pos, node) +		local pos0 = {x=pos.x-1,y=pos.y-1,z=pos.z-1} +		local pos1 = {x=pos.x+1,y=pos.y+1,z=pos.z+1} + +		local water = minetest.env:find_nodes_in_area(pos0, pos1, "default:water_source") +		if water then +			minetest.env:set_node(water[1], {name="default:ice"}) +		end +	end, +}) + +-- If Heat Source near Ice or Snow then melt +minetest.register_abm({ +	--nodenames = {"default:ice", "default:snowblock", "default:snow", "default:dirt_with_snow"}, +	nodenames = {"group:melts", "default:dirt_with_snow"}, +	neighbors = {"group:hot"}, +	interval = 10, +	chance = 2, +	action = function(pos, node, active_object_count, active_object_count_wider) + +		--print ("NODE:", string.split(node.name, ":")[1]) + +		if node.name == "default:ice" or node.name == "default:snowblock"  +		or node.name == "ethereal:icebrick" or node.name == "ethereal:snowbrick" then +			minetest.add_node(pos,{name="default:water_source"}) +		elseif node.name == "default:snow" or string.split(node.name, ":")[1]then +			minetest.add_node(pos,{name="default:water_flowing"}) +		elseif node.name == "default:dirt_with_snow" then +			minetest.add_node(pos,{name="default:dirt_with_grass"}) +		end +		nodeupdate(pos) +	end, +}) + +-- If Water Source near Dry Dirt, change to normal Dirt +minetest.register_abm({ +	nodenames = {"ethereal:dry_dirt"}, +	neighbors = {"group:water"}, +	interval = 15, +	chance = 2, +	action = function(pos, node, active_object_count, active_object_count_wider) +		minetest.add_node(pos,{name="default:dirt"}) +	end, +}) diff --git a/wood.lua b/wood.lua new file mode 100644 index 0000000..69d4f3f --- /dev/null +++ b/wood.lua @@ -0,0 +1,158 @@ +-- Define Trunks and Wood +minetest.register_node("ethereal:acacia_trunk", {			-- Acacia Trunk (thanks to VanessaE for acacia textures) +	description = "Acacia Trunk", +	tiles = {"moretrees_acacia_trunk_top.png", "moretrees_acacia_trunk_top.png", "moretrees_acacia_trunk.png"}, +	groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, +	sounds = default.node_sound_wood_defaults(), +	paramtype2 = "facedir", +}) + +minetest.register_node("ethereal:acacia_wood", {			-- Acacia Wood +	description = "Acacia Wood", +	tiles = {"moretrees_acacia_wood.png"}, +	groups = {wood=1,choppy=2,oddly_breakable_by_hand=1,flammable=3}, +	sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:acacia_wood 4", +	type = shapeless, +	recipe = {{"ethereal:acacia_trunk"}} +}) + +minetest.register_node("ethereal:willow_trunk", {		-- Willow Trunk +	description = "Willow Trunk", +	tiles = {"willow_trunk_top.png", "willow_trunk_top.png", "willow_trunk.png"}, +	groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, +	sounds = default.node_sound_wood_defaults(), +	paramtype2 = "facedir", +}) + +minetest.register_node("ethereal:willow_wood", {		-- Willow Wood +	description = "Willow Wood", +	tiles = {"willow_wood.png"}, +	groups = {wood=1,choppy=2,oddly_breakable_by_hand=1,flammable=3}, +	sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:willow_wood 4", +	recipe = {{"ethereal:willow_trunk"}} +}) + +minetest.register_node("ethereal:redwood_trunk", {		-- Redwood Trunk +	description = "Redwood Trunk", +	tiles = {"redwood_trunk_top.png", "redwood_trunk_top.png", "redwood_trunk.png"}, +	groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, +	sounds = default.node_sound_wood_defaults(), +	paramtype2 = "facedir", +}) + +minetest.register_node("ethereal:redwood_wood", {		-- Redwood Wood +	description = "Redwood Wood", +	tiles = {"redwood_wood.png"}, +	groups = {wood=1,choppy=2,oddly_breakable_by_hand=1,flammable=3}, +	sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:redwood_wood 4", +	recipe = {{"ethereal:redwood_trunk"}}, +}) + +minetest.register_node("ethereal:frost_tree", {			-- Frost Trunk +	description = "Frost Tree", +	tiles = {"ethereal_frost_tree_top.png", "ethereal_frost_tree_top.png", "ethereal_frost_tree.png"}, +	groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,put_out_fire=1}, +	sounds = default.node_sound_wood_defaults(), +	paramtype2 = "facedir", +}) + +minetest.register_node("ethereal:frost_wood", {			-- Frost Wood +	description = "Frost Wood", +	tiles = {"frost_wood.png"}, +	groups = {wood=1,choppy=2,oddly_breakable_by_hand=1,put_out_fire=1}, +	sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:frost_wood 4", +	recipe = {{"ethereal:frost_tree"}} +}) + +minetest.register_node("ethereal:yellow_trunk", {		-- Healing Trunk +	description = "Healing Tree Trunk", +	tiles = {"yellow_tree_top.png", "yellow_tree_top.png", "yellow_tree.png"}, +	groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,put_out_fire=1}, +	sounds = default.node_sound_wood_defaults(), +	paramtype2 = "facedir", +}) + +minetest.register_node("ethereal:yellow_wood", {		-- Healing Wood +	description = "Healing Tree Wood", +	tiles = {"yellow_wood.png"}, +	groups = {wood=1,choppy=2,oddly_breakable_by_hand=1,put_out_fire=1}, +	sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:yellow_wood 4", +	recipe = {{"ethereal:yellow_trunk"}} +}) + +minetest.register_node("ethereal:palm_trunk", {			-- Palm Trunk +	description = "Palm Trunk", +	tiles = {"moretrees_palm_trunk_top.png", "moretrees_palm_trunk_top.png", "moretrees_palm_trunk.png"}, +	groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, +	sounds = default.node_sound_wood_defaults(), +	paramtype2 = "facedir", +}) + +minetest.register_node("ethereal:palm_wood", {			-- Palm Wood +	description = "Palm Wood", +	tiles = {"moretrees_palm_wood.png"}, +	groups = {wood=1,choppy=2,oddly_breakable_by_hand=1,flammable=3}, +	sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:palm_wood 4", +	type = shapeless, +	recipe = {{"ethereal:palm_trunk"}} +}) + +minetest.register_node("ethereal:banana_trunk", {		-- Banana Tree Trunk +	description = "Banana Trunk", +	tiles = {"banana_trunk_top.png", "banana_trunk_top.png", "banana_trunk.png"}, +	groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, +	sounds = default.node_sound_wood_defaults(), +	paramtype2 = "facedir", +}) + +minetest.register_node("ethereal:banana_wood", {		-- Banana Tree Wood +	description = "Banana Wood", +	tiles = {"banana_wood.png"}, +	groups = {wood=1,choppy=2,oddly_breakable_by_hand=1,flammable=3}, +	sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ +	output = "ethereal:banana_wood 4", +	recipe = {{"ethereal:banana_trunk"}} +}) + +minetest.register_node("ethereal:scorched_tree", {		-- Scorched Trunk +	description = "Scorched Tree", +	tiles = {"scorched_tree_top.png", "scorched_tree_top.png", "scorched_tree.png"}, +	groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=1}, +	sounds = default.node_sound_wood_defaults(), +	paramtype2 = "facedir", +}) + +minetest.register_node("ethereal:mushroom_trunk", {		-- Mushroom Trunk +	description = "Mushroom", +	tiles = {"mushroom_trunk_top.png", "mushroom_trunk_top.png", "mushroom_trunk.png"}, +	groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, +	sounds = default.node_sound_wood_defaults(), +	paramtype2 = "facedir", +}) | 
