diff --git a/mushroom/compat.lua b/mushroom/compat.lua new file mode 100644 index 0000000..c7a1009 --- /dev/null +++ b/mushroom/compat.lua @@ -0,0 +1,41 @@ + +-- Redefine grass and dirt nodes + +minetest.override_item("default:dirt", { + drop = { + max_items = 2, + items = { + { + items = {"mushroom:spore1"}, + rarity = 40, + }, + { + items = {"mushroom:spore2"}, + rarity = 40, + }, + { + items = {"default:dirt"}, + } + } + } +}) + +minetest.override_item("default:dirt_with_grass", { + drop = { + max_items = 2, + items = { + { + items = {"mushroom:spore1"}, + rarity = 40, + }, + { + items = {"mushroom:spore2"}, + rarity = 40, + }, + { + items = {"default:dirt"}, + } + } + } +}) + diff --git a/mushroom/crafting.lua b/mushroom/crafting.lua new file mode 100644 index 0000000..b05762b --- /dev/null +++ b/mushroom/crafting.lua @@ -0,0 +1,91 @@ +-- craft items + +minetest.register_craftitem("mushroom:spore1",{ + description = "Unidentified Mushroom Spore", + inventory_image = "mushroom_spore.png", + wield_image = "mushroom_spore.png", +}) + +minetest.register_craftitem("mushroom:spore2",{ + description = "Unidentified Mushroom Spore", + inventory_image = "mushroom_spore.png", + wield_image = "mushroom_spore.png", +}) + +minetest.register_craftitem("mushroom:identifier",{ + description = "Mushroom Spore Identifier/Spore Extractor", + inventory_image = "mushroom_identifier.png", + wield_image = "mushroom_identifier.png", +}) + +minetest.register_craftitem("mushroom:brown_essence",{ + description = "Healthy Brown Mushroom Essence", + inventory_image = "mushroom_essence.png", + wield_image = "mushroom_essence.png", + on_use = minetest.item_eat(10), +}) + +minetest.register_craftitem("mushroom:poison",{ + description = "Red Mushroom Poison", + inventory_image = "mushroom_poison.png", + wield_image = "mushroom_poison.png", + on_use = minetest.item_eat(-10), +}) + +-- recipes + +minetest.register_craft( { + output = "mushroom:identifier", + recipe = { + { "", "default:torch", "" }, + { "default:steel_ingot", "default:mese_crystal_fragment", "default:steel_ingot" }, + } +}) + +minetest.register_craft( { + type = "shapeless", + output = "mushroom:brown_essence", + recipe = { "mushroom:brown" , "vessels:glass_bottle" }, +}) + +minetest.register_craft( { + type = "shapeless", + output = "mushroom:poison", + recipe = { "mushroom:red" , "vessels:glass_bottle" }, +}) + +minetest.register_craft( { + type = "shapeless", + output = "mushroom:spore_brown", + recipe = { "mushroom:identifier" , "mushroom:spore1" }, + replacements = { + { 'mushroom:identifier', 'mushroom:identifier' } + } +}) + +minetest.register_craft( { + type = "shapeless", + output = "mushroom:spore_red", + recipe = { "mushroom:identifier" , "mushroom:spore2" }, + replacements = { + { 'mushroom:identifier', 'mushroom:identifier' } + } +}) + +minetest.register_craft( { + type = "shapeless", + output = "mushroom:spore_red 2", + recipe = { "mushroom:identifier" , "mushroom:red" }, + replacements = { + { 'mushroom:identifier', 'mushroom:identifier' } + } +}) + +minetest.register_craft( { + type = "shapeless", + output = "mushroom:spore_brown 2", + recipe = { "mushroom:identifier" , "mushroom:brown" }, + replacements = { + { 'mushroom:identifier', 'mushroom:identifier' } + } +}) diff --git a/mushroom/depends.txt b/mushroom/depends.txt new file mode 100644 index 0000000..0a3c3f8 --- /dev/null +++ b/mushroom/depends.txt @@ -0,0 +1,3 @@ +default +vessels? +woodsoils? diff --git a/mushroom/init.lua b/mushroom/init.lua new file mode 100644 index 0000000..c895291 --- /dev/null +++ b/mushroom/init.lua @@ -0,0 +1,262 @@ + +-- Mushroom mod by DanDuncombe and VanessaE +-- +-- License: CC-By-SA for texures derived from Minetest defaults, +-- WTFPL for all code and everything else. + +mushroom = {} + +minetest.register_node("mushroom:brown",{ + description = "Brown Mushroom", + drawtype = "plantlike", + sunlight_propagates = true, + tiles = {"mushroom_brown.png"}, + inventory_image = "mushroom_brown.png", + wield_image = "mushroom_brown.png", + groups = {oddly_breakable_by_hand=3,attached_node=1}, + paramtype = "light", + walkable = false, + on_use = minetest.item_eat(5), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + }, + drop = "mushroom:brown", +}) + +minetest.register_node("mushroom:red",{ + description = "Red Mushroom", + drawtype = "plantlike", + sunlight_propagates = true, + tiles = {"mushroom_red.png"}, + inventory_image = "mushroom_red.png", + wield_image = "mushroom_red.png", + groups = {oddly_breakable_by_hand=3,attached_node=1}, + paramtype = "light", + walkable = false, + on_use = minetest.item_eat(-5), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + }, + drop = "mushroom:red", +}) + +minetest.register_node("mushroom:spore_brown",{ + description = "Brown Mushroom Spore", + drawtype = "raillike", + paramtype = "light", + tiles = {"mushroom_spore_brown.png"}, + sunlight_propagates = true, + walkable = false, + groups = {oddly_breakable_by_hand=3,attached_node=1}, + inventory_image = "mushroom_spore_brown.png", + wield_image = "mushroom_spore_brown.png", + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5} + }, +}) + +minetest.register_node("mushroom:spore_red",{ + description = "Red Mushroom Spore", + drawtype = "raillike", + paramtype = "light", + tiles = {"mushroom_spore_red.png"}, + sunlight_propagates = true, + walkable = false, + groups = {oddly_breakable_by_hand=3,attached_node=1}, + inventory_image = "mushroom_spore_red.png", + wield_image = "mushroom_spore_red.png", + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5} + }, +}) + +--Natural Mushrooms + +minetest.register_node("mushroom:brown_natural",{ + description = "Brown Mushroom (Naturally Spawned)", + drawtype = "plantlike", + sunlight_propagates = true, + tiles = {"mushroom_brown.png"}, + inventory_image = "mushroom_brown.png", + wield_image = "mushroom_brown.png", + groups = {oddly_breakable_by_hand=3}, + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + }, + drop = "mushroom:brown", +}) + +minetest.register_node("mushroom:red_natural",{ + description = "Red Mushroom (Naturally Spawned)", + drawtype = "plantlike", + sunlight_propagates = true, + tiles = {"mushroom_red.png"}, + inventory_image = "mushroom_red.png", + wield_image = "mushroom_red.png", + groups = {oddly_breakable_by_hand=3}, + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + }, + drop = "mushroom:red", +}) + +-- Spore Growing ABMs + +minetest.register_abm({ + nodenames = {"mushroom:spore_brown"}, + neighbors = {"air"}, + interval = 120, + chance = 4, + action = function(pos, node) + local soil = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}) + if (soil.name == "farming:soil_wet" or string.find(soil.name, "homedecor:flower_pot_")) + and minetest.get_node_light(pos, nil) < 8 then + minetest.add_node({x=pos.x,y=pos.y,z=pos.z}, {name="mushroom:brown"}) + end + end +}) + +minetest.register_abm({ + nodenames = {"mushroom:spore_red"}, + neighbors = {"air"}, + interval = 120, + chance = 4, + action = function(pos, node) + local soil = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}) + if (soil.name == "farming:soil_wet" or string.find(soil.name, "homedecor:flower_pot_")) + and minetest.get_node_light(pos, nil) < 8 then + minetest.add_node({x=pos.x,y=pos.y,z=pos.z}, {name="mushroom:red"}) + end + end +}) + +-- list of trees that mushrooms can grow next to + +local trees_list = { + "default:tree", + "default:jungletree", + "moretrees:apple_tree_trunk", + "moretrees:beech_trunk", + "moretrees:birch_trunk", + "moretrees:fir_trunk", + "moretrees:oak_trunk", + "moretrees:pine_trunk", + "moretrees:rubber_tree_trunk", + "moretrees:rubber_tree_trunk_empty", + "moretrees:sequoia_trunk", + "moretrees:spruce_trunk", + "moretrees:willow_trunk", +} + +-- Natural Spawning ABM + +minetest.register_abm({ + nodenames = { + "default:dirt_with_grass", + "default:dirt", + "woodsoils:dirt_with_leaves_1", + "woodsoils:dirt_with_leaves_2", + "woodsoils:grass_with_leaves_1", + "woodsoils:grass_with_leaves_2", + "farming:soil_wet" + }, + neighbors = {"air"}, + interval = 300, + chance = 100, + action = function(pos, node) + local top_pos = {x=pos.x, y=pos.y+1, z=pos.z} + if minetest.get_node(top_pos).name == "air" and minetest.get_node_light(top_pos, nil) < 8 + and minetest.find_node_near(pos, 1, trees_list) + and minetest.find_node_near(pos, 3, "default:water_source") then + if math.random(0, 1) == 0 then + minetest.add_node(top_pos, {name="mushroom:brown_natural"}) + else + minetest.add_node(top_pos, {name="mushroom:red_natural"}) + end + end + end +}) + +minetest.register_abm({ + nodenames = {"default:stone"}, + neighbors = {"air"}, + interval = 300, + chance = 100, + action = function(pos, node) + local top_pos = {x=pos.x, y=pos.y+1, z=pos.z} + if minetest.get_node(top_pos).name == "air" and minetest.get_node_light(top_pos, nil) < 8 + and minetest.find_node_near(pos, 1, {"default:water_source"}) then + if math.random(0,1) == 0 then + minetest.add_node(top_pos, {name="mushroom:brown_natural"}) + else + minetest.add_node(top_pos, {name="mushroom:red_natural"}) + end + end + end +}) + +-- Spreading ABM + +minetest.register_abm({ + nodenames = { + "mushroom:brown_natural", + "mushroom:red_natural" + }, + neighbors = {"air"}, + interval = 120, + chance = 100, + action = function(pos, node) + local soil_pos = {x=pos.x, y=pos.y-1, z=pos.z} + local soil = minetest.get_node(soil_pos) + local woodsoil_str = "woodsoils:.+_with_leaves_?" + if minetest.get_node_light(pos, nil) < 8 + and minetest.find_node_near(pos, 1, trees_list) then + local spread_x = math.random(-1, 1) + local spread_z = math.random(-1, 1) + local newpos = {x=pos.x+spread_x, y=pos.y, z=pos.z+spread_z} + local newsoil = minetest.get_node({x=newpos.x, y=newpos.y-1, z=newpos.z}) + if minetest.get_node(newpos).name == "air" + and (newsoil.name == "default:dirt_with_grass" + or newsoil.name == "default:dirt" + or string.match(newsoil.name, woodsoil_str)) + and minetest.find_node_near(newpos, 3, "default:water_source") then + minetest.add_node(newpos, {name=node.name}) + end + end + end +}) + +-- Dying ABM + +minetest.register_abm({ + nodenames = { + "mushroom:brown", + "mushroom:red", + }, + neighbors = {"air"}, + interval = 120, + chance = 50, + action = function(pos, node) + local soil = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) + if soil.name ~= "farming:soil_wet" + and not string.find(soil.name, "homedecor:flower_pot_") then + minetest.remove_node(pos) + end + end +}) + +dofile(minetest.get_modpath("mushroom").."/crafting.lua") +dofile(minetest.get_modpath("mushroom").."/compat.lua") + +print("[Mushrooms] loaded.") + diff --git a/mushroom/textures/mushroom_brown.png b/mushroom/textures/mushroom_brown.png new file mode 100644 index 0000000..c8b5bc9 Binary files /dev/null and b/mushroom/textures/mushroom_brown.png differ diff --git a/mushroom/textures/mushroom_essence.png b/mushroom/textures/mushroom_essence.png new file mode 100644 index 0000000..15f5b2d Binary files /dev/null and b/mushroom/textures/mushroom_essence.png differ diff --git a/mushroom/textures/mushroom_identifier.png b/mushroom/textures/mushroom_identifier.png new file mode 100644 index 0000000..5d9d5c9 Binary files /dev/null and b/mushroom/textures/mushroom_identifier.png differ diff --git a/mushroom/textures/mushroom_poison.png b/mushroom/textures/mushroom_poison.png new file mode 100644 index 0000000..74891db Binary files /dev/null and b/mushroom/textures/mushroom_poison.png differ diff --git a/mushroom/textures/mushroom_red.png b/mushroom/textures/mushroom_red.png new file mode 100644 index 0000000..cea95f5 Binary files /dev/null and b/mushroom/textures/mushroom_red.png differ diff --git a/mushroom/textures/mushroom_spore.png b/mushroom/textures/mushroom_spore.png new file mode 100644 index 0000000..584c3f7 Binary files /dev/null and b/mushroom/textures/mushroom_spore.png differ diff --git a/mushroom/textures/mushroom_spore_brown.png b/mushroom/textures/mushroom_spore_brown.png new file mode 100644 index 0000000..22bc9d9 Binary files /dev/null and b/mushroom/textures/mushroom_spore_brown.png differ diff --git a/mushroom/textures/mushroom_spore_red.png b/mushroom/textures/mushroom_spore_red.png new file mode 100644 index 0000000..b1537cc Binary files /dev/null and b/mushroom/textures/mushroom_spore_red.png differ