From da66780a569712c23ae4f2996cfb4608a9f9d69d Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 1 Apr 2016 20:02:19 -0400 Subject: copy all standard Dreambuilder mods in from the old subgame (exactly as last supplied there, updates to these mods will follow later) --- farming_plus/init.lua | 324 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 324 insertions(+) create mode 100644 farming_plus/init.lua (limited to 'farming_plus/init.lua') diff --git a/farming_plus/init.lua b/farming_plus/init.lua new file mode 100644 index 0000000..4f949e7 --- /dev/null +++ b/farming_plus/init.lua @@ -0,0 +1,324 @@ +farming.registered_plants = {} + +-- Boilerplate to support localized strings if intllib mod is installed. +if (minetest.get_modpath("intllib")) then + dofile(minetest.get_modpath("intllib").."/intllib.lua") + farming.S = intllib.Getter(minetest.get_current_modname()) +else + farming.S = function ( s ) return s end +end + +function farming.add_plant(full_grown, names, interval, chance) + minetest.register_abm({ + nodenames = names, + interval = interval, + chance = chance, + action = function(pos, node) + pos.y = pos.y-1 + if minetest.get_node(pos).name ~= "farming:soil_wet" then + return + end + pos.y = pos.y+1 + if not minetest.get_node_light(pos) then + return + end + if minetest.get_node_light(pos) < 8 then + return + end + local step = nil + for i,name in ipairs(names) do + if name == node.name then + step = i + break + end + end + if step == nil then + return + end + local new_node = {name=names[step+1]} + if new_node.name == nil then + new_node.name = full_grown + end + minetest.set_node(pos, new_node) + end + }) + + table.insert(farming.registered_plants, { + full_grown = full_grown, + names = names, + interval = interval, + chance = chance, + }) +end + +function farming.generate_tree(pos, trunk, leaves, underground, replacements) + pos.y = pos.y-1 + local nodename = minetest.get_node(pos).name + local ret = true + for _,name in ipairs(underground) do + if nodename == name then + ret = false + break + end + end + pos.y = pos.y+1 + if not minetest.get_node_light(pos) then + return + end + if ret or minetest.get_node_light(pos) < 8 then + return + end + + node = {name = ""} + for dy=1,4 do + pos.y = pos.y+dy + if minetest.get_node(pos).name ~= "air" then + return + end + pos.y = pos.y-dy + end + node.name = trunk + for dy=0,4 do + pos.y = pos.y+dy + minetest.set_node(pos, node) + pos.y = pos.y-dy + end + + if not replacements then + replacements = {} + end + + node.name = leaves + pos.y = pos.y+3 + for dx=-2,2 do + for dz=-2,2 do + for dy=0,3 do + pos.x = pos.x+dx + pos.y = pos.y+dy + pos.z = pos.z+dz + + if dx == 0 and dz == 0 and dy==3 then + if minetest.get_node(pos).name == "air" and math.random(1, 5) <= 4 then + minetest.set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.set_node(pos, {name=name}) + end + end + end + elseif dx == 0 and dz == 0 and dy==4 then + if minetest.get_node(pos).name == "air" and math.random(1, 5) <= 4 then + minetest.set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.set_node(pos, {name=name}) + end + end + end + elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then + if minetest.get_node(pos).name == "air" then + minetest.set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.set_node(pos, {name=name}) + end + end + end + else + if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then + if minetest.get_node(pos).name == "air" and math.random(1, 5) <= 4 then + minetest.set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.set_node(pos, {name=name}) + end + end + end + end + end + + pos.x = pos.x-dx + pos.y = pos.y-dy + pos.z = pos.z-dz + end + end + end +end + +farming.seeds = { + ["farming:pumpkin_seed"]=60, + ["farming_plus:strawberry_seed"]=30, + ["farming_plus:rhubarb_seed"]=30, + ["farming_plus:potatoe_seed"]=30, + ["farming_plus:tomato_seed"]=30, + ["farming_plus:orange_seed"]=30, + ["farming_plus:carrot_seed"]=30, +} + + +-- ========= GENERATE PLANTS IN THE MAP ========= +minetest.register_on_generated(function(minp, maxp, seed) + if maxp.y >= 2 and minp.y <= 0 then + -- Generate plants (code from flowers) + local perlin1 = minetest.get_perlin(974, 3, 0.6, 100) + -- Assume X and Z lengths are equal + local divlen = 16 + 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) + -- Determine flowers amount from perlin noise + local grass_amount = math.floor(perlin1:get2d({x=x0, y=z0}) ^ 3 * 9) + -- Find random positions for flowers based on this random + local pr = PseudoRandom(seed+456) + for i=0,grass_amount do + local x = pr:next(x0, x1) + local z = pr:next(z0, z1) + -- Find ground level (0...15) + local ground_y = nil + for y=30,0,-1 do + if minetest.get_node({x=x,y=y,z=z}).name ~= "air" then + ground_y = y + break + end + end + + if ground_y then + local p = {x=x,y=ground_y+1,z=z} + local nn = minetest.get_node(p).name + -- Check if the node can be replaced + if minetest.registered_nodes[nn] and + minetest.registered_nodes[nn].buildable_to then + nn = minetest.get_node({x=x,y=ground_y,z=z}).name + if nn == "default:dirt_with_grass" then + --local plant_choice = pr:next(1, #farming.registered_plants) + local plant_choice = math.floor(perlin1:get2d({x=x,y=z})*(#farming.registered_plants)) + local plant = farming.registered_plants[plant_choice] + if plant then + minetest.set_node(p, {name=plant.full_grown}) + end + end + end + end + + end + end + end + end +end) + +function farming.place_seed(itemstack, placer, pointed_thing, plantname) + + -- Call on_rightclick if the pointed node defines it + if pointed_thing.type == "node" and placer and + not placer:get_player_control().sneak then + local n = minetest.get_node(pointed_thing.under) + local nn = n.name + if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then + return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, n, + placer, itemstack, pointed_thing) or itemstack, false + end + end + + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return + end + if pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + local above = minetest.get_node(pt.above) + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return + end + if not minetest.registered_nodes[above.name] then + return + end + + -- check if pointing at the top of the node + if pt.above.y ~= pt.under.y+1 then + return + end + + -- check if you can replace the node above the pointed node + if not minetest.registered_nodes[above.name].buildable_to then + return + end + + -- check if pointing at soil + if minetest.get_item_group(under.name, "soil") < 2 then + return + end + + -- add the node and remove 1 item from the itemstack + minetest.add_node(pt.above, {name=plantname, param2 = 1}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack +end + +-- ========= ALIASES FOR FARMING MOD BY SAPIER ========= +-- potatoe -> potatoe +minetest.register_alias("farming:potatoe_node", "farming_plus:potatoe") +--minetest.register_alias("farming:potatoe", "farming:potatoe_item") cant do this +minetest.register_alias("farming:potatoe_straw", "farming_plus:potatoe") +minetest.register_alias("farming:seed_potatoe", "farming_plus:potatoe_seed") +for lvl = 1, 6, 1 do + minetest.register_entity(":farming:potatoe_lvl"..lvl, { + on_activate = function(self, staticdata) + minetest.set_node(self.object:getpos(), {name="farming_plus:potatoe_1"}) + end + }) +end + + +minetest.register_alias("farming:cotton", "farming:cotton_3") +minetest.register_alias("farming:wheat_harvested", "farming:wheat") +minetest.register_alias("farming:dough", "farming:flour") +minetest.register_abm({ + nodenames = {"farming:wheat"}, + interval = 1, + chance = 1, + action = function(pos) + minetest.set_node(pos, {name="farming:wheat_8"}) + end, +}) + +-- ========= STRAWBERRIES ========= +dofile(minetest.get_modpath("farming_plus").."/strawberries.lua") + +-- ========= RHUBARB ========= +dofile(minetest.get_modpath("farming_plus").."/rhubarb.lua") + +-- ========= POTATOES ========= +dofile(minetest.get_modpath("farming_plus").."/potatoes.lua") + +-- ========= TOMATOES ========= +dofile(minetest.get_modpath("farming_plus").."/tomatoes.lua") + +-- ========= ORANGES ========= +dofile(minetest.get_modpath("farming_plus").."/oranges.lua") + +-- ========= BANANAS ========= +dofile(minetest.get_modpath("farming_plus").."/bananas.lua") + +-- ========= CARROTS ========= +dofile(minetest.get_modpath("farming_plus").."/carrots.lua") + +-- ========= COCOA ========= +dofile(minetest.get_modpath("farming_plus").."/cocoa.lua") + +-- ========= PUMPKIN ========= +dofile(minetest.get_modpath("farming_plus").."/pumpkin.lua") + +-- ========= WEED ========= +dofile(minetest.get_modpath("farming_plus").."/weed.lua") -- cgit v1.2.3