diff --git a/mods/farming/api.lua b/mods/farming/api.lua index 731a948..05b706a 100644 --- a/mods/farming/api.lua +++ b/mods/farming/api.lua @@ -9,11 +9,11 @@ farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) if pt.type ~= "node" then return end - + local under = minetest.get_node(pt.under) local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} local above = minetest.get_node(p) - + -- return if any of the nodes is not registered if not minetest.registered_nodes[under.name] then return @@ -21,23 +21,23 @@ farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) if not minetest.registered_nodes[above.name] then return end - + -- check if the node above the pointed thing is air if above.name ~= "air" then return end - + -- check if pointing at soil if minetest.get_item_group(under.name, "soil") ~= 1 then return end - + -- check if (wet) soil defined local regN = minetest.registered_nodes if regN[under.name].soil == nil or regN[under.name].soil.wet == nil or regN[under.name].soil.dry == nil then return end - + if minetest.is_protected(pt.under, user:get_player_name()) then minetest.record_protection_violation(pt.under, user:get_player_name()) return @@ -47,14 +47,14 @@ farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) return end - + -- turn the node into soil, wear out item and play sound minetest.set_node(pt.under, {name = regN[under.name].soil.dry}) minetest.sound_play("default_dig_crumbly", { pos = pt.under, gain = 0.5, }) - + if not minetest.setting_getbool("creative_mode") then itemstack:add_wear(65535/(uses-1)) end @@ -64,7 +64,7 @@ end -- Register new hoes farming.register_hoe = function(name, def) -- Check for : prefix (register new hoes in your mod's namespace) - if name:sub(1,1) ~= ":" then + if name:sub(1, 1) ~= ":" then name = ":" .. name end -- Check def table @@ -129,10 +129,10 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) if pt.type ~= "node" then return end - + local under = minetest.get_node(pt.under) local above = minetest.get_node(pt.above) - + if minetest.is_protected(pt.under, placer:get_player_name()) then minetest.record_protection_violation(pt.under, placer:get_player_name()) return @@ -142,7 +142,7 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) return end - + -- return if any of the nodes is not registered if not minetest.registered_nodes[under.name] then return @@ -150,24 +150,28 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) 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 + 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}) + local ndef = core.registered_items[plantname] + if ndef and not ndef.drawtype then + plantname = plantname .. "_1" + end + minetest.set_node(pt.above, {name = plantname, param2 = 1}) if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end @@ -198,16 +202,16 @@ farming.register_plant = function(name, def) if not def.fertility then def.fertility = {} end - if not def.has_seed then + if def.has_seed ~= false then def.has_seed = true end - - + + local g = {seed = 1, snappy = 3, attached_node = 1} for k, v in pairs(def.fertility) do g[v] = 1 end - + if def.has_seed then -- Register seed minetest.register_node(":" .. mname .. ":seed_" .. pname, { @@ -228,65 +232,47 @@ farming.register_plant = function(name, def) fertility = def.fertility, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":seed_" .. pname) - end + end, + on_use = def.on_use, }) - + -- Register harvest minetest.register_craftitem(":" .. mname .. ":" .. pname, { description = pname:gsub("^%l", string.upper), inventory_image = mname .. "_" .. pname .. ".png", }) else - minetest.register_node(":" .. mname .. ":" .. pname, { + minetest.register_craftitem(":" .. mname .. ":" .. pname, { description = def.description, tiles = {def.inventory_image}, inventory_image = def.inventory_image, wield_image = def.inventory_image, - drawtype = "signlike", groups = g, - paramtype = "light", - paramtype2 = "wallmounted", - walkable = false, - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, - }, fertility = def.fertility, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":" .. pname) - end + end, + on_use = def.on_use, }) end - + -- Register growing steps - for i=1,def.steps do - if i < def.steps and def.has_seed == true then - local drop = mname .. ":seed_" .. pname - elseif i < def.steps and def.has_seed == false then - local drop = mname .. ":" .. pname - elseif i == def.steps and def.has_seed == true then + local max_step = def.steps + 1 + for i = 1,def.steps do local drop = def.drop or { items = { - {items = {mname .. ":" .. pname}}, - {items = {mname .. ":" .. pname}, rarity = 2}, - {items = {mname .. ":" .. pname}, rarity = 10}, - {items = {mname .. ":seed_" .. pname}}, - {items = {mname .. ":seed_" .. pname}, rarity = 2.25}, - {items = {mname .. ":seed_" .. pname}, rarity = 10}, + {items = {mname .. ":" .. pname}, rarity = max_step - i}, + {items = {mname .. ":" .. pname}, rarity = (max_step - i) * 2}, + {items = {mname .. ":seed_" .. pname}, rarity = max_step - i}, + {items = {mname .. ":seed_" .. pname}, rarity = (max_step - i) * 2}, } } - elseif i == def.steps and def.has_seed == false then - local drop = def.drop or { - items = { - {items = {mname .. ":" .. pname}}, - {items = {mname .. ":" .. pname}, rarity = 1.2}, - {items = {mname .. ":" .. pname}, rarity = 2}, - {items = {mname .. ":" .. pname}, rarity = 4}, - {items = {mname .. ":" .. pname}, rarity = 16}, - } - } - end + if def.has_seed == false then + drop.items[3] = {items = {mname .. ":" .. pname}, rarity = (max_step - i) * 4} + drop.items[4] = {items = {mname .. ":" .. pname}, rarity = (max_step - i) * 6} + end + + local nodegroups = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1} nodegroups[pname] = i minetest.register_node(":" .. mname .. ":" .. pname .. "_" .. i, { @@ -323,7 +309,7 @@ farming.register_plant = function(name, def) local node_def = minetest.registered_items[node.name] or nil -- grow seed - if minetest.get_item_group(node.name, "seed") and node_def.fertility then + if def.has_seed and minetest.get_item_group(node.name, "seed") and node_def.fertility then local can_grow = false local soil_node = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) if not soil_node then @@ -334,10 +320,8 @@ farming.register_plant = function(name, def) can_grow = true end end - if can_grow and def.has_seed then + if can_grow then minetest.set_node(pos, {name = node.name:gsub("seed_", "") .. "_1"}) - else - minetest.set_node(pos, {name = node.name .. "_1"}) end return end