From 35ab137f562e55b5433a5d2205560e755f761ab7 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Tue, 21 May 2013 19:11:28 +0200 Subject: [PATCH] Update to farming in upstream --- README.txt | 27 +- init.lua | 145 +++++- pumpkin.lua | 482 ++++++++++++++++++++ textures/farming_bread_pumpkin.png | Bin 0 -> 511 bytes textures/farming_cake_mix_pumpkin.png | Bin 0 -> 343 bytes textures/farming_pumpkin_big_side.png | Bin 0 -> 600 bytes textures/farming_pumpkin_big_top.png | Bin 0 -> 600 bytes textures/farming_pumpkin_big_top_corner.png | Bin 0 -> 289 bytes textures/farming_pumpkin_big_top_side.png | Bin 0 -> 378 bytes textures/farming_pumpkin_face.png | Bin 0 -> 622 bytes textures/farming_pumpkin_face_light.png | Bin 0 -> 632 bytes textures/farming_pumpkin_seed.png | Bin 0 -> 312 bytes textures/farming_pumpkin_side.png | Bin 0 -> 627 bytes textures/farming_pumpkin_top.png | Bin 0 -> 623 bytes textures/farming_scarecrow_front.png | Bin 0 -> 634 bytes textures/farming_scarecrow_front_light.png | Bin 0 -> 641 bytes textures/farming_scarecrow_side.png | Bin 0 -> 613 bytes textures/farming_scarecrow_top.png | Bin 0 -> 639 bytes textures/farming_weed.png | Bin 0 -> 591 bytes weed.lua | 40 ++ 20 files changed, 666 insertions(+), 28 deletions(-) create mode 100644 pumpkin.lua create mode 100644 textures/farming_bread_pumpkin.png create mode 100644 textures/farming_cake_mix_pumpkin.png create mode 100644 textures/farming_pumpkin_big_side.png create mode 100644 textures/farming_pumpkin_big_top.png create mode 100644 textures/farming_pumpkin_big_top_corner.png create mode 100644 textures/farming_pumpkin_big_top_side.png create mode 100644 textures/farming_pumpkin_face.png create mode 100644 textures/farming_pumpkin_face_light.png create mode 100644 textures/farming_pumpkin_seed.png create mode 100644 textures/farming_pumpkin_side.png create mode 100644 textures/farming_pumpkin_top.png create mode 100644 textures/farming_scarecrow_front.png create mode 100644 textures/farming_scarecrow_front_light.png create mode 100644 textures/farming_scarecrow_side.png create mode 100644 textures/farming_scarecrow_top.png create mode 100644 textures/farming_weed.png create mode 100644 weed.lua diff --git a/README.txt b/README.txt index 96117dd..c7c6751 100644 --- a/README.txt +++ b/README.txt @@ -1,31 +1,6 @@ -===FARMING MOD for MINETEST-C55=== +===FARMING_PLUS MOD for MINETEST=== by PilzAdam -Extended Version - -Introduction: -This mod adds farming to Minetest. - -How to install: -Unzip the archive an place it in minetest-base-directory/mods/minetest/ -if you have a windows client or a linux run-in-place client. If you have -a linux system-wide instalation place it in ~/.minetest/mods/minetest/. -If you want to install this mod only in one world create the folder -worldmods/ in your worlddirectory. -For further information or help see: -http://wiki.minetest.com/wiki/Installing_Mods - -How to use the mod: -Craft a wood/stone/steel hoe: -material material - stick - stick -Dig dirt with it and turn it to soil. Water the soil and plant the seeds -you get by digging dirt with the hoe. Wait until the seeds are seasoned -and harvest them. When harvesting you will get the product and new seeds. -For further information or help see: -http://minetest.net/forum/viewtopic.php?id=2787 - License: Sourcecode: WTFPL (see below) Graphics: WTFPL (see below) diff --git a/init.lua b/init.lua index 8a2ec46..41d2c17 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,136 @@ +farming = {} + +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.env:get_node(pos).name ~= "farming:soil_wet" then + return + end + pos.y = pos.y+1 + if not minetest.env:get_node_light(pos) then + return + end + if minetest.env: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.env:set_node(pos, new_node) + end +} ) +end + +function farming:generate_tree(pos, trunk, leaves, underground, replacements) + pos.y = pos.y-1 + local nodename = minetest.env: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.env:get_node_light(pos) then + return + end + if ret or minetest.env:get_node_light(pos) < 8 then + return + end + + node = {name = ""} + for dy=1,4 do + pos.y = pos.y+dy + if minetest.env: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.env: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.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then + minetest.env:set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.env:set_node(pos, {name=name}) + end + end + end + elseif dx == 0 and dz == 0 and dy==4 then + if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then + minetest.env:set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.env:set_node(pos, {name=name}) + end + end + end + elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then + if minetest.env:get_node(pos).name == "air" then + minetest.env:set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.env:set_node(pos, {name=name}) + end + end + end + else + if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then + if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then + minetest.env:set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.env: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:wheat_seed"]=20, - ["farming:cotton_seed"]=30, ["farming:pumpkin_seed"]=60, ["farming_plus:strawberry_seed"]=30, ["farming_plus:rhubarb_seed"]=30, @@ -24,6 +154,11 @@ for lvl = 1, 6, 1 do }) end +minetest.register_alias("farming:cotton", "farming:cotton_3") +minetest.register_alias("farming:wheat_harvested", "farming:wheat") +minetest.register_alias("farming:dough", "farming:flour") + + -- ========= RUBBER ========= dofile(minetest.get_modpath("farming_plus").."/rubber.lua") @@ -50,3 +185,9 @@ 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") diff --git a/pumpkin.lua b/pumpkin.lua new file mode 100644 index 0000000..57fafe6 --- /dev/null +++ b/pumpkin.lua @@ -0,0 +1,482 @@ +minetest.register_craftitem(":farming:pumpkin_seed", { + description = "Pumpkin Seed", + inventory_image = "farming_pumpkin_seed.png", + on_place = function(itemstack, placer, pointed_thing) + local above = minetest.env:get_node(pointed_thing.above) + if above.name == "air" then + above.name = "farming:pumpkin_1" + minetest.env:set_node(pointed_thing.above, above) + itemstack:take_item(1) + return itemstack + end + end +}) + +minetest.register_node(":farming:pumpkin_1", { + paramtype = "light", + sunlight_propagates = true, + drawtype = "nodebox", + drop = "", + tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png"}, + node_box = { + type = "fixed", + fixed = { + {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + }, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node(":farming:pumpkin_2", { + paramtype = "light", + sunlight_propagates = true, + drawtype = "nodebox", + drop = "", + tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png"}, + node_box = { + type = "fixed", + fixed = { + {-0.35, -0.5, -0.35, 0.35, 0.2, 0.35} + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.35, -0.5, -0.35, 0.35, 0.2, 0.35} + }, + }, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node(":farming:pumpkin", { + description = "Pumpkin", + paramtype2 = "facedir", + tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png"}, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2}, + sounds = default.node_sound_wood_defaults(), + + on_punch = function(pos, node, puncher) + local tool = puncher:get_wielded_item():get_name() + if tool and tool == "default:sword_wood" or tool == "default:sword_stone" or tool == "default:sword_steel" then + node.name = "farming:pumpkin_face" + minetest.env:set_node(pos, node) + puncher:get_inventory():add_item("main", ItemStack("farming:pumpkin_seed")) + if math.random(1, 5) == 1 then + puncher:get_inventory():add_item("main", ItemStack("farming:pumpkin_seed")) + end + end + end +}) + +farming:add_plant("farming:pumpkin", {"farming:pumpkin_1", "farming:pumpkin_2"}, 80, 20) + +minetest.register_node(":farming:pumpkin_face", { + description = "Pumpkin", + paramtype2 = "facedir", + tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face.png"}, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node(":farming:pumpkin_face_light", { + description = "Pumpkin", + paramtype2 = "facedir", + light_source = LIGHT_MAX-2, + tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face_light.png"}, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:pumpkin_face_light", + recipe = {"farming:pumpkin_face", "default:torch"} +}) + +-- ========= BIG PUMPKIN ========= +minetest.register_node(":farming:big_pumpkin", { + description = "Big Pumpkin", + paramtype2 = "facedir", + tiles = {"farming_pumpkin_big_side.png"}, + selection_box = { + type = "fixed", + fixed = { + {-1, -0.5, -1, 1, 1.5, 1} + } + }, + groups = {choppy=1, oddly_breakable_by_hand=1, flammable=2}, + sounds = default.node_sound_wood_defaults(), + + after_place_node = function(pos, placer) + for dx=-1,1 do + for dy=0,1 do + for dz=-1,1 do + pos.x = pos.x+dx + pos.y = pos.y+dy + pos.z = pos.z+dz + if dx ~= 0 or dy ~= 0 or dz ~= 0 then + if minetest.env:get_node(pos).name ~= "air" then + pos.x = pos.x-dx + pos.y = pos.y-dy + pos.z = pos.z-dz + minetest.env:remove_node(pos) + minetest.after(0.1, function(placer) + local inv = placer:get_inventory() + local index = placer:get_wield_index() + inv:set_stack("main", index, ItemStack("farming:big_pumpkin")) + end, placer) + return + end + end + pos.x = pos.x-dx + pos.y = pos.y-dy + pos.z = pos.z-dz + end + end + end + for dy=0,1 do + pos.y = pos.y+dy + pos.z = pos.z+1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=2}) + pos.x = pos.x-1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=2}) + pos.x = pos.x+1 + pos.z = pos.z-2 + minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=4}) + pos.x = pos.x+1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=4}) + pos.z = pos.z+1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=3}) + pos.z = pos.z+1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=3}) + pos.z = pos.z-1 + pos.x = pos.x-2 + minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=1}) + pos.z = pos.z-1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=1}) + pos.z = pos.z+1 + pos.x = pos.x+1 + pos.y = pos.y-dy + end + pos.y = pos.y+1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_top"}) + end, + + after_destruct = function(pos, oldnode) + for dx=-1,1 do + for dy=0,1 do + for dz=-1,1 do + pos.x = pos.x+dx + pos.y = pos.y+dy + pos.z = pos.z+dz + local name = minetest.env:get_node(pos).name + if string.find(name, "farming:big_pumpkin") then + minetest.env:remove_node(pos) + end + pos.x = pos.x-dx + pos.y = pos.y-dy + pos.z = pos.z-dz + end + end + end + end +}) + +minetest.register_node(":farming:big_pumpkin_side", { + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + tiles = {"farming_pumpkin_big_top_side.png", "farming_pumpkin_big_side.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0, 0.5, 0.5, 0.5} + } + }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0} + } + }, + groups = {not_in_creative_inventory=1}, +}) +minetest.register_node(":farming:big_pumpkin_corner", { + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + tiles = {"farming_pumpkin_big_top_corner.png", "farming_pumpkin_big_side.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0, 0, 0.5, 0.5} + } + }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0} + } + }, + groups = {not_in_creative_inventory=1}, +}) + +minetest.register_node(":farming:big_pumpkin_top", { + paramtype = "light", + sunlight_propagates = true, + tiles = {"farming_pumpkin_big_top.png"}, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0} + } + }, + groups = {not_in_creative_inventory=1}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:big_pumpkin", + recipe = {"bucket:bucket_water", "farming:pumpkin"}, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"} + } +}) + +-- ========= SCARECROW ========= +local box1 = { + {-1, -8, -1, 1, 8, 1}, +} + +local box2 = { + {-1, -8, -1, 1, 8, 1}, + {-12, -8, -1, 12, -7, 1}, + {-5, -2, -5, 5, 8, 5} +} + +for j,list in ipairs(box1) do + for i,int in ipairs(list) do + list[i] = int/16 + end + box1[j] = list +end + +for j,list in ipairs(box2) do + for i,int in ipairs(list) do + list[i] = int/16 + end + box2[j] = list +end + +minetest.register_node(":farming:scarecrow", { + description = "Scarecrow", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + tiles = {"farming_scarecrow_top.png", "farming_scarecrow_top.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_front.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = box2 + }, + selection_box = { + type = "fixed", + fixed = { + {-12/16, -1.5, -0.5, 12/16, 0.5, 0.5} + } + }, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2}, + + after_place_node = function(pos, placer) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + pos.y = pos.y+1 + if minetest.env:get_node(pos).name ~= "air" then + pos.y = pos.y-1 + minetest.env:remove_node(pos) + minetest.after(0.1, function(placer) + local inv = placer:get_inventory() + local index = placer:get_wield_index() + inv:set_stack("main", index, ItemStack("farming:scarecrow")) + end, placer) + return + end + minetest.env:set_node(pos, node) + pos.y = pos.y-1 + node.name = "farming:scarecrow_bottom" + minetest.env:set_node(pos, node) + end, + + after_destruct = function(pos, oldnode) + pos.y = pos.y-1 + if minetest.env:get_node(pos).name == "farming:scarecrow_bottom" then + minetest.env:remove_node(pos) + end + end +}) + +minetest.register_node(":farming:scarecrow_bottom", { + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + tiles = {"default_wood.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = box1 + }, + groups = {not_in_creative_inventory=1}, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0} + } + } +}) + +minetest.register_craft({ + output = "farming:scarecrow", + recipe = { + {"", "farming:pumpkin_face", "",}, + {"default:stick", "default:stick", "default:stick",}, + {"", "default:stick", "",} + } +}) + +minetest.register_node(":farming:scarecrow_light", { + description = "Scarecrow", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + light_source = LIGHT_MAX-2, + tiles = {"farming_scarecrow_top.png", "farming_scarecrow_top.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_front_light.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = box2 + }, + selection_box = { + type = "fixed", + fixed = { + {-12/16, -1.5, -0.5, 12/16, 0.5, 0.5} + } + }, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2}, + + after_place_node = function(pos, placer) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + pos.y = pos.y+1 + if minetest.env:get_node(pos).name ~= "air" then + pos.y = pos.y-1 + minetest.env:remove_node(pos) + minetest.after(0.1, function(placer) + local inv = placer:get_inventory() + local index = placer:get_wield_index() + inv:set_stack("main", index, ItemStack("farming:scarecrow_light")) + end, placer) + return + end + minetest.env:set_node(pos, node) + pos.y = pos.y-1 + node.name = "farming:scarecrow_bottom" + minetest.env:set_node(pos, node) + end, + + after_destruct = function(pos, oldnode) + pos.y = pos.y-1 + if minetest.env:get_node(pos).name == "farming:scarecrow_bottom" then + minetest.env:remove_node(pos) + end + end +}) + +minetest.register_craft({ + output = "farming:scarecrow_light", + recipe = { + {"", "farming:pumpkin_face_light", "",}, + {"default:stick", "default:stick", "default:stick",}, + {"", "default:stick", "",} + } +}) + +--=============== +minetest.register_craftitem(":farming:pumpkin_bread", { + description = "Pumpkin Bread", + inventory_image = "farming_bread_pumpkin.png", + stack_max = 1, + on_use = minetest.item_eat(8) +}) + +minetest.register_craftitem(":farming:pumpkin_flour", { + description = "Pumpkin Flour", + inventory_image = "farming_cake_mix_pumpkin.png", +}) +minetest.register_alias("farming:pumpkin_cake_mix", "farming:pumpkin_flour") + +minetest.register_craft({ + output = "farming:pumpkin_flour", + type = "shapeless", + recipe = {"farming:flour", "farming:pumpkin"} +}) + +minetest.register_craft({ + type = "cooking", + output = "farming:pumpkin_bread", + recipe = "farming:pumpkin_flour", + cooktime = 10 +}) + + +-- ========= FUEL ========= +minetest.register_craft({ + type = "fuel", + recipe = "farming:pumpkin_seed", + burntime = 1 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:pumpkin", + burntime = 5 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:pumpkin_face", + burntime = 5 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:pumpkin_face_light", + burntime = 7 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:big_pumpkin", + burntime = 10 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:scarecrow", + burntime = 5 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:scarecrow_light", + burntime = 5 +}) diff --git a/textures/farming_bread_pumpkin.png b/textures/farming_bread_pumpkin.png new file mode 100644 index 0000000000000000000000000000000000000000..44db02e254c97d2d3ae003eb3192236258aeca54 GIT binary patch literal 511 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m1E01m1FT&pG+00007bV*G`2iyn` z5eysp4`Rds00DnVL_t(2&xMk|O9EjS$3GY4A{fdAq7Zl_2sIUvLP3KBbxr;ihcY5J{KhNjO^E`rW+x&Lq zWXSWVlsW>y*k4do^r0N+Xn;F zM!WBSfpRiruPp}2$r`l>C|2SCtj<-5h2iij!da%p&Z$VZXAMCo-fYYdKu*@kD-xRv z8pTQ+wP66zd^YL!ER<4572#`ty*j&(nVZ2e0 z3#JkQ@`^+zUFBt9QLMyiJoVXMZ;gZi#+{4P6ackhd~3u{2te3a3fl8Ce#D@Uwr-M5 zH@PT8el@vKl~PBzy))c7#lrjxeOrK^3;h=a@Chq7+kHZuO{4$-002ovPDHLkV1k^( B(3t=L literal 0 HcmV?d00001 diff --git a/textures/farming_cake_mix_pumpkin.png b/textures/farming_cake_mix_pumpkin.png new file mode 100644 index 0000000000000000000000000000000000000000..171e486703dae23880edc55c83aa53c49815ffc5 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf<4t_yy^;wD?EkL2`o-U3d7N_q9 zE#y07AW$1?@VoP-+hCRN?r?J?>Zx- zw{uDP-tX`3K5ekya`)!1AQ_37jaL)yN7}6qV^+BBsWnqHb!VwN%K|ygR}*j5T-4Fv zNSP&U>SWB|aJ@)LG$7@hzm|hdZ4<|h{?@b?QGQMz%3GwjzH4kvE8sdcLNEG}l)CqW4{wFP9d9r6zIUYS@41aNGm9LKy<>2wPfdG!ZI!M1 hN9QQT&yD+&^*tPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z4k0JvFreW800G!ZL_t(2&n=QmZX-t!1tYVvKV(ysX5bV1nm&PHKoTf5$*#(e7n(@}pV*rBXS=*q4$|FS1p|N#XP}GDf2r7s98qYxf733= z{2~>`EyLB1Z^U%D>P(bGR>cv0Z|keO>qZ=3QsMV^)U=t#zY%?>GK)5yDucG>4wW{| zww-gQ#-2NXOq=FTNh7;XXUfe?n=ujJU(y!QW>*{gVOR70S%~U}R3Mh)?)wwS@wDxn zMdk2*m-Uw{4V?j1Rei%hfXp3P8g0#S*J-uwOl5q9RM`19Boh@w?PR(^rM=E(CfZcB zf4++dl{!-yH6DNpT5r zO{PuSGCp>ZCe!IBQFc`43vFdUzu7c1U5GArDrrB6=zHw{A(qDtPyoLJF%Gd4qSzUr z-+<|D`D4}w*s3ZuGF&cAZLYEV{avS(?Bnwwy>w~Q(&nxFA?vTqRCjOl)>LS#KfI2} z@hpThlvC;MRe@N=$U^Ig=sRsCI|DnPDe#s7^ me)Fo5>4a!iRUGLZTmJ|1{4#PGCFczQ0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z4kI$X+a`zr00G!ZL_t(2&n=QmZX-t!1tYVvKV(ysX5bV1nm&PHKoTf5$*#(e7n(@}pV*rBXS=*q4$|FS1p|N#XP}GDf2r7s98qYxf733= z{2~>`EyLB1Z^U%D>P(bGR>cv0Z|keO>qZ=3QsMV^)U=t#zY%?>GK)5yDucG>4wW{| zww-gQ#-2NXOq=FTNh7;XXUfe?n=ujJU(y!QW>*{gVOR70S%~U}R3Mh)?)wwS@wDxn zMdk2*m-Uw{4V?j1Rei%hfXp3P8g0#S*J-uwOl5q9RM`19Boh@w?PR(^rM=E(CfZcB zf4++dl{!-yH6DNpT5r zO{PuSGCp>ZCe!IBQFc`43vFdUzu7c1U5GArDrrB6=zHw{A(qDtPyoLJF%Gd4qSzUr z-+<|D`D4}w*s3ZuGF&cAZLYEV{avS(?Bnwwy>w~Q(&nxFA?vTqRCjOl)>LS#KfI2} z@hpThlvC;MRe@N=$U^Ig=sRsCI|DnPDe#s7^ me)Fo5>4a!iRUGLZTmJ|1{4#PGCFczQ0000QL70(Y)*K0-AbW|YuPgf<4t_p$0iNrNGJrx0JzX3_Bre;Y zyXbq^K!oAI=kDaCstR=y(_JGM22Bizj=Ej=W5p5Qf|sw2-y6KU`{m!lSies(E|FI+ zNA|3peCWnsZ%xUsO8ZjuEE?U$$-ECVXlXd7|90#XR}-C9BSu zH*Z(nKbI6I5&Gqx@6)3qotYQwcmLfe`8IF*k$*RGzW%D|@luxWzL>W}$K==dV!p>- eTI=0hx$2`=cqu+RD0v&`SO!m5KbLh*2~7Y1%5)k4 literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_big_top_side.png b/textures/farming_pumpkin_big_top_side.png new file mode 100644 index 0000000000000000000000000000000000000000..e2eb1a75f5528df9ec7a863145c6e976cadd9427 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!2~4hMP3{LQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf9S(jzH51MA3$uJQd(o`pPl)Vq@9%puj$f z-fiBm+9Yx%PqS``c+bGX@P{+u%hYYmtlQWd%Gd+WUEUul(r{MkjNIYMkd3oyKRypV z)sykJ+_mD=lGIC89`%L)dN>Np*RqQ`rPo)kQ~qV`_@=QWWykMt*6#f+PpsUc7Z@*E zc=(&?FJTko+euf{f;746r~OoU@j=>yse^UR@(hNf@8`|bu?{dYJ}z}H;j{eY4HJxF TW;{9s3Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2o4PfAF2&=CIA2e07*naR4C6) zlD$qFQ51yd{Opf+jZIL5gp@K+_`Om`se^>6sCk|gya(wbMNvd#9Prw^_nv!B3S6Z9 zicd46p@%Og9~LRRAl%*U8Qen`rn;T{hmo@@LU4y zW;@6nRG&~3#S36u(jKJTEVxDqDjrd$k_Ks)X2w0r^h!}|zX2gu^$j5@WfSjwcf4nz@n&7cCRGO)$M+Dk33AeP#eYoG0#9z zKa9}+dooTjh?x2MQJ7+9-$A7y$A zCRG!qaFhaK4_tnITHS$&K3;ED_n@jLX)f0TkzB2J0I2FcL#gf{ik#jwm$ygX$Lr0J ztdEQO^a6kZz>fPo-Yx(<-gE%I-!%V2VgVox)5GWbqEA60A_y-Y)odAg$lIxU*9Qst z1k&(K&GN_3CoWc`?u7}`+QDKfp2q;81Huq)W)TIXQL+OZsgyK8T6jW+cD3g{NL7!& z6m5uvSYUf?dWONCK|}z20M#d+0AhQwh@ff);)sYcxg|*R5A%^NSJ;GpZU6uP07*qo IM6N<$f*3Odk^lez literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_face_light.png b/textures/farming_pumpkin_face_light.png new file mode 100644 index 0000000000000000000000000000000000000000..cef48664d85091313841b76e1ef9ba90b7028a10 GIT binary patch literal 632 zcmV-;0*C#HP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2o4Pk4eT0xBLDyb3Q0skR4C6) zlDlqGQ4mG>N!PG+ycfWtwGAo9@i*A#UsjCQZMbo%(z1t?g}jdW3sG zs!4c(wB7^ZTGiT3y+`EUdjKGvs&5b^@Wj>h+1X^%SDWX&bXV zf4V)6PY-tF>}YG$$6Ejl0JigU`Surp%k%F5uFk*y4~YeUG)xyS>Z2|NiHIP)cvO=` zOmJI!KxJ*0&v zWazZ^yauW2?k`0fA|V#oTAPkxup1B&0PjKd+!H`-w-ympO+XwGQAW1}Y5oD|YAJEa S?TTXn0000F6yYrJh%9Dc;1&j9Muu5)B!GhKC7!;n>~}c$c=VZi`d=vng(OQ{BTAg} zb8}PkN*J7rQWHy3QxwWGOEMJPJ$(bh8~Mb6iY9xyIEGl9PX6=%zdf^RLuaGY0jA_T znU9hafZ)g9pT^8U(46+Y-fB04xWW^o9o!+O%nS?+j0`t?`Y8Oih7AbZVm1~m?|g5+ z=`0TqPftax1IL3R$%||&uGAfP&zjR%x;*lMeTcDgPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2o4M)C7dfE1poj59cffpbVF}# zZDnqB0000007G(RVRU6=Aa`kWXdp*PO;BVmWd{HN0o+MMK~yNuEs{xY*`Bl9PR zB1|l{SpFF1b;C%MCzm(Y#aA$Ww=fax>Fr48+%` zv`Mtt&H8rO&3toi!=Ipx; zv#kr2@flKK%O8*oRCaB1(-kW1c{DT8rmE-rtB6pkBb8D84yaK6P{1yh_fw|lejep_ zonPosj@octD~|8If&Mmfo5zFHPPypY7=!e(^QEUM?KY-z7`fb(*v`JOUGhD7sZLGfe{;I=F zp8fqGy>x2B)W)^^F7uDd)bMEI+Ei$>-@T5={wRb6%Bghssz9uwCup4!=SG{!la4K8 z_8l>^-@j}&i8RrM?>4Q9<8O!vkQ*{SY9K N002ovPDHLkV1mDD8Lj{T literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_top.png b/textures/farming_pumpkin_top.png new file mode 100644 index 0000000000000000000000000000000000000000..edef2d94bd59cd02eeb0dbbec9206e6e638c9521 GIT binary patch literal 623 zcmV-#0+9WQP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2o4M)Dh!l7lmGw#9cffpbVF}# zZDnqB0000007G(RVRU6=Aa`kWXdp*PO;BVmWd{HN0oX}IK~yNuEs{%aBS#PgBeSwU zWK)!8;1m0rK7nCC5-2svuF8)Wn(bRe0D&j}{QXKiD}&0+^bd5yu5TQl*qZleyS!8m z(%oGJ1Aq)?po`9bso04eQE0k<(=N#TA{E9h!_|*(#B{mpOq4`c#SwjP>#Mu#MjT&K z;rDmcw3)`g5q+mJi#DAqgSO@ll{U?`opYzgo;!d{o90eQBfCy#%FRrhF%jQi(iYKX zR~!3bSM&W@i0Xz^AeQ6q`xD6VwC$Wl#xjIcW?97RA{R|ypG86EQB+ZQ|azifmp@JLhFd=J8dO913S+-?ueQF z`DL?3q=`2CKCLgxz&{WXAa`Vb$qu4^^Qw~RglJV&9O)ff{|EE@GIALu=M4Y=002ov JPDHLkV1n8|5Yqqv literal 0 HcmV?d00001 diff --git a/textures/farming_scarecrow_front.png b/textures/farming_scarecrow_front.png new file mode 100644 index 0000000000000000000000000000000000000000..364738fd6f3020f97686e0350c7b20cb01ebca52 GIT binary patch literal 634 zcmV-=0)_pFP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z3pEH~gop+J00H_*L_t(I%cYXfY7o*UA3{&Q4t(G zMd^ZNMupAB;*x#+Lb(RmfbuX1EVqg&Q}R)ay`F(oEHkn$S%&2J+1Mut5gz!F;qY~pJoa|c^$q4Crm@?(;u!a#9`FIE!%sKVr zJi=BM09M7qSr>@P2Kji1?bk5*1S2FmPe3Sa$K~i-|Hgy8c7tgWv*uMX(_;`0Tl+%* zP7fw*byB(q69vBTkw-d0{NjW`mX?13FJHho2MQqlC zMTn1YpDp&Fdhv;Seuh*I7>#rTvf&7O!v|AwLWdH#53(SF!$Ao)-I1^FG; UvMH`M-~a#s07*qoM6N<$f{x1#`2YX_ literal 0 HcmV?d00001 diff --git a/textures/farming_scarecrow_front_light.png b/textures/farming_scarecrow_front_light.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b3cf289b9525f2d4ae8004719a924434bb925a GIT binary patch literal 641 zcmV-{0)G98P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z3eCM9?yGOiu z+%jD1`TgH4`6;Hz&|0HYP$fXkA*7Ab8F_lnoA0eLf?B)hF)N*DWJzL`J&Ghk>Kvqv zaLOp1GtH=Gy*9a|U%yby12&*s3<9fE#uN$JAi`cuK`N#h+3AOjLyy1+3u(KozOEuI zMR67(tP<<*8f3$Se0a_@qegKAz}}xB&AU(x3XBu8_o{<11=4jfMZ&@M0K0OV?Cbt&SDS>+bOa0t#{?YW~;_1j+l4Ln9(i> zhsMhVV1fPMh(@qXJLs|+ECFz^Jz%pn<-sV9Xx1-^2*(AZ0cdX>(+HN?4~|$3mS}Gs zU;a?YO4Xl)`1tn8WDm;SPu%fRq;kM$WXUHz8DLjDFgXYXw#)l&{c41thdt)qG62mu z1rHFC{4_;+1C+18zc6NI_eYiepzge## b`A_`?RC(3*j&oOz00000NkvXXu0mjfqj(y4 literal 0 HcmV?d00001 diff --git a/textures/farming_scarecrow_side.png b/textures/farming_scarecrow_side.png new file mode 100644 index 0000000000000000000000000000000000000000..e22e84ba1dd15382c478abe92c35b03ffd9ba9f7 GIT binary patch literal 613 zcmV-r0-F7aP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z3pEq#;X&#E00HGmL_t(I%cYXfiqlXOhrfGsle9@2+Jab&2zD{dl)9MBJb~cC2XNs+ zpT~#s8QeOEf(}Jov?vw}g)mLpbn@?B7qy+VA_{)H1NS@p&bddtd^$4x;>F2V?gu%h zD$rV^b5Jgz8VG4)bU~Tl@ap4er=U(B_#C4%jdUee+o#GBq%J|)2&awGC3Qy)2jRZR z-@T=30ydyL3pPKsz*=rlrl9;V8WP7AvmP^=b^!_HHmCNZ|M0I(VsPDdab zU5eEL+wY;v9FXWD1);DVm&^CF+XNS*kWHG<^xBxs6$poFy?_Etu|@z@nju>OWfJ3b zdR&ac!x4sqknv=Oa6K?NmVbvI>m_%uGwhDLT`HiO3Z2C~><7R9!f+5GzJEYhB{EwQ z1{&%1$QKcI*QZ*=SiTRo$9Pg3VLX}9^xE4dX%0RhB;_(k`VlHnU`nLt0bsJ_{yl(r z{^ZQmk7&2he?>hS1P6x!@cPXc&QJS)l{aaE0;rDxaDLi9Sk#{hwhfLG?5JPqal`36 z-X<6h!h?s$?8NCj=JIOBv&U!q_`^YnRP00000NkvXXu0mjfYmf>R literal 0 HcmV?d00001 diff --git a/textures/farming_scarecrow_top.png b/textures/farming_scarecrow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..3a4addcd66f7399cedc6e9c415ff044c18ae5ec7 GIT binary patch literal 639 zcmV-_0)YLAP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z3p51=F2(u)00I9=L_t(I%YBniYZFlv#eeV3o0(=NGo%4&As{rXHl%`^euA!a*Nt1h zkDtV?Tm1rdBVwtdn1UEB1cJ#VGo3&0Jr`jnomf1(d%5>=IOkmP^7+_u4`rnRaFx@l zYt;Q3>iBWkYK(@1R{i?jXI`A20B}8-vJ3I%)kTZJ&F%7^p)5@vJPx4lFFY~tc@`H~ zU1E&E6rg;dyN8f2cJ+~}xZ`bc-t5RMO~}%O4_|JZrpXObO57;ISin>px?Y4*s$rF- z3F^~i*$7koO3)p^1yq1V;P??%=almVw^x8vTwZOpP-o)-S(?xZBFwidtZ;CY5Bd)2 z$5e|sPB+5s3CeX2z}a}Kh04-|(Qv@^WQsZfJ=a(-MRXlZI!6WpR_92si@P6Fu4Wwd zVkY35fXl z9iuB`zF-g=q~E8Q&2jfb^lFI{hTsM~Jw9x#RCPor6wd92!gvHQ;d!|tmC Z`~`sUPx#24YJ`L;$M*_CX>@2HM@dakSAh-}00051NklfLOTQsQV_b`<}95(!NFT^ zN`%M_fo@I_pB6GD)fRK4TnF#}`ch+;e$%`E_r3T3{@;5C{|O7=D)dlsLS_E~fcB?V zEpW;?fT?_C|AJW||Ax778icpa4?py@K*b3vPH@V(XL$g-R(DZxLZ_T#Do002ovPDHLkV1n!j{hR;* literal 0 HcmV?d00001 diff --git a/weed.lua b/weed.lua new file mode 100644 index 0000000..f7a31c3 --- /dev/null +++ b/weed.lua @@ -0,0 +1,40 @@ +minetest.register_node(":farming:weed", { + description = "Weed", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + drawtype = "plantlike", + tiles = {"farming_weed.png"}, + inventory_image = "farming_weed.png", + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+4/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults() +}) + +minetest.register_abm({ + nodenames = {"farming:soil_wet", "farming:soil"}, + interval = 50, + chance = 10, + action = function(pos, node) + if minetest.env:find_node_near(pos, 4, {"farming:scarecrow", "farming:scarecrow_light"}) ~= nil then + return + end + pos.y = pos.y+1 + if minetest.env:get_node(pos).name == "air" then + node.name = "farming:weed" + minetest.env:set_node(pos, node) + end + end +}) + +-- ========= FUEL ========= +minetest.register_craft({ + type = "fuel", + recipe = "farming:weed", + burntime = 1 +}) \ No newline at end of file