From 1043da0b527739c2ec1fb74c31e4ff6a74626395 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 21 Jan 2024 10:53:10 +0000 Subject: [PATCH 01/49] add screenshot.jpg --- screenshot.jpg | Bin 0 -> 300022 bytes screenshot.png | Bin 42499 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 screenshot.jpg delete mode 100644 screenshot.png diff --git a/screenshot.jpg b/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fd5c34121b3227465a83a15246ee91a96a3d8fc GIT binary patch literal 300022 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 S%U4w*1D=h>>Fs**Nf@>r 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 z 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 z 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νDV(0f4oRX)Eyy2k1#kox* zD59mAbUdP3l}P_d>7@sn%Lm#J{0axr;zb2)SvT)6ZXK}*DnCh%G@SBFzkYD(4eIC& z{0CzcAiM+YaAm((KuC-I4TcTT%fGKU*M~ER0kB}uxM595tVCY+DPjWjMQ$F*phajq7)aVenvEUF8val6nAQltVcTk+qV0XU0V=$D>nfKudeg5-1 z089p{2QCG=^*vmY4j^T4TD1HPtPh59rGYbQwSPWny?3ki}_oDz^#F$sIuDclk$z}W0R4>TrjsN%Y{{8!Ra45ve z%RXD4QdC;(P+>o8V_;dg*z6fD{iQ{EX}a_;wPJtp(0}X>!~2{2AiAZc8}ldx&3Mxt zrjLMS`wpq=5@hK4FzgQxf`uePiG{G;uPHXugUjz(=>ppccDo+7gXYrUlz6rfS*MH9 zh@K)3i^TE#+gYn^r7D6FOU24AzfbE{PZQZcJ&IH>84PHWR@6k4f>dy@EJB=fJt6fu z(yNhw#FVkXp{3||9JYjQceXV8M>;am>-8$|B?m7;6p>mSG_b&7iG zS;hNn!6d|ZhflsmSQg5+(9lWW9@E5FxgXL}oD?8I;BPM>Tt7XD6=GLv?!4;CwrV!+ zUI^DlTc{-wk?L3P=L|a|Na1M$t0VC9BOO#pI z5$aBJGLS%a=DA{IGw#w7sspiZLL*@`(88BL01)1c`-AcQ&Gg}pmb$&a0|>LnflDf} zZOjzt6xNun00@h6utD+p`dSWzJRQ{O`|D;1Zv1-@qK!(;)~Unic#6HE6I?F65R0ZK zB}%O#;aL`;m|hVQfVf69U>Jrdn>2 zIU)l%1=tk#JLV@O3s0vQoJz{>#*+XXij27UT3}U~L$d;rihkFSq>^~uXs+-CRTy=z zLwF_Vrc4$d4|juptRk$8?+~eWH+;;-_xJa>#_H(){?5mR$5A8R-$MVZ`!prL&(nH`-!X>icyg@^ExbRs>nEq$mx5HBxDw%(}1E1BqVVV zMd^a3sL>=t6u2sc0Rx*&hq!t=YfqyaK1oRp8v!*FkMjAJw#H-p(K7`FhQc_-S!e7h zTG}BDL3-lRjG-~R@)TjTl(K^neh}2Fy~JZCIs^kG^gV%Kpg;^z`Q;J(;NLY@#!RPo z0oh>qkhB~NgFyYen}<0g)M*P%7UdUC$>)eiSv*%5zCXVch8eXIib2Hg0t%3N zw*3r;?3#6A4-F0ygwcG$MogDj7)hbp5i0~438(z-u0Lp}hqMVZ?8o!@P+PBQ9Q6l? z)$QalCXZ0AZp℞1^eq+rXb`F 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 Date: Thu, 29 Feb 2024 17:06:28 +0000 Subject: [PATCH 02/49] set is_ground_content for all (thx SwissAlpS) --- compatibility.lua | 3 +++ crops/artichoke.lua | 1 + crops/asparagus.lua | 1 + crops/barley.lua | 2 ++ crops/beans.lua | 3 +++ crops/beetroot.lua | 1 + crops/blackberry.lua | 1 + crops/blueberry.lua | 1 + crops/cabbage.lua | 1 + crops/carrot.lua | 1 + crops/chili.lua | 1 + crops/cocoa.lua | 1 + crops/coffee.lua | 2 ++ crops/corn.lua | 1 + crops/cotton.lua | 3 +++ crops/cucumber.lua | 1 + crops/eggplant.lua | 1 + crops/garlic.lua | 2 ++ crops/ginger.lua | 1 + crops/grapes.lua | 3 +++ crops/hemp.lua | 4 ++++ crops/lettuce.lua | 1 + crops/melon.lua | 2 ++ crops/mint.lua | 2 ++ crops/onion.lua | 1 + crops/parsley.lua | 1 + crops/peas.lua | 1 + crops/pepper.lua | 2 ++ crops/pineapple.lua | 4 +++- crops/potato.lua | 1 + crops/pumpkin.lua | 5 +++++ crops/raspberry.lua | 1 + crops/rhubarb.lua | 1 + crops/rice.lua | 2 ++ crops/soy.lua | 3 +++ crops/spinach.lua | 1 + crops/strawberry.lua | 1 + crops/sunflower.lua | 2 ++ crops/tomato.lua | 1 + crops/vanilla.lua | 1 + crops/wheat.lua | 2 ++ food.lua | 4 ++++ init.lua | 4 +++- soil.lua | 4 ++++ 44 files changed, 80 insertions(+), 2 deletions(-) diff --git a/compatibility.lua b/compatibility.lua index e718ee5..687eee0 100644 --- a/compatibility.lua +++ b/compatibility.lua @@ -30,6 +30,7 @@ else fixed = {-0.2, -0.5, -0.2, 0.2, 0.2, 0.2} }, groups = {food_banana = 1, fleshy = 3, dig_immediate = 3, flammable = 2}, + is_ground_content = false, on_use = minetest.item_eat(2), sounds = farming.sounds.node_sound_leaves_defaults() }) @@ -42,6 +43,7 @@ else paramtype = "light", waving = 1, groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() }) @@ -88,6 +90,7 @@ else fixed = {-0.2, -0.3, -0.2, 0.2, 0.2, 0.2} }, groups = {food_orange = 1, fleshy = 3, dig_immediate = 3, flammable = 2}, + is_ground_content = false, on_use = minetest.item_eat(4), sounds = farming.sounds.node_sound_leaves_defaults() }) diff --git a/crops/artichoke.lua b/crops/artichoke.lua index d144e42..71fee98 100644 --- a/crops/artichoke.lua +++ b/crops/artichoke.lua @@ -27,6 +27,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/asparagus.lua b/crops/asparagus.lua index 770f1aa..0d60eeb 100644 --- a/crops/asparagus.lua +++ b/crops/asparagus.lua @@ -29,6 +29,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/barley.lua b/crops/barley.lua index 76eb963..b0a5ada 100644 --- a/crops/barley.lua +++ b/crops/barley.lua @@ -13,6 +13,7 @@ minetest.register_node("farming:seed_barley", { handy = 1, compostability = 48, seed = 1, snappy = 3, attached_node = 1, growing = 1 }, + is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", walkable = false, @@ -61,6 +62,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/beans.lua b/crops/beans.lua index 2462ae7..7f63d33 100644 --- a/crops/beans.lua +++ b/crops/beans.lua @@ -99,6 +99,7 @@ minetest.register_node("farming:beanpole", { drop = "farming:beanpole", selection_box = farming.select, groups = {handy = 1, snappy = 3, flammable = 2, attached_node = 1}, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), on_place = function(itemstack, placer, pointed_thing) @@ -190,6 +191,7 @@ local def = { handy = 1, snappy = 3, flammable = 3, not_in_creative_inventory = 1, attached_node = 1, growing = 1, plant = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } @@ -253,6 +255,7 @@ minetest.register_node("farming:beanbush", { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, compostability = 35, not_in_creative_inventory = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() }) diff --git a/crops/beetroot.lua b/crops/beetroot.lua index f025e51..b0de0d4 100644 --- a/crops/beetroot.lua +++ b/crops/beetroot.lua @@ -49,6 +49,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/blackberry.lua b/crops/blackberry.lua index 6dca0e6..1613acf 100644 --- a/crops/blackberry.lua +++ b/crops/blackberry.lua @@ -28,6 +28,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/blueberry.lua b/crops/blueberry.lua index 1370362..59e76a9 100644 --- a/crops/blueberry.lua +++ b/crops/blueberry.lua @@ -68,6 +68,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/cabbage.lua b/crops/cabbage.lua index c42bd22..f9f2248 100644 --- a/crops/cabbage.lua +++ b/crops/cabbage.lua @@ -26,6 +26,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/carrot.lua b/crops/carrot.lua index eb46bf4..89be97c 100644 --- a/crops/carrot.lua +++ b/crops/carrot.lua @@ -65,6 +65,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/chili.lua b/crops/chili.lua index 48afc47..081523e 100644 --- a/crops/chili.lua +++ b/crops/chili.lua @@ -67,6 +67,7 @@ local def = { handy = 1, snappy = 3, flammable = 4, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/cocoa.lua b/crops/cocoa.lua index cc3267f..3be63a7 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -158,6 +158,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, growing = 1, not_in_creative_inventory = 1, leafdecay = 1, leafdecay_drop = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), growth_check = function(pos, node_name) diff --git a/crops/coffee.lua b/crops/coffee.lua index ba34506..f598f8f 100644 --- a/crops/coffee.lua +++ b/crops/coffee.lua @@ -26,6 +26,7 @@ minetest.register_node("farming:coffee_cup", { fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} }, groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1}, + is_ground_content = false, on_use = minetest.item_eat(2, "vessels:drinking_glass"), sounds = farming.sounds.node_sound_glass_defaults() }) @@ -59,6 +60,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/corn.lua b/crops/corn.lua index 689ccc9..2fda30e 100644 --- a/crops/corn.lua +++ b/crops/corn.lua @@ -120,6 +120,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/cotton.lua b/crops/cotton.lua index e09381f..47d803d 100644 --- a/crops/cotton.lua +++ b/crops/cotton.lua @@ -17,6 +17,7 @@ minetest.register_node("farming:cotton_wild", { groups = { handy = 1, snappy = 3, attached_node = 1, flammable = 4, compostability = 60 }, + is_ground_content = false, drop = { items = { {items = {"farming:cotton"}, rarity = 2}, @@ -41,6 +42,7 @@ minetest.register_node("farming:seed_cotton", { compostability = 48, seed = 1, snappy = 3, attached_node = 1, flammable = 4, growing = 1 }, + is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", walkable = false, @@ -118,6 +120,7 @@ local def = { handy = 1, snappy = 3, flammable = 4, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/cucumber.lua b/crops/cucumber.lua index 577aff4..87df299 100644 --- a/crops/cucumber.lua +++ b/crops/cucumber.lua @@ -30,6 +30,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/eggplant.lua b/crops/eggplant.lua index b72eda4..5a9417f 100644 --- a/crops/eggplant.lua +++ b/crops/eggplant.lua @@ -28,6 +28,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/garlic.lua b/crops/garlic.lua index 3849ee5..bbf40ff 100644 --- a/crops/garlic.lua +++ b/crops/garlic.lua @@ -51,6 +51,7 @@ minetest.register_node("farming:garlic_braid", { "crops_garlic_braid.png" }, groups = {vessel = 1, dig_immediate = 3, flammable = 3, compostability = 65}, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), node_box = { type = "fixed", @@ -92,6 +93,7 @@ local def = { handy = 1, snappy = 3, flammable = 3, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/ginger.lua b/crops/ginger.lua index e94d995..77d1094 100644 --- a/crops/ginger.lua +++ b/crops/ginger.lua @@ -27,6 +27,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/grapes.lua b/crops/grapes.lua index 57fc283..84ad853 100644 --- a/crops/grapes.lua +++ b/crops/grapes.lua @@ -94,6 +94,7 @@ minetest.register_node("farming:trellis", { drop = "farming:trellis", selection_box = farming.select, groups = {handy = 1, snappy = 3, flammable = 2, attached_node = 1}, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), on_place = function(itemstack, placer, pointed_thing) @@ -185,6 +186,7 @@ local def = { handy = 1, snappy = 3, flammable = 3, not_in_creative_inventory = 1, attached_node = 1, growing = 1, plant = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } @@ -260,6 +262,7 @@ minetest.register_node("farming:grapebush", { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, compostability = 35 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() }) diff --git a/crops/hemp.lua b/crops/hemp.lua index 6cf2671..3b965ee 100644 --- a/crops/hemp.lua +++ b/crops/hemp.lua @@ -13,6 +13,7 @@ minetest.register_node("farming:seed_hemp", { handy = 1, compostability = 38, seed = 1, snappy = 3, attached_node = 1, growing = 1 }, + is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", walkable = false, @@ -118,6 +119,7 @@ minetest.register_node("farming:hemp_block", { axey = 1, handy = 1, snappy = 2, oddly_breakable_by_hand = 1, flammable = 2, compostability = 85 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), _mcl_hardness = 0.8, _mcl_blast_resistance = 1 @@ -186,6 +188,7 @@ minetest.register_node("farming:hemp_rope", { handy = 1, axey = 1, swordy = 1, flammable = 2, choppy = 3, oddly_breakable_by_hand = 3, compostability = 55 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), selection_box = { type = "fixed", @@ -220,6 +223,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/lettuce.lua b/crops/lettuce.lua index 3e555be..ed871b7 100644 --- a/crops/lettuce.lua +++ b/crops/lettuce.lua @@ -25,6 +25,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/melon.lua b/crops/melon.lua index 85a1af9..a6a5672 100644 --- a/crops/melon.lua +++ b/crops/melon.lua @@ -41,6 +41,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } @@ -83,6 +84,7 @@ minetest.register_node("farming:melon_8", { food_melon = 1, handy = 1, snappy = 3, choppy = 3, oddly_breakable_by_hand = 2, flammable = 2, plant = 1, compostability = 65 }, + is_ground_content = false, drop = "farming:melon_8", sounds = farming.sounds.node_sound_wood_defaults(), paramtype2 = "facedir", diff --git a/crops/mint.lua b/crops/mint.lua index f8afebb..69fc0dd 100644 --- a/crops/mint.lua +++ b/crops/mint.lua @@ -13,6 +13,7 @@ minetest.register_node("farming:seed_mint", { compostability = 48, seed = 1, snappy = 3, attached_node = 1, growing = 1, handy = 1, flammable = 2 }, + is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", walkable = false, @@ -68,6 +69,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/onion.lua b/crops/onion.lua index 08310c8..fc8ece3 100644 --- a/crops/onion.lua +++ b/crops/onion.lua @@ -61,6 +61,7 @@ local def = { handy = 1, snappy = 3, flammable = 3, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/parsley.lua b/crops/parsley.lua index 3ba3bf7..bb397de 100644 --- a/crops/parsley.lua +++ b/crops/parsley.lua @@ -26,6 +26,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/peas.lua b/crops/peas.lua index a3e7800..8274c1a 100644 --- a/crops/peas.lua +++ b/crops/peas.lua @@ -53,6 +53,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/pepper.lua b/crops/pepper.lua index e1f3a4c..f42dd13 100644 --- a/crops/pepper.lua +++ b/crops/pepper.lua @@ -60,6 +60,7 @@ minetest.register_node("farming:pepper_ground", { vessel = 1, food_pepper_ground = 1, dig_immediate = 3, attached_node = 1, compostability = 30 }, + is_ground_content = false, sounds = farming.sounds.node_sound_defaults(), selection_box = { type = "fixed", @@ -94,6 +95,7 @@ local def = { handy = 1, snappy = 3, flammable = 3, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/pineapple.lua b/crops/pineapple.lua index 32790c3..7fe6979 100644 --- a/crops/pineapple.lua +++ b/crops/pineapple.lua @@ -29,7 +29,8 @@ minetest.register_node("farming:pineapple", { groups = { food_pineapple = 1, fleshy = 3, dig_immediate = 3, flammable = 2, compostability = 65 - } + }, + is_ground_content = false }) -- pineapple @@ -94,6 +95,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/potato.lua b/crops/potato.lua index caaa72b..fe7a20c 100644 --- a/crops/potato.lua +++ b/crops/potato.lua @@ -71,6 +71,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/pumpkin.lua b/crops/pumpkin.lua index 617fb1c..971e1be 100644 --- a/crops/pumpkin.lua +++ b/crops/pumpkin.lua @@ -43,6 +43,7 @@ minetest.register_node("farming:jackolantern", { groups = { handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, + is_ground_content = false, sounds = farming.sounds.node_sound_wood_defaults(), on_punch = function(pos, node, puncher) local name = puncher:get_player_name() or "" @@ -69,6 +70,7 @@ minetest.register_node("farming:jackolantern_on", { handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, not_in_creative_inventory = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_wood_defaults(), drop = "farming:jackolantern", on_punch = function(pos, node, puncher) @@ -105,6 +107,7 @@ minetest.register_node("farming:scarecrow_bottom", { } }, groups = {axey = 1, handy = 1, snappy = 3, flammable = 2}, + is_ground_content = false, _mcl_hardness = 0.8, _mcl_blast_resistance = 1 }) @@ -160,6 +163,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } @@ -202,6 +206,7 @@ minetest.register_node("farming:pumpkin_8", { food_pumpkin = 1, snappy = 3, choppy = 3, oddly_breakable_by_hand = 2, flammable = 2, plant = 1, handy = 1 }, + is_ground_content = false, drop = "farming:pumpkin_8", sounds = farming.sounds.node_sound_wood_defaults(), paramtype2 = "facedir", diff --git a/crops/raspberry.lua b/crops/raspberry.lua index 0b16347..45e1c81 100644 --- a/crops/raspberry.lua +++ b/crops/raspberry.lua @@ -45,6 +45,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/rhubarb.lua b/crops/rhubarb.lua index ab22851..4af2ab8 100644 --- a/crops/rhubarb.lua +++ b/crops/rhubarb.lua @@ -46,6 +46,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), minlight = 10, maxlight = 12 diff --git a/crops/rice.lua b/crops/rice.lua index 372b2f4..433fbcf 100644 --- a/crops/rice.lua +++ b/crops/rice.lua @@ -13,6 +13,7 @@ minetest.register_node("farming:seed_rice", { handy = 1, compostability = 48, seed = 1, snappy = 3, attached_node = 1, flammable = 4, growing = 1 }, + is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", walkable = false, @@ -89,6 +90,7 @@ local def = { handy = 1, snappy = 3, flammable = 4, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/soy.lua b/crops/soy.lua index 8c38345..770e29e 100644 --- a/crops/soy.lua +++ b/crops/soy.lua @@ -32,6 +32,7 @@ minetest.register_node("farming:soy_sauce", { vessel = 1, food_soy_sauce = 1, dig_immediate = 3, attached_node = 1, compostability = 65 }, + is_ground_content = false, sounds = farming.sounds.node_sound_glass_defaults() }) @@ -66,6 +67,7 @@ minetest.register_node("farming:soy_milk", { vessel = 1, food_milk_glass = 1, dig_immediate = 3, attached_node = 1, drink = 1, compostability = 65 }, + is_ground_content = false, sounds = farming.sounds.node_sound_glass_defaults() }) @@ -131,6 +133,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/spinach.lua b/crops/spinach.lua index ed43ae9..9e2a4cc 100644 --- a/crops/spinach.lua +++ b/crops/spinach.lua @@ -27,6 +27,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/strawberry.lua b/crops/strawberry.lua index 2b52b92..1a664a2 100644 --- a/crops/strawberry.lua +++ b/crops/strawberry.lua @@ -32,6 +32,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/sunflower.lua b/crops/sunflower.lua index 15c62e0..1322b8b 100644 --- a/crops/sunflower.lua +++ b/crops/sunflower.lua @@ -20,6 +20,7 @@ minetest.register_node("farming:seed_sunflower", { compostability = 48, seed = 1, snappy = 3, attached_node = 1, growing = 1, handy = 1, food_sunflower_seeds = 1, flammable = 2 }, + is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", walkable = false, @@ -127,6 +128,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/tomato.lua b/crops/tomato.lua index 486a44c..23fc5c0 100644 --- a/crops/tomato.lua +++ b/crops/tomato.lua @@ -49,6 +49,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/vanilla.lua b/crops/vanilla.lua index 0d03bde..421a92a 100644 --- a/crops/vanilla.lua +++ b/crops/vanilla.lua @@ -28,6 +28,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/wheat.lua b/crops/wheat.lua index 8770c70..db83bf2 100644 --- a/crops/wheat.lua +++ b/crops/wheat.lua @@ -12,6 +12,7 @@ minetest.register_node("farming:seed_wheat", { groups = { handy = 1, seed = 1, snappy = 3, attached_node = 1, flammable = 4, growing = 1 }, + is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", walkable = false, @@ -127,6 +128,7 @@ local def = { snappy = 3, flammable = 4, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/food.lua b/food.lua index 9e8c523..fa1da47 100644 --- a/food.lua +++ b/food.lua @@ -136,6 +136,7 @@ minetest.register_node("farming:sugar_cube", { description = S("Sugar Cube"), tiles = {"farming_sugar_cube.png"}, groups = {shovely = 1, handy = 1, crumbly = 2}, + is_ground_content = false, floodable = true, sounds = farming.sounds.node_sound_gravel_defaults(), _mcl_hardness = 0.8, @@ -183,6 +184,7 @@ minetest.register_node("farming:salt", { tiles = {"farming_salt.png"}, groups = {food_salt = 1, vessel = 1, dig_immediate = 3, attached_node = 1}, + is_ground_content = false, sounds = farming.sounds.node_sound_defaults(), selection_box = { type = "fixed", @@ -251,6 +253,7 @@ minetest.register_node("farming:salt_crystal", { light_source = 1, tiles = {"farming_salt_crystal.png"}, groups = {dig_immediate = 3, attached_node = 1}, + is_ground_content = false, sounds = farming.sounds.node_sound_defaults(), selection_box = { type = "fixed", @@ -322,6 +325,7 @@ minetest.register_node("farming:rose_water", { groups = { food_rose_water = 1, vessel = 1, dig_immediate = 3, attached_node = 1 }, + is_ground_content = false, sounds = farming.sounds.node_sound_defaults(), selection_box = { type = "fixed", diff --git a/init.lua b/init.lua index 225ce51..e4e388b 100644 --- a/init.lua +++ b/init.lua @@ -7,7 +7,7 @@ farming = { mod = "redo", - version = "20231206", + version = "20240229", path = minetest.get_modpath("farming"), select = { type = "fixed", @@ -589,6 +589,7 @@ farming.register_plant = function(name, def) seed = 1, snappy = 3, attached_node = 1, flammable = 2, growing = 1, compostability = 65, handy = 1 }, + is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", walkable = false, @@ -674,6 +675,7 @@ farming.register_plant = function(name, def) drop = drop, selection_box = sel, groups = g, + is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), minlight = def.minlight, maxlight = def.maxlight, diff --git a/soil.lua b/soil.lua index d20cd57..5dc3513 100644 --- a/soil.lua +++ b/soil.lua @@ -78,6 +78,7 @@ if minetest.registered_nodes["default:dry_dirt"] then }, drop = "default:dry_dirt", groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 2, field = 1}, + is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { base = "default:dry_dirt", @@ -94,6 +95,7 @@ if minetest.registered_nodes["default:dry_dirt"] then }, drop = "default:dry_dirt", groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 3, field = 1}, + is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { base = "default:dry_dirt", @@ -111,6 +113,7 @@ minetest.register_node("farming:soil", { tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, drop = "default:dirt", groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 2, field = 1}, + is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { base = "default:dirt", @@ -128,6 +131,7 @@ minetest.register_node("farming:soil_wet", { }, drop = "default:dirt", groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 3, field = 1}, + is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { base = "default:dirt", From 9a2456b8878b3b0a3b7803acbba78852284238e1 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Tue, 12 Mar 2024 06:52:50 +0000 Subject: [PATCH 03/49] enable strawberry --- init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/init.lua b/init.lua index e4e388b..91977cf 100644 --- a/init.lua +++ b/init.lua @@ -7,7 +7,7 @@ farming = { mod = "redo", - version = "20240229", + version = "20240312", path = minetest.get_modpath("farming"), select = { type = "fixed", @@ -734,7 +734,7 @@ farming.artichoke = 0.001 farming.parsley = 0.002 farming.sunflower = 0.001 farming.ginger = 0.002 -farming.strawberry = not minetest.get_modpath("ethereal") and 0.002 +farming.strawberry = 0.002 farming.grains = true farming.rice = true From 9101901afebab81ce72e748f41281e1c2744ef99 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Tue, 19 Mar 2024 08:52:32 +0000 Subject: [PATCH 04/49] add hungarian locale (thx gabriel1379) --- locale/farming.hu.tr | 176 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 locale/farming.hu.tr diff --git a/locale/farming.hu.tr b/locale/farming.hu.tr new file mode 100644 index 0000000..9cf75c9 --- /dev/null +++ b/locale/farming.hu.tr @@ -0,0 +1,176 @@ +# textdomain: farming +Artichoke=Articsóka +Asparagus=Spárga +Barley Seed=Árpamag +Barley=Árpa +Green Beans=Zöldbab +Bean Pole (place on soil before planting beans)=Karó babhoz (szúrd a földbe és oda vess babot) +Beetroot=cékla +Beetroot Soup=céklaleves +Blackberries=Szeder +Wild Blueberries=Vadáfonya +Blueberry Muffin=Áfonyamuffin +Blueberry Pie=Áfonyatorta +Cabbage=Káposzta +Carrot=Répa +Carrot Juice=Répalé +Golden Carrot=Aranyrépa +Chili Pepper=Chilipaprika +Bowl of Chili=Chilis tál +Chili Powder=Chilipor +Raw Cocoa Beans=Nyers kakaóbab +Cocoa Beans=Kakaóbab +Cookie=Süti +Bar of Dark Chocolate=Rúd étcsoki +Chocolate Block=Csokiblokk +Coffee Beans=Kávébab +Cup of Coffee=Csésze kávé +Banana=Banán +Banana Leaves=Banánlevél +Orange=Narancs +Corn=Kukorica +Corn on the Cob=Főtt kukorica +Popcorn=Pattogatott kukorica +Cornstarch=Keményítő +Bottle of Ethanol=Üveg etanol +Wild Cotton=Vadgyapot +Cotton Seed=Gyapotmag +Cotton=Gyapot +String=Madzag +Cucumber=Uborka +Eggplant=Padlizsán +Glass of Water=Pohár víz +Sugar=Cukor +Sugar Cube=Kockacukor +Caramel=Karamell +Salt=Só +Mayonnaise=Majonéz +Rose Water=Rózsavíz +Turkish Delight=Török desszert +Garlic Bread=Fokhagymás kenyér +Donut=Fánk +Chocolate Donut=Csokis fánk +Apple Donut=Almás fánk +Porridge=Zabkása +Jaffa Cake=Jaffatorta +Apple Pie=Almáspita +Cactus Juice=Kaktuszlé +Pasta=Tészta +Mac & Cheese=Sajtos makaróni +Spaghetti=Spagetti +Bibimbap=Bibimbap +Burger=Burger +Salad=Saláta +Triple Berry Smoothie=Hárombogyós smoothie +Spanish Potatoes=Tepsis krumpli +Potato omelet=Krumplis rántotta +Paella=Paella +Vanilla Flan=Vaníliás gyümölcstorta +Vegan Cheese=Vegán sajt +Onigiri=Onigiri +Gyoza=Gyoza +Mochi=Mochi +Gingerbread Man=Mézeskalács-emberke +Garlic clove=Gerezd fokhagyma +Garlic=Fokhagyma +Garlic Braid=Fokhagymafüzér +Ginger=Gyömbér +Grapes=Szőlő +Trellis (place on soil before planting grapes)=Karó szőlőhöz (szúrd a földbe és oda vess babot) +Hemp Seed=Kendermag +Hemp Leaf=Kenderlevél +Bottle of Hemp Oil=Üveg kenderolaj +Hemp Fibre=Kenderrost +Hemp Block=Kenderblokk +Hemp Rope=Kenderkötél +Hoe=Kapa +Wooden Hoe=Fakapa +Stone Hoe=Kőkapa +Steel Hoe=Acélkapa +Bronze Hoe=Bronzkapa +Mese Hoe=Mesekapa +Diamond Hoe=Gyémántkapa +Wood Hoe=Fakapa (2) +Hoe Bomb (use or throw on grassy areas to hoe land)=Kapabomba (használd vagy dobd füves területre) +Mithril Scythe (Use to harvest and replant crops)=Mithrilkasza (használd termények begyűjtéséhez és újravetéséhez) +Seed=Mag +Lettuce=Saláta +Melon Slice=Szelet dinnye +Melon=Dinnye +Mint Seeds=Mentamag +Mint Leaf=Mentalevél +Mint Tea=Mentatea +Onion=Hagyma +Onion Soup=Hagymaleves +Parsley=Petrezselyem +Pea Pod=Hüvelyes borsó +Pea Soup=Borsóleves +Peppercorn=Borsszemek +Green Pepper=Zöldpaprika +Yellow Pepper=Sárga paprika +Red Pepper=Pirospaprika +Ground Pepper=Őrölt bors +Pineapple Top=Ananászüstök +Pineapple=Ananász +Pineapple Ring=Szelet ananász +Pineapple Juice=Ananászlé +Potato=Krumpli +Baked Potato=Sült krumpli +Cucumber and Potato Salad=Uborkás krumplisaláta +Pumpkin Slice=Szelet tök +Jack 'O Lantern (punch to turn on and off)=Töklámpás (ütéssel kapcsold ki és be) +Scarecrow Bottom=Madárijesztő alja +Pumpkin Bread=Tökkenyér +Pumpkin Dough=Töktészta +Pumpkin=Tök +Raspberries=Málna +Raspberry Smoothie=Málnasmoothie +Rhubarb=Rebarbara +Rhubarb Pie=Rebarbaratorta +Rice Seed=Rizsmag +Rice=Rizs +Rice Bread=Rizskenyér +Rice Flour=Rizsliszt +Rye seed=Rozsmag +Rye=Rozs +Oat seed=Zabmag +Oats=Zab +Multigrain Flour=Vegyesliszt +Multigrain Bread=Vegyesliszt-kenyér +Savanna Soil=Szavannatalaj +Wet Savanna Soil=Nedves szavannatalaj +Soil=Talaj +Wet Soil=Nedves talaj +Soy Pod=Hüvelyes szója +Soy Sauce=Szójaszósz +Soy Milk=Szójatej +Tofu=Tofu +Cooked Tofu=Főtt tofu +Spinach=Spenót +Strawberry=Eper +Sunflower=Napraforgó +Sunflower Seeds=Napraforgómag +Toasted Sunflower Seeds=Szotyi +Bottle of Sunflower Oil=Üveg napraforgó-olaj +Sunflower Seed Bread=Napraforgómagos kenyér +Tomato=Paradicsom +Tomato Soup=Paradicsomleves +Wooden Bowl=Fatál +Saucepan=Szószostál +Cooking Pot=Főzőedény +Baking Tray=Sütőtál +Skillet=Serpenyő +Mortar and Pestle=Mozsár +Cutting Board=Vágódeszka +Juicer=Facsaró +Glass Mixing Bowl=Üver keverőedény +Vanilla=Vanília +Vanilla Extract=Vaníliakivonat +Wheat Seed=Búzamag +Wheat=Búza +Straw=Szívószál +Flour=Liszt +Bread=Kenyér +Sliced Bread=Szeletelt kenyér +Toast=Pirítós +Toast Sandwich=Pirítósszendvics From c59162149da3fa9b2316562dabcabcce1919978c Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Thu, 28 Mar 2024 13:25:02 +0000 Subject: [PATCH 05/49] check for dirt_with_dry_grass before override to help with VoxelGarden issue --- soil.lua | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/soil.lua b/soil.lua index 5dc3513..2d5c4d2 100644 --- a/soil.lua +++ b/soil.lua @@ -23,13 +23,16 @@ minetest.override_item("default:dirt_with_grass", { } }) -minetest.override_item("default:dirt_with_dry_grass", { - soil = { - base = "default:dirt_with_dry_grass", - dry = "farming:soil", - wet = "farming:soil_wet" - } -}) +if minetest.registered_nodes["default:dirt_with_dry_grass"] then + + minetest.override_item("default:dirt_with_dry_grass", { + soil = { + base = "default:dirt_with_dry_grass", + dry = "farming:soil", + wet = "farming:soil_wet" + } + }) +end minetest.override_item("default:dirt_with_rainforest_litter", { soil = { From 37ea21fdaf57b7658b99019c86dad8fed5ded8ca Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 22 Apr 2024 11:15:13 +0100 Subject: [PATCH 06/49] all grass have the chance of dropping seeds --- grass.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grass.lua b/grass.lua index 21c424c..5673d00 100644 --- a/grass.lua +++ b/grass.lua @@ -3,7 +3,7 @@ if minetest.registered_nodes["default:grass_1"] then - for i = 4, 5 do + for i = 1, 5 do minetest.override_item("default:grass_" .. i, { drop = { @@ -20,7 +20,7 @@ end if minetest.registered_nodes["default:dry_grass_1"] then - for i = 4, 5 do + for i = 1, 5 do minetest.override_item("default:dry_grass_" .. i, { drop = { From e33dd0e2755d42ba26fed7db3bc62f8ffafd17b8 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 22 Apr 2024 15:03:09 +0100 Subject: [PATCH 07/49] seed drops from short grass more rare (thx skaapdev) --- grass.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/grass.lua b/grass.lua index 5673d00..85c3cb2 100644 --- a/grass.lua +++ b/grass.lua @@ -1,6 +1,8 @@ -- Override grasses to drop seeds +local rarity_lookup = {[1] = 50, [2] = 50, [3] = 50, [4] = 5, [5] = 5} + if minetest.registered_nodes["default:grass_1"] then for i = 1, 5 do @@ -9,8 +11,8 @@ if minetest.registered_nodes["default:grass_1"] then drop = { max_items = 1, items = { - {items = {"farming:seed_wheat"}, rarity = 5}, - {items = {"farming:seed_oat"},rarity = 5}, + {items = {"farming:seed_wheat"}, rarity = rarity_lookup[i]}, + {items = {"farming:seed_oat"},rarity = rarity_lookup[i]}, {items = {"default:grass_1"}} } } @@ -26,8 +28,8 @@ if minetest.registered_nodes["default:dry_grass_1"] then drop = { max_items = 1, items = { - {items = {"farming:seed_barley"}, rarity = 5}, - {items = {"farming:seed_rye"}, rarity = 5}, + {items = {"farming:seed_barley"}, rarity = rarity_lookup[i]}, + {items = {"farming:seed_rye"}, rarity = rarity_lookup[i]}, {items = {"default:dry_grass_1"}} } } From 433d485292a6a6ef8beff20ee9d56dee1088af1d Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 9 Jun 2024 07:33:19 +0100 Subject: [PATCH 08/49] use async env support when generating cocoa pods (thx Niklp) --- crops/cocoa.lua | 49 +++++-------------------------------- crops/cocoa_mapgen.lua | 55 ++++++++++++++++++++++++++++++++++++++++++ init.lua | 2 +- 3 files changed, 62 insertions(+), 44 deletions(-) create mode 100644 crops/cocoa_mapgen.lua diff --git a/crops/cocoa.lua b/crops/cocoa.lua index 3be63a7..1032b49 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -210,46 +210,9 @@ farming.registered_plants["farming:cocoa_beans"] = { steps = 4 } --- localize math.random for speed -local random = math.random - --- add random cocoa pods to jungle tree's -minetest.register_on_generated(function(minp, maxp) - - if maxp.y < 0 then - return - end - - local pos, dir - local cocoa = minetest.find_nodes_in_area(minp, maxp, - {"default:jungletree", "mcl_core:jungletree"}) - - for n = 1, #cocoa do - - pos = cocoa[n] - - if minetest.find_node_near(pos, 1, - {"default:jungleleaves", "moretrees:jungletree_leaves_green", - "mcl_core:jungleleaves"}) then - - dir = random(80) - - if dir == 1 then pos.x = pos.x + 1 - elseif dir == 2 then pos.x = pos.x - 1 - elseif dir == 3 then pos.z = pos.z + 1 - elseif dir == 4 then pos.z = pos.z -1 - end - - if dir < 5 - and minetest.get_node(pos).name == "air" - and minetest.get_node_light(pos) > 12 then - ---print ("Cocoa Pod added at " .. minetest.pos_to_string(pos)) - - minetest.swap_node(pos, { - name = "farming:cocoa_" .. tostring(random(4)) - }) - end - end - end -end) +-- register async mapgen script +if minetest.register_mapgen_script then + minetest.register_mapgen_script(farming.path .. "/crops/cocoa_mapgen.lua") +else + dofile(farming.path .. "/crops/cocoa_mapgen.lua") +end diff --git a/crops/cocoa_mapgen.lua b/crops/cocoa_mapgen.lua new file mode 100644 index 0000000..7b33dcb --- /dev/null +++ b/crops/cocoa_mapgen.lua @@ -0,0 +1,55 @@ +-- Localize things for speed +local random = math.random +local jungletree_nodes = {"default:jungletree", "mcl_core:jungletree"} +local jungletree_leaves = { + "default:jungleleaves", "moretrees:jungletree_leaves_green", "mcl_core:jungleleaves"} + +-- Add random cocoa pods to jungle tree's +local function generate(vmanip, minp, maxp) + + if maxp.y < 0 then + return + end + + local min, max = vmanip:get_emerged_area() + local area = VoxelArea:new({MinEdge = min, MaxEdge = max}) + local data = vmanip:get_light_data() + local cocoa = minetest.find_nodes_in_area(minp, maxp, jungletree_nodes) + + for n = 1, #cocoa do + + local pos = cocoa[n] + + if minetest.find_node_near(pos, 1, jungletree_leaves) then + + local dir = random(80) + + if dir == 1 then pos.x = pos.x + 1 + elseif dir == 2 then pos.x = pos.x - 1 + elseif dir == 3 then pos.z = pos.z + 1 + elseif dir == 4 then pos.z = pos.z -1 + end + + if dir < 5 and minetest.get_node(pos).name == "air" then + + local index = area:index(pos.x, pos.y, pos.z) + + if data[index] > 12 then -- light at pos > 12 + + minetest.set_node(pos, {name = "farming:cocoa_" .. random(4)}) +--print("Cocoa Pod added at " .. minetest.pos_to_string(pos)) + end + end + end + end +end + +if minetest.save_gen_notify then -- async env (5.9+) + minetest.register_on_generated(function(vmanip, minp, maxp, blockseed) + generate(vmanip, minp, maxp) + end) +else -- main thread (5.8 and earlier) + minetest.register_on_generated(function(minp, maxp, blockseed) + generate(minetest.get_mapgen_object("voxelmanip"), minp, maxp) + end) +end diff --git a/init.lua b/init.lua index 91977cf..5c1fe31 100644 --- a/init.lua +++ b/init.lua @@ -7,7 +7,7 @@ farming = { mod = "redo", - version = "20240312", + version = "20240609", path = minetest.get_modpath("farming"), select = { type = "fixed", From 0349a7a6f1baf97363f9bccfad4d2f12cbd231e5 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Wed, 12 Jun 2024 07:31:41 +0100 Subject: [PATCH 09/49] re-add bronze hoe recipe --- hoes.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hoes.lua b/hoes.lua index 9dc8d2f..b548197 100644 --- a/hoes.lua +++ b/hoes.lua @@ -168,8 +168,9 @@ farming.register_hoe(":farming:hoe_steel", { farming.register_hoe(":farming:hoe_bronze", { description = S("Bronze Hoe"), inventory_image = "farming_tool_bronzehoe.png", - max_uses = 500, - groups = {not_in_creative_inventory = 1} + max_uses = 250, + groups = {not_in_creative_inventory = 1}, + material = "default:bronze_ingot" }) farming.register_hoe(":farming:hoe_mese", { From 8bd129309c48290972f29b86fe9336c5008af046 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Thu, 20 Jun 2024 11:21:41 +0100 Subject: [PATCH 10/49] update api.txt --- api.txt | 4 ++-- crops/cocoa.lua | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/api.txt b/api.txt index b9d5cff..2500df3 100644 --- a/api.txt +++ b/api.txt @@ -20,7 +20,6 @@ The farming API allows you to easily register plants and hoes. ### Hoe Definition - { description = "My Hoe", -- Description for tooltip inventory_image = "unknown_item.png", -- Image to be used as wield- and inventory image @@ -42,6 +41,7 @@ The farming API allows you to easily register plants and hoes. -- ^ Always provide a plant texture for each step, format: modname_plantname_i.png (i = stepnumber) minlight = 13, -- Minimum light to grow maxlight = minetest.LIGHT_MAX -- Maximum light to grow + can_grow = function(pos) -- Called every growth tick to check if plant can grow returning True if needs are met (optional, defaults to checking for wet soil below plant). } Note: Any crops registered with the above function will use the new growing routines, also if crops are manually added with the {growing=1} group they will also grow. @@ -50,7 +50,7 @@ Note: Any crops registered with the above function will use the new growing rout If a mod registers nodes to be used as crops using the {growing=1} group then an additional function can be used for custom growth checks instead of the standard 'are we above wet soil'. -growth_check = function(pos, node_name) +growth_check = function(pos, [node_name]) -- check surrounding for jungle tree if minetest.find_node_near(pos, 1, {"default:jungletree"}) then return true -- place next growth stage diff --git a/crops/cocoa.lua b/crops/cocoa.lua index 1032b49..e67ad1d 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -160,6 +160,8 @@ local def = { }, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), + + -- custom function to check for growing conditions, returning True when found growth_check = function(pos, node_name) if minetest.find_node_near(pos, 1, From ac4c4f48d3ae7671aecda132ce50cf64658d534c Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 24 Jun 2024 07:41:40 +0100 Subject: [PATCH 11/49] add mt5.9x new farming.can_grow default function and check, deprecate but still run growth_check function --- api.txt | 2 +- init.lua | 28 +++++++++++++++++++--------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/api.txt b/api.txt index 2500df3..eb25cb9 100644 --- a/api.txt +++ b/api.txt @@ -50,7 +50,7 @@ Note: Any crops registered with the above function will use the new growing rout If a mod registers nodes to be used as crops using the {growing=1} group then an additional function can be used for custom growth checks instead of the standard 'are we above wet soil'. -growth_check = function(pos, [node_name]) +growth_check = function(pos, [node_name]) [DEPRECATED for above can_grow function] -- check surrounding for jungle tree if minetest.find_node_near(pos, 1, {"default:jungletree"}) then return true -- place next growth stage diff --git a/init.lua b/init.lua index 5c1fe31..491e429 100644 --- a/init.lua +++ b/init.lua @@ -7,7 +7,7 @@ farming = { mod = "redo", - version = "20240609", + version = "20240624", path = minetest.get_modpath("farming"), select = { type = "fixed", @@ -360,6 +360,12 @@ minetest.register_abm({ }) +-- check if on wet soil +farming.can_grow = function(pos) + local below = minetest.get_node({x = pos.x, y = pos.y -1, z = pos.z}) + return minetest.get_item_group(below.name, "soil") >= 3 +end + -- Plant timer function that grows plants under the right conditions. function farming.plant_growth_timer(pos, elapsed, node_name) @@ -375,22 +381,26 @@ function farming.plant_growth_timer(pos, elapsed, node_name) return false end - -- custom growth check - local chk = minetest.registered_nodes[node_name].growth_check + local chk1 = minetest.registered_nodes[node_name].growth_check -- old + local chk2 = minetest.registered_nodes[node_name].can_grow -- new - if chk then + -- custom farming redo growth_check function + if chk1 then - if not chk(pos, node_name) then + if not chk1(pos, node_name) then return true end - -- otherwise check for wet soil beneath crop - else - local under = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + -- custom mt 5.9x farming can_grow function + elseif chk2 then - if minetest.get_item_group(under.name, "soil") < 3 then + if not chk2(pos) then return true end + + -- default mt 5.9x farming.can_grow function + elseif not farming.can_grow(pos) then + return true end local growth From 877f9446415eda73bc0c3d8132723dd0d04f13af Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Tue, 25 Jun 2024 17:29:31 +0100 Subject: [PATCH 12/49] fix _mcl_hardness values for crops and seeds --- crops/artichoke.lua | 1 + crops/asparagus.lua | 1 + crops/barley.lua | 2 ++ crops/beans.lua | 1 + crops/beetroot.lua | 1 + crops/blackberry.lua | 1 + crops/blueberry.lua | 1 + crops/cabbage.lua | 1 + crops/carrot.lua | 1 + crops/chili.lua | 1 + crops/cocoa.lua | 1 + crops/coffee.lua | 1 + crops/corn.lua | 1 + crops/cotton.lua | 3 +++ crops/cucumber.lua | 1 + crops/eggplant.lua | 1 + crops/garlic.lua | 1 + crops/ginger.lua | 1 + crops/grapes.lua | 1 + crops/hemp.lua | 2 ++ crops/lettuce.lua | 1 + crops/melon.lua | 1 + crops/mint.lua | 2 ++ crops/onion.lua | 1 + crops/parsley.lua | 1 + crops/peas.lua | 1 + crops/pepper.lua | 1 + crops/pineapple.lua | 2 ++ crops/potato.lua | 1 + crops/pumpkin.lua | 1 + crops/raspberry.lua | 1 + crops/rhubarb.lua | 1 + crops/rice.lua | 2 ++ crops/soy.lua | 1 + crops/spinach.lua | 1 + crops/strawberry.lua | 1 + crops/sunflower.lua | 2 ++ crops/tomato.lua | 1 + crops/vanilla.lua | 1 + crops/wheat.lua | 2 ++ init.lua | 7 +++++-- 41 files changed, 54 insertions(+), 2 deletions(-) diff --git a/crops/artichoke.lua b/crops/artichoke.lua index 71fee98..7b5f037 100644 --- a/crops/artichoke.lua +++ b/crops/artichoke.lua @@ -27,6 +27,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/asparagus.lua b/crops/asparagus.lua index 0d60eeb..ed4f74f 100644 --- a/crops/asparagus.lua +++ b/crops/asparagus.lua @@ -29,6 +29,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/barley.lua b/crops/barley.lua index b0a5ada..ec189e9 100644 --- a/crops/barley.lua +++ b/crops/barley.lua @@ -13,6 +13,7 @@ minetest.register_node("farming:seed_barley", { handy = 1, compostability = 48, seed = 1, snappy = 3, attached_node = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", @@ -62,6 +63,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/beans.lua b/crops/beans.lua index 7f63d33..d36eb9b 100644 --- a/crops/beans.lua +++ b/crops/beans.lua @@ -191,6 +191,7 @@ local def = { handy = 1, snappy = 3, flammable = 3, not_in_creative_inventory = 1, attached_node = 1, growing = 1, plant = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/beetroot.lua b/crops/beetroot.lua index b0de0d4..d13bdd1 100644 --- a/crops/beetroot.lua +++ b/crops/beetroot.lua @@ -49,6 +49,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/blackberry.lua b/crops/blackberry.lua index 1613acf..5fa761d 100644 --- a/crops/blackberry.lua +++ b/crops/blackberry.lua @@ -28,6 +28,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/blueberry.lua b/crops/blueberry.lua index 59e76a9..3e51086 100644 --- a/crops/blueberry.lua +++ b/crops/blueberry.lua @@ -68,6 +68,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/cabbage.lua b/crops/cabbage.lua index f9f2248..8df4390 100644 --- a/crops/cabbage.lua +++ b/crops/cabbage.lua @@ -26,6 +26,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/carrot.lua b/crops/carrot.lua index 89be97c..505be22 100644 --- a/crops/carrot.lua +++ b/crops/carrot.lua @@ -65,6 +65,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/chili.lua b/crops/chili.lua index 081523e..db6764e 100644 --- a/crops/chili.lua +++ b/crops/chili.lua @@ -67,6 +67,7 @@ local def = { handy = 1, snappy = 3, flammable = 4, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/cocoa.lua b/crops/cocoa.lua index e67ad1d..b252c55 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -158,6 +158,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, growing = 1, not_in_creative_inventory = 1, leafdecay = 1, leafdecay_drop = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), diff --git a/crops/coffee.lua b/crops/coffee.lua index f598f8f..460fefb 100644 --- a/crops/coffee.lua +++ b/crops/coffee.lua @@ -60,6 +60,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/corn.lua b/crops/corn.lua index 2fda30e..302e42b 100644 --- a/crops/corn.lua +++ b/crops/corn.lua @@ -120,6 +120,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/cotton.lua b/crops/cotton.lua index 47d803d..9a83d3e 100644 --- a/crops/cotton.lua +++ b/crops/cotton.lua @@ -17,6 +17,7 @@ minetest.register_node("farming:cotton_wild", { groups = { handy = 1, snappy = 3, attached_node = 1, flammable = 4, compostability = 60 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, drop = { items = { @@ -42,6 +43,7 @@ minetest.register_node("farming:seed_cotton", { compostability = 48, seed = 1, snappy = 3, attached_node = 1, flammable = 4, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", @@ -120,6 +122,7 @@ local def = { handy = 1, snappy = 3, flammable = 4, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/cucumber.lua b/crops/cucumber.lua index 87df299..a9b5b80 100644 --- a/crops/cucumber.lua +++ b/crops/cucumber.lua @@ -30,6 +30,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/eggplant.lua b/crops/eggplant.lua index 5a9417f..29279a4 100644 --- a/crops/eggplant.lua +++ b/crops/eggplant.lua @@ -28,6 +28,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/garlic.lua b/crops/garlic.lua index bbf40ff..81d94de 100644 --- a/crops/garlic.lua +++ b/crops/garlic.lua @@ -93,6 +93,7 @@ local def = { handy = 1, snappy = 3, flammable = 3, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/ginger.lua b/crops/ginger.lua index 77d1094..3534314 100644 --- a/crops/ginger.lua +++ b/crops/ginger.lua @@ -27,6 +27,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/grapes.lua b/crops/grapes.lua index 84ad853..f13226e 100644 --- a/crops/grapes.lua +++ b/crops/grapes.lua @@ -186,6 +186,7 @@ local def = { handy = 1, snappy = 3, flammable = 3, not_in_creative_inventory = 1, attached_node = 1, growing = 1, plant = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/hemp.lua b/crops/hemp.lua index 3b965ee..6b6bbcf 100644 --- a/crops/hemp.lua +++ b/crops/hemp.lua @@ -13,6 +13,7 @@ minetest.register_node("farming:seed_hemp", { handy = 1, compostability = 38, seed = 1, snappy = 3, attached_node = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", @@ -223,6 +224,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/lettuce.lua b/crops/lettuce.lua index ed871b7..92b1b9e 100644 --- a/crops/lettuce.lua +++ b/crops/lettuce.lua @@ -25,6 +25,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/melon.lua b/crops/melon.lua index a6a5672..a3d31ea 100644 --- a/crops/melon.lua +++ b/crops/melon.lua @@ -41,6 +41,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/mint.lua b/crops/mint.lua index 69fc0dd..9c0ff2d 100644 --- a/crops/mint.lua +++ b/crops/mint.lua @@ -13,6 +13,7 @@ minetest.register_node("farming:seed_mint", { compostability = 48, seed = 1, snappy = 3, attached_node = 1, growing = 1, handy = 1, flammable = 2 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", @@ -69,6 +70,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/onion.lua b/crops/onion.lua index fc8ece3..9042aab 100644 --- a/crops/onion.lua +++ b/crops/onion.lua @@ -61,6 +61,7 @@ local def = { handy = 1, snappy = 3, flammable = 3, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/parsley.lua b/crops/parsley.lua index bb397de..58cb572 100644 --- a/crops/parsley.lua +++ b/crops/parsley.lua @@ -26,6 +26,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/peas.lua b/crops/peas.lua index 8274c1a..511037d 100644 --- a/crops/peas.lua +++ b/crops/peas.lua @@ -53,6 +53,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/pepper.lua b/crops/pepper.lua index f42dd13..7e99fc7 100644 --- a/crops/pepper.lua +++ b/crops/pepper.lua @@ -95,6 +95,7 @@ local def = { handy = 1, snappy = 3, flammable = 3, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/pineapple.lua b/crops/pineapple.lua index 7fe6979..5a5f9a4 100644 --- a/crops/pineapple.lua +++ b/crops/pineapple.lua @@ -30,6 +30,7 @@ minetest.register_node("farming:pineapple", { food_pineapple = 1, fleshy = 3, dig_immediate = 3, flammable = 2, compostability = 65 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false }) @@ -95,6 +96,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/potato.lua b/crops/potato.lua index fe7a20c..3de9678 100644 --- a/crops/potato.lua +++ b/crops/potato.lua @@ -71,6 +71,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/pumpkin.lua b/crops/pumpkin.lua index 971e1be..26611c8 100644 --- a/crops/pumpkin.lua +++ b/crops/pumpkin.lua @@ -163,6 +163,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/raspberry.lua b/crops/raspberry.lua index 45e1c81..3bf543c 100644 --- a/crops/raspberry.lua +++ b/crops/raspberry.lua @@ -45,6 +45,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/rhubarb.lua b/crops/rhubarb.lua index 4af2ab8..8933b3f 100644 --- a/crops/rhubarb.lua +++ b/crops/rhubarb.lua @@ -46,6 +46,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), minlight = 10, diff --git a/crops/rice.lua b/crops/rice.lua index 433fbcf..b6bc098 100644 --- a/crops/rice.lua +++ b/crops/rice.lua @@ -13,6 +13,7 @@ minetest.register_node("farming:seed_rice", { handy = 1, compostability = 48, seed = 1, snappy = 3, attached_node = 1, flammable = 4, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", @@ -90,6 +91,7 @@ local def = { handy = 1, snappy = 3, flammable = 4, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/soy.lua b/crops/soy.lua index 770e29e..babc65a 100644 --- a/crops/soy.lua +++ b/crops/soy.lua @@ -133,6 +133,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/spinach.lua b/crops/spinach.lua index 9e2a4cc..e58a764 100644 --- a/crops/spinach.lua +++ b/crops/spinach.lua @@ -27,6 +27,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/strawberry.lua b/crops/strawberry.lua index 1a664a2..a31d063 100644 --- a/crops/strawberry.lua +++ b/crops/strawberry.lua @@ -32,6 +32,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/sunflower.lua b/crops/sunflower.lua index 1322b8b..7c46afb 100644 --- a/crops/sunflower.lua +++ b/crops/sunflower.lua @@ -20,6 +20,7 @@ minetest.register_node("farming:seed_sunflower", { compostability = 48, seed = 1, snappy = 3, attached_node = 1, growing = 1, handy = 1, food_sunflower_seeds = 1, flammable = 2 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", @@ -128,6 +129,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/tomato.lua b/crops/tomato.lua index 23fc5c0..0bcddea 100644 --- a/crops/tomato.lua +++ b/crops/tomato.lua @@ -49,6 +49,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/vanilla.lua b/crops/vanilla.lua index 421a92a..0f557ce 100644 --- a/crops/vanilla.lua +++ b/crops/vanilla.lua @@ -28,6 +28,7 @@ local def = { handy = 1, snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/crops/wheat.lua b/crops/wheat.lua index db83bf2..0566ced 100644 --- a/crops/wheat.lua +++ b/crops/wheat.lua @@ -12,6 +12,7 @@ minetest.register_node("farming:seed_wheat", { groups = { handy = 1, seed = 1, snappy = 3, attached_node = 1, flammable = 4, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", @@ -128,6 +129,7 @@ local def = { snappy = 3, flammable = 4, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults() } diff --git a/init.lua b/init.lua index 491e429..bdeb4f6 100644 --- a/init.lua +++ b/init.lua @@ -7,7 +7,7 @@ farming = { mod = "redo", - version = "20240624", + version = "20240625", path = minetest.get_modpath("farming"), select = { type = "fixed", @@ -24,7 +24,8 @@ farming = { use_utensils = minetest.settings:get_bool("farming_use_utensils") ~= false, mtg = minetest.get_modpath("default"), mcl = minetest.get_modpath("mcl_core"), - sounds = {} + sounds = {}, + mcl_hardness = 0.01 } -- default sound functions just incase @@ -599,6 +600,7 @@ farming.register_plant = function(name, def) seed = 1, snappy = 3, attached_node = 1, flammable = 2, growing = 1, compostability = 65, handy = 1 }, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, paramtype = "light", paramtype2 = "wallmounted", @@ -685,6 +687,7 @@ farming.register_plant = function(name, def) drop = drop, selection_box = sel, groups = g, + _mcl_hardness = farming.mcl_hardness, is_ground_content = false, sounds = farming.sounds.node_sound_leaves_defaults(), minlight = def.minlight, From 5c050f3516d58cc670aedd683ff87213cc907952 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Fri, 28 Jun 2024 11:13:44 +0100 Subject: [PATCH 13/49] harden seed placement --- init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init.lua b/init.lua index bdeb4f6..1916a99 100644 --- a/init.lua +++ b/init.lua @@ -498,7 +498,7 @@ function farming.place_seed(itemstack, placer, pointed_thing, plantname) local pt = pointed_thing -- check if pointing at a node - if not pt or pt.type ~= "node" then + if not itemstack or not pt or pt.type ~= "node" then return end From 49c8ba189256f9ebed12b0ec08edfafc5a7597f7 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Wed, 3 Jul 2024 08:27:07 +0100 Subject: [PATCH 14/49] fix mithril scythe node naming --- hoes.lua | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/hoes.lua b/hoes.lua index b548197..9618472 100644 --- a/hoes.lua +++ b/hoes.lua @@ -350,7 +350,22 @@ minetest.register_craftitem("farming:hoe_bomb", { end, }) --- Mithril Scythe (special item) +-- helper function + +local function node_not_num(nodename) + + local num = #nodename:split("_") + local str = "" + + if not num or num == 1 then return end + + for v = 1, (num - 1) do + bit = nodename:split("_")[v] + str = str .. nodename:split("_")[v] .. "_" + end + + return str +end farming.scythe_not_drops = {"farming:trellis", "farming:beanpole"} @@ -358,6 +373,8 @@ farming.add_to_scythe_not_drops = function(item) table.insert(farming.scythe_not_drops, item) end +-- Mithril Scythe (special item) + minetest.register_tool("farming:scythe_mithril", { description = S("Mithril Scythe (Use to harvest and replant crops)"), inventory_image = "farming_scythe_mithril.png", @@ -396,12 +413,9 @@ minetest.register_tool("farming:scythe_mithril", { -- get crop name local mname = node.name:split(":")[1] - local pname = node.name:split(":")[2] - local sname = tonumber(pname:split("_")[2]) + local pname = node_not_num(node.name:split(":")[2]) - pname = pname:split("_")[1] - - if not sname then + if not pname then return end @@ -439,7 +453,8 @@ minetest.register_tool("farming:scythe_mithril", { -- play sound minetest.sound_play("default_grass_footstep", {pos = pos, gain = 1.0}, true) - local replace = mname .. ":" .. pname .. "_1" + -- replace with seed or crop_1 + local replace = mname .. ":" .. pname .. "1" if minetest.registered_nodes[replace] then From 97b2fdd2ade844cd064608c8071a998fde2c34c5 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Wed, 3 Jul 2024 08:38:21 +0100 Subject: [PATCH 15/49] tidy code --- hoes.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/hoes.lua b/hoes.lua index 9618472..1bda713 100644 --- a/hoes.lua +++ b/hoes.lua @@ -360,7 +360,6 @@ local function node_not_num(nodename) if not num or num == 1 then return end for v = 1, (num - 1) do - bit = nodename:split("_")[v] str = str .. nodename:split("_")[v] .. "_" end From 2f7031e717b6919f56132cf65dbc9fea2940df99 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 13 Jul 2024 07:20:07 +0100 Subject: [PATCH 16/49] add mcl_grass as optional dependency --- grass.lua | 1 + mod.conf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/grass.lua b/grass.lua index 85c3cb2..b8f980a 100644 --- a/grass.lua +++ b/grass.lua @@ -67,3 +67,4 @@ if farming.mcl then } }) end + diff --git a/mod.conf b/mod.conf index c49972b..03a9990 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = farming description = Adds many new plants and food into Minetest. -optional_depends = default, mcl_core, mcl_sounds, mcl_farming, mcl_stairs, stairs, lucky_block, toolranks +optional_depends = default, mcl_core, mcl_sounds, mcl_farming, mcl_stairs, mcl_flowers, stairs, lucky_block, toolranks min_minetest_version = 5.0 From e2ec7d707e131f6d7b2a05c3c32b916e80d843c4 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Fri, 26 Jul 2024 13:56:45 +0100 Subject: [PATCH 17/49] added {eatable} group to food items and tooltip HP info --- README.md | 1 + compatibility.lua | 12 +++-- crops/artichoke.lua | 6 ++- crops/asparagus.lua | 6 ++- crops/beans.lua | 4 +- crops/beetroot.lua | 10 ++-- crops/blackberry.lua | 4 +- crops/blueberry.lua | 12 ++--- crops/cabbage.lua | 6 ++- crops/carrot.lua | 15 +++--- crops/chili.lua | 10 ++-- crops/cocoa.lua | 10 ++-- crops/coffee.lua | 4 +- crops/corn.lua | 14 +++--- crops/cucumber.lua | 6 ++- crops/eggplant.lua | 6 ++- crops/garlic.lua | 4 +- crops/ginger.lua | 6 ++- crops/grapes.lua | 6 ++- crops/lettuce.lua | 6 ++- crops/melon.lua | 6 ++- crops/mint.lua | 4 +- crops/onion.lua | 10 ++-- crops/parsley.lua | 9 ++-- crops/peas.lua | 9 ++-- crops/pepper.lua | 12 ++--- crops/pineapple.lua | 8 ++-- crops/potato.lua | 14 +++--- crops/pumpkin.lua | 10 ++-- crops/raspberry.lua | 12 +++-- crops/rhubarb.lua | 10 ++-- crops/rice.lua | 4 +- crops/ryeoatrice.lua | 4 +- crops/soy.lua | 14 +++--- crops/spinach.lua | 6 ++- crops/strawberry.lua | 5 +- crops/sunflower.lua | 10 ++-- crops/tomato.lua | 8 ++-- crops/vanilla.lua | 6 ++- crops/wheat.lua | 4 +- food.lua | 111 +++++++++++++++++++++---------------------- 41 files changed, 240 insertions(+), 184 deletions(-) diff --git a/README.md b/README.md index 712dd62..0f1359a 100644 --- a/README.md +++ b/README.md @@ -217,6 +217,7 @@ on an older map are enabled and growing properly. ### Changelog: +- 1.49 - Added {eatable=1} groups to food items with the value giving HP when eaten, added HP info to food tooltips. - 1.48 - added 'farming_use_utensils' setting to enable/disable utensils in recipes, added mayonnaise (thx felfa), added gingerbread man, Added MineClone2 compatibility - 1.47 - Now blueberries can make blue dye, tweak soil types to work better with older 0.4.x clients and add spanish translation (thx mckaygerhard), add trellis setting to registered_crops and fix pea and soy crop names (thx nixnoxus), add strawberries if ethereal mod not active, added asparagus; spinach; eggplant (thx Atlante for new textures), Sugar Cube - 1.46 - Added min/max default light settings, added lettuce and blackberries with food items (thanks OgelGames), added soya, vanilla and sunflowers (thanks Felfa), added tofu, added salt crystals (thanks gorlock) diff --git a/compatibility.lua b/compatibility.lua index 687eee0..bd12fc9 100644 --- a/compatibility.lua +++ b/compatibility.lua @@ -17,7 +17,7 @@ if eth then alias("farming_plus:banana", "ethereal:banana") else minetest.register_node(":ethereal:banana", { - description = S("Banana"), + description = S("Banana") .. " (♥2)", drawtype = "torchlike", tiles = {"farming_banana_single.png"}, inventory_image = "farming_banana_single.png", @@ -29,7 +29,9 @@ else type = "fixed", fixed = {-0.2, -0.5, -0.2, 0.2, 0.2, 0.2} }, - groups = {food_banana = 1, fleshy = 3, dig_immediate = 3, flammable = 2}, + groups = { + food_banana = 1, fleshy = 3, dig_immediate = 3, flammable = 2, eatable = 2 + }, is_ground_content = false, on_use = minetest.item_eat(2), sounds = farming.sounds.node_sound_leaves_defaults() @@ -77,7 +79,7 @@ if eth then alias("farming_plus:orange_seed", "ethereal:orange_tree_sapling") else minetest.register_node(":ethereal:orange", { - description = S("Orange"), + description = S("Orange") .. " (♥4)", drawtype = "plantlike", tiles = {"farming_orange.png"}, inventory_image = "farming_orange.png", @@ -89,7 +91,9 @@ else type = "fixed", fixed = {-0.2, -0.3, -0.2, 0.2, 0.2, 0.2} }, - groups = {food_orange = 1, fleshy = 3, dig_immediate = 3, flammable = 2}, + groups = { + food_orange = 1, fleshy = 3, dig_immediate = 3, flammable = 2, eatable = 4 + }, is_ground_content = false, on_use = minetest.item_eat(4), sounds = farming.sounds.node_sound_leaves_defaults() diff --git a/crops/artichoke.lua b/crops/artichoke.lua index 7b5f037..a366300 100644 --- a/crops/artichoke.lua +++ b/crops/artichoke.lua @@ -3,9 +3,11 @@ local S = farming.translate -- item definition minetest.register_craftitem("farming:artichoke", { - description = S("Artichoke"), + description = S("Artichoke") .. " (♥4)", inventory_image = "farming_artichoke.png", - groups = {compostability = 48, seed = 2, food_artichoke = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_artichoke = 1, flammable = 2, eatable = 4 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:artichoke_1") end, diff --git a/crops/asparagus.lua b/crops/asparagus.lua index ed4f74f..ddba6a7 100644 --- a/crops/asparagus.lua +++ b/crops/asparagus.lua @@ -3,9 +3,11 @@ local S = farming.translate -- asparagus minetest.register_craftitem("farming:asparagus", { - description = S("Asparagus"), + description = S("Asparagus") .. " (♥1)", inventory_image = "farming_asparagus.png", - groups = {compostability = 48, seed = 2, food_asparagus = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_asparagus = 1, flammable = 2, eatable = 1 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:asparagus_1") end, diff --git a/crops/beans.lua b/crops/beans.lua index d36eb9b..61ec21a 100644 --- a/crops/beans.lua +++ b/crops/beans.lua @@ -70,9 +70,9 @@ end -- beans minetest.register_craftitem("farming:beans", { - description = S("Green Beans"), + description = S("Green Beans" .. " (♥1)"), inventory_image = "farming_beans.png", - groups = {compostability = 48, seed = 2, food_beans = 1, flammable = 2}, + groups = {compostability = 48, seed = 2, food_beans = 1, flammable = 2, eatable = 1}, on_use = minetest.item_eat(1), on_place = function(itemstack, placer, pointed_thing) return place_beans(itemstack, placer, pointed_thing, "farming:beanpole_1") diff --git a/crops/beetroot.lua b/crops/beetroot.lua index d13bdd1..23e10b9 100644 --- a/crops/beetroot.lua +++ b/crops/beetroot.lua @@ -4,9 +4,11 @@ local a = farming.recipe_items -- beetroot minetest.register_craftitem("farming:beetroot", { - description = S("Beetroot"), + description = S("Beetroot") .. " (♥1)", inventory_image = "farming_beetroot.png", - groups = {compostability = 48, seed = 2, food_beetroot = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_beetroot = 1, flammable = 2, eatable = 1 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:beetroot_1") end, @@ -15,9 +17,9 @@ minetest.register_craftitem("farming:beetroot", { -- beetroot soup minetest.register_craftitem("farming:beetroot_soup", { - description = S("Beetroot Soup"), + description = S("Beetroot Soup") .. " (♥6)", inventory_image = "farming_beetroot_soup.png", - groups = {flammable = 2}, + groups = {flammable = 2, eatable = 6}, on_use = minetest.item_eat(6, "farming:bowl") }) diff --git a/crops/blackberry.lua b/crops/blackberry.lua index 5fa761d..c90e956 100644 --- a/crops/blackberry.lua +++ b/crops/blackberry.lua @@ -3,11 +3,11 @@ local S = farming.translate -- blackberries minetest.register_craftitem("farming:blackberry", { - description = S("Blackberries"), + description = S("Blackberries" .. " (♥1)"), inventory_image = "farming_blackberry.png", groups = { compostability = 48, seed = 2, food_blackberries = 1, food_blackberry = 1, - food_berry = 1, flammable = 2 + food_berry = 1, flammable = 2, eatable = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:blackberry_1") diff --git a/crops/blueberry.lua b/crops/blueberry.lua index 3e51086..11708e0 100644 --- a/crops/blueberry.lua +++ b/crops/blueberry.lua @@ -4,11 +4,11 @@ local a = farming.recipe_items -- blueberries minetest.register_craftitem("farming:blueberries", { - description = S("Wild Blueberries"), + description = S("Wild Blueberries") .. " (♥1)", inventory_image = "farming_blueberries.png", groups = { compostability = 48,seed = 2, food_blueberries = 1, food_blueberry = 1, - food_berry = 1, flammable = 2 + food_berry = 1, flammable = 2, eatable = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:blueberry_1") @@ -18,10 +18,10 @@ minetest.register_craftitem("farming:blueberries", { -- blueberry muffin (thanks to sosogirl123 @ deviantart.com for muffin image) minetest.register_craftitem("farming:muffin_blueberry", { - description = S("Blueberry Muffin"), + description = S("Blueberry Muffin") .. " (♥2)", inventory_image = "farming_blueberry_muffin.png", on_use = minetest.item_eat(2), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 2} }) minetest.register_craft({ @@ -33,10 +33,10 @@ minetest.register_craft({ -- Blueberry Pie minetest.register_craftitem("farming:blueberry_pie", { - description = S("Blueberry Pie"), + description = S("Blueberry Pie") .. " (♥6)", inventory_image = "farming_blueberry_pie.png", on_use = minetest.item_eat(6), - groups = {compostability = 75} + groups = {compostability = 75, eatable = 6} }) minetest.register_craft({ diff --git a/crops/cabbage.lua b/crops/cabbage.lua index 8df4390..8bec347 100644 --- a/crops/cabbage.lua +++ b/crops/cabbage.lua @@ -3,9 +3,11 @@ local S = farming.translate -- cabbage minetest.register_craftitem("farming:cabbage", { - description = S("Cabbage"), + description = S("Cabbage") .. " (♥1)", inventory_image = "farming_cabbage.png", - groups = {compostability = 48, seed = 2, food_cabbage = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_cabbage = 1, flammable = 2, eatable = 1 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:cabbage_1") end, diff --git a/crops/carrot.lua b/crops/carrot.lua index 505be22..7313010 100644 --- a/crops/carrot.lua +++ b/crops/carrot.lua @@ -9,9 +9,11 @@ local a = farming.recipe_items -- carrot minetest.register_craftitem("farming:carrot", { - description = S("Carrot"), + description = S("Carrot") .. " (♥4)", inventory_image = "farming_carrot.png", - groups = {compostability = 48, seed = 2, food_carrot = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_carrot = 1, flammable = 2, eatable = 4 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:carrot_1") end, @@ -20,10 +22,10 @@ minetest.register_craftitem("farming:carrot", { -- carrot juice minetest.register_craftitem("farming:carrot_juice", { - description = S("Carrot Juice"), + description = S("Carrot Juice") .. " (♥4)", inventory_image = "farming_carrot_juice.png", on_use = minetest.item_eat(4, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1} + groups = {vessel = 1, drink = 1, eatable = 4} }) minetest.register_craft({ @@ -40,9 +42,10 @@ minetest.register_craft({ -- golden carrot minetest.register_craftitem("farming:carrot_gold", { - description = S("Golden Carrot"), + description = S("Golden Carrot") .. " (♥10)", inventory_image = "farming_carrot_gold.png", - on_use = minetest.item_eat(10) + on_use = minetest.item_eat(10), + groups = {eatable = 10} }) minetest.register_craft({ diff --git a/crops/chili.lua b/crops/chili.lua index db6764e..d8484e5 100644 --- a/crops/chili.lua +++ b/crops/chili.lua @@ -4,9 +4,11 @@ local a = farming.recipe_items -- chili pepper minetest.register_craftitem("farming:chili_pepper", { - description = S("Chili Pepper"), + description = S("Chili Pepper") .. " (♥2)", inventory_image = "farming_chili_pepper.png", - groups = {compostability = 48, seed = 2, food_chili_pepper = 1, flammable = 4}, + groups = { + compostability = 48, seed = 2, food_chili_pepper = 1, flammable = 4, eatable = 2 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:chili_1") end, @@ -15,10 +17,10 @@ minetest.register_craftitem("farming:chili_pepper", { -- bowl of chili minetest.register_craftitem("farming:chili_bowl", { - description = S("Bowl of Chili"), + description = S("Bowl of Chili") .. " (♥8)", inventory_image = "farming_chili_bowl.png", on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 8} }) minetest.register_craft({ diff --git a/crops/cocoa.lua b/crops/cocoa.lua index b252c55..75abbed 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -94,9 +94,10 @@ minetest.register_craft( { -- chocolate cookie minetest.register_craftitem("farming:cookie", { - description = S("Cookie"), + description = S("Cookie") .. " (♥2)", inventory_image = "farming_cookie.png", - on_use = minetest.item_eat(2) + on_use = minetest.item_eat(2), + groups = {eatable = 2} }) minetest.register_craft( { @@ -108,9 +109,10 @@ minetest.register_craft( { -- bar of dark chocolate (thanks to Ice Pandora for her deviantart.com chocolate tutorial) minetest.register_craftitem("farming:chocolate_dark", { - description = S("Bar of Dark Chocolate"), + description = S("Bar of Dark Chocolate") .. " (♥3)", inventory_image = "farming_chocolate_dark.png", - on_use = minetest.item_eat(3) + on_use = minetest.item_eat(3), + groups = {eatable = 3} }) minetest.register_craft( { diff --git a/crops/coffee.lua b/crops/coffee.lua index 460fefb..9c04236 100644 --- a/crops/coffee.lua +++ b/crops/coffee.lua @@ -14,7 +14,7 @@ minetest.register_craftitem("farming:coffee_beans", { -- cup of coffee minetest.register_node("farming:coffee_cup", { - description = S("Cup of Coffee"), + description = S("Cup of Coffee") .. " (♥2)", drawtype = "torchlike", tiles = {"farming_coffee_cup.png"}, inventory_image = "farming_coffee_cup.png", @@ -25,7 +25,7 @@ minetest.register_node("farming:coffee_cup", { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1}, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1, eatable = 2}, is_ground_content = false, on_use = minetest.item_eat(2, "vessels:drinking_glass"), sounds = farming.sounds.node_sound_glass_defaults() diff --git a/crops/corn.lua b/crops/corn.lua index 302e42b..f5a87be 100644 --- a/crops/corn.lua +++ b/crops/corn.lua @@ -9,9 +9,11 @@ local a = farming.recipe_items -- corn minetest.register_craftitem("farming:corn", { - description = S("Corn"), + description = S("Corn") .. " (♥3)", inventory_image = "farming_corn.png", - groups = {compostability = 45, seed = 2, food_corn = 1, flammable = 2}, + groups = { + compostability = 45, seed = 2, food_corn = 1, flammable = 2, eatable = 3 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:corn_1") end, @@ -20,9 +22,9 @@ minetest.register_craftitem("farming:corn", { -- corn on the cob (texture by TenPlus1) minetest.register_craftitem("farming:corn_cob", { - description = S("Corn on the Cob"), + description = S("Corn on the Cob") .. " (♥5)", inventory_image = "farming_corn_cob.png", - groups = {compostability = 65, food_corn_cooked = 1, flammable = 2}, + groups = {compostability = 65, food_corn_cooked = 1, flammable = 2, eatable = 5}, on_use = minetest.item_eat(5) }) @@ -35,9 +37,9 @@ minetest.register_craft({ -- popcorn minetest.register_craftitem("farming:popcorn", { - description = S("Popcorn"), + description = S("Popcorn") .. " (♥4)", inventory_image = "farming_popcorn.png", - groups = {compostability = 55, food_popcorn = 1, flammable = 2}, + groups = {compostability = 55, food_popcorn = 1, flammable = 2, eatable = 4}, on_use = minetest.item_eat(4) }) diff --git a/crops/cucumber.lua b/crops/cucumber.lua index a9b5b80..f207395 100644 --- a/crops/cucumber.lua +++ b/crops/cucumber.lua @@ -8,9 +8,11 @@ local S = farming.translate -- cucumber minetest.register_craftitem("farming:cucumber", { - description = S("Cucumber"), + description = S("Cucumber") .. " (♥4)", inventory_image = "farming_cucumber.png", - groups = {compostability = 48, seed = 2, food_cucumber = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_cucumber = 1, flammable = 2, eatable = 4 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:cucumber_1") end, diff --git a/crops/eggplant.lua b/crops/eggplant.lua index 29279a4..c923772 100644 --- a/crops/eggplant.lua +++ b/crops/eggplant.lua @@ -3,9 +3,11 @@ local S = farming.translate -- eggplant minetest.register_craftitem("farming:eggplant", { - description = S("Eggplant"), + description = S("Eggplant") .. " (♥3)", inventory_image = "farming_eggplant.png", - groups = {compostability = 48, seed = 2, food_eggplant = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_eggplant = 1, flammable = 2, eatable = 3 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:eggplant_1") end, diff --git a/crops/garlic.lua b/crops/garlic.lua index 81d94de..ce76922 100644 --- a/crops/garlic.lua +++ b/crops/garlic.lua @@ -13,10 +13,10 @@ minetest.register_craftitem("farming:garlic_clove", { -- garlic bulb minetest.register_craftitem("farming:garlic", { - description = S("Garlic"), + description = S("Garlic") .. " (♥1)", inventory_image = "crops_garlic.png", on_use = minetest.item_eat(1), - groups = {food_garlic = 1, flammable = 3, compostability = 55} + groups = {food_garlic = 1, flammable = 3, compostability = 55, eatable = 1} }) minetest.register_craft({ diff --git a/crops/ginger.lua b/crops/ginger.lua index 3534314..e161c7a 100644 --- a/crops/ginger.lua +++ b/crops/ginger.lua @@ -3,9 +3,11 @@ local S = farming.translate -- ginger minetest.register_craftitem("farming:ginger", { - description = S("Ginger"), + description = S("Ginger") .. " (♥1)", inventory_image = "farming_ginger.png", - groups = {compostability = 48, seed = 2, food_ginger = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_ginger = 1, flammable = 2, eatable = 1 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:ginger_1") end, diff --git a/crops/grapes.lua b/crops/grapes.lua index f13226e..6445323 100644 --- a/crops/grapes.lua +++ b/crops/grapes.lua @@ -65,10 +65,12 @@ end -- grapes minetest.register_craftitem("farming:grapes", { - description = S("Grapes"), + description = S("Grapes") .. " (♥2)", inventory_image = "farming_grapes.png", on_use = minetest.item_eat(2), - groups = {compostability = 48, seed = 2, food_grapes = 1, flammable = 3}, + groups = { + compostability = 48, seed = 2, food_grapes = 1, flammable = 3, eatable = 2 + }, on_place = function(itemstack, placer, pointed_thing) return place_grapes(itemstack, placer, pointed_thing, "farming:grapes_1") end diff --git a/crops/lettuce.lua b/crops/lettuce.lua index 92b1b9e..268cca1 100644 --- a/crops/lettuce.lua +++ b/crops/lettuce.lua @@ -3,9 +3,11 @@ local S = farming.translate -- lettuce minetest.register_craftitem("farming:lettuce", { - description = S("Lettuce"), + description = S("Lettuce") .. " (♥2)", inventory_image = "farming_lettuce.png", - groups = {compostability = 48, seed = 2, food_lettuce = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_lettuce = 1, flammable = 2, eatable = 2 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:lettuce_1") end, diff --git a/crops/melon.lua b/crops/melon.lua index a3d31ea..8e16e50 100644 --- a/crops/melon.lua +++ b/crops/melon.lua @@ -4,9 +4,11 @@ local a = farming.recipe_items -- melon minetest.register_craftitem("farming:melon_slice", { - description = S("Melon Slice"), + description = S("Melon Slice") .. " (♥2)", inventory_image = "farming_melon_slice.png", - groups = {compostability = 48, seed = 2, food_melon_slice = 1, flammable = 3}, + groups = { + compostability = 48, seed = 2, food_melon_slice = 1, flammable = 3, eatable = 2 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:melon_1") end, diff --git a/crops/mint.lua b/crops/mint.lua index 9c0ff2d..da39cc2 100644 --- a/crops/mint.lua +++ b/crops/mint.lua @@ -38,10 +38,10 @@ minetest.register_craftitem("farming:mint_leaf", { -- mint tea minetest.register_craftitem("farming:mint_tea", { - description = S("Mint Tea"), + description = S("Mint Tea") .. " (♥2)", inventory_image = "farming_mint_tea.png", on_use = minetest.item_eat(2, a.drinking_glass), - groups = {flammable = 4} + groups = {flammable = 4, eatable = 2} }) minetest.register_craft({ diff --git a/crops/onion.lua b/crops/onion.lua index 9042aab..c849b31 100644 --- a/crops/onion.lua +++ b/crops/onion.lua @@ -10,9 +10,11 @@ local a = farming.recipe_items -- onion minetest.register_craftitem("farming:onion", { - description = S("Onion"), + description = S("Onion") .. " (♥1)", inventory_image = "crops_onion.png", - groups = {compostability = 48, seed = 2, food_onion = 1, flammable = 3}, + groups = { + compostability = 48, seed = 2, food_onion = 1, flammable = 3, eatable = 1 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:onion_1") end, @@ -21,9 +23,9 @@ minetest.register_craftitem("farming:onion", { -- onion soup minetest.register_craftitem("farming:onion_soup", { - description = S("Onion Soup"), + description = S("Onion Soup") .. " (♥6)", inventory_image = "farming_onion_soup.png", - groups = {flammable = 2, compostability = 65}, + groups = {flammable = 2, compostability = 65, eatable = 6}, on_use = minetest.item_eat(6, a.bowl) }) diff --git a/crops/parsley.lua b/crops/parsley.lua index 58cb572..beb92f4 100644 --- a/crops/parsley.lua +++ b/crops/parsley.lua @@ -3,12 +3,15 @@ local S = farming.translate -- item definition minetest.register_craftitem("farming:parsley", { - description = S("Parsley"), + description = S("Parsley") .. " (♥1)", inventory_image = "farming_parsley.png", - groups = {compostability = 48, seed = 2, food_parsley = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_parsley = 1, flammable = 2, eatable = 1 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:parsley_1") - end + end, + on_use = minetest.item_eat(1) }) -- crop definition diff --git a/crops/peas.lua b/crops/peas.lua index 511037d..c242abe 100644 --- a/crops/peas.lua +++ b/crops/peas.lua @@ -6,10 +6,11 @@ local a = farming.recipe_items -- pea pod minetest.register_craftitem("farming:pea_pod", { - description = S("Pea Pod"), + description = S("Pea Pod") .. " (♥1)", inventory_image = "farming_pea_pod.png", groups = { - compostability = 48, seed = 2, food_peas = 1, food_pea_pod = 1, flammable = 2 + compostability = 48, seed = 2, food_peas = 1, food_pea_pod = 1, flammable = 2, + eatable = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:pea_1") @@ -22,9 +23,9 @@ minetest.register_alias("farming:peas", "farming:pea_pod") -- pea soup minetest.register_craftitem("farming:pea_soup", { - description = S("Pea Soup"), + description = S("Pea Soup") .. " (♥4)", inventory_image = "farming_pea_soup.png", - groups = {flammable = 2, compostability = 65}, + groups = {flammable = 2, compostability = 65, eatable = 4}, on_use = minetest.item_eat(4, a.bowl) }) diff --git a/crops/pepper.lua b/crops/pepper.lua index 7e99fc7..4b187c5 100644 --- a/crops/pepper.lua +++ b/crops/pepper.lua @@ -20,26 +20,26 @@ minetest.register_craftitem("farming:peppercorn", { -- green pepper minetest.register_craftitem("farming:pepper", { - description = S("Green Pepper"), + description = S("Green Pepper") .. " (♥2)", inventory_image = "crops_pepper.png", on_use = minetest.item_eat(2), - groups = {food_pepper = 1, flammable = 3, compostability = 55} + groups = {food_pepper = 1, flammable = 3, compostability = 55, eatable = 2} }) -- yellow pepper minetest.register_craftitem("farming:pepper_yellow", { - description = S("Yellow Pepper"), + description = S("Yellow Pepper") .. " (♥3)", inventory_image = "crops_pepper_yellow.png", on_use = minetest.item_eat(3), - groups = {food_pepper = 1, flammable = 3, compostability = 55} + groups = {food_pepper = 1, flammable = 3, compostability = 55, eatable = 3} }) -- red pepper minetest.register_craftitem("farming:pepper_red", { - description = S("Red Pepper"), + description = S("Red Pepper") .. " (♥3)", inventory_image = "crops_pepper_red.png", on_use = minetest.item_eat(4), - groups = {food_pepper = 1, flammable = 3, compostability = 55} + groups = {food_pepper = 1, flammable = 3, compostability = 55, eatable = 3} }) minetest.register_craft({ diff --git a/crops/pineapple.lua b/crops/pineapple.lua index 5a5f9a4..b7f94f0 100644 --- a/crops/pineapple.lua +++ b/crops/pineapple.lua @@ -36,9 +36,9 @@ minetest.register_node("farming:pineapple", { -- pineapple minetest.register_craftitem("farming:pineapple_ring", { - description = S("Pineapple Ring"), + description = S("Pineapple Ring") .. " (♥1)", inventory_image = "farming_pineapple_ring.png", - groups = {food_pineapple_ring = 1, flammable = 2, compostability = 45}, + groups = {food_pineapple_ring = 1, flammable = 2, compostability = 45, eatable = 1}, on_use = minetest.item_eat(1) }) @@ -50,10 +50,10 @@ minetest.register_craft( { -- pineapple juice minetest.register_craftitem("farming:pineapple_juice", { - description = S("Pineapple Juice"), + description = S("Pineapple Juice") .. " (♥4)", inventory_image = "farming_pineapple_juice.png", on_use = minetest.item_eat(4, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1, compostability = 35} + groups = {vessel = 1, drink = 1, compostability = 35, eatable = 4} }) minetest.register_craft({ diff --git a/crops/potato.lua b/crops/potato.lua index 3de9678..2fa137d 100644 --- a/crops/potato.lua +++ b/crops/potato.lua @@ -8,9 +8,9 @@ local S = farming.translate -- potato minetest.register_craftitem("farming:potato", { - description = S("Potato"), + description = S("Potato") .. " (♥1)", inventory_image = "farming_potato.png", - groups = {compostability = 48, seed = 2, food_potato = 1, flammable = 2}, + groups = {compostability = 48, seed = 2, food_potato = 1, flammable = 2, eatable = 1}, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:potato_1") end, @@ -28,9 +28,10 @@ minetest.register_craftitem("farming:potato", { -- baked potato minetest.register_craftitem("farming:baked_potato", { - description = S("Baked Potato"), + description = S("Baked Potato") .. " (♥6)", inventory_image = "farming_baked_potato.png", - on_use = minetest.item_eat(6) + on_use = minetest.item_eat(6), + groups = {eatable = 6} }) minetest.register_craft({ @@ -42,9 +43,10 @@ minetest.register_craft({ -- Potato and cucumber Salad minetest.register_craftitem("farming:potato_salad", { - description = S("Cucumber and Potato Salad"), + description = S("Cucumber and Potato Salad") .. " (♥10)", inventory_image = "farming_potato_salad.png", - on_use = minetest.item_eat(10, "farming:bowl") + on_use = minetest.item_eat(10, "farming:bowl"), + groups = {eatable = 10} }) minetest.register_craft({ diff --git a/crops/pumpkin.lua b/crops/pumpkin.lua index 26611c8..437864b 100644 --- a/crops/pumpkin.lua +++ b/crops/pumpkin.lua @@ -3,9 +3,11 @@ local S = farming.translate -- pumpkin slice minetest.register_craftitem("farming:pumpkin_slice", { - description = S("Pumpkin Slice"), + description = S("Pumpkin Slice") .. " (♥2)", inventory_image = "farming_pumpkin_slice.png", - groups = {compostability = 48, seed = 2, food_pumpkin_slice = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_pumpkin_slice = 1, flammable = 2, eatable = 2 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:pumpkin_1") end, @@ -123,10 +125,10 @@ minetest.register_craft({ -- pumpkin bread minetest.register_craftitem("farming:pumpkin_bread", { - description = S("Pumpkin Bread"), + description = S("Pumpkin Bread") .. " (♥8)", inventory_image = "farming_pumpkin_bread.png", on_use = minetest.item_eat(8), - groups = {food_bread = 1, flammable = 2} + groups = {food_bread = 1, flammable = 2, eatable = 8} }) minetest.register_craftitem("farming:pumpkin_dough", { diff --git a/crops/raspberry.lua b/crops/raspberry.lua index 3bf543c..bae2ac1 100644 --- a/crops/raspberry.lua +++ b/crops/raspberry.lua @@ -4,10 +4,12 @@ local a = farming.recipe_items -- raspberries minetest.register_craftitem("farming:raspberries", { - description = S("Raspberries"), + description = S("Raspberries") .. " (♥1)", inventory_image = "farming_raspberries.png", - groups = {compostability = 48, seed = 2, food_raspberries = 1, food_raspberry = 1, - food_berry = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_raspberries = 1, food_raspberry = 1, + food_berry = 1, flammable = 2, eatable = 1 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:raspberry_1") end, @@ -16,10 +18,10 @@ minetest.register_craftitem("farming:raspberries", { -- raspberry smoothie minetest.register_craftitem("farming:smoothie_raspberry", { - description = S("Raspberry Smoothie"), + description = S("Raspberry Smoothie") .. " (♥2)", inventory_image = "farming_raspberry_smoothie.png", on_use = minetest.item_eat(2, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1, compostability = 65} + groups = {vessel = 1, drink = 1, compostability = 65, eatable = 2} }) minetest.register_craft({ diff --git a/crops/rhubarb.lua b/crops/rhubarb.lua index 8933b3f..65e7cb0 100644 --- a/crops/rhubarb.lua +++ b/crops/rhubarb.lua @@ -4,9 +4,11 @@ local a = farming.recipe_items -- rhubarb minetest.register_craftitem("farming:rhubarb", { - description = S("Rhubarb"), + description = S("Rhubarb") .. " (♥1)", inventory_image = "farming_rhubarb.png", - groups = {compostability = 48, seed = 2, food_rhubarb = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_rhubarb = 1, flammable = 2, eatable = 1 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:rhubarb_1") end, @@ -15,10 +17,10 @@ minetest.register_craftitem("farming:rhubarb", { -- rhubarb pie minetest.register_craftitem("farming:rhubarb_pie", { - description = S("Rhubarb Pie"), + description = S("Rhubarb Pie") .. " (♥6)", inventory_image = "farming_rhubarb_pie.png", on_use = minetest.item_eat(6), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 6} }) minetest.register_craft({ diff --git a/crops/rice.lua b/crops/rice.lua index b6bc098..5952d18 100644 --- a/crops/rice.lua +++ b/crops/rice.lua @@ -46,10 +46,10 @@ minetest.register_craft({ -- rice flour and bread minetest.register_craftitem("farming:rice_bread", { - description = S("Rice Bread"), + description = S("Rice Bread") .. " (♥5)", inventory_image = "farming_rice_bread.png", on_use = minetest.item_eat(5), - groups = {food_rice_bread = 1, flammable = 2, compostability = 65} + groups = {food_rice_bread = 1, flammable = 2, compostability = 65, eatable = 5} }) minetest.register_craftitem("farming:rice_flour", { diff --git a/crops/ryeoatrice.lua b/crops/ryeoatrice.lua index 90dfda9..4b63983 100644 --- a/crops/ryeoatrice.lua +++ b/crops/ryeoatrice.lua @@ -81,10 +81,10 @@ minetest.register_craft({ -- Multigrain bread minetest.register_craftitem("farming:bread_multigrain", { - description = S("Multigrain Bread"), + description = S("Multigrain Bread") .. " (♥7)", inventory_image = "farming_bread_multigrain.png", on_use = minetest.item_eat(7), - groups = {food_bread = 1, flammable = 2, compostability = 65} + groups = {food_bread = 1, flammable = 2, compostability = 65, eatable = 7} }) minetest.register_craft({ diff --git a/crops/soy.lua b/crops/soy.lua index babc65a..d8300ca 100644 --- a/crops/soy.lua +++ b/crops/soy.lua @@ -51,7 +51,7 @@ minetest.register_craft( { -- soy milk minetest.register_node("farming:soy_milk", { - description = S("Soy Milk"), + description = S("Soy Milk") .. " (♥2)", drawtype = "plantlike", tiles = {"farming_soy_milk_glass.png"}, inventory_image = "farming_soy_milk_glass.png", @@ -64,7 +64,7 @@ minetest.register_node("farming:soy_milk", { }, on_use = minetest.item_eat(2, "vessels:drinking_glass"), groups = { - vessel = 1, food_milk_glass = 1, dig_immediate = 3, + vessel = 1, food_milk_glass = 1, dig_immediate = 3, eatable = 2, attached_node = 1, drink = 1, compostability = 65 }, is_ground_content = false, @@ -85,9 +85,11 @@ minetest.register_craft( { -- tofu minetest.register_craftitem("farming:tofu", { - description = S("Tofu"), + description = S("Tofu") .. " (♥3)", inventory_image = "farming_tofu.png", - groups = {food_tofu = 1, food_meat_raw = 1, flammable = 2, compostability = 65}, + groups = { + food_tofu = 1, food_meat_raw = 1, flammable = 2, compostability = 65, eatable = 3 + }, on_use = minetest.item_eat(3) }) @@ -102,9 +104,9 @@ minetest.register_craft({ -- cooked tofu minetest.register_craftitem("farming:tofu_cooked", { - description = S("Cooked Tofu"), + description = S("Cooked Tofu") .. " (♥6)", inventory_image = "farming_tofu_cooked.png", - groups = {food_meat = 1, flammable = 2, compostability = 65}, + groups = {food_meat = 1, flammable = 2, compostability = 65, eatable = 6}, on_use = minetest.item_eat(6) }) diff --git a/crops/spinach.lua b/crops/spinach.lua index e58a764..fd611b9 100644 --- a/crops/spinach.lua +++ b/crops/spinach.lua @@ -3,9 +3,11 @@ local S = farming.translate -- spinach minetest.register_craftitem("farming:spinach", { - description = S("Spinach"), + description = S("Spinach") .. " (♥1)", inventory_image = "farming_spinach.png", - groups = {compostability = 48, seed = 2, food_spinach = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_spinach = 1, flammable = 2, eatable = 1 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:spinach_1") end, diff --git a/crops/strawberry.lua b/crops/strawberry.lua index a31d063..a763c4b 100644 --- a/crops/strawberry.lua +++ b/crops/strawberry.lua @@ -3,10 +3,11 @@ local S = farming.translate -- Strawberry (can also be planted as seed) minetest.register_craftitem(":ethereal:strawberry", { - description = S("Strawberry"), + description = S("Strawberry") .. " (♥1)", inventory_image = "ethereal_strawberry.png", groups = { - compostability = 48, seed = 2, food_strawberry = 1, food_berry = 1, flammable = 2 + compostability = 48, seed = 2, food_strawberry = 1, food_berry = 1, + flammable = 2, eatable = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:strawberry_1") diff --git a/crops/sunflower.lua b/crops/sunflower.lua index 7c46afb..c21e3bc 100644 --- a/crops/sunflower.lua +++ b/crops/sunflower.lua @@ -45,9 +45,11 @@ minetest.register_craft({ -- sunflower seeds (toasted) minetest.register_craftitem("farming:sunflower_seeds_toasted", { - description = S("Toasted Sunflower Seeds"), + description = S("Toasted Sunflower Seeds") .. " (♥1)", inventory_image = "farming_sunflower_seeds_toasted.png", - groups = {food_sunflower_seeds_toasted = 1, flammable = 2, compostability = 65}, + groups = { + food_sunflower_seeds_toasted = 1, flammable = 2, compostability = 65, eatable = 1 + }, on_use = minetest.item_eat(1) }) @@ -97,10 +99,10 @@ minetest.register_craft({ -- sunflower seed bread minetest.register_craftitem("farming:sunflower_bread", { - description = S("Sunflower Seed Bread"), + description = S("Sunflower Seed Bread") .. " (♥8)", inventory_image = "farming_sunflower_bread.png", on_use = minetest.item_eat(8), - groups = {food_bread = 1, flammable = 2} + groups = {food_bread = 1, flammable = 2, eatable = 8} }) minetest.register_craft({ diff --git a/crops/tomato.lua b/crops/tomato.lua index 0bcddea..51cad19 100644 --- a/crops/tomato.lua +++ b/crops/tomato.lua @@ -8,9 +8,9 @@ local S = farming.translate -- tomato minetest.register_craftitem("farming:tomato", { - description = S("Tomato"), + description = S("Tomato") .. " (♥4)", inventory_image = "farming_tomato.png", - groups = {compostability = 45, seed = 2, food_tomato = 1, flammable = 2}, + groups = {compostability = 45, seed = 2, food_tomato = 1, flammable = 2, eatable = 4}, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:tomato_1") end, @@ -19,9 +19,9 @@ minetest.register_craftitem("farming:tomato", { -- tomato soup minetest.register_craftitem("farming:tomato_soup", { - description = S("Tomato Soup"), + description = S("Tomato Soup") .. " (♥8)", inventory_image = "farming_tomato_soup.png", - groups = {flammable = 2, compostability = 65}, + groups = {flammable = 2, compostability = 65, eatable = 8}, on_use = minetest.item_eat(8, "farming:bowl") }) diff --git a/crops/vanilla.lua b/crops/vanilla.lua index 0f557ce..a18136d 100644 --- a/crops/vanilla.lua +++ b/crops/vanilla.lua @@ -4,9 +4,11 @@ local a = farming.recipe_items -- vanilla minetest.register_craftitem("farming:vanilla", { - description = S("Vanilla"), + description = S("Vanilla") .. " (♥1)", inventory_image = "farming_vanilla.png", - groups = {compostability = 48, seed = 2, food_vanilla = 1, flammable = 2}, + groups = { + compostability = 48, seed = 2, food_vanilla = 1, flammable = 2, eatable = 1 + }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:vanilla_1") end, diff --git a/crops/wheat.lua b/crops/wheat.lua index 0566ced..c344062 100644 --- a/crops/wheat.lua +++ b/crops/wheat.lua @@ -99,10 +99,10 @@ minetest.register_craft({ -- bread minetest.register_craftitem("farming:bread", { - description = S("Bread"), + description = S("Bread") .. " (♥5)", inventory_image = "farming_bread.png", on_use = minetest.item_eat(5), - groups = {food_bread = 1, flammable = 2} + groups = {food_bread = 1, flammable = 2, eatable = 5} }) minetest.register_craft({ diff --git a/food.lua b/food.lua index fa1da47..45c048e 100644 --- a/food.lua +++ b/food.lua @@ -5,10 +5,10 @@ local a = farming.recipe_items -- sliced bread minetest.register_craftitem("farming:bread_slice", { - description = S("Sliced Bread"), + description = S("Sliced Bread") .. " (♥1)", inventory_image = "farming_bread_slice.png", on_use = minetest.item_eat(1), - groups = {food_bread_slice = 1, flammable = 2, compostability = 65} + groups = {food_bread_slice = 1, flammable = 2, compostability = 65, eatable = 1} }) minetest.register_craft({ @@ -20,10 +20,10 @@ minetest.register_craft({ -- toast minetest.register_craftitem("farming:toast", { - description = S("Toast"), + description = S("Toast") .. " (♥1)", inventory_image = "farming_toast.png", on_use = minetest.item_eat(1), - groups = {food_toast = 1, flammable = 2, compostability = 65} + groups = {food_toast = 1, flammable = 2, compostability = 65, eatable = 1} }) minetest.register_craft({ @@ -36,10 +36,10 @@ minetest.register_craft({ -- toast sandwich minetest.register_craftitem("farming:toast_sandwich", { - description = S("Toast Sandwich"), + description = S("Toast Sandwich") .. " (♥4)", inventory_image = "farming_toast_sandwich.png", on_use = minetest.item_eat(4), - groups = {flammable = 2, compostability = 85} + groups = {flammable = 2, compostability = 85, eatable = 4} }) minetest.register_craft({ @@ -182,8 +182,7 @@ minetest.register_node("farming:salt", { visual_scale = 0.8, paramtype = "light", tiles = {"farming_salt.png"}, - groups = {food_salt = 1, vessel = 1, dig_immediate = 3, - attached_node = 1}, + groups = {food_salt = 1, vessel = 1, dig_immediate = 3, attached_node = 1}, is_ground_content = false, sounds = farming.sounds.node_sound_defaults(), selection_box = { @@ -349,9 +348,9 @@ minetest.register_craft({ -- Turkish Delight minetest.register_craftitem("farming:turkish_delight", { - description = S("Turkish Delight"), + description = S("Turkish Delight") .. " (♥2)", inventory_image = "farming_turkish_delight.png", - groups = {flammable = 3, compostability = 85}, + groups = {flammable = 3, compostability = 85, eatable = 2}, on_use = minetest.item_eat(2) }) @@ -372,9 +371,9 @@ minetest.register_craft({ -- Garlic Bread minetest.register_craftitem("farming:garlic_bread", { - description = S("Garlic Bread"), + description = S("Garlic Bread") .. " (♥2)", inventory_image = "farming_garlic_bread.png", - groups = {flammable = 3, compostability = 65}, + groups = {flammable = 3, compostability = 65, eatable = 2}, on_use = minetest.item_eat(2) }) @@ -388,10 +387,10 @@ minetest.register_craft({ -- Donuts (thanks to Bockwurst for making the donut images) minetest.register_craftitem("farming:donut", { - description = S("Donut"), + description = S("Donut") .. " (♥4)", inventory_image = "farming_donut.png", on_use = minetest.item_eat(4), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 4} }) minetest.register_craft({ @@ -404,10 +403,10 @@ minetest.register_craft({ }) minetest.register_craftitem("farming:donut_chocolate", { - description = S("Chocolate Donut"), + description = S("Chocolate Donut") .. " (♥6)", inventory_image = "farming_donut_chocolate.png", on_use = minetest.item_eat(6), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 6} }) minetest.register_craft({ @@ -419,10 +418,10 @@ minetest.register_craft({ }) minetest.register_craftitem("farming:donut_apple", { - description = S("Apple Donut"), + description = S("Apple Donut") .. " (♥6)", inventory_image = "farming_donut_apple.png", on_use = minetest.item_eat(6), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 6} }) minetest.register_craft({ @@ -436,10 +435,10 @@ minetest.register_craft({ -- Porridge Oats minetest.register_craftitem("farming:porridge", { - description = S("Porridge"), + description = S("Porridge") .. " (♥6)", inventory_image = "farming_porridge.png", on_use = minetest.item_eat(6, a.bowl), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 6} }) minetest.register_craft({ @@ -457,10 +456,10 @@ minetest.register_craft({ -- Jaffa Cake minetest.register_craftitem("farming:jaffa_cake", { - description = S("Jaffa Cake"), + description = S("Jaffa Cake") .. " (♥6)", inventory_image = "farming_jaffa_cake.png", on_use = minetest.item_eat(6), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 6} }) minetest.register_craft({ @@ -481,10 +480,10 @@ minetest.register_craft({ -- Apple Pie minetest.register_craftitem("farming:apple_pie", { - description = S("Apple Pie"), + description = S("Apple Pie") .. " (♥6)", inventory_image = "farming_apple_pie.png", on_use = minetest.item_eat(6), - groups = {compostability = 75} + groups = {compostability = 75, eatable = 6} }) minetest.register_craft({ @@ -499,9 +498,9 @@ minetest.register_craft({ -- Cactus Juice minetest.register_craftitem("farming:cactus_juice", { - description = S("Cactus Juice"), + description = S("Cactus Juice") .. " (♥1)", inventory_image = "farming_cactus_juice.png", - groups = {vessel = 1, drink = 1, compostability = 55}, + groups = {vessel = 1, drink = 1, compostability = 55, eatable = 1}, on_use = function(itemstack, user, pointed_thing) @@ -557,10 +556,10 @@ minetest.register_craft({ -- Mac & Cheese minetest.register_craftitem("farming:mac_and_cheese", { - description = S("Mac & Cheese"), + description = S("Mac & Cheese") .. " (♥6)", inventory_image = "farming_mac_and_cheese.png", on_use = minetest.item_eat(6, a.bowl), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 6} }) minetest.register_craft({ @@ -573,10 +572,10 @@ minetest.register_craft({ -- Spaghetti minetest.register_craftitem("farming:spaghetti", { - description = S("Spaghetti"), + description = S("Spaghetti") .. " (♥8)", inventory_image = "farming_spaghetti.png", on_use = minetest.item_eat(8), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 8} }) minetest.register_craft({ @@ -591,10 +590,10 @@ minetest.register_craft({ -- Korean Bibimbap minetest.register_craftitem("farming:bibimbap", { - description = S("Bibimbap"), + description = S("Bibimbap") .. " (♥8)", inventory_image = "farming_bibimbap.png", on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 8} }) minetest.register_craft({ @@ -621,10 +620,10 @@ minetest.register_craft({ -- Burger minetest.register_craftitem("farming:burger", { - description = S("Burger"), + description = S("Burger") .. " (♥16)", inventory_image = "farming_burger.png", on_use = minetest.item_eat(16), - groups = {compostability = 95} + groups = {compostability = 95, eatable = 16} }) minetest.register_craft({ @@ -639,10 +638,10 @@ minetest.register_craft({ -- Salad minetest.register_craftitem("farming:salad", { - description = S("Salad"), + description = S("Salad") .. " (♥8)", inventory_image = "farming_salad.png", on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 45} + groups = {compostability = 45, eatable = 8} }) minetest.register_craft({ @@ -657,10 +656,10 @@ minetest.register_craft({ -- Triple Berry Smoothie minetest.register_craftitem("farming:smoothie_berry", { - description = S("Triple Berry Smoothie"), + description = S("Triple Berry Smoothie") .. " (♥6)", inventory_image = "farming_berry_smoothie.png", on_use = minetest.item_eat(6, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1, compostability = 65} + groups = {vessel = 1, drink = 1, compostability = 65, eatable = 6} }) minetest.register_craft({ @@ -676,10 +675,10 @@ minetest.register_craft({ -- Patatas a la importancia minetest.register_craftitem("farming:spanish_potatoes", { - description = S("Spanish Potatoes"), + description = S("Spanish Potatoes") .. " (♥8)", inventory_image = "farming_spanish_potatoes.png", on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 8} }) minetest.register_craft({ @@ -695,10 +694,10 @@ minetest.register_craft({ -- Potato omelet minetest.register_craftitem("farming:potato_omelet", { - description = S("Potato omelet"), + description = S("Potato omelet") .. " (♥6)", inventory_image = "farming_potato_omelet.png", on_use = minetest.item_eat(6, a.bowl), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 6} }) minetest.register_craft({ @@ -713,10 +712,10 @@ minetest.register_craft({ -- Paella minetest.register_craftitem("farming:paella", { - description = S("Paella"), + description = S("Paella") .. " (♥8)", inventory_image = "farming_paella.png", on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 8} }) minetest.register_craft({ @@ -732,10 +731,10 @@ minetest.register_craft({ -- Flan minetest.register_craftitem("farming:flan", { - description = S("Vanilla Flan"), + description = S("Vanilla Flan") .. " (♥8)", inventory_image = "farming_vanilla_flan.png", on_use = minetest.item_eat(6), - groups = {compostability = 65} + groups = {compostability = 65, eatable = 6} }) minetest.register_craft({ @@ -755,10 +754,10 @@ minetest.register_craft({ -- Vegan Cheese minetest.register_craftitem("farming:cheese_vegan", { - description = S("Vegan Cheese"), + description = S("Vegan Cheese") .. " (♥2)", inventory_image = "farming_cheese_vegan.png", on_use = minetest.item_eat(2), - groups = {compostability = 65, food_cheese = 1, flammable = 2} + groups = {compostability = 65, food_cheese = 1, flammable = 2, eatable = 2} }) minetest.register_craft({ @@ -791,10 +790,10 @@ minetest.register_craft({ -- Onigiri minetest.register_craftitem("farming:onigiri", { - description = S("Onigiri"), + description = S("Onigiri") .. " (♥2)", inventory_image = "farming_onigiri.png", on_use = minetest.item_eat(2), - groups = {flammable = 2, compostability = 65} + groups = {flammable = 2, compostability = 65, eatable = 2} }) minetest.register_craft({ @@ -808,10 +807,10 @@ minetest.register_craft({ -- Gyoza minetest.register_craftitem("farming:gyoza", { - description = S("Gyoza"), + description = S("Gyoza") .. " (♥4)", inventory_image = "farming_gyoza.png", on_use = minetest.item_eat(4), - groups = {flammable = 2, compostability = 65} + groups = {flammable = 2, compostability = 65, eatable = 4} }) minetest.register_craft({ @@ -830,10 +829,10 @@ minetest.register_craft({ -- Mochi minetest.register_craftitem("farming:mochi", { - description = S("Mochi"), + description = S("Mochi") .. " (♥4)", inventory_image = "farming_mochi.png", on_use = minetest.item_eat(3), - groups = {flammable = 2, compostability = 65} + groups = {flammable = 2, compostability = 65, eatable = 3} }) minetest.register_craft({ @@ -852,10 +851,10 @@ minetest.register_craft({ -- Gingerbread Man minetest.register_craftitem("farming:gingerbread_man", { - description = S("Gingerbread Man"), + description = S("Gingerbread Man") .. " (♥2)", inventory_image = "farming_gingerbread_man.png", on_use = minetest.item_eat(2), - groups = {compostability = 85} + groups = {compostability = 85, eatable = 2} }) minetest.register_craft({ From 648bae7517df709b68d420e3bf2cc9483307f1dd Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Fri, 26 Jul 2024 15:29:09 +0100 Subject: [PATCH 18/49] add {eatable} group to default apple, blueberries, mushrooms if found --- compatibility.lua | 24 ++++++++++++++++++++++++ mod.conf | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/compatibility.lua b/compatibility.lua index bd12fc9..7c117b5 100644 --- a/compatibility.lua +++ b/compatibility.lua @@ -8,6 +8,30 @@ local alias = function(orig, new) minetest.register_alias(orig, new) end +--= Add {eatable} group to default apple, blueberries and brown mushroom + +local function add_grp(item, hp) + + local def = minetest.registered_items[item] + + if def then + + def.groups.eatable = hp + def.description = def.description .. " (♥" .. hp .. ")" + + minetest.override_item(item, { + description = def.description, + groups = def.groups + }) + end +end + +add_grp("default:apple", 2) +add_grp("default:blueberries", 1) +add_grp("flowers:mushroom_brown", 1) +add_grp("flowers:mushroom_red", -5) + + --= Aliases -- Banana diff --git a/mod.conf b/mod.conf index 03a9990..bcaba21 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = farming description = Adds many new plants and food into Minetest. -optional_depends = default, mcl_core, mcl_sounds, mcl_farming, mcl_stairs, mcl_flowers, stairs, lucky_block, toolranks +optional_depends = default, flowers, mcl_core, mcl_sounds, mcl_farming, mcl_stairs, mcl_flowers, stairs, lucky_block, toolranks min_minetest_version = 5.0 From 75e3f9fb425331e3e9346ed7fc990a9304e95660 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Fri, 26 Jul 2024 16:30:53 +0100 Subject: [PATCH 19/49] add helper function to add {eatable} --- compatibility.lua | 39 ++++------- crops/artichoke.lua | 6 +- crops/asparagus.lua | 6 +- crops/beans.lua | 6 +- crops/beetroot.lua | 12 ++-- crops/blackberry.lua | 6 +- crops/blueberry.lua | 18 +++-- crops/cabbage.lua | 6 +- crops/carrot.lua | 18 +++-- crops/chili.lua | 12 ++-- crops/cocoa.lua | 12 ++-- crops/coffee.lua | 6 +- crops/corn.lua | 18 +++-- crops/cucumber.lua | 6 +- crops/eggplant.lua | 6 +- crops/garlic.lua | 6 +- crops/ginger.lua | 6 +- crops/grapes.lua | 6 +- crops/lettuce.lua | 6 +- crops/melon.lua | 6 +- crops/mint.lua | 6 +- crops/onion.lua | 12 ++-- crops/parsley.lua | 6 +- crops/peas.lua | 13 ++-- crops/pepper.lua | 18 +++-- crops/pineapple.lua | 12 ++-- crops/potato.lua | 18 +++-- crops/pumpkin.lua | 12 ++-- crops/raspberry.lua | 12 ++-- crops/rhubarb.lua | 12 ++-- crops/rice.lua | 6 +- crops/ryeoatrice.lua | 6 +- crops/soy.lua | 18 +++-- crops/spinach.lua | 6 +- crops/strawberry.lua | 7 +- crops/sunflower.lua | 12 ++-- crops/tomato.lua | 12 ++-- crops/vanilla.lua | 6 +- crops/wheat.lua | 6 +- food.lua | 162 ++++++++++++++++++++++++++++--------------- init.lua | 23 +++++- 41 files changed, 387 insertions(+), 205 deletions(-) diff --git a/compatibility.lua b/compatibility.lua index 7c117b5..a476621 100644 --- a/compatibility.lua +++ b/compatibility.lua @@ -8,29 +8,12 @@ local alias = function(orig, new) minetest.register_alias(orig, new) end ---= Add {eatable} group to default apple, blueberries and brown mushroom - -local function add_grp(item, hp) - - local def = minetest.registered_items[item] - - if def then - - def.groups.eatable = hp - def.description = def.description .. " (♥" .. hp .. ")" - - minetest.override_item(item, { - description = def.description, - groups = def.groups - }) - end -end - -add_grp("default:apple", 2) -add_grp("default:blueberries", 1) -add_grp("flowers:mushroom_brown", 1) -add_grp("flowers:mushroom_red", -5) +--= Add {eatable} group to default food items if found +farming.add_eatable("default:apple", 2) +farming.add_eatable("default:blueberries", 1) +farming.add_eatable("flowers:mushroom_brown", 1) +farming.add_eatable("flowers:mushroom_red", -5) --= Aliases @@ -41,7 +24,7 @@ if eth then alias("farming_plus:banana", "ethereal:banana") else minetest.register_node(":ethereal:banana", { - description = S("Banana") .. " (♥2)", + description = S("Banana"), drawtype = "torchlike", tiles = {"farming_banana_single.png"}, inventory_image = "farming_banana_single.png", @@ -54,13 +37,15 @@ else fixed = {-0.2, -0.5, -0.2, 0.2, 0.2, 0.2} }, groups = { - food_banana = 1, fleshy = 3, dig_immediate = 3, flammable = 2, eatable = 2 + food_banana = 1, fleshy = 3, dig_immediate = 3 }, is_ground_content = false, on_use = minetest.item_eat(2), sounds = farming.sounds.node_sound_leaves_defaults() }) + farming.add_eatable("ethereal:banana", 2) + minetest.register_node(":ethereal:bananaleaves", { description = S("Banana Leaves"), tiles = {"farming_banana_leaf.png"}, @@ -103,7 +88,7 @@ if eth then alias("farming_plus:orange_seed", "ethereal:orange_tree_sapling") else minetest.register_node(":ethereal:orange", { - description = S("Orange") .. " (♥4)", + description = S("Orange"), drawtype = "plantlike", tiles = {"farming_orange.png"}, inventory_image = "farming_orange.png", @@ -116,13 +101,15 @@ else fixed = {-0.2, -0.3, -0.2, 0.2, 0.2, 0.2} }, groups = { - food_orange = 1, fleshy = 3, dig_immediate = 3, flammable = 2, eatable = 4 + food_orange = 1, fleshy = 3, dig_immediate = 3, flammable = 2 }, is_ground_content = false, on_use = minetest.item_eat(4), sounds = farming.sounds.node_sound_leaves_defaults() }) + farming.add_eatable("ethereal:orange", 4) + alias("farming_plus:orange_item", "ethereal:orange") alias("farming_plus:orange", "ethereal:orange") alias("farming_plus:orange_seed", "default:sapling") diff --git a/crops/artichoke.lua b/crops/artichoke.lua index a366300..ba95d90 100644 --- a/crops/artichoke.lua +++ b/crops/artichoke.lua @@ -3,10 +3,10 @@ local S = farming.translate -- item definition minetest.register_craftitem("farming:artichoke", { - description = S("Artichoke") .. " (♥4)", + description = S("Artichoke"), inventory_image = "farming_artichoke.png", groups = { - compostability = 48, seed = 2, food_artichoke = 1, flammable = 2, eatable = 4 + compostability = 48, seed = 2, food_artichoke = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:artichoke_1") @@ -14,6 +14,8 @@ minetest.register_craftitem("farming:artichoke", { on_use = minetest.item_eat(4) }) +farming.add_eatable("farming:artichoke", 4) + -- crop definition local def = { drawtype = "plantlike", diff --git a/crops/asparagus.lua b/crops/asparagus.lua index ddba6a7..1af5a7b 100644 --- a/crops/asparagus.lua +++ b/crops/asparagus.lua @@ -3,10 +3,10 @@ local S = farming.translate -- asparagus minetest.register_craftitem("farming:asparagus", { - description = S("Asparagus") .. " (♥1)", + description = S("Asparagus"), inventory_image = "farming_asparagus.png", groups = { - compostability = 48, seed = 2, food_asparagus = 1, flammable = 2, eatable = 1 + compostability = 48, seed = 2, food_asparagus = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:asparagus_1") @@ -14,6 +14,8 @@ minetest.register_craftitem("farming:asparagus", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:asparagus", 1) + -- asparagus definition local def = { drawtype = "plantlike", diff --git a/crops/beans.lua b/crops/beans.lua index 61ec21a..c582598 100644 --- a/crops/beans.lua +++ b/crops/beans.lua @@ -70,15 +70,17 @@ end -- beans minetest.register_craftitem("farming:beans", { - description = S("Green Beans" .. " (♥1)"), + description = S("Green Beans"), inventory_image = "farming_beans.png", - groups = {compostability = 48, seed = 2, food_beans = 1, flammable = 2, eatable = 1}, + groups = {compostability = 48, seed = 2, food_beans = 1, flammable = 2}, on_use = minetest.item_eat(1), on_place = function(itemstack, placer, pointed_thing) return place_beans(itemstack, placer, pointed_thing, "farming:beanpole_1") end }) +farming.add_eatable("farming:beans", 1) + -- beans can be used for green dye minetest.register_craft({ output = a.dye_green, diff --git a/crops/beetroot.lua b/crops/beetroot.lua index 23e10b9..d4a10b5 100644 --- a/crops/beetroot.lua +++ b/crops/beetroot.lua @@ -4,10 +4,10 @@ local a = farming.recipe_items -- beetroot minetest.register_craftitem("farming:beetroot", { - description = S("Beetroot") .. " (♥1)", + description = S("Beetroot"), inventory_image = "farming_beetroot.png", groups = { - compostability = 48, seed = 2, food_beetroot = 1, flammable = 2, eatable = 1 + compostability = 48, seed = 2, food_beetroot = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:beetroot_1") @@ -15,14 +15,18 @@ minetest.register_craftitem("farming:beetroot", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:beetroot", 1) + -- beetroot soup minetest.register_craftitem("farming:beetroot_soup", { - description = S("Beetroot Soup") .. " (♥6)", + description = S("Beetroot Soup"), inventory_image = "farming_beetroot_soup.png", - groups = {flammable = 2, eatable = 6}, + groups = {flammable = 2}, on_use = minetest.item_eat(6, "farming:bowl") }) +farming.add_eatable("farming:beetroot_soup", 6) + minetest.register_craft({ output = "farming:beetroot_soup", recipe = { diff --git a/crops/blackberry.lua b/crops/blackberry.lua index c90e956..e041930 100644 --- a/crops/blackberry.lua +++ b/crops/blackberry.lua @@ -3,11 +3,11 @@ local S = farming.translate -- blackberries minetest.register_craftitem("farming:blackberry", { - description = S("Blackberries" .. " (♥1)"), + description = S("Blackberries"), inventory_image = "farming_blackberry.png", groups = { compostability = 48, seed = 2, food_blackberries = 1, food_blackberry = 1, - food_berry = 1, flammable = 2, eatable = 1 + food_berry = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:blackberry_1") @@ -15,6 +15,8 @@ minetest.register_craftitem("farming:blackberry", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:blackberry", 1) + local def = { drawtype = "plantlike", tiles = {"farming_blackberry_1.png"}, diff --git a/crops/blueberry.lua b/crops/blueberry.lua index 11708e0..9a6aaa0 100644 --- a/crops/blueberry.lua +++ b/crops/blueberry.lua @@ -4,11 +4,11 @@ local a = farming.recipe_items -- blueberries minetest.register_craftitem("farming:blueberries", { - description = S("Wild Blueberries") .. " (♥1)", + description = S("Wild Blueberries"), inventory_image = "farming_blueberries.png", groups = { compostability = 48,seed = 2, food_blueberries = 1, food_blueberry = 1, - food_berry = 1, flammable = 2, eatable = 1 + food_berry = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:blueberry_1") @@ -16,14 +16,18 @@ minetest.register_craftitem("farming:blueberries", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:blueberries", 1) + -- blueberry muffin (thanks to sosogirl123 @ deviantart.com for muffin image) minetest.register_craftitem("farming:muffin_blueberry", { - description = S("Blueberry Muffin") .. " (♥2)", + description = S("Blueberry Muffin"), inventory_image = "farming_blueberry_muffin.png", on_use = minetest.item_eat(2), - groups = {compostability = 65, eatable = 2} + groups = {compostability = 65} }) +farming.add_eatable("farming:muffin_blueberry", 2) + minetest.register_craft({ output = "farming:muffin_blueberry 2", recipe = { @@ -33,12 +37,14 @@ minetest.register_craft({ -- Blueberry Pie minetest.register_craftitem("farming:blueberry_pie", { - description = S("Blueberry Pie") .. " (♥6)", + description = S("Blueberry Pie"), inventory_image = "farming_blueberry_pie.png", on_use = minetest.item_eat(6), - groups = {compostability = 75, eatable = 6} + groups = {compostability = 75} }) +farming.add_eatable("farming:blueberry_pie", 6) + minetest.register_craft({ output = "farming:blueberry_pie", recipe = { diff --git a/crops/cabbage.lua b/crops/cabbage.lua index 8bec347..09c878d 100644 --- a/crops/cabbage.lua +++ b/crops/cabbage.lua @@ -3,10 +3,10 @@ local S = farming.translate -- cabbage minetest.register_craftitem("farming:cabbage", { - description = S("Cabbage") .. " (♥1)", + description = S("Cabbage"), inventory_image = "farming_cabbage.png", groups = { - compostability = 48, seed = 2, food_cabbage = 1, flammable = 2, eatable = 1 + compostability = 48, seed = 2, food_cabbage = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:cabbage_1") @@ -14,6 +14,8 @@ minetest.register_craftitem("farming:cabbage", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:cabbage", 1) + local def = { drawtype = "plantlike", tiles = {"farming_cabbage_1.png"}, diff --git a/crops/carrot.lua b/crops/carrot.lua index 7313010..f00be26 100644 --- a/crops/carrot.lua +++ b/crops/carrot.lua @@ -9,10 +9,10 @@ local a = farming.recipe_items -- carrot minetest.register_craftitem("farming:carrot", { - description = S("Carrot") .. " (♥4)", + description = S("Carrot"), inventory_image = "farming_carrot.png", groups = { - compostability = 48, seed = 2, food_carrot = 1, flammable = 2, eatable = 4 + compostability = 48, seed = 2, food_carrot = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:carrot_1") @@ -20,14 +20,18 @@ minetest.register_craftitem("farming:carrot", { on_use = minetest.item_eat(4) }) +farming.add_eatable("farming:carrot", 4) + -- carrot juice minetest.register_craftitem("farming:carrot_juice", { - description = S("Carrot Juice") .. " (♥4)", + description = S("Carrot Juice"), inventory_image = "farming_carrot_juice.png", on_use = minetest.item_eat(4, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1, eatable = 4} + groups = {vessel = 1, drink = 1} }) +farming.add_eatable("farming:carrot_juice", 4) + minetest.register_craft({ output = "farming:carrot_juice", recipe = { @@ -42,12 +46,14 @@ minetest.register_craft({ -- golden carrot minetest.register_craftitem("farming:carrot_gold", { - description = S("Golden Carrot") .. " (♥10)", + description = S("Golden Carrot"), inventory_image = "farming_carrot_gold.png", on_use = minetest.item_eat(10), - groups = {eatable = 10} + groups = {flammable = 2} }) +farming.add_eatable("farming:carrot_gold", 10) + minetest.register_craft({ output = "farming:carrot_gold", recipe = {{"group:food_carrot", "default:gold_lump"}} diff --git a/crops/chili.lua b/crops/chili.lua index d8484e5..b5e2e0d 100644 --- a/crops/chili.lua +++ b/crops/chili.lua @@ -4,10 +4,10 @@ local a = farming.recipe_items -- chili pepper minetest.register_craftitem("farming:chili_pepper", { - description = S("Chili Pepper") .. " (♥2)", + description = S("Chili Pepper"), inventory_image = "farming_chili_pepper.png", groups = { - compostability = 48, seed = 2, food_chili_pepper = 1, flammable = 4, eatable = 2 + compostability = 48, seed = 2, food_chili_pepper = 1, flammable = 4 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:chili_1") @@ -15,14 +15,18 @@ minetest.register_craftitem("farming:chili_pepper", { on_use = minetest.item_eat(2) }) +farming.add_eatable("farming:chili_pepper", 2) + -- bowl of chili minetest.register_craftitem("farming:chili_bowl", { - description = S("Bowl of Chili") .. " (♥8)", + description = S("Bowl of Chili"), inventory_image = "farming_chili_bowl.png", on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65, eatable = 8} + groups = {compostability = 65} }) +farming.add_eatable("farming:chili_bowl", 8) + minetest.register_craft({ output = "farming:chili_bowl", recipe = { diff --git a/crops/cocoa.lua b/crops/cocoa.lua index 75abbed..0f80233 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -94,12 +94,14 @@ minetest.register_craft( { -- chocolate cookie minetest.register_craftitem("farming:cookie", { - description = S("Cookie") .. " (♥2)", + description = S("Cookie"), inventory_image = "farming_cookie.png", on_use = minetest.item_eat(2), - groups = {eatable = 2} + groups = {flammable = 2} }) +farming.add_eatable("farming:cookie", 2) + minetest.register_craft( { output = "farming:cookie 8", recipe = { @@ -109,12 +111,14 @@ minetest.register_craft( { -- bar of dark chocolate (thanks to Ice Pandora for her deviantart.com chocolate tutorial) minetest.register_craftitem("farming:chocolate_dark", { - description = S("Bar of Dark Chocolate") .. " (♥3)", + description = S("Bar of Dark Chocolate"), inventory_image = "farming_chocolate_dark.png", on_use = minetest.item_eat(3), - groups = {eatable = 3} + groups = {flammable = 2} }) +farming.add_eatable("farming:chocolate_dark", 3) + minetest.register_craft( { output = "farming:chocolate_dark", recipe = { diff --git a/crops/coffee.lua b/crops/coffee.lua index 9c04236..3230dc9 100644 --- a/crops/coffee.lua +++ b/crops/coffee.lua @@ -14,7 +14,7 @@ minetest.register_craftitem("farming:coffee_beans", { -- cup of coffee minetest.register_node("farming:coffee_cup", { - description = S("Cup of Coffee") .. " (♥2)", + description = S("Cup of Coffee"), drawtype = "torchlike", tiles = {"farming_coffee_cup.png"}, inventory_image = "farming_coffee_cup.png", @@ -25,12 +25,14 @@ minetest.register_node("farming:coffee_cup", { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1, eatable = 2}, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1}, is_ground_content = false, on_use = minetest.item_eat(2, "vessels:drinking_glass"), sounds = farming.sounds.node_sound_glass_defaults() }) +farming.add_eatable("farming:coffee_cup", 2) + minetest.register_alias("farming:coffee_cup_hot", "farming:coffee_cup") minetest.register_alias("farming:drinking_cup", "vessels:drinking_glass") diff --git a/crops/corn.lua b/crops/corn.lua index f5a87be..5e650d2 100644 --- a/crops/corn.lua +++ b/crops/corn.lua @@ -9,10 +9,10 @@ local a = farming.recipe_items -- corn minetest.register_craftitem("farming:corn", { - description = S("Corn") .. " (♥3)", + description = S("Corn"), inventory_image = "farming_corn.png", groups = { - compostability = 45, seed = 2, food_corn = 1, flammable = 2, eatable = 3 + compostability = 45, seed = 2, food_corn = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:corn_1") @@ -20,14 +20,18 @@ minetest.register_craftitem("farming:corn", { on_use = minetest.item_eat(3) }) +farming.add_eatable("farming:corn", 3) + -- corn on the cob (texture by TenPlus1) minetest.register_craftitem("farming:corn_cob", { - description = S("Corn on the Cob") .. " (♥5)", + description = S("Corn on the Cob"), inventory_image = "farming_corn_cob.png", - groups = {compostability = 65, food_corn_cooked = 1, flammable = 2, eatable = 5}, + groups = {compostability = 65, food_corn_cooked = 1, flammable = 2}, on_use = minetest.item_eat(5) }) +farming.add_eatable("farming:corn_cob", 5) + minetest.register_craft({ type = "cooking", cooktime = 10, @@ -37,12 +41,14 @@ minetest.register_craft({ -- popcorn minetest.register_craftitem("farming:popcorn", { - description = S("Popcorn") .. " (♥4)", + description = S("Popcorn"), inventory_image = "farming_popcorn.png", - groups = {compostability = 55, food_popcorn = 1, flammable = 2, eatable = 4}, + groups = {compostability = 55, food_popcorn = 1, flammable = 2}, on_use = minetest.item_eat(4) }) +farming.add_eatable("farming:popcorn", 4) + minetest.register_craft({ output = "farming:popcorn", recipe = { diff --git a/crops/cucumber.lua b/crops/cucumber.lua index f207395..58b65ae 100644 --- a/crops/cucumber.lua +++ b/crops/cucumber.lua @@ -8,10 +8,10 @@ local S = farming.translate -- cucumber minetest.register_craftitem("farming:cucumber", { - description = S("Cucumber") .. " (♥4)", + description = S("Cucumber"), inventory_image = "farming_cucumber.png", groups = { - compostability = 48, seed = 2, food_cucumber = 1, flammable = 2, eatable = 4 + compostability = 48, seed = 2, food_cucumber = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:cucumber_1") @@ -19,6 +19,8 @@ minetest.register_craftitem("farming:cucumber", { on_use = minetest.item_eat(4) }) +farming.add_eatable("farming:cucumber", 4) + -- cucumber definition local def = { drawtype = "plantlike", diff --git a/crops/eggplant.lua b/crops/eggplant.lua index c923772..9dec3d1 100644 --- a/crops/eggplant.lua +++ b/crops/eggplant.lua @@ -3,10 +3,10 @@ local S = farming.translate -- eggplant minetest.register_craftitem("farming:eggplant", { - description = S("Eggplant") .. " (♥3)", + description = S("Eggplant"), inventory_image = "farming_eggplant.png", groups = { - compostability = 48, seed = 2, food_eggplant = 1, flammable = 2, eatable = 3 + compostability = 48, seed = 2, food_eggplant = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:eggplant_1") @@ -14,6 +14,8 @@ minetest.register_craftitem("farming:eggplant", { on_use = minetest.item_eat(3) }) +farming.add_eatable("farming:eggplant", 3) + -- definition local def = { drawtype = "plantlike", diff --git a/crops/garlic.lua b/crops/garlic.lua index ce76922..dbcfbfb 100644 --- a/crops/garlic.lua +++ b/crops/garlic.lua @@ -13,12 +13,14 @@ minetest.register_craftitem("farming:garlic_clove", { -- garlic bulb minetest.register_craftitem("farming:garlic", { - description = S("Garlic") .. " (♥1)", + description = S("Garlic"), inventory_image = "crops_garlic.png", on_use = minetest.item_eat(1), - groups = {food_garlic = 1, flammable = 3, compostability = 55, eatable = 1} + groups = {food_garlic = 1, flammable = 3, compostability = 55} }) +farming.add_eatable("farming:garlic", 1) + minetest.register_craft({ output = "farming:garlic_clove 8", recipe = {{"farming:garlic"}} diff --git a/crops/ginger.lua b/crops/ginger.lua index e161c7a..9081074 100644 --- a/crops/ginger.lua +++ b/crops/ginger.lua @@ -3,10 +3,10 @@ local S = farming.translate -- ginger minetest.register_craftitem("farming:ginger", { - description = S("Ginger") .. " (♥1)", + description = S("Ginger"), inventory_image = "farming_ginger.png", groups = { - compostability = 48, seed = 2, food_ginger = 1, flammable = 2, eatable = 1 + compostability = 48, seed = 2, food_ginger = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:ginger_1") @@ -14,6 +14,8 @@ minetest.register_craftitem("farming:ginger", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:ginger", 1) + -- ginger definition local def = { drawtype = "plantlike", diff --git a/crops/grapes.lua b/crops/grapes.lua index 6445323..851a4ea 100644 --- a/crops/grapes.lua +++ b/crops/grapes.lua @@ -65,17 +65,19 @@ end -- grapes minetest.register_craftitem("farming:grapes", { - description = S("Grapes") .. " (♥2)", + description = S("Grapes"), inventory_image = "farming_grapes.png", on_use = minetest.item_eat(2), groups = { - compostability = 48, seed = 2, food_grapes = 1, flammable = 3, eatable = 2 + compostability = 48, seed = 2, food_grapes = 1, flammable = 3 }, on_place = function(itemstack, placer, pointed_thing) return place_grapes(itemstack, placer, pointed_thing, "farming:grapes_1") end }) +farming.add_eatable("farming:grapes", 2) + -- grapes can be used for violet dye minetest.register_craft({ output = a.dye_violet, diff --git a/crops/lettuce.lua b/crops/lettuce.lua index 268cca1..6c2365d 100644 --- a/crops/lettuce.lua +++ b/crops/lettuce.lua @@ -3,10 +3,10 @@ local S = farming.translate -- lettuce minetest.register_craftitem("farming:lettuce", { - description = S("Lettuce") .. " (♥2)", + description = S("Lettuce"), inventory_image = "farming_lettuce.png", groups = { - compostability = 48, seed = 2, food_lettuce = 1, flammable = 2, eatable = 2 + compostability = 48, seed = 2, food_lettuce = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:lettuce_1") @@ -14,6 +14,8 @@ minetest.register_craftitem("farming:lettuce", { on_use = minetest.item_eat(2) }) +farming.add_eatable("farming:lettuce", 2) + local def = { drawtype = "plantlike", tiles = {"farming_lettuce_1.png"}, diff --git a/crops/melon.lua b/crops/melon.lua index 8e16e50..c5c74b3 100644 --- a/crops/melon.lua +++ b/crops/melon.lua @@ -4,10 +4,10 @@ local a = farming.recipe_items -- melon minetest.register_craftitem("farming:melon_slice", { - description = S("Melon Slice") .. " (♥2)", + description = S("Melon Slice"), inventory_image = "farming_melon_slice.png", groups = { - compostability = 48, seed = 2, food_melon_slice = 1, flammable = 3, eatable = 2 + compostability = 48, seed = 2, food_melon_slice = 1, flammable = 3 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:melon_1") @@ -15,6 +15,8 @@ minetest.register_craftitem("farming:melon_slice", { on_use = minetest.item_eat(2) }) +farming.add_eatable("farming:melon_slice", 2) + minetest.register_craft({ output = "farming:melon_8", recipe = { diff --git a/crops/mint.lua b/crops/mint.lua index da39cc2..038c7b1 100644 --- a/crops/mint.lua +++ b/crops/mint.lua @@ -38,12 +38,14 @@ minetest.register_craftitem("farming:mint_leaf", { -- mint tea minetest.register_craftitem("farming:mint_tea", { - description = S("Mint Tea") .. " (♥2)", + description = S("Mint Tea"), inventory_image = "farming_mint_tea.png", on_use = minetest.item_eat(2, a.drinking_glass), - groups = {flammable = 4, eatable = 2} + groups = {flammable = 4} }) +farming.add_eatable("farming:mint_tea", 2) + minetest.register_craft({ output = "farming:mint_tea", recipe = { diff --git a/crops/onion.lua b/crops/onion.lua index c849b31..ef5250f 100644 --- a/crops/onion.lua +++ b/crops/onion.lua @@ -10,10 +10,10 @@ local a = farming.recipe_items -- onion minetest.register_craftitem("farming:onion", { - description = S("Onion") .. " (♥1)", + description = S("Onion"), inventory_image = "crops_onion.png", groups = { - compostability = 48, seed = 2, food_onion = 1, flammable = 3, eatable = 1 + compostability = 48, seed = 2, food_onion = 1, flammable = 3 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:onion_1") @@ -21,14 +21,18 @@ minetest.register_craftitem("farming:onion", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:onion", 1) + -- onion soup minetest.register_craftitem("farming:onion_soup", { - description = S("Onion Soup") .. " (♥6)", + description = S("Onion Soup"), inventory_image = "farming_onion_soup.png", - groups = {flammable = 2, compostability = 65, eatable = 6}, + groups = {flammable = 2, compostability = 65}, on_use = minetest.item_eat(6, a.bowl) }) +farming.add_eatable("farming:onion_soup", 6) + minetest.register_craft({ output = "farming:onion_soup", recipe = { diff --git a/crops/parsley.lua b/crops/parsley.lua index beb92f4..bfb679a 100644 --- a/crops/parsley.lua +++ b/crops/parsley.lua @@ -3,10 +3,10 @@ local S = farming.translate -- item definition minetest.register_craftitem("farming:parsley", { - description = S("Parsley") .. " (♥1)", + description = S("Parsley"), inventory_image = "farming_parsley.png", groups = { - compostability = 48, seed = 2, food_parsley = 1, flammable = 2, eatable = 1 + compostability = 48, seed = 2, food_parsley = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:parsley_1") @@ -14,6 +14,8 @@ minetest.register_craftitem("farming:parsley", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:parsley", 1) + -- crop definition local def = { drawtype = "plantlike", diff --git a/crops/peas.lua b/crops/peas.lua index c242abe..ef49d7c 100644 --- a/crops/peas.lua +++ b/crops/peas.lua @@ -6,11 +6,10 @@ local a = farming.recipe_items -- pea pod minetest.register_craftitem("farming:pea_pod", { - description = S("Pea Pod") .. " (♥1)", + description = S("Pea Pod"), inventory_image = "farming_pea_pod.png", groups = { - compostability = 48, seed = 2, food_peas = 1, food_pea_pod = 1, flammable = 2, - eatable = 1 + compostability = 48, seed = 2, food_peas = 1, food_pea_pod = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:pea_1") @@ -18,17 +17,21 @@ minetest.register_craftitem("farming:pea_pod", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:pea_pod", 1) + -- replacement for separate peas item that was removed minetest.register_alias("farming:peas", "farming:pea_pod") -- pea soup minetest.register_craftitem("farming:pea_soup", { - description = S("Pea Soup") .. " (♥4)", + description = S("Pea Soup"), inventory_image = "farming_pea_soup.png", - groups = {flammable = 2, compostability = 65, eatable = 4}, + groups = {flammable = 2, compostability = 65}, on_use = minetest.item_eat(4, a.bowl) }) +farming.add_eatable("farming:pea_soup", 4) + minetest.register_craft({ output = "farming:pea_soup", recipe = { diff --git a/crops/pepper.lua b/crops/pepper.lua index 4b187c5..1b0965f 100644 --- a/crops/pepper.lua +++ b/crops/pepper.lua @@ -20,28 +20,34 @@ minetest.register_craftitem("farming:peppercorn", { -- green pepper minetest.register_craftitem("farming:pepper", { - description = S("Green Pepper") .. " (♥2)", + description = S("Green Pepper"), inventory_image = "crops_pepper.png", on_use = minetest.item_eat(2), - groups = {food_pepper = 1, flammable = 3, compostability = 55, eatable = 2} + groups = {food_pepper = 1, flammable = 3, compostability = 55} }) +farming.add_eatable("farming:pepper", 2) + -- yellow pepper minetest.register_craftitem("farming:pepper_yellow", { - description = S("Yellow Pepper") .. " (♥3)", + description = S("Yellow Pepper"), inventory_image = "crops_pepper_yellow.png", on_use = minetest.item_eat(3), - groups = {food_pepper = 1, flammable = 3, compostability = 55, eatable = 3} + groups = {food_pepper = 1, flammable = 3, compostability = 55} }) +farming.add_eatable("farming:pepper_yellow", 3) + -- red pepper minetest.register_craftitem("farming:pepper_red", { - description = S("Red Pepper") .. " (♥3)", + description = S("Red Pepper"), inventory_image = "crops_pepper_red.png", on_use = minetest.item_eat(4), - groups = {food_pepper = 1, flammable = 3, compostability = 55, eatable = 3} + groups = {food_pepper = 1, flammable = 3, compostability = 55} }) +farming.add_eatable("farming:pepper_red", 3) + minetest.register_craft({ output = "farming:peppercorn", recipe = {{"group:food_pepper"}} diff --git a/crops/pineapple.lua b/crops/pineapple.lua index b7f94f0..708e35f 100644 --- a/crops/pineapple.lua +++ b/crops/pineapple.lua @@ -36,12 +36,14 @@ minetest.register_node("farming:pineapple", { -- pineapple minetest.register_craftitem("farming:pineapple_ring", { - description = S("Pineapple Ring") .. " (♥1)", + description = S("Pineapple Ring"), inventory_image = "farming_pineapple_ring.png", - groups = {food_pineapple_ring = 1, flammable = 2, compostability = 45, eatable = 1}, + groups = {food_pineapple_ring = 1, flammable = 2, compostability = 45}, on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:pineapple_ring", 1) + minetest.register_craft( { output = "farming:pineapple_ring 5", recipe = {{"group:food_pineapple"}}, @@ -50,12 +52,14 @@ minetest.register_craft( { -- pineapple juice minetest.register_craftitem("farming:pineapple_juice", { - description = S("Pineapple Juice") .. " (♥4)", + description = S("Pineapple Juice"), inventory_image = "farming_pineapple_juice.png", on_use = minetest.item_eat(4, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1, compostability = 35, eatable = 4} + groups = {vessel = 1, drink = 1, compostability = 35} }) +farming.add_eatable("farming:pineapple_juice", 4) + minetest.register_craft({ output = "farming:pineapple_juice", recipe = { diff --git a/crops/potato.lua b/crops/potato.lua index 2fa137d..aeb722f 100644 --- a/crops/potato.lua +++ b/crops/potato.lua @@ -8,9 +8,9 @@ local S = farming.translate -- potato minetest.register_craftitem("farming:potato", { - description = S("Potato") .. " (♥1)", + description = S("Potato"), inventory_image = "farming_potato.png", - groups = {compostability = 48, seed = 2, food_potato = 1, flammable = 2, eatable = 1}, + groups = {compostability = 48, seed = 2, food_potato = 1, flammable = 2}, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:potato_1") end, @@ -26,14 +26,18 @@ minetest.register_craftitem("farming:potato", { end }) +farming.add_eatable("farming:potato", 1) + -- baked potato minetest.register_craftitem("farming:baked_potato", { - description = S("Baked Potato") .. " (♥6)", + description = S("Baked Potato"), inventory_image = "farming_baked_potato.png", on_use = minetest.item_eat(6), - groups = {eatable = 6} + groups = {flammable = 2} }) +farming.add_eatable("farming:baked_potato", 6) + minetest.register_craft({ type = "cooking", cooktime = 10, @@ -43,12 +47,14 @@ minetest.register_craft({ -- Potato and cucumber Salad minetest.register_craftitem("farming:potato_salad", { - description = S("Cucumber and Potato Salad") .. " (♥10)", + description = S("Cucumber and Potato Salad"), inventory_image = "farming_potato_salad.png", on_use = minetest.item_eat(10, "farming:bowl"), - groups = {eatable = 10} + groups = {flammable = 2} }) +farming.add_eatable("farming:potato_salad", 10) + minetest.register_craft({ output = "farming:potato_salad", recipe = { diff --git a/crops/pumpkin.lua b/crops/pumpkin.lua index 437864b..524ea93 100644 --- a/crops/pumpkin.lua +++ b/crops/pumpkin.lua @@ -3,10 +3,10 @@ local S = farming.translate -- pumpkin slice minetest.register_craftitem("farming:pumpkin_slice", { - description = S("Pumpkin Slice") .. " (♥2)", + description = S("Pumpkin Slice"), inventory_image = "farming_pumpkin_slice.png", groups = { - compostability = 48, seed = 2, food_pumpkin_slice = 1, flammable = 2, eatable = 2 + compostability = 48, seed = 2, food_pumpkin_slice = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:pumpkin_1") @@ -14,6 +14,8 @@ minetest.register_craftitem("farming:pumpkin_slice", { on_use = minetest.item_eat(2) }) +farming.add_eatable("farming:pumpkin_slice", 2) + minetest.register_craft({ output = "farming:pumpkin", recipe = { @@ -125,12 +127,14 @@ minetest.register_craft({ -- pumpkin bread minetest.register_craftitem("farming:pumpkin_bread", { - description = S("Pumpkin Bread") .. " (♥8)", + description = S("Pumpkin Bread"), inventory_image = "farming_pumpkin_bread.png", on_use = minetest.item_eat(8), - groups = {food_bread = 1, flammable = 2, eatable = 8} + groups = {food_bread = 1, flammable = 2} }) +farming.add_eatable("farming:pumpkin_bread", 8) + minetest.register_craftitem("farming:pumpkin_dough", { description = S("Pumpkin Dough"), inventory_image = "farming_pumpkin_dough.png" diff --git a/crops/raspberry.lua b/crops/raspberry.lua index bae2ac1..8fc986b 100644 --- a/crops/raspberry.lua +++ b/crops/raspberry.lua @@ -4,11 +4,11 @@ local a = farming.recipe_items -- raspberries minetest.register_craftitem("farming:raspberries", { - description = S("Raspberries") .. " (♥1)", + description = S("Raspberries"), inventory_image = "farming_raspberries.png", groups = { compostability = 48, seed = 2, food_raspberries = 1, food_raspberry = 1, - food_berry = 1, flammable = 2, eatable = 1 + food_berry = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:raspberry_1") @@ -16,14 +16,18 @@ minetest.register_craftitem("farming:raspberries", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:raspberries", 1) + -- raspberry smoothie minetest.register_craftitem("farming:smoothie_raspberry", { - description = S("Raspberry Smoothie") .. " (♥2)", + description = S("Raspberry Smoothie"), inventory_image = "farming_raspberry_smoothie.png", on_use = minetest.item_eat(2, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1, compostability = 65, eatable = 2} + groups = {vessel = 1, drink = 1, compostability = 65} }) +farming.add_eatable("farming:smoothie_raspberry", 2) + minetest.register_craft({ output = "farming:smoothie_raspberry", recipe = { diff --git a/crops/rhubarb.lua b/crops/rhubarb.lua index 65e7cb0..87a250c 100644 --- a/crops/rhubarb.lua +++ b/crops/rhubarb.lua @@ -4,10 +4,10 @@ local a = farming.recipe_items -- rhubarb minetest.register_craftitem("farming:rhubarb", { - description = S("Rhubarb") .. " (♥1)", + description = S("Rhubarb"), inventory_image = "farming_rhubarb.png", groups = { - compostability = 48, seed = 2, food_rhubarb = 1, flammable = 2, eatable = 1 + compostability = 48, seed = 2, food_rhubarb = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:rhubarb_1") @@ -15,14 +15,18 @@ minetest.register_craftitem("farming:rhubarb", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:rhubarb", 1) + -- rhubarb pie minetest.register_craftitem("farming:rhubarb_pie", { - description = S("Rhubarb Pie") .. " (♥6)", + description = S("Rhubarb Pie"), inventory_image = "farming_rhubarb_pie.png", on_use = minetest.item_eat(6), - groups = {compostability = 65, eatable = 6} + groups = {compostability = 65, flammable = 2} }) +farming.add_eatable("farming:rhubarb_pie", 6) + minetest.register_craft({ output = "farming:rhubarb_pie", recipe = { diff --git a/crops/rice.lua b/crops/rice.lua index 5952d18..6dc2d59 100644 --- a/crops/rice.lua +++ b/crops/rice.lua @@ -46,12 +46,14 @@ minetest.register_craft({ -- rice flour and bread minetest.register_craftitem("farming:rice_bread", { - description = S("Rice Bread") .. " (♥5)", + description = S("Rice Bread"), inventory_image = "farming_rice_bread.png", on_use = minetest.item_eat(5), - groups = {food_rice_bread = 1, flammable = 2, compostability = 65, eatable = 5} + groups = {food_rice_bread = 1, flammable = 2, compostability = 65} }) +farming.add_eatable("farming:rice_bread", 5) + minetest.register_craftitem("farming:rice_flour", { description = S("Rice Flour"), inventory_image = "farming_rice_flour.png", diff --git a/crops/ryeoatrice.lua b/crops/ryeoatrice.lua index 4b63983..81fa8db 100644 --- a/crops/ryeoatrice.lua +++ b/crops/ryeoatrice.lua @@ -81,12 +81,14 @@ minetest.register_craft({ -- Multigrain bread minetest.register_craftitem("farming:bread_multigrain", { - description = S("Multigrain Bread") .. " (♥7)", + description = S("Multigrain Bread"), inventory_image = "farming_bread_multigrain.png", on_use = minetest.item_eat(7), - groups = {food_bread = 1, flammable = 2, compostability = 65, eatable = 7} + groups = {food_bread = 1, flammable = 2, compostability = 65} }) +farming.add_eatable("farming:bread_multigrain", 7) + minetest.register_craft({ type = "cooking", cooktime = 15, diff --git a/crops/soy.lua b/crops/soy.lua index d8300ca..dee9e92 100644 --- a/crops/soy.lua +++ b/crops/soy.lua @@ -51,7 +51,7 @@ minetest.register_craft( { -- soy milk minetest.register_node("farming:soy_milk", { - description = S("Soy Milk") .. " (♥2)", + description = S("Soy Milk"), drawtype = "plantlike", tiles = {"farming_soy_milk_glass.png"}, inventory_image = "farming_soy_milk_glass.png", @@ -64,13 +64,15 @@ minetest.register_node("farming:soy_milk", { }, on_use = minetest.item_eat(2, "vessels:drinking_glass"), groups = { - vessel = 1, food_milk_glass = 1, dig_immediate = 3, eatable = 2, + vessel = 1, food_milk_glass = 1, dig_immediate = 3, attached_node = 1, drink = 1, compostability = 65 }, is_ground_content = false, sounds = farming.sounds.node_sound_glass_defaults() }) +farming.add_eatable("farming:soy_milk", 2) + minetest.register_craft( { output = "farming:soy_milk", recipe = { @@ -85,14 +87,16 @@ minetest.register_craft( { -- tofu minetest.register_craftitem("farming:tofu", { - description = S("Tofu") .. " (♥3)", + description = S("Tofu"), inventory_image = "farming_tofu.png", groups = { - food_tofu = 1, food_meat_raw = 1, flammable = 2, compostability = 65, eatable = 3 + food_tofu = 1, food_meat_raw = 1, flammable = 2, compostability = 65, }, on_use = minetest.item_eat(3) }) +farming.add_eatable("farming:tofu", 3) + minetest.register_craft({ output = "farming:tofu", recipe = { @@ -104,12 +108,14 @@ minetest.register_craft({ -- cooked tofu minetest.register_craftitem("farming:tofu_cooked", { - description = S("Cooked Tofu") .. " (♥6)", + description = S("Cooked Tofu"), inventory_image = "farming_tofu_cooked.png", - groups = {food_meat = 1, flammable = 2, compostability = 65, eatable = 6}, + groups = {food_meat = 1, flammable = 2, compostability = 65}, on_use = minetest.item_eat(6) }) +farming.add_eatable("farming:tofu_cooked", 6) + minetest.register_craft({ type = "cooking", output = "farming:tofu_cooked", diff --git a/crops/spinach.lua b/crops/spinach.lua index fd611b9..d07bf5e 100644 --- a/crops/spinach.lua +++ b/crops/spinach.lua @@ -3,10 +3,10 @@ local S = farming.translate -- spinach minetest.register_craftitem("farming:spinach", { - description = S("Spinach") .. " (♥1)", + description = S("Spinach"), inventory_image = "farming_spinach.png", groups = { - compostability = 48, seed = 2, food_spinach = 1, flammable = 2, eatable = 1 + compostability = 48, seed = 2, food_spinach = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:spinach_1") @@ -14,6 +14,8 @@ minetest.register_craftitem("farming:spinach", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:spinach", 1) + -- definition local def = { drawtype = "plantlike", diff --git a/crops/strawberry.lua b/crops/strawberry.lua index a763c4b..77983b6 100644 --- a/crops/strawberry.lua +++ b/crops/strawberry.lua @@ -3,11 +3,10 @@ local S = farming.translate -- Strawberry (can also be planted as seed) minetest.register_craftitem(":ethereal:strawberry", { - description = S("Strawberry") .. " (♥1)", + description = S("Strawberry"), inventory_image = "ethereal_strawberry.png", groups = { - compostability = 48, seed = 2, food_strawberry = 1, food_berry = 1, - flammable = 2, eatable = 1 + compostability = 48, seed = 2, food_strawberry = 1, food_berry = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:strawberry_1") @@ -15,6 +14,8 @@ minetest.register_craftitem(":ethereal:strawberry", { on_use = minetest.item_eat(1) }) +farming.add_eatable("ethereal:strawberry", 1) + -- Define Strawberry Bush growth stages local def = { drawtype = "plantlike", diff --git a/crops/sunflower.lua b/crops/sunflower.lua index c21e3bc..9134336 100644 --- a/crops/sunflower.lua +++ b/crops/sunflower.lua @@ -45,14 +45,16 @@ minetest.register_craft({ -- sunflower seeds (toasted) minetest.register_craftitem("farming:sunflower_seeds_toasted", { - description = S("Toasted Sunflower Seeds") .. " (♥1)", + description = S("Toasted Sunflower Seeds"), inventory_image = "farming_sunflower_seeds_toasted.png", groups = { - food_sunflower_seeds_toasted = 1, flammable = 2, compostability = 65, eatable = 1 + food_sunflower_seeds_toasted = 1, flammable = 2, compostability = 65 }, on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:sunflower_seeds_toasted", 1) + minetest.register_craft({ type = "cooking", cooktime = 10, @@ -99,12 +101,14 @@ minetest.register_craft({ -- sunflower seed bread minetest.register_craftitem("farming:sunflower_bread", { - description = S("Sunflower Seed Bread") .. " (♥8)", + description = S("Sunflower Seed Bread"), inventory_image = "farming_sunflower_bread.png", on_use = minetest.item_eat(8), - groups = {food_bread = 1, flammable = 2, eatable = 8} + groups = {food_bread = 1, flammable = 2} }) +farming.add_eatable("farming:sunflower_bread", 8) + minetest.register_craft({ output = "farming:sunflower_bread", recipe = { diff --git a/crops/tomato.lua b/crops/tomato.lua index 51cad19..c1f66c7 100644 --- a/crops/tomato.lua +++ b/crops/tomato.lua @@ -8,23 +8,27 @@ local S = farming.translate -- tomato minetest.register_craftitem("farming:tomato", { - description = S("Tomato") .. " (♥4)", + description = S("Tomato"), inventory_image = "farming_tomato.png", - groups = {compostability = 45, seed = 2, food_tomato = 1, flammable = 2, eatable = 4}, + groups = {compostability = 45, seed = 2, food_tomato = 1, flammable = 2}, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:tomato_1") end, on_use = minetest.item_eat(4) }) +farming.add_eatable("farming:tomato", 4) + -- tomato soup minetest.register_craftitem("farming:tomato_soup", { - description = S("Tomato Soup") .. " (♥8)", + description = S("Tomato Soup"), inventory_image = "farming_tomato_soup.png", - groups = {flammable = 2, compostability = 65, eatable = 8}, + groups = {flammable = 2, compostability = 65}, on_use = minetest.item_eat(8, "farming:bowl") }) +farming.add_eatable("farming:tomato_soup", 8) + minetest.register_craft({ output = "farming:tomato_soup", recipe = { diff --git a/crops/vanilla.lua b/crops/vanilla.lua index a18136d..057f119 100644 --- a/crops/vanilla.lua +++ b/crops/vanilla.lua @@ -4,10 +4,10 @@ local a = farming.recipe_items -- vanilla minetest.register_craftitem("farming:vanilla", { - description = S("Vanilla") .. " (♥1)", + description = S("Vanilla"), inventory_image = "farming_vanilla.png", groups = { - compostability = 48, seed = 2, food_vanilla = 1, flammable = 2, eatable = 1 + compostability = 48, seed = 2, food_vanilla = 1, flammable = 2 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:vanilla_1") @@ -15,6 +15,8 @@ minetest.register_craftitem("farming:vanilla", { on_use = minetest.item_eat(1) }) +farming.add_eatable("farming:vanilla", 1) + -- crop definition local def = { drawtype = "plantlike", diff --git a/crops/wheat.lua b/crops/wheat.lua index c344062..6e98bb4 100644 --- a/crops/wheat.lua +++ b/crops/wheat.lua @@ -99,12 +99,14 @@ minetest.register_craft({ -- bread minetest.register_craftitem("farming:bread", { - description = S("Bread") .. " (♥5)", + description = S("Bread"), inventory_image = "farming_bread.png", on_use = minetest.item_eat(5), - groups = {food_bread = 1, flammable = 2, eatable = 5} + groups = {food_bread = 1, flammable = 2} }) +farming.add_eatable("farming:bread", 5) + minetest.register_craft({ type = "cooking", cooktime = 15, diff --git a/food.lua b/food.lua index 45c048e..8fc5422 100644 --- a/food.lua +++ b/food.lua @@ -5,12 +5,14 @@ local a = farming.recipe_items -- sliced bread minetest.register_craftitem("farming:bread_slice", { - description = S("Sliced Bread") .. " (♥1)", + description = S("Sliced Bread"), inventory_image = "farming_bread_slice.png", on_use = minetest.item_eat(1), - groups = {food_bread_slice = 1, flammable = 2, compostability = 65, eatable = 1} + groups = {food_bread_slice = 1, compostability = 65} }) +farming.add_eatable("farming:bread_slice", 1) + minetest.register_craft({ output = "farming:bread_slice 5", recipe = {{"group:food_bread", a.cutting_board}}, @@ -20,12 +22,14 @@ minetest.register_craft({ -- toast minetest.register_craftitem("farming:toast", { - description = S("Toast") .. " (♥1)", + description = S("Toast"), inventory_image = "farming_toast.png", on_use = minetest.item_eat(1), - groups = {food_toast = 1, flammable = 2, compostability = 65, eatable = 1} + groups = {food_toast = 1, compostability = 65} }) +farming.add_eatable("farming:toast", 1) + minetest.register_craft({ type = "cooking", cooktime = 3, @@ -36,12 +40,14 @@ minetest.register_craft({ -- toast sandwich minetest.register_craftitem("farming:toast_sandwich", { - description = S("Toast Sandwich") .. " (♥4)", + description = S("Toast Sandwich"), inventory_image = "farming_toast_sandwich.png", on_use = minetest.item_eat(4), - groups = {flammable = 2, compostability = 85, eatable = 4} + groups = {compostability = 85} }) +farming.add_eatable("farming:toast_sandwich", 4) + minetest.register_craft({ output = "farming:toast_sandwich", recipe = { @@ -348,12 +354,14 @@ minetest.register_craft({ -- Turkish Delight minetest.register_craftitem("farming:turkish_delight", { - description = S("Turkish Delight") .. " (♥2)", + description = S("Turkish Delight"), inventory_image = "farming_turkish_delight.png", - groups = {flammable = 3, compostability = 85, eatable = 2}, + groups = {compostability = 85}, on_use = minetest.item_eat(2) }) +farming.add_eatable("farming:turkish_delight", 2) + minetest.register_craft({ output = "farming:turkish_delight 4", recipe = { @@ -371,12 +379,14 @@ minetest.register_craft({ -- Garlic Bread minetest.register_craftitem("farming:garlic_bread", { - description = S("Garlic Bread") .. " (♥2)", + description = S("Garlic Bread"), inventory_image = "farming_garlic_bread.png", - groups = {flammable = 3, compostability = 65, eatable = 2}, + groups = {compostability = 65}, on_use = minetest.item_eat(2) }) +farming.add_eatable("farming:garlic_bread", 2) + minetest.register_craft({ output = "farming:garlic_bread", recipe = { @@ -387,12 +397,14 @@ minetest.register_craft({ -- Donuts (thanks to Bockwurst for making the donut images) minetest.register_craftitem("farming:donut", { - description = S("Donut") .. " (♥4)", + description = S("Donut"), inventory_image = "farming_donut.png", on_use = minetest.item_eat(4), - groups = {compostability = 65, eatable = 4} + groups = {compostability = 65} }) +farming.add_eatable("farming:donut", 4) + minetest.register_craft({ output = "farming:donut 3", recipe = { @@ -403,12 +415,14 @@ minetest.register_craft({ }) minetest.register_craftitem("farming:donut_chocolate", { - description = S("Chocolate Donut") .. " (♥6)", + description = S("Chocolate Donut"), inventory_image = "farming_donut_chocolate.png", on_use = minetest.item_eat(6), - groups = {compostability = 65, eatable = 6} + groups = {compostability = 65} }) +farming.add_eatable("farming:donut_chocolate", 6) + minetest.register_craft({ output = "farming:donut_chocolate", recipe = { @@ -418,12 +432,14 @@ minetest.register_craft({ }) minetest.register_craftitem("farming:donut_apple", { - description = S("Apple Donut") .. " (♥6)", + description = S("Apple Donut"), inventory_image = "farming_donut_apple.png", on_use = minetest.item_eat(6), - groups = {compostability = 65, eatable = 6} + groups = {compostability = 65} }) +farming.add_eatable("farming:donut_apple", 6) + minetest.register_craft({ output = "farming:donut_apple", recipe = { @@ -435,12 +451,14 @@ minetest.register_craft({ -- Porridge Oats minetest.register_craftitem("farming:porridge", { - description = S("Porridge") .. " (♥6)", + description = S("Porridge"), inventory_image = "farming_porridge.png", on_use = minetest.item_eat(6, a.bowl), - groups = {compostability = 65, eatable = 6} + groups = {compostability = 65} }) +farming.add_eatable("farming:porridge", 6) + minetest.register_craft({ output = "farming:porridge", recipe = { @@ -456,12 +474,14 @@ minetest.register_craft({ -- Jaffa Cake minetest.register_craftitem("farming:jaffa_cake", { - description = S("Jaffa Cake") .. " (♥6)", + description = S("Jaffa Cake"), inventory_image = "farming_jaffa_cake.png", on_use = minetest.item_eat(6), - groups = {compostability = 65, eatable = 6} + groups = {compostability = 65} }) +farming.add_eatable("farming:jaffa_cake", 6) + minetest.register_craft({ output = "farming:jaffa_cake 3", recipe = { @@ -480,12 +500,14 @@ minetest.register_craft({ -- Apple Pie minetest.register_craftitem("farming:apple_pie", { - description = S("Apple Pie") .. " (♥6)", + description = S("Apple Pie"), inventory_image = "farming_apple_pie.png", on_use = minetest.item_eat(6), - groups = {compostability = 75, eatable = 6} + groups = {compostability = 75} }) +farming.add_eatable("farming:apple_pie", 6) + minetest.register_craft({ output = "farming:apple_pie", recipe = { @@ -498,9 +520,9 @@ minetest.register_craft({ -- Cactus Juice minetest.register_craftitem("farming:cactus_juice", { - description = S("Cactus Juice") .. " (♥1)", + description = S("Cactus Juice"), inventory_image = "farming_cactus_juice.png", - groups = {vessel = 1, drink = 1, compostability = 55, eatable = 1}, + groups = {vessel = 1, drink = 1, compostability = 55}, on_use = function(itemstack, user, pointed_thing) @@ -514,6 +536,8 @@ minetest.register_craftitem("farming:cactus_juice", { end }) +farming.add_eatable("farming:cactus_juice", 1) + minetest.register_craft({ output = "farming:cactus_juice", recipe = { @@ -556,12 +580,14 @@ minetest.register_craft({ -- Mac & Cheese minetest.register_craftitem("farming:mac_and_cheese", { - description = S("Mac & Cheese") .. " (♥6)", + description = S("Mac & Cheese"), inventory_image = "farming_mac_and_cheese.png", on_use = minetest.item_eat(6, a.bowl), - groups = {compostability = 65, eatable = 6} + groups = {compostability = 65} }) +farming.add_eatable("farming:mac_and_cheese", 6) + minetest.register_craft({ output = "farming:mac_and_cheese", recipe = { @@ -572,12 +598,14 @@ minetest.register_craft({ -- Spaghetti minetest.register_craftitem("farming:spaghetti", { - description = S("Spaghetti") .. " (♥8)", + description = S("Spaghetti"), inventory_image = "farming_spaghetti.png", on_use = minetest.item_eat(8), - groups = {compostability = 65, eatable = 8} + groups = {compostability = 65} }) +farming.add_eatable("farming:spaghetti", 8) + minetest.register_craft({ output = "farming:spaghetti", recipe = { @@ -590,12 +618,14 @@ minetest.register_craft({ -- Korean Bibimbap minetest.register_craftitem("farming:bibimbap", { - description = S("Bibimbap") .. " (♥8)", + description = S("Bibimbap"), inventory_image = "farming_bibimbap.png", on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65, eatable = 8} + groups = {compostability = 65} }) +farming.add_eatable("farming:bibimbap", 8) + minetest.register_craft({ output = "farming:bibimbap", recipe = { @@ -620,12 +650,14 @@ minetest.register_craft({ -- Burger minetest.register_craftitem("farming:burger", { - description = S("Burger") .. " (♥16)", + description = S("Burger"), inventory_image = "farming_burger.png", on_use = minetest.item_eat(16), - groups = {compostability = 95, eatable = 16} + groups = {compostability = 95} }) +farming.add_eatable("farming:burger", 16) + minetest.register_craft({ output = "farming:burger", recipe = { @@ -638,12 +670,14 @@ minetest.register_craft({ -- Salad minetest.register_craftitem("farming:salad", { - description = S("Salad") .. " (♥8)", + description = S("Salad"), inventory_image = "farming_salad.png", on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 45, eatable = 8} + groups = {compostability = 45} }) +farming.add_eatable("farming:salad", 8) + minetest.register_craft({ output = "farming:salad", type = "shapeless", @@ -656,12 +690,14 @@ minetest.register_craft({ -- Triple Berry Smoothie minetest.register_craftitem("farming:smoothie_berry", { - description = S("Triple Berry Smoothie") .. " (♥6)", + description = S("Triple Berry Smoothie"), inventory_image = "farming_berry_smoothie.png", on_use = minetest.item_eat(6, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1, compostability = 65, eatable = 6} + groups = {vessel = 1, drink = 1, compostability = 65} }) +farming.add_eatable("farming:smoothie_berry", 6) + minetest.register_craft({ output = "farming:smoothie_berry", type = "shapeless", @@ -675,12 +711,14 @@ minetest.register_craft({ -- Patatas a la importancia minetest.register_craftitem("farming:spanish_potatoes", { - description = S("Spanish Potatoes") .. " (♥8)", + description = S("Spanish Potatoes"), inventory_image = "farming_spanish_potatoes.png", on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65, eatable = 8} + groups = {compostability = 65} }) +farming.add_eatable("farming:spanish_potatoes", 8) + minetest.register_craft({ output = "farming:spanish_potatoes", recipe = { @@ -694,12 +732,14 @@ minetest.register_craft({ -- Potato omelet minetest.register_craftitem("farming:potato_omelet", { - description = S("Potato omelet") .. " (♥6)", + description = S("Potato omelette"), inventory_image = "farming_potato_omelet.png", on_use = minetest.item_eat(6, a.bowl), - groups = {compostability = 65, eatable = 6} + groups = {compostability = 65} }) +farming.add_eatable("farming:potato_omelet", 6) + minetest.register_craft({ output = "farming:potato_omelet", recipe = { @@ -712,12 +752,14 @@ minetest.register_craft({ -- Paella minetest.register_craftitem("farming:paella", { - description = S("Paella") .. " (♥8)", + description = S("Paella"), inventory_image = "farming_paella.png", on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65, eatable = 8} + groups = {compostability = 65} }) +farming.add_eatable("farming:paella", 8) + minetest.register_craft({ output = "farming:paella", recipe = { @@ -731,12 +773,14 @@ minetest.register_craft({ -- Flan minetest.register_craftitem("farming:flan", { - description = S("Vanilla Flan") .. " (♥8)", + description = S("Vanilla Flan"), inventory_image = "farming_vanilla_flan.png", on_use = minetest.item_eat(6), - groups = {compostability = 65, eatable = 6} + groups = {compostability = 65} }) +farming.add_eatable("farming:flan", 6) + minetest.register_craft({ output = "farming:flan", recipe = { @@ -754,12 +798,14 @@ minetest.register_craft({ -- Vegan Cheese minetest.register_craftitem("farming:cheese_vegan", { - description = S("Vegan Cheese") .. " (♥2)", + description = S("Vegan Cheese"), inventory_image = "farming_cheese_vegan.png", on_use = minetest.item_eat(2), - groups = {compostability = 65, food_cheese = 1, flammable = 2, eatable = 2} + groups = {compostability = 65, food_cheese = 1} }) +farming.add_eatable("farming:cheese_vegan", 2) + minetest.register_craft({ output = "farming:cheese_vegan", recipe = { @@ -790,12 +836,14 @@ minetest.register_craft({ -- Onigiri minetest.register_craftitem("farming:onigiri", { - description = S("Onigiri") .. " (♥2)", + description = S("Onigiri"), inventory_image = "farming_onigiri.png", on_use = minetest.item_eat(2), - groups = {flammable = 2, compostability = 65, eatable = 2} + groups = {compostability = 65} }) +farming.add_eatable("farming:onigiri", 2) + minetest.register_craft({ output = "farming:onigiri", recipe = { @@ -807,12 +855,14 @@ minetest.register_craft({ -- Gyoza minetest.register_craftitem("farming:gyoza", { - description = S("Gyoza") .. " (♥4)", + description = S("Gyoza"), inventory_image = "farming_gyoza.png", on_use = minetest.item_eat(4), - groups = {flammable = 2, compostability = 65, eatable = 4} + groups = {compostability = 65} }) +farming.add_eatable("farming:gyoza", 4) + minetest.register_craft({ output = "farming:gyoza 4", recipe = { @@ -829,12 +879,14 @@ minetest.register_craft({ -- Mochi minetest.register_craftitem("farming:mochi", { - description = S("Mochi") .. " (♥4)", + description = S("Mochi"), inventory_image = "farming_mochi.png", on_use = minetest.item_eat(3), - groups = {flammable = 2, compostability = 65, eatable = 3} + groups = {compostability = 65} }) +farming.add_eatable("farming:mochi", 3) + minetest.register_craft({ output = "farming:mochi", recipe = { @@ -851,12 +903,14 @@ minetest.register_craft({ -- Gingerbread Man minetest.register_craftitem("farming:gingerbread_man", { - description = S("Gingerbread Man") .. " (♥2)", + description = S("Gingerbread Man"), inventory_image = "farming_gingerbread_man.png", on_use = minetest.item_eat(2), - groups = {compostability = 85, eatable = 2} + groups = {compostability = 85} }) +farming.add_eatable("farming:gingerbread_man", 2) + minetest.register_craft({ output = "farming:gingerbread_man 3", recipe = { diff --git a/init.lua b/init.lua index 1916a99..ea6a22c 100644 --- a/init.lua +++ b/init.lua @@ -7,7 +7,7 @@ farming = { mod = "redo", - version = "20240625", + version = "20240726", path = minetest.get_modpath("farming"), select = { type = "fixed", @@ -767,6 +767,27 @@ if input then input:close() end +-- helper function to add {eatable} group to food items +local mod_tt_base = minetest.get_modpath("tt_base") -- mod does similar to infotext + +function farming.add_eatable(item, hp) + + local def = minetest.registered_items[item] + + if def then + + local grps = def.groups or {} + + grps.eatable = hp ; grps.flammable = 2 + + if mod_tt_base == nil then + def.description = def.description .. " (♥" .. hp .. ")" + end + + minetest.override_item(item, {description = def.description, groups = grps}) + end +end + -- recipe items dofile(farming.path .. "/items.lua") From b61998217df83eef1fa5a97fbd641899485598e6 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 27 Jul 2024 08:23:46 +0100 Subject: [PATCH 20/49] tidy code --- crops/artichoke.lua | 2 +- crops/asparagus.lua | 2 +- crops/beans.lua | 2 +- crops/beetroot.lua | 3 +-- crops/blackberry.lua | 2 +- crops/blueberry.lua | 2 +- crops/cabbage.lua | 2 +- crops/carrot.lua | 5 ++--- crops/chili.lua | 2 +- crops/cocoa.lua | 6 ++---- crops/corn.lua | 6 +++--- crops/cucumber.lua | 2 +- crops/eggplant.lua | 2 +- crops/garlic.lua | 2 +- crops/ginger.lua | 2 +- crops/grapes.lua | 2 +- crops/lettuce.lua | 2 +- crops/melon.lua | 2 +- crops/mint.lua | 3 +-- crops/onion.lua | 4 ++-- crops/parsley.lua | 2 +- crops/peas.lua | 4 ++-- crops/pepper.lua | 8 ++++---- crops/pineapple.lua | 2 +- crops/potato.lua | 8 +++----- crops/pumpkin.lua | 4 ++-- crops/raspberry.lua | 2 +- crops/rhubarb.lua | 4 ++-- crops/rice.lua | 2 +- crops/ryeoatrice.lua | 2 +- crops/soy.lua | 4 ++-- crops/spinach.lua | 2 +- crops/strawberry.lua | 2 +- crops/sunflower.lua | 4 ++-- crops/tomato.lua | 4 ++-- crops/vanilla.lua | 2 +- crops/wheat.lua | 2 +- food.lua | 2 ++ init.lua | 6 ++++-- 39 files changed, 59 insertions(+), 62 deletions(-) diff --git a/crops/artichoke.lua b/crops/artichoke.lua index ba95d90..4528ae8 100644 --- a/crops/artichoke.lua +++ b/crops/artichoke.lua @@ -6,7 +6,7 @@ minetest.register_craftitem("farming:artichoke", { description = S("Artichoke"), inventory_image = "farming_artichoke.png", groups = { - compostability = 48, seed = 2, food_artichoke = 1, flammable = 2 + compostability = 48, seed = 2, food_artichoke = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:artichoke_1") diff --git a/crops/asparagus.lua b/crops/asparagus.lua index 1af5a7b..fed92f1 100644 --- a/crops/asparagus.lua +++ b/crops/asparagus.lua @@ -6,7 +6,7 @@ minetest.register_craftitem("farming:asparagus", { description = S("Asparagus"), inventory_image = "farming_asparagus.png", groups = { - compostability = 48, seed = 2, food_asparagus = 1, flammable = 2 + compostability = 48, seed = 2, food_asparagus = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:asparagus_1") diff --git a/crops/beans.lua b/crops/beans.lua index c582598..82bcc43 100644 --- a/crops/beans.lua +++ b/crops/beans.lua @@ -72,7 +72,7 @@ end minetest.register_craftitem("farming:beans", { description = S("Green Beans"), inventory_image = "farming_beans.png", - groups = {compostability = 48, seed = 2, food_beans = 1, flammable = 2}, + groups = {compostability = 48, seed = 2, food_beans = 1}, on_use = minetest.item_eat(1), on_place = function(itemstack, placer, pointed_thing) return place_beans(itemstack, placer, pointed_thing, "farming:beanpole_1") diff --git a/crops/beetroot.lua b/crops/beetroot.lua index d4a10b5..d3e88fd 100644 --- a/crops/beetroot.lua +++ b/crops/beetroot.lua @@ -7,7 +7,7 @@ minetest.register_craftitem("farming:beetroot", { description = S("Beetroot"), inventory_image = "farming_beetroot.png", groups = { - compostability = 48, seed = 2, food_beetroot = 1, flammable = 2 + compostability = 48, seed = 2, food_beetroot = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:beetroot_1") @@ -21,7 +21,6 @@ farming.add_eatable("farming:beetroot", 1) minetest.register_craftitem("farming:beetroot_soup", { description = S("Beetroot Soup"), inventory_image = "farming_beetroot_soup.png", - groups = {flammable = 2}, on_use = minetest.item_eat(6, "farming:bowl") }) diff --git a/crops/blackberry.lua b/crops/blackberry.lua index e041930..6c8f7f0 100644 --- a/crops/blackberry.lua +++ b/crops/blackberry.lua @@ -7,7 +7,7 @@ minetest.register_craftitem("farming:blackberry", { inventory_image = "farming_blackberry.png", groups = { compostability = 48, seed = 2, food_blackberries = 1, food_blackberry = 1, - food_berry = 1, flammable = 2 + food_berry = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:blackberry_1") diff --git a/crops/blueberry.lua b/crops/blueberry.lua index 9a6aaa0..9c1ed7c 100644 --- a/crops/blueberry.lua +++ b/crops/blueberry.lua @@ -8,7 +8,7 @@ minetest.register_craftitem("farming:blueberries", { inventory_image = "farming_blueberries.png", groups = { compostability = 48,seed = 2, food_blueberries = 1, food_blueberry = 1, - food_berry = 1, flammable = 2 + food_berry = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:blueberry_1") diff --git a/crops/cabbage.lua b/crops/cabbage.lua index 09c878d..d1a0731 100644 --- a/crops/cabbage.lua +++ b/crops/cabbage.lua @@ -6,7 +6,7 @@ minetest.register_craftitem("farming:cabbage", { description = S("Cabbage"), inventory_image = "farming_cabbage.png", groups = { - compostability = 48, seed = 2, food_cabbage = 1, flammable = 2 + compostability = 48, seed = 2, food_cabbage = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:cabbage_1") diff --git a/crops/carrot.lua b/crops/carrot.lua index f00be26..6393501 100644 --- a/crops/carrot.lua +++ b/crops/carrot.lua @@ -12,7 +12,7 @@ minetest.register_craftitem("farming:carrot", { description = S("Carrot"), inventory_image = "farming_carrot.png", groups = { - compostability = 48, seed = 2, food_carrot = 1, flammable = 2 + compostability = 48, seed = 2, food_carrot = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:carrot_1") @@ -48,8 +48,7 @@ minetest.register_craft({ minetest.register_craftitem("farming:carrot_gold", { description = S("Golden Carrot"), inventory_image = "farming_carrot_gold.png", - on_use = minetest.item_eat(10), - groups = {flammable = 2} + on_use = minetest.item_eat(10) }) farming.add_eatable("farming:carrot_gold", 10) diff --git a/crops/chili.lua b/crops/chili.lua index b5e2e0d..a71d8ab 100644 --- a/crops/chili.lua +++ b/crops/chili.lua @@ -7,7 +7,7 @@ minetest.register_craftitem("farming:chili_pepper", { description = S("Chili Pepper"), inventory_image = "farming_chili_pepper.png", groups = { - compostability = 48, seed = 2, food_chili_pepper = 1, flammable = 4 + compostability = 48, seed = 2, food_chili_pepper = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:chili_1") diff --git a/crops/cocoa.lua b/crops/cocoa.lua index 0f80233..9d99058 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -96,8 +96,7 @@ minetest.register_craft( { minetest.register_craftitem("farming:cookie", { description = S("Cookie"), inventory_image = "farming_cookie.png", - on_use = minetest.item_eat(2), - groups = {flammable = 2} + on_use = minetest.item_eat(2) }) farming.add_eatable("farming:cookie", 2) @@ -113,8 +112,7 @@ minetest.register_craft( { minetest.register_craftitem("farming:chocolate_dark", { description = S("Bar of Dark Chocolate"), inventory_image = "farming_chocolate_dark.png", - on_use = minetest.item_eat(3), - groups = {flammable = 2} + on_use = minetest.item_eat(3) }) farming.add_eatable("farming:chocolate_dark", 3) diff --git a/crops/corn.lua b/crops/corn.lua index 5e650d2..9bf600c 100644 --- a/crops/corn.lua +++ b/crops/corn.lua @@ -12,7 +12,7 @@ minetest.register_craftitem("farming:corn", { description = S("Corn"), inventory_image = "farming_corn.png", groups = { - compostability = 45, seed = 2, food_corn = 1, flammable = 2 + compostability = 45, seed = 2, food_corn = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:corn_1") @@ -26,7 +26,7 @@ farming.add_eatable("farming:corn", 3) minetest.register_craftitem("farming:corn_cob", { description = S("Corn on the Cob"), inventory_image = "farming_corn_cob.png", - groups = {compostability = 65, food_corn_cooked = 1, flammable = 2}, + groups = {compostability = 65, food_corn_cooked = 1}, on_use = minetest.item_eat(5) }) @@ -43,7 +43,7 @@ minetest.register_craft({ minetest.register_craftitem("farming:popcorn", { description = S("Popcorn"), inventory_image = "farming_popcorn.png", - groups = {compostability = 55, food_popcorn = 1, flammable = 2}, + groups = {compostability = 55, food_popcorn = 1}, on_use = minetest.item_eat(4) }) diff --git a/crops/cucumber.lua b/crops/cucumber.lua index 58b65ae..3f96a4f 100644 --- a/crops/cucumber.lua +++ b/crops/cucumber.lua @@ -11,7 +11,7 @@ minetest.register_craftitem("farming:cucumber", { description = S("Cucumber"), inventory_image = "farming_cucumber.png", groups = { - compostability = 48, seed = 2, food_cucumber = 1, flammable = 2 + compostability = 48, seed = 2, food_cucumber = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:cucumber_1") diff --git a/crops/eggplant.lua b/crops/eggplant.lua index 9dec3d1..9b8009a 100644 --- a/crops/eggplant.lua +++ b/crops/eggplant.lua @@ -6,7 +6,7 @@ minetest.register_craftitem("farming:eggplant", { description = S("Eggplant"), inventory_image = "farming_eggplant.png", groups = { - compostability = 48, seed = 2, food_eggplant = 1, flammable = 2 + compostability = 48, seed = 2, food_eggplant = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:eggplant_1") diff --git a/crops/garlic.lua b/crops/garlic.lua index dbcfbfb..ea9c054 100644 --- a/crops/garlic.lua +++ b/crops/garlic.lua @@ -16,7 +16,7 @@ minetest.register_craftitem("farming:garlic", { description = S("Garlic"), inventory_image = "crops_garlic.png", on_use = minetest.item_eat(1), - groups = {food_garlic = 1, flammable = 3, compostability = 55} + groups = {food_garlic = 1, compostability = 55} }) farming.add_eatable("farming:garlic", 1) diff --git a/crops/ginger.lua b/crops/ginger.lua index 9081074..9a88ecd 100644 --- a/crops/ginger.lua +++ b/crops/ginger.lua @@ -6,7 +6,7 @@ minetest.register_craftitem("farming:ginger", { description = S("Ginger"), inventory_image = "farming_ginger.png", groups = { - compostability = 48, seed = 2, food_ginger = 1, flammable = 2 + compostability = 48, seed = 2, food_ginger = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:ginger_1") diff --git a/crops/grapes.lua b/crops/grapes.lua index 851a4ea..eb75eef 100644 --- a/crops/grapes.lua +++ b/crops/grapes.lua @@ -69,7 +69,7 @@ minetest.register_craftitem("farming:grapes", { inventory_image = "farming_grapes.png", on_use = minetest.item_eat(2), groups = { - compostability = 48, seed = 2, food_grapes = 1, flammable = 3 + compostability = 48, seed = 2, food_grapes = 1 }, on_place = function(itemstack, placer, pointed_thing) return place_grapes(itemstack, placer, pointed_thing, "farming:grapes_1") diff --git a/crops/lettuce.lua b/crops/lettuce.lua index 6c2365d..2423525 100644 --- a/crops/lettuce.lua +++ b/crops/lettuce.lua @@ -6,7 +6,7 @@ minetest.register_craftitem("farming:lettuce", { description = S("Lettuce"), inventory_image = "farming_lettuce.png", groups = { - compostability = 48, seed = 2, food_lettuce = 1, flammable = 2 + compostability = 48, seed = 2, food_lettuce = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:lettuce_1") diff --git a/crops/melon.lua b/crops/melon.lua index c5c74b3..000044c 100644 --- a/crops/melon.lua +++ b/crops/melon.lua @@ -7,7 +7,7 @@ minetest.register_craftitem("farming:melon_slice", { description = S("Melon Slice"), inventory_image = "farming_melon_slice.png", groups = { - compostability = 48, seed = 2, food_melon_slice = 1, flammable = 3 + compostability = 48, seed = 2, food_melon_slice = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:melon_1") diff --git a/crops/mint.lua b/crops/mint.lua index 038c7b1..809f7b6 100644 --- a/crops/mint.lua +++ b/crops/mint.lua @@ -40,8 +40,7 @@ minetest.register_craftitem("farming:mint_leaf", { minetest.register_craftitem("farming:mint_tea", { description = S("Mint Tea"), inventory_image = "farming_mint_tea.png", - on_use = minetest.item_eat(2, a.drinking_glass), - groups = {flammable = 4} + on_use = minetest.item_eat(2, a.drinking_glass) }) farming.add_eatable("farming:mint_tea", 2) diff --git a/crops/onion.lua b/crops/onion.lua index ef5250f..771ba1f 100644 --- a/crops/onion.lua +++ b/crops/onion.lua @@ -13,7 +13,7 @@ minetest.register_craftitem("farming:onion", { description = S("Onion"), inventory_image = "crops_onion.png", groups = { - compostability = 48, seed = 2, food_onion = 1, flammable = 3 + compostability = 48, seed = 2, food_onion = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:onion_1") @@ -27,7 +27,7 @@ farming.add_eatable("farming:onion", 1) minetest.register_craftitem("farming:onion_soup", { description = S("Onion Soup"), inventory_image = "farming_onion_soup.png", - groups = {flammable = 2, compostability = 65}, + groups = {compostability = 65}, on_use = minetest.item_eat(6, a.bowl) }) diff --git a/crops/parsley.lua b/crops/parsley.lua index bfb679a..237985c 100644 --- a/crops/parsley.lua +++ b/crops/parsley.lua @@ -6,7 +6,7 @@ minetest.register_craftitem("farming:parsley", { description = S("Parsley"), inventory_image = "farming_parsley.png", groups = { - compostability = 48, seed = 2, food_parsley = 1, flammable = 2 + compostability = 48, seed = 2, food_parsley = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:parsley_1") diff --git a/crops/peas.lua b/crops/peas.lua index ef49d7c..857860b 100644 --- a/crops/peas.lua +++ b/crops/peas.lua @@ -9,7 +9,7 @@ minetest.register_craftitem("farming:pea_pod", { description = S("Pea Pod"), inventory_image = "farming_pea_pod.png", groups = { - compostability = 48, seed = 2, food_peas = 1, food_pea_pod = 1, flammable = 2 + compostability = 48, seed = 2, food_peas = 1, food_pea_pod = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:pea_1") @@ -26,7 +26,7 @@ minetest.register_alias("farming:peas", "farming:pea_pod") minetest.register_craftitem("farming:pea_soup", { description = S("Pea Soup"), inventory_image = "farming_pea_soup.png", - groups = {flammable = 2, compostability = 65}, + groups = {compostability = 65}, on_use = minetest.item_eat(4, a.bowl) }) diff --git a/crops/pepper.lua b/crops/pepper.lua index 1b0965f..2569485 100644 --- a/crops/pepper.lua +++ b/crops/pepper.lua @@ -23,7 +23,7 @@ minetest.register_craftitem("farming:pepper", { description = S("Green Pepper"), inventory_image = "crops_pepper.png", on_use = minetest.item_eat(2), - groups = {food_pepper = 1, flammable = 3, compostability = 55} + groups = {food_pepper = 1, compostability = 55} }) farming.add_eatable("farming:pepper", 2) @@ -33,7 +33,7 @@ minetest.register_craftitem("farming:pepper_yellow", { description = S("Yellow Pepper"), inventory_image = "crops_pepper_yellow.png", on_use = minetest.item_eat(3), - groups = {food_pepper = 1, flammable = 3, compostability = 55} + groups = {food_pepper = 1, compostability = 55} }) farming.add_eatable("farming:pepper_yellow", 3) @@ -43,10 +43,10 @@ minetest.register_craftitem("farming:pepper_red", { description = S("Red Pepper"), inventory_image = "crops_pepper_red.png", on_use = minetest.item_eat(4), - groups = {food_pepper = 1, flammable = 3, compostability = 55} + groups = {food_pepper = 1, compostability = 55} }) -farming.add_eatable("farming:pepper_red", 3) +farming.add_eatable("farming:pepper_red", 4) minetest.register_craft({ output = "farming:peppercorn", diff --git a/crops/pineapple.lua b/crops/pineapple.lua index 708e35f..9b3a57e 100644 --- a/crops/pineapple.lua +++ b/crops/pineapple.lua @@ -38,7 +38,7 @@ minetest.register_node("farming:pineapple", { minetest.register_craftitem("farming:pineapple_ring", { description = S("Pineapple Ring"), inventory_image = "farming_pineapple_ring.png", - groups = {food_pineapple_ring = 1, flammable = 2, compostability = 45}, + groups = {food_pineapple_ring = 1, compostability = 45}, on_use = minetest.item_eat(1) }) diff --git a/crops/potato.lua b/crops/potato.lua index aeb722f..63ce789 100644 --- a/crops/potato.lua +++ b/crops/potato.lua @@ -10,7 +10,7 @@ local S = farming.translate minetest.register_craftitem("farming:potato", { description = S("Potato"), inventory_image = "farming_potato.png", - groups = {compostability = 48, seed = 2, food_potato = 1, flammable = 2}, + groups = {compostability = 48, seed = 2, food_potato = 1}, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:potato_1") end, @@ -32,8 +32,7 @@ farming.add_eatable("farming:potato", 1) minetest.register_craftitem("farming:baked_potato", { description = S("Baked Potato"), inventory_image = "farming_baked_potato.png", - on_use = minetest.item_eat(6), - groups = {flammable = 2} + on_use = minetest.item_eat(6) }) farming.add_eatable("farming:baked_potato", 6) @@ -49,8 +48,7 @@ minetest.register_craft({ minetest.register_craftitem("farming:potato_salad", { description = S("Cucumber and Potato Salad"), inventory_image = "farming_potato_salad.png", - on_use = minetest.item_eat(10, "farming:bowl"), - groups = {flammable = 2} + on_use = minetest.item_eat(10, "farming:bowl") }) farming.add_eatable("farming:potato_salad", 10) diff --git a/crops/pumpkin.lua b/crops/pumpkin.lua index 524ea93..2d0bcda 100644 --- a/crops/pumpkin.lua +++ b/crops/pumpkin.lua @@ -6,7 +6,7 @@ minetest.register_craftitem("farming:pumpkin_slice", { description = S("Pumpkin Slice"), inventory_image = "farming_pumpkin_slice.png", groups = { - compostability = 48, seed = 2, food_pumpkin_slice = 1, flammable = 2 + compostability = 48, seed = 2, food_pumpkin_slice = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:pumpkin_1") @@ -130,7 +130,7 @@ minetest.register_craftitem("farming:pumpkin_bread", { description = S("Pumpkin Bread"), inventory_image = "farming_pumpkin_bread.png", on_use = minetest.item_eat(8), - groups = {food_bread = 1, flammable = 2} + groups = {food_bread = 1} }) farming.add_eatable("farming:pumpkin_bread", 8) diff --git a/crops/raspberry.lua b/crops/raspberry.lua index 8fc986b..5434a71 100644 --- a/crops/raspberry.lua +++ b/crops/raspberry.lua @@ -8,7 +8,7 @@ minetest.register_craftitem("farming:raspberries", { inventory_image = "farming_raspberries.png", groups = { compostability = 48, seed = 2, food_raspberries = 1, food_raspberry = 1, - food_berry = 1, flammable = 2 + food_berry = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:raspberry_1") diff --git a/crops/rhubarb.lua b/crops/rhubarb.lua index 87a250c..7304886 100644 --- a/crops/rhubarb.lua +++ b/crops/rhubarb.lua @@ -7,7 +7,7 @@ minetest.register_craftitem("farming:rhubarb", { description = S("Rhubarb"), inventory_image = "farming_rhubarb.png", groups = { - compostability = 48, seed = 2, food_rhubarb = 1, flammable = 2 + compostability = 48, seed = 2, food_rhubarb = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:rhubarb_1") @@ -22,7 +22,7 @@ minetest.register_craftitem("farming:rhubarb_pie", { description = S("Rhubarb Pie"), inventory_image = "farming_rhubarb_pie.png", on_use = minetest.item_eat(6), - groups = {compostability = 65, flammable = 2} + groups = {compostability = 65} }) farming.add_eatable("farming:rhubarb_pie", 6) diff --git a/crops/rice.lua b/crops/rice.lua index 6dc2d59..6cfef8a 100644 --- a/crops/rice.lua +++ b/crops/rice.lua @@ -49,7 +49,7 @@ minetest.register_craftitem("farming:rice_bread", { description = S("Rice Bread"), inventory_image = "farming_rice_bread.png", on_use = minetest.item_eat(5), - groups = {food_rice_bread = 1, flammable = 2, compostability = 65} + groups = {food_rice_bread = 1, compostability = 65} }) farming.add_eatable("farming:rice_bread", 5) diff --git a/crops/ryeoatrice.lua b/crops/ryeoatrice.lua index 81fa8db..358a7ae 100644 --- a/crops/ryeoatrice.lua +++ b/crops/ryeoatrice.lua @@ -84,7 +84,7 @@ minetest.register_craftitem("farming:bread_multigrain", { description = S("Multigrain Bread"), inventory_image = "farming_bread_multigrain.png", on_use = minetest.item_eat(7), - groups = {food_bread = 1, flammable = 2, compostability = 65} + groups = {food_bread = 1, compostability = 65} }) farming.add_eatable("farming:bread_multigrain", 7) diff --git a/crops/soy.lua b/crops/soy.lua index dee9e92..0c5a202 100644 --- a/crops/soy.lua +++ b/crops/soy.lua @@ -90,7 +90,7 @@ minetest.register_craftitem("farming:tofu", { description = S("Tofu"), inventory_image = "farming_tofu.png", groups = { - food_tofu = 1, food_meat_raw = 1, flammable = 2, compostability = 65, + food_tofu = 1, food_meat_raw = 1, compostability = 65, }, on_use = minetest.item_eat(3) }) @@ -110,7 +110,7 @@ minetest.register_craft({ minetest.register_craftitem("farming:tofu_cooked", { description = S("Cooked Tofu"), inventory_image = "farming_tofu_cooked.png", - groups = {food_meat = 1, flammable = 2, compostability = 65}, + groups = {food_meat = 1, compostability = 65}, on_use = minetest.item_eat(6) }) diff --git a/crops/spinach.lua b/crops/spinach.lua index d07bf5e..ea4019e 100644 --- a/crops/spinach.lua +++ b/crops/spinach.lua @@ -6,7 +6,7 @@ minetest.register_craftitem("farming:spinach", { description = S("Spinach"), inventory_image = "farming_spinach.png", groups = { - compostability = 48, seed = 2, food_spinach = 1, flammable = 2 + compostability = 48, seed = 2, food_spinach = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:spinach_1") diff --git a/crops/strawberry.lua b/crops/strawberry.lua index 77983b6..60f763d 100644 --- a/crops/strawberry.lua +++ b/crops/strawberry.lua @@ -6,7 +6,7 @@ minetest.register_craftitem(":ethereal:strawberry", { description = S("Strawberry"), inventory_image = "ethereal_strawberry.png", groups = { - compostability = 48, seed = 2, food_strawberry = 1, food_berry = 1, flammable = 2 + compostability = 48, seed = 2, food_strawberry = 1, food_berry = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:strawberry_1") diff --git a/crops/sunflower.lua b/crops/sunflower.lua index 9134336..339465a 100644 --- a/crops/sunflower.lua +++ b/crops/sunflower.lua @@ -48,7 +48,7 @@ minetest.register_craftitem("farming:sunflower_seeds_toasted", { description = S("Toasted Sunflower Seeds"), inventory_image = "farming_sunflower_seeds_toasted.png", groups = { - food_sunflower_seeds_toasted = 1, flammable = 2, compostability = 65 + food_sunflower_seeds_toasted = 1, compostability = 65 }, on_use = minetest.item_eat(1) }) @@ -104,7 +104,7 @@ minetest.register_craftitem("farming:sunflower_bread", { description = S("Sunflower Seed Bread"), inventory_image = "farming_sunflower_bread.png", on_use = minetest.item_eat(8), - groups = {food_bread = 1, flammable = 2} + groups = {food_bread = 1} }) farming.add_eatable("farming:sunflower_bread", 8) diff --git a/crops/tomato.lua b/crops/tomato.lua index c1f66c7..f3a88a3 100644 --- a/crops/tomato.lua +++ b/crops/tomato.lua @@ -10,7 +10,7 @@ local S = farming.translate minetest.register_craftitem("farming:tomato", { description = S("Tomato"), inventory_image = "farming_tomato.png", - groups = {compostability = 45, seed = 2, food_tomato = 1, flammable = 2}, + groups = {compostability = 45, seed = 2, food_tomato = 1}, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:tomato_1") end, @@ -23,7 +23,7 @@ farming.add_eatable("farming:tomato", 4) minetest.register_craftitem("farming:tomato_soup", { description = S("Tomato Soup"), inventory_image = "farming_tomato_soup.png", - groups = {flammable = 2, compostability = 65}, + groups = {compostability = 65}, on_use = minetest.item_eat(8, "farming:bowl") }) diff --git a/crops/vanilla.lua b/crops/vanilla.lua index 057f119..ed47fa7 100644 --- a/crops/vanilla.lua +++ b/crops/vanilla.lua @@ -7,7 +7,7 @@ minetest.register_craftitem("farming:vanilla", { description = S("Vanilla"), inventory_image = "farming_vanilla.png", groups = { - compostability = 48, seed = 2, food_vanilla = 1, flammable = 2 + compostability = 48, seed = 2, food_vanilla = 1 }, on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:vanilla_1") diff --git a/crops/wheat.lua b/crops/wheat.lua index 6e98bb4..f166dd3 100644 --- a/crops/wheat.lua +++ b/crops/wheat.lua @@ -102,7 +102,7 @@ minetest.register_craftitem("farming:bread", { description = S("Bread"), inventory_image = "farming_bread.png", on_use = minetest.item_eat(5), - groups = {food_bread = 1, flammable = 2} + groups = {food_bread = 1} }) farming.add_eatable("farming:bread", 5) diff --git a/food.lua b/food.lua index 8fc5422..3b57b36 100644 --- a/food.lua +++ b/food.lua @@ -308,6 +308,8 @@ minetest.register_node("farming:mayonnaise", { sounds = farming.sounds.node_sound_glass_defaults() }) +farming.add_eatable("farming:mayonnaise", 3) + minetest.register_craft({ output = "farming:mayonnaise", recipe = { diff --git a/init.lua b/init.lua index ea6a22c..9a9e51b 100644 --- a/init.lua +++ b/init.lua @@ -7,7 +7,7 @@ farming = { mod = "redo", - version = "20240726", + version = "20240727", path = minetest.get_modpath("farming"), select = { type = "fixed", @@ -777,11 +777,13 @@ function farming.add_eatable(item, hp) if def then local grps = def.groups or {} + local txt = " (" ; if hp > 0 then txt = txt .. "+" end + txt = txt .. hp .. " HP)" grps.eatable = hp ; grps.flammable = 2 if mod_tt_base == nil then - def.description = def.description .. " (♥" .. hp .. ")" + def.description = def.description .. txt end minetest.override_item(item, {description = def.description, groups = grps}) From 710b7ac1119fcc7577c08748775ef830b1f814ac Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 27 Jul 2024 18:28:25 +0100 Subject: [PATCH 21/49] update {eatable} function --- init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/init.lua b/init.lua index 9a9e51b..ce6dd82 100644 --- a/init.lua +++ b/init.lua @@ -776,17 +776,17 @@ function farming.add_eatable(item, hp) if def then - local grps = def.groups or {} + local groups = table.copy(def.groups) or {} local txt = " (" ; if hp > 0 then txt = txt .. "+" end txt = txt .. hp .. " HP)" - grps.eatable = hp ; grps.flammable = 2 + groups.eatable = hp ; groups.flammable = 2 if mod_tt_base == nil then def.description = def.description .. txt end - minetest.override_item(item, {description = def.description, groups = grps}) + minetest.override_item(item, {description = def.description, groups = groups}) end end From a74a29c8493fdd980563958cdcde62ea537f5195 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 3 Aug 2024 23:55:08 +0100 Subject: [PATCH 22/49] remove XP desc. --- init.lua | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/init.lua b/init.lua index ce6dd82..b0a72a0 100644 --- a/init.lua +++ b/init.lua @@ -7,7 +7,7 @@ farming = { mod = "redo", - version = "20240727", + version = "20240803", path = minetest.get_modpath("farming"), select = { type = "fixed", @@ -768,8 +768,6 @@ if input then end -- helper function to add {eatable} group to food items -local mod_tt_base = minetest.get_modpath("tt_base") -- mod does similar to infotext - function farming.add_eatable(item, hp) local def = minetest.registered_items[item] @@ -777,16 +775,10 @@ function farming.add_eatable(item, hp) if def then local groups = table.copy(def.groups) or {} - local txt = " (" ; if hp > 0 then txt = txt .. "+" end - txt = txt .. hp .. " HP)" groups.eatable = hp ; groups.flammable = 2 - if mod_tt_base == nil then - def.description = def.description .. txt - end - - minetest.override_item(item, {description = def.description, groups = groups}) + minetest.override_item(item, {groups = groups}) end end From cdac09a8f4f035a56aa23536641a037ae8cc7301 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 11 Aug 2024 08:47:26 +0100 Subject: [PATCH 23/49] properly detect and use sounds from default/mcl --- api.txt | 21 +++++++++++++++++++++ compatibility.lua | 6 +++--- crops/artichoke.lua | 2 +- crops/asparagus.lua | 2 +- crops/barley.lua | 2 +- crops/beans.lua | 6 +++--- crops/beetroot.lua | 2 +- crops/blackberry.lua | 2 +- crops/blueberry.lua | 2 +- crops/cabbage.lua | 2 +- crops/carrot.lua | 2 +- crops/chili.lua | 2 +- crops/cocoa.lua | 4 ++-- crops/coffee.lua | 4 ++-- crops/corn.lua | 4 ++-- crops/cotton.lua | 4 ++-- crops/cucumber.lua | 2 +- crops/eggplant.lua | 2 +- crops/garlic.lua | 4 ++-- crops/ginger.lua | 2 +- crops/grapes.lua | 6 +++--- crops/hemp.lua | 12 ++++++------ crops/lettuce.lua | 2 +- crops/melon.lua | 4 ++-- crops/mint.lua | 2 +- crops/onion.lua | 2 +- crops/parsley.lua | 2 +- crops/peas.lua | 2 +- crops/pepper.lua | 4 ++-- crops/pineapple.lua | 2 +- crops/potato.lua | 2 +- crops/pumpkin.lua | 8 ++++---- crops/raspberry.lua | 2 +- crops/rhubarb.lua | 2 +- crops/rice.lua | 2 +- crops/soy.lua | 6 +++--- crops/spinach.lua | 2 +- crops/strawberry.lua | 2 +- crops/sunflower.lua | 4 ++-- crops/tomato.lua | 2 +- crops/vanilla.lua | 4 ++-- crops/wheat.lua | 8 ++++---- food.lua | 10 +++++----- init.lua | 41 ++++++++++++++++++++++++----------------- 44 files changed, 119 insertions(+), 91 deletions(-) diff --git a/api.txt b/api.txt index eb25cb9..19481f4 100644 --- a/api.txt +++ b/api.txt @@ -70,3 +70,24 @@ A handy function that starts a crops timer with a randomly selected time set by stage_length setting. This is mostly used for special functions or 3rd party mods. farming.start_seed_timer(pos) + + +Node Sounds +----------- + +Farming Redo will detect wether the Default mod or MineClone/VoxeLibre mod is active and +store whichever sound set is available inside the following to save any other farming +mods from having to detect it themselves: + +farming.node_sound_defaults() +farming.node_sound_stone_defaults() +farming.node_sound_dirt_defaults() +farming.node_sound_sand_defaults() +farming.node_sound_gravel_defaults() +farming.node_sound_wood_defaults() +farming.node_sound_leaves_defaults() +farming.node_sound_ice_defaults() +farming.node_sound_metal_defaults() +farming.node_sound_water_defaults() +farming.node_sound_snow_defaults() +farming.node_sound_glass_defaults() diff --git a/compatibility.lua b/compatibility.lua index a476621..5ecb4b5 100644 --- a/compatibility.lua +++ b/compatibility.lua @@ -41,7 +41,7 @@ else }, is_ground_content = false, on_use = minetest.item_eat(2), - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() }) farming.add_eatable("ethereal:banana", 2) @@ -55,7 +55,7 @@ else waving = 1, groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() }) alias("farming_plus:banana_sapling", "default:sapling") @@ -105,7 +105,7 @@ else }, is_ground_content = false, on_use = minetest.item_eat(4), - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() }) farming.add_eatable("ethereal:orange", 4) diff --git a/crops/artichoke.lua b/crops/artichoke.lua index 4528ae8..54f0fa2 100644 --- a/crops/artichoke.lua +++ b/crops/artichoke.lua @@ -33,7 +33,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/asparagus.lua b/crops/asparagus.lua index fed92f1..f72ed9c 100644 --- a/crops/asparagus.lua +++ b/crops/asparagus.lua @@ -35,7 +35,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/barley.lua b/crops/barley.lua index ec189e9..b091049 100644 --- a/crops/barley.lua +++ b/crops/barley.lua @@ -65,7 +65,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/beans.lua b/crops/beans.lua index 82bcc43..7dafc6b 100644 --- a/crops/beans.lua +++ b/crops/beans.lua @@ -102,7 +102,7 @@ minetest.register_node("farming:beanpole", { selection_box = farming.select, groups = {handy = 1, snappy = 3, flammable = 2, attached_node = 1}, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults(), + sounds = farming.node_sound_leaves_defaults(), on_place = function(itemstack, placer, pointed_thing) @@ -195,7 +195,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 @@ -259,7 +259,7 @@ minetest.register_node("farming:beanbush", { compostability = 35, not_in_creative_inventory = 1 }, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() }) -- mapgen diff --git a/crops/beetroot.lua b/crops/beetroot.lua index d3e88fd..b770eb2 100644 --- a/crops/beetroot.lua +++ b/crops/beetroot.lua @@ -56,7 +56,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/blackberry.lua b/crops/blackberry.lua index 6c8f7f0..6edbb78 100644 --- a/crops/blackberry.lua +++ b/crops/blackberry.lua @@ -32,7 +32,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/blueberry.lua b/crops/blueberry.lua index 9c1ed7c..b222a56 100644 --- a/crops/blueberry.lua +++ b/crops/blueberry.lua @@ -76,7 +76,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/cabbage.lua b/crops/cabbage.lua index d1a0731..3a09e5b 100644 --- a/crops/cabbage.lua +++ b/crops/cabbage.lua @@ -32,7 +32,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/carrot.lua b/crops/carrot.lua index 6393501..5a8556d 100644 --- a/crops/carrot.lua +++ b/crops/carrot.lua @@ -75,7 +75,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } diff --git a/crops/chili.lua b/crops/chili.lua index a71d8ab..fbca3ea 100644 --- a/crops/chili.lua +++ b/crops/chili.lua @@ -75,7 +75,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/cocoa.lua b/crops/cocoa.lua index 9d99058..9fabda0 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -130,7 +130,7 @@ minetest.register_node("farming:chocolate_block", { tiles = {"farming_chocolate_block.png"}, is_ground_content = false, groups = {cracky = 2, oddly_breakable_by_hand = 2}, - sounds = farming.sounds.node_sound_stone_defaults() + sounds = farming.node_sound_stone_defaults() }) minetest.register_craft({ @@ -164,7 +164,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults(), + sounds = farming.node_sound_leaves_defaults(), -- custom function to check for growing conditions, returning True when found growth_check = function(pos, node_name) diff --git a/crops/coffee.lua b/crops/coffee.lua index 3230dc9..2522f38 100644 --- a/crops/coffee.lua +++ b/crops/coffee.lua @@ -28,7 +28,7 @@ minetest.register_node("farming:coffee_cup", { groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1}, is_ground_content = false, on_use = minetest.item_eat(2, "vessels:drinking_glass"), - sounds = farming.sounds.node_sound_glass_defaults() + sounds = farming.node_sound_glass_defaults() }) farming.add_eatable("farming:coffee_cup", 2) @@ -64,7 +64,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/corn.lua b/crops/corn.lua index 9bf600c..352b79f 100644 --- a/crops/corn.lua +++ b/crops/corn.lua @@ -94,7 +94,7 @@ minetest.register_node("farming:bottle_ethanol", { fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} }, groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, - sounds = farming.sounds.node_sound_glass_defaults() + sounds = farming.node_sound_glass_defaults() }) minetest.register_craft( { @@ -130,7 +130,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/cotton.lua b/crops/cotton.lua index 9a83d3e..0b2dd5c 100644 --- a/crops/cotton.lua +++ b/crops/cotton.lua @@ -25,7 +25,7 @@ minetest.register_node("farming:cotton_wild", { {items = {"farming:seed_cotton"}, rarity = 1} } }, - sounds = farming.sounds.node_sound_leaves_defaults(), + sounds = farming.node_sound_leaves_defaults(), selection_box = { type = "fixed", fixed = {-6 / 16, -8 / 16, -6 / 16, 6 / 16, 5 / 16, 6 / 16} @@ -124,7 +124,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/cucumber.lua b/crops/cucumber.lua index 3f96a4f..305fa07 100644 --- a/crops/cucumber.lua +++ b/crops/cucumber.lua @@ -36,7 +36,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/eggplant.lua b/crops/eggplant.lua index 9b8009a..a7b17ee 100644 --- a/crops/eggplant.lua +++ b/crops/eggplant.lua @@ -34,7 +34,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/garlic.lua b/crops/garlic.lua index ea9c054..3d4c635 100644 --- a/crops/garlic.lua +++ b/crops/garlic.lua @@ -54,7 +54,7 @@ minetest.register_node("farming:garlic_braid", { }, groups = {vessel = 1, dig_immediate = 3, flammable = 3, compostability = 65}, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults(), + sounds = farming.node_sound_leaves_defaults(), node_box = { type = "fixed", fixed = { @@ -97,7 +97,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/ginger.lua b/crops/ginger.lua index 9a88ecd..1c47ca4 100644 --- a/crops/ginger.lua +++ b/crops/ginger.lua @@ -33,7 +33,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/grapes.lua b/crops/grapes.lua index eb75eef..98805ba 100644 --- a/crops/grapes.lua +++ b/crops/grapes.lua @@ -99,7 +99,7 @@ minetest.register_node("farming:trellis", { selection_box = farming.select, groups = {handy = 1, snappy = 3, flammable = 2, attached_node = 1}, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults(), + sounds = farming.node_sound_leaves_defaults(), on_place = function(itemstack, placer, pointed_thing) @@ -192,7 +192,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 @@ -268,7 +268,7 @@ minetest.register_node("farming:grapebush", { not_in_creative_inventory = 1, compostability = 35 }, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() }) -- mapgen diff --git a/crops/hemp.lua b/crops/hemp.lua index 6b6bbcf..0fc8382 100644 --- a/crops/hemp.lua +++ b/crops/hemp.lua @@ -54,7 +54,7 @@ minetest.register_node("farming:hemp_oil", { food_oil = 1, vessel = 1, dig_immediate = 3, attached_node = 1, compostability = 45 }, - sounds = farming.sounds.node_sound_glass_defaults() + sounds = farming.node_sound_glass_defaults() }) minetest.register_craft( { @@ -121,7 +121,7 @@ minetest.register_node("farming:hemp_block", { compostability = 85 }, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults(), + sounds = farming.node_sound_leaves_defaults(), _mcl_hardness = 0.8, _mcl_blast_resistance = 1 }) @@ -144,7 +144,7 @@ if minetest.global_exists("stairs") then {snappy = 2, oddly_breakable_by_hand = 1, flammable = 2}, {"farming_hemp_block.png"}, "Hemp Block", - farming.sounds.node_sound_leaves_defaults()) + farming.node_sound_leaves_defaults()) else stairs.register_stair_and_slab("hemp_block", "farming:hemp_block", @@ -152,7 +152,7 @@ if minetest.global_exists("stairs") then {"farming_hemp_block.png"}, "Hemp Block Stair", "Hemp Block Slab", - farming.sounds.node_sound_leaves_defaults()) + farming.node_sound_leaves_defaults()) end end @@ -190,7 +190,7 @@ minetest.register_node("farming:hemp_rope", { oddly_breakable_by_hand = 3, compostability = 55 }, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults(), + sounds = farming.node_sound_leaves_defaults(), selection_box = { type = "fixed", fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7} @@ -226,7 +226,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/lettuce.lua b/crops/lettuce.lua index 2423525..a7363ed 100644 --- a/crops/lettuce.lua +++ b/crops/lettuce.lua @@ -31,7 +31,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/melon.lua b/crops/melon.lua index 000044c..14cd2a3 100644 --- a/crops/melon.lua +++ b/crops/melon.lua @@ -47,7 +47,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 @@ -91,7 +91,7 @@ minetest.register_node("farming:melon_8", { }, is_ground_content = false, drop = "farming:melon_8", - sounds = farming.sounds.node_sound_wood_defaults(), + sounds = farming.node_sound_wood_defaults(), paramtype2 = "facedir", on_place = minetest.rotate_node, _mcl_hardness = 0.8, diff --git a/crops/mint.lua b/crops/mint.lua index 809f7b6..e56323a 100644 --- a/crops/mint.lua +++ b/crops/mint.lua @@ -73,7 +73,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/onion.lua b/crops/onion.lua index 771ba1f..ecb6651 100644 --- a/crops/onion.lua +++ b/crops/onion.lua @@ -69,7 +69,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/parsley.lua b/crops/parsley.lua index 237985c..d120567 100644 --- a/crops/parsley.lua +++ b/crops/parsley.lua @@ -33,7 +33,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/peas.lua b/crops/peas.lua index 857860b..fe2cb36 100644 --- a/crops/peas.lua +++ b/crops/peas.lua @@ -59,7 +59,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/pepper.lua b/crops/pepper.lua index 2569485..76794e3 100644 --- a/crops/pepper.lua +++ b/crops/pepper.lua @@ -67,7 +67,7 @@ minetest.register_node("farming:pepper_ground", { dig_immediate = 3, attached_node = 1, compostability = 30 }, is_ground_content = false, - sounds = farming.sounds.node_sound_defaults(), + sounds = farming.node_sound_defaults(), selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} @@ -103,7 +103,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/pineapple.lua b/crops/pineapple.lua index 9b3a57e..bb3cb1a 100644 --- a/crops/pineapple.lua +++ b/crops/pineapple.lua @@ -102,7 +102,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/potato.lua b/crops/potato.lua index 63ce789..63f86bd 100644 --- a/crops/potato.lua +++ b/crops/potato.lua @@ -79,7 +79,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/pumpkin.lua b/crops/pumpkin.lua index 2d0bcda..bd7c2cb 100644 --- a/crops/pumpkin.lua +++ b/crops/pumpkin.lua @@ -48,7 +48,7 @@ minetest.register_node("farming:jackolantern", { handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, is_ground_content = false, - sounds = farming.sounds.node_sound_wood_defaults(), + sounds = farming.node_sound_wood_defaults(), on_punch = function(pos, node, puncher) local name = puncher:get_player_name() or "" if minetest.is_protected(pos, name) then return end @@ -75,7 +75,7 @@ minetest.register_node("farming:jackolantern_on", { not_in_creative_inventory = 1 }, is_ground_content = false, - sounds = farming.sounds.node_sound_wood_defaults(), + sounds = farming.node_sound_wood_defaults(), drop = "farming:jackolantern", on_punch = function(pos, node, puncher) local name = puncher:get_player_name() or "" @@ -171,7 +171,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 @@ -215,7 +215,7 @@ minetest.register_node("farming:pumpkin_8", { }, is_ground_content = false, drop = "farming:pumpkin_8", - sounds = farming.sounds.node_sound_wood_defaults(), + sounds = farming.node_sound_wood_defaults(), paramtype2 = "facedir", on_place = minetest.rotate_node, _mcl_hardness = 0.8, diff --git a/crops/raspberry.lua b/crops/raspberry.lua index 5434a71..7ac55cb 100644 --- a/crops/raspberry.lua +++ b/crops/raspberry.lua @@ -53,7 +53,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/rhubarb.lua b/crops/rhubarb.lua index 7304886..f34066f 100644 --- a/crops/rhubarb.lua +++ b/crops/rhubarb.lua @@ -54,7 +54,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults(), + sounds = farming.node_sound_leaves_defaults(), minlight = 10, maxlight = 12 } diff --git a/crops/rice.lua b/crops/rice.lua index 6cfef8a..9d5e7ba 100644 --- a/crops/rice.lua +++ b/crops/rice.lua @@ -95,7 +95,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/soy.lua b/crops/soy.lua index 0c5a202..c02761c 100644 --- a/crops/soy.lua +++ b/crops/soy.lua @@ -33,7 +33,7 @@ minetest.register_node("farming:soy_sauce", { compostability = 65 }, is_ground_content = false, - sounds = farming.sounds.node_sound_glass_defaults() + sounds = farming.node_sound_glass_defaults() }) -- soy sauce recipe @@ -68,7 +68,7 @@ minetest.register_node("farming:soy_milk", { attached_node = 1, drink = 1, compostability = 65 }, is_ground_content = false, - sounds = farming.sounds.node_sound_glass_defaults() + sounds = farming.node_sound_glass_defaults() }) farming.add_eatable("farming:soy_milk", 2) @@ -143,7 +143,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/spinach.lua b/crops/spinach.lua index ea4019e..e266306 100644 --- a/crops/spinach.lua +++ b/crops/spinach.lua @@ -33,7 +33,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/strawberry.lua b/crops/strawberry.lua index 60f763d..9db91b1 100644 --- a/crops/strawberry.lua +++ b/crops/strawberry.lua @@ -36,7 +36,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } --stage 1 diff --git a/crops/sunflower.lua b/crops/sunflower.lua index 339465a..586bcb5 100644 --- a/crops/sunflower.lua +++ b/crops/sunflower.lua @@ -80,7 +80,7 @@ minetest.register_node("farming:sunflower_oil", { food_oil = 1, vessel = 1, dig_immediate = 3, attached_node = 1, flammable = 2, compostability = 65 }, - sounds = farming.sounds.node_sound_glass_defaults() + sounds = farming.node_sound_glass_defaults() }) minetest.register_craft( { @@ -137,7 +137,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/tomato.lua b/crops/tomato.lua index f3a88a3..89c9ab7 100644 --- a/crops/tomato.lua +++ b/crops/tomato.lua @@ -55,7 +55,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/crops/vanilla.lua b/crops/vanilla.lua index ed47fa7..e4597d9 100644 --- a/crops/vanilla.lua +++ b/crops/vanilla.lua @@ -34,7 +34,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- vanilla extract @@ -52,7 +52,7 @@ minetest.register_node("farming:vanilla_extract", { fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} }, groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, - sounds = farming.sounds.node_sound_glass_defaults(), + sounds = farming.node_sound_glass_defaults(), }) minetest.register_craft( { diff --git a/crops/wheat.lua b/crops/wheat.lua index f166dd3..c1abb78 100644 --- a/crops/wheat.lua +++ b/crops/wheat.lua @@ -41,7 +41,7 @@ minetest.register_node("farming:straw", { tiles = {"farming_straw.png"}, is_ground_content = false, groups = {handy = 1, snappy = 3, flammable = 4, fall_damage_add_percent = -30}, - sounds = farming.sounds.node_sound_leaves_defaults(), + sounds = farming.node_sound_leaves_defaults(), _mcl_hardness = 0.8, _mcl_blast_resistance = 1 }) @@ -69,7 +69,7 @@ if minetest.global_exists("stairs") then {snappy = 3, flammable = 4}, {"farming_straw.png"}, "Straw", - farming.sounds.node_sound_leaves_defaults()) + farming.node_sound_leaves_defaults()) else stairs.register_stair_and_slab("straw", "farming:straw", @@ -77,7 +77,7 @@ if minetest.global_exists("stairs") then {"farming_straw.png"}, "Straw Stair", "Straw Slab", - farming.sounds.node_sound_leaves_defaults()) + farming.node_sound_leaves_defaults()) end end @@ -133,7 +133,7 @@ local def = { }, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults() + sounds = farming.node_sound_leaves_defaults() } -- stage 1 diff --git a/food.lua b/food.lua index 3b57b36..878b2b7 100644 --- a/food.lua +++ b/food.lua @@ -144,7 +144,7 @@ minetest.register_node("farming:sugar_cube", { groups = {shovely = 1, handy = 1, crumbly = 2}, is_ground_content = false, floodable = true, - sounds = farming.sounds.node_sound_gravel_defaults(), + sounds = farming.node_sound_gravel_defaults(), _mcl_hardness = 0.8, _mcl_blast_resistance = 1 }) @@ -190,7 +190,7 @@ minetest.register_node("farming:salt", { tiles = {"farming_salt.png"}, groups = {food_salt = 1, vessel = 1, dig_immediate = 3, attached_node = 1}, is_ground_content = false, - sounds = farming.sounds.node_sound_defaults(), + sounds = farming.node_sound_defaults(), selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} @@ -259,7 +259,7 @@ minetest.register_node("farming:salt_crystal", { tiles = {"farming_salt_crystal.png"}, groups = {dig_immediate = 3, attached_node = 1}, is_ground_content = false, - sounds = farming.sounds.node_sound_defaults(), + sounds = farming.node_sound_defaults(), selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} @@ -305,7 +305,7 @@ minetest.register_node("farming:mayonnaise", { compostability = 65, food_mayonnaise = 1, vessel = 1, dig_immediate = 3, attached_node = 1 }, - sounds = farming.sounds.node_sound_glass_defaults() + sounds = farming.node_sound_glass_defaults() }) farming.add_eatable("farming:mayonnaise", 3) @@ -333,7 +333,7 @@ minetest.register_node("farming:rose_water", { food_rose_water = 1, vessel = 1, dig_immediate = 3, attached_node = 1 }, is_ground_content = false, - sounds = farming.sounds.node_sound_defaults(), + sounds = farming.node_sound_defaults(), selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} diff --git a/init.lua b/init.lua index b0a72a0..0a17b8d 100644 --- a/init.lua +++ b/init.lua @@ -7,15 +7,13 @@ farming = { mod = "redo", - version = "20240803", + version = "20240811", path = minetest.get_modpath("farming"), select = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} + type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} }, select_final = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5} + type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5} }, registered_plants = {}, min_light = 12, @@ -24,21 +22,30 @@ farming = { use_utensils = minetest.settings:get_bool("farming_use_utensils") ~= false, mtg = minetest.get_modpath("default"), mcl = minetest.get_modpath("mcl_core"), - sounds = {}, mcl_hardness = 0.01 } --- default sound functions just incase -function farming.sounds.node_sound_defaults() end -function farming.sounds.node_sound_glass_defaults() end -function farming.sounds.node_sound_gravel_defaults() end -function farming.sounds.node_sound_leaves_defaults() end -function farming.sounds.node_sound_stone_defaults() end -function farming.sounds.node_sound_wood_defaults() end +-- determine which sounds to use, default or mcl_sounds + +local function sound_helper(snd) + + farming[snd] = (farming.mtg and default[snd]) or (farming.mcl and mcl_sounds[snd]) + or function() return {} end +end + +sound_helper("node_sound_defaults") +sound_helper("node_sound_stone_defaults") +sound_helper("node_sound_dirt_defaults") +sound_helper("node_sound_sand_defaults") +sound_helper("node_sound_gravel_defaults") +sound_helper("node_sound_wood_defaults") +sound_helper("node_sound_leaves_defaults") +sound_helper("node_sound_ice_defaults") +sound_helper("node_sound_metal_defaults") +sound_helper("node_sound_water_defaults") +sound_helper("node_sound_snow_defaults") +sound_helper("node_sound_glass_defaults") --- sounds check -if farming.mtg then farming.sounds = default end -if farming.mcl then farming.sounds = mcl_sounds end -- check for creative mode or priv local creative_mode_cache = minetest.settings:get_bool("creative_mode") @@ -689,7 +696,7 @@ farming.register_plant = function(name, def) groups = g, _mcl_hardness = farming.mcl_hardness, is_ground_content = false, - sounds = farming.sounds.node_sound_leaves_defaults(), + sounds = farming.node_sound_leaves_defaults(), minlight = def.minlight, maxlight = def.maxlight, next_plant = next_plant From a9a1b720a369d8bb64da01b1208ad635ffaf65ad Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 11 Aug 2024 15:38:55 +0100 Subject: [PATCH 24/49] separate food /non-food items from crop files, tidy code --- compatibility.lua | 14 +- crops/artichoke.lua | 22 +- crops/asparagus.lua | 26 +- crops/barley.lua | 38 +- crops/beans.lua | 89 +-- crops/beetroot.lua | 46 +- crops/blackberry.lua | 20 +- crops/blueberry.lua | 61 +- crops/cabbage.lua | 26 +- crops/carrot.lua | 68 +- crops/chili.lua | 66 +- crops/cocoa.lua | 112 +-- crops/cocoa_mapgen.lua | 11 +- crops/coffee.lua | 50 +- crops/corn.lua | 117 +-- crops/cotton.lua | 135 ++-- crops/cucumber.lua | 23 +- crops/eggplant.lua | 25 +- crops/garlic.lua | 81 +- crops/ginger.lua | 23 +- crops/grapes.lua | 91 +-- crops/hemp.lua | 195 +---- crops/lettuce.lua | 23 +- crops/melon.lua | 40 +- crops/mint.lua | 39 +- crops/onion.lua | 49 +- crops/parsley.lua | 20 +- crops/peas.lua | 46 +- crops/pepper.lua | 55 +- crops/pineapple.lua | 74 +- crops/potato.lua | 52 +- crops/pumpkin.lua | 163 +--- crops/raspberry.lua | 37 +- crops/rhubarb.lua | 42 +- crops/rice.lua | 65 +- crops/rye_oat.lua | 50 ++ crops/ryeoatrice.lua | 117 --- crops/soy.lua | 127 +--- crops/spinach.lua | 23 +- crops/strawberry.lua | 27 +- crops/sunflower.lua | 111 +-- crops/tomato.lua | 40 +- crops/vanilla.lua | 62 +- crops/wheat.lua | 113 +-- food.lua | 923 ----------------------- grass.lua | 8 +- hoes.lua | 93 +-- init.lua | 239 +++--- item_recipes.lua | 1390 +++++++++++++++++++++++++++++++++++ item_stairs.lua | 35 + items_food.lua | 1014 +++++++++++++++++++++++++ items.lua => items_list.lua | 24 +- items_non_food.lua | 269 +++++++ lucky_block.lua | 3 + soil.lua | 51 +- statistics.lua | 35 +- utensils.lua | 164 ----- 57 files changed, 3691 insertions(+), 3271 deletions(-) create mode 100644 crops/rye_oat.lua delete mode 100644 crops/ryeoatrice.lua delete mode 100644 food.lua create mode 100644 item_recipes.lua create mode 100644 item_stairs.lua create mode 100644 items_food.lua rename items.lua => items_list.lua (93%) create mode 100644 items_non_food.lua delete mode 100644 utensils.lua diff --git a/compatibility.lua b/compatibility.lua index 5ecb4b5..24f7f5b 100644 --- a/compatibility.lua +++ b/compatibility.lua @@ -1,5 +1,5 @@ -local S = farming.translate +local S = minetest.get_translator("farming") --= Helpers @@ -18,6 +18,7 @@ farming.add_eatable("flowers:mushroom_red", -5) --= Aliases -- Banana + if eth then alias("farming_plus:banana_sapling", "ethereal:banana_tree_sapling") alias("farming_plus:banana_leaves", "ethereal:bananaleaves") @@ -64,6 +65,7 @@ else end -- Carrot + alias("farming_plus:carrot_seed", "farming:carrot") alias("farming_plus:carrot_1", "farming:carrot_1") alias("farming_plus:carrot_2", "farming:carrot_4") @@ -72,12 +74,14 @@ alias("farming_plus:carrot", "farming:carrot_8") alias("farming_plus:carrot_item", "farming:carrot") -- Cocoa + alias("farming_plus:cocoa_sapling", "farming:cocoa_beans") alias("farming_plus:cocoa_leaves", "default:leaves") alias("farming_plus:cocoa", "default:apple") alias("farming_plus:cocoa_bean", "farming:cocoa_beans") -- Orange + alias("farming_plus:orange_1", "farming:tomato_1") alias("farming_plus:orange_2", "farming:tomato_4") alias("farming_plus:orange_3", "farming:tomato_6") @@ -116,6 +120,7 @@ else end -- Potato + alias("farming_plus:potato_item", "farming:potato") alias("farming_plus:potato_1", "farming:potato_1") alias("farming_plus:potato_2", "farming:potato_2") @@ -123,6 +128,7 @@ alias("farming_plus:potato", "farming:potato_3") alias("farming_plus:potato_seed", "farming:potato") -- Pumpkin + alias("farming:pumpkin_seed", "farming:pumpkin_slice") alias("farming:pumpkin_face", "farming:jackolantern") alias("farming:pumpkin_face_light", "farming:jackolantern_on") @@ -135,6 +141,7 @@ alias("farming:scarecrow_light", "farming:jackolantern_on") alias("farming:pumpkin_flour", "farming:pumpkin_dough") -- Rhubarb + alias("farming_plus:rhubarb_seed", "farming:rhubarb") alias("farming_plus:rhubarb_1", "farming:rhubarb_1") alias("farming_plus:rhubarb_2", "farming:rhubarb_2") @@ -142,6 +149,7 @@ alias("farming_plus:rhubarb", "farming:rhubarb_3") alias("farming_plus:rhubarb_item", "farming:rhubarb") -- Strawberry + alias("farming_plus:strawberry_item", "ethereal:strawberry") alias("farming_plus:strawberry_seed", "ethereal:strawberry") alias("farming_plus:strawberry_1", "ethereal:strawberry_1") @@ -150,6 +158,7 @@ alias("farming_plus:strawberry_3", "ethereal:strawberry_5") alias("farming_plus:strawberry", "ethereal:strawberry_7") -- Tomato + alias("farming_plus:tomato_seed", "farming:tomato") alias("farming_plus:tomato_item", "farming:tomato") alias("farming_plus:tomato_1", "farming:tomato_2") @@ -157,5 +166,6 @@ alias("farming_plus:tomato_2", "farming:tomato_4") alias("farming_plus:tomato_3", "farming:tomato_6") alias("farming_plus:tomato", "farming:tomato_8") --- Weed +-- Weeds + alias("farming:weed", "default:grass_2") diff --git a/crops/artichoke.lua b/crops/artichoke.lua index 54f0fa2..a8e3ae7 100644 --- a/crops/artichoke.lua +++ b/crops/artichoke.lua @@ -1,22 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- item definition minetest.register_craftitem("farming:artichoke", { description = S("Artichoke"), inventory_image = "farming_artichoke.png", - groups = { - compostability = 48, seed = 2, food_artichoke = 1 - }, + groups = {compostability = 48, seed = 2, food_artichoke = 1}, + on_use = minetest.item_eat(4), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:artichoke_1") - end, - on_use = minetest.item_eat(4) + end }) farming.add_eatable("farming:artichoke", 4) -- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_artichoke_1.png"}, @@ -37,21 +38,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:artichoke_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_artichoke_2.png"} minetest.register_node("farming:artichoke_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_artichoke_3.png"} minetest.register_node("farming:artichoke_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_artichoke_4.png"} minetest.register_node("farming:artichoke_4", table.copy(def)) -- stage 5 (final) + def.tiles = {"farming_artichoke_5.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -64,6 +70,7 @@ def.drop = { minetest.register_node("farming:artichoke_5", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:artichoke"] = { crop = "farming:artichoke", seed = "farming:artichoke", @@ -73,6 +80,7 @@ farming.registered_plants["farming:artichoke"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/asparagus.lua b/crops/asparagus.lua index f72ed9c..6af267d 100644 --- a/crops/asparagus.lua +++ b/crops/asparagus.lua @@ -1,22 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- asparagus minetest.register_craftitem("farming:asparagus", { description = S("Asparagus"), inventory_image = "farming_asparagus.png", - groups = { - compostability = 48, seed = 2, food_asparagus = 1 - }, + groups = {compostability = 48, seed = 2, food_asparagus = 1}, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:asparagus_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:asparagus", 1) --- asparagus definition +-- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_asparagus_1.png"}, @@ -39,17 +40,21 @@ local def = { } -- stage 1 + minetest.register_node("farming:asparagus_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_asparagus_2.png"} minetest.register_node("farming:asparagus_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_asparagus_3.png"} minetest.register_node("farming:asparagus_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_asparagus_4.png"} def.drop = { items = { @@ -58,7 +63,8 @@ def.drop = { } minetest.register_node("farming:asparagus_4", table.copy(def)) --- stage 5 +-- stage 5 (final) + def.tiles = {"farming_asparagus_5.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -71,6 +77,7 @@ def.drop = { minetest.register_node("farming:asparagus_5", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:asparagus"] = { crop = "farming:asparagus", seed = "farming:asparagus", @@ -80,6 +87,7 @@ farming.registered_plants["farming:asparagus"] = { } -- mapgen + minetest.register_decoration({ name = "farming:asparagus_5", deco_type = "simple", diff --git a/crops/barley.lua b/crops/barley.lua index b091049..3f5487d 100644 --- a/crops/barley.lua +++ b/crops/barley.lua @@ -1,8 +1,8 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- seed --- barley seeds minetest.register_node("farming:seed_barley", { description = S("Barley Seed"), tiles = {"farming_barley_seed.png"}, @@ -21,32 +21,26 @@ minetest.register_node("farming:seed_barley", { sunlight_propagates = true, next_plant = "farming:barley_1", selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:seed_barley") end, + on_timer = function(pos, elapsed) minetest.set_node(pos, {name = "farming:barley_1", param2 = 3}) end }) --- harvested barley +-- item + minetest.register_craftitem("farming:barley", { description = S("Barley"), inventory_image = "farming_barley.png", groups = {food_barley = 1, flammable = 2, compostability = 65} }) --- flour -minetest.register_craft({ - output = "farming:flour", - recipe = { - {"farming:barley", "farming:barley", "farming:barley"}, - {"farming:barley", a.mortar_pestle, ""} - }, - replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} -}) +-- crop definition --- barley definition local def = { drawtype = "plantlike", tiles = {"farming_barley_1.png"}, @@ -69,25 +63,31 @@ local def = { } -- stage 1 + minetest.register_node("farming:barley_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_barley_2.png"} minetest.register_node("farming:barley_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_barley_3.png"} minetest.register_node("farming:barley_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_barley_4.png"} minetest.register_node("farming:barley_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_barley_5.png"} minetest.register_node("farming:barley_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_barley_6.png"} def.drop = { items = { @@ -98,6 +98,7 @@ def.drop = { minetest.register_node("farming:barley_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_barley_7.png"} def.drop = { items = { @@ -108,6 +109,7 @@ def.drop = { minetest.register_node("farming:barley_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_barley_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -122,6 +124,7 @@ def.drop = { minetest.register_node("farming:barley_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:barley"] = { crop = "farming:barley", seed = "farming:seed_barley", @@ -129,10 +132,3 @@ farming.registered_plants["farming:barley"] = { maxlight = farming.max_light, steps = 8 } - --- Fuel -minetest.register_craft({ - type = "fuel", - recipe = "farming:barley", - burntime = 1 -}) diff --git a/crops/beans.lua b/crops/beans.lua index 7dafc6b..2d0eb8f 100644 --- a/crops/beans.lua +++ b/crops/beans.lua @@ -1,32 +1,27 @@ ---[[ - All textures by - (C) Auke Kok - CC-BY-SA-3.0 -]] -local S = farming.translate +-- All textures by (C) Auke Kok CC-BY-SA-3.0 + +local S = minetest.get_translator("farming") local a = farming.recipe_items --- place beans +-- place beans helper + local function place_beans(itemstack, placer, pointed_thing, plantname) local pt = pointed_thing -- check if pointing at a node - if not pt or pt.type ~= "node" then - return - end + if not pt or pt.type ~= "node" then return end local under = minetest.get_node(pt.under) -- return if any of the nodes are not registered - if not minetest.registered_nodes[under.name] then - return - end + if not minetest.registered_nodes[under.name] then return end -- am I right-clicking on something that has a custom on_place set? -- thanks to Krock for helping with this issue :) local def = minetest.registered_nodes[under.name] + if placer and itemstack and def and def.on_rightclick then return def.on_rightclick(pt.under, under, placer, itemstack, pt) end @@ -35,19 +30,15 @@ local function place_beans(itemstack, placer, pointed_thing, plantname) local name = placer and placer:get_player_name() or "" -- check for protection - if minetest.is_protected(pt.under, name) then - return - end + if minetest.is_protected(pt.under, name) then return end -- check if pointing at bean pole - if under.name ~= "farming:beanpole" then - return - end + if under.name ~= "farming:beanpole" then return end -- add the node and remove 1 item from the itemstack minetest.set_node(pt.under, {name = plantname}) - minetest.sound_play("default_place_node", {pos = pt.under, gain = 1.0}) + minetest.sound_play("default_place_node", {pos = pt.under, gain = 1.0}, true) if placer or not farming.is_creative(placer:get_player_name()) then @@ -57,23 +48,21 @@ local function place_beans(itemstack, placer, pointed_thing, plantname) if itemstack:get_count() == 0 then minetest.after(0.20, - farming.refill_plant, - placer, - "farming:beans", - placer:get_wield_index() - ) + farming.refill_plant, placer, "farming:beans", placer:get_wield_index()) end end return itemstack end --- beans +-- item/seed + minetest.register_craftitem("farming:beans", { description = S("Green Beans"), inventory_image = "farming_beans.png", groups = {compostability = 48, seed = 2, food_beans = 1}, on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return place_beans(itemstack, placer, pointed_thing, "farming:beanpole_1") end @@ -81,13 +70,8 @@ minetest.register_craftitem("farming:beans", { farming.add_eatable("farming:beans", 1) --- beans can be used for green dye -minetest.register_craft({ - output = a.dye_green, - recipe = {{"farming:beans"}} -}) - -- beanpole + minetest.register_node("farming:beanpole", { description = S("Bean Pole (place on soil before planting beans)"), drawtype = "plantlike", @@ -109,20 +93,17 @@ minetest.register_node("farming:beanpole", { local pt = pointed_thing -- check if pointing at a node - if not pt or pt.type ~= "node" then - return - end + if not pt or pt.type ~= "node" then return end local under = minetest.get_node(pt.under) -- return if any of the nodes are not registered - if not minetest.registered_nodes[under.name] then - return - end + if not minetest.registered_nodes[under.name] then return end -- am I right-clicking on something that has a custom on_place set? -- thanks to Krock for helping with this issue :) local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then return def.on_rightclick(pt.under, under, placer, itemstack, pt) end @@ -133,9 +114,7 @@ minetest.register_node("farming:beanpole", { local nodename = under.name - if minetest.get_item_group(nodename, "soil") < 2 then - return - end + if minetest.get_item_group(nodename, "soil") < 2 then return end local top = { x = pointed_thing.above.x, @@ -145,9 +124,7 @@ minetest.register_node("farming:beanpole", { nodename = minetest.get_node(top).name - if nodename ~= "air" then - return - end + if nodename ~= "air" then return end minetest.set_node(pointed_thing.above, {name = "farming:beanpole"}) @@ -159,22 +136,8 @@ minetest.register_node("farming:beanpole", { end }) -minetest.register_craft({ - output = "farming:beanpole", - recipe = { - {"", "", ""}, - {"group:stick", "", "group:stick"}, - {"group:stick", "", "group:stick"} - } -}) +-- crop definition -minetest.register_craft({ - type = "fuel", - recipe = "farming:beanpole", - burntime = 10 -}) - --- green bean definition local def = { drawtype = "plantlike", tiles = {"farming_beanpole_1.png"}, @@ -199,21 +162,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:beanpole_1", table.copy(def)) -- stage2 + def.tiles = {"farming_beanpole_2.png"} minetest.register_node("farming:beanpole_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_beanpole_3.png"} minetest.register_node("farming:beanpole_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_beanpole_4.png"} minetest.register_node("farming:beanpole_4", table.copy(def)) -- stage 5 (final) + def.tiles = {"farming_beanpole_5.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -228,6 +196,7 @@ def.drop = { minetest.register_node("farming:beanpole_5", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:beans"] = { trellis = "farming:beanpole", crop = "farming:beanpole", @@ -238,6 +207,7 @@ farming.registered_plants["farming:beans"] = { } -- wild green bean bush (this is what you find on the map) + minetest.register_node("farming:beanbush", { drawtype = "plantlike", tiles = {"farming_beanbush.png"}, @@ -263,6 +233,7 @@ minetest.register_node("farming:beanbush", { }) -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/beetroot.lua b/crops/beetroot.lua index b770eb2..eef43d3 100644 --- a/crops/beetroot.lua +++ b/crops/beetroot.lua @@ -1,44 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") local a = farming.recipe_items --- beetroot +-- item/seed + minetest.register_craftitem("farming:beetroot", { description = S("Beetroot"), inventory_image = "farming_beetroot.png", - groups = { - compostability = 48, seed = 2, food_beetroot = 1 - }, + groups = {compostability = 48, seed = 2, food_beetroot = 1}, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:beetroot_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:beetroot", 1) --- beetroot soup -minetest.register_craftitem("farming:beetroot_soup", { - description = S("Beetroot Soup"), - inventory_image = "farming_beetroot_soup.png", - on_use = minetest.item_eat(6, "farming:bowl") -}) - -farming.add_eatable("farming:beetroot_soup", 6) - -minetest.register_craft({ - output = "farming:beetroot_soup", - recipe = { - {"group:food_beetroot", "group:food_beetroot", "group:food_beetroot"}, - {"group:food_beetroot", "group:food_bowl", "group:food_beetroot"} - } -}) - --- red dye -minetest.register_craft({ - output = a.dye_red, - recipe = {{"group:food_beetroot"}} -}) +-- crop definition local def = { drawtype = "plantlike", @@ -60,21 +39,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:beetroot_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_beetroot_2.png"} minetest.register_node("farming:beetroot_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_beetroot_3.png"} minetest.register_node("farming:beetroot_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_beetroot_4.png"} minetest.register_node("farming:beetroot_4", table.copy(def)) --- stage 5 +-- stage 5 (final) + def.tiles = {"farming_beetroot_5.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -89,6 +73,7 @@ def.drop = { minetest.register_node("farming:beetroot_5", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:beetroot"] = { crop = "farming:beetroot", seed = "farming:beetroot", @@ -98,6 +83,7 @@ farming.registered_plants["farming:beetroot"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/blackberry.lua b/crops/blackberry.lua index 6edbb78..9df38af 100644 --- a/crops/blackberry.lua +++ b/crops/blackberry.lua @@ -1,7 +1,8 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- blackberries minetest.register_craftitem("farming:blackberry", { description = S("Blackberries"), inventory_image = "farming_blackberry.png", @@ -9,14 +10,17 @@ minetest.register_craftitem("farming:blackberry", { compostability = 48, seed = 2, food_blackberries = 1, food_blackberry = 1, food_berry = 1 }, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:blackberry_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:blackberry", 1) +-- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_blackberry_1.png"}, @@ -36,17 +40,21 @@ local def = { } -- stage 1 + minetest.register_node("farming:blackberry_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_blackberry_2.png"} minetest.register_node("farming:blackberry_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_blackberry_3.png"} minetest.register_node("farming:blackberry_3", table.copy(def)) --- stage 4 +-- stage 4 (final) + def.tiles = {"farming_blackberry_4.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -60,6 +68,7 @@ def.drop = { minetest.register_node("farming:blackberry_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:blackberry"] = { crop = "farming:blackberry", seed = "farming:blackberry", @@ -69,6 +78,7 @@ farming.registered_plants["farming:blackberry"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/blueberry.lua b/crops/blueberry.lua index b222a56..864ed26 100644 --- a/crops/blueberry.lua +++ b/crops/blueberry.lua @@ -1,8 +1,8 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- item/seed --- blueberries minetest.register_craftitem("farming:blueberries", { description = S("Wild Blueberries"), inventory_image = "farming_blueberries.png", @@ -10,57 +10,16 @@ minetest.register_craftitem("farming:blueberries", { compostability = 48,seed = 2, food_blueberries = 1, food_blueberry = 1, food_berry = 1 }, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:blueberry_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:blueberries", 1) --- blueberry muffin (thanks to sosogirl123 @ deviantart.com for muffin image) -minetest.register_craftitem("farming:muffin_blueberry", { - description = S("Blueberry Muffin"), - inventory_image = "farming_blueberry_muffin.png", - on_use = minetest.item_eat(2), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:muffin_blueberry", 2) - -minetest.register_craft({ - output = "farming:muffin_blueberry 2", - recipe = { - {"group:food_blueberries", "group:food_bread", "group:food_blueberries"} - } -}) - --- Blueberry Pie -minetest.register_craftitem("farming:blueberry_pie", { - description = S("Blueberry Pie"), - inventory_image = "farming_blueberry_pie.png", - on_use = minetest.item_eat(6), - groups = {compostability = 75} -}) - -farming.add_eatable("farming:blueberry_pie", 6) - -minetest.register_craft({ - output = "farming:blueberry_pie", - recipe = { - {"group:food_flour", "group:food_sugar", "group:food_blueberries"}, - {"", a.baking_tray, ""} - }, - replacements = {{"group:food_baking_tray", "farming:baking_tray"}} -}) - --- Blue Dye -minetest.register_craft({ - output = a.dye_blue, - recipe = {{"farming:blueberries"}} -}) - --- blueberry definition +-- ctop definition local def = { drawtype = "plantlike", tiles = {"farming_blueberry_1.png"}, @@ -80,17 +39,21 @@ local def = { } -- stage 1 + minetest.register_node("farming:blueberry_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_blueberry_2.png"} minetest.register_node("farming:blueberry_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_blueberry_3.png"} minetest.register_node("farming:blueberry_3", table.copy(def)) -- stage 4 (final) + def.tiles = {"farming_blueberry_4.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -104,6 +67,7 @@ def.drop = { minetest.register_node("farming:blueberry_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:blueberries"] = { crop = "farming:blueberry", seed = "farming:blueberries", @@ -113,6 +77,7 @@ farming.registered_plants["farming:blueberries"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/cabbage.lua b/crops/cabbage.lua index 3a09e5b..a90e7f0 100644 --- a/crops/cabbage.lua +++ b/crops/cabbage.lua @@ -1,21 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- cabbage minetest.register_craftitem("farming:cabbage", { description = S("Cabbage"), inventory_image = "farming_cabbage.png", - groups = { - compostability = 48, seed = 2, food_cabbage = 1 - }, + groups = {compostability = 48, seed = 2, food_cabbage = 1}, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:cabbage_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:cabbage", 1) +-- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_cabbage_1.png"}, @@ -36,25 +38,31 @@ local def = { } -- stage 1 + minetest.register_node("farming:cabbage_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_cabbage_2.png"} minetest.register_node("farming:cabbage_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_cabbage_3.png"} minetest.register_node("farming:cabbage_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_cabbage_4.png"} minetest.register_node("farming:cabbage_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_cabbage_5.png"} minetest.register_node("farming:cabbage_5", table.copy(def)) --- stage 6 +-- stage 6 (final) + def.tiles = {"farming_cabbage_6.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -67,6 +75,7 @@ def.drop = { minetest.register_node("farming:cabbage_6", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:cabbage"] = { crop = "farming:cabbage", seed = "farming:cabbage", @@ -76,6 +85,7 @@ farming.registered_plants["farming:cabbage"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/carrot.lua b/crops/carrot.lua index 5a8556d..8220cf7 100644 --- a/crops/carrot.lua +++ b/crops/carrot.lua @@ -1,64 +1,27 @@ ---[[ - Original textures from PixelBox texture pack - https://forum.minetest.net/viewtopic.php?id=4990 -]] +-- Original textures from PixelBox texture pack +-- https://forum.minetest.net/viewtopic.php?id=4990 -local S = farming.translate +local S = minetest.get_translator("farming") local a = farming.recipe_items --- carrot +-- item/seed + minetest.register_craftitem("farming:carrot", { description = S("Carrot"), inventory_image = "farming_carrot.png", - groups = { - compostability = 48, seed = 2, food_carrot = 1 - }, + groups = {compostability = 48, seed = 2, food_carrot = 1}, + on_use = minetest.item_eat(4), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:carrot_1") - end, - on_use = minetest.item_eat(4) + end }) farming.add_eatable("farming:carrot", 4) --- carrot juice -minetest.register_craftitem("farming:carrot_juice", { - description = S("Carrot Juice"), - inventory_image = "farming_carrot_juice.png", - on_use = minetest.item_eat(4, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1} -}) +-- crop definition -farming.add_eatable("farming:carrot_juice", 4) - -minetest.register_craft({ - output = "farming:carrot_juice", - recipe = { - {a.juicer}, - {"group:food_carrot"}, - {"vessels:drinking_glass"} - }, - replacements = { - {"group:food_juicer", "farming:juicer"} - } -}) - --- golden carrot -minetest.register_craftitem("farming:carrot_gold", { - description = S("Golden Carrot"), - inventory_image = "farming_carrot_gold.png", - on_use = minetest.item_eat(10) -}) - -farming.add_eatable("farming:carrot_gold", 10) - -minetest.register_craft({ - output = "farming:carrot_gold", - recipe = {{"group:food_carrot", "default:gold_lump"}} -}) - --- carrot definition local def = { drawtype = "plantlike", tiles = {"farming_carrot_1.png"}, @@ -78,31 +41,37 @@ local def = { sounds = farming.node_sound_leaves_defaults() } - -- stage 1 + minetest.register_node("farming:carrot_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_carrot_2.png"} minetest.register_node("farming:carrot_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_carrot_3.png"} minetest.register_node("farming:carrot_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_carrot_4.png"} minetest.register_node("farming:carrot_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_carrot_5.png"} minetest.register_node("farming:carrot_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_carrot_6.png"} minetest.register_node("farming:carrot_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_carrot_7.png"} def.drop = { items = { @@ -113,6 +82,7 @@ def.drop = { minetest.register_node("farming:carrot_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_carrot_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -125,6 +95,7 @@ def.drop = { minetest.register_node("farming:carrot_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:carrot"] = { crop = "farming:carrot", seed = "farming:carrot", @@ -134,6 +105,7 @@ farming.registered_plants["farming:carrot"] = { } -- mapgen + local mg = farming.mapgen == "v6" def = { diff --git a/crops/chili.lua b/crops/chili.lua index fbca3ea..831a77f 100644 --- a/crops/chili.lua +++ b/crops/chili.lua @@ -1,64 +1,24 @@ -local S = farming.translate +local S = minetest.get_translator("farming") local a = farming.recipe_items --- chili pepper +-- item/seed + minetest.register_craftitem("farming:chili_pepper", { description = S("Chili Pepper"), inventory_image = "farming_chili_pepper.png", - groups = { - compostability = 48, seed = 2, food_chili_pepper = 1 - }, + groups = {compostability = 48, seed = 2, food_chili_pepper = 1}, + on_use = minetest.item_eat(2), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:chili_1") - end, - on_use = minetest.item_eat(2) + end }) farming.add_eatable("farming:chili_pepper", 2) --- bowl of chili -minetest.register_craftitem("farming:chili_bowl", { - description = S("Bowl of Chili"), - inventory_image = "farming_chili_bowl.png", - on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65} -}) +-- crop definition -farming.add_eatable("farming:chili_bowl", 8) - -minetest.register_craft({ - output = "farming:chili_bowl", - recipe = { - {"group:food_chili_pepper", "group:food_rice", "group:food_tomato"}, - {"group:food_beans", "group:food_bowl", ""} - } -}) - --- chili can be used for red dye -minetest.register_craft({ - output = a.dye_red, - recipe = {{"farming:chili_pepper"}} -}) - --- chili powder -minetest.register_craftitem("farming:chili_powder", { - description = S("Chili Powder"), - on_use = minetest.item_eat(-1), - inventory_image = "farming_chili_powder.png", - groups = {compostability = 45} -}) - -minetest.register_craft({ - output = "farming:chili_powder", - recipe = { - {"farming:chili_pepper", a.mortar_pestle} - }, - replacements = {{"farming:mortar_pestle", "farming:mortar_pestle"}} -}) - - --- chili definition local def = { drawtype = "plantlike", tiles = {"farming_chili_1.png"}, @@ -79,33 +39,41 @@ local def = { } -- stage 1 + minetest.register_node("farming:chili_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_chili_2.png"} minetest.register_node("farming:chili_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_chili_3.png"} minetest.register_node("farming:chili_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_chili_4.png"} minetest.register_node("farming:chili_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_chili_5.png"} minetest.register_node("farming:chili_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_chili_6.png"} minetest.register_node("farming:chili_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_chili_7.png"} minetest.register_node("farming:chili_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_chili_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -118,6 +86,7 @@ def.drop = { minetest.register_node("farming:chili_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:chili_pepper"] = { crop = "farming:chili", seed = "farming:chili_pepper", @@ -127,6 +96,7 @@ farming.registered_plants["farming:chili_pepper"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = { diff --git a/crops/cocoa.lua b/crops/cocoa.lua index 9fabda0..75a9b62 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -1,6 +1,5 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") -- place cocoa local function place_cocoa(itemstack, placer, pointed_thing, plantname) @@ -8,20 +7,17 @@ local function place_cocoa(itemstack, placer, pointed_thing, plantname) local pt = pointed_thing -- check if pointing at a node - if not pt or pt.type ~= "node" then - return - end + if not pt or pt.type ~= "node" then return end local under = minetest.get_node(pt.under) -- return if any of the nodes are not registered - if not minetest.registered_nodes[under.name] then - return - end + if not minetest.registered_nodes[under.name] then return end -- am I right-clicking on something that has a custom on_place set? -- thanks to Krock for helping with this issue :) local def = minetest.registered_nodes[under.name] + if placer and itemstack and def and def.on_rightclick then return def.on_rightclick(pt.under, under, placer, itemstack, pt) end @@ -36,14 +32,12 @@ local function place_cocoa(itemstack, placer, pointed_thing, plantname) local name = placer and placer:get_player_name() or "" -- check for protection - if minetest.is_protected(pt.above, name) then - return - end + if minetest.is_protected(pt.above, name) then return end -- add the node and remove 1 item from the itemstack minetest.set_node(pt.above, {name = plantname}) - minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}) + minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}, true) if placer and not farming.is_creative(placer:get_player_name()) then @@ -52,102 +46,28 @@ local function place_cocoa(itemstack, placer, pointed_thing, plantname) -- check for refill if itemstack:get_count() == 0 then - minetest.after(0.20, - farming.refill_plant, - placer, - "farming:cocoa_beans_raw", - placer:get_wield_index() - ) + minetest.after(0.20, farming.refill_plant, placer, + "farming:cocoa_beans_raw", placer:get_wield_index()) end end return itemstack end --- cocoa beans +-- item/seed + minetest.register_craftitem("farming:cocoa_beans_raw", { description = S("Raw Cocoa Beans"), inventory_image = "farming_cocoa_beans.png^[brighten", groups = {compostability = 48, seed = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) return place_cocoa(itemstack, placer, pointed_thing, "farming:cocoa_1") end }) -minetest.register_craftitem("farming:cocoa_beans", { - description = S("Cocoa Beans"), - inventory_image = "farming_cocoa_beans.png", - groups = {compostability = 65, food_cocoa = 1, flammable = 2} -}) +-- crop definition -minetest.register_craft({ - type = "cooking", - cooktime = 5, - output = "farming:cocoa_beans", - recipe = "farming:cocoa_beans_raw" -}) - -minetest.register_craft( { - output = a.dye_brown, - recipe = {{"farming:cocoa_beans"}} -}) - --- chocolate cookie -minetest.register_craftitem("farming:cookie", { - description = S("Cookie"), - inventory_image = "farming_cookie.png", - on_use = minetest.item_eat(2) -}) - -farming.add_eatable("farming:cookie", 2) - -minetest.register_craft( { - output = "farming:cookie 8", - recipe = { - {"group:food_wheat", "group:food_cocoa", "group:food_wheat" } - } -}) - --- bar of dark chocolate (thanks to Ice Pandora for her deviantart.com chocolate tutorial) -minetest.register_craftitem("farming:chocolate_dark", { - description = S("Bar of Dark Chocolate"), - inventory_image = "farming_chocolate_dark.png", - on_use = minetest.item_eat(3) -}) - -farming.add_eatable("farming:chocolate_dark", 3) - -minetest.register_craft( { - output = "farming:chocolate_dark", - recipe = { - {"group:food_cocoa", "group:food_cocoa", "group:food_cocoa"} - } -}) - --- chocolate block -minetest.register_node("farming:chocolate_block", { - description = S("Chocolate Block"), - tiles = {"farming_chocolate_block.png"}, - is_ground_content = false, - groups = {cracky = 2, oddly_breakable_by_hand = 2}, - sounds = farming.node_sound_stone_defaults() -}) - -minetest.register_craft({ - output = "farming:chocolate_block", - recipe = { - {"farming:chocolate_dark", "farming:chocolate_dark", "farming:chocolate_dark"}, - {"farming:chocolate_dark", "farming:chocolate_dark", "farming:chocolate_dark"}, - {"farming:chocolate_dark", "farming:chocolate_dark", "farming:chocolate_dark"} - } -}) - -minetest.register_craft({ - output = "farming:chocolate_dark 9", - recipe = {{"farming:chocolate_block"}} -}) - --- cocoa definition local def = { drawtype = "plantlike", tiles = {"farming_cocoa_1.png"}, @@ -166,7 +86,7 @@ local def = { is_ground_content = false, sounds = farming.node_sound_leaves_defaults(), - -- custom function to check for growing conditions, returning True when found + -- custom function that returns True when conditions are met growth_check = function(pos, node_name) if minetest.find_node_near(pos, 1, @@ -179,13 +99,16 @@ local def = { } -- stage 1 + minetest.register_node("farming:cocoa_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_cocoa_2.png"} minetest.register_node("farming:cocoa_2", table.copy(def)) -- stage3 + def.tiles = {"farming_cocoa_3.png"} def.drop = { items = { @@ -195,6 +118,7 @@ def.drop = { minetest.register_node("farming:cocoa_3", table.copy(def)) -- stage 4 (final) + def.tiles = {"farming_cocoa_4.png"} def.groups.growing = nil def.growth_check = nil @@ -208,6 +132,7 @@ def.drop = { minetest.register_node("farming:cocoa_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:cocoa_beans"] = { trellis = "default:jungletree", crop = "farming:cocoa", @@ -218,6 +143,7 @@ farming.registered_plants["farming:cocoa_beans"] = { } -- register async mapgen script + if minetest.register_mapgen_script then minetest.register_mapgen_script(farming.path .. "/crops/cocoa_mapgen.lua") else diff --git a/crops/cocoa_mapgen.lua b/crops/cocoa_mapgen.lua index 7b33dcb..f4bc191 100644 --- a/crops/cocoa_mapgen.lua +++ b/crops/cocoa_mapgen.lua @@ -1,15 +1,16 @@ + -- Localize things for speed + local random = math.random local jungletree_nodes = {"default:jungletree", "mcl_core:jungletree"} local jungletree_leaves = { "default:jungleleaves", "moretrees:jungletree_leaves_green", "mcl_core:jungleleaves"} --- Add random cocoa pods to jungle tree's +-- check area to place cocoa pods near jungle trees + local function generate(vmanip, minp, maxp) - if maxp.y < 0 then - return - end + if maxp.y < 0 then return end local min, max = vmanip:get_emerged_area() local area = VoxelArea:new({MinEdge = min, MaxEdge = max}) @@ -44,6 +45,8 @@ local function generate(vmanip, minp, maxp) end end +-- mapgen + if minetest.save_gen_notify then -- async env (5.9+) minetest.register_on_generated(function(vmanip, minp, maxp, blockseed) generate(vmanip, minp, maxp) diff --git a/crops/coffee.lua b/crops/coffee.lua index 2522f38..cb5bd9c 100644 --- a/crops/coffee.lua +++ b/crops/coffee.lua @@ -1,53 +1,20 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- item/seed --- coffee minetest.register_craftitem("farming:coffee_beans", { description = S("Coffee Beans"), inventory_image = "farming_coffee_beans.png", groups = {compostability = 48, seed = 2, food_coffee = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:coffee_1") end }) --- cup of coffee -minetest.register_node("farming:coffee_cup", { - description = S("Cup of Coffee"), - drawtype = "torchlike", - tiles = {"farming_coffee_cup.png"}, - inventory_image = "farming_coffee_cup.png", - wield_image = "farming_coffee_cup.png", - paramtype = "light", - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} - }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1}, - is_ground_content = false, - on_use = minetest.item_eat(2, "vessels:drinking_glass"), - sounds = farming.node_sound_glass_defaults() -}) +-- crop definition -farming.add_eatable("farming:coffee_cup", 2) - -minetest.register_alias("farming:coffee_cup_hot", "farming:coffee_cup") -minetest.register_alias("farming:drinking_cup", "vessels:drinking_glass") - -minetest.register_craft( { - output = "farming:coffee_cup", - recipe = { - {"group:food_coffee", "group:food_glass_water", a.saucepan} - }, - replacements = { - {"group:food_saucepan", "farming:saucepan"} - } -}) - - --- coffee definition local def = { drawtype = "plantlike", tiles = {"farming_coffee_1.png"}, @@ -68,21 +35,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:coffee_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_coffee_2.png"} minetest.register_node("farming:coffee_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_coffee_3.png"} minetest.register_node("farming:coffee_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_coffee_4.png"} minetest.register_node("farming:coffee_4", table.copy(def)) -- stage 5 (final) + def.tiles = {"farming_coffee_5.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -96,6 +68,7 @@ def.drop = { minetest.register_node("farming:coffee_5", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:coffee"] = { crop = "farming:coffee", seed = "farming:coffee_beans", @@ -105,6 +78,7 @@ farming.registered_plants["farming:coffee"] = { } -- mapgen + local mg = farming.mapgen == "v6" def = { diff --git a/crops/corn.lua b/crops/corn.lua index 352b79f..2ede7da 100644 --- a/crops/corn.lua +++ b/crops/corn.lua @@ -4,116 +4,25 @@ http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/wip-mods/1440575-1-2-5-generation-minecraft-beta-1-2-farming-and ]] -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- item/seed --- corn minetest.register_craftitem("farming:corn", { description = S("Corn"), inventory_image = "farming_corn.png", - groups = { - compostability = 45, seed = 2, food_corn = 1 - }, + groups = {compostability = 45, seed = 2, food_corn = 1}, + on_use = minetest.item_eat(3), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:corn_1") - end, - on_use = minetest.item_eat(3) + end }) farming.add_eatable("farming:corn", 3) --- corn on the cob (texture by TenPlus1) -minetest.register_craftitem("farming:corn_cob", { - description = S("Corn on the Cob"), - inventory_image = "farming_corn_cob.png", - groups = {compostability = 65, food_corn_cooked = 1}, - on_use = minetest.item_eat(5) -}) +-- crop definition -farming.add_eatable("farming:corn_cob", 5) - -minetest.register_craft({ - type = "cooking", - cooktime = 10, - output = "farming:corn_cob", - recipe = "group:food_corn" -}) - --- popcorn -minetest.register_craftitem("farming:popcorn", { - description = S("Popcorn"), - inventory_image = "farming_popcorn.png", - groups = {compostability = 55, food_popcorn = 1}, - on_use = minetest.item_eat(4) -}) - -farming.add_eatable("farming:popcorn", 4) - -minetest.register_craft({ - output = "farming:popcorn", - recipe = { - {"group:food_oil", "group:food_corn", a.pot} - }, - replacements = { - {"group:food_pot", "farming:pot"}, - {"group:food_oil", "vessels:glass_bottle"} - } -}) - --- cornstarch -minetest.register_craftitem("farming:cornstarch", { - description = S("Cornstarch"), - inventory_image = "farming_cornstarch.png", - groups = {food_cornstarch = 1, food_gelatin = 1, flammable = 2, compostability = 65} -}) - -minetest.register_craft({ - output = "farming:cornstarch", - recipe = { - {a.mortar_pestle, "group:food_corn_cooked", a.baking_tray}, - {"", "group:food_bowl", ""}, - }, - replacements = { - {"group:food_mortar_pestle", "farming:mortar_pestle"}, - {"group:food_baking_tray", "farming:baking_tray"} - } -}) - --- ethanol (thanks to JKMurray for this idea) -minetest.register_node("farming:bottle_ethanol", { - description = S("Bottle of Ethanol"), - drawtype = "plantlike", - tiles = {"farming_bottle_ethanol.png"}, - inventory_image = "farming_bottle_ethanol.png", - wield_image = "farming_bottle_ethanol.png", - paramtype = "light", - is_ground_content = false, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, - sounds = farming.node_sound_glass_defaults() -}) - -minetest.register_craft( { - output = "farming:bottle_ethanol", - recipe = { - {"group:food_corn", "group:food_corn", "group:food_corn"}, - {"group:food_corn", a.glass_bottle, "group:food_corn"}, - {"group:food_corn", "group:food_corn", "group:food_corn"} - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:bottle_ethanol", - burntime = 80, - replacements = {{"farming:bottle_ethanol", a.glass_bottle}} -}) - --- corn definition local def = { drawtype = "plantlike", tiles = {"farming_corn_1.png"}, @@ -134,30 +43,37 @@ local def = { } -- stage 1 + minetest.register_node("farming:corn_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_corn_2.png"} minetest.register_node("farming:corn_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_corn_3.png"} minetest.register_node("farming:corn_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_corn_4.png"} minetest.register_node("farming:corn_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_corn_5.png"} minetest.register_node("farming:corn_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_corn_6.png"} def.visual_scale = 1.9 minetest.register_node("farming:corn_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_corn_7.png"} def.drop = { items = { @@ -169,6 +85,7 @@ def.drop = { minetest.register_node("farming:corn_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_corn_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -182,6 +99,7 @@ def.drop = { minetest.register_node("farming:corn_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:corn"] = { crop = "farming:corn", seed = "farming:corn", @@ -191,6 +109,7 @@ farming.registered_plants["farming:corn"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/cotton.lua b/crops/cotton.lua index 0b2dd5c..1ce1583 100644 --- a/crops/cotton.lua +++ b/crops/cotton.lua @@ -1,38 +1,8 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") --- wild cotton as a source of cotton seed and a chance of cotton itself -minetest.register_node("farming:cotton_wild", { - description = S("Wild Cotton"), - drawtype = "plantlike", - waving = 1, - tiles = {"farming_cotton_wild.png"}, - inventory_image = "farming_cotton_wild.png", - wield_image = "farming_cotton_wild.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = { - handy = 1, snappy = 3, attached_node = 1, flammable = 4, compostability = 60 - }, - _mcl_hardness = farming.mcl_hardness, - is_ground_content = false, - drop = { - items = { - {items = {"farming:cotton"}, rarity = 2}, - {items = {"farming:seed_cotton"}, rarity = 1} - } - }, - sounds = farming.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-6 / 16, -8 / 16, -6 / 16, 6 / 16, 5 / 16, 6 / 16} - } -}) +-- seed --- cotton seeds minetest.register_node("farming:seed_cotton", { description = S("Cotton Seed"), tiles = {"farming_cotton_seed.png"}, @@ -51,63 +21,26 @@ minetest.register_node("farming:seed_cotton", { sunlight_propagates = true, selection_box = farming.select, next_plant = "farming:cotton_1", + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:seed_cotton") end, + on_timer = function(pos, elapsed) minetest.set_node(pos, {name = "farming:cotton_1", param2 = 1}) end }) --- cotton +-- item + minetest.register_craftitem("farming:cotton", { description = S("Cotton"), inventory_image = "farming_cotton.png", groups = {flammable = 4, compostability = 50} }) --- string -if not farming.mcl then +-- crop definition - minetest.register_craftitem("farming:string", { - description = S("String"), - inventory_image = "farming_string.png", - groups = {flammable = 2} - }) -end - --- cotton to wool -minetest.register_craft({ - output = a.wool, - recipe = { - {"farming:cotton", "farming:cotton"}, - {"farming:cotton", "farming:cotton"} - } -}) - --- cotton to string -minetest.register_craft({ - output = a.string .. " 2", - recipe = { - {"farming:cotton"}, - {"farming:cotton"} - } -}) - --- can be used as fuel -minetest.register_craft({ - type = "fuel", - recipe = "farming:string", - burntime = 1 -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:cotton", - burntime = 1 -}) - --- cotton definition local def = { drawtype = "plantlike", tiles = {"farming_cotton_1.png"}, @@ -128,21 +61,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:cotton_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_cotton_2.png"} minetest.register_node("farming:cotton_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_cotton_3.png"} minetest.register_node("farming:cotton_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_cotton_4.png"} minetest.register_node("farming:cotton_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_cotton_5.png"} def.drop = { items = { @@ -152,6 +90,7 @@ def.drop = { minetest.register_node("farming:cotton_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_cotton_6.png"} def.drop = { items = { @@ -162,6 +101,7 @@ def.drop = { minetest.register_node("farming:cotton_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_cotton_7.png"} def.drop = { items = { @@ -174,6 +114,7 @@ def.drop = { minetest.register_node("farming:cotton_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_cotton_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -190,6 +131,7 @@ def.drop = { minetest.register_node("farming:cotton_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:cotton"] = { crop = "farming:cotton", seed = "farming:seed_cotton", @@ -198,15 +140,37 @@ farming.registered_plants["farming:cotton"] = { steps = 8 } ---[[ Cotton using api -farming.register_plant("farming:cotton", { - description = "Cotton seed", - inventory_image = "farming_cotton_seed.png", - groups = {flammable = 2}, - steps = 8, -})]] +-- wild cotton (this is what you find on the map) + +minetest.register_node("farming:cotton_wild", { + description = S("Wild Cotton"), + drawtype = "plantlike", + waving = 1, + tiles = {"farming_cotton_wild.png"}, + inventory_image = "farming_cotton_wild.png", + wield_image = "farming_cotton_wild.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {handy = 1, snappy = 3, attached_node = 1, flammable = 4, compostability = 60}, + _mcl_hardness = farming.mcl_hardness, + is_ground_content = false, + drop = { + items = { + {items = {"farming:cotton"}, rarity = 2}, + {items = {"farming:seed_cotton"}, rarity = 1} + } + }, + sounds = farming.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -8 / 16, -6 / 16, 6 / 16, 5 / 16, 6 / 16} + } +}) -- mapgen + local mg = farming.mapgen == "v6" def = { @@ -233,3 +197,12 @@ minetest.register_decoration({ y_min = 1, decoration = "farming:cotton_wild" }) + + +--[[ Cotton using api +farming.register_plant("farming:cotton", { + description = "Cotton seed", + inventory_image = "farming_cotton_seed.png", + groups = {flammable = 2}, + steps = 8, +})]] diff --git a/crops/cucumber.lua b/crops/cucumber.lua index 305fa07..def49c2 100644 --- a/crops/cucumber.lua +++ b/crops/cucumber.lua @@ -4,24 +4,25 @@ https://forum.minetest.net/viewtopic.php?id=3948 ]] -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- cucumber minetest.register_craftitem("farming:cucumber", { description = S("Cucumber"), inventory_image = "farming_cucumber.png", - groups = { - compostability = 48, seed = 2, food_cucumber = 1 - }, + groups = {compostability = 48, seed = 2, food_cucumber = 1}, + on_use = minetest.item_eat(4), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:cucumber_1") - end, - on_use = minetest.item_eat(4) + end }) farming.add_eatable("farming:cucumber", 4) --- cucumber definition +-- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_cucumber_1.png"}, @@ -40,17 +41,21 @@ local def = { } -- stage 1 + minetest.register_node("farming:cucumber_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_cucumber_2.png"} minetest.register_node("farming:cucumber_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_cucumber_3.png"} minetest.register_node("farming:cucumber_3", table.copy(def)) -- stage 4 (final) + def.tiles = {"farming_cucumber_4.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -63,6 +68,7 @@ def.drop = { minetest.register_node("farming:cucumber_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:cucumber"] = { crop = "farming:cucumber", seed = "farming:cucumber", @@ -72,6 +78,7 @@ farming.registered_plants["farming:cucumber"] = { } -- mapgen + local mg = farming.mapgen == "v6" def = { diff --git a/crops/eggplant.lua b/crops/eggplant.lua index a7b17ee..8df39d9 100644 --- a/crops/eggplant.lua +++ b/crops/eggplant.lua @@ -1,22 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- eggplant minetest.register_craftitem("farming:eggplant", { description = S("Eggplant"), inventory_image = "farming_eggplant.png", - groups = { - compostability = 48, seed = 2, food_eggplant = 1 - }, + groups = {compostability = 48, seed = 2, food_eggplant = 1}, + on_use = minetest.item_eat(3), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:eggplant_1") - end, - on_use = minetest.item_eat(3) + end }) farming.add_eatable("farming:eggplant", 3) --- definition +-- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_eggplant_1.png"}, @@ -38,13 +39,16 @@ local def = { } -- stage 1 + minetest.register_node("farming:eggplant_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_eggplant_2.png"} minetest.register_node("farming:eggplant_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_eggplant_3.png"} def.drop = { items = { @@ -54,7 +58,8 @@ def.drop = { } minetest.register_node("farming:eggplant_3", table.copy(def)) --- stage 4 +-- stage 4 (final) + def.tiles = {"farming_eggplant_4.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -67,6 +72,7 @@ def.drop = { minetest.register_node("farming:eggplant_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:eggplant"] = { crop = "farming:eggplant", seed = "farming:eggplant", @@ -76,6 +82,7 @@ farming.registered_plants["farming:eggplant"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/garlic.lua b/crops/garlic.lua index 3d4c635..91fcb0d 100644 --- a/crops/garlic.lua +++ b/crops/garlic.lua @@ -1,84 +1,20 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- garlic clove minetest.register_craftitem("farming:garlic_clove", { description = S("Garlic clove"), inventory_image = "crops_garlic_clove.png", groups = {compostability = 35, seed = 2, food_garlic_clove = 1, flammable = 3}, + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:garlic_1") end }) --- garlic bulb -minetest.register_craftitem("farming:garlic", { - description = S("Garlic"), - inventory_image = "crops_garlic.png", - on_use = minetest.item_eat(1), - groups = {food_garlic = 1, compostability = 55} -}) - -farming.add_eatable("farming:garlic", 1) - -minetest.register_craft({ - output = "farming:garlic_clove 8", - recipe = {{"farming:garlic"}} -}) - -minetest.register_craft({ - output = "farming:garlic", - recipe = { - {"farming:garlic_clove", "farming:garlic_clove", "farming:garlic_clove"}, - {"farming:garlic_clove", "", "farming:garlic_clove"}, - {"farming:garlic_clove", "farming:garlic_clove", "farming:garlic_clove"} - } -}) - --- garlic braid -minetest.register_node("farming:garlic_braid", { - description = S("Garlic Braid"), - inventory_image = "crops_garlic_braid.png", - wield_image = "crops_garlic_braid.png", - drawtype = "nodebox", - use_texture_alpha = "clip", - paramtype = "light", - paramtype2 = "facedir", - tiles = { - "crops_garlic_braid_top.png", - "crops_garlic_braid.png", - "crops_garlic_braid_side.png^[transformFx", - "crops_garlic_braid_side.png", - "crops_garlic_braid.png", - "crops_garlic_braid.png" - }, - groups = {vessel = 1, dig_immediate = 3, flammable = 3, compostability = 65}, - is_ground_content = false, - sounds = farming.node_sound_leaves_defaults(), - node_box = { - type = "fixed", - fixed = { - {-0.1875, -0.5, 0.5, 0.1875, 0.5, 0.125} - } - } -}) - -minetest.register_craft({ - output = "farming:garlic_braid", - recipe = { - {"farming:garlic", "farming:garlic", "farming:garlic"}, - {"farming:garlic", "farming:garlic", "farming:garlic"}, - {"farming:garlic", "farming:garlic", "farming:garlic"} - } -}) - -minetest.register_craft({ - type = "shapeless", - output = "farming:garlic 9", - recipe = {"farming:garlic_braid"} -}) - -- crop definition + local def = { drawtype = "plantlike", tiles = {"crops_garlic_plant_1.png"}, @@ -101,21 +37,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:garlic_1", table.copy(def)) -- stage 2 + def.tiles = {"crops_garlic_plant_2.png"} minetest.register_node("farming:garlic_2", table.copy(def)) -- stage 3 + def.tiles = {"crops_garlic_plant_3.png"} minetest.register_node("farming:garlic_3", table.copy(def)) -- stage 4 + def.tiles = {"crops_garlic_plant_4.png"} minetest.register_node("farming:garlic_4", table.copy(def)) -- stage 5 + def.tiles = {"crops_garlic_plant_5.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -129,6 +70,7 @@ def.drop = { minetest.register_node("farming:garlic_5", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:garlic"] = { crop = "farming:garlic", seed = "farming:garlic_clove", @@ -138,6 +80,7 @@ farming.registered_plants["farming:garlic"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/ginger.lua b/crops/ginger.lua index 1c47ca4..03e1534 100644 --- a/crops/ginger.lua +++ b/crops/ginger.lua @@ -1,22 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- ginger minetest.register_craftitem("farming:ginger", { description = S("Ginger"), inventory_image = "farming_ginger.png", - groups = { - compostability = 48, seed = 2, food_ginger = 1 - }, + groups = {compostability = 48, seed = 2, food_ginger = 1}, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:ginger_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:ginger", 1) --- ginger definition +-- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_ginger_1.png"}, @@ -37,13 +38,16 @@ local def = { } -- stage 1 + minetest.register_node("farming:ginger_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_ginger_2.png"} minetest.register_node("farming:ginger_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_ginger_3.png"} def.drop = { items = { @@ -54,6 +58,7 @@ def.drop = { minetest.register_node("farming:ginger_3", table.copy(def)) -- stage 4 (final) + def.tiles = {"farming_ginger_4.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -66,6 +71,7 @@ def.drop = { minetest.register_node("farming:ginger_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:ginger"] = { crop = "farming:ginger", seed = "farming:ginger", @@ -75,6 +81,7 @@ farming.registered_plants["farming:ginger"] = { } -- mapgen + minetest.register_decoration({ name = "farming:ginger_4", deco_type = "simple", diff --git a/crops/grapes.lua b/crops/grapes.lua index 98805ba..fa65c08 100644 --- a/crops/grapes.lua +++ b/crops/grapes.lua @@ -1,27 +1,24 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- place trellis helper --- place trellis local function place_grapes(itemstack, placer, pointed_thing, plantname) local pt = pointed_thing -- check if pointing at a node - if not pt or pt.type ~= "node" then - return - end + if not pt or pt.type ~= "node" then return end local under = minetest.get_node(pt.under) -- return if any of the nodes are not registered - if not minetest.registered_nodes[under.name] then - return - end + if not minetest.registered_nodes[under.name] then return end -- am I right-clicking on something that has a custom on_place set? -- thanks to Krock for helping with this issue :) local def = minetest.registered_nodes[under.name] + if placer and itemstack and def and def.on_rightclick then return def.on_rightclick(pt.under, under, placer, itemstack, pt) end @@ -30,19 +27,15 @@ local function place_grapes(itemstack, placer, pointed_thing, plantname) local name = placer and placer:get_player_name() or "" -- check for protection - if minetest.is_protected(pt.under, name) then - return - end + if minetest.is_protected(pt.under, name) then return end -- check if pointing at trellis - if under.name ~= "farming:trellis" then - return - end + if under.name ~= "farming:trellis" then return end -- add the node and remove 1 item from the itemstack minetest.set_node(pt.under, {name = plantname}) - minetest.sound_play("default_place_node", {pos = pt.under, gain = 1.0}) + minetest.sound_play("default_place_node", {pos = pt.under, gain = 1.0}, true) if placer and not farming.is_creative(placer:get_player_name()) then @@ -51,11 +44,8 @@ local function place_grapes(itemstack, placer, pointed_thing, plantname) -- check for refill if itemstack:get_count() == 0 then - minetest.after(0.20, - farming.refill_plant, - placer, - "farming:grapes", - placer:get_wield_index() + minetest.after(0.20, farming.refill_plant, placer, + "farming:grapes", placer:get_wield_index() ) end end @@ -63,14 +53,14 @@ local function place_grapes(itemstack, placer, pointed_thing, plantname) return itemstack end --- grapes +-- item/seed + minetest.register_craftitem("farming:grapes", { description = S("Grapes"), inventory_image = "farming_grapes.png", + groups = {compostability = 48, seed = 2, food_grapes = 1}, on_use = minetest.item_eat(2), - groups = { - compostability = 48, seed = 2, food_grapes = 1 - }, + on_place = function(itemstack, placer, pointed_thing) return place_grapes(itemstack, placer, pointed_thing, "farming:grapes_1") end @@ -78,13 +68,8 @@ minetest.register_craftitem("farming:grapes", { farming.add_eatable("farming:grapes", 2) --- grapes can be used for violet dye -minetest.register_craft({ - output = a.dye_violet, - recipe = {{"farming:grapes"}} -}) - -- trellis + minetest.register_node("farming:trellis", { description = S("Trellis (place on soil before planting grapes)"), drawtype = "plantlike", @@ -106,20 +91,17 @@ minetest.register_node("farming:trellis", { local pt = pointed_thing -- check if pointing at a node - if not pt or pt.type ~= "node" then - return - end + if not pt or pt.type ~= "node" then return end local under = minetest.get_node(pt.under) -- return if any of the nodes are not registered - if not minetest.registered_nodes[under.name] then - return - end + if not minetest.registered_nodes[under.name] then return end -- am I right-clicking on something that has a custom on_place set? -- thanks to Krock for helping with this issue :) local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then return def.on_rightclick(pt.under, under, placer, itemstack, pt) end @@ -130,9 +112,7 @@ minetest.register_node("farming:trellis", { local nodename = under.name - if minetest.get_item_group(nodename, "soil") < 2 then - return - end + if minetest.get_item_group(nodename, "soil") < 2 then return end local top = { x = pointed_thing.above.x, @@ -142,9 +122,7 @@ minetest.register_node("farming:trellis", { nodename = minetest.get_node(top).name - if nodename ~= "air" then - return - end + if nodename ~= "air" then return end minetest.set_node(pointed_thing.above, {name = "farming:trellis"}) @@ -156,22 +134,8 @@ minetest.register_node("farming:trellis", { end }) -minetest.register_craft({ - output = "farming:trellis", - recipe = { - {"group:stick", "group:stick", "group:stick"}, - {"group:stick", "group:stick", "group:stick"}, - {"group:stick", "group:stick", "group:stick"} - } -}) +-- crop definition -minetest.register_craft({ - type = "fuel", - recipe = "farming:trellis", - burntime = 15 -}) - --- grapes definition local def = { drawtype = "plantlike", tiles = {"farming_grapes_1.png"}, @@ -196,33 +160,41 @@ local def = { } -- stage 1 + minetest.register_node("farming:grapes_1", table.copy(def)) -- stage2 + def.tiles = {"farming_grapes_2.png"} minetest.register_node("farming:grapes_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_grapes_3.png"} minetest.register_node("farming:grapes_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_grapes_4.png"} minetest.register_node("farming:grapes_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_grapes_5.png"} minetest.register_node("farming:grapes_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_grapes_6.png"} minetest.register_node("farming:grapes_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_grapes_7.png"} minetest.register_node("farming:grapes_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_grapes_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -237,6 +209,7 @@ def.drop = { minetest.register_node("farming:grapes_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:grapes"] = { trellis = "farming:trellis", crop = "farming:grapes", @@ -247,6 +220,7 @@ farming.registered_plants["farming:grapes"] = { } -- wild grape vine (this is what you find on the map) + minetest.register_node("farming:grapebush", { drawtype = "plantlike", tiles = {"farming_grapebush.png"}, @@ -272,6 +246,7 @@ minetest.register_node("farming:grapebush", { }) -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/hemp.lua b/crops/hemp.lua index 0fc8382..0ddd5c6 100644 --- a/crops/hemp.lua +++ b/crops/hemp.lua @@ -1,8 +1,8 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- seed --- hemp seeds minetest.register_node("farming:seed_hemp", { description = S("Hemp Seed"), tiles = {"farming_hemp_seed.png"}, @@ -21,195 +21,26 @@ minetest.register_node("farming:seed_hemp", { sunlight_propagates = true, selection_box = farming.select, next_plant = "farming:hemp_1", + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:seed_hemp") end, + on_timer = function(pos, elapsed) minetest.set_node(pos, {name = "farming:hemp_1", param2 = 1}) end }) --- harvested hemp +-- item + minetest.register_craftitem("farming:hemp_leaf", { description = S("Hemp Leaf"), inventory_image = "farming_hemp_leaf.png", groups = {compostability = 35} }) --- hemp oil -minetest.register_node("farming:hemp_oil", { - description = S("Bottle of Hemp Oil"), - drawtype = "plantlike", - tiles = {"farming_hemp_oil.png"}, - inventory_image = "farming_hemp_oil.png", - wield_image = "farming_hemp_oil.png", - paramtype = "light", - is_ground_content = false, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - }, - groups = { - food_oil = 1, vessel = 1, dig_immediate = 3, attached_node = 1, - compostability = 45 - }, - sounds = farming.node_sound_glass_defaults() -}) +-- crop definition -minetest.register_craft( { - output = "farming:hemp_oil", - recipe = { - {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, - {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, - {"", a.glass_bottle, ""} - } -}) - -minetest.register_craft( { - output = "farming:hemp_oil", - recipe = { - {"farming:seed_hemp", "farming:seed_hemp", "farming:seed_hemp"}, - {"farming:seed_hemp", "farming:seed_hemp", "farming:seed_hemp"}, - {"farming:seed_hemp", a.glass_bottle, "farming:seed_hemp"} - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:hemp_oil", - burntime = 20, - replacements = {{"farming:hemp_oil", a.glass_bottle}} -}) - --- hemp fibre -minetest.register_craftitem("farming:hemp_fibre", { - description = S("Hemp Fibre"), - inventory_image = "farming_hemp_fibre.png", - groups = {compostability = 55} -}) - -minetest.register_craft( { - output = "farming:hemp_fibre 8", - recipe = { - {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, - {"farming:hemp_leaf", "group:water_bucket", "farming:hemp_leaf"}, - {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"} - }, - replacements = {{"group:water_bucket", a.bucket_empty}} -}) - -if minetest.get_modpath("bucket_wooden") then - minetest.register_craft( { - output = "farming:hemp_fibre 8", - recipe = { - {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, - {"farming:hemp_leaf", "group:water_bucket_wooden", "farming:hemp_leaf"}, - {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"} - }, - replacements = {{"group:water_bucket_wooden", "bucket_wooden:bucket_empty"}} - }) -end - --- hemp block -minetest.register_node("farming:hemp_block", { - description = S("Hemp Block"), - tiles = {"farming_hemp_block.png"}, - paramtype = "light", - groups = { - axey = 1, handy = 1, snappy = 2, oddly_breakable_by_hand = 1, flammable = 2, - compostability = 85 - }, - is_ground_content = false, - sounds = farming.node_sound_leaves_defaults(), - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) - -minetest.register_craft( { - output = "farming:hemp_block", - recipe = { - {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, - {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, - {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"} - } -}) - --- check and register stairs -if minetest.global_exists("stairs") then - - if stairs.mod and stairs.mod == "redo" then - - stairs.register_all("hemp_block", "farming:hemp_block", - {snappy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - {"farming_hemp_block.png"}, - "Hemp Block", - farming.node_sound_leaves_defaults()) - else - - stairs.register_stair_and_slab("hemp_block", "farming:hemp_block", - {snappy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - {"farming_hemp_block.png"}, - "Hemp Block Stair", - "Hemp Block Slab", - farming.node_sound_leaves_defaults()) - end -end - --- paper -minetest.register_craft( { - output = a.paper .. " 3", - recipe = { - {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"} - } -}) - --- string -minetest.register_craft( { - output = "farming:cotton 3", - recipe = { - {"farming:hemp_fibre"}, - {"farming:hemp_fibre"}, - {"farming:hemp_fibre"} - } -}) - --- hemp rope -minetest.register_node("farming:hemp_rope", { - description = S("Hemp Rope"), - walkable = false, - climbable = true, - sunlight_propagates = true, - paramtype = "light", - tiles = {"farming_hemp_rope.png"}, - wield_image = "farming_hemp_rope.png", - inventory_image = "farming_hemp_rope.png", - drawtype = "plantlike", - groups = { - handy = 1, axey = 1, swordy = 1, flammable = 2, choppy = 3, - oddly_breakable_by_hand = 3, compostability = 55 - }, - is_ground_content = false, - sounds = farming.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7} - }, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) - --- string -minetest.register_craft( { - output = "farming:hemp_rope 6", - recipe = { - {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, - {"farming:cotton", "farming:cotton", "farming:cotton"}, - {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"} - } -}) - --- hemp definition local def = { drawtype = "plantlike", tiles = {"farming_hemp_1.png"}, @@ -230,25 +61,31 @@ local def = { } -- stage 1 + minetest.register_node("farming:hemp_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_hemp_2.png"} minetest.register_node("farming:hemp_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_hemp_3.png"} minetest.register_node("farming:hemp_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_hemp_4.png"} minetest.register_node("farming:hemp_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_hemp_5.png"} minetest.register_node("farming:hemp_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_hemp_6.png"} def.drop = { items = { @@ -259,6 +96,7 @@ def.drop = { minetest.register_node("farming:hemp_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_hemp_7.png"} def.drop = { items = { @@ -271,6 +109,7 @@ def.drop = { minetest.register_node("farming:hemp_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_hemp_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -285,6 +124,7 @@ def.drop = { minetest.register_node("farming:hemp_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:hemp"] = { crop = "farming:hemp", seed = "farming:seed_hemp", @@ -294,6 +134,7 @@ farming.registered_plants["farming:hemp"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = { diff --git a/crops/lettuce.lua b/crops/lettuce.lua index a7363ed..6f25b04 100644 --- a/crops/lettuce.lua +++ b/crops/lettuce.lua @@ -1,21 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- lettuce minetest.register_craftitem("farming:lettuce", { description = S("Lettuce"), inventory_image = "farming_lettuce.png", - groups = { - compostability = 48, seed = 2, food_lettuce = 1 - }, + groups = {compostability = 48, seed = 2, food_lettuce = 1}, + on_use = minetest.item_eat(2), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:lettuce_1") - end, - on_use = minetest.item_eat(2) + end }) farming.add_eatable("farming:lettuce", 2) +-- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_lettuce_1.png"}, @@ -35,21 +37,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:lettuce_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_lettuce_2.png"} minetest.register_node("farming:lettuce_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_lettuce_3.png"} minetest.register_node("farming:lettuce_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_lettuce_4.png"} minetest.register_node("farming:lettuce_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_lettuce_5.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -62,6 +69,7 @@ def.drop = { minetest.register_node("farming:lettuce_5", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:lettuce"] = { crop = "farming:lettuce", seed = "farming:lettuce", @@ -71,6 +79,7 @@ farming.registered_plants["farming:lettuce"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/melon.lua b/crops/melon.lua index 14cd2a3..0cedc77 100644 --- a/crops/melon.lua +++ b/crops/melon.lua @@ -1,37 +1,23 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- item/seed --- melon minetest.register_craftitem("farming:melon_slice", { description = S("Melon Slice"), inventory_image = "farming_melon_slice.png", - groups = { - compostability = 48, seed = 2, food_melon_slice = 1 - }, + groups = {compostability = 48, seed = 2, food_melon_slice = 1}, + on_use = minetest.item_eat(2), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:melon_1") - end, - on_use = minetest.item_eat(2) + end }) farming.add_eatable("farming:melon_slice", 2) -minetest.register_craft({ - output = "farming:melon_8", - recipe = { - {"farming:melon_slice", "farming:melon_slice"}, - {"farming:melon_slice", "farming:melon_slice"} - } -}) +-- crop definition -minetest.register_craft({ - output = "farming:melon_slice 4", - recipe = {{"farming:melon_8", a.cutting_board}}, - replacements = {{"farming:cutting_board", "farming:cutting_board"}} -}) - --- melon definition local def = { drawtype = "plantlike", tiles = {"farming_melon_1.png"}, @@ -51,33 +37,41 @@ local def = { } -- stage 1 + minetest.register_node("farming:melon_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_melon_2.png"} minetest.register_node("farming:melon_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_melon_3.png"} minetest.register_node("farming:melon_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_melon_4.png"} minetest.register_node("farming:melon_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_melon_5.png"} minetest.register_node("farming:melon_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_melon_6.png"} minetest.register_node("farming:melon_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_melon_7.png"} minetest.register_node("farming:melon_7", table.copy(def)) -- stage 8 (final) + minetest.register_node("farming:melon_8", { description = S("Melon"), tiles = { @@ -99,6 +93,7 @@ minetest.register_node("farming:melon_8", { }) -- add to registered_plants + farming.registered_plants["farming:melon"] = { crop = "farming:melon", seed = "farming:melon_slice", @@ -108,6 +103,7 @@ farming.registered_plants["farming:melon"] = { } -- mapgen + local mg = farming.mapgen == "v6" def = { diff --git a/crops/mint.lua b/crops/mint.lua index e56323a..ad5c78d 100644 --- a/crops/mint.lua +++ b/crops/mint.lua @@ -1,8 +1,8 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- seed --- mint seed minetest.register_node("farming:seed_mint", { description = S("Mint Seeds"), tiles = {"farming_mint_seeds.png"}, @@ -21,43 +21,26 @@ minetest.register_node("farming:seed_mint", { sunlight_propagates = true, selection_box = farming.select, next_plant = "farming:mint_1", + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:seed_mint") end, + on_timer = function(pos, elapsed) minetest.set_node(pos, {name = "farming:mint_1", param2 = 1}) end }) --- mint leaf +-- item + minetest.register_craftitem("farming:mint_leaf", { description = S("Mint Leaf"), inventory_image = "farming_mint_leaf.png", groups = {food_mint = 1, flammable = 4, compostability = 48} }) --- mint tea -minetest.register_craftitem("farming:mint_tea", { - description = S("Mint Tea"), - inventory_image = "farming_mint_tea.png", - on_use = minetest.item_eat(2, a.drinking_glass) -}) +-- crop definition -farming.add_eatable("farming:mint_tea", 2) - -minetest.register_craft({ - output = "farming:mint_tea", - recipe = { - {"group:food_mint", "group:food_mint", "group:food_mint"}, - {"group:food_glass_water", a.juicer, ""} - }, - replacements = { - {"group:food_juicer", "farming:juicer"} - } -}) - - --- mint definition local def = { drawtype = "plantlike", tiles = {"farming_mint_1.png"}, @@ -77,17 +60,21 @@ local def = { } -- stage 1 + minetest.register_node("farming:mint_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_mint_2.png"} minetest.register_node("farming:mint_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_mint_3.png"} minetest.register_node("farming:mint_3", table.copy(def)) -- stage 4 (final) + def.tiles = {"farming_mint_4.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -102,6 +89,7 @@ def.drop = { minetest.register_node("farming:mint_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:mint"] = { crop = "farming:mint", seed = "farming:seed_mint", @@ -111,6 +99,7 @@ farming.registered_plants["farming:mint"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = { diff --git a/crops/onion.lua b/crops/onion.lua index ecb6651..4ffee32 100644 --- a/crops/onion.lua +++ b/crops/onion.lua @@ -5,51 +5,25 @@ https://forum.minetest.net/viewtopic.php?f=9&t=19488 ]] -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- item/seed --- onion minetest.register_craftitem("farming:onion", { description = S("Onion"), inventory_image = "crops_onion.png", - groups = { - compostability = 48, seed = 2, food_onion = 1 - }, + groups = {compostability = 48, seed = 2, food_onion = 1}, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:onion_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:onion", 1) --- onion soup -minetest.register_craftitem("farming:onion_soup", { - description = S("Onion Soup"), - inventory_image = "farming_onion_soup.png", - groups = {compostability = 65}, - on_use = minetest.item_eat(6, a.bowl) -}) - -farming.add_eatable("farming:onion_soup", 6) - -minetest.register_craft({ - output = "farming:onion_soup", - recipe = { - {"group:food_onion", "group:food_onion", "group:food_onion"}, - {"group:food_onion", "group:food_bowl", "group:food_onion"}, - {"", a.pot, ""} - }, - replacements = {{"farming:pot", "farming:pot"}} -}) - --- yellow dye -minetest.register_craft({ - output = a.dye_yellow, - recipe = {{"group:food_onion"}} -}) - -- crop definition + local def = { drawtype = "plantlike", tiles = {"crops_onion_plant_1.png"}, @@ -73,21 +47,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:onion_1", table.copy(def)) -- stage 2 + def.tiles = {"crops_onion_plant_2.png"} minetest.register_node("farming:onion_2", table.copy(def)) -- stage 3 + def.tiles = {"crops_onion_plant_3.png"} minetest.register_node("farming:onion_3", table.copy(def)) -- stage 4 + def.tiles = {"crops_onion_plant_4.png"} minetest.register_node("farming:onion_4", table.copy(def)) -- stage 5 + def.tiles = {"crops_onion_plant_5.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -103,6 +82,7 @@ def.drop = { minetest.register_node("farming:onion_5", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:onion"] = { crop = "farming:onion", seed = "farming:onion", @@ -112,6 +92,7 @@ farming.registered_plants["farming:onion"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/parsley.lua b/crops/parsley.lua index d120567..8461e5e 100644 --- a/crops/parsley.lua +++ b/crops/parsley.lua @@ -1,22 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- item definition minetest.register_craftitem("farming:parsley", { description = S("Parsley"), inventory_image = "farming_parsley.png", - groups = { - compostability = 48, seed = 2, food_parsley = 1 - }, + groups = {compostability = 48, seed = 2, food_parsley = 1}, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:parsley_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:parsley", 1) -- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_parsley_1.png"}, @@ -37,13 +38,16 @@ local def = { } -- stage 1 + minetest.register_node("farming:parsley_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_parsley_2.png"} minetest.register_node("farming:parsley_2", table.copy(def)) -- stage 3 (final) + def.tiles = {"farming_parsley_3.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -57,6 +61,7 @@ def.drop = { minetest.register_node("farming:parsley_3", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:parsley"] = { crop = "farming:parsley", seed = "farming:parsley", @@ -66,6 +71,7 @@ farming.registered_plants["farming:parsley"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/peas.lua b/crops/peas.lua index fe2cb36..550209a 100644 --- a/crops/peas.lua +++ b/crops/peas.lua @@ -1,45 +1,28 @@ -local S = farming.translate -local a = farming.recipe_items +-- Textures for peas and their crop were done by Andrey01 --- Textures for Pea crop and Peas were done by Andrey01 +local S = minetest.get_translator("farming") + +-- item/seed --- pea pod minetest.register_craftitem("farming:pea_pod", { description = S("Pea Pod"), inventory_image = "farming_pea_pod.png", - groups = { - compostability = 48, seed = 2, food_peas = 1, food_pea_pod = 1 - }, + groups = {compostability = 48, seed = 2, food_peas = 1, food_pea_pod = 1}, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:pea_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:pea_pod", 1) -- replacement for separate peas item that was removed + minetest.register_alias("farming:peas", "farming:pea_pod") --- pea soup -minetest.register_craftitem("farming:pea_soup", { - description = S("Pea Soup"), - inventory_image = "farming_pea_soup.png", - groups = {compostability = 65}, - on_use = minetest.item_eat(4, a.bowl) -}) - -farming.add_eatable("farming:pea_soup", 4) - -minetest.register_craft({ - output = "farming:pea_soup", - recipe = { - {"group:food_peas"}, - {"group:food_peas"}, - {"group:food_bowl"} - } -}) +-- crop definition local def = { drawtype = "plantlike", @@ -63,21 +46,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:pea_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_pea_2.png"} minetest.register_node("farming:pea_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_pea_3.png"} minetest.register_node("farming:pea_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_pea_4.png"} minetest.register_node("farming:pea_4", table.copy(def)) --- stage 5 +-- stage 5 (final) + def.tiles = {"farming_pea_5.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -92,6 +80,7 @@ def.drop = { minetest.register_node("farming:pea_5", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:pea_pod"] = { crop = "farming:pea", seed = "farming:pea_pod", @@ -101,6 +90,7 @@ farming.registered_plants["farming:pea_pod"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/pepper.lua b/crops/pepper.lua index 76794e3..47a131c 100644 --- a/crops/pepper.lua +++ b/crops/pepper.lua @@ -5,20 +5,22 @@ https://forum.minetest.net/viewtopic.php?f=9&t=19488 ]] -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- seed --- peppercorn (seed) minetest.register_craftitem("farming:peppercorn", { description = S("Peppercorn"), inventory_image = "crops_peppercorn.png", groups = {compostability = 48, seed = 1, food_peppercorn = 1, flammable = 3}, + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:pepper_1") end }) -- green pepper + minetest.register_craftitem("farming:pepper", { description = S("Green Pepper"), inventory_image = "crops_pepper.png", @@ -29,6 +31,7 @@ minetest.register_craftitem("farming:pepper", { farming.add_eatable("farming:pepper", 2) -- yellow pepper + minetest.register_craftitem("farming:pepper_yellow", { description = S("Yellow Pepper"), inventory_image = "crops_pepper_yellow.png", @@ -39,6 +42,7 @@ minetest.register_craftitem("farming:pepper_yellow", { farming.add_eatable("farming:pepper_yellow", 3) -- red pepper + minetest.register_craftitem("farming:pepper_red", { description = S("Red Pepper"), inventory_image = "crops_pepper_red.png", @@ -48,43 +52,15 @@ minetest.register_craftitem("farming:pepper_red", { farming.add_eatable("farming:pepper_red", 4) +-- pepper to peppercorn recipe + minetest.register_craft({ output = "farming:peppercorn", recipe = {{"group:food_pepper"}} }) --- ground pepper -minetest.register_node("farming:pepper_ground", { - description = S("Ground Pepper"), - inventory_image = "crops_pepper_ground.png", - wield_image = "crops_pepper_ground.png", - drawtype = "plantlike", - visual_scale = 0.8, - paramtype = "light", - tiles = {"crops_pepper_ground.png"}, - groups = { - vessel = 1, food_pepper_ground = 1, - dig_immediate = 3, attached_node = 1, compostability = 30 - }, - is_ground_content = false, - sounds = farming.node_sound_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - } -}) - -minetest.register_craft( { - output = "farming:pepper_ground", - recipe = { - {"group:food_peppercorn"}, - {a.glass_bottle}, - {a.mortar_pestle} - }, - replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} -}) - -- crop definition + local def = { drawtype = "plantlike", tiles = {"crops_pepper_plant_1.png"}, @@ -107,21 +83,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:pepper_1", table.copy(def)) -- stage 2 + def.tiles = {"crops_pepper_plant_2.png"} minetest.register_node("farming:pepper_2", table.copy(def)) -- stage 3 + def.tiles = {"crops_pepper_plant_3.png"} minetest.register_node("farming:pepper_3", table.copy(def)) -- stage 4 + def.tiles = {"crops_pepper_plant_4.png"} minetest.register_node("farming:pepper_4", table.copy(def)) -- stage 5 (green pepper) + def.tiles = {"crops_pepper_plant_5.png"} def.selection_box = farming.select_final def.drop = { @@ -134,6 +115,7 @@ def.drop = { minetest.register_node("farming:pepper_5", table.copy(def)) -- stage 6 (yellow pepper) + def.tiles = {"crops_pepper_plant_6.png"} def.drop = { max_items = 2, items = { @@ -144,7 +126,8 @@ def.drop = { } minetest.register_node("farming:pepper_6", table.copy(def)) --- stage 7 (red pepper) +-- stage 7 (red pepper - final) + def.tiles = {"crops_pepper_plant_7.png"} def.groups.growing = nil def.drop = { @@ -157,6 +140,7 @@ def.drop = { minetest.register_node("farming:pepper_7", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:pepper"] = { crop = "farming:pepper", seed = "farming:peppercorn", @@ -166,6 +150,7 @@ farming.registered_plants["farming:pepper"] = { } -- mapgen + local mg = farming.mapgen == "v6" def = { diff --git a/crops/pineapple.lua b/crops/pineapple.lua index bb3cb1a..ef2cda4 100644 --- a/crops/pineapple.lua +++ b/crops/pineapple.lua @@ -1,18 +1,20 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- seed --- pineapple top minetest.register_craftitem("farming:pineapple_top", { description = S("Pineapple Top"), inventory_image = "farming_pineapple_top.png", groups = {compostability = 48, seed = 2, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:pineapple_1") end }) --- pineapple +-- item + minetest.register_node("farming:pineapple", { description = S("Pineapple"), drawtype = "plantlike", @@ -23,8 +25,7 @@ minetest.register_node("farming:pineapple", { sunlight_propagates = true, walkable = false, selection_box = { - type = "fixed", - fixed = {-0.27, -0.37, -0.27, 0.27, 0.44, 0.27} + type = "fixed", fixed = {-0.27, -0.37, -0.27, 0.27, 0.44, 0.27} }, groups = { food_pineapple = 1, fleshy = 3, dig_immediate = 3, flammable = 2, @@ -34,57 +35,8 @@ minetest.register_node("farming:pineapple", { is_ground_content = false }) --- pineapple -minetest.register_craftitem("farming:pineapple_ring", { - description = S("Pineapple Ring"), - inventory_image = "farming_pineapple_ring.png", - groups = {food_pineapple_ring = 1, compostability = 45}, - on_use = minetest.item_eat(1) -}) - -farming.add_eatable("farming:pineapple_ring", 1) - -minetest.register_craft( { - output = "farming:pineapple_ring 5", - recipe = {{"group:food_pineapple"}}, - replacements = {{"farming:pineapple", "farming:pineapple_top"}} -}) - --- pineapple juice -minetest.register_craftitem("farming:pineapple_juice", { - description = S("Pineapple Juice"), - inventory_image = "farming_pineapple_juice.png", - on_use = minetest.item_eat(4, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1, compostability = 35} -}) - -farming.add_eatable("farming:pineapple_juice", 4) - -minetest.register_craft({ - output = "farming:pineapple_juice", - recipe = { - {"group:food_pineapple_ring", "group:food_pineapple_ring", - "group:food_pineapple_ring"}, - {"", a.drinking_glass, ""}, - {"", a.juicer, ""} - }, - replacements = { - {"group:food_juicer", "farming:juicer"} - } -}) - -minetest.register_craft({ - output = "farming:pineapple_juice 2", - recipe = { - {a.drinking_glass, "group:food_pineapple", a.drinking_glass}, - {"", a.juicer, ""} - }, - replacements = { - {"group:food_juicer", "farming:juicer"} - } -}) - -- crop definition + local def = { drawtype = "plantlike", visual_scale = 1.5, @@ -106,33 +58,41 @@ local def = { } -- stage 1 + minetest.register_node("farming:pineapple_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_pineapple_2.png"} minetest.register_node("farming:pineapple_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_pineapple_3.png"} minetest.register_node("farming:pineapple_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_pineapple_4.png"} minetest.register_node("farming:pineapple_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_pineapple_5.png"} minetest.register_node("farming:pineapple_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_pineapple_6.png"} minetest.register_node("farming:pineapple_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_pineapple_7.png"} minetest.register_node("farming:pineapple_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_pineapple_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -145,6 +105,7 @@ def.drop = { minetest.register_node("farming:pineapple_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:pineapple"] = { crop = "farming:pineapple", seed = "farming:pineapple_top", @@ -154,6 +115,7 @@ farming.registered_plants["farming:pineapple"] = { } -- mapgen + local mg = farming.mapgen == "v6" def = { diff --git a/crops/potato.lua b/crops/potato.lua index 63f86bd..adb50a9 100644 --- a/crops/potato.lua +++ b/crops/potato.lua @@ -4,19 +4,24 @@ https://forum.minetest.net/viewtopic.php?id=3948 ]] -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- potato minetest.register_craftitem("farming:potato", { description = S("Potato"), inventory_image = "farming_potato.png", groups = {compostability = 48, seed = 2, food_potato = 1}, + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:potato_1") end, + -- 1 in 3 chance of being poisoned on_use = function(itemstack, user, pointed_thing) + if user then + if math.random(3) == 1 then return minetest.do_item_eat(-1, nil, itemstack, user, pointed_thing) else @@ -28,41 +33,8 @@ minetest.register_craftitem("farming:potato", { farming.add_eatable("farming:potato", 1) --- baked potato -minetest.register_craftitem("farming:baked_potato", { - description = S("Baked Potato"), - inventory_image = "farming_baked_potato.png", - on_use = minetest.item_eat(6) -}) +-- crop definition -farming.add_eatable("farming:baked_potato", 6) - -minetest.register_craft({ - type = "cooking", - cooktime = 10, - output = "farming:baked_potato", - recipe = "group:food_potato" -}) - --- Potato and cucumber Salad -minetest.register_craftitem("farming:potato_salad", { - description = S("Cucumber and Potato Salad"), - inventory_image = "farming_potato_salad.png", - on_use = minetest.item_eat(10, "farming:bowl") -}) - -farming.add_eatable("farming:potato_salad", 10) - -minetest.register_craft({ - output = "farming:potato_salad", - recipe = { - {"group:food_cucumber"}, - {"farming:baked_potato"}, - {"group:food_bowl"} - } -}) - --- potato definition local def = { drawtype = "plantlike", tiles = {"farming_potato_1.png"}, @@ -83,13 +55,16 @@ local def = { } -- stage 1 + minetest.register_node("farming:potato_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_potato_2.png"} minetest.register_node("farming:potato_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_potato_3.png"} def.drop = { items = { @@ -99,7 +74,8 @@ def.drop = { } minetest.register_node("farming:potato_3", table.copy(def)) --- stage 4 +-- stage 4 (final) + def.tiles = {"farming_potato_4.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -112,6 +88,7 @@ def.drop = { minetest.register_node("farming:potato_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:potato"] = { crop = "farming:potato", seed = "farming:potato", @@ -121,6 +98,7 @@ farming.registered_plants["farming:potato"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/pumpkin.lua b/crops/pumpkin.lua index bd7c2cb..0156895 100644 --- a/crops/pumpkin.lua +++ b/crops/pumpkin.lua @@ -1,160 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- seed --- pumpkin slice minetest.register_craftitem("farming:pumpkin_slice", { description = S("Pumpkin Slice"), inventory_image = "farming_pumpkin_slice.png", - groups = { - compostability = 48, seed = 2, food_pumpkin_slice = 1 - }, + groups = {compostability = 48, seed = 2, food_pumpkin_slice = 1}, + on_use = minetest.item_eat(2), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:pumpkin_1") - end, - on_use = minetest.item_eat(2) + end }) farming.add_eatable("farming:pumpkin_slice", 2) -minetest.register_craft({ - output = "farming:pumpkin", - recipe = { - {"farming:pumpkin_slice", "farming:pumpkin_slice"}, - {"farming:pumpkin_slice", "farming:pumpkin_slice"} - } -}) +-- crop definition -local tmp = farming.use_utensils and "farming:cutting_board" or "" - -minetest.register_craft({ - output = "farming:pumpkin_slice 4", - recipe = {{"farming:pumpkin", tmp}}, - replacements = {{"farming:cutting_board", "farming:cutting_board"}} -}) - --- jack 'o lantern -minetest.register_node("farming:jackolantern", { - description = S("Jack 'O Lantern (punch to turn on and off)"), - tiles = { - "farming_pumpkin_bottom.png^farming_pumpkin_top.png", - "farming_pumpkin_bottom.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png^farming_pumpkin_face_off.png" - }, - paramtype2 = "facedir", - groups = { - handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 - }, - is_ground_content = false, - sounds = farming.node_sound_wood_defaults(), - on_punch = function(pos, node, puncher) - local name = puncher:get_player_name() or "" - if minetest.is_protected(pos, name) then return end - node.name = "farming:jackolantern_on" - minetest.swap_node(pos, node) - end, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) - -minetest.register_node("farming:jackolantern_on", { - tiles = { - "farming_pumpkin_bottom.png^farming_pumpkin_top.png", - "farming_pumpkin_bottom.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png^farming_pumpkin_face_on.png" - }, - light_source = minetest.LIGHT_MAX - 1, - paramtype2 = "facedir", - groups = { - handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, - not_in_creative_inventory = 1 - }, - is_ground_content = false, - sounds = farming.node_sound_wood_defaults(), - drop = "farming:jackolantern", - on_punch = function(pos, node, puncher) - local name = puncher:get_player_name() or "" - if minetest.is_protected(pos, name) then return end - node.name = "farming:jackolantern" - minetest.swap_node(pos, node) - end, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) - -minetest.register_craft({ - output = "farming:jackolantern", - recipe = { - {"default:torch"}, - {"group:food_pumpkin"} - } -}) - ---- wooden scarecrow base -minetest.register_node("farming:scarecrow_bottom", { - description = S("Scarecrow Bottom"), - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "facedir", - tiles = {"default_wood.png"}, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-1/16, -8/16, -1/16, 1/16, 8/16, 1/16}, - {-12/16, 4/16, -1/16, 12/16, 2/16, 1/16}, - } - }, - groups = {axey = 1, handy = 1, snappy = 3, flammable = 2}, - is_ground_content = false, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) - -minetest.register_craft({ - output = "farming:scarecrow_bottom", - recipe = { - {"", "group:stick", ""}, - {"group:stick", "group:stick", "group:stick"}, - {"", "group:stick", ""} - } -}) - --- pumpkin bread -minetest.register_craftitem("farming:pumpkin_bread", { - description = S("Pumpkin Bread"), - inventory_image = "farming_pumpkin_bread.png", - on_use = minetest.item_eat(8), - groups = {food_bread = 1} -}) - -farming.add_eatable("farming:pumpkin_bread", 8) - -minetest.register_craftitem("farming:pumpkin_dough", { - description = S("Pumpkin Dough"), - inventory_image = "farming_pumpkin_dough.png" -}) - -minetest.register_craft({ - output = "farming:pumpkin_dough", - recipe = { - {"group:food_pumpkin_slice", "group:food_flour", "group:food_pumpkin_slice"} - } -}) - -minetest.register_craft({ - type = "cooking", - output = "farming:pumpkin_bread", - recipe = "farming:pumpkin_dough", - cooktime = 10 -}) - --- pumpkin definition local def = { drawtype = "plantlike", tiles = {"farming_pumpkin_1.png"}, @@ -175,33 +38,41 @@ local def = { } -- stage 1 + minetest.register_node("farming:pumpkin_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_pumpkin_2.png"} minetest.register_node("farming:pumpkin_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_pumpkin_3.png"} minetest.register_node("farming:pumpkin_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_pumpkin_4.png"} minetest.register_node("farming:pumpkin_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_pumpkin_5.png"} minetest.register_node("farming:pumpkin_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_pumpkin_6.png"} minetest.register_node("farming:pumpkin_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_pumpkin_7.png"} minetest.register_node("farming:pumpkin_7", table.copy(def)) -- stage 8 (final) + minetest.register_node("farming:pumpkin_8", { description = S("Pumpkin"), tiles = { @@ -225,6 +96,7 @@ minetest.register_node("farming:pumpkin_8", { minetest.register_alias("farming:pumpkin", "farming:pumpkin_8") -- add to registered_plants + farming.registered_plants["farming:pumpkin"] = { crop = "farming:pumpkin", seed = "farming:pumpkin_slice", @@ -234,6 +106,7 @@ farming.registered_plants["farming:pumpkin"] = { } -- mapgen + local mg = farming.mapgen == "v6" def = { diff --git a/crops/raspberry.lua b/crops/raspberry.lua index 7ac55cb..573384b 100644 --- a/crops/raspberry.lua +++ b/crops/raspberry.lua @@ -1,8 +1,8 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- item/seed --- raspberries minetest.register_craftitem("farming:raspberries", { description = S("Raspberries"), inventory_image = "farming_raspberries.png", @@ -10,34 +10,17 @@ minetest.register_craftitem("farming:raspberries", { compostability = 48, seed = 2, food_raspberries = 1, food_raspberry = 1, food_berry = 1 }, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:raspberry_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:raspberries", 1) --- raspberry smoothie -minetest.register_craftitem("farming:smoothie_raspberry", { - description = S("Raspberry Smoothie"), - inventory_image = "farming_raspberry_smoothie.png", - on_use = minetest.item_eat(2, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1, compostability = 65} -}) +-- crop definition -farming.add_eatable("farming:smoothie_raspberry", 2) - -minetest.register_craft({ - output = "farming:smoothie_raspberry", - recipe = { - {a.snow}, - {"group:food_raspberries"}, - {a.drinking_glass} - } -}) - --- raspberries definition local def = { drawtype = "plantlike", tiles = {"farming_raspberry_1.png"}, @@ -57,17 +40,21 @@ local def = { } -- stage 1 + minetest.register_node("farming:raspberry_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_raspberry_2.png"} minetest.register_node("farming:raspberry_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_raspberry_3.png"} minetest.register_node("farming:raspberry_3", table.copy(def)) -- stage 4 (final) + def.tiles = {"farming_raspberry_4.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -81,6 +68,7 @@ def.drop = { minetest.register_node("farming:raspberry_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:raspberries"] = { crop = "farming:raspberry", seed = "farming:raspberries", @@ -90,6 +78,7 @@ farming.registered_plants["farming:raspberries"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/rhubarb.lua b/crops/rhubarb.lua index f34066f..de3232c 100644 --- a/crops/rhubarb.lua +++ b/crops/rhubarb.lua @@ -1,43 +1,23 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- item/seed --- rhubarb minetest.register_craftitem("farming:rhubarb", { description = S("Rhubarb"), inventory_image = "farming_rhubarb.png", - groups = { - compostability = 48, seed = 2, food_rhubarb = 1 - }, + groups = {compostability = 48, seed = 2, food_rhubarb = 1}, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:rhubarb_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:rhubarb", 1) --- rhubarb pie -minetest.register_craftitem("farming:rhubarb_pie", { - description = S("Rhubarb Pie"), - inventory_image = "farming_rhubarb_pie.png", - on_use = minetest.item_eat(6), - groups = {compostability = 65} -}) +-- crop definition -farming.add_eatable("farming:rhubarb_pie", 6) - -minetest.register_craft({ - output = "farming:rhubarb_pie", - recipe = { - {a.baking_tray, "group:food_sugar", ""}, - {"group:food_rhubarb", "group:food_rhubarb", "group:food_rhubarb"}, - {"group:food_wheat", "group:food_wheat", "group:food_wheat"} - }, - replacements = {{"group:food_baking_tray", "farming:baking_tray"}} -}) - --- rhubarb definition local def = { drawtype = "plantlike", tiles = {"farming_rhubarb_1.png"}, @@ -60,13 +40,16 @@ local def = { } -- stage 1 + minetest.register_node("farming:rhubarb_1", table.copy(def)) -- stage2 + def.tiles = {"farming_rhubarb_2.png"} minetest.register_node("farming:rhubarb_2", table.copy(def)) -- stage3 + def.tiles = {"farming_rhubarb_3.png"} def.drop = { items = { @@ -76,6 +59,7 @@ def.drop = { minetest.register_node("farming:rhubarb_3", table.copy(def)) -- stage 4 (final) + def.tiles = {"farming_rhubarb_4.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -89,6 +73,7 @@ def.drop = { minetest.register_node("farming:rhubarb_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:rhubarb"] = { crop = "farming:rhubarb", seed = "farming:rhubarb", @@ -98,6 +83,7 @@ farming.registered_plants["farming:rhubarb"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/rice.lua b/crops/rice.lua index 9d5e7ba..a00fa04 100644 --- a/crops/rice.lua +++ b/crops/rice.lua @@ -1,8 +1,8 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") -- rice seed + minetest.register_node("farming:seed_rice", { description = S("Rice Seed"), tiles = {"farming_rice_seed.png"}, @@ -21,15 +21,18 @@ minetest.register_node("farming:seed_rice", { sunlight_propagates = true, selection_box = farming.select, next_plant = "farming:rice_1", + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:seed_rice") end, + on_timer = function(pos, elapsed) minetest.set_node(pos, {name = "farming:rice_1", param2 = 3}) end }) --- rice +-- rice item + minetest.register_craftitem("farming:rice", { description = S("Rice"), inventory_image = "farming_rice.png", @@ -37,6 +40,7 @@ minetest.register_craftitem("farming:rice", { }) -- dry rice seed to give edible rice + minetest.register_craft({ type = "cooking", cooktime = 1, @@ -44,39 +48,8 @@ minetest.register_craft({ recipe = "farming:seed_rice" }) --- rice flour and bread -minetest.register_craftitem("farming:rice_bread", { - description = S("Rice Bread"), - inventory_image = "farming_rice_bread.png", - on_use = minetest.item_eat(5), - groups = {food_rice_bread = 1, compostability = 65} -}) +-- crop definition -farming.add_eatable("farming:rice_bread", 5) - -minetest.register_craftitem("farming:rice_flour", { - description = S("Rice Flour"), - inventory_image = "farming_rice_flour.png", - groups = {food_rice_flour = 1, flammable = 1, compostability = 65} -}) - -minetest.register_craft({ - output = "farming:rice_flour", - recipe = { - {"farming:rice", "farming:rice", "farming:rice"}, - {"farming:rice", a.mortar_pestle, ""} - }, - replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} -}) - -minetest.register_craft({ - type = "cooking", - cooktime = 15, - output = "farming:rice_bread", - recipe = "farming:rice_flour" -}) - --- rice definition local def = { drawtype = "plantlike", tiles = {"farming_rice_1.png"}, @@ -99,21 +72,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:rice_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_rice_2.png"} minetest.register_node("farming:rice_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_rice_3.png"} minetest.register_node("farming:rice_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_rice_4.png"} minetest.register_node("farming:rice_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_rice_5.png"} def.drop = { items = { @@ -123,6 +101,7 @@ def.drop = { minetest.register_node("farming:rice_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_rice_6.png"} def.drop = { items = { @@ -132,6 +111,7 @@ def.drop = { minetest.register_node("farming:rice_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_rice_7.png"} def.drop = { items = { @@ -143,6 +123,7 @@ def.drop = { minetest.register_node("farming:rice_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_rice_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -156,6 +137,7 @@ def.drop = { minetest.register_node("farming:rice_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:rice"] = { crop = "farming:rice", seed = "farming:seed_rice", @@ -163,16 +145,3 @@ farming.registered_plants["farming:rice"] = { maxlight = farming.max_light, steps = 8 } - --- fuels -minetest.register_craft({ - type = "fuel", - recipe = "farming:rice", - burntime = 1 -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:rice_bread", - burntime = 1 -}) diff --git a/crops/rye_oat.lua b/crops/rye_oat.lua new file mode 100644 index 0000000..3fd93c1 --- /dev/null +++ b/crops/rye_oat.lua @@ -0,0 +1,50 @@ + +local S = minetest.get_translator("farming") + +--= A nice addition from Ademant's grain mod :) + +-- Rye + +farming.register_plant("farming:rye", { + description = S("Rye seed"), + paramtype2 = "meshoptions", + inventory_image = "farming_rye_seed.png", + steps = 8, + place_param2 = 3 +}) + +-- override rye item + +minetest.override_item("farming:rye", { + description = S("Rye"), + groups = {food_rye = 1, flammable = 4, compostability = 65} +}) + +-- override rye crop + +minetest.override_item("farming:rye_1", {drop = {}}) +minetest.override_item("farming:rye_2", {drop = {}}) +minetest.override_item("farming:rye_3", {drop = {}}) + +-- Oats + +farming.register_plant("farming:oat", { + description = S("Oat seed"), + paramtype2 = "meshoptions", + inventory_image = "farming_oat_seed.png", + steps = 8, + place_param2 = 3 +}) + +-- override oat item + +minetest.override_item("farming:oat", { + description = S("Oats"), + groups = {food_oats = 1, flammable = 4, compostability = 65} +}) + +-- override oat crop + +minetest.override_item("farming:oat_1", {drop = {}}) +minetest.override_item("farming:oat_2", {drop = {}}) +minetest.override_item("farming:oat_3", {drop = {}}) diff --git a/crops/ryeoatrice.lua b/crops/ryeoatrice.lua deleted file mode 100644 index 358a7ae..0000000 --- a/crops/ryeoatrice.lua +++ /dev/null @@ -1,117 +0,0 @@ - -local S = farming.translate -local a = farming.recipe_items - ---= A nice addition from Ademant's grain mod :) - --- Rye - -farming.register_plant("farming:rye", { - description = S("Rye seed"), - paramtype2 = "meshoptions", - inventory_image = "farming_rye_seed.png", - steps = 8, - place_param2 = 3 -}) - -minetest.override_item("farming:rye", { - description = S("Rye"), - groups = {food_rye = 1, flammable = 4, compostability = 65} -}) - -minetest.override_item("farming:rye_1", {drop = {}}) -minetest.override_item("farming:rye_2", {drop = {}}) -minetest.override_item("farming:rye_3", {drop = {}}) - -minetest.register_craft({ - output = "farming:flour", - recipe = { - {"farming:rye", "farming:rye", "farming:rye"}, - {"farming:rye", a.mortar_pestle, ""} - }, - replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} -}) - --- Oats - -farming.register_plant("farming:oat", { - description = S("Oat seed"), - paramtype2 = "meshoptions", - inventory_image = "farming_oat_seed.png", - steps = 8, - place_param2 = 3 -}) - -minetest.override_item("farming:oat", { - description = S("Oats"), - groups = {food_oats = 1, flammable = 4, compostability = 65} -}) - -minetest.override_item("farming:oat_1", {drop = {}}) -minetest.override_item("farming:oat_2", {drop = {}}) -minetest.override_item("farming:oat_3", {drop = {}}) - -minetest.register_craft({ - output = "farming:flour", - recipe = { - {"farming:oat", "farming:oat", "farming:oat"}, - {"farming:oat", a.mortar_pestle, ""} - }, - replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} -}) - --- Multigrain flour - -minetest.register_craftitem("farming:flour_multigrain", { - description = S("Multigrain Flour"), - inventory_image = "farming_flour_multigrain.png", - groups = {food_flour = 1, flammable = 1}, -}) - -minetest.register_craft({ - type = "shapeless", - output = "farming:flour_multigrain", - recipe = { - "group:food_wheat", "group:food_barley", "group:food_oats", - "group:food_rye", a.mortar_pestle - }, - replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} -}) - --- Multigrain bread - -minetest.register_craftitem("farming:bread_multigrain", { - description = S("Multigrain Bread"), - inventory_image = "farming_bread_multigrain.png", - on_use = minetest.item_eat(7), - groups = {food_bread = 1, compostability = 65} -}) - -farming.add_eatable("farming:bread_multigrain", 7) - -minetest.register_craft({ - type = "cooking", - cooktime = 15, - output = "farming:bread_multigrain", - recipe = "farming:flour_multigrain" -}) - --- Fuels - -minetest.register_craft({ - type = "fuel", - recipe = "farming:bread_multigrain", - burntime = 1 -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:rye", - burntime = 1 -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:oat", - burntime = 1 -}) diff --git a/crops/soy.lua b/crops/soy.lua index c02761c..6fe5d2b 100644 --- a/crops/soy.lua +++ b/crops/soy.lua @@ -1,128 +1,22 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- item/seed --- soy pod minetest.register_craftitem("farming:soy_pod", { description = S("Soy Pod"), inventory_image = "farming_soy_pod.png", groups = {compostability = 48, seed = 2, food_soy = 1, food_soy_pod = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:soy_1") end }) -- replacement for soy beans that was removed + minetest.register_alias("farming:soy_beans", "farming:soy_pod") --- soy sauce -minetest.register_node("farming:soy_sauce", { - description = S("Soy Sauce"), - drawtype = "plantlike", - tiles = {"farming_soy_sauce.png"}, - inventory_image = "farming_soy_sauce.png", - wield_image = "farming_soy_sauce.png", - paramtype = "light", - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, - groups = { - vessel = 1, food_soy_sauce = 1, dig_immediate = 3, attached_node = 1, - compostability = 65 - }, - is_ground_content = false, - sounds = farming.node_sound_glass_defaults() -}) - --- soy sauce recipe -minetest.register_craft( { - output = "farming:soy_sauce", - recipe = { - {"group:food_soy", "group:food_salt", "group:food_soy"}, - {a.juicer, a.bucket_water, a.glass_bottle} - }, - replacements = { - {a.bucket_water, a.bucket_empty}, - {"group:food_juicer", "farming:juicer"} - } -}) - --- soy milk -minetest.register_node("farming:soy_milk", { - description = S("Soy Milk"), - drawtype = "plantlike", - tiles = {"farming_soy_milk_glass.png"}, - inventory_image = "farming_soy_milk_glass.png", - wield_image = "farming_soy_milk_glass.png", - paramtype = "light", - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, - on_use = minetest.item_eat(2, "vessels:drinking_glass"), - groups = { - vessel = 1, food_milk_glass = 1, dig_immediate = 3, - attached_node = 1, drink = 1, compostability = 65 - }, - is_ground_content = false, - sounds = farming.node_sound_glass_defaults() -}) - -farming.add_eatable("farming:soy_milk", 2) - -minetest.register_craft( { - output = "farming:soy_milk", - recipe = { - {"group:food_soy", "group:food_soy", "group:food_soy"}, - {"farming:vanilla_extract", "bucket:bucket_water", a.drinking_glass} - }, - replacements = { - {a.bucket_water, a.bucket_empty}, - {"farming:vanilla_extract", a.glass_bottle} - } -}) - --- tofu -minetest.register_craftitem("farming:tofu", { - description = S("Tofu"), - inventory_image = "farming_tofu.png", - groups = { - food_tofu = 1, food_meat_raw = 1, compostability = 65, - }, - on_use = minetest.item_eat(3) -}) - -farming.add_eatable("farming:tofu", 3) - -minetest.register_craft({ - output = "farming:tofu", - recipe = { - {"group:food_soy", "group:food_soy", "group:food_soy"}, - {"group:food_soy", "group:food_soy", a.baking_tray} - }, - replacements = {{"farming:baking_tray", "farming:baking_tray"}} -}) - --- cooked tofu -minetest.register_craftitem("farming:tofu_cooked", { - description = S("Cooked Tofu"), - inventory_image = "farming_tofu_cooked.png", - groups = {food_meat = 1, compostability = 65}, - on_use = minetest.item_eat(6) -}) - -farming.add_eatable("farming:tofu_cooked", 6) - -minetest.register_craft({ - type = "cooking", - output = "farming:tofu_cooked", - recipe = "farming:tofu", - cooktime = 5 -}) - -- crop definition local def = { @@ -147,21 +41,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:soy_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_soy_2.png"} minetest.register_node("farming:soy_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_soy_3.png"} minetest.register_node("farming:soy_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_soy_4.png"} minetest.register_node("farming:soy_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_soy_5.png"} def.drop = { max_items = 1, items = { @@ -171,6 +70,7 @@ def.drop = { minetest.register_node("farming:soy_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_soy_6.png"} def.drop = { max_items = 3, items = { @@ -181,7 +81,8 @@ def.drop = { } minetest.register_node("farming:soy_6", table.copy(def)) --- stage 7 +-- stage 7 (final) + def.tiles = {"farming_soy_7.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -197,6 +98,7 @@ def.drop = { minetest.register_node("farming:soy_7", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:soy_pod"] = { crop = "farming:soy", seed = "farming:soy_pod", @@ -206,6 +108,7 @@ farming.registered_plants["farming:soy_pod"] = { } -- mapgen + local mg = farming.mapgen == "v6" def = { diff --git a/crops/spinach.lua b/crops/spinach.lua index e266306..87a06e3 100644 --- a/crops/spinach.lua +++ b/crops/spinach.lua @@ -1,22 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- spinach minetest.register_craftitem("farming:spinach", { description = S("Spinach"), inventory_image = "farming_spinach.png", - groups = { - compostability = 48, seed = 2, food_spinach = 1 - }, + groups = {compostability = 48, seed = 2, food_spinach = 1}, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:spinach_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:spinach", 1) --- definition +-- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_spinach_1.png"}, @@ -37,13 +38,16 @@ local def = { } -- stage 1 + minetest.register_node("farming:spinach_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_spinach_2.png"} minetest.register_node("farming:spinach_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_spinach_3.png"} def.drop = { items = { @@ -54,6 +58,7 @@ def.drop = { minetest.register_node("farming:spinach_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_spinach_4.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -67,6 +72,7 @@ def.drop = { minetest.register_node("farming:spinach_4", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:spinach"] = { crop = "farming:spinach", seed = "farming:spinach", @@ -76,6 +82,7 @@ farming.registered_plants["farming:spinach"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/strawberry.lua b/crops/strawberry.lua index 9db91b1..ad8a2c2 100644 --- a/crops/strawberry.lua +++ b/crops/strawberry.lua @@ -1,22 +1,23 @@ -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- Strawberry (can also be planted as seed) minetest.register_craftitem(":ethereal:strawberry", { description = S("Strawberry"), inventory_image = "ethereal_strawberry.png", - groups = { - compostability = 48, seed = 2, food_strawberry = 1, food_berry = 1 - }, + groups = {compostability = 48, seed = 2, food_strawberry = 1, food_berry = 1}, + 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, - on_use = minetest.item_eat(1) }) farming.add_eatable("ethereal:strawberry", 1) --- Define Strawberry Bush growth stages +-- crop definition + local def = { drawtype = "plantlike", tiles = {"ethereal_strawberry_1.png"}, @@ -40,25 +41,31 @@ local def = { } --stage 1 + minetest.register_node(":ethereal:strawberry_1", table.copy(def)) -- stage 2 + def.tiles = {"ethereal_strawberry_2.png"} minetest.register_node(":ethereal:strawberry_2", table.copy(def)) -- stage 3 + def.tiles = {"ethereal_strawberry_3.png"} minetest.register_node(":ethereal:strawberry_3", table.copy(def)) -- stage 4 + def.tiles = {"ethereal_strawberry_4.png"} minetest.register_node(":ethereal:strawberry_4", table.copy(def)) -- stage 5 + def.tiles = {"ethereal_strawberry_5.png"} minetest.register_node(":ethereal:strawberry_5", table.copy(def)) -- stage 6 + def.tiles = {"ethereal_strawberry_6.png"} def.drop = { items = { @@ -69,6 +76,7 @@ def.drop = { minetest.register_node(":ethereal:strawberry_6", table.copy(def)) -- stage 7 + def.tiles = {"ethereal_strawberry_7.png"} def.drop = { items = { @@ -78,7 +86,8 @@ def.drop = { } minetest.register_node(":ethereal:strawberry_7", table.copy(def)) --- stage 8 +-- stage 8 (final) + def.tiles = {"ethereal_strawberry_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -91,6 +100,7 @@ def.drop = { minetest.register_node(":ethereal:strawberry_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["ethereal:strawberry"] = { crop = "ethereal:strawberry", seed = "ethereal:strawberry", @@ -100,6 +110,7 @@ farming.registered_plants["ethereal:strawberry"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/sunflower.lua b/crops/sunflower.lua index 586bcb5..9e4f392 100644 --- a/crops/sunflower.lua +++ b/crops/sunflower.lua @@ -1,15 +1,8 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") --- sunflower -minetest.register_craftitem("farming:sunflower", { - description = S("Sunflower"), - inventory_image = "farming_sunflower.png", - groups = {flammable = 2} -}) +-- seed --- sunflower seeds minetest.register_node("farming:seed_sunflower", { description = S("Sunflower Seeds"), tiles = {"farming_sunflower_seeds.png"}, @@ -28,9 +21,11 @@ minetest.register_node("farming:seed_sunflower", { sunlight_propagates = true, selection_box = farming.select, next_plant = "farming:sunflower_1", + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:seed_sunflower") end, + on_timer = function(pos, elapsed) minetest.set_node(pos, {name = "farming:sunflower_1", param2 = 1}) end @@ -38,89 +33,23 @@ minetest.register_node("farming:seed_sunflower", { minetest.register_alias("farming:sunflower_seeds", "farming:seed_sunflower") +-- item + +minetest.register_craftitem("farming:sunflower", { + description = S("Sunflower"), + inventory_image = "farming_sunflower.png", + groups = {flammable = 2} +}) + +-- turn item into seeds + minetest.register_craft({ output = "farming:seed_sunflower 5", recipe = {{"farming:sunflower"}} }) --- sunflower seeds (toasted) -minetest.register_craftitem("farming:sunflower_seeds_toasted", { - description = S("Toasted Sunflower Seeds"), - inventory_image = "farming_sunflower_seeds_toasted.png", - groups = { - food_sunflower_seeds_toasted = 1, compostability = 65 - }, - on_use = minetest.item_eat(1) -}) +-- crop definition -farming.add_eatable("farming:sunflower_seeds_toasted", 1) - -minetest.register_craft({ - type = "cooking", - cooktime = 10, - output = "farming:sunflower_seeds_toasted", - recipe = "farming:seed_sunflower" -}) - --- sunflower oil -minetest.register_node("farming:sunflower_oil", { - description = S("Bottle of Sunflower Oil"), - drawtype = "plantlike", - tiles = {"farming_sunflower_oil.png"}, - inventory_image = "farming_sunflower_oil.png", - wield_image = "farming_sunflower_oil.png", - paramtype = "light", - is_ground_content = false, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - }, - groups = { - food_oil = 1, vessel = 1, dig_immediate = 3, attached_node = 1, - flammable = 2, compostability = 65 - }, - sounds = farming.node_sound_glass_defaults() -}) - -minetest.register_craft( { - output = "farming:sunflower_oil", - recipe = { - {"group:food_sunflower_seeds", "group:food_sunflower_seeds", "group:food_sunflower_seeds"}, - {"group:food_sunflower_seeds", "group:food_sunflower_seeds", "group:food_sunflower_seeds"}, - {"group:food_sunflower_seeds", a.glass_bottle, "group:food_sunflower_seeds"} - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:sunflower_oil", - burntime = 30, - replacements = {{"farming:sunflower_oil", a.glass_bottle}} -}) - --- sunflower seed bread -minetest.register_craftitem("farming:sunflower_bread", { - description = S("Sunflower Seed Bread"), - inventory_image = "farming_sunflower_bread.png", - on_use = minetest.item_eat(8), - groups = {food_bread = 1} -}) - -farming.add_eatable("farming:sunflower_bread", 8) - -minetest.register_craft({ - output = "farming:sunflower_bread", - recipe = { - { - "group:food_sunflower_seeds_toasted", - "group:food_bread", - "group:food_sunflower_seeds_toasted" - } - } -}) - --- sunflower definition local def = { drawtype = "plantlike", tiles = {"farming_sunflower_1.png"}, @@ -141,34 +70,42 @@ local def = { } -- stage 1 + minetest.register_node("farming:sunflower_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_sunflower_2.png"} minetest.register_node("farming:sunflower_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_sunflower_3.png"} minetest.register_node("farming:sunflower_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_sunflower_4.png"} minetest.register_node("farming:sunflower_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_sunflower_5.png"} minetest.register_node("farming:sunflower_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_sunflower_6.png"} def.visual_scale = 1.9 minetest.register_node("farming:sunflower_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_sunflower_7.png"} minetest.register_node("farming:sunflower_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_sunflower_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -181,6 +118,7 @@ def.drop = { minetest.register_node("farming:sunflower_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:sunflower"] = { crop = "farming:sunflower", seed = "farming:seed_sunflower", @@ -190,6 +128,7 @@ farming.registered_plants["farming:sunflower"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/tomato.lua b/crops/tomato.lua index 89c9ab7..1e770dd 100644 --- a/crops/tomato.lua +++ b/crops/tomato.lua @@ -4,41 +4,25 @@ http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1288375-food-plus-mod-more-food-than-you-can-imagine-v2-9) ]] -local S = farming.translate +local S = minetest.get_translator("farming") + +-- item/seed --- tomato minetest.register_craftitem("farming:tomato", { description = S("Tomato"), inventory_image = "farming_tomato.png", groups = {compostability = 45, seed = 2, food_tomato = 1}, + on_use = minetest.item_eat(4), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:tomato_1") - end, - on_use = minetest.item_eat(4) + end }) farming.add_eatable("farming:tomato", 4) --- tomato soup -minetest.register_craftitem("farming:tomato_soup", { - description = S("Tomato Soup"), - inventory_image = "farming_tomato_soup.png", - groups = {compostability = 65}, - on_use = minetest.item_eat(8, "farming:bowl") -}) +-- crop definition -farming.add_eatable("farming:tomato_soup", 8) - -minetest.register_craft({ - output = "farming:tomato_soup", - recipe = { - {"group:food_tomato"}, - {"group:food_tomato"}, - {"group:food_bowl"} - } -}) - --- tomato definition local def = { drawtype = "plantlike", tiles = {"farming_tomato_1.png"}, @@ -59,29 +43,36 @@ local def = { } -- stage 1 + minetest.register_node("farming:tomato_1", table.copy(def)) -- stage2 + def.tiles = {"farming_tomato_2.png"} minetest.register_node("farming:tomato_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_tomato_3.png"} minetest.register_node("farming:tomato_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_tomato_4.png"} minetest.register_node("farming:tomato_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_tomato_5.png"} minetest.register_node("farming:tomato_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_tomato_6.png"} minetest.register_node("farming:tomato_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_tomato_7.png"} def.drop = { items = { @@ -92,6 +83,7 @@ def.drop = { minetest.register_node("farming:tomato_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_tomato_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -105,6 +97,7 @@ def.drop = { minetest.register_node("farming:tomato_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:tomato"] = { crop = "farming:tomato", seed = "farming:tomato", @@ -114,6 +107,7 @@ farming.registered_plants["farming:tomato"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/vanilla.lua b/crops/vanilla.lua index e4597d9..96c6b03 100644 --- a/crops/vanilla.lua +++ b/crops/vanilla.lua @@ -1,23 +1,23 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- item/seed --- vanilla minetest.register_craftitem("farming:vanilla", { description = S("Vanilla"), inventory_image = "farming_vanilla.png", - groups = { - compostability = 48, seed = 2, food_vanilla = 1 - }, + groups = {compostability = 48, seed = 2, food_vanilla = 1}, + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:vanilla_1") - end, - on_use = minetest.item_eat(1) + end }) farming.add_eatable("farming:vanilla", 1) -- crop definition + local def = { drawtype = "plantlike", tiles = {"farming_vanilla_1.png"}, @@ -37,67 +37,38 @@ local def = { sounds = farming.node_sound_leaves_defaults() } --- vanilla extract -minetest.register_node("farming:vanilla_extract", { - description = S("Vanilla Extract"), - drawtype = "plantlike", - tiles = {"farming_vanilla_extract.png"}, - inventory_image = "farming_vanilla_extract.png", - wield_image = "farming_vanilla_extract.png", - paramtype = "light", - is_ground_content = false, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, - sounds = farming.node_sound_glass_defaults(), -}) - -minetest.register_craft( { - output = "farming:vanilla_extract", - recipe = { - {"group:food_vanilla", "group:food_vanilla", "group:food_vanilla"}, - {"group:food_vanilla", "farming:bottle_ethanol", "group:food_glass_water"}, - }, - replacements = { - {"group:food_glass_water", a.drinking_glass} - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:vanilla_extract", - burntime = 25, - replacements = {{"farming:vanilla_extract", a.glass_bottle}} -}) - -- stage 1 + minetest.register_node("farming:vanilla_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_vanilla_2.png"} minetest.register_node("farming:vanilla_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_vanilla_3.png"} minetest.register_node("farming:vanilla_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_vanilla_4.png"} minetest.register_node("farming:vanilla_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_vanilla_5.png"} minetest.register_node("farming:vanilla_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_vanilla_6.png"} def.visual_scale = 1.9 minetest.register_node("farming:vanilla_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_vanilla_7.png"} def.drop = { items = { @@ -109,6 +80,7 @@ def.drop = { minetest.register_node("farming:vanilla_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_vanilla_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -123,6 +95,7 @@ def.drop = { minetest.register_node("farming:vanilla_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:vanilla"] = { crop = "farming:vanilla", seed = "farming:vanilla", @@ -132,6 +105,7 @@ farming.registered_plants["farming:vanilla"] = { } -- mapgen + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass", "mcl_core:dirt_with_grass"}, diff --git a/crops/wheat.lua b/crops/wheat.lua index c1abb78..381ea0c 100644 --- a/crops/wheat.lua +++ b/crops/wheat.lua @@ -1,8 +1,8 @@ -local S = farming.translate -local a = farming.recipe_items +local S = minetest.get_translator("farming") + +-- seed --- wheat seeds minetest.register_node("farming:seed_wheat", { description = S("Wheat Seed"), tiles = {"farming_wheat_seed.png"}, @@ -20,101 +20,26 @@ minetest.register_node("farming:seed_wheat", { sunlight_propagates = true, selection_box = farming.select, next_plant = "farming:wheat_1", + on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:seed_wheat") end, + on_timer = function(pos, elapsed) minetest.set_node(pos, {name = "farming:wheat_1", param2 = 3}) end }) --- harvested wheat +-- item + minetest.register_craftitem("farming:wheat", { description = S("Wheat"), inventory_image = "farming_wheat.png", groups = {food_wheat = 1, flammable = 4} }) --- straw -minetest.register_node("farming:straw", { - description = S("Straw"), - tiles = {"farming_straw.png"}, - is_ground_content = false, - groups = {handy = 1, snappy = 3, flammable = 4, fall_damage_add_percent = -30}, - sounds = farming.node_sound_leaves_defaults(), - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) +-- crop definition -minetest.register_craft({ - output = "farming:straw 3", - recipe = { - {"farming:wheat", "farming:wheat", "farming:wheat"}, - {"farming:wheat", "farming:wheat", "farming:wheat"}, - {"farming:wheat", "farming:wheat", "farming:wheat"} - } -}) - -minetest.register_craft({ - output = "farming:wheat 3", - recipe = {{"farming:straw"}} -}) - --- check and register stairs -if minetest.global_exists("stairs") then - - if stairs.mod and stairs.mod == "redo" then - - stairs.register_all("straw", "farming:straw", - {snappy = 3, flammable = 4}, - {"farming_straw.png"}, - "Straw", - farming.node_sound_leaves_defaults()) - else - - stairs.register_stair_and_slab("straw", "farming:straw", - {snappy = 3, flammable = 4}, - {"farming_straw.png"}, - "Straw Stair", - "Straw Slab", - farming.node_sound_leaves_defaults()) - end -end - --- flour -minetest.register_craftitem("farming:flour", { - description = S("Flour"), - inventory_image = "farming_flour.png", - groups = {food_flour = 1, flammable = 1} -}) - -minetest.register_craft({ - output = "farming:flour", - recipe = { - {"farming:wheat", "farming:wheat", "farming:wheat"}, - {"farming:wheat", a.mortar_pestle, ""} - }, - replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} -}) - --- bread -minetest.register_craftitem("farming:bread", { - description = S("Bread"), - inventory_image = "farming_bread.png", - on_use = minetest.item_eat(5), - groups = {food_bread = 1} -}) - -farming.add_eatable("farming:bread", 5) - -minetest.register_craft({ - type = "cooking", - cooktime = 15, - output = "farming:bread", - recipe = "farming:flour" -}) - --- wheat definition local def = { drawtype = "plantlike", tiles = {"farming_wheat_1.png"}, @@ -137,21 +62,26 @@ local def = { } -- stage 1 + minetest.register_node("farming:wheat_1", table.copy(def)) -- stage 2 + def.tiles = {"farming_wheat_2.png"} minetest.register_node("farming:wheat_2", table.copy(def)) -- stage 3 + def.tiles = {"farming_wheat_3.png"} minetest.register_node("farming:wheat_3", table.copy(def)) -- stage 4 + def.tiles = {"farming_wheat_4.png"} minetest.register_node("farming:wheat_4", table.copy(def)) -- stage 5 + def.tiles = {"farming_wheat_5.png"} def.drop = { items = { @@ -162,6 +92,7 @@ def.drop = { minetest.register_node("farming:wheat_5", table.copy(def)) -- stage 6 + def.tiles = {"farming_wheat_6.png"} def.drop = { items = { @@ -172,6 +103,7 @@ def.drop = { minetest.register_node("farming:wheat_6", table.copy(def)) -- stage 7 + def.tiles = {"farming_wheat_7.png"} def.drop = { items = { @@ -184,6 +116,7 @@ def.drop = { minetest.register_node("farming:wheat_7", table.copy(def)) -- stage 8 (final) + def.tiles = {"farming_wheat_8.png"} def.groups.growing = nil def.selection_box = farming.select_final @@ -198,6 +131,7 @@ def.drop = { minetest.register_node("farming:wheat_8", table.copy(def)) -- add to registered_plants + farming.registered_plants["farming:wheat"] = { crop = "farming:wheat", seed = "farming:seed_wheat", @@ -205,16 +139,3 @@ farming.registered_plants["farming:wheat"] = { maxlight = farming.max_light, steps = 8 } - --- fuels -minetest.register_craft({ - type = "fuel", - recipe = "farming:straw", - burntime = 3 -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:wheat", - burntime = 1 -}) diff --git a/food.lua b/food.lua deleted file mode 100644 index 878b2b7..0000000 --- a/food.lua +++ /dev/null @@ -1,923 +0,0 @@ - -local S = farming.translate -local a = farming.recipe_items - --- sliced bread - -minetest.register_craftitem("farming:bread_slice", { - description = S("Sliced Bread"), - inventory_image = "farming_bread_slice.png", - on_use = minetest.item_eat(1), - groups = {food_bread_slice = 1, compostability = 65} -}) - -farming.add_eatable("farming:bread_slice", 1) - -minetest.register_craft({ - output = "farming:bread_slice 5", - recipe = {{"group:food_bread", a.cutting_board}}, - replacements = {{"group:food_cutting_board", "farming:cutting_board"}} -}) - --- toast - -minetest.register_craftitem("farming:toast", { - description = S("Toast"), - inventory_image = "farming_toast.png", - on_use = minetest.item_eat(1), - groups = {food_toast = 1, compostability = 65} -}) - -farming.add_eatable("farming:toast", 1) - -minetest.register_craft({ - type = "cooking", - cooktime = 3, - output = "farming:toast", - recipe = "farming:bread_slice" -}) - --- toast sandwich - -minetest.register_craftitem("farming:toast_sandwich", { - description = S("Toast Sandwich"), - inventory_image = "farming_toast_sandwich.png", - on_use = minetest.item_eat(4), - groups = {compostability = 85} -}) - -farming.add_eatable("farming:toast_sandwich", 4) - -minetest.register_craft({ - output = "farming:toast_sandwich", - recipe = { - {"farming:bread_slice"}, - {"farming:toast"}, - {"farming:bread_slice"} - } -}) - --- filter sea water into river water - -minetest.register_craft({ - output = a.bucket_river_water, - recipe = { - {"farming:hemp_fibre"}, - {"farming:hemp_fibre"}, - {a.bucket_water} - } -}) - -if farming.mcl then - - minetest.register_craft({ - output = "mcl_potions:river_water", - recipe = { - {"farming:hemp_fibre"}, - {"mcl_potions:water"} - } - }) -end - --- glass of water - -minetest.register_craftitem("farming:glass_water", { - description = S("Glass of Water"), - inventory_image = "farming_water_glass.png", - groups = {food_glass_water = 1, flammable = 3, vessel = 1} -}) - -minetest.register_craft({ - output = "farming:glass_water 4", - recipe = { - {a.drinking_glass, a.drinking_glass}, - {a.drinking_glass, a.drinking_glass}, - {a.bucket_river_water, ""} - }, - replacements = {{a.bucket_river_water, a.bucket_empty}} -}) - -minetest.register_craft({ - output = "farming:glass_water 4", - recipe = { - {a.drinking_glass, a.drinking_glass}, - {a.drinking_glass, a.drinking_glass}, - {a.bucket_water, "farming:hemp_fibre"} - }, - replacements = {{a.bucket_water, a.bucket_empty}} -}) - -if minetest.get_modpath("bucket_wooden") then - - minetest.register_craft({ - output = "farming:glass_water 4", - recipe = { - {a.drinking_glass, a.drinking_glass}, - {a.drinking_glass, a.drinking_glass}, - {"group:water_bucket_wooden", "farming:hemp_fibre"} - }, - replacements = {{"group:water_bucket_wooden", "bucket_wooden:bucket_empty"}} - }) -end - --- Sugar - -if not farming.mcl then - - minetest.register_craftitem("farming:sugar", { - description = S("Sugar"), - inventory_image = "farming_sugar.png", - groups = {food_sugar = 1, flammable = 3} - }) - - minetest.register_craft({ - type = "cooking", - cooktime = 3, - output = "farming:sugar 2", - recipe = "default:papyrus" - }) -end - -minetest.register_node("farming:sugar_cube", { - description = S("Sugar Cube"), - tiles = {"farming_sugar_cube.png"}, - groups = {shovely = 1, handy = 1, crumbly = 2}, - is_ground_content = false, - floodable = true, - sounds = farming.node_sound_gravel_defaults(), - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) - -minetest.register_craft({ - output = "farming:sugar_cube", - recipe = { - {a.sugar, a.sugar, a.sugar}, - {a.sugar, a.sugar, a.sugar}, - {a.sugar, a.sugar, a.sugar} - } -}) - -minetest.register_craft({ - output = a.sugar .. " 9", - recipe = {{"farming:sugar_cube"}} -}) - --- Sugar caramel - -minetest.register_craftitem("farming:caramel", { - description = S("Caramel"), - inventory_image = "farming_caramel.png", - groups = {compostability = 40} -}) - -minetest.register_craft({ - type = "cooking", - cooktime = 6, - output = "farming:caramel", - recipe = "group:food_sugar" -}) - --- Salt - -minetest.register_node("farming:salt", { - description = S("Salt"), - inventory_image = "farming_salt.png", - wield_image = "farming_salt.png", - drawtype = "plantlike", - visual_scale = 0.8, - paramtype = "light", - tiles = {"farming_salt.png"}, - groups = {food_salt = 1, vessel = 1, dig_immediate = 3, attached_node = 1}, - is_ground_content = false, - sounds = farming.node_sound_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - }, - -- special function to make salt crystals form inside water - dropped_step = function(self, pos, dtime) - - self.ctimer = (self.ctimer or 0) + dtime - if self.ctimer < 15.0 then return end - self.ctimer = 0 - - local needed - - if self.node_inside - and self.node_inside.name == a.water_source then - needed = 8 - - elseif self.node_inside - and self.node_inside.name == a.river_water_source then - needed = 9 - end - - if not needed then return end - - local objs = core.get_objects_inside_radius(pos, 0.5) - - if not objs or #objs ~= 1 then return end - - local salt, ent = nil, nil - - for k, obj in pairs(objs) do - - ent = obj:get_luaentity() - - if ent and ent.name == "__builtin:item" - and ent.itemstring == "farming:salt " .. needed then - - obj:remove() - - core.add_item(pos, "farming:salt_crystal") - - return false -- return with no further action - end - end - end -}) - -minetest.register_craft({ - type = "cooking", - cooktime = 15, - output = "farming:salt", - recipe = a.bucket_water, - replacements = {{a.bucket_water, a.bucket_empty}} -}) - --- Salt Crystal - -minetest.register_node("farming:salt_crystal", { - description = S("Salt crystal"), - inventory_image = "farming_salt_crystal.png", - wield_image = "farming_salt_crystal.png", - drawtype = "plantlike", - visual_scale = 0.8, - paramtype = "light", - light_source = 1, - tiles = {"farming_salt_crystal.png"}, - groups = {dig_immediate = 3, attached_node = 1}, - is_ground_content = false, - sounds = farming.node_sound_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - }, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) - -minetest.register_craft({ - output = "farming:salt 9", - recipe = { - {"farming:salt_crystal", a.mortar_pestle} - }, - replacements = {{"farming:mortar_pestle", "farming:mortar_pestle"}} -}) - -minetest.register_craft({ - output = "farming:salt_crystal", - recipe = { - {"farming:salt", "farming:salt", "farming:salt"}, - {"farming:salt", "farming:salt", "farming:salt"}, - {"farming:salt", "farming:salt", "farming:salt"} - } -}) - --- Mayonnaise - -minetest.register_node("farming:mayonnaise", { - description = S("Mayonnaise"), - drawtype = "plantlike", - tiles = {"farming_mayo.png"}, - inventory_image = "farming_mayo.png", - wield_image = "farming_mayo.png", - paramtype = "light", - is_ground_content = false, - walkable = false, - on_use = minetest.item_eat(3), - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.45, 0.25} - }, - groups = { - compostability = 65, food_mayonnaise = 1, vessel = 1, dig_immediate = 3, - attached_node = 1 - }, - sounds = farming.node_sound_glass_defaults() -}) - -farming.add_eatable("farming:mayonnaise", 3) - -minetest.register_craft({ - output = "farming:mayonnaise", - recipe = { - {"group:food_olive_oil", "group:food_lemon"}, - {"group:food_egg", "farming:salt"} - }, - replacements = {{"farming:olive_oil", a.glass_bottle}} -}) - --- Rose Water - -minetest.register_node("farming:rose_water", { - description = S("Rose Water"), - inventory_image = "farming_rose_water.png", - wield_image = "farming_rose_water.png", - drawtype = "plantlike", - visual_scale = 0.8, - paramtype = "light", - tiles = {"farming_rose_water.png"}, - groups = { - food_rose_water = 1, vessel = 1, dig_immediate = 3, attached_node = 1 - }, - is_ground_content = false, - sounds = farming.node_sound_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - } -}) - -minetest.register_craft({ - output = "farming:rose_water", - recipe = { - {a.rose, a.rose, a.rose}, - {a.rose, a.rose, a.rose}, - {"group:food_glass_water", a.pot, a.glass_bottle} - }, - replacements = { - {"group:food_glass_water", a.drinking_glass}, - {"group:food_pot", "farming:pot"} - } -}) - --- Turkish Delight - -minetest.register_craftitem("farming:turkish_delight", { - description = S("Turkish Delight"), - inventory_image = "farming_turkish_delight.png", - groups = {compostability = 85}, - on_use = minetest.item_eat(2) -}) - -farming.add_eatable("farming:turkish_delight", 2) - -minetest.register_craft({ - output = "farming:turkish_delight 4", - recipe = { - {"group:food_gelatin", "group:food_sugar", "group:food_gelatin"}, - {"group:food_sugar", "group:food_rose_water", "group:food_sugar"}, - {"group:food_sugar", a.dye_pink, "group:food_sugar"} - }, - replacements = { - {"group:food_cornstarch", a.bowl}, - {"group:food_cornstarch", a.bowl}, - {"group:food_rose_water", a.glass_bottle} - } -}) - --- Garlic Bread - -minetest.register_craftitem("farming:garlic_bread", { - description = S("Garlic Bread"), - inventory_image = "farming_garlic_bread.png", - groups = {compostability = 65}, - on_use = minetest.item_eat(2) -}) - -farming.add_eatable("farming:garlic_bread", 2) - -minetest.register_craft({ - output = "farming:garlic_bread", - recipe = { - {"group:food_toast", "group:food_garlic_clove", "group:food_garlic_clove"} - } -}) - --- Donuts (thanks to Bockwurst for making the donut images) - -minetest.register_craftitem("farming:donut", { - description = S("Donut"), - inventory_image = "farming_donut.png", - on_use = minetest.item_eat(4), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:donut", 4) - -minetest.register_craft({ - output = "farming:donut 3", - recipe = { - {"", "group:food_wheat", ""}, - {"group:food_wheat", "group:food_sugar", "group:food_wheat"}, - {"", "group:food_wheat", ""} - } -}) - -minetest.register_craftitem("farming:donut_chocolate", { - description = S("Chocolate Donut"), - inventory_image = "farming_donut_chocolate.png", - on_use = minetest.item_eat(6), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:donut_chocolate", 6) - -minetest.register_craft({ - output = "farming:donut_chocolate", - recipe = { - {"group:food_cocoa"}, - {"farming:donut"} - } -}) - -minetest.register_craftitem("farming:donut_apple", { - description = S("Apple Donut"), - inventory_image = "farming_donut_apple.png", - on_use = minetest.item_eat(6), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:donut_apple", 6) - -minetest.register_craft({ - output = "farming:donut_apple", - recipe = { - {"group:food_apple"}, - {"farming:donut"} - } -}) - --- Porridge Oats - -minetest.register_craftitem("farming:porridge", { - description = S("Porridge"), - inventory_image = "farming_porridge.png", - on_use = minetest.item_eat(6, a.bowl), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:porridge", 6) - -minetest.register_craft({ - output = "farming:porridge", - recipe = { - {"group:food_oats", "group:food_oats", "group:food_oats"}, - {"group:food_oats", "group:food_bowl", "group:food_milk_glass"} - }, - replacements = { - {"mobs:glass_milk", a.drinking_glass}, - {"farming:soy_milk", a.drinking_glass} - } -}) - --- Jaffa Cake - -minetest.register_craftitem("farming:jaffa_cake", { - description = S("Jaffa Cake"), - inventory_image = "farming_jaffa_cake.png", - on_use = minetest.item_eat(6), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:jaffa_cake", 6) - -minetest.register_craft({ - output = "farming:jaffa_cake 3", - recipe = { - {a.baking_tray, "group:food_egg", "group:food_sugar"}, - {a.flour, "group:food_cocoa", "group:food_orange"}, - {"group:food_milk", "", ""} - }, - replacements = { - {"farming:baking_tray", "farming:baking_tray"}, - {"mobs:bucket_milk", a.bucket_empty}, - {"mobs:wooden_bucket_milk", "wooden_bucket:bucket_wood_empty"}, - {"farming:soy_milk", a.drinking_glass} - } -}) - --- Apple Pie - -minetest.register_craftitem("farming:apple_pie", { - description = S("Apple Pie"), - inventory_image = "farming_apple_pie.png", - on_use = minetest.item_eat(6), - groups = {compostability = 75} -}) - -farming.add_eatable("farming:apple_pie", 6) - -minetest.register_craft({ - output = "farming:apple_pie", - recipe = { - {a.flour, "group:food_sugar", "group:food_apple"}, - {"", a.baking_tray, ""} - }, - replacements = {{"group:food_baking_tray", "farming:baking_tray"}} -}) - --- Cactus Juice - -minetest.register_craftitem("farming:cactus_juice", { - description = S("Cactus Juice"), - inventory_image = "farming_cactus_juice.png", - groups = {vessel = 1, drink = 1, compostability = 55}, - - on_use = function(itemstack, user, pointed_thing) - - if user then - - local num = math.random(5) == 1 and -1 or 2 - - return minetest.do_item_eat(num, "vessels:drinking_glass", - itemstack, user, pointed_thing) - end - end -}) - -farming.add_eatable("farming:cactus_juice", 1) - -minetest.register_craft({ - output = "farming:cactus_juice", - recipe = { - {a.juicer}, - {a.cactus}, - {a.drinking_glass} - }, - replacements = { - {"group:food_juicer", "farming:juicer"} - } -}) - --- Pasta - -minetest.register_craftitem("farming:pasta", { - description = S("Pasta"), - inventory_image = "farming_pasta.png", - groups = {compostability = 65, food_pasta = 1} -}) - -minetest.register_craft({ - output = "farming:pasta", - recipe = { - {a.flour, "group:food_butter", a.mixing_bowl} - }, - replacements = {{"group:food_mixing_bowl", "farming:mixing_bowl"}} -}) - -minetest.register_craft({ - output = "farming:pasta", - recipe = { - {a.flour, "group:food_oil", a.mixing_bowl} - }, - replacements = { - {"group:food_mixing_bowl", "farming:mixing_bowl"}, - {"group:food_oil", a.glass_bottle} - } -}) - --- Mac & Cheese - -minetest.register_craftitem("farming:mac_and_cheese", { - description = S("Mac & Cheese"), - inventory_image = "farming_mac_and_cheese.png", - on_use = minetest.item_eat(6, a.bowl), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:mac_and_cheese", 6) - -minetest.register_craft({ - output = "farming:mac_and_cheese", - recipe = { - {"group:food_pasta", "group:food_cheese", "group:food_bowl"} - } -}) - --- Spaghetti - -minetest.register_craftitem("farming:spaghetti", { - description = S("Spaghetti"), - inventory_image = "farming_spaghetti.png", - on_use = minetest.item_eat(8), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:spaghetti", 8) - -minetest.register_craft({ - output = "farming:spaghetti", - recipe = { - {"group:food_pasta", "group:food_tomato", a.saucepan}, - {"group:food_garlic_clove", "group:food_garlic_clove", ""} - }, - replacements = {{"group:food_saucepan", "farming:saucepan"}} -}) - --- Korean Bibimbap - -minetest.register_craftitem("farming:bibimbap", { - description = S("Bibimbap"), - inventory_image = "farming_bibimbap.png", - on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:bibimbap", 8) - -minetest.register_craft({ - output = "farming:bibimbap", - recipe = { - {a.skillet, "group:food_bowl", "group:food_egg"}, - {"group:food_rice", "group:food_chicken_raw", "group:food_cabbage"}, - {"group:food_carrot", "group:food_chili_pepper", ""} - }, - replacements = {{"group:food_skillet", "farming:skillet"}} -}) - -minetest.register_craft({ - output = "farming:bibimbap", - type = "shapeless", - recipe = { - a.skillet, "group:food_bowl", "group:food_mushroom", - "group:food_rice", "group:food_cabbage", "group:food_carrot", - "group:food_mushroom", "group:food_chili_pepper" - }, - replacements = {{"group:food_skillet", "farming:skillet"}} -}) - --- Burger - -minetest.register_craftitem("farming:burger", { - description = S("Burger"), - inventory_image = "farming_burger.png", - on_use = minetest.item_eat(16), - groups = {compostability = 95} -}) - -farming.add_eatable("farming:burger", 16) - -minetest.register_craft({ - output = "farming:burger", - recipe = { - {a.bread, "group:food_meat", "group:food_cheese"}, - {"group:food_tomato", "group:food_cucumber", "group:food_onion"}, - {"group:food_lettuce", "", ""} - } -}) - --- Salad - -minetest.register_craftitem("farming:salad", { - description = S("Salad"), - inventory_image = "farming_salad.png", - on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 45} -}) - -farming.add_eatable("farming:salad", 8) - -minetest.register_craft({ - output = "farming:salad", - type = "shapeless", - recipe = { - "group:food_bowl", "group:food_tomato", "group:food_cucumber", - "group:food_lettuce", "group:food_oil" - } -}) - --- Triple Berry Smoothie - -minetest.register_craftitem("farming:smoothie_berry", { - description = S("Triple Berry Smoothie"), - inventory_image = "farming_berry_smoothie.png", - on_use = minetest.item_eat(6, "vessels:drinking_glass"), - groups = {vessel = 1, drink = 1, compostability = 65} -}) - -farming.add_eatable("farming:smoothie_berry", 6) - -minetest.register_craft({ - output = "farming:smoothie_berry", - type = "shapeless", - recipe = { - "group:food_raspberries", "group:food_blackberries", - "group:food_strawberry", "group:food_banana", - a.drinking_glass - } -}) - --- Patatas a la importancia - -minetest.register_craftitem("farming:spanish_potatoes", { - description = S("Spanish Potatoes"), - inventory_image = "farming_spanish_potatoes.png", - on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:spanish_potatoes", 8) - -minetest.register_craft({ - output = "farming:spanish_potatoes", - recipe = { - {"group:food_potato", "group:food_parsley", "group:food_potato"}, - {"group:food_egg", a.flour, "group:food_onion"}, - {"farming:garlic_clove", "group:food_bowl", a.skillet} - }, - replacements = {{"group:food_skillet", "farming:skillet"}} -}) - --- Potato omelet - -minetest.register_craftitem("farming:potato_omelet", { - description = S("Potato omelette"), - inventory_image = "farming_potato_omelet.png", - on_use = minetest.item_eat(6, a.bowl), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:potato_omelet", 6) - -minetest.register_craft({ - output = "farming:potato_omelet", - recipe = { - {"group:food_egg", "group:food_potato", "group:food_onion"}, - {a.skillet, "group:food_bowl", ""} - }, - replacements = {{"group:food_skillet", "farming:skillet"}} -}) - --- Paella - -minetest.register_craftitem("farming:paella", { - description = S("Paella"), - inventory_image = "farming_paella.png", - on_use = minetest.item_eat(8, a.bowl), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:paella", 8) - -minetest.register_craft({ - output = "farming:paella", - recipe = { - {"group:food_rice", a.dye_orange, "farming:pepper_red"}, - {"group:food_peas", "group:food_chicken", "group:food_bowl"}, - {"", a.skillet, ""} - }, - replacements = {{"group:food_skillet", "farming:skillet"}} -}) - --- Flan - -minetest.register_craftitem("farming:flan", { - description = S("Vanilla Flan"), - inventory_image = "farming_vanilla_flan.png", - on_use = minetest.item_eat(6), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:flan", 6) - -minetest.register_craft({ - output = "farming:flan", - recipe = { - {"group:food_sugar", "group:food_milk", "farming:caramel"}, - {"group:food_egg", "group:food_egg", "farming:vanilla_extract"} - }, - replacements = { - {"cucina_vegana:soy_milk", a.drinking_glass}, - {"mobs:bucket_milk", "bucket:bucket_empty"}, - {"mobs:wooden_bucket_milk", "wooden_bucket:bucket_wood_empty"}, - {"farming:vanilla_extract", a.glass_bottle} - } -}) - --- Vegan Cheese - -minetest.register_craftitem("farming:cheese_vegan", { - description = S("Vegan Cheese"), - inventory_image = "farming_cheese_vegan.png", - on_use = minetest.item_eat(2), - groups = {compostability = 65, food_cheese = 1} -}) - -farming.add_eatable("farming:cheese_vegan", 2) - -minetest.register_craft({ - output = "farming:cheese_vegan", - recipe = { - {"farming:soy_milk", "farming:soy_milk", "farming:soy_milk"}, - {"group:food_salt", "group:food_peppercorn", "farming:bottle_ethanol"}, - {"group:food_gelatin", a.pot, ""} - }, - replacements = { - {"farming:soy_milk", a.drinking_glass .. " 3"}, - {"farming:pot", "farming:pot"}, - {"farming:bottle_ethanol", a.glass_bottle} - } -}) - -minetest.register_craft({ - output = "farming:cheese_vegan", - recipe = { - {"farming:soy_milk", "farming:soy_milk", "farming:soy_milk"}, - {"group:food_salt", "group:food_peppercorn", "group:food_lemon"}, - {"group:food_gelatin", a.pot, ""} - }, - replacements = { - {"farming:soy_milk", a.drinking_glass .. " 3"}, - {"farming:pot", "farming:pot"} - } -}) - --- Onigiri - -minetest.register_craftitem("farming:onigiri", { - description = S("Onigiri"), - inventory_image = "farming_onigiri.png", - on_use = minetest.item_eat(2), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:onigiri", 2) - -minetest.register_craft({ - output = "farming:onigiri", - recipe = { - {"group:food_rice", "group:food_salt", "group:food_rice"}, - {"", "group:food_seaweed", ""} - } -}) - --- Gyoza - -minetest.register_craftitem("farming:gyoza", { - description = S("Gyoza"), - inventory_image = "farming_gyoza.png", - on_use = minetest.item_eat(4), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:gyoza", 4) - -minetest.register_craft({ - output = "farming:gyoza 4", - recipe = { - {"group:food_cabbage", "group:food_garlic_clove", "group:food_onion"}, - {"group:food_meat_raw", "group:food_salt", a.flour}, - {"", a.skillet, ""} - - }, - replacements = { - {"group:food_skillet", "farming:skillet"} - } -}) - --- Mochi - -minetest.register_craftitem("farming:mochi", { - description = S("Mochi"), - inventory_image = "farming_mochi.png", - on_use = minetest.item_eat(3), - groups = {compostability = 65} -}) - -farming.add_eatable("farming:mochi", 3) - -minetest.register_craft({ - output = "farming:mochi", - recipe = { - {"", a.mortar_pestle, ""}, - {"group:food_rice", "group:food_sugar", "group:food_rice"}, - {"", "group:food_glass_water", ""} - }, - replacements = { - {"group:food_mortar_pestle", "farming:mortar_pestle"}, - {"group:food_glass_water", a.drinking_glass} - } -}) - --- Gingerbread Man - -minetest.register_craftitem("farming:gingerbread_man", { - description = S("Gingerbread Man"), - inventory_image = "farming_gingerbread_man.png", - on_use = minetest.item_eat(2), - groups = {compostability = 85} -}) - -farming.add_eatable("farming:gingerbread_man", 2) - -minetest.register_craft({ - output = "farming:gingerbread_man 3", - recipe = { - {"", "group:food_egg", ""}, - {"group:food_wheat", "group:food_ginger", "group:food_wheat"}, - {"group:food_sugar", "", "group:food_sugar"} - } -}) diff --git a/grass.lua b/grass.lua index b8f980a..2e607c2 100644 --- a/grass.lua +++ b/grass.lua @@ -1,5 +1,5 @@ --- Override grasses to drop seeds +-- Override grass to drop wheat and oat seeds local rarity_lookup = {[1] = 50, [2] = 50, [3] = 50, [4] = 5, [5] = 5} @@ -20,6 +20,8 @@ if minetest.registered_nodes["default:grass_1"] then end end +-- override dry grass to drop barley and rye seeds + if minetest.registered_nodes["default:dry_grass_1"] then for i = 1, 5 do @@ -37,6 +39,8 @@ if minetest.registered_nodes["default:dry_grass_1"] then end end +-- override jungle grass to drop cotton and rice seeds + if minetest.registered_nodes["default:junglegrass"] then minetest.override_item("default:junglegrass", { @@ -51,6 +55,8 @@ if minetest.registered_nodes["default:junglegrass"] then }) end +-- override mineclone tallgrass to drop all sof the above seeds + if farming.mcl then minetest.override_item("mcl_flowers:tallgrass", { diff --git a/hoes.lua b/hoes.lua index 1bda713..ecefbca 100644 --- a/hoes.lua +++ b/hoes.lua @@ -1,28 +1,22 @@ -local S = farming.translate -local tr = minetest.get_modpath("toolranks") +-- translation and mod check + +local S = minetest.get_translator("farming") +local mod_tr = minetest.get_modpath("toolranks") -- Hoe registration function farming.register_hoe = function(name, def) -- Check for : prefix (register new hoes in your mod's namespace) - if name:sub(1,1) ~= ":" then - name = ":" .. name - end + if name:sub(1,1) ~= ":" then name = ":" .. name end -- Check def table - if def.description == nil then - def.description = S("Hoe") - end + if def.description == nil then def.description = S("Hoe") end - if def.inventory_image == nil then - def.inventory_image = "unknown_item.png" - end + if def.inventory_image == nil then def.inventory_image = "unknown_item.png" end - if def.max_uses == nil then - def.max_uses = 30 - end + if def.max_uses == nil then def.max_uses = 30 end -- add hoe group def.groups = def.groups or {} @@ -32,20 +26,23 @@ farming.register_hoe = function(name, def) minetest.register_tool(name, { description = def.description, inventory_image = def.inventory_image, + groups = def.groups, + sound = {breaks = "default_tool_breaks"}, + on_use = function(itemstack, user, pointed_thing) return farming.hoe_on_use(itemstack, user, pointed_thing, def.max_uses) - end, - groups = def.groups, - sound = {breaks = "default_tool_breaks"} + end }) -- Register its recipe if def.recipe then + minetest.register_craft({ output = name:sub(2), recipe = def.recipe }) elseif def.material then + minetest.register_craft({ output = name:sub(2), recipe = { @@ -64,8 +61,7 @@ function farming.hoe_on_use(itemstack, user, pointed_thing, uses) local pt = pointed_thing -- am I going to hoe the top of a dirt node? - if not pt or pt.type ~= "node" - or pt.above.y ~= pt.under.y + 1 then + if not pt or pt.type ~= "node" or pt.above.y ~= pt.under.y + 1 then return end @@ -82,22 +78,17 @@ function farming.hoe_on_use(itemstack, user, pointed_thing, uses) -- return if any of the nodes is not registered if not minetest.registered_nodes[under.name] - or not minetest.registered_nodes[above.name] then - return - end + or 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 + if above.name ~= "air" then return end -- check if pointing at dirt - if minetest.get_item_group(under.name, "soil") ~= 1 then - return - end + if minetest.get_item_group(under.name, "soil") ~= 1 then return end -- check if (wet) soil defined local ndef = minetest.registered_nodes[under.name] + if ndef.soil == nil or ndef.soil.wet == nil or ndef.soil.dry == nil then return end @@ -116,14 +107,15 @@ function farming.hoe_on_use(itemstack, user, pointed_thing, uses) local wear = 65535 / (uses - 1) if farming.is_creative(user:get_player_name()) then - if tr then + + if mod_tr then wear = 1 else wear = 0 end end - if tr then + if mod_tr then itemstack = toolranks.new_afteruse(itemstack, user, under, {wear = wear}) else itemstack:add_wear(wear) @@ -188,7 +180,8 @@ farming.register_hoe(":farming:hoe_diamond", { }) -- Toolranks support -if tr then + +if mod_tr then minetest.override_item("farming:hoe_wood", { original_description = S("Wood Hoe"), @@ -215,8 +208,8 @@ if tr then description = toolranks.create_description(S("Diamond Hoe"))}) end - -- hoe bomb function + local function hoe_area(pos, player) -- check for protection @@ -229,9 +222,8 @@ local function hoe_area(pos, player) -- remove flora (grass, flowers etc.) local res = minetest.find_nodes_in_area( - {x = pos.x - r, y = pos.y - 1, z = pos.z - r}, - {x = pos.x + r, y = pos.y + 2, z = pos.z + r}, - {"group:flora"}) + {x = pos.x - r, y = pos.y - 1, z = pos.z - r}, + {x = pos.x + r, y = pos.y + 2, z = pos.z + r}, {"group:flora"}) for n = 1, #res do minetest.swap_node(res[n], {name = "air"}) @@ -249,8 +241,8 @@ local function hoe_area(pos, player) end end +-- throwable hoe bomb entity --- throwable hoe bomb minetest.register_entity("farming:hoebomb_entity", { initial_properties = { @@ -280,9 +272,7 @@ minetest.register_entity("farming:hoebomb_entity", { local vel = self.object:get_velocity() -- only when potion hits something physical - if vel.x == 0 - or vel.y == 0 - or vel.z == 0 then + if vel.x == 0 or vel.y == 0 or vel.z == 0 then if self.player ~= "" then @@ -303,8 +293,8 @@ minetest.register_entity("farming:hoebomb_entity", { end }) - -- actual throwing function + local function throw_potion(itemstack, player) local playerpos = player:get_pos() @@ -327,12 +317,13 @@ local function throw_potion(itemstack, player) obj:get_luaentity().player = player end - -- hoe bomb item + minetest.register_craftitem("farming:hoe_bomb", { description = S("Hoe Bomb (use or throw on grassy areas to hoe land)"), inventory_image = "farming_hoe_bomb.png", groups = {flammable = 2, not_in_creative_inventory = 1}, + on_use = function(itemstack, user, pointed_thing) if pointed_thing.type == "node" then @@ -381,22 +372,16 @@ minetest.register_tool("farming:scythe_mithril", { on_use = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return - end + if pointed_thing.type ~= "node" then return end local pos = pointed_thing.under local name = placer:get_player_name() - if minetest.is_protected(pos, name) then - return - end + if minetest.is_protected(pos, name) then return end local node = minetest.get_node_or_nil(pos) - if not node then - return - end + if not node then return end local def = minetest.registered_nodes[node.name] @@ -414,9 +399,7 @@ minetest.register_tool("farming:scythe_mithril", { local mname = node.name:split(":")[1] local pname = node_not_num(node.name:split(":")[2]) - if not pname then - return - end + if not pname then return end -- add dropped items for _, dropped_item in pairs(drops) do @@ -470,9 +453,11 @@ minetest.register_tool("farming:scythe_mithril", { return itemstack end - end, + end }) +-- if moreores found add mithril scythe recipe + if minetest.get_modpath("moreores") then minetest.register_craft({ diff --git a/init.lua b/init.lua index 0a17b8d..53fce1a 100644 --- a/init.lua +++ b/init.lua @@ -5,6 +5,11 @@ auto-refill by crabman77 ]] +-- Translation support +local S = minetest.get_translator("farming") + +-- set global + farming = { mod = "redo", version = "20240811", @@ -22,7 +27,8 @@ farming = { use_utensils = minetest.settings:get_bool("farming_use_utensils") ~= false, mtg = minetest.get_modpath("default"), mcl = minetest.get_modpath("mcl_core"), - mcl_hardness = 0.01 + mcl_hardness = 0.01, + translate = S } -- determine which sounds to use, default or mcl_sounds @@ -46,36 +52,28 @@ sound_helper("node_sound_water_defaults") sound_helper("node_sound_snow_defaults") sound_helper("node_sound_glass_defaults") - -- check for creative mode or priv + local creative_mode_cache = minetest.settings:get_bool("creative_mode") function farming.is_creative(name) return creative_mode_cache or minetest.check_player_privs(name, {creative = true}) end +-- stats, locals, settings, function helper local statistics = dofile(farming.path .. "/statistics.lua") - --- Translation support -local S = minetest.get_translator("farming") - -farming.translate = S - --- localise local random = math.random local floor = math.floor - --- Utility Function local time_speed = tonumber(minetest.settings:get("time_speed")) or 72 local SECS_PER_CYCLE = (time_speed > 0 and (24 * 60 * 60) / time_speed) or 0 local function clamp(x, min, max) return (x < min and min) or (x > max and max) or x end - -- return amount of day or night that has elapsed -- dt is time elapsed, count_day if true counts day, otherwise night + local function day_or_night_time(dt, count_day) local t_day = minetest.get_timeofday() @@ -104,7 +102,9 @@ local function day_or_night_time(dt, count_day) local dt_c = clamp(t2_c, 0, 0.5) - clamp(t1_c, 0, 0.5) -- this cycle if t1_c < -0.5 then + local nc = floor(-t1_c) + t1_c = t1_c + nc dt_c = dt_c + 0.5 * nc + clamp(-t1_c - 0.5, 0, 0.5) end @@ -112,14 +112,13 @@ local function day_or_night_time(dt, count_day) return dt_c * SECS_PER_CYCLE end - -- Growth Logic -local STAGE_LENGTH_AVG = tonumber( - minetest.settings:get("farming_stage_length")) or 200 + +local STAGE_LENGTH_AVG = tonumber(minetest.settings:get("farming_stage_length")) or 200 local STAGE_LENGTH_DEV = STAGE_LENGTH_AVG / 6 - -- quick start seed timer + farming.start_seed_timer = function(pos) local timer = minetest.get_node_timer(pos) @@ -128,16 +127,15 @@ farming.start_seed_timer = function(pos) timer:start(grow_time) end - -- return plant name and stage from node provided + local function plant_name_stage(node) local name if type(node) == "table" then - if node.name then - name = node.name + if node.name then name = node.name elseif node.x and node.y and node.z then node = minetest.get_node_or_nil(node) name = node and node.name @@ -146,9 +144,7 @@ local function plant_name_stage(node) name = tostring(node) end - if not name or name == "ignore" then - return nil - end + if not name or name == "ignore" then return nil end local sep_pos = name:find("_[^_]+$") @@ -164,7 +160,6 @@ local function plant_name_stage(node) return name, 0 end - -- Map from node name to -- { plant_name = ..., name = ..., stage = n, stages_left = { node_name, ... } } @@ -173,30 +168,24 @@ local plant_stages = {} farming.plant_stages = plant_stages --- Registers the stages of growth of a (possible plant) node. - -- - -- @param node - -- Node or position table, or node name. - -- @return - -- The (possibly zero) number of stages of growth the plant will go through - -- before being fully grown, or nil if not a plant. + -- @param node - Node or position table, or node name. + -- @return - The (possibly zero) number of stages of growth the plant will go through + -- before being fully grown, or nil if not a plant. local register_plant_node -- Recursive helper + local function reg_plant_stages(plant_name, stage, force_last) local node_name = plant_name and plant_name .. "_" .. stage local node_def = node_name and minetest.registered_nodes[node_name] - if not node_def then - return nil - end + if not node_def then return nil end local stages = plant_stages[node_name] - if stages then - return stages - end + if stages then return stages end if minetest.get_item_group(node_name, "growing") > 0 then @@ -219,9 +208,7 @@ local function reg_plant_stages(plant_name, stage, force_last) on_construct = function(pos) - if old_constr then - old_constr(pos) - end + if old_constr then old_constr(pos) end farming.handle_growth(pos) end, @@ -230,9 +217,7 @@ local function reg_plant_stages(plant_name, stage, force_last) minetest.get_node_timer(pos):stop() - if old_destr then - old_destr(pos) - end + if old_destr then old_destr(pos) end end, on_timer = function(pos, elapsed) @@ -275,9 +260,7 @@ end local function set_growing(pos, stages_left) - if not stages_left then - return - end + if not stages_left then return end local timer = minetest.get_node_timer(pos) @@ -297,19 +280,15 @@ local function set_growing(pos, stages_left) end end - -- detects a crop at given position, starting or stopping growth timer when needed + function farming.handle_growth(pos, node) - if not pos then - return - end + if not pos then return end local stages_left = register_plant_node(node or pos) - if stages_left then - set_growing(pos, stages_left) - end + if stages_left then set_growing(pos, stages_left) end end @@ -320,21 +299,20 @@ minetest.after(0, function() end end) - -- Just in case a growing type or added node is missed (also catches existing -- nodes added to map before timers were incorporated). + minetest.register_abm({ label = "Start crop timer", nodenames = {"group:growing"}, interval = 300, chance = 1, catch_up = false, + action = function(pos, node) -- skip if node timer already active - if minetest.get_node_timer(pos):is_started() then - return - end + if minetest.get_node_timer(pos):is_started() then return end -- check if group:growing node is a seed local def = minetest.registered_nodes[node.name] @@ -367,27 +345,24 @@ minetest.register_abm({ end }) +-- default check if on wet soil --- check if on wet soil farming.can_grow = function(pos) local below = minetest.get_node({x = pos.x, y = pos.y -1, z = pos.z}) return minetest.get_item_group(below.name, "soil") >= 3 end -- Plant timer function that grows plants under the right conditions. + function farming.plant_growth_timer(pos, elapsed, node_name) local stages = plant_stages[node_name] - if not stages then - return false - end + if not stages then return false end local max_growth = #stages.stages_left - if max_growth <= 0 then - return false - end + if max_growth <= 0 then return false end local chk1 = minetest.registered_nodes[node_name].growth_check -- old local chk2 = minetest.registered_nodes[node_name].can_grow -- new @@ -395,29 +370,21 @@ function farming.plant_growth_timer(pos, elapsed, node_name) -- custom farming redo growth_check function if chk1 then - if not chk1(pos, node_name) then - return true - end + if not chk1(pos, node_name) then return true end -- custom mt 5.9x farming can_grow function elseif chk2 then - if not chk2(pos) then - return true - end + if not chk2(pos) then return true end -- default mt 5.9x farming.can_grow function - elseif not farming.can_grow(pos) then - return true - end + elseif not farming.can_grow(pos) then return true end local growth local light_pos = {x = pos.x, y = pos.y, z = pos.z} local lambda = elapsed / STAGE_LENGTH_AVG - if lambda < 0.1 then - return true - end + if lambda < 0.1 then return true end local MIN_LIGHT = minetest.registered_nodes[node_name].minlight or farming.min_light local MAX_LIGHT = minetest.registered_nodes[node_name].maxlight or farming.max_light @@ -426,9 +393,7 @@ function farming.plant_growth_timer(pos, elapsed, node_name) local light = (minetest.get_node_light(light_pos) or 0) - if light < MIN_LIGHT or light > MAX_LIGHT then - return true - end + if light < MIN_LIGHT or light > MAX_LIGHT then return true end growth = 1 else @@ -439,9 +404,7 @@ function farming.plant_growth_timer(pos, elapsed, node_name) if not night_growth then - if not day_growth then - return true - end + if not day_growth then return true end lambda = day_or_night_time(elapsed, true) / STAGE_LENGTH_AVG @@ -452,9 +415,7 @@ function farming.plant_growth_timer(pos, elapsed, node_name) growth = statistics.poisson(lambda, max_growth) - if growth < 1 then - return true - end + if growth < 1 then return true end end if minetest.registered_nodes[stages.stages_left[growth]] then @@ -469,8 +430,8 @@ function farming.plant_growth_timer(pos, elapsed, node_name) return growth ~= max_growth end - -- refill placed plant by crabman (26/08/2015) updated by TenPlus1 + function farming.refill_plant(player, plantname, index) if not player then return end @@ -481,9 +442,7 @@ function farming.refill_plant(player, plantname, index) local old_stack = inv:get_stack("main", index) - if old_stack:get_name() ~= "" then - return - end + if old_stack:get_name() ~= "" then return end for i, stack in ipairs(inv:get_list("main")) do @@ -498,22 +457,21 @@ function farming.refill_plant(player, plantname, index) end end - -- Place Seeds on Soil + function farming.place_seed(itemstack, placer, pointed_thing, plantname) local pt = pointed_thing -- check if pointing at a node - if not itemstack or not pt or pt.type ~= "node" then - return - end + if not itemstack or not pt or pt.type ~= "node" then return end local under = minetest.get_node(pt.under) -- am I right-clicking on something that has a custom on_place set? -- thanks to Krock for helping with this issue :) local def = minetest.registered_nodes[under.name] + if placer and itemstack and def and def.on_rightclick then return def.on_rightclick(pt.under, under, placer, itemstack, pt) end @@ -521,23 +479,16 @@ function farming.place_seed(itemstack, placer, pointed_thing, plantname) local above = minetest.get_node(pt.above) -- check if pointing at the top of the node - if pt.above.y ~= pt.under.y + 1 then - return - end + if pt.above.y ~= pt.under.y + 1 then return end -- return if any of the nodes is not registered if not minetest.registered_nodes[under.name] - or not minetest.registered_nodes[above.name] then - return - end + or not minetest.registered_nodes[above.name] then return end - -- can I replace above node, and am I pointing at soil + -- can I replace above node, and am I pointing directly at soil if not minetest.registered_nodes[above.name].buildable_to or minetest.get_item_group(under.name, "soil") < 2 - -- avoid multiple seed placement bug - or minetest.get_item_group(above.name, "plant") ~= 0 then - return - end + or minetest.get_item_group(above.name, "plant") ~= 0 then return end -- is player planting seed? local name = placer and placer:get_player_name() or "" @@ -549,9 +500,7 @@ function farming.place_seed(itemstack, placer, pointed_thing, plantname) minetest.set_node(pt.above, {name = plantname, param2 = p2}) -farming.start_seed_timer(pt.above) ---minetest.get_node_timer(pt.above):start(1) ---farming.handle_growth(pt.above)--, node) + farming.start_seed_timer(pt.above) minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}) @@ -565,12 +514,8 @@ farming.start_seed_timer(pt.above) -- check for refill if itemstack:get_count() == 0 then - minetest.after(0.2, - farming.refill_plant, - placer, - name, - placer:get_wield_index() - ) + minetest.after(0.2, farming.refill_plant, + placer, name, placer:get_wield_index()) end end @@ -578,13 +523,11 @@ farming.start_seed_timer(pt.above) end end - -- Function to register plants (default farming compatibility) + farming.register_plant = function(name, def) - if not def.steps then - return nil - end + if not def.steps then return nil end local mname = name:split(":")[1] local pname = name:split(":")[2] @@ -622,14 +565,12 @@ farming.register_plant = function(name, def) local def = minetest.registered_nodes[mname .. ":" .. pname .. "_1"] if def then - minetest.swap_node(pos, { - name = def.next_plant, - param2 = def.place_param2 - }) + minetest.swap_node(pos, {name = def.next_plant, param2 = def.place_param2}) end end, on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":seed_" .. pname) end @@ -703,21 +644,21 @@ farming.register_plant = function(name, def) }) end --- add to farming.registered_plants -farming.registered_plants[mname .. ":" .. pname] = { - crop = mname .. ":" .. pname, - seed = mname .. ":seed_" .. pname, - steps = def.steps, - minlight = def.minlight, - maxlight = def.maxlight -} ---print(dump(farming.registered_plants[mname .. ":" .. pname])) - -- Return info + -- add to farming.registered_plants + farming.registered_plants[mname .. ":" .. pname] = { + crop = mname .. ":" .. pname, + seed = mname .. ":seed_" .. pname, + steps = def.steps, + minlight = def.minlight, + maxlight = def.maxlight + } +-- print(dump(farming.registered_plants[mname .. ":" .. pname])) + return {seed = mname .. ":seed_" .. pname, harvest = mname .. ":" .. pname} end - -- default settings + farming.asparagus = 0.002 farming.eggplant = 0.002 farming.spinach = 0.002 @@ -758,23 +699,26 @@ farming.strawberry = 0.002 farming.grains = true farming.rice = true - -- Load new global settings if found inside mod folder + local input = io.open(farming.path .. "/farming.conf", "r") + if input then - dofile(farming.path .. "/farming.conf") - input:close() + dofile(farming.path .. "/farming.conf") ; input:close() end -- load new world-specific settings if found inside world folder + local worldpath = minetest.get_worldpath() + input = io.open(worldpath .. "/farming.conf", "r") + if input then - dofile(worldpath .. "/farming.conf") - input:close() + dofile(worldpath .. "/farming.conf") ; input:close() end --- helper function to add {eatable} group to food items +-- helper function to add {eatable} group to food items, also {flammable} + function farming.add_eatable(item, hp) local def = minetest.registered_items[item] @@ -789,19 +733,21 @@ function farming.add_eatable(item, hp) end end --- recipe items -dofile(farming.path .. "/items.lua") +-- recipe item list and alternatives + +dofile(farming.path .. "/items_list.lua") -- important items + if minetest.get_modpath("default") then dofile(farming.path .. "/soil.lua") dofile(farming.path .. "/hoes.lua") end dofile(farming.path.."/grass.lua") -dofile(farming.path.."/utensils.lua") -- default crops + if not farming.mcl then dofile(farming.path.."/crops/wheat.lua") end @@ -809,6 +755,7 @@ end dofile(farming.path.."/crops/cotton.lua") -- disable crops Mineclone already has + if farming.mcl then farming.carrot = nil farming.potato = nil @@ -820,11 +767,10 @@ if farming.mcl then end -- helper function + local function ddoo(file, check) - if check then - dofile(farming.path .. "/crops/" .. file) - end + if check then dofile(farming.path .. "/crops/" .. file) end end -- add additional crops and food (if enabled) @@ -851,7 +797,7 @@ ddoo("pineapple.lua", farming.pineapple) ddoo("peas.lua", farming.peas) ddoo("beetroot.lua", farming.beetroot) ddoo("chili.lua", farming.chili) -ddoo("ryeoatrice.lua", farming.grains) +ddoo("rye_oat.lua", farming.grains) ddoo("rice.lua", farming.rice) ddoo("mint.lua", farming.mint) ddoo("cabbage.lua", farming.cabbage) @@ -868,7 +814,12 @@ ddoo("eggplant.lua", farming.eggplant) ddoo("spinach.lua", farming.eggplant) ddoo("ginger.lua", farming.ginger) -dofile(farming.path .. "/food.lua") +-- register food items, non-food items, recipes and stairs + +dofile(farming.path .. "/items_non_food.lua") +dofile(farming.path .. "/items_food.lua") +dofile(farming.path .. "/item_recipes.lua") +dofile(farming.path .. "/item_stairs.lua") if not farming.mcl then dofile(farming.path .. "/compatibility.lua") -- Farming Plus compatibility diff --git a/item_recipes.lua b/item_recipes.lua new file mode 100644 index 0000000..430da91 --- /dev/null +++ b/item_recipes.lua @@ -0,0 +1,1390 @@ + +local a = farming.recipe_items + +-- flour recipes + +minetest.register_craft({ + output = "farming:flour", + recipe = { + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", a.mortar_pestle, ""} + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} +}) + +minetest.register_craft({ + output = "farming:flour", + recipe = { + {"farming:rye", "farming:rye", "farming:rye"}, + {"farming:rye", a.mortar_pestle, ""} + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} +}) + +minetest.register_craft({ + output = "farming:flour", + recipe = { + {"farming:barley", "farming:barley", "farming:barley"}, + {"farming:barley", a.mortar_pestle, ""} + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} +}) + +minetest.register_craft({ + output = "farming:flour", + recipe = { + {"farming:oat", "farming:oat", "farming:oat"}, + {"farming:oat", a.mortar_pestle, ""} + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} +}) + +-- multigrain flour + +minetest.register_craft({ + type = "shapeless", + output = "farming:flour_multigrain", + recipe = { + "group:food_wheat", "group:food_barley", "group:food_oats", + "group:food_rye", a.mortar_pestle + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} +}) + +-- multigrain bread + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread_multigrain", + recipe = "farming:flour_multigrain" +}) + +-- bread + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" +}) + +-- sliced bread + +minetest.register_craft({ + output = "farming:bread_slice 5", + recipe = {{"group:food_bread", a.cutting_board}}, + replacements = {{"group:food_cutting_board", "farming:cutting_board"}} +}) + +-- toast + +minetest.register_craft({ + type = "cooking", + cooktime = 3, + output = "farming:toast", + recipe = "farming:bread_slice" +}) + +-- toast sandwich + +minetest.register_craft({ + output = "farming:toast_sandwich", + recipe = { + {"farming:bread_slice"}, + {"farming:toast"}, + {"farming:bread_slice"} + } +}) + +-- garlic bulb + +minetest.register_craft({ + output = "farming:garlic_clove 8", + recipe = {{"farming:garlic"}} +}) + +minetest.register_craft({ + output = "farming:garlic", + recipe = { + {"farming:garlic_clove", "farming:garlic_clove", "farming:garlic_clove"}, + {"farming:garlic_clove", "", "farming:garlic_clove"}, + {"farming:garlic_clove", "farming:garlic_clove", "farming:garlic_clove"} + } +}) + +-- garlic braid + +minetest.register_craft({ + output = "farming:garlic_braid", + recipe = { + {"farming:garlic", "farming:garlic", "farming:garlic"}, + {"farming:garlic", "farming:garlic", "farming:garlic"}, + {"farming:garlic", "farming:garlic", "farming:garlic"} + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:garlic 9", + recipe = {"farming:garlic_braid"} +}) + +-- corn on the cob + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:corn_cob", + recipe = "group:food_corn" +}) + +-- popcorn + +minetest.register_craft({ + output = "farming:popcorn", + recipe = { + {"group:food_oil", "group:food_corn", a.pot} + }, + replacements = { + {"group:food_pot", "farming:pot"}, + {"group:food_oil", "vessels:glass_bottle"} + } +}) + +-- cornstarch + + +minetest.register_craft({ + output = "farming:cornstarch", + recipe = { + {a.mortar_pestle, "group:food_corn_cooked", a.baking_tray}, + {"", "group:food_bowl", ""}, + }, + replacements = { + {"group:food_mortar_pestle", "farming:mortar_pestle"}, + {"group:food_baking_tray", "farming:baking_tray"} + } +}) + +-- ethanol + +minetest.register_craft( { + output = "farming:bottle_ethanol", + recipe = { + {"group:food_corn", "group:food_corn", "group:food_corn"}, + {"group:food_corn", a.glass_bottle, "group:food_corn"}, + {"group:food_corn", "group:food_corn", "group:food_corn"} + } +}) + +-- cup of coffee + +minetest.register_craft( { + output = "farming:coffee_cup", + recipe = { + {"group:food_coffee", "group:food_glass_water", a.saucepan} + }, + replacements = { + {"group:food_saucepan", "farming:saucepan"} + } +}) + +-- cocoa beans + +minetest.register_craft({ + type = "cooking", + cooktime = 5, + output = "farming:cocoa_beans", + recipe = "farming:cocoa_beans_raw" +}) + +-- bar of dark chocolate + +minetest.register_craft( { + output = "farming:chocolate_dark", + recipe = { + {"group:food_cocoa", "group:food_cocoa", "group:food_cocoa"} + } +}) + +-- chocolate cookie + +minetest.register_craft( { + output = "farming:cookie 8", + recipe = { + {"group:food_wheat", "group:food_cocoa", "group:food_wheat" } + } +}) + +-- chocolate block + +minetest.register_craft({ + output = "farming:chocolate_block", + recipe = { + {"farming:chocolate_dark", "farming:chocolate_dark", "farming:chocolate_dark"}, + {"farming:chocolate_dark", "farming:chocolate_dark", "farming:chocolate_dark"}, + {"farming:chocolate_dark", "farming:chocolate_dark", "farming:chocolate_dark"} + } +}) + +minetest.register_craft({ + output = "farming:chocolate_dark 9", + recipe = {{"farming:chocolate_block"}} +}) + +-- chili powder + +minetest.register_craft({ + output = "farming:chili_powder", + recipe = { + {"farming:chili_pepper", a.mortar_pestle} + }, + replacements = {{"farming:mortar_pestle", "farming:mortar_pestle"}} +}) + +-- bowl of chili + +minetest.register_craft({ + output = "farming:chili_bowl", + recipe = { + {"group:food_chili_pepper", "group:food_rice", "group:food_tomato"}, + {"group:food_beans", "group:food_bowl", ""} + } +}) + +-- carrot juice + +minetest.register_craft({ + output = "farming:carrot_juice", + recipe = { + {a.juicer}, + {"group:food_carrot"}, + {"vessels:drinking_glass"} + }, + replacements = { + {"group:food_juicer", "farming:juicer"} + } +}) + +-- golden carrot + +minetest.register_craft({ + output = "farming:carrot_gold", + recipe = {{"group:food_carrot", "default:gold_lump"}} +}) + +-- blueberry pie + +minetest.register_craft({ + output = "farming:blueberry_pie", + recipe = { + {"group:food_flour", "group:food_sugar", "group:food_blueberries"}, + {"", a.baking_tray, ""} + }, + replacements = {{"group:food_baking_tray", "farming:baking_tray"}} +}) + +-- blueberry muffin + +minetest.register_craft({ + output = "farming:muffin_blueberry 2", + recipe = { + {"group:food_blueberries", "group:food_bread", "group:food_blueberries"} + } +}) + +-- beetroot soup + +minetest.register_craft({ + output = "farming:beetroot_soup", + recipe = { + {"group:food_beetroot", "group:food_beetroot", "group:food_beetroot"}, + {"group:food_beetroot", "group:food_bowl", "group:food_beetroot"} + } +}) + +-- tomato soup + +minetest.register_craft({ + output = "farming:tomato_soup", + recipe = { + {"group:food_tomato"}, + {"group:food_tomato"}, + {"group:food_bowl"} + } +}) + +-- filter sea water into river water + +minetest.register_craft({ + output = a.bucket_river_water, + recipe = { + {"farming:hemp_fibre"}, + {"farming:hemp_fibre"}, + {a.bucket_water} + } +}) + +if farming.mcl then + + minetest.register_craft({ + output = "mcl_potions:river_water", + recipe = { + {"farming:hemp_fibre"}, + {"mcl_potions:water"} + } + }) +end + +-- glass of water + +minetest.register_craft({ + output = "farming:glass_water 4", + recipe = { + {a.drinking_glass, a.drinking_glass}, + {a.drinking_glass, a.drinking_glass}, + {a.bucket_river_water, ""} + }, + replacements = {{a.bucket_river_water, a.bucket_empty}} +}) + +minetest.register_craft({ + output = "farming:glass_water 4", + recipe = { + {a.drinking_glass, a.drinking_glass}, + {a.drinking_glass, a.drinking_glass}, + {a.bucket_water, "farming:hemp_fibre"} + }, + replacements = {{a.bucket_water, a.bucket_empty}} +}) + +if minetest.get_modpath("bucket_wooden") then + + minetest.register_craft({ + output = "farming:glass_water 4", + recipe = { + {a.drinking_glass, a.drinking_glass}, + {a.drinking_glass, a.drinking_glass}, + {"group:water_bucket_wooden", "farming:hemp_fibre"} + }, + replacements = {{"group:water_bucket_wooden", "bucket_wooden:bucket_empty"}} + }) +end + +-- sugar + +if not farming.mcl then + + minetest.register_craft({ + type = "cooking", + cooktime = 3, + output = "farming:sugar 2", + recipe = "default:papyrus" + }) +end + +-- sugar cube + +minetest.register_craft({ + output = "farming:sugar_cube", + recipe = { + {a.sugar, a.sugar, a.sugar}, + {a.sugar, a.sugar, a.sugar}, + {a.sugar, a.sugar, a.sugar} + } +}) + +minetest.register_craft({ + output = a.sugar .. " 9", + recipe = {{"farming:sugar_cube"}} +}) + +-- caramel + +minetest.register_craft({ + type = "cooking", + cooktime = 6, + output = "farming:caramel", + recipe = "group:food_sugar" +}) + +-- salt + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:salt", + recipe = a.bucket_water, + replacements = {{a.bucket_water, a.bucket_empty}} +}) + +-- salt crystal + +minetest.register_craft({ + output = "farming:salt 9", + recipe = { + {"farming:salt_crystal", a.mortar_pestle} + }, + replacements = {{"farming:mortar_pestle", "farming:mortar_pestle"}} +}) + +minetest.register_craft({ + output = "farming:salt_crystal", + recipe = { + {"farming:salt", "farming:salt", "farming:salt"}, + {"farming:salt", "farming:salt", "farming:salt"}, + {"farming:salt", "farming:salt", "farming:salt"} + } +}) + +-- mayonnaise + +minetest.register_craft({ + output = "farming:mayonnaise", + recipe = { + {"group:food_olive_oil", "group:food_lemon"}, + {"group:food_egg", "farming:salt"} + }, + replacements = {{"farming:olive_oil", a.glass_bottle}} +}) + +-- rose water + +minetest.register_craft({ + output = "farming:rose_water", + recipe = { + {a.rose, a.rose, a.rose}, + {a.rose, a.rose, a.rose}, + {"group:food_glass_water", a.pot, a.glass_bottle} + }, + replacements = { + {"group:food_glass_water", a.drinking_glass}, + {"group:food_pot", "farming:pot"} + } +}) + +-- turkish delight + +minetest.register_craft({ + output = "farming:turkish_delight 4", + recipe = { + {"group:food_gelatin", "group:food_sugar", "group:food_gelatin"}, + {"group:food_sugar", "group:food_rose_water", "group:food_sugar"}, + {"group:food_sugar", a.dye_pink, "group:food_sugar"} + }, + replacements = { + {"group:food_cornstarch", a.bowl}, + {"group:food_cornstarch", a.bowl}, + {"group:food_rose_water", a.glass_bottle} + } +}) + +-- garlic bread + +minetest.register_craft({ + output = "farming:garlic_bread", + recipe = { + {"group:food_toast", "group:food_garlic_clove", "group:food_garlic_clove"} + } +}) + +-- donuts + +minetest.register_craft({ + output = "farming:donut 3", + recipe = { + {"", "group:food_wheat", ""}, + {"group:food_wheat", "group:food_sugar", "group:food_wheat"}, + {"", "group:food_wheat", ""} + } +}) + +minetest.register_craft({ + output = "farming:donut_chocolate", + recipe = { + {"group:food_cocoa"}, + {"farming:donut"} + } +}) + +minetest.register_craft({ + output = "farming:donut_apple", + recipe = { + {"group:food_apple"}, + {"farming:donut"} + } +}) + +-- porridge oats + +minetest.register_craft({ + output = "farming:porridge", + recipe = { + {"group:food_oats", "group:food_oats", "group:food_oats"}, + {"group:food_oats", "group:food_bowl", "group:food_milk_glass"} + }, + replacements = { + {"mobs:glass_milk", a.drinking_glass}, + {"farming:soy_milk", a.drinking_glass} + } +}) + +-- jaffa cake + +minetest.register_craft({ + output = "farming:jaffa_cake 3", + recipe = { + {a.baking_tray, "group:food_egg", "group:food_sugar"}, + {a.flour, "group:food_cocoa", "group:food_orange"}, + {"group:food_milk", "", ""} + }, + replacements = { + {"farming:baking_tray", "farming:baking_tray"}, + {"mobs:bucket_milk", a.bucket_empty}, + {"mobs:wooden_bucket_milk", "wooden_bucket:bucket_wood_empty"}, + {"farming:soy_milk", a.drinking_glass} + } +}) + +-- apple pie + +minetest.register_craft({ + output = "farming:apple_pie", + recipe = { + {a.flour, "group:food_sugar", "group:food_apple"}, + {"", a.baking_tray, ""} + }, + replacements = {{"group:food_baking_tray", "farming:baking_tray"}} +}) + +-- cactus juice + +minetest.register_craft({ + output = "farming:cactus_juice", + recipe = { + {a.juicer}, + {a.cactus}, + {a.drinking_glass} + }, + replacements = { + {"group:food_juicer", "farming:juicer"} + } +}) + +-- pasta + +minetest.register_craft({ + output = "farming:pasta", + recipe = { + {a.flour, "group:food_butter", a.mixing_bowl} + }, + replacements = {{"group:food_mixing_bowl", "farming:mixing_bowl"}} +}) + +minetest.register_craft({ + output = "farming:pasta", + recipe = { + {a.flour, "group:food_oil", a.mixing_bowl} + }, + replacements = { + {"group:food_mixing_bowl", "farming:mixing_bowl"}, + {"group:food_oil", a.glass_bottle} + } +}) + +-- mac & cheese + +minetest.register_craft({ + output = "farming:mac_and_cheese", + recipe = { + {"group:food_pasta", "group:food_cheese", "group:food_bowl"} + } +}) + +-- spaghetti + +minetest.register_craft({ + output = "farming:spaghetti", + recipe = { + {"group:food_pasta", "group:food_tomato", a.saucepan}, + {"group:food_garlic_clove", "group:food_garlic_clove", ""} + }, + replacements = {{"group:food_saucepan", "farming:saucepan"}} +}) + +-- korean bibimbap + +minetest.register_craft({ + output = "farming:bibimbap", + recipe = { + {a.skillet, "group:food_bowl", "group:food_egg"}, + {"group:food_rice", "group:food_chicken_raw", "group:food_cabbage"}, + {"group:food_carrot", "group:food_chili_pepper", ""} + }, + replacements = {{"group:food_skillet", "farming:skillet"}} +}) + +minetest.register_craft({ + output = "farming:bibimbap", + type = "shapeless", + recipe = { + a.skillet, "group:food_bowl", "group:food_mushroom", + "group:food_rice", "group:food_cabbage", "group:food_carrot", + "group:food_mushroom", "group:food_chili_pepper" + }, + replacements = {{"group:food_skillet", "farming:skillet"}} +}) + +-- burger + +minetest.register_craft({ + output = "farming:burger", + recipe = { + {a.bread, "group:food_meat", "group:food_cheese"}, + {"group:food_tomato", "group:food_cucumber", "group:food_onion"}, + {"group:food_lettuce", "", ""} + } +}) + +-- salad + +minetest.register_craft({ + output = "farming:salad", + type = "shapeless", + recipe = { + "group:food_bowl", "group:food_tomato", "group:food_cucumber", + "group:food_lettuce", "group:food_oil" + } +}) + +-- triple berry smoothie + +minetest.register_craft({ + output = "farming:smoothie_berry", + type = "shapeless", + recipe = { + "group:food_raspberries", "group:food_blackberries", + "group:food_strawberry", "group:food_banana", + a.drinking_glass + } +}) + +-- patatas a la importancia + +minetest.register_craft({ + output = "farming:spanish_potatoes", + recipe = { + {"group:food_potato", "group:food_parsley", "group:food_potato"}, + {"group:food_egg", a.flour, "group:food_onion"}, + {"farming:garlic_clove", "group:food_bowl", a.skillet} + }, + replacements = {{"group:food_skillet", "farming:skillet"}} +}) + +-- potato omelette + +minetest.register_craft({ + output = "farming:potato_omelet", + recipe = { + {"group:food_egg", "group:food_potato", "group:food_onion"}, + {a.skillet, "group:food_bowl", ""} + }, + replacements = {{"group:food_skillet", "farming:skillet"}} +}) + +-- paella + +minetest.register_craft({ + output = "farming:paella", + recipe = { + {"group:food_rice", a.dye_orange, "farming:pepper_red"}, + {"group:food_peas", "group:food_chicken", "group:food_bowl"}, + {"", a.skillet, ""} + }, + replacements = {{"group:food_skillet", "farming:skillet"}} +}) + +-- vanilla flan + +minetest.register_craft({ + output = "farming:flan", + recipe = { + {"group:food_sugar", "group:food_milk", "farming:caramel"}, + {"group:food_egg", "group:food_egg", "farming:vanilla_extract"} + }, + replacements = { + {"cucina_vegana:soy_milk", a.drinking_glass}, + {"mobs:bucket_milk", "bucket:bucket_empty"}, + {"mobs:wooden_bucket_milk", "wooden_bucket:bucket_wood_empty"}, + {"farming:vanilla_extract", a.glass_bottle} + } +}) + +-- vegan cheese + +minetest.register_craft({ + output = "farming:cheese_vegan", + recipe = { + {"farming:soy_milk", "farming:soy_milk", "farming:soy_milk"}, + {"group:food_salt", "group:food_peppercorn", "farming:bottle_ethanol"}, + {"group:food_gelatin", a.pot, ""} + }, + replacements = { + {"farming:soy_milk", a.drinking_glass .. " 3"}, + {"farming:pot", "farming:pot"}, + {"farming:bottle_ethanol", a.glass_bottle} + } +}) + +minetest.register_craft({ + output = "farming:cheese_vegan", + recipe = { + {"farming:soy_milk", "farming:soy_milk", "farming:soy_milk"}, + {"group:food_salt", "group:food_peppercorn", "group:food_lemon"}, + {"group:food_gelatin", a.pot, ""} + }, + replacements = { + {"farming:soy_milk", a.drinking_glass .. " 3"}, + {"farming:pot", "farming:pot"} + } +}) + +-- onigiri + +minetest.register_craft({ + output = "farming:onigiri", + recipe = { + {"group:food_rice", "group:food_salt", "group:food_rice"}, + {"", "group:food_seaweed", ""} + } +}) + +-- gyoza + +minetest.register_craft({ + output = "farming:gyoza 4", + recipe = { + {"group:food_cabbage", "group:food_garlic_clove", "group:food_onion"}, + {"group:food_meat_raw", "group:food_salt", a.flour}, + {"", a.skillet, ""} + + }, + replacements = { + {"group:food_skillet", "farming:skillet"} + } +}) + +-- mochi + +minetest.register_craft({ + output = "farming:mochi", + recipe = { + {"", a.mortar_pestle, ""}, + {"group:food_rice", "group:food_sugar", "group:food_rice"}, + {"", "group:food_glass_water", ""} + }, + replacements = { + {"group:food_mortar_pestle", "farming:mortar_pestle"}, + {"group:food_glass_water", a.drinking_glass} + } +}) + +-- gingerbread man + +minetest.register_craft({ + output = "farming:gingerbread_man 3", + recipe = { + {"", "group:food_egg", ""}, + {"group:food_wheat", "group:food_ginger", "group:food_wheat"}, + {"group:food_sugar", "", "group:food_sugar"} + } +}) + +-- mint tea + +minetest.register_craft({ + output = "farming:mint_tea", + recipe = { + {"group:food_mint", "group:food_mint", "group:food_mint"}, + {"group:food_glass_water", a.juicer, ""} + }, + replacements = { + {"group:food_juicer", "farming:juicer"} + } +}) + +-- onion soup + +minetest.register_craft({ + output = "farming:onion_soup", + recipe = { + {"group:food_onion", "group:food_onion", "group:food_onion"}, + {"group:food_onion", "group:food_bowl", "group:food_onion"}, + {"", a.pot, ""} + }, + replacements = {{"farming:pot", "farming:pot"}} +}) + +-- pea soup + +minetest.register_craft({ + output = "farming:pea_soup", + recipe = { + {"group:food_peas"}, + {"group:food_peas"}, + {"group:food_bowl"} + } +}) + +-- ground pepper + +minetest.register_craft( { + output = "farming:pepper_ground", + recipe = { + {"group:food_peppercorn"}, + {a.glass_bottle}, + {a.mortar_pestle} + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} +}) + +-- pineapple ring + +minetest.register_craft( { + output = "farming:pineapple_ring 5", + recipe = {{"group:food_pineapple"}}, + replacements = {{"farming:pineapple", "farming:pineapple_top"}} +}) + +-- pineapple juice + +minetest.register_craft({ + output = "farming:pineapple_juice", + recipe = { + {"group:food_pineapple_ring", "group:food_pineapple_ring", + "group:food_pineapple_ring"}, + {"", a.drinking_glass, ""}, + {"", a.juicer, ""} + }, + replacements = { + {"group:food_juicer", "farming:juicer"} + } +}) + +minetest.register_craft({ + output = "farming:pineapple_juice 2", + recipe = { + {a.drinking_glass, "group:food_pineapple", a.drinking_glass}, + {"", a.juicer, ""} + }, + replacements = { + {"group:food_juicer", "farming:juicer"} + } +}) + +-- baked potato + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:baked_potato", + recipe = "group:food_potato" +}) + +-- potato & cucumber salad + +minetest.register_craft({ + output = "farming:potato_salad", + recipe = { + {"group:food_cucumber"}, + {"farming:baked_potato"}, + {"group:food_bowl"} + } +}) + +-- melon slice / block + +minetest.register_craft({ + output = "farming:melon_8", + recipe = { + {"farming:melon_slice", "farming:melon_slice"}, + {"farming:melon_slice", "farming:melon_slice"} + } +}) + +minetest.register_craft({ + output = "farming:melon_slice 4", + recipe = {{"farming:melon_8", a.cutting_board}}, + replacements = {{"farming:cutting_board", "farming:cutting_board"}} +}) + +-- pumpkin slice / block + +minetest.register_craft({ + output = "farming:pumpkin", + recipe = { + {"farming:pumpkin_slice", "farming:pumpkin_slice"}, + {"farming:pumpkin_slice", "farming:pumpkin_slice"} + } +}) + +minetest.register_craft({ + output = "farming:pumpkin_slice 4", + recipe = {{"farming:pumpkin", a.cutting_board}}, + replacements = {{"farming:cutting_board", "farming:cutting_board"}} +}) + +-- pumpkin dough + +minetest.register_craft({ + output = "farming:pumpkin_dough", + recipe = { + {"group:food_pumpkin_slice", "group:food_flour", "group:food_pumpkin_slice"} + } +}) + +-- pumpkin bread + +minetest.register_craft({ + type = "cooking", + output = "farming:pumpkin_bread", + recipe = "farming:pumpkin_dough", + cooktime = 10 +}) + +-- raspberry smoothie + +minetest.register_craft({ + output = "farming:smoothie_raspberry", + recipe = { + {a.snow}, + {"group:food_raspberries"}, + {a.drinking_glass} + } +}) + +-- rhubarb pie + +minetest.register_craft({ + output = "farming:rhubarb_pie", + recipe = { + {a.baking_tray, "group:food_sugar", ""}, + {"group:food_rhubarb", "group:food_rhubarb", "group:food_rhubarb"}, + {"group:food_wheat", "group:food_wheat", "group:food_wheat"} + }, + replacements = {{"group:food_baking_tray", "farming:baking_tray"}} +}) + +-- rice flour + +minetest.register_craft({ + output = "farming:rice_flour", + recipe = { + {"farming:rice", "farming:rice", "farming:rice"}, + {"farming:rice", a.mortar_pestle, ""} + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} +}) + +-- rice bread + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:rice_bread", + recipe = "farming:rice_flour" +}) + +-- soy sauce + +minetest.register_craft( { + output = "farming:soy_sauce", + recipe = { + {"group:food_soy", "group:food_salt", "group:food_soy"}, + {a.juicer, a.bucket_water, a.glass_bottle} + }, + replacements = { + {a.bucket_water, a.bucket_empty}, + {"group:food_juicer", "farming:juicer"} + } +}) + +-- soy milk + +minetest.register_craft( { + output = "farming:soy_milk", + recipe = { + {"group:food_soy", "group:food_soy", "group:food_soy"}, + {"farming:vanilla_extract", "bucket:bucket_water", a.drinking_glass} + }, + replacements = { + {a.bucket_water, a.bucket_empty}, + {"farming:vanilla_extract", a.glass_bottle} + } +}) + +-- tofu + +minetest.register_craft({ + output = "farming:tofu", + recipe = { + {"group:food_soy", "group:food_soy", "group:food_soy"}, + {"group:food_soy", "group:food_soy", a.baking_tray} + }, + replacements = {{"farming:baking_tray", "farming:baking_tray"}} +}) + +-- cooked tofu + +minetest.register_craft({ + type = "cooking", + output = "farming:tofu_cooked", + recipe = "farming:tofu", + cooktime = 5 +}) + +-- toasted sunflower seeds + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:sunflower_seeds_toasted", + recipe = "farming:seed_sunflower" +}) + +-- sunflower oil + +minetest.register_craft( { + output = "farming:sunflower_oil", + recipe = { + {"group:food_sunflower_seeds", "group:food_sunflower_seeds", "group:food_sunflower_seeds"}, + {"group:food_sunflower_seeds", "group:food_sunflower_seeds", "group:food_sunflower_seeds"}, + {"group:food_sunflower_seeds", a.glass_bottle, "group:food_sunflower_seeds"} + } +}) + +-- sunflower seed bread + +minetest.register_craft({ + output = "farming:sunflower_bread", + recipe = { + { + "group:food_sunflower_seeds_toasted", + "group:food_bread", + "group:food_sunflower_seeds_toasted" + } + } +}) + +-- vanilla extract + +minetest.register_craft( { + output = "farming:vanilla_extract", + recipe = { + {"group:food_vanilla", "group:food_vanilla", "group:food_vanilla"}, + {"group:food_vanilla", "farming:bottle_ethanol", "group:food_glass_water"}, + }, + replacements = { + {"group:food_glass_water", a.drinking_glass} + } +}) + +-- jack 'o lantern + +minetest.register_craft({ + output = "farming:jackolantern", + recipe = { + {"default:torch"}, + {"group:food_pumpkin"} + } +}) + +-- wooden scarecrow base + +minetest.register_craft({ + output = "farming:scarecrow_bottom", + recipe = { + {"", "group:stick", ""}, + {"group:stick", "group:stick", "group:stick"}, + {"", "group:stick", ""} + } +}) + +-- beanpole + +minetest.register_craft({ + output = "farming:beanpole", + recipe = { + {"", "", ""}, + {"group:stick", "", "group:stick"}, + {"group:stick", "", "group:stick"} + } +}) + +-- trellis + +minetest.register_craft({ + output = "farming:trellis", + recipe = { + {"group:stick", "group:stick", "group:stick"}, + {"group:stick", "group:stick", "group:stick"}, + {"group:stick", "group:stick", "group:stick"} + } +}) + +-- cotton to wool + +minetest.register_craft({ + output = a.wool, + recipe = { + {"farming:cotton", "farming:cotton"}, + {"farming:cotton", "farming:cotton"} + } +}) + +-- string + +minetest.register_craft({ + output = a.string .. " 2", + recipe = { + {"farming:cotton"}, + {"farming:cotton"} + } +}) + +minetest.register_craft( { + output = "farming:cotton 3", + recipe = { + {"farming:hemp_fibre"}, + {"farming:hemp_fibre"}, + {"farming:hemp_fibre"} + } +}) + +-- wooden bowl + +if not farming.mcl then + + minetest.register_craft({ + output = "farming:bowl 4", + recipe = { + {"group:wood", "", "group:wood"}, + {"", "group:wood", ""} + } + }) +end + +-- saucepan + +minetest.register_craft({ + output = "farming:saucepan", + recipe = { + {a.steel_ingot, "", ""}, + {"", "group:stick", ""} + } +}) + +-- cooking pot + +minetest.register_craft({ + output = "farming:pot", + recipe = { + {"group:stick", a.steel_ingot, a.steel_ingot}, + {"", a.steel_ingot, a.steel_ingot} + } +}) + +-- baking tray + +minetest.register_craft({ + output = "farming:baking_tray", + recipe = { + {a.clay_brick, a.clay_brick, a.clay_brick}, + {a.clay_brick, "", a.clay_brick}, + {a.clay_brick, a.clay_brick, a.clay_brick} + } +}) + +-- skillet + +minetest.register_craft({ + output = "farming:skillet", + recipe = { + {a.steel_ingot, "", ""}, + {"", a.steel_ingot, ""}, + {"", "", "group:stick"} + } +}) + +-- mortar & pestle + +minetest.register_craft({ + output = "farming:mortar_pestle", + recipe = { + {a.stone, "group:stick", a.stone}, + {"", a.stone, ""} + } +}) + +-- cutting board + +minetest.register_craft({ + output = "farming:cutting_board", + recipe = { + {a.steel_ingot, "", ""}, + {"", "group:stick", ""}, + {"", "", "group:wood"} + } +}) + +-- juicer + +minetest.register_craft({ + output = "farming:juicer", + recipe = { + {"", a.stone, ""}, + {a.stone, "", a.stone} + } +}) + +-- glass mixing bowl + +minetest.register_craft({ + output = "farming:mixing_bowl", + recipe = { + {a.glass, "group:stick", a.glass}, + {"", a.glass, ""} + } +}) + +minetest.register_craft( { + output = "vessels:glass_fragments", + recipe = {{"farming:mixing_bowl"}} +}) + +-- hemp oil + +minetest.register_craft( { + output = "farming:hemp_oil", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"", a.glass_bottle, ""} + } +}) + +minetest.register_craft( { + output = "farming:hemp_oil", + recipe = { + {"farming:seed_hemp", "farming:seed_hemp", "farming:seed_hemp"}, + {"farming:seed_hemp", "farming:seed_hemp", "farming:seed_hemp"}, + {"farming:seed_hemp", a.glass_bottle, "farming:seed_hemp"} + } +}) + +-- hemp fibre + +minetest.register_craft( { + output = "farming:hemp_fibre 8", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "group:water_bucket", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"} + }, + replacements = {{"group:water_bucket", a.bucket_empty}} +}) + +if minetest.get_modpath("bucket_wooden") then + + minetest.register_craft( { + output = "farming:hemp_fibre 8", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "group:water_bucket_wooden", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"} + }, + replacements = {{"group:water_bucket_wooden", "bucket_wooden:bucket_empty"}} + }) +end + +-- hemp block + +minetest.register_craft( { + output = "farming:hemp_block", + recipe = { + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"} + } +}) + +-- hemp rope + +minetest.register_craft( { + output = "farming:hemp_rope 6", + recipe = { + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + {"farming:cotton", "farming:cotton", "farming:cotton"}, + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"} + } +}) + +-- paper + +minetest.register_craft( { + output = a.paper .. " 3", + recipe = { + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"} + } +}) + +-- straw + +minetest.register_craft({ + output = "farming:straw 3", + recipe = { + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", "farming:wheat", "farming:wheat"} + } +}) + +minetest.register_craft({ + output = "farming:wheat 3", + recipe = {{"farming:straw"}} +}) + +-- dye recipes + +minetest.register_craft({output = a.dye_green, recipe = {{"farming:beans"}}}) +minetest.register_craft({output = a.dye_red, recipe = {{"group:food_beetroot"}}}) +minetest.register_craft({output = a.dye_blue, recipe = {{"farming:blueberries"}}}) +minetest.register_craft({output = a.dye_red, recipe = {{"farming:chili_pepper"}}}) +minetest.register_craft({output = a.dye_brown, recipe = {{"farming:cocoa_beans"}}}) +minetest.register_craft({output = a.dye_violet, recipe = {{"farming:grapes"}}}) +minetest.register_craft({output = a.dye_yellow, recipe = {{"group:food_onion"}}}) + +-- fuel items + +minetest.register_craft({type = "fuel", recipe = "farming:straw", burntime = 3}) +minetest.register_craft({type = "fuel", recipe = "farming:wheat", burntime = 1}) +minetest.register_craft({type = "fuel", recipe = "farming:bowl",burntime = 10}) +minetest.register_craft({type = "fuel", recipe = "farming:string", burntime = 1}) +minetest.register_craft({type = "fuel", recipe = "farming:cotton", burntime = 1}) +minetest.register_craft({type = "fuel", recipe = "farming:barley", burntime = 1}) +minetest.register_craft({type = "fuel", recipe = "farming:beanpole", burntime = 10}) +minetest.register_craft({type = "fuel", recipe = "farming:trellis", burntime = 15}) +minetest.register_craft({type = "fuel", recipe = "farming:rice", burntime = 1}) +minetest.register_craft({type = "fuel", recipe = "farming:rice_bread", burntime = 1}) +minetest.register_craft({type = "fuel", recipe = "farming:bread_multigrain", burntime = 1}) +minetest.register_craft({type = "fuel", recipe = "farming:rye", burntime = 1}) +minetest.register_craft({type = "fuel", recipe = "farming:oat", burntime = 1}) +minetest.register_craft({type = "fuel", recipe = "farming:hemp_oil", + burntime = 20, replacements = {{"farming:hemp_oil", a.glass_bottle}}}) +minetest.register_craft({type = "fuel", recipe = "farming:bottle_ethanol", + burntime = 80, replacements = {{"farming:bottle_ethanol", a.glass_bottle}}}) +minetest.register_craft({type = "fuel", recipe = "farming:sunflower_oil", + burntime = 30, replacements = {{"farming:sunflower_oil", a.glass_bottle}}}) +minetest.register_craft({type = "fuel", recipe = "farming:vanilla_extract", + burntime = 25, replacements = {{"farming:vanilla_extract", a.glass_bottle}}}) diff --git a/item_stairs.lua b/item_stairs.lua new file mode 100644 index 0000000..6bfe624 --- /dev/null +++ b/item_stairs.lua @@ -0,0 +1,35 @@ + +-- check and register stairs + +if minetest.global_exists("stairs") then + + if stairs.mod and stairs.mod == "redo" then + + stairs.register_all("straw", "farming:straw", + {snappy = 3, flammable = 4}, + {"farming_straw.png"}, + "Straw", + farming.node_sound_leaves_defaults()) + + stairs.register_all("hemp_block", "farming:hemp_block", + {snappy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + {"farming_hemp_block.png"}, + "Hemp Block", + farming.node_sound_leaves_defaults()) + else + + stairs.register_stair_and_slab("straw", "farming:straw", + {snappy = 3, flammable = 4}, + {"farming_straw.png"}, + "Straw Stair", + "Straw Slab", + farming.node_sound_leaves_defaults()) + + stairs.register_stair_and_slab("hemp_block", "farming:hemp_block", + {snappy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + {"farming_hemp_block.png"}, + "Hemp Block Stair", + "Hemp Block Slab", + farming.node_sound_leaves_defaults()) + end +end diff --git a/items_food.lua b/items_food.lua new file mode 100644 index 0000000..929edfa --- /dev/null +++ b/items_food.lua @@ -0,0 +1,1014 @@ + +local S = minetest.get_translator("farming") +local a = farming.recipe_items + +-- Flour +minetest.register_craftitem("farming:flour", { + description = S("Flour"), + inventory_image = "farming_flour.png", + groups = {food_flour = 1, flammable = 1} +}) + +-- Bread +minetest.register_craftitem("farming:bread", { + description = S("Bread"), + inventory_image = "farming_bread.png", + on_use = minetest.item_eat(5), + groups = {food_bread = 1} +}) + +farming.add_eatable("farming:bread", 5) + +-- Garlic bulb + +minetest.register_craftitem("farming:garlic", { + description = S("Garlic"), + inventory_image = "crops_garlic.png", + on_use = minetest.item_eat(1), + groups = {food_garlic = 1, compostability = 55} +}) + +farming.add_eatable("farming:garlic", 1) + +-- Garlic braid + +minetest.register_node("farming:garlic_braid", { + description = S("Garlic Braid"), + inventory_image = "crops_garlic_braid.png", + wield_image = "crops_garlic_braid.png", + drawtype = "nodebox", + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "facedir", + tiles = { + "crops_garlic_braid_top.png", + "crops_garlic_braid.png", + "crops_garlic_braid_side.png^[transformFx", + "crops_garlic_braid_side.png", + "crops_garlic_braid.png", + "crops_garlic_braid.png" + }, + groups = {vessel = 1, dig_immediate = 3, flammable = 3, compostability = 65}, + is_ground_content = false, + sounds = farming.node_sound_leaves_defaults(), + node_box = { + type = "fixed", fixed = {{-0.1875, -0.5, 0.5, 0.1875, 0.5, 0.125}} + } +}) + +-- Corn on the cob (texture by TenPlus1) + +minetest.register_craftitem("farming:corn_cob", { + description = S("Corn on the Cob"), + inventory_image = "farming_corn_cob.png", + groups = {compostability = 65, food_corn_cooked = 1}, + on_use = minetest.item_eat(5) +}) + +farming.add_eatable("farming:corn_cob", 5) + +-- Popcorn + +minetest.register_craftitem("farming:popcorn", { + description = S("Popcorn"), + inventory_image = "farming_popcorn.png", + groups = {compostability = 55, food_popcorn = 1}, + on_use = minetest.item_eat(4) +}) + +farming.add_eatable("farming:popcorn", 4) + +-- Cornstarch + +minetest.register_craftitem("farming:cornstarch", { + description = S("Cornstarch"), + inventory_image = "farming_cornstarch.png", + groups = {food_cornstarch = 1, food_gelatin = 1, flammable = 2, compostability = 65} +}) + +-- Cup of coffee + +minetest.register_node("farming:coffee_cup", { + description = S("Cup of Coffee"), + drawtype = "torchlike", + tiles = {"farming_coffee_cup.png"}, + inventory_image = "farming_coffee_cup.png", + wield_image = "farming_coffee_cup.png", + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1}, + is_ground_content = false, + on_use = minetest.item_eat(2, "vessels:drinking_glass"), + sounds = farming.node_sound_glass_defaults() +}) + +farming.add_eatable("farming:coffee_cup", 2) + +minetest.register_alias("farming:coffee_cup_hot", "farming:coffee_cup") +minetest.register_alias("farming:drinking_cup", "vessels:drinking_glass") + +-- Cocoa beans + +minetest.register_craftitem("farming:cocoa_beans", { + description = S("Cocoa Beans"), + inventory_image = "farming_cocoa_beans.png", + groups = {compostability = 65, food_cocoa = 1, flammable = 2} +}) + +-- Chocolate cookie + +minetest.register_craftitem("farming:cookie", { + description = S("Cookie"), + inventory_image = "farming_cookie.png", + on_use = minetest.item_eat(2) +}) + +farming.add_eatable("farming:cookie", 2) + +-- Bar of of dark chocolate (thx to Ice Pandora for her deviantart.com chocolate tutorial) +minetest.register_craftitem("farming:chocolate_dark", { + description = S("Bar of Dark Chocolate"), + inventory_image = "farming_chocolate_dark.png", + on_use = minetest.item_eat(3) +}) + +farming.add_eatable("farming:chocolate_dark", 3) + +-- Chocolate block (not edible) +minetest.register_node("farming:chocolate_block", { + description = S("Chocolate Block"), + tiles = {"farming_chocolate_block.png"}, + is_ground_content = false, + groups = {cracky = 2, oddly_breakable_by_hand = 2}, + sounds = farming.node_sound_stone_defaults() +}) + +-- Bowl of chili + +minetest.register_craftitem("farming:chili_bowl", { + description = S("Bowl of Chili"), + inventory_image = "farming_chili_bowl.png", + on_use = minetest.item_eat(8, a.bowl), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:chili_bowl", 8) + +-- Chili powder + +minetest.register_craftitem("farming:chili_powder", { + description = S("Chili Powder"), + on_use = minetest.item_eat(-1), + inventory_image = "farming_chili_powder.png", + groups = {compostability = 45} +}) + +-- Carrot juice + +minetest.register_craftitem("farming:carrot_juice", { + description = S("Carrot Juice"), + inventory_image = "farming_carrot_juice.png", + on_use = minetest.item_eat(4, "vessels:drinking_glass"), + groups = {vessel = 1, drink = 1} +}) + +farming.add_eatable("farming:carrot_juice", 4) + +-- Golden carrot + +minetest.register_craftitem("farming:carrot_gold", { + description = S("Golden Carrot"), + inventory_image = "farming_carrot_gold.png", + on_use = minetest.item_eat(10) +}) + +farming.add_eatable("farming:carrot_gold", 10) + +-- Blueberry Pie + +minetest.register_craftitem("farming:blueberry_pie", { + description = S("Blueberry Pie"), + inventory_image = "farming_blueberry_pie.png", + on_use = minetest.item_eat(6), + groups = {compostability = 75} +}) + +farming.add_eatable("farming:blueberry_pie", 6) + +-- Blueberry muffin (thanks to sosogirl123 @ deviantart.com for muffin image) + +minetest.register_craftitem("farming:muffin_blueberry", { + description = S("Blueberry Muffin"), + inventory_image = "farming_blueberry_muffin.png", + on_use = minetest.item_eat(2), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:muffin_blueberry", 2) + +-- beetroot soup + +minetest.register_craftitem("farming:beetroot_soup", { + description = S("Beetroot Soup"), + inventory_image = "farming_beetroot_soup.png", + on_use = minetest.item_eat(6, "farming:bowl") +}) + +farming.add_eatable("farming:beetroot_soup", 6) + +-- Tomato soup + +minetest.register_craftitem("farming:tomato_soup", { + description = S("Tomato Soup"), + inventory_image = "farming_tomato_soup.png", + groups = {compostability = 65}, + on_use = minetest.item_eat(8, "farming:bowl") +}) + +farming.add_eatable("farming:tomato_soup", 8) + +-- sliced bread + +minetest.register_craftitem("farming:bread_slice", { + description = S("Sliced Bread"), + inventory_image = "farming_bread_slice.png", + on_use = minetest.item_eat(1), + groups = {food_bread_slice = 1, compostability = 65} +}) + +farming.add_eatable("farming:bread_slice", 1) + +-- toast + +minetest.register_craftitem("farming:toast", { + description = S("Toast"), + inventory_image = "farming_toast.png", + on_use = minetest.item_eat(1), + groups = {food_toast = 1, compostability = 65} +}) + +farming.add_eatable("farming:toast", 1) + +-- toast sandwich + +minetest.register_craftitem("farming:toast_sandwich", { + description = S("Toast Sandwich"), + inventory_image = "farming_toast_sandwich.png", + on_use = minetest.item_eat(4), + groups = {compostability = 85} +}) + +farming.add_eatable("farming:toast_sandwich", 4) + +-- glass of water + +minetest.register_craftitem("farming:glass_water", { + description = S("Glass of Water"), + inventory_image = "farming_water_glass.png", + groups = {food_glass_water = 1, flammable = 3, vessel = 1} +}) + +-- Sugar + +if not farming.mcl then + + minetest.register_craftitem("farming:sugar", { + description = S("Sugar"), + inventory_image = "farming_sugar.png", + groups = {food_sugar = 1, flammable = 3} + }) +end + +-- Sugar cube + +minetest.register_node("farming:sugar_cube", { + description = S("Sugar Cube"), + tiles = {"farming_sugar_cube.png"}, + groups = {shovely = 1, handy = 1, crumbly = 2}, + is_ground_content = false, + floodable = true, + sounds = farming.node_sound_gravel_defaults(), + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 +}) + +-- Sugar caramel + +minetest.register_craftitem("farming:caramel", { + description = S("Caramel"), + inventory_image = "farming_caramel.png", + groups = {compostability = 40} +}) + +-- Salt + +minetest.register_node("farming:salt", { + description = S("Salt"), + inventory_image = "farming_salt.png", + wield_image = "farming_salt.png", + drawtype = "plantlike", + visual_scale = 0.8, + paramtype = "light", + tiles = {"farming_salt.png"}, + groups = {food_salt = 1, vessel = 1, dig_immediate = 3, attached_node = 1}, + is_ground_content = false, + sounds = farming.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + -- special function to make salt crystals form inside water + dropped_step = function(self, pos, dtime) + + self.ctimer = (self.ctimer or 0) + dtime + if self.ctimer < 15.0 then return end + self.ctimer = 0 + + local needed + + if self.node_inside and self.node_inside.name == a.water_source then + needed = 8 + + elseif self.node_inside and self.node_inside.name == a.river_water_source then + needed = 9 + end + + if not needed then return end + + local objs = core.get_objects_inside_radius(pos, 0.5) + + if not objs or #objs ~= 1 then return end + + local salt, ent = nil, nil + + for k, obj in pairs(objs) do + + ent = obj:get_luaentity() + + if ent and ent.name == "__builtin:item" + and ent.itemstring == "farming:salt " .. needed then + + obj:remove() + + core.add_item(pos, "farming:salt_crystal") + + return false -- return with no further action + end + end + end +}) + +-- Salt Crystal + +minetest.register_node("farming:salt_crystal", { + description = S("Salt crystal"), + inventory_image = "farming_salt_crystal.png", + wield_image = "farming_salt_crystal.png", + drawtype = "plantlike", + visual_scale = 0.8, + paramtype = "light", + light_source = 1, + tiles = {"farming_salt_crystal.png"}, + groups = {dig_immediate = 3, attached_node = 1}, + is_ground_content = false, + sounds = farming.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 +}) + +-- Mayonnaise + +minetest.register_node("farming:mayonnaise", { + description = S("Mayonnaise"), + drawtype = "plantlike", + tiles = {"farming_mayo.png"}, + inventory_image = "farming_mayo.png", + wield_image = "farming_mayo.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + on_use = minetest.item_eat(3), + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.45, 0.25} + }, + groups = { + compostability = 65, food_mayonnaise = 1, vessel = 1, dig_immediate = 3, + attached_node = 1 + }, + sounds = farming.node_sound_glass_defaults() +}) + +farming.add_eatable("farming:mayonnaise", 3) + +-- Rose Water + +minetest.register_node("farming:rose_water", { + description = S("Rose Water"), + inventory_image = "farming_rose_water.png", + wield_image = "farming_rose_water.png", + drawtype = "plantlike", + visual_scale = 0.8, + paramtype = "light", + tiles = {"farming_rose_water.png"}, + groups = { + food_rose_water = 1, vessel = 1, dig_immediate = 3, attached_node = 1 + }, + is_ground_content = false, + sounds = farming.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + } +}) + +-- Turkish Delight + +minetest.register_craftitem("farming:turkish_delight", { + description = S("Turkish Delight"), + inventory_image = "farming_turkish_delight.png", + groups = {compostability = 85}, + on_use = minetest.item_eat(2) +}) + +farming.add_eatable("farming:turkish_delight", 2) + +-- Garlic Bread + +minetest.register_craftitem("farming:garlic_bread", { + description = S("Garlic Bread"), + inventory_image = "farming_garlic_bread.png", + groups = {compostability = 65}, + on_use = minetest.item_eat(2) +}) + +farming.add_eatable("farming:garlic_bread", 2) + +-- Donuts (thanks to Bockwurst for making the donut images) + +minetest.register_craftitem("farming:donut", { + description = S("Donut"), + inventory_image = "farming_donut.png", + on_use = minetest.item_eat(4), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:donut", 4) + +minetest.register_craftitem("farming:donut_chocolate", { + description = S("Chocolate Donut"), + inventory_image = "farming_donut_chocolate.png", + on_use = minetest.item_eat(6), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:donut_chocolate", 6) + +minetest.register_craftitem("farming:donut_apple", { + description = S("Apple Donut"), + inventory_image = "farming_donut_apple.png", + on_use = minetest.item_eat(6), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:donut_apple", 6) + +-- Porridge Oats + +minetest.register_craftitem("farming:porridge", { + description = S("Porridge"), + inventory_image = "farming_porridge.png", + on_use = minetest.item_eat(6, a.bowl), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:porridge", 6) + +-- Jaffa Cake + +minetest.register_craftitem("farming:jaffa_cake", { + description = S("Jaffa Cake"), + inventory_image = "farming_jaffa_cake.png", + on_use = minetest.item_eat(6), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:jaffa_cake", 6) + +-- Apple Pie + +minetest.register_craftitem("farming:apple_pie", { + description = S("Apple Pie"), + inventory_image = "farming_apple_pie.png", + on_use = minetest.item_eat(6), + groups = {compostability = 75} +}) + +farming.add_eatable("farming:apple_pie", 6) + +-- Cactus Juice + +minetest.register_craftitem("farming:cactus_juice", { + description = S("Cactus Juice"), + inventory_image = "farming_cactus_juice.png", + groups = {vessel = 1, drink = 1, compostability = 55}, + + on_use = function(itemstack, user, pointed_thing) + + if user then + + local num = math.random(5) == 1 and -1 or 2 + + return minetest.do_item_eat(num, "vessels:drinking_glass", + itemstack, user, pointed_thing) + end + end +}) + +farming.add_eatable("farming:cactus_juice", 1) + +-- Pasta + +minetest.register_craftitem("farming:pasta", { + description = S("Pasta"), + inventory_image = "farming_pasta.png", + groups = {compostability = 65, food_pasta = 1} +}) + +-- Mac & Cheese + +minetest.register_craftitem("farming:mac_and_cheese", { + description = S("Mac & Cheese"), + inventory_image = "farming_mac_and_cheese.png", + on_use = minetest.item_eat(6, a.bowl), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:mac_and_cheese", 6) + +-- Spaghetti + +minetest.register_craftitem("farming:spaghetti", { + description = S("Spaghetti"), + inventory_image = "farming_spaghetti.png", + on_use = minetest.item_eat(8), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:spaghetti", 8) + +-- Korean Bibimbap + +minetest.register_craftitem("farming:bibimbap", { + description = S("Bibimbap"), + inventory_image = "farming_bibimbap.png", + on_use = minetest.item_eat(8, a.bowl), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:bibimbap", 8) + +-- Burger + +minetest.register_craftitem("farming:burger", { + description = S("Burger"), + inventory_image = "farming_burger.png", + on_use = minetest.item_eat(16), + groups = {compostability = 95} +}) + +farming.add_eatable("farming:burger", 16) + +-- Salad + +minetest.register_craftitem("farming:salad", { + description = S("Salad"), + inventory_image = "farming_salad.png", + on_use = minetest.item_eat(8, a.bowl), + groups = {compostability = 45} +}) + +farming.add_eatable("farming:salad", 8) + +-- Triple Berry Smoothie + +minetest.register_craftitem("farming:smoothie_berry", { + description = S("Triple Berry Smoothie"), + inventory_image = "farming_berry_smoothie.png", + on_use = minetest.item_eat(6, "vessels:drinking_glass"), + groups = {vessel = 1, drink = 1, compostability = 65} +}) + +farming.add_eatable("farming:smoothie_berry", 6) + +-- Patatas a la importancia + +minetest.register_craftitem("farming:spanish_potatoes", { + description = S("Spanish Potatoes"), + inventory_image = "farming_spanish_potatoes.png", + on_use = minetest.item_eat(8, a.bowl), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:spanish_potatoes", 8) + +-- Potato omelette + +minetest.register_craftitem("farming:potato_omelet", { + description = S("Potato omelette"), + inventory_image = "farming_potato_omelet.png", + on_use = minetest.item_eat(6, a.bowl), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:potato_omelet", 6) + +-- Paella + +minetest.register_craftitem("farming:paella", { + description = S("Paella"), + inventory_image = "farming_paella.png", + on_use = minetest.item_eat(8, a.bowl), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:paella", 8) + +-- Vanilla Flan + +minetest.register_craftitem("farming:flan", { + description = S("Vanilla Flan"), + inventory_image = "farming_vanilla_flan.png", + on_use = minetest.item_eat(6), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:flan", 6) + +-- Vegan Cheese + +minetest.register_craftitem("farming:cheese_vegan", { + description = S("Vegan Cheese"), + inventory_image = "farming_cheese_vegan.png", + on_use = minetest.item_eat(2), + groups = {compostability = 65, food_cheese = 1} +}) + +farming.add_eatable("farming:cheese_vegan", 2) + +-- Onigiri + +minetest.register_craftitem("farming:onigiri", { + description = S("Onigiri"), + inventory_image = "farming_onigiri.png", + on_use = minetest.item_eat(2), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:onigiri", 2) + +-- Gyoza + +minetest.register_craftitem("farming:gyoza", { + description = S("Gyoza"), + inventory_image = "farming_gyoza.png", + on_use = minetest.item_eat(4), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:gyoza", 4) + +-- Mochi + +minetest.register_craftitem("farming:mochi", { + description = S("Mochi"), + inventory_image = "farming_mochi.png", + on_use = minetest.item_eat(3), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:mochi", 3) + +-- Gingerbread Man + +minetest.register_craftitem("farming:gingerbread_man", { + description = S("Gingerbread Man"), + inventory_image = "farming_gingerbread_man.png", + on_use = minetest.item_eat(2), + groups = {compostability = 85} +}) + +farming.add_eatable("farming:gingerbread_man", 2) + +-- Mint tea +minetest.register_craftitem("farming:mint_tea", { + description = S("Mint Tea"), + inventory_image = "farming_mint_tea.png", + on_use = minetest.item_eat(2, a.drinking_glass) +}) + +farming.add_eatable("farming:mint_tea", 2) + +-- Onion soup +minetest.register_craftitem("farming:onion_soup", { + description = S("Onion Soup"), + inventory_image = "farming_onion_soup.png", + groups = {compostability = 65}, + on_use = minetest.item_eat(6, a.bowl) +}) + +farming.add_eatable("farming:onion_soup", 6) + +-- Pea soup + +minetest.register_craftitem("farming:pea_soup", { + description = S("Pea Soup"), + inventory_image = "farming_pea_soup.png", + groups = {compostability = 65}, + on_use = minetest.item_eat(4, a.bowl) +}) + +farming.add_eatable("farming:pea_soup", 4) + +-- Ground pepper + +minetest.register_node("farming:pepper_ground", { + description = S("Ground Pepper"), + inventory_image = "crops_pepper_ground.png", + wield_image = "crops_pepper_ground.png", + drawtype = "plantlike", + visual_scale = 0.8, + paramtype = "light", + tiles = {"crops_pepper_ground.png"}, + groups = { + vessel = 1, food_pepper_ground = 1, + dig_immediate = 3, attached_node = 1, compostability = 30 + }, + is_ground_content = false, + sounds = farming.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + } +}) + +-- pineapple ring + +minetest.register_craftitem("farming:pineapple_ring", { + description = S("Pineapple Ring"), + inventory_image = "farming_pineapple_ring.png", + groups = {food_pineapple_ring = 1, compostability = 45}, + on_use = minetest.item_eat(1) +}) + +farming.add_eatable("farming:pineapple_ring", 1) + +-- Pineapple juice + +minetest.register_craftitem("farming:pineapple_juice", { + description = S("Pineapple Juice"), + inventory_image = "farming_pineapple_juice.png", + on_use = minetest.item_eat(4, "vessels:drinking_glass"), + groups = {vessel = 1, drink = 1, compostability = 35} +}) + +farming.add_eatable("farming:pineapple_juice", 4) + +-- Baked potato + +minetest.register_craftitem("farming:baked_potato", { + description = S("Baked Potato"), + inventory_image = "farming_baked_potato.png", + on_use = minetest.item_eat(6) +}) + +farming.add_eatable("farming:baked_potato", 6) + +-- Potato & cucumber Salad + +minetest.register_craftitem("farming:potato_salad", { + description = S("Cucumber and Potato Salad"), + inventory_image = "farming_potato_salad.png", + on_use = minetest.item_eat(10, "farming:bowl") +}) + +farming.add_eatable("farming:potato_salad", 10) + +-- Pumpkin dough + +minetest.register_craftitem("farming:pumpkin_dough", { + description = S("Pumpkin Dough"), + inventory_image = "farming_pumpkin_dough.png" +}) + +-- Pumpkin bread + +minetest.register_craftitem("farming:pumpkin_bread", { + description = S("Pumpkin Bread"), + inventory_image = "farming_pumpkin_bread.png", + on_use = minetest.item_eat(8), + groups = {food_bread = 1} +}) + +farming.add_eatable("farming:pumpkin_bread", 8) + +-- Raspberry smoothie + +minetest.register_craftitem("farming:smoothie_raspberry", { + description = S("Raspberry Smoothie"), + inventory_image = "farming_raspberry_smoothie.png", + on_use = minetest.item_eat(2, "vessels:drinking_glass"), + groups = {vessel = 1, drink = 1, compostability = 65} +}) + +farming.add_eatable("farming:smoothie_raspberry", 2) + +-- Rhubarb pie + +minetest.register_craftitem("farming:rhubarb_pie", { + description = S("Rhubarb Pie"), + inventory_image = "farming_rhubarb_pie.png", + on_use = minetest.item_eat(6), + groups = {compostability = 65} +}) + +farming.add_eatable("farming:rhubarb_pie", 6) + +-- Rice flour + +minetest.register_craftitem("farming:rice_flour", { + description = S("Rice Flour"), + inventory_image = "farming_rice_flour.png", + groups = {food_rice_flour = 1, flammable = 1, compostability = 65} +}) + +-- Rice bread + +minetest.register_craftitem("farming:rice_bread", { + description = S("Rice Bread"), + inventory_image = "farming_rice_bread.png", + on_use = minetest.item_eat(5), + groups = {food_rice_bread = 1, compostability = 65} +}) + +farming.add_eatable("farming:rice_bread", 5) + +-- Multigrain flour + +minetest.register_craftitem("farming:flour_multigrain", { + description = S("Multigrain Flour"), + inventory_image = "farming_flour_multigrain.png", + groups = {food_flour = 1, flammable = 1}, +}) + + +-- Multigrain bread + +minetest.register_craftitem("farming:bread_multigrain", { + description = S("Multigrain Bread"), + inventory_image = "farming_bread_multigrain.png", + on_use = minetest.item_eat(7), + groups = {food_bread = 1, compostability = 65} +}) + +farming.add_eatable("farming:bread_multigrain", 7) + +-- Soy sauce + +minetest.register_node("farming:soy_sauce", { + description = S("Soy Sauce"), + drawtype = "plantlike", + tiles = {"farming_soy_sauce.png"}, + inventory_image = "farming_soy_sauce.png", + wield_image = "farming_soy_sauce.png", + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + groups = { + vessel = 1, food_soy_sauce = 1, dig_immediate = 3, attached_node = 1, + compostability = 65 + }, + is_ground_content = false, + sounds = farming.node_sound_glass_defaults() +}) + +-- Soy milk + +minetest.register_node("farming:soy_milk", { + description = S("Soy Milk"), + drawtype = "plantlike", + tiles = {"farming_soy_milk_glass.png"}, + inventory_image = "farming_soy_milk_glass.png", + wield_image = "farming_soy_milk_glass.png", + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + on_use = minetest.item_eat(2, "vessels:drinking_glass"), + groups = { + vessel = 1, food_milk_glass = 1, dig_immediate = 3, + attached_node = 1, drink = 1, compostability = 65 + }, + is_ground_content = false, + sounds = farming.node_sound_glass_defaults() +}) + +farming.add_eatable("farming:soy_milk", 2) + +-- Tofu + +minetest.register_craftitem("farming:tofu", { + description = S("Tofu"), + inventory_image = "farming_tofu.png", + groups = { + food_tofu = 1, food_meat_raw = 1, compostability = 65, + }, + on_use = minetest.item_eat(3) +}) + +farming.add_eatable("farming:tofu", 3) + +-- Cooked tofu + +minetest.register_craftitem("farming:tofu_cooked", { + description = S("Cooked Tofu"), + inventory_image = "farming_tofu_cooked.png", + groups = {food_meat = 1, compostability = 65}, + on_use = minetest.item_eat(6) +}) + +farming.add_eatable("farming:tofu_cooked", 6) + +-- Toasted sunflower seeds + +minetest.register_craftitem("farming:sunflower_seeds_toasted", { + description = S("Toasted Sunflower Seeds"), + inventory_image = "farming_sunflower_seeds_toasted.png", + groups = {food_sunflower_seeds_toasted = 1, compostability = 65}, + on_use = minetest.item_eat(1) +}) + +farming.add_eatable("farming:sunflower_seeds_toasted", 1) + +-- Sunflower oil + +minetest.register_node("farming:sunflower_oil", { + description = S("Bottle of Sunflower Oil"), + drawtype = "plantlike", + tiles = {"farming_sunflower_oil.png"}, + inventory_image = "farming_sunflower_oil.png", + wield_image = "farming_sunflower_oil.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = { + food_oil = 1, vessel = 1, dig_immediate = 3, attached_node = 1, + flammable = 2, compostability = 65 + }, + sounds = farming.node_sound_glass_defaults() +}) + +-- Sunflower seed bread + +minetest.register_craftitem("farming:sunflower_bread", { + description = S("Sunflower Seed Bread"), + inventory_image = "farming_sunflower_bread.png", + on_use = minetest.item_eat(8), + groups = {food_bread = 1} +}) + +farming.add_eatable("farming:sunflower_bread", 8) + +-- Vanilla extract + +minetest.register_node("farming:vanilla_extract", { + description = S("Vanilla Extract"), + drawtype = "plantlike", + tiles = {"farming_vanilla_extract.png"}, + inventory_image = "farming_vanilla_extract.png", + wield_image = "farming_vanilla_extract.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = farming.node_sound_glass_defaults(), +}) diff --git a/items.lua b/items_list.lua similarity index 93% rename from items.lua rename to items_list.lua index b8c1c14..078c440 100644 --- a/items.lua +++ b/items_list.lua @@ -1,21 +1,24 @@ --- add group function +-- add group helper + local function add_groups(item, groups) local def = minetest.registered_items[item] - if not def then return end + if def then - local grp = def.groups + local grps = table.copy(def.groups) or {} - for k, v in pairs(groups) do - grp[k] = v + for k, v in pairs(groups) do + grps[k] = v + end + + minetest.override_item(item, {groups = grps}) end - - minetest.override_item(item, {groups = grp}) end -- default recipe items + farming.recipe_items = { -- if utensils are disabled then use blank item @@ -62,7 +65,8 @@ farming.recipe_items = { add_groups("default:apple", {food_apple = 1}) --- change recipe items to mineclone variations +-- if mineclone found then change recipe items + if farming.mcl then local a = farming.recipe_items @@ -97,6 +101,8 @@ if farming.mcl then a.stone = "mcl_core:stone" a.glass = "mcl_core:glass" + -- add missing groups for recipes to work properly + add_groups("mcl_core:sugar", {food_sugar = 1}) add_groups("mcl_throwing:egg", {food_egg = 1}) add_groups("mcl_farming:wheat_item", {food_wheat = 1}) @@ -114,8 +120,6 @@ if farming.mcl then add_groups("mcl_mobitems:milk_bucket", {food_milk = 1}) add_groups("mcl_ocean:dried_kelp", {food_seaweed = 1}) add_groups("mcl_potions:river_water", {food_glass_water = 1}) - - -- add missing food groups to current items so recipes work add_groups("mcl_dye:yellow", {food_lemon = 1, food_banana = 1}) add_groups("mcl_dye:orange", {food_orange = 1}) add_groups("mcl_flowers:sunflower", {food_olive_oil = 1, food_butter = 1}) diff --git a/items_non_food.lua b/items_non_food.lua new file mode 100644 index 0000000..25d176c --- /dev/null +++ b/items_non_food.lua @@ -0,0 +1,269 @@ + +local S = minetest.get_translator("farming") + +-- wooden bowl + +minetest.register_craftitem("farming:bowl", { + description = S("Wooden Bowl"), + inventory_image = "farming_bowl.png", + groups = {food_bowl = 1, flammable = 2} +}) + +-- saucepan + +minetest.register_craftitem("farming:saucepan", { + description = S("Saucepan"), + inventory_image = "farming_saucepan.png", + groups = {food_saucepan = 1, flammable = 2} +}) + +-- cooking pot + +minetest.register_craftitem("farming:pot", { + description = S("Cooking Pot"), + inventory_image = "farming_pot.png", + groups = {food_pot = 1, flammable = 2} +}) + +-- baking tray + +minetest.register_craftitem("farming:baking_tray", { + description = S("Baking Tray"), + inventory_image = "farming_baking_tray.png", + groups = {food_baking_tray = 1, flammable = 2} +}) + +-- skillet + +minetest.register_craftitem("farming:skillet", { + description = S("Skillet"), + inventory_image = "farming_skillet.png", + groups = {food_skillet = 1, flammable = 2} +}) + +-- mortar & pestle + +minetest.register_craftitem("farming:mortar_pestle", { + description = S("Mortar and Pestle"), + inventory_image = "farming_mortar_pestle.png", + groups = {food_mortar_pestle = 1, flammable = 2} +}) + +-- cutting board + +minetest.register_craftitem("farming:cutting_board", { + description = S("Cutting Board"), + inventory_image = "farming_cutting_board.png", + groups = {food_cutting_board = 1, flammable = 2} +}) + +-- juicer + +minetest.register_craftitem("farming:juicer", { + description = S("Juicer"), + inventory_image = "farming_juicer.png", + groups = {food_juicer = 1, flammable = 2} +}) + +-- glass mixing bowl + +minetest.register_craftitem("farming:mixing_bowl", { + description = S("Glass Mixing Bowl"), + inventory_image = "farming_mixing_bowl.png", + groups = {food_mixing_bowl = 1, flammable = 2} +}) + +-- Ethanol (thanks to JKMurray for this idea) + +minetest.register_node("farming:bottle_ethanol", { + description = S("Bottle of Ethanol"), + drawtype = "plantlike", + tiles = {"farming_bottle_ethanol.png"}, + inventory_image = "farming_bottle_ethanol.png", + wield_image = "farming_bottle_ethanol.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = farming.node_sound_glass_defaults() +}) + +-- String + +if not farming.mcl then + + minetest.register_craftitem("farming:string", { + description = S("String"), + inventory_image = "farming_string.png", + groups = {flammable = 2} + }) +end + +-- straw + +minetest.register_node("farming:straw", { + description = S("Straw"), + tiles = {"farming_straw.png"}, + is_ground_content = false, + groups = {handy = 1, snappy = 3, flammable = 4, fall_damage_add_percent = -30}, + sounds = farming.node_sound_leaves_defaults(), + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 +}) + +-- hemp oil + +minetest.register_node("farming:hemp_oil", { + description = S("Bottle of Hemp Oil"), + drawtype = "plantlike", + tiles = {"farming_hemp_oil.png"}, + inventory_image = "farming_hemp_oil.png", + wield_image = "farming_hemp_oil.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = { + food_oil = 1, vessel = 1, dig_immediate = 3, attached_node = 1, + compostability = 45 + }, + sounds = farming.node_sound_glass_defaults() +}) + +-- hemp fibre + +minetest.register_craftitem("farming:hemp_fibre", { + description = S("Hemp Fibre"), + inventory_image = "farming_hemp_fibre.png", + groups = {compostability = 55} +}) + +-- hemp block + +minetest.register_node("farming:hemp_block", { + description = S("Hemp Block"), + tiles = {"farming_hemp_block.png"}, + paramtype = "light", + groups = { + axey = 1, handy = 1, snappy = 2, oddly_breakable_by_hand = 1, flammable = 2, + compostability = 85 + }, + is_ground_content = false, + sounds = farming.node_sound_leaves_defaults(), + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 +}) + +-- hemp rope + +minetest.register_node("farming:hemp_rope", { + description = S("Hemp Rope"), + walkable = false, + climbable = true, + sunlight_propagates = true, + paramtype = "light", + tiles = {"farming_hemp_rope.png"}, + wield_image = "farming_hemp_rope.png", + inventory_image = "farming_hemp_rope.png", + drawtype = "plantlike", + groups = { + handy = 1, axey = 1, swordy = 1, flammable = 2, choppy = 3, + oddly_breakable_by_hand = 3, compostability = 55 + }, + is_ground_content = false, + sounds = farming.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7} + }, + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 +}) + +-- Jack 'O Lantern + +minetest.register_node("farming:jackolantern", { + description = S("Jack 'O Lantern (punch to turn on and off)"), + tiles = { + "farming_pumpkin_bottom.png^farming_pumpkin_top.png", + "farming_pumpkin_bottom.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png^farming_pumpkin_face_off.png" + }, + paramtype2 = "facedir", + groups = { + handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 + }, + is_ground_content = false, + sounds = farming.node_sound_wood_defaults(), + + on_punch = function(pos, node, puncher) + local name = puncher:get_player_name() or "" + if minetest.is_protected(pos, name) then return end + node.name = "farming:jackolantern_on" + minetest.swap_node(pos, node) + end, + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 +}) + +minetest.register_node("farming:jackolantern_on", { + tiles = { + "farming_pumpkin_bottom.png^farming_pumpkin_top.png", + "farming_pumpkin_bottom.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png^farming_pumpkin_face_on.png" + }, + light_source = minetest.LIGHT_MAX - 1, + paramtype2 = "facedir", + groups = { + handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, + not_in_creative_inventory = 1 + }, + is_ground_content = false, + sounds = farming.node_sound_wood_defaults(), + drop = "farming:jackolantern", + + on_punch = function(pos, node, puncher) + local name = puncher:get_player_name() or "" + if minetest.is_protected(pos, name) then return end + node.name = "farming:jackolantern" + minetest.swap_node(pos, node) + end, + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 +}) + +--- Wooden scarecrow base + +minetest.register_node("farming:scarecrow_bottom", { + description = S("Scarecrow Bottom"), + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + tiles = {"default_wood.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-1/16, -8/16, -1/16, 1/16, 8/16, 1/16}, + {-12/16, 4/16, -1/16, 12/16, 2/16, 1/16}, + } + }, + groups = {axey = 1, handy = 1, snappy = 3, flammable = 2}, + is_ground_content = false, + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 +}) + diff --git a/lucky_block.lua b/lucky_block.lua index 525ea36..68cf63f 100644 --- a/lucky_block.lua +++ b/lucky_block.lua @@ -1,3 +1,6 @@ + +-- add lucky blocks + lucky_block:add_blocks({ {"dro", {"farming:corn"}, 5}, {"dro", {"farming:coffee_cup_hot"}, 1}, diff --git a/soil.lua b/soil.lua index 2d5c4d2..215342b 100644 --- a/soil.lua +++ b/soil.lua @@ -1,25 +1,21 @@ -local S = farming.translate - +local S = minetest.get_translator("farming") -- default dry soil node + local dry_soil = "farming:soil" - -- add soil types to existing dirt blocks + minetest.override_item("default:dirt", { soil = { - base = "default:dirt", - dry = "farming:soil", - wet = "farming:soil_wet" + base = "default:dirt", dry = "farming:soil", wet = "farming:soil_wet" } }) minetest.override_item("default:dirt_with_grass", { soil = { - base = "default:dirt_with_grass", - dry = "farming:soil", - wet = "farming:soil_wet" + base = "default:dirt_with_grass", dry = "farming:soil", wet = "farming:soil_wet" } }) @@ -27,8 +23,7 @@ if minetest.registered_nodes["default:dirt_with_dry_grass"] then minetest.override_item("default:dirt_with_dry_grass", { soil = { - base = "default:dirt_with_dry_grass", - dry = "farming:soil", + base = "default:dirt_with_dry_grass", dry = "farming:soil", wet = "farming:soil_wet" } }) @@ -36,8 +31,7 @@ end minetest.override_item("default:dirt_with_rainforest_litter", { soil = { - base = "default:dirt_with_rainforest_litter", - dry = "farming:soil", + base = "default:dirt_with_rainforest_litter", dry = "farming:soil", wet = "farming:soil_wet" } }) @@ -46,29 +40,26 @@ if minetest.registered_nodes["default:dirt_with_coniferous_litter"] then minetest.override_item("default:dirt_with_coniferous_litter", { soil = { - base = "default:dirt_with_coniferous_litter", - dry = "farming:soil", + base = "default:dirt_with_coniferous_litter", dry = "farming:soil", wet = "farming:soil_wet" } }) end - -- savanna soil + if minetest.registered_nodes["default:dry_dirt"] then minetest.override_item("default:dry_dirt", { soil = { - base = "default:dry_dirt", - dry = "farming:dry_soil", + base = "default:dry_dirt", dry = "farming:dry_soil", wet = "farming:dry_soil_wet" } }) minetest.override_item("default:dry_dirt_with_dry_grass", { soil = { - base = "default:dry_dirt_with_dry_grass", - dry = "farming:dry_soil", + base = "default:dry_dirt_with_dry_grass", dry = "farming:dry_soil", wet = "farming:dry_soil_wet" } }) @@ -84,8 +75,7 @@ if minetest.registered_nodes["default:dry_dirt"] then is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { - base = "default:dry_dirt", - dry = "farming:dry_soil", + base = "default:dry_dirt", dry = "farming:dry_soil", wet = "farming:dry_soil_wet" } }) @@ -101,8 +91,7 @@ if minetest.registered_nodes["default:dry_dirt"] then is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { - base = "default:dry_dirt", - dry = "farming:dry_soil", + base = "default:dry_dirt", dry = "farming:dry_soil", wet = "farming:dry_soil_wet" } }) @@ -111,6 +100,7 @@ if minetest.registered_nodes["default:dry_dirt"] then end -- normal soil + minetest.register_node("farming:soil", { description = S("Soil"), tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, @@ -119,13 +109,12 @@ minetest.register_node("farming:soil", { is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { - base = "default:dirt", - dry = "farming:soil", - wet = "farming:soil_wet" + base = "default:dirt", dry = "farming:soil", wet = "farming:soil_wet" } }) -- wet soil + minetest.register_node("farming:soil_wet", { description = S("Wet Soil"), tiles = { @@ -137,19 +126,17 @@ minetest.register_node("farming:soil_wet", { is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { - base = "default:dirt", - dry = "farming:soil", - wet = "farming:soil_wet" + base = "default:dirt", dry = "farming:soil", wet = "farming:soil_wet" } }) - -- sand is not soil, change existing sand-soil to use dry soil + minetest.register_alias("farming:desert_sand_soil", dry_soil) minetest.register_alias("farming:desert_sand_soil_wet", dry_soil .. "_wet") - -- if water near soil then change to wet soil + minetest.register_abm({ label = "Soil changes", nodenames = {"group:field"}, diff --git a/statistics.lua b/statistics.lua index 945d792..c5d5396 100644 --- a/statistics.lua +++ b/statistics.lua @@ -1,12 +1,11 @@ -local statistics = {} -local ROOT_2 = math.sqrt(2.0) -- Approximations for erf(x) and erfInv(x) from -- https://en.wikipedia.org/wiki/Error_function +local statistics = {} +local ROOT_2 = math.sqrt(2.0) local erf local erf_inv - local A = 8 * (math.pi - 3.0) / (3.0 * math.pi * (4.0 - math.pi)) local B = 4.0 / math.pi local C = 2.0 / (math.pi * A) @@ -114,17 +113,16 @@ poisson = function(lambda, max) end end - -- Error function. + statistics.erf = erf -- Inverse error function. + statistics.erf_inv = erf_inv --- Standard normal distribution function (mean 0, standard deviation 1). - -- - -- @return - -- Any real number (actually between -3.0 and 3.0). + -- @return - Any real number (actually between -3.0 and 3.0). statistics.std_normal = function() @@ -139,15 +137,10 @@ statistics.std_normal = function() return std_normal(u) end - --- Standard normal distribution function (mean 0, standard deviation 1). - -- - -- @param mu - -- The distribution mean. - -- @param sigma - -- The distribution standard deviation. - -- @return - -- Any real number (actually between -3*sigma and 3*sigma). + -- @param mu - The distribution mean. + -- @param sigma - The distribution standard deviation. + -- @return - Any real number (actually between -3*sigma and 3*sigma). statistics.normal = function(mu, sigma) @@ -162,15 +155,10 @@ statistics.normal = function(mu, sigma) return mu + sigma * std_normal(u) end - --- Poisson distribution function. - -- - -- @param lambda - -- The distribution mean and variance. - -- @param max - -- The distribution maximum. - -- @return - -- An integer between 0 and max (both inclusive). + -- @param lambda - The distribution mean and variance. + -- @param max - The distribution maximum. + -- @return - An integer between 0 and max (both inclusive). statistics.poisson = function(lambda, max) @@ -181,5 +169,4 @@ statistics.poisson = function(lambda, max) return poisson(lambda, max) end - return statistics diff --git a/utensils.lua b/utensils.lua deleted file mode 100644 index 3fe3718..0000000 --- a/utensils.lua +++ /dev/null @@ -1,164 +0,0 @@ - -local S = farming.translate -local a = farming.recipe_items - --- wooden bowl - -minetest.register_craftitem("farming:bowl", { - description = S("Wooden Bowl"), - inventory_image = "farming_bowl.png", - groups = {food_bowl = 1, flammable = 2} -}) - -if not farming.mcl then - - minetest.register_craft({ - output = "farming:bowl 4", - recipe = { - {"group:wood", "", "group:wood"}, - {"", "group:wood", ""} - } - }) -end - -minetest.register_craft({ - type = "fuel", - recipe = "farming:bowl", - burntime = 10 -}) - --- saucepan - -minetest.register_craftitem("farming:saucepan", { - description = S("Saucepan"), - inventory_image = "farming_saucepan.png", - groups = {food_saucepan = 1, flammable = 2} -}) - -minetest.register_craft({ - output = "farming:saucepan", - recipe = { - {a.steel_ingot, "", ""}, - {"", "group:stick", ""} - } -}) - --- cooking pot - -minetest.register_craftitem("farming:pot", { - description = S("Cooking Pot"), - inventory_image = "farming_pot.png", - groups = {food_pot = 1, flammable = 2} -}) - -minetest.register_craft({ - output = "farming:pot", - recipe = { - {"group:stick", a.steel_ingot, a.steel_ingot}, - {"", a.steel_ingot, a.steel_ingot} - } -}) - --- baking tray - -minetest.register_craftitem("farming:baking_tray", { - description = S("Baking Tray"), - inventory_image = "farming_baking_tray.png", - groups = {food_baking_tray = 1, flammable = 2} -}) - -minetest.register_craft({ - output = "farming:baking_tray", - recipe = { - {a.clay_brick, a.clay_brick, a.clay_brick}, - {a.clay_brick, "", a.clay_brick}, - {a.clay_brick, a.clay_brick, a.clay_brick} - } -}) - --- skillet - -minetest.register_craftitem("farming:skillet", { - description = S("Skillet"), - inventory_image = "farming_skillet.png", - groups = {food_skillet = 1, flammable = 2} -}) - -minetest.register_craft({ - output = "farming:skillet", - recipe = { - {a.steel_ingot, "", ""}, - {"", a.steel_ingot, ""}, - {"", "", "group:stick"} - } -}) - --- mortar and pestle - -minetest.register_craftitem("farming:mortar_pestle", { - description = S("Mortar and Pestle"), - inventory_image = "farming_mortar_pestle.png", - groups = {food_mortar_pestle = 1, flammable = 2} -}) - -minetest.register_craft({ - output = "farming:mortar_pestle", - recipe = { - {a.stone, "group:stick", a.stone}, - {"", a.stone, ""} - } -}) - --- cutting board - -minetest.register_craftitem("farming:cutting_board", { - description = S("Cutting Board"), - inventory_image = "farming_cutting_board.png", - groups = {food_cutting_board = 1, flammable = 2} -}) - -minetest.register_craft({ - output = "farming:cutting_board", - recipe = { - {a.steel_ingot, "", ""}, - {"", "group:stick", ""}, - {"", "", "group:wood"} - } -}) - --- juicer - -minetest.register_craftitem("farming:juicer", { - description = S("Juicer"), - inventory_image = "farming_juicer.png", - groups = {food_juicer = 1, flammable = 2} -}) - -minetest.register_craft({ - output = "farming:juicer", - recipe = { - {"", a.stone, ""}, - {a.stone, "", a.stone} - } -}) - --- glass mixing bowl - -minetest.register_craftitem("farming:mixing_bowl", { - description = S("Glass Mixing Bowl"), - inventory_image = "farming_mixing_bowl.png", - groups = {food_mixing_bowl = 1, flammable = 2} -}) - -minetest.register_craft({ - output = "farming:mixing_bowl", - recipe = { - {a.glass, "group:stick", a.glass}, - {"", a.glass, ""} - } -}) - -minetest.register_craft( { - output = "vessels:glass_fragments", - recipe = {{"farming:mixing_bowl"}} -}) From f3a7e9350f6056046c35774304e7b06fcc78e03a Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 11 Aug 2024 16:54:35 +0100 Subject: [PATCH 25/49] remove certain foods and recipes when using mineclone --- item_recipes.lua | 132 +++++++++++++++++++++++++++------------------ items_food.lua | 58 ++++++++++++-------- items_non_food.lua | 120 +++++++++++++++++++++-------------------- lucky_block.lua | 1 + 4 files changed, 178 insertions(+), 133 deletions(-) diff --git a/item_recipes.lua b/item_recipes.lua index 430da91..4b10895 100644 --- a/item_recipes.lua +++ b/item_recipes.lua @@ -192,12 +192,15 @@ minetest.register_craft( { -- cocoa beans -minetest.register_craft({ - type = "cooking", - cooktime = 5, - output = "farming:cocoa_beans", - recipe = "farming:cocoa_beans_raw" -}) +if not farming.mcl then + + minetest.register_craft({ + type = "cooking", + cooktime = 5, + output = "farming:cocoa_beans", + recipe = "farming:cocoa_beans_raw" + }) +end -- bar of dark chocolate @@ -269,10 +272,13 @@ minetest.register_craft({ -- golden carrot -minetest.register_craft({ - output = "farming:carrot_gold", - recipe = {{"group:food_carrot", "default:gold_lump"}} -}) +if not farming.mcl then + + minetest.register_craft({ + output = "farming:carrot_gold", + recipe = {{"group:food_carrot", "default:gold_lump"}} + }) +end -- blueberry pie @@ -296,13 +302,16 @@ minetest.register_craft({ -- beetroot soup -minetest.register_craft({ - output = "farming:beetroot_soup", - recipe = { - {"group:food_beetroot", "group:food_beetroot", "group:food_beetroot"}, - {"group:food_beetroot", "group:food_bowl", "group:food_beetroot"} - } -}) +if not farming.mcl then + + minetest.register_craft({ + output = "farming:beetroot_soup", + recipe = { + {"group:food_beetroot", "group:food_beetroot", "group:food_beetroot"}, + {"group:food_beetroot", "group:food_bowl", "group:food_beetroot"} + } + }) +end -- tomato soup @@ -885,12 +894,15 @@ minetest.register_craft({ -- baked potato -minetest.register_craft({ - type = "cooking", - cooktime = 10, - output = "farming:baked_potato", - recipe = "group:food_potato" -}) +if not farming.mcl then + + minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:baked_potato", + recipe = "group:food_potato" + }) +end -- potato & cucumber salad @@ -1046,36 +1058,47 @@ minetest.register_craft({ -- toasted sunflower seeds -minetest.register_craft({ - type = "cooking", - cooktime = 10, - output = "farming:sunflower_seeds_toasted", - recipe = "farming:seed_sunflower" -}) +if not farming.mcl then + + minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:sunflower_seeds_toasted", + recipe = "farming:seed_sunflower" + }) +end -- sunflower oil -minetest.register_craft( { - output = "farming:sunflower_oil", - recipe = { - {"group:food_sunflower_seeds", "group:food_sunflower_seeds", "group:food_sunflower_seeds"}, - {"group:food_sunflower_seeds", "group:food_sunflower_seeds", "group:food_sunflower_seeds"}, - {"group:food_sunflower_seeds", a.glass_bottle, "group:food_sunflower_seeds"} - } -}) +if not farming.mcl then + + local tmp = "group:food_sunflower_seeds" + + minetest.register_craft( { + output = "farming:sunflower_oil", + recipe = { + {tmp, tmp, tmp}, + {tmp, tmp, tmp}, + {tmp, a.glass_bottle, tmp} + } + }) +end -- sunflower seed bread -minetest.register_craft({ - output = "farming:sunflower_bread", - recipe = { - { - "group:food_sunflower_seeds_toasted", - "group:food_bread", - "group:food_sunflower_seeds_toasted" +if not farming.mcl then + + minetest.register_craft({ + output = "farming:sunflower_bread", + recipe = { + { + "group:food_sunflower_seeds_toasted", + "group:food_bread", + "group:food_sunflower_seeds_toasted" + } } - } -}) + }) +end -- vanilla extract @@ -1092,13 +1115,16 @@ minetest.register_craft( { -- jack 'o lantern -minetest.register_craft({ - output = "farming:jackolantern", - recipe = { - {"default:torch"}, - {"group:food_pumpkin"} - } -}) +if not farming.mcl then + + minetest.register_craft({ + output = "farming:jackolantern", + recipe = { + {"default:torch"}, + {"group:food_pumpkin"} + } + }) +end -- wooden scarecrow base diff --git a/items_food.lua b/items_food.lua index 929edfa..869557b 100644 --- a/items_food.lua +++ b/items_food.lua @@ -113,11 +113,14 @@ minetest.register_alias("farming:drinking_cup", "vessels:drinking_glass") -- Cocoa beans -minetest.register_craftitem("farming:cocoa_beans", { - description = S("Cocoa Beans"), - inventory_image = "farming_cocoa_beans.png", - groups = {compostability = 65, food_cocoa = 1, flammable = 2} -}) +if not farming.mcl then + + minetest.register_craftitem("farming:cocoa_beans", { + description = S("Cocoa Beans"), + inventory_image = "farming_cocoa_beans.png", + groups = {compostability = 65, food_cocoa = 1, flammable = 2} + }) +end -- Chocolate cookie @@ -180,13 +183,16 @@ farming.add_eatable("farming:carrot_juice", 4) -- Golden carrot -minetest.register_craftitem("farming:carrot_gold", { - description = S("Golden Carrot"), - inventory_image = "farming_carrot_gold.png", - on_use = minetest.item_eat(10) -}) +if not farming.mcl then -farming.add_eatable("farming:carrot_gold", 10) + minetest.register_craftitem("farming:carrot_gold", { + description = S("Golden Carrot"), + inventory_image = "farming_carrot_gold.png", + on_use = minetest.item_eat(10) + }) + + farming.add_eatable("farming:carrot_gold", 10) +end -- Blueberry Pie @@ -212,13 +218,16 @@ farming.add_eatable("farming:muffin_blueberry", 2) -- beetroot soup -minetest.register_craftitem("farming:beetroot_soup", { - description = S("Beetroot Soup"), - inventory_image = "farming_beetroot_soup.png", - on_use = minetest.item_eat(6, "farming:bowl") -}) +if not farming.mcl then -farming.add_eatable("farming:beetroot_soup", 6) + minetest.register_craftitem("farming:beetroot_soup", { + description = S("Beetroot Soup"), + inventory_image = "farming_beetroot_soup.png", + on_use = minetest.item_eat(6, "farming:bowl") + }) + + farming.add_eatable("farming:beetroot_soup", 6) +end -- Tomato soup @@ -784,13 +793,16 @@ farming.add_eatable("farming:pineapple_juice", 4) -- Baked potato -minetest.register_craftitem("farming:baked_potato", { - description = S("Baked Potato"), - inventory_image = "farming_baked_potato.png", - on_use = minetest.item_eat(6) -}) +if not farming.mcl then -farming.add_eatable("farming:baked_potato", 6) + minetest.register_craftitem("farming:baked_potato", { + description = S("Baked Potato"), + inventory_image = "farming_baked_potato.png", + on_use = minetest.item_eat(6) + }) + + farming.add_eatable("farming:baked_potato", 6) +end -- Potato & cucumber Salad diff --git a/items_non_food.lua b/items_non_food.lua index 25d176c..d097a4b 100644 --- a/items_non_food.lua +++ b/items_non_food.lua @@ -3,11 +3,14 @@ local S = minetest.get_translator("farming") -- wooden bowl -minetest.register_craftitem("farming:bowl", { - description = S("Wooden Bowl"), - inventory_image = "farming_bowl.png", - groups = {food_bowl = 1, flammable = 2} -}) +if not farming.mcl then + + minetest.register_craftitem("farming:bowl", { + description = S("Wooden Bowl"), + inventory_image = "farming_bowl.png", + groups = {food_bowl = 1, flammable = 2} + }) +end -- saucepan @@ -189,61 +192,64 @@ minetest.register_node("farming:hemp_rope", { -- Jack 'O Lantern -minetest.register_node("farming:jackolantern", { - description = S("Jack 'O Lantern (punch to turn on and off)"), - tiles = { - "farming_pumpkin_bottom.png^farming_pumpkin_top.png", - "farming_pumpkin_bottom.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png^farming_pumpkin_face_off.png" - }, - paramtype2 = "facedir", - groups = { - handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 - }, - is_ground_content = false, - sounds = farming.node_sound_wood_defaults(), +if not farming.mcl then - on_punch = function(pos, node, puncher) - local name = puncher:get_player_name() or "" - if minetest.is_protected(pos, name) then return end - node.name = "farming:jackolantern_on" - minetest.swap_node(pos, node) - end, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) + minetest.register_node("farming:jackolantern", { + description = S("Jack 'O Lantern (punch to turn on and off)"), + tiles = { + "farming_pumpkin_bottom.png^farming_pumpkin_top.png", + "farming_pumpkin_bottom.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png^farming_pumpkin_face_off.png" + }, + paramtype2 = "facedir", + groups = { + handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 + }, + is_ground_content = false, + sounds = farming.node_sound_wood_defaults(), -minetest.register_node("farming:jackolantern_on", { - tiles = { - "farming_pumpkin_bottom.png^farming_pumpkin_top.png", - "farming_pumpkin_bottom.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png", - "farming_pumpkin_side.png^farming_pumpkin_face_on.png" - }, - light_source = minetest.LIGHT_MAX - 1, - paramtype2 = "facedir", - groups = { - handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, - not_in_creative_inventory = 1 - }, - is_ground_content = false, - sounds = farming.node_sound_wood_defaults(), - drop = "farming:jackolantern", + on_punch = function(pos, node, puncher) + local name = puncher:get_player_name() or "" + if minetest.is_protected(pos, name) then return end + node.name = "farming:jackolantern_on" + minetest.swap_node(pos, node) + end, + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 + }) - on_punch = function(pos, node, puncher) - local name = puncher:get_player_name() or "" - if minetest.is_protected(pos, name) then return end - node.name = "farming:jackolantern" - minetest.swap_node(pos, node) - end, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) + minetest.register_node("farming:jackolantern_on", { + tiles = { + "farming_pumpkin_bottom.png^farming_pumpkin_top.png", + "farming_pumpkin_bottom.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png^farming_pumpkin_face_on.png" + }, + light_source = minetest.LIGHT_MAX - 1, + paramtype2 = "facedir", + groups = { + handy = 1, snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, + not_in_creative_inventory = 1 + }, + is_ground_content = false, + sounds = farming.node_sound_wood_defaults(), + drop = "farming:jackolantern", + + on_punch = function(pos, node, puncher) + local name = puncher:get_player_name() or "" + if minetest.is_protected(pos, name) then return end + node.name = "farming:jackolantern" + minetest.swap_node(pos, node) + end, + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 + }) +end --- Wooden scarecrow base diff --git a/lucky_block.lua b/lucky_block.lua index 68cf63f..118fadc 100644 --- a/lucky_block.lua +++ b/lucky_block.lua @@ -27,6 +27,7 @@ lucky_block:add_blocks({ {"dro", {"farming:juicer"}, 1}, {"dro", {"farming:mixing_bowl"}, 1}, {"dro", {"farming:hoe_bronze"}, 1}, + {"dro", {"farming:sunflower_oil", 5}, {"dro", {"farming:hoe_mese"}, 1}, {"dro", {"farming:hoe_diamond"}, 1}, {"dro", {"farming:hoe_bomb"}, 10}, From 09b06ea72a55fb571c03d99724367ca1c7e2e3ef Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 12 Aug 2024 08:02:50 +0100 Subject: [PATCH 26/49] better mineclone support --- init.lua | 8 ++-- items_food.lua => item_food.lua | 34 ++++++++++------- items_list.lua => item_list.lua | 0 items_non_food.lua => item_non_food.lua | 0 item_recipes.lua | 49 +++++++++++++++---------- 5 files changed, 54 insertions(+), 37 deletions(-) rename items_food.lua => item_food.lua (98%) rename items_list.lua => item_list.lua (100%) rename items_non_food.lua => item_non_food.lua (100%) diff --git a/init.lua b/init.lua index 53fce1a..3e78823 100644 --- a/init.lua +++ b/init.lua @@ -12,7 +12,7 @@ local S = minetest.get_translator("farming") farming = { mod = "redo", - version = "20240811", + version = "20240812", path = minetest.get_modpath("farming"), select = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} @@ -735,7 +735,7 @@ end -- recipe item list and alternatives -dofile(farming.path .. "/items_list.lua") +dofile(farming.path .. "/item_list.lua") -- important items @@ -816,8 +816,8 @@ ddoo("ginger.lua", farming.ginger) -- register food items, non-food items, recipes and stairs -dofile(farming.path .. "/items_non_food.lua") -dofile(farming.path .. "/items_food.lua") +dofile(farming.path .. "/item_non_food.lua") +dofile(farming.path .. "/item_food.lua") dofile(farming.path .. "/item_recipes.lua") dofile(farming.path .. "/item_stairs.lua") diff --git a/items_food.lua b/item_food.lua similarity index 98% rename from items_food.lua rename to item_food.lua index 869557b..a30800f 100644 --- a/items_food.lua +++ b/item_food.lua @@ -3,6 +3,7 @@ local S = minetest.get_translator("farming") local a = farming.recipe_items -- Flour + minetest.register_craftitem("farming:flour", { description = S("Flour"), inventory_image = "farming_flour.png", @@ -10,14 +11,18 @@ minetest.register_craftitem("farming:flour", { }) -- Bread -minetest.register_craftitem("farming:bread", { - description = S("Bread"), - inventory_image = "farming_bread.png", - on_use = minetest.item_eat(5), - groups = {food_bread = 1} -}) -farming.add_eatable("farming:bread", 5) +if not farming.mcl then + + minetest.register_craftitem("farming:bread", { + description = S("Bread"), + inventory_image = "farming_bread.png", + on_use = minetest.item_eat(5), + groups = {food_bread = 1} + }) + + farming.add_eatable("farming:bread", 5) +end -- Garlic bulb @@ -124,13 +129,16 @@ end -- Chocolate cookie -minetest.register_craftitem("farming:cookie", { - description = S("Cookie"), - inventory_image = "farming_cookie.png", - on_use = minetest.item_eat(2) -}) +if not farming.mcl then -farming.add_eatable("farming:cookie", 2) + minetest.register_craftitem("farming:cookie", { + description = S("Cookie"), + inventory_image = "farming_cookie.png", + on_use = minetest.item_eat(2) + }) + + farming.add_eatable("farming:cookie", 2) +end -- Bar of of dark chocolate (thx to Ice Pandora for her deviantart.com chocolate tutorial) minetest.register_craftitem("farming:chocolate_dark", { diff --git a/items_list.lua b/item_list.lua similarity index 100% rename from items_list.lua rename to item_list.lua diff --git a/items_non_food.lua b/item_non_food.lua similarity index 100% rename from items_non_food.lua rename to item_non_food.lua diff --git a/item_recipes.lua b/item_recipes.lua index 4b10895..fbcb352 100644 --- a/item_recipes.lua +++ b/item_recipes.lua @@ -3,14 +3,17 @@ local a = farming.recipe_items -- flour recipes -minetest.register_craft({ - output = "farming:flour", - recipe = { - {"farming:wheat", "farming:wheat", "farming:wheat"}, - {"farming:wheat", a.mortar_pestle, ""} - }, - replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} -}) +if not farming.mcl then + + minetest.register_craft({ + output = "farming:flour", + recipe = { + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", a.mortar_pestle, ""} + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} + }) +end minetest.register_craft({ output = "farming:flour", @@ -62,12 +65,15 @@ minetest.register_craft({ -- bread -minetest.register_craft({ - type = "cooking", - cooktime = 15, - output = "farming:bread", - recipe = "farming:flour" -}) +if not farming.mcl then + + minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" + }) +end -- sliced bread @@ -213,12 +219,15 @@ minetest.register_craft( { -- chocolate cookie -minetest.register_craft( { - output = "farming:cookie 8", - recipe = { - {"group:food_wheat", "group:food_cocoa", "group:food_wheat" } - } -}) +if not farming.mcl then + + minetest.register_craft( { + output = "farming:cookie 8", + recipe = { + {"group:food_wheat", "group:food_cocoa", "group:food_wheat" } + } + }) +end -- chocolate block From 95bd342cda42ac8f7096805e246305ab843f1a73 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 12 Aug 2024 08:29:34 +0100 Subject: [PATCH 27/49] tidy code, fix straw recipe --- item_food.lua | 201 ++++++++++++++---------------- item_non_food.lua | 87 +++++++------ item_recipes.lua | 306 +++++++++++++++++++++------------------------- 3 files changed, 270 insertions(+), 324 deletions(-) diff --git a/item_food.lua b/item_food.lua index a30800f..cbcf965 100644 --- a/item_food.lua +++ b/item_food.lua @@ -10,20 +10,6 @@ minetest.register_craftitem("farming:flour", { groups = {food_flour = 1, flammable = 1} }) --- Bread - -if not farming.mcl then - - minetest.register_craftitem("farming:bread", { - description = S("Bread"), - inventory_image = "farming_bread.png", - on_use = minetest.item_eat(5), - groups = {food_bread = 1} - }) - - farming.add_eatable("farming:bread", 5) -end - -- Garlic bulb minetest.register_craftitem("farming:garlic", { @@ -53,7 +39,7 @@ minetest.register_node("farming:garlic_braid", { "crops_garlic_braid.png", "crops_garlic_braid.png" }, - groups = {vessel = 1, dig_immediate = 3, flammable = 3, compostability = 65}, + groups = {vessel = 1, dig_immediate = 3, flammable = 3, compostability = 65, handy = 1}, is_ground_content = false, sounds = farming.node_sound_leaves_defaults(), node_box = { @@ -105,7 +91,7 @@ minetest.register_node("farming:coffee_cup", { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1}, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1, handy = 1}, is_ground_content = false, on_use = minetest.item_eat(2, "vessels:drinking_glass"), sounds = farming.node_sound_glass_defaults() @@ -116,31 +102,8 @@ farming.add_eatable("farming:coffee_cup", 2) minetest.register_alias("farming:coffee_cup_hot", "farming:coffee_cup") minetest.register_alias("farming:drinking_cup", "vessels:drinking_glass") --- Cocoa beans - -if not farming.mcl then - - minetest.register_craftitem("farming:cocoa_beans", { - description = S("Cocoa Beans"), - inventory_image = "farming_cocoa_beans.png", - groups = {compostability = 65, food_cocoa = 1, flammable = 2} - }) -end - --- Chocolate cookie - -if not farming.mcl then - - minetest.register_craftitem("farming:cookie", { - description = S("Cookie"), - inventory_image = "farming_cookie.png", - on_use = minetest.item_eat(2) - }) - - farming.add_eatable("farming:cookie", 2) -end - -- Bar of of dark chocolate (thx to Ice Pandora for her deviantart.com chocolate tutorial) + minetest.register_craftitem("farming:chocolate_dark", { description = S("Bar of Dark Chocolate"), inventory_image = "farming_chocolate_dark.png", @@ -150,11 +113,12 @@ minetest.register_craftitem("farming:chocolate_dark", { farming.add_eatable("farming:chocolate_dark", 3) -- Chocolate block (not edible) + minetest.register_node("farming:chocolate_block", { description = S("Chocolate Block"), tiles = {"farming_chocolate_block.png"}, is_ground_content = false, - groups = {cracky = 2, oddly_breakable_by_hand = 2}, + groups = {cracky = 2, oddly_breakable_by_hand = 2, handy = 1}, sounds = farming.node_sound_stone_defaults() }) @@ -189,19 +153,6 @@ minetest.register_craftitem("farming:carrot_juice", { farming.add_eatable("farming:carrot_juice", 4) --- Golden carrot - -if not farming.mcl then - - minetest.register_craftitem("farming:carrot_gold", { - description = S("Golden Carrot"), - inventory_image = "farming_carrot_gold.png", - on_use = minetest.item_eat(10) - }) - - farming.add_eatable("farming:carrot_gold", 10) -end - -- Blueberry Pie minetest.register_craftitem("farming:blueberry_pie", { @@ -224,19 +175,6 @@ minetest.register_craftitem("farming:muffin_blueberry", { farming.add_eatable("farming:muffin_blueberry", 2) --- beetroot soup - -if not farming.mcl then - - minetest.register_craftitem("farming:beetroot_soup", { - description = S("Beetroot Soup"), - inventory_image = "farming_beetroot_soup.png", - on_use = minetest.item_eat(6, "farming:bowl") - }) - - farming.add_eatable("farming:beetroot_soup", 6) -end - -- Tomato soup minetest.register_craftitem("farming:tomato_soup", { @@ -289,17 +227,6 @@ minetest.register_craftitem("farming:glass_water", { groups = {food_glass_water = 1, flammable = 3, vessel = 1} }) --- Sugar - -if not farming.mcl then - - minetest.register_craftitem("farming:sugar", { - description = S("Sugar"), - inventory_image = "farming_sugar.png", - groups = {food_sugar = 1, flammable = 3} - }) -end - -- Sugar cube minetest.register_node("farming:sugar_cube", { @@ -331,7 +258,7 @@ minetest.register_node("farming:salt", { visual_scale = 0.8, paramtype = "light", tiles = {"farming_salt.png"}, - groups = {food_salt = 1, vessel = 1, dig_immediate = 3, attached_node = 1}, + groups = {food_salt = 1, vessel = 1, dig_immediate = 3, attached_node = 1, handy = 1}, is_ground_content = false, sounds = farming.node_sound_defaults(), selection_box = { @@ -390,12 +317,11 @@ minetest.register_node("farming:salt_crystal", { paramtype = "light", light_source = 1, tiles = {"farming_salt_crystal.png"}, - groups = {dig_immediate = 3, attached_node = 1}, + groups = {dig_immediate = 3, attached_node = 1, handy = 1}, is_ground_content = false, sounds = farming.node_sound_defaults(), selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} }, _mcl_hardness = 0.8, _mcl_blast_resistance = 1 @@ -419,7 +345,7 @@ minetest.register_node("farming:mayonnaise", { }, groups = { compostability = 65, food_mayonnaise = 1, vessel = 1, dig_immediate = 3, - attached_node = 1 + attached_node = 1, handy = 1 }, sounds = farming.node_sound_glass_defaults() }) @@ -437,13 +363,12 @@ minetest.register_node("farming:rose_water", { paramtype = "light", tiles = {"farming_rose_water.png"}, groups = { - food_rose_water = 1, vessel = 1, dig_immediate = 3, attached_node = 1 + food_rose_water = 1, vessel = 1, dig_immediate = 3, attached_node = 1, handy = 1 }, is_ground_content = false, sounds = farming.node_sound_defaults(), selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} } }) @@ -766,14 +691,13 @@ minetest.register_node("farming:pepper_ground", { paramtype = "light", tiles = {"crops_pepper_ground.png"}, groups = { - vessel = 1, food_pepper_ground = 1, + vessel = 1, food_pepper_ground = 1, handy = 1, dig_immediate = 3, attached_node = 1, compostability = 30 }, is_ground_content = false, sounds = farming.node_sound_defaults(), selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} } }) @@ -799,19 +723,6 @@ minetest.register_craftitem("farming:pineapple_juice", { farming.add_eatable("farming:pineapple_juice", 4) --- Baked potato - -if not farming.mcl then - - minetest.register_craftitem("farming:baked_potato", { - description = S("Baked Potato"), - inventory_image = "farming_baked_potato.png", - on_use = minetest.item_eat(6) - }) - - farming.add_eatable("farming:baked_potato", 6) -end - -- Potato & cucumber Salad minetest.register_craftitem("farming:potato_salad", { @@ -912,12 +823,11 @@ minetest.register_node("farming:soy_sauce", { paramtype = "light", walkable = false, selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} }, groups = { vessel = 1, food_soy_sauce = 1, dig_immediate = 3, attached_node = 1, - compostability = 65 + compostability = 65, handy = 1 }, is_ground_content = false, sounds = farming.node_sound_glass_defaults() @@ -934,12 +844,11 @@ minetest.register_node("farming:soy_milk", { paramtype = "light", walkable = false, selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} }, on_use = minetest.item_eat(2, "vessels:drinking_glass"), groups = { - vessel = 1, food_milk_glass = 1, dig_immediate = 3, + vessel = 1, food_milk_glass = 1, dig_immediate = 3, handy = 1, attached_node = 1, drink = 1, compostability = 65 }, is_ground_content = false, @@ -999,7 +908,7 @@ minetest.register_node("farming:sunflower_oil", { }, groups = { food_oil = 1, vessel = 1, dig_immediate = 3, attached_node = 1, - flammable = 2, compostability = 65 + flammable = 2, compostability = 65, handy = 1 }, sounds = farming.node_sound_glass_defaults() }) @@ -1029,6 +938,78 @@ minetest.register_node("farming:vanilla_extract", { selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1, handy = 1}, sounds = farming.node_sound_glass_defaults(), }) + +--= Foods we shouldn't add when using Mineclonia/VoxeLibre + +if not farming.mcl then + + -- Bread + + minetest.register_craftitem("farming:bread", { + description = S("Bread"), + inventory_image = "farming_bread.png", + on_use = minetest.item_eat(5), + groups = {food_bread = 1} + }) + + farming.add_eatable("farming:bread", 5) + + -- Cocoa beans + + minetest.register_craftitem("farming:cocoa_beans", { + description = S("Cocoa Beans"), + inventory_image = "farming_cocoa_beans.png", + groups = {compostability = 65, food_cocoa = 1, flammable = 2} + }) + + -- Chocolate cookie + + minetest.register_craftitem("farming:cookie", { + description = S("Cookie"), + inventory_image = "farming_cookie.png", + on_use = minetest.item_eat(2) + }) + + farming.add_eatable("farming:cookie", 2) + + -- Golden carrot + + minetest.register_craftitem("farming:carrot_gold", { + description = S("Golden Carrot"), + inventory_image = "farming_carrot_gold.png", + on_use = minetest.item_eat(10) + }) + + farming.add_eatable("farming:carrot_gold", 10) + + -- Beetroot soup + + minetest.register_craftitem("farming:beetroot_soup", { + description = S("Beetroot Soup"), + inventory_image = "farming_beetroot_soup.png", + on_use = minetest.item_eat(6, "farming:bowl") + }) + + farming.add_eatable("farming:beetroot_soup", 6) + + -- Sugar + + minetest.register_craftitem("farming:sugar", { + description = S("Sugar"), + inventory_image = "farming_sugar.png", + groups = {food_sugar = 1, flammable = 3} + }) + + -- Baked potato + + minetest.register_craftitem("farming:baked_potato", { + description = S("Baked Potato"), + inventory_image = "farming_baked_potato.png", + on_use = minetest.item_eat(6) + }) + + farming.add_eatable("farming:baked_potato", 6) +end diff --git a/item_non_food.lua b/item_non_food.lua index d097a4b..7f976f8 100644 --- a/item_non_food.lua +++ b/item_non_food.lua @@ -1,17 +1,6 @@ local S = minetest.get_translator("farming") --- wooden bowl - -if not farming.mcl then - - minetest.register_craftitem("farming:bowl", { - description = S("Wooden Bowl"), - inventory_image = "farming_bowl.png", - groups = {food_bowl = 1, flammable = 2} - }) -end - -- saucepan minetest.register_craftitem("farming:saucepan", { @@ -95,17 +84,6 @@ minetest.register_node("farming:bottle_ethanol", { sounds = farming.node_sound_glass_defaults() }) --- String - -if not farming.mcl then - - minetest.register_craftitem("farming:string", { - description = S("String"), - inventory_image = "farming_string.png", - groups = {flammable = 2} - }) -end - -- straw minetest.register_node("farming:straw", { @@ -190,10 +168,50 @@ minetest.register_node("farming:hemp_rope", { _mcl_blast_resistance = 1 }) --- Jack 'O Lantern +--- Wooden scarecrow base + +minetest.register_node("farming:scarecrow_bottom", { + description = S("Scarecrow Bottom"), + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + tiles = {"default_wood.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-1/16, -8/16, -1/16, 1/16, 8/16, 1/16}, + {-12/16, 4/16, -1/16, 12/16, 2/16, 1/16}, + } + }, + groups = {axey = 1, handy = 1, snappy = 3, flammable = 2}, + is_ground_content = false, + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1 +}) + +--= Items we shouldn't add when using Mineclonia/VoxeLibre if not farming.mcl then + -- Wooden bowl + + minetest.register_craftitem("farming:bowl", { + description = S("Wooden Bowl"), + inventory_image = "farming_bowl.png", + groups = {food_bowl = 1, flammable = 2} + }) + + -- String + + minetest.register_craftitem("farming:string", { + description = S("String"), + inventory_image = "farming_string.png", + groups = {flammable = 2} + }) + + -- Jack 'O Lantern + minetest.register_node("farming:jackolantern", { description = S("Jack 'O Lantern (punch to turn on and off)"), tiles = { @@ -250,26 +268,3 @@ if not farming.mcl then _mcl_blast_resistance = 1 }) end - ---- Wooden scarecrow base - -minetest.register_node("farming:scarecrow_bottom", { - description = S("Scarecrow Bottom"), - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "facedir", - tiles = {"default_wood.png"}, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-1/16, -8/16, -1/16, 1/16, 8/16, 1/16}, - {-12/16, 4/16, -1/16, 12/16, 2/16, 1/16}, - } - }, - groups = {axey = 1, handy = 1, snappy = 3, flammable = 2}, - is_ground_content = false, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1 -}) - diff --git a/item_recipes.lua b/item_recipes.lua index fbcb352..6a4e41b 100644 --- a/item_recipes.lua +++ b/item_recipes.lua @@ -3,18 +3,6 @@ local a = farming.recipe_items -- flour recipes -if not farming.mcl then - - minetest.register_craft({ - output = "farming:flour", - recipe = { - {"farming:wheat", "farming:wheat", "farming:wheat"}, - {"farming:wheat", a.mortar_pestle, ""} - }, - replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} - }) -end - minetest.register_craft({ output = "farming:flour", recipe = { @@ -63,18 +51,6 @@ minetest.register_craft({ recipe = "farming:flour_multigrain" }) --- bread - -if not farming.mcl then - - minetest.register_craft({ - type = "cooking", - cooktime = 15, - output = "farming:bread", - recipe = "farming:flour" - }) -end - -- sliced bread minetest.register_craft({ @@ -196,18 +172,6 @@ minetest.register_craft( { } }) --- cocoa beans - -if not farming.mcl then - - minetest.register_craft({ - type = "cooking", - cooktime = 5, - output = "farming:cocoa_beans", - recipe = "farming:cocoa_beans_raw" - }) -end - -- bar of dark chocolate minetest.register_craft( { @@ -217,18 +181,6 @@ minetest.register_craft( { } }) --- chocolate cookie - -if not farming.mcl then - - minetest.register_craft( { - output = "farming:cookie 8", - recipe = { - {"group:food_wheat", "group:food_cocoa", "group:food_wheat" } - } - }) -end - -- chocolate block minetest.register_craft({ @@ -279,16 +231,6 @@ minetest.register_craft({ } }) --- golden carrot - -if not farming.mcl then - - minetest.register_craft({ - output = "farming:carrot_gold", - recipe = {{"group:food_carrot", "default:gold_lump"}} - }) -end - -- blueberry pie minetest.register_craft({ @@ -309,19 +251,6 @@ minetest.register_craft({ } }) --- beetroot soup - -if not farming.mcl then - - minetest.register_craft({ - output = "farming:beetroot_soup", - recipe = { - {"group:food_beetroot", "group:food_beetroot", "group:food_beetroot"}, - {"group:food_beetroot", "group:food_bowl", "group:food_beetroot"} - } - }) -end - -- tomato soup minetest.register_craft({ @@ -390,18 +319,6 @@ if minetest.get_modpath("bucket_wooden") then }) end --- sugar - -if not farming.mcl then - - minetest.register_craft({ - type = "cooking", - cooktime = 3, - output = "farming:sugar 2", - recipe = "default:papyrus" - }) -end - -- sugar cube minetest.register_craft({ @@ -901,18 +818,6 @@ minetest.register_craft({ } }) --- baked potato - -if not farming.mcl then - - minetest.register_craft({ - type = "cooking", - cooktime = 10, - output = "farming:baked_potato", - recipe = "group:food_potato" - }) -end - -- potato & cucumber salad minetest.register_craft({ @@ -1065,50 +970,6 @@ minetest.register_craft({ cooktime = 5 }) --- toasted sunflower seeds - -if not farming.mcl then - - minetest.register_craft({ - type = "cooking", - cooktime = 10, - output = "farming:sunflower_seeds_toasted", - recipe = "farming:seed_sunflower" - }) -end - --- sunflower oil - -if not farming.mcl then - - local tmp = "group:food_sunflower_seeds" - - minetest.register_craft( { - output = "farming:sunflower_oil", - recipe = { - {tmp, tmp, tmp}, - {tmp, tmp, tmp}, - {tmp, a.glass_bottle, tmp} - } - }) -end - --- sunflower seed bread - -if not farming.mcl then - - minetest.register_craft({ - output = "farming:sunflower_bread", - recipe = { - { - "group:food_sunflower_seeds_toasted", - "group:food_bread", - "group:food_sunflower_seeds_toasted" - } - } - }) -end - -- vanilla extract minetest.register_craft( { @@ -1122,19 +983,6 @@ minetest.register_craft( { } }) --- jack 'o lantern - -if not farming.mcl then - - minetest.register_craft({ - output = "farming:jackolantern", - recipe = { - {"default:torch"}, - {"group:food_pumpkin"} - } - }) -end - -- wooden scarecrow base minetest.register_craft({ @@ -1197,19 +1045,6 @@ minetest.register_craft( { } }) --- wooden bowl - -if not farming.mcl then - - minetest.register_craft({ - output = "farming:bowl 4", - recipe = { - {"group:wood", "", "group:wood"}, - {"", "group:wood", ""} - } - }) -end - -- saucepan minetest.register_craft({ @@ -1376,12 +1211,14 @@ minetest.register_craft( { -- straw +local tmp = "group:food_wheat" + minetest.register_craft({ output = "farming:straw 3", recipe = { - {"farming:wheat", "farming:wheat", "farming:wheat"}, - {"farming:wheat", "farming:wheat", "farming:wheat"}, - {"farming:wheat", "farming:wheat", "farming:wheat"} + {tmp, tmp, tmp}, + {tmp, tmp, tmp}, + {tmp, tmp, tmp} } }) @@ -1390,6 +1227,139 @@ minetest.register_craft({ recipe = {{"farming:straw"}} }) +--= Recipes we shouldn't add when using Mineclonia/VoxeLibre + +if not farming.mcl then + + -- Wheat flour + + minetest.register_craft({ + output = "farming:flour", + recipe = { + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", a.mortar_pestle, ""} + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} + }) + + -- Bread + + minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" + }) + + -- Cocoa beans + + minetest.register_craft({ + type = "cooking", + cooktime = 5, + output = "farming:cocoa_beans", + recipe = "farming:cocoa_beans_raw" + }) + + -- Chocolate cookie + + minetest.register_craft( { + output = "farming:cookie 8", + recipe = { + {"group:food_wheat", "group:food_cocoa", "group:food_wheat" } + } + }) + + -- Golden carrot + + minetest.register_craft({ + output = "farming:carrot_gold", + recipe = {{"group:food_carrot", "default:gold_lump"}} + }) + + -- Beetroot soup + + minetest.register_craft({ + output = "farming:beetroot_soup", + recipe = { + {"group:food_beetroot", "group:food_beetroot", "group:food_beetroot"}, + {"group:food_beetroot", "group:food_bowl", "group:food_beetroot"} + } + }) + + -- Sugar + + minetest.register_craft({ + type = "cooking", + cooktime = 3, + output = "farming:sugar 2", + recipe = "default:papyrus" + }) + + -- Baked potato + + minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:baked_potato", + recipe = "group:food_potato" + }) + + -- Toasted sunflower seeds + + minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:sunflower_seeds_toasted", + recipe = "farming:seed_sunflower" + }) + + -- Sunflower oil + + local tmp = "group:food_sunflower_seeds" + + minetest.register_craft( { + output = "farming:sunflower_oil", + recipe = { + {tmp, tmp, tmp}, + {tmp, tmp, tmp}, + {tmp, a.glass_bottle, tmp} + } + }) + + -- Sunflower seed bread + + minetest.register_craft({ + output = "farming:sunflower_bread", + recipe = { + { + "group:food_sunflower_seeds_toasted", + "group:food_bread", + "group:food_sunflower_seeds_toasted" + } + } + }) + + -- Jack 'o lantern + + minetest.register_craft({ + output = "farming:jackolantern", + recipe = { + {"default:torch"}, + {"group:food_pumpkin"} + } + }) + + -- Wooden bowl + + minetest.register_craft({ + output = "farming:bowl 4", + recipe = { + {"group:wood", "", "group:wood"}, + {"", "group:wood", ""} + } + }) +end + -- dye recipes minetest.register_craft({output = a.dye_green, recipe = {{"farming:beans"}}}) From 5e610c936a662021af97280557a8fac16ec45e1f Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 12 Aug 2024 08:31:28 +0100 Subject: [PATCH 28/49] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0f1359a..ecb0678 100644 --- a/README.md +++ b/README.md @@ -217,7 +217,7 @@ on an older map are enabled and growing properly. ### Changelog: -- 1.49 - Added {eatable=1} groups to food items with the value giving HP when eaten, added HP info to food tooltips. +- 1.49 - Added {eatable=1} groups to food items with the value giving HP when eaten, improved mineclone support, separated foods from crop files. - 1.48 - added 'farming_use_utensils' setting to enable/disable utensils in recipes, added mayonnaise (thx felfa), added gingerbread man, Added MineClone2 compatibility - 1.47 - Now blueberries can make blue dye, tweak soil types to work better with older 0.4.x clients and add spanish translation (thx mckaygerhard), add trellis setting to registered_crops and fix pea and soy crop names (thx nixnoxus), add strawberries if ethereal mod not active, added asparagus; spinach; eggplant (thx Atlante for new textures), Sugar Cube - 1.46 - Added min/max default light settings, added lettuce and blackberries with food items (thanks OgelGames), added soya, vanilla and sunflowers (thanks Felfa), added tofu, added salt crystals (thanks gorlock) From e409fe9ecb9ad07b8d006f46479fec58f599f216 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 12 Aug 2024 08:33:44 +0100 Subject: [PATCH 29/49] add missing {handy} --- item_non_food.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/item_non_food.lua b/item_non_food.lua index 7f976f8..99b4f3a 100644 --- a/item_non_food.lua +++ b/item_non_food.lua @@ -80,7 +80,7 @@ minetest.register_node("farming:bottle_ethanol", { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1, handy = 1}, sounds = farming.node_sound_glass_defaults() }) @@ -113,7 +113,7 @@ minetest.register_node("farming:hemp_oil", { }, groups = { food_oil = 1, vessel = 1, dig_immediate = 3, attached_node = 1, - compostability = 45 + compostability = 45, handy = 1 }, sounds = farming.node_sound_glass_defaults() }) From 45dd32c1024a9f2cf3ffc62a166a8ca36053eab4 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 12 Aug 2024 14:21:46 +0100 Subject: [PATCH 30/49] tweak code, fix straw recipe --- init.lua | 73 ++++++++++++++---------------------------------- item_recipes.lua | 4 +-- 2 files changed, 23 insertions(+), 54 deletions(-) diff --git a/init.lua b/init.lua index 3e78823..d8832e5 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,5 @@ --[[ - Farming Redo Mod - by TenPlus1 + Farming Redo Mod by TenPlus1 NEW growing routine by prestidigitator auto-refill by crabman77 ]] @@ -8,18 +7,14 @@ -- Translation support local S = minetest.get_translator("farming") --- set global +-- global farming = { mod = "redo", version = "20240812", path = minetest.get_modpath("farming"), - select = { - type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} - }, - select_final = { - type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5} - }, + select = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, + select_final = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}}, registered_plants = {}, min_light = 12, max_light = 15, @@ -172,8 +167,6 @@ farming.plant_stages = plant_stages -- @return - The (possibly zero) number of stages of growth the plant will go through -- before being fully grown, or nil if not a plant. -local register_plant_node - -- Recursive helper local function reg_plant_stages(plant_name, stage, force_last) @@ -251,9 +244,8 @@ local register_plant_node = function(node) if plant_name then local stages = reg_plant_stages(plant_name, stage, false) + return stages and #stages.stages_left - else - return nil end end @@ -291,14 +283,6 @@ function farming.handle_growth(pos, node) if stages_left then set_growing(pos, stages_left) end end - -minetest.after(0, function() - - for _, node_def in pairs(minetest.registered_nodes) do - register_plant_node(node_def) - end -end) - -- Just in case a growing type or added node is missed (also catches existing -- nodes added to map before timers were incorporated). @@ -319,8 +303,7 @@ minetest.register_abm({ if def and def.groups and def.groups.seed then - -- start node timer if found - if def.on_timer then + if def.on_timer then -- start node timer if found farming.start_seed_timer(pos) @@ -331,24 +314,24 @@ minetest.register_abm({ def = minetest.registered_nodes[next_stage] - -- switch seed without timer to stage_1 of crop - if def then + if def then -- switch seed without timer to stage_1 of crop local p2 = def.place_param2 or 1 minetest.set_node(pos, {name = next_stage, param2 = p2}) end else - -- start normal crop timer - farming.handle_growth(pos, node) + farming.handle_growth(pos, node) -- start normal crop timer end end }) --- default check if on wet soil +-- default check crop is on wet soil farming.can_grow = function(pos) + local below = minetest.get_node({x = pos.x, y = pos.y -1, z = pos.z}) + return minetest.get_item_group(below.name, "soil") >= 3 end @@ -367,13 +350,11 @@ function farming.plant_growth_timer(pos, elapsed, node_name) local chk1 = minetest.registered_nodes[node_name].growth_check -- old local chk2 = minetest.registered_nodes[node_name].can_grow -- new - -- custom farming redo growth_check function - if chk1 then + if chk1 then -- custom farming redo growth_check function if not chk1(pos, node_name) then return true end - -- custom mt 5.9x farming can_grow function - elseif chk2 then + elseif chk2 then -- custom mt 5.9x farming can_grow function if not chk2(pos) then return true end @@ -434,11 +415,7 @@ end function farming.refill_plant(player, plantname, index) - if not player then return end - - local inv = player:get_inventory() - - if not inv then return end + local inv = player and player:get_inventory() ; if not inv then return end local old_stack = inv:get_stack("main", index) @@ -703,9 +680,7 @@ farming.rice = true local input = io.open(farming.path .. "/farming.conf", "r") -if input then - dofile(farming.path .. "/farming.conf") ; input:close() -end +if input then dofile(farming.path .. "/farming.conf") ; input:close() end -- load new world-specific settings if found inside world folder @@ -713,9 +688,7 @@ local worldpath = minetest.get_worldpath() input = io.open(worldpath .. "/farming.conf", "r") -if input then - dofile(worldpath .. "/farming.conf") ; input:close() -end +if input then dofile(worldpath .. "/farming.conf") ; input:close() end -- helper function to add {eatable} group to food items, also {flammable} @@ -737,7 +710,7 @@ end dofile(farming.path .. "/item_list.lua") --- important items +-- setup soil, register hoes, override grass if minetest.get_modpath("default") then dofile(farming.path .. "/soil.lua") @@ -746,14 +719,6 @@ end dofile(farming.path.."/grass.lua") --- default crops - -if not farming.mcl then - dofile(farming.path.."/crops/wheat.lua") -end - -dofile(farming.path.."/crops/cotton.lua") - -- disable crops Mineclone already has if farming.mcl then @@ -764,8 +729,12 @@ if farming.mcl then farming.beetroot = nil farming.sunflower = nil farming.pumpkin = nil +else + dofile(farming.path.."/crops/wheat.lua") -- default crop outwith mineclone end +dofile(farming.path.."/crops/cotton.lua") -- default crop + -- helper function local function ddoo(file, check) diff --git a/item_recipes.lua b/item_recipes.lua index 6a4e41b..69d8d0e 100644 --- a/item_recipes.lua +++ b/item_recipes.lua @@ -1211,7 +1211,7 @@ minetest.register_craft( { -- straw -local tmp = "group:food_wheat" +local tmp = farming.mcl and "farming:rye" or "farming:wheat" minetest.register_craft({ output = "farming:straw 3", @@ -1223,7 +1223,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "farming:wheat 3", + output = tmp .. " 3", recipe = {{"farming:straw"}} }) From 141be63a92b7d754d0cffb498fe0fe12b608ddc4 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Tue, 13 Aug 2024 11:54:58 +0100 Subject: [PATCH 31/49] add mineclone replacements for lucky blocks --- lucky_block.lua | 56 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/lucky_block.lua b/lucky_block.lua index 118fadc..5b5cfa9 100644 --- a/lucky_block.lua +++ b/lucky_block.lua @@ -1,22 +1,25 @@ +local mcl = farming.mcl + -- add lucky blocks lucky_block:add_blocks({ + {"dro", {"farming:corn"}, 5}, {"dro", {"farming:coffee_cup_hot"}, 1}, - {"dro", {"farming:bread"}, 5}, - {"nod", "farming:jackolantern", 0}, - {"tro", "farming:jackolantern_on"}, - {"nod", "default:river_water_source", 1}, + {"dro", {(mcl and "mcl_farming:bread" or "farming:bread")}, 5}, + {"nod", (mcl and "mcl_farming:pumpkin_face_light" or "farming:jackolantern"), 0}, + {"tro", (mcl and "mcl_farming:pumpkin_face_light" or "farming:jackolantern_on")}, + {"nod", (mcl and "mcl_core:water_source" or "default:river_water_source"), 1}, {"tel"}, {"dro", {"farming:trellis", "farming:grapes"}, 5}, {"dro", {"farming:bottle_ethanol"}, 1}, - {"nod", "farming:melon", 0}, + {"nod", (mcl and "mcl_farming:melon" or "farming:melon"), 0}, {"dro", {"farming:donut", "farming:donut_chocolate", "farming:donut_apple"}, 5}, {"dro", {"farming:hemp_leaf", "farming:hemp_fibre", "farming:seed_hemp"}, 10}, - {"nod", "fire:permanent_flame", 1}, + {"nod", (mcl and "mcl_fire:fire" or "fire:permanent_flame"), 1}, {"dro", {"farming:chili_pepper", "farming:chili_bowl"}, 5}, - {"dro", {"farming:bowl"}, 3}, + {"dro", {(mcl and "mcl_core:bowl" or "farming:bowl")}, 3}, {"dro", {"farming:saucepan"}, 1}, {"dro", {"farming:pot"}, 1}, {"dro", {"farming:baking_tray"}, 1}, @@ -26,49 +29,72 @@ lucky_block:add_blocks({ {"dro", {"farming:cutting_board"}, 1}, {"dro", {"farming:juicer"}, 1}, {"dro", {"farming:mixing_bowl"}, 1}, - {"dro", {"farming:hoe_bronze"}, 1}, - {"dro", {"farming:sunflower_oil", 5}, - {"dro", {"farming:hoe_mese"}, 1}, - {"dro", {"farming:hoe_diamond"}, 1}, + {"dro", {"farming:sunflower_oil"}, 5}, + {"dro", {(mcl and "mcl_farming:hoe_stone" or "farming:hoe_bronze")}, 1}, + {"dro", {(mcl and "mcl_farming:hoe_gold" or "farming:hoe_mese")}, 1}, + {"dro", {(mcl and "mcl_farming:hoe_diamond" or "farming:hoe_diamond")}, 1}, {"dro", {"farming:hoe_bomb"}, 10}, {"dro", {"farming:turkish_delight"}, 5}, {"lig"}, - {"dro", {"farming:scythe_mithril"}, 1}, + {"dro", {(mcl and "mcl_farming:hoe_netherite" or "farming:scythe_mithril")}, 1}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:carrot_8"}, {"farming:cotton_8", "farming:rhubarb_3"}, + {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, + {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, + {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:pepper_5"}, {"farming:cotton_8", "farming:onion_5"}, + {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, + {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, + {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { - {"farming:wheat_8", "farming:beetroot_5"}, + {"farming:wheat_8", (mcl and "mcl_farming:beetroot" or "farming:beetroot_5")}, {"farming:cotton_8", "farming:barley_7"}, + {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, + {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, + {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:corn_8"}, {"farming:cotton_8", "farming:grapes_8"}, + {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, + {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, + {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:pea_5"}, {"farming:cotton_8", "farming:coffee_5"}, + {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, + {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, + {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:raspberry_4"}, {"farming:cotton_8", "farming:tomato_8"}, + {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, + {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, + {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:chili_8"}, {"farming:cotton_8", "farming:cucumber_4"}, + {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, + {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, + {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:spinach_4"}, {"farming:cotton_8", "farming:eggplant_4"}, + {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, + {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, + {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, }}, {"nod", "default:chest", 0, { - {name = "farming:seed_wheat", max = 15}, - {name = "farming:seed_barley", max = 15}, + {name = (mcl and "mcl_farming:wheat_seeds" or "farming:seed_wheat"), max = 15}, {name = "farming:seed_barley", max = 15}, {name = "farming:seed_hemp", max = 15}, {name = "farming:seed_rye", max = 15}, From e2f12c8061f1e102520a44d915db56b2121bba63 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Tue, 13 Aug 2024 13:06:35 +0100 Subject: [PATCH 32/49] fix instafarm lb typo --- lucky_block.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lucky_block.lua b/lucky_block.lua index 5b5cfa9..5aa5f4c 100644 --- a/lucky_block.lua +++ b/lucky_block.lua @@ -42,56 +42,56 @@ lucky_block:add_blocks({ {"farming:cotton_8", "farming:rhubarb_3"}, {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, - {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, + {"default:water_source", (mcl and "mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:pepper_5"}, {"farming:cotton_8", "farming:onion_5"}, {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, - {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, + {"default:water_source", (mcl and "mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", (mcl and "mcl_farming:beetroot" or "farming:beetroot_5")}, {"farming:cotton_8", "farming:barley_7"}, {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, - {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, + {"default:water_source", (mcl and "mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:corn_8"}, {"farming:cotton_8", "farming:grapes_8"}, {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, - {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, + {"default:water_source", (mcl and "mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:pea_5"}, {"farming:cotton_8", "farming:coffee_5"}, {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, - {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, + {"default:water_source", (mcl and "mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:raspberry_4"}, {"farming:cotton_8", "farming:tomato_8"}, {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, - {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, + {"default:water_source", (mcl and "mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:chili_8"}, {"farming:cotton_8", "farming:cucumber_4"}, {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, - {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, + {"default:water_source", (mcl and "mcl_core:water_source" or "default:water_source")}, }}, {"sch", "instafarm", 0, true, { {"farming:wheat_8", "farming:spinach_4"}, {"farming:cotton_8", "farming:eggplant_4"}, {"farming:soil_wet", (mcl and "mcl_farming:soil_wet" or "farming:soil_wet")}, {"default:dirt", (mcl and "mcl_core:dirt" or "default:dirt")}, - {"default:water_source", mcl and ("mcl_core:water_source" or "default:water_source")}, + {"default:water_source", (mcl and "mcl_core:water_source" or "default:water_source")}, }}, {"nod", "default:chest", 0, { {name = (mcl and "mcl_farming:wheat_seeds" or "farming:seed_wheat"), max = 15}, From ebe1db179d70596ff16df86b79ea416a5e2b777b Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 25 Aug 2024 10:46:50 +0100 Subject: [PATCH 33/49] hoes can deal damage to mobs and players --- README.md | 2 +- hoes.lua | 136 +++++++++++++++++++++++++++++++----------------------- init.lua | 3 +- 3 files changed, 82 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index ecb0678..ec4143e 100644 --- a/README.md +++ b/README.md @@ -217,7 +217,7 @@ on an older map are enabled and growing properly. ### Changelog: -- 1.49 - Added {eatable=1} groups to food items with the value giving HP when eaten, improved mineclone support, separated foods from crop files. +- 1.49 - Added {eatable=1} groups to food items with the value giving HP when eaten, improved mineclone support, separated foods from crop files., hoes can deal damage. - 1.48 - added 'farming_use_utensils' setting to enable/disable utensils in recipes, added mayonnaise (thx felfa), added gingerbread man, Added MineClone2 compatibility - 1.47 - Now blueberries can make blue dye, tweak soil types to work better with older 0.4.x clients and add spanish translation (thx mckaygerhard), add trellis setting to registered_crops and fix pea and soy crop names (thx nixnoxus), add strawberries if ethereal mod not active, added asparagus; spinach; eggplant (thx Atlante for new textures), Sugar Cube - 1.46 - Added min/max default light settings, added lettuce and blackberries with food items (thanks OgelGames), added soya, vanilla and sunflowers (thanks Felfa), added tofu, added salt crystals (thanks gorlock) diff --git a/hoes.lua b/hoes.lua index ecefbca..3d255e7 100644 --- a/hoes.lua +++ b/hoes.lua @@ -28,6 +28,7 @@ farming.register_hoe = function(name, def) inventory_image = def.inventory_image, groups = def.groups, sound = {breaks = "default_tool_breaks"}, + damage_groups = def.damage_groups, on_use = function(itemstack, user, pointed_thing) return farming.hoe_on_use(itemstack, user, pointed_thing, def.max_uses) @@ -58,71 +59,87 @@ end function farming.hoe_on_use(itemstack, user, pointed_thing, uses) - local pt = pointed_thing + local pt = pointed_thing or {} + local is_used = false -- am I going to hoe the top of a dirt node? - if not pt or pt.type ~= "node" or pt.above.y ~= pt.under.y + 1 then - return + if pt.type == "node" and pt.above.y == pt.under.y + 1 then + + local under = minetest.get_node(pt.under) + local upos = pointed_thing.under + + if minetest.is_protected(upos, user:get_player_name()) then + minetest.record_protection_violation(upos, user:get_player_name()) + return + end + + 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] + or 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 dirt + if minetest.get_item_group(under.name, "soil") ~= 1 then return end + + -- check if (wet) soil defined + local ndef = minetest.registered_nodes[under.name] + + if ndef.soil == nil or ndef.soil.wet == nil or ndef.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 + end + + -- turn the node into soil, wear out item and play sound + minetest.set_node(pt.under, {name = ndef.soil.dry}) ; is_used = true + + minetest.sound_play("default_dig_crumbly", {pos = pt.under, gain = 0.5}, true) end - local under = minetest.get_node(pt.under) - local upos = pointed_thing.under - - if minetest.is_protected(upos, user:get_player_name()) then - minetest.record_protection_violation(upos, user:get_player_name()) - return - end - - 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] - or 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 dirt - if minetest.get_item_group(under.name, "soil") ~= 1 then return end - - -- check if (wet) soil defined - local ndef = minetest.registered_nodes[under.name] - - if ndef.soil == nil or ndef.soil.wet == nil or ndef.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 - end - - -- turn the node into soil, wear out item and play sound - minetest.set_node(pt.under, {name = ndef.soil.dry}) - - minetest.sound_play("default_dig_crumbly", {pos = pt.under, gain = 0.5}, true) - local wdef = itemstack:get_definition() local wear = 65535 / (uses - 1) - if farming.is_creative(user:get_player_name()) then + -- using hoe as weapon + if pt.type == "object" then - if mod_tr then - wear = 1 - else - wear = 0 + local ent = pt.ref and pt.ref:get_luaentity() + local dir = user:get_look_dir() + + if (ent and ent.name ~= "__builtin:item" + and ent.name ~= "__builtin:falling_node") or pt.ref:is_player() then + + pt.ref:punch(user, nil, {full_punch_interval = 1.0, + damage_groups = wdef.damage_groups}, dir) + + is_used = true end end - if mod_tr then - itemstack = toolranks.new_afteruse(itemstack, user, under, {wear = wear}) - else - itemstack:add_wear(wear) - end + -- only when used on soil top or external entity + if is_used then - if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then - minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5}, true) + -- cretive doesnt wear tools but toolranks registers uses with wear so set to 1 + if farming.is_creative(user:get_player_name()) then + if mod_tr then wear = 1 else wear = 0 end + end + + if mod_tr then + itemstack = toolranks.new_afteruse(itemstack, user, under, {wear = wear}) + else + itemstack:add_wear(wear) + end + + if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then + minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5}, true) + end end return itemstack @@ -134,7 +151,8 @@ farming.register_hoe(":farming:hoe_wood", { description = S("Wooden Hoe"), inventory_image = "farming_tool_woodhoe.png", max_uses = 30, - material = "group:wood" + material = "group:wood", + damage_groups = {fleshy = 2} }) minetest.register_craft({ @@ -147,7 +165,8 @@ farming.register_hoe(":farming:hoe_stone", { description = S("Stone Hoe"), inventory_image = "farming_tool_stonehoe.png", max_uses = 90, - material = "group:stone" + material = "group:stone", + damage_groups = {fleshy = 2} }) farming.register_hoe(":farming:hoe_steel", { @@ -162,7 +181,8 @@ farming.register_hoe(":farming:hoe_bronze", { inventory_image = "farming_tool_bronzehoe.png", max_uses = 250, groups = {not_in_creative_inventory = 1}, - material = "default:bronze_ingot" + material = "default:bronze_ingot", + damage_groups = {fleshy = 3} }) farming.register_hoe(":farming:hoe_mese", { @@ -170,13 +190,15 @@ farming.register_hoe(":farming:hoe_mese", { inventory_image = "farming_tool_mesehoe.png", max_uses = 350, groups = {not_in_creative_inventory = 1}, + damage_groups = {fleshy = 4} }) farming.register_hoe(":farming:hoe_diamond", { description = S("Diamond Hoe"), inventory_image = "farming_tool_diamondhoe.png", max_uses = 500, - groups = {not_in_creative_inventory = 1} + groups = {not_in_creative_inventory = 1}, + damage_groups = {fleshy = 4} }) -- Toolranks support diff --git a/init.lua b/init.lua index d8832e5..7211c40 100644 --- a/init.lua +++ b/init.lua @@ -5,13 +5,14 @@ ]] -- Translation support + local S = minetest.get_translator("farming") -- global farming = { mod = "redo", - version = "20240812", + version = "20240825", path = minetest.get_modpath("farming"), select = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, select_final = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}}, From 6d3c0ec1efb49beda9b1e5119ab74223ef54108b Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 25 Aug 2024 11:47:36 +0100 Subject: [PATCH 34/49] add default damage_group --- hoes.lua | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/hoes.lua b/hoes.lua index 3d255e7..29ae2cf 100644 --- a/hoes.lua +++ b/hoes.lua @@ -28,7 +28,7 @@ farming.register_hoe = function(name, def) inventory_image = def.inventory_image, groups = def.groups, sound = {breaks = "default_tool_breaks"}, - damage_groups = def.damage_groups, + damage_groups = def.damage_groups or {fleshy = 1}, on_use = function(itemstack, user, pointed_thing) return farming.hoe_on_use(itemstack, user, pointed_thing, def.max_uses) @@ -151,8 +151,7 @@ farming.register_hoe(":farming:hoe_wood", { description = S("Wooden Hoe"), inventory_image = "farming_tool_woodhoe.png", max_uses = 30, - material = "group:wood", - damage_groups = {fleshy = 2} + material = "group:wood" }) minetest.register_craft({ @@ -165,15 +164,15 @@ farming.register_hoe(":farming:hoe_stone", { description = S("Stone Hoe"), inventory_image = "farming_tool_stonehoe.png", max_uses = 90, - material = "group:stone", - damage_groups = {fleshy = 2} + material = "group:stone" }) farming.register_hoe(":farming:hoe_steel", { description = S("Steel Hoe"), inventory_image = "farming_tool_steelhoe.png", max_uses = 200, - material = "default:steel_ingot" + material = "default:steel_ingot", + damage_groups = {fleshy = 2} }) farming.register_hoe(":farming:hoe_bronze", { @@ -182,7 +181,7 @@ farming.register_hoe(":farming:hoe_bronze", { max_uses = 250, groups = {not_in_creative_inventory = 1}, material = "default:bronze_ingot", - damage_groups = {fleshy = 3} + damage_groups = {fleshy = 2} }) farming.register_hoe(":farming:hoe_mese", { @@ -190,7 +189,7 @@ farming.register_hoe(":farming:hoe_mese", { inventory_image = "farming_tool_mesehoe.png", max_uses = 350, groups = {not_in_creative_inventory = 1}, - damage_groups = {fleshy = 4} + damage_groups = {fleshy = 3} }) farming.register_hoe(":farming:hoe_diamond", { @@ -198,7 +197,7 @@ farming.register_hoe(":farming:hoe_diamond", { inventory_image = "farming_tool_diamondhoe.png", max_uses = 500, groups = {not_in_creative_inventory = 1}, - damage_groups = {fleshy = 4} + damage_groups = {fleshy = 3} }) -- Toolranks support From 4600e4202185951d10d5bc5d01a282aac03798bc Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Thu, 29 Aug 2024 11:17:37 +0100 Subject: [PATCH 35/49] add 16px textures, move 32px into alt_textures folder --- .../ethereal_banana_leaf_32px.png | Bin alt_textures/ethereal_strawberry.png | Bin 0 -> 382 bytes alt_textures/ethereal_strawberry_1.png | Bin 0 -> 116 bytes alt_textures/ethereal_strawberry_2.png | Bin 0 -> 137 bytes alt_textures/ethereal_strawberry_3.png | Bin 0 -> 157 bytes alt_textures/ethereal_strawberry_4.png | Bin 0 -> 209 bytes alt_textures/ethereal_strawberry_5.png | Bin 0 -> 234 bytes alt_textures/ethereal_strawberry_6.png | Bin 0 -> 240 bytes alt_textures/ethereal_strawberry_7.png | Bin 0 -> 258 bytes alt_textures/ethereal_strawberry_8.png | Bin 0 -> 258 bytes alt_textures/farming_burger_32px.png | Bin 0 -> 422 bytes alt_textures/farming_mayo_32px.png | Bin 0 -> 382 bytes alt_textures/farming_paella_32px.png | Bin 0 -> 487 bytes alt_textures/farming_popcorn_32px.png | Bin 0 -> 345 bytes alt_textures/farming_potato_omelet_32px.png | Bin 0 -> 687 bytes alt_textures/farming_potato_salad_32px.png | Bin 0 -> 325 bytes alt_textures/farming_spaghetti_24px.png | Bin 0 -> 242 bytes .../farming_spanish_potatoes_32px.png | Bin 0 -> 557 bytes alt_textures/farming_sunflower_32px.png | Bin 0 -> 703 bytes alt_textures/farming_sunflower_bread_32px.png | Bin 0 -> 440 bytes compatibility.lua | 6 ++--- license.txt | 23 +++++++++++++----- textures/ethereal_banana_leaf.png | Bin 0 -> 335 bytes textures/ethereal_strawberry.png | Bin 382 -> 197 bytes textures/ethereal_strawberry_1.png | Bin 116 -> 115 bytes textures/ethereal_strawberry_2.png | Bin 137 -> 129 bytes textures/ethereal_strawberry_3.png | Bin 157 -> 136 bytes textures/ethereal_strawberry_4.png | Bin 209 -> 145 bytes textures/ethereal_strawberry_5.png | Bin 234 -> 163 bytes textures/ethereal_strawberry_6.png | Bin 240 -> 187 bytes textures/ethereal_strawberry_7.png | Bin 258 -> 209 bytes textures/ethereal_strawberry_8.png | Bin 258 -> 215 bytes textures/farming_bowl.png | Bin 145 -> 158 bytes textures/farming_burger.png | Bin 422 -> 270 bytes textures/farming_mayo.png | Bin 382 -> 210 bytes textures/farming_paella.png | Bin 487 -> 258 bytes textures/farming_popcorn.png | Bin 345 -> 258 bytes textures/farming_porridge.png | Bin 193 -> 204 bytes textures/farming_potato_omelet.png | Bin 687 -> 239 bytes textures/farming_potato_salad.png | Bin 325 -> 195 bytes textures/farming_spaghetti.png | Bin 242 -> 212 bytes textures/farming_spanish_potatoes.png | Bin 557 -> 236 bytes textures/farming_sunflower.png | Bin 703 -> 274 bytes textures/farming_sunflower_bread.png | Bin 440 -> 186 bytes 44 files changed, 20 insertions(+), 9 deletions(-) rename textures/farming_banana_leaf.png => alt_textures/ethereal_banana_leaf_32px.png (100%) create mode 100644 alt_textures/ethereal_strawberry.png create mode 100644 alt_textures/ethereal_strawberry_1.png create mode 100644 alt_textures/ethereal_strawberry_2.png create mode 100644 alt_textures/ethereal_strawberry_3.png create mode 100644 alt_textures/ethereal_strawberry_4.png create mode 100644 alt_textures/ethereal_strawberry_5.png create mode 100644 alt_textures/ethereal_strawberry_6.png create mode 100644 alt_textures/ethereal_strawberry_7.png create mode 100644 alt_textures/ethereal_strawberry_8.png create mode 100644 alt_textures/farming_burger_32px.png create mode 100644 alt_textures/farming_mayo_32px.png create mode 100644 alt_textures/farming_paella_32px.png create mode 100644 alt_textures/farming_popcorn_32px.png create mode 100644 alt_textures/farming_potato_omelet_32px.png create mode 100644 alt_textures/farming_potato_salad_32px.png create mode 100644 alt_textures/farming_spaghetti_24px.png create mode 100644 alt_textures/farming_spanish_potatoes_32px.png create mode 100644 alt_textures/farming_sunflower_32px.png create mode 100644 alt_textures/farming_sunflower_bread_32px.png create mode 100644 textures/ethereal_banana_leaf.png diff --git a/textures/farming_banana_leaf.png b/alt_textures/ethereal_banana_leaf_32px.png similarity index 100% rename from textures/farming_banana_leaf.png rename to alt_textures/ethereal_banana_leaf_32px.png diff --git a/alt_textures/ethereal_strawberry.png b/alt_textures/ethereal_strawberry.png new file mode 100644 index 0000000000000000000000000000000000000000..5b43e6bc99bc21663a9e91440fcc97a2320b5adf GIT binary patch literal 382 zcmV-^0fGLBP)U1tMAsC~XQXdKo#37T$6IK&m1K!cZOn z0004WQchC^n!~IR0GvPyIJQwW;ofr5@vS_Kk7&-n<{r4R7rea`}dn-usvKah|<3eHx&}k07WI z`e^tbA;t*d0!DATge86gx><#a56X$J{usBwLD+9@5O}LQAv0evdU2--{q|!1v(hB0g#UjTEfK8F8}}l07*qoM6N<$f~dNbB>(^b literal 0 HcmV?d00001 diff --git a/alt_textures/ethereal_strawberry_1.png b/alt_textures/ethereal_strawberry_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3fa21edc5a73cff8a86f367ab663d9748427e6bb GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T(`YgAKzr5#Q)p?D8g70 zKHs- L{an^LB{Ts52<05a literal 0 HcmV?d00001 diff --git a/alt_textures/ethereal_strawberry_2.png b/alt_textures/ethereal_strawberry_2.png new file mode 100644 index 0000000000000000000000000000000000000000..751115e9876d20ce7264a801486428c48f93640d GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@&H$ef*R`Ai@l6*0|Nnn`Y>5z1 zkg+7lFPOpM*^M+HN6*v6F+}2Wa)LxlgDJx)fsO_vsgMOid;U#F1){khtTJ h1S7A-Re=NshV%DWZ#dh_tpn<0@O1TaS?83{1OO8ICRYFe literal 0 HcmV?d00001 diff --git a/alt_textures/ethereal_strawberry_3.png b/alt_textures/ethereal_strawberry_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7a7b8c0b24eb4b9ed1b13d7a32af01bfc850a4 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@o&cW^S0EkVWbq#a7|wSV_X7Eh zB|(0{3=Yq3qyahho-U3d5|@(`7VszVHW;}mD@H&jT;+>O^7y>6A;z%_} xNY-$WTxY$Yhk^A@*TNnLjpk0#`6nYJ8M0(JUs}{0Jqa|5!PC{xWt~$(69D26Fcbg) literal 0 HcmV?d00001 diff --git a/alt_textures/ethereal_strawberry_4.png b/alt_textures/ethereal_strawberry_4.png new file mode 100644 index 0000000000000000000000000000000000000000..dcf001753c0770e613b6b5b551349f958886bd22 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4S0EkVWbq#a7`AQ8JvQ~) zF`y7*NswPKgTu2MX+Tbar;B5V#`(MFHu5$Y@UR>(KgIB0kh$ST11Hm|f5w6uI_xfv z-PZHtw>8R7IkL_?laJT&^lIm64n6ZWq_TDHvP?N7CDLw|HKE3JmG}eM0KW;#{;l7# zUe@5MoukMdg)0e0Q4Oh0CniXq(|&mQd0&131IHnDf#!9p++dMnYy*H10g>_g(pKiq+|M*?o-WC78H+75Uf?UQD-oL+& b-2cF+)xpi>{&|5G&_xWMu6{1-oD!M<02*B^ literal 0 HcmV?d00001 diff --git a/alt_textures/ethereal_strawberry_6.png b/alt_textures/ethereal_strawberry_6.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d0d603fc091f7ead1faa645646ba09e305e3d9 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{S0EkVWbq#a82;zx-oEY0 z&L*=GD9Tt8I9474ezNrP=8{z3;zN`o{YNk%ZJ(Erp-=)mD6xY+$^6WyXqFuE5#r8GN4IDq#ue zzqoEfMsdZui4Mo*w#4!^D0gH(_-VI2??UC9)X@C5@-IL2?%Pwg@tp(HdoF{e&83XH i*1X=5@TdAXqg~50?wf6EcW(i@i^0>?&t;ucLK6UGzF^M) literal 0 HcmV?d00001 diff --git a/alt_textures/ethereal_strawberry_7.png b/alt_textures/ethereal_strawberry_7.png new file mode 100644 index 0000000000000000000000000000000000000000..ace223cd88a0cd46bf55c2eda7c3d7d1646b8439 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iS0EkVWbq#a7@jzq-M;Pl zKR5T*s@x8s1Y=2%UoeBivm0qZ&TLN?#}JM4XD3+mF&Xl(=4vkbwprk-+fGLHh%iro z!NB0B|J)BuJaErdrXl3yiTRa^zrG*-#M+my!Es~rB*_yO^FdP8W62jemm=(T}r zFeG1>!TUf|yhe8Ev`4lHJPb!gL!Pm$n5X!z<5Nv~-zCQ4dC@l)Z{5f2_V%Lfas{hh ztJQ8?ym(LLwmy5zS3AaoI_DSgEGlNI?05gq;Pg}U!&+3TGD>bL&;^=u2_Q2+n{0d!JMQvg8b*k%9#0S`$;K~y-)y;IAQgdhwY$43Bh zP*DE=Q>O!n#4Y!*hizl1vYVDbc)k7=y5fO#&IK1ZermL~&bo|HG=jJGq+!C67^A-N zwy?<~Mxkg8@07*qoM6N<$f^wm>1ONa4 literal 0 HcmV?d00001 diff --git a/alt_textures/farming_mayo_32px.png b/alt_textures/farming_mayo_32px.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e773b9fd38043f47db61a77148336917884466 GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyt^qzFt{_1L1>Ly$42E+U7>fI+ zG%_#*J%9e_|NsAM*RC~8K6mciob%^5|NnoEfnhHLLk|Ok(>XBb|9=KUhB^O}ljqD~ zm>l?TInW^Sk|4ie2B1zXU_*EDeV~$yo-U3d7QI&|pA>6W;Bn-TjQMX={X{zHef3i=2BpOI2clsQR4ODPOiSp1aNcc!}8I2ewvv zCe2gIU7Q=wXy`baRHh|$tPnbIxr8%kMn1E}e(q5214?s*5>@v++iCClJZ9SbmIGfH z4O_My;5A6dQq&hT-llqFt3YbvQf0>YcM#Kat95Zd`a#2PgA$L*8M2;~GMrEDkv>?KkH!#DAA}8!nj~j3taX_-% zjWV#J7((X)_NK@TPa>&h1vfBhqwN5;T`L`VOk|jjaTUl4+O`DHCsOBLQ65)mK^0vQ zQ*ZmWE~24`!ZSH;k_}F?ac1qh$!!M#;j;z6Jh&`%%< zAR~`vZ0KutzLlpA0L04TnFz;hZRt0#h?2-Nu;E3&asaslFY=SVh!Z+vt=``C_7>lL d8o#T57av`|7AwdG0OJ4v002ovPDHLkV1i`6(E9)Y literal 0 HcmV?d00001 diff --git a/alt_textures/farming_popcorn_32px.png b/alt_textures/farming_popcorn_32px.png new file mode 100644 index 0000000000000000000000000000000000000000..846399e38ea68a64b18eb4e629834ab50abb5cbe GIT binary patch literal 345 zcmV-f0jB-!JtGMsOPwyOXK{00000NkvXXu0mjfcom4t literal 0 HcmV?d00001 diff --git a/alt_textures/farming_potato_omelet_32px.png b/alt_textures/farming_potato_omelet_32px.png new file mode 100644 index 0000000000000000000000000000000000000000..abdacada76e7c038b6a591cf14d7f42526fc2e79 GIT binary patch literal 687 zcmV;g0#N;lP)4CKe|g9dy!xMH1s+>_knJ z#27-13?@n%2C4yV0+ANuDOnl#T&bjB_?|a|5?}7;vCQSVA z$jhZ!W{}icWFryJh2UggZf9oIEHg-C0~P`Wv^ckt)|9$i$%5wZyF)y@}e! zk_BtqO-AqEqi4W{=J#TCy3+PWf}X!}#2{XuM7E}p>Bj{ks$15^EJpnKsYOI}%cqBR zBC1;?)Fl$?lIMdKSsSzHx#|{C-LgK3OpT)`B}mnaHUmcznF3--=mvuH*CE)f@D?v3%na*S0F7T%4emk>}jE{oT8i& zXkcDoUYBIqool|R&g=HIYyUrds6Ki@3#g8{( zh_nUoZ3w-STg~`(aY%`--d!mtmiz^?1@2wA=s0JtQCD{wA7AZsW8ZE$$NxV6k57Nn zYVgfpvg!1n+lijfR<8f>G9ozhjPv)Dj;;*nqj8VUG~3*cELy$u^I~zo%eQVZ3(j=C zr_~(%!feVm3zO|NSDJK9j!pZbHQV!P)yQO0nWgWJ_XxT@@Fj=8O6( z*S~d9S`_5uAX6ofA|%Rn?sCPIUMn#nS8bQS(M?A}`Q#fn8ZdS|{@2p?VS)*F**eE_TM5#vCz0YG3>X zSZ0eXTr}_bVvBFzKUN%=vJ$9_u_VYZn8D%MjWi&q)zif>MB?(=E<>)v20X4)bz<-G zsU>SM?Q&4q9sR*_&y>ES98XN;vSfFAO;`~IW-0m}y!Cs;Q=uW`}$=~wTYud8v| z#i`qNx3oLgq}KO*HB)D*+=>z6Ii+*PkR>WHqx8|t=^eSO>!SpV&$XIzyB(YUyi*)CjZ>VHnROhv6vBvodu_Y1A?`j#oE%!S#w`4(^ z-RZ?fK*I(K_;^mJ0ov_Q666=m@SidutUb>VXx1H17sn8b-n$dH`wlDcxFm0AakMa6 zIqSE4>G28tcf)KQ)V)NW+piS>;TD&YD<(0mKa7}I zyflT5UJ2Qq$kXWOs8xJl>Bzl@{7IbKC%o=@y!}#=59_M`-DfsWD6A^)OPD6`LPV^H zSyx#!WX9o8hQ{3w1syDZ=+kSRn_TzEV1bOzo_F?|<#rG5 ZpOZgq!@G^u%*G28U!JahF6*2UngEpu&*cCB literal 0 HcmV?d00001 diff --git a/alt_textures/farming_sunflower_32px.png b/alt_textures/farming_sunflower_32px.png new file mode 100644 index 0000000000000000000000000000000000000000..06b9387db5d1611cc119614f70184b2c74c573d0 GIT binary patch literal 703 zcmV;w0zmzVP)~My`TiSq65jF0Jf$E$fN+orU1OF0K=>S!?6k3tN_Qg0LHlh&btZB zzW~d`0M*9^)XV_i&;i}l2k71d>fj6L-o?C0004WQchCG?OIWFrxPlK z8v+FAs%l%>wGp6|%VOVkJ~rj^JrAFv-{rdiqg(@^7LC|wJm2oc$@z*QAiCz+ zXN(3h4<6D#yFEG#Qj4m73fUv`WA4StY`0g+IDdRUM57UX47_ME;C@p(3yi#C^oeh#37Ankj%Fy07r9>s9;lv{*c}A zWZoPBrF6wofai8S9zWcrZ`)2>-QfVNz~oD>Ry4=%pA}Eu7=lP3=X2YE)n4~nN?#M$ z-CWnLDW$d}m0B8`el~r6?JkMwDXv!6oG**w>zLmn7TIc*70cp<6wB9_K7xgfY?&9? lB46}Bp~$lAHOm&x^-mjINsT*=<<0;A002ovPDHLkV1lQaEpz|? literal 0 HcmV?d00001 diff --git a/alt_textures/farming_sunflower_bread_32px.png b/alt_textures/farming_sunflower_bread_32px.png new file mode 100644 index 0000000000000000000000000000000000000000..112e8c63f70b362f8082ad8af8e33463a7c9334e GIT binary patch literal 440 zcmV;p0Z0CcP) zHzZs<9&Af3bWtdNS~-YdGlphOg=kQTYdeo>MVoLnlX6&^bV-GdOMrd%5Wi#yue6_} zw7;aRkEl|Rv~sYtN|2mtsH|$3oLZQyT9~|gxSU1=5Xoys%4m+Y@=V{X}7<8=mAIb!q8v?Q%}*_^(LXgOK$DV zUwq|+j*n@hRFPlxU*K;^M`Nu7Hyoqe9!-``14$kYhESC>M?mI{$Q;5C03Dr zWyfuM^FPwx`whCc=D%a!@SRWbb*Z%sYZ0%`q>!(63D+7WO;*0$QF>yJ+7$Ddp$yuS a|1kG7@mJ=?owx#YCWEJ|pUXO@geCx|>u@Uo literal 0 HcmV?d00001 diff --git a/textures/ethereal_strawberry.png b/textures/ethereal_strawberry.png index 5b43e6bc99bc21663a9e91440fcc97a2320b5adf..b085fd973bcdefd1377c1a8ba6b5d3a3d09d6b7d 100644 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ%`eJrm)BgWsjVNX?3$^3 zIM_3_TKTtw%u1jF#*!evURPAKX7hjU1tMAsC~XQXdKo#37T$6IK&m1K!cZOn z0004WQchC^n!~IR0GvPyIJQwW;ofr5@vS_Kk7&-n<{r4R7rea`}dn-usvKah|<3eHx&}k07WI z`e^tbA;t*d0!DATge86gx><#a56X$J{usBwLD+9@5O}LQAv0evdU2--{q|!1v(hB0g#UjTEfK8F8}}l07*qoM6N<$f~dNbB>(^b diff --git a/textures/ethereal_strawberry_1.png b/textures/ethereal_strawberry_1.png index 3fa21edc5a73cff8a86f367ab663d9748427e6bb..531ff350ecf825f3b4baf33ad01c319a9c16c63f 100644 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|u0UEpRM|CCIsD0o|3D67 zNswPKgTu2MX+VyIr;B3<$Mxid1uOKHs- L{an^LB{Ts52<05a diff --git a/textures/ethereal_strawberry_2.png b/textures/ethereal_strawberry_2.png index 751115e9876d20ce7264a801486428c48f93640d..82fa672519c93910d0ee2711b4bf8d1ce7710513 100644 GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0UEpRM|CCIkj5((xy)z zfPBW1AirP+hi5m^fE;B{7sn8e>&XcUoF5uE>I4pcXY??TXAts{bU3!0)!~{q8yka_ W1j|u{{IdT*5z1 zkg+7lFPOpM*^M+HN6*v6F+}2Wa)LxlgDJx)fsO_vsgMOid;U#F1){khtTJ h1S7A-Re=NshV%DWZ#dh_tpn<0@O1TaS?83{1OO8ICRYFe diff --git a/textures/ethereal_strawberry_3.png b/textures/ethereal_strawberry_3.png index 8b7a7b8c0b24eb4b9ed1b13d7a32af01bfc850a4..950a57cdf3ec8f5bf38a6a2cade76a5d14d62fc6 100644 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0UEpRM|CCIkj5((xy)z zfPBW1AirP+hi5m^fE+DP7sn8e>&XcUOcD(o(gKOK3?3hvBV_Cwjy&XdxRH&jT;+>O^7y>6A;z%_} xNY-$WTxY$Yhk^A@*TNnLjpk0#`6nYJ8M0(JUs}{0Jqa|5!PC{xWt~$(69D26Fcbg) diff --git a/textures/ethereal_strawberry_4.png b/textures/ethereal_strawberry_4.png index dcf001753c0770e613b6b5b551349f958886bd22..ed09091755644e59aa116b3ecc3b444113ab6cc1 100644 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0UEpRM|CCIkj5((xy)z zfPBW1AirP+hi5m^fE;5_7sn8e>&XcRIC&aoR5DL^@Sow49z)VHRxXE0%tz9z4jf20 o&y(`OP@UnVt9Ap6HZwEBiGS>h)#u^@fZ7>6UHx3vIVCg!05D)Fl>h($ literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4S0EkVWbq#a7`AQ8JvQ~) zF`y7*NswPKgTu2MX+Tbar;B5V#`(MFHu5$Y@UR>(KgIB0kh$ST11Hm|f5w6uI_xfv z-PZHtw>8R7IkL_?laJT&^lIm64n6ZWq_TDHvP?N7CDLw|HKE3JmG}eM0KW;#{;l7# zUe@5MoukMdg)0e0Q4Oh0CniXq(|&mQd0&131IHnDf#!9p&Xcg2N+oD9geUGFh08VmtE*jegjJ~^MnUXf;C)c zczA5M{y3=dPe@4nck@8P`7>J@8v897HMV82PDn^iU|_hjh+E36miHXcKn71&KbLh* G2~7ZXx-jej literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{S0EkVWbq#a82+Dcx_#TT z`ER2kP?WJG$S;_|;n|HeAg9gK#W6(V{M8E=c@Hb_uv{p1{a+i#&T)!uW`o-~wm0_P zit=n)r47IO)k~f+{Hw{}3R1thd4gr1)8Z~!Mz^j*kK5izu3EW|IciD9C!q%~3S3=Q zEoD5#us_jfm(_%5kMj>++dMnYy*H10g>_g(pKiq+|M*?o-WC78H+75Uf?UQD-oL+& b-2cF+)xpi>{&|5G&_xWMu6{1-oD!M<02*B^ diff --git a/textures/ethereal_strawberry_6.png b/textures/ethereal_strawberry_6.png index a4d0d603fc091f7ead1faa645646ba09e305e3d9..c9e97664ea97c4520fab2eb0f2d5b2eed41b54f8 100644 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=9MV%C4EpsnyD7Z$97G z{9O_!@p6XogR7{YN~xA&sp0R;}{#XB0x8pW&|)cF$Dzq1eCc);D` zK_NrN2ch!SzZB+PTNz%s#7g*^R_24PXIXa5s>sX;Y^`6lbi0Pff@(K5PX%lF^MP+z f#kc8OreEd1v5f5s2QSYIpe+oZu6{1-oD!MI9474ezNrP=8{z3;zN`o{YNk%ZJ(Erp-=)mD6xY+$^6WyXqFuE5#r8GN4IDq#ue zzqoEfMsdZui4Mo*w#4!^D0gH(_-VI2??UC9)X@C5@-IL2?%Pwg@tp(HdoF{e&83XH i*1X=5@TdAXqg~50?wf6EcW(i@i^0>?&t;ucLK6UGzF^M) diff --git a/textures/ethereal_strawberry_7.png b/textures/ethereal_strawberry_7.png index ace223cd88a0cd46bf55c2eda7c3d7d1646b8439..e35830d67241516bfdc47d5a946c33bd912fe3a1 100644 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ%`eK;4^?)}R8Fl{KDx5{ z=E3UQ&p!)m_Yrh+SDW*JqhNbHm5J&iT8~+kezrvfD?Hx5x45i_)b{OlMXLwDBzAz0*JI z1LL#{TtD>AUFX_WB=4|NS@~<>+jC}%Sf0mSi(37H*-V}%<5pkG5umLMp00i_>zopr E0KZ~Qc>n+a literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iS0EkVWbq#a7@jzq-M;Pl zKR5T*s@x8s1Y=2%UoeBivm0qZ&TLN?#}JM4XD3+mF&Xl(=4vkbwprk-+fGLHh%iro z!NB0B|J)BuJaErdrXl3yiTRa^zrG*-#M+my!Es~rB*_yO^FdP8W62jemm=(T}r zFeG1>!TUf|yhe8Ev`4lHJPb!gL!Pm$n5X!z<5Nv~-zCQ4dC@l)Z{5f2_V%Lfas{hh ztJQ8?ym(LLwmy5zS3AaoI_DSgEGlNI?05gq;Pg}Umn6t0lVqp8WI#F0c;{V#BgoKWGu8>1g c41rt>BK=$kg-SJYf!Y~7UHx3vIVCg!0DO)oga7~l diff --git a/textures/farming_burger.png b/textures/farming_burger.png index 43ab6d499fcae75ea97be86bb20415f93fa7368e..572e47abe02068e1a4772a95c12b1c3acd999d9c 100644 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!O@L2`E0E4tVem6iNORViXT}_n zCD0dbvn*Y9aS6lbQttz0@?{fc4|Xu!pJcQ0fX>g=tp6_M{Jy*H#_QSte|_FL|GGF( zKVwOdUoeBivm0qZPJ^e5V~E7%-2R7r%!(Y%dn=h&KUVwo@4b~n`OSXQwk7h*u1)#3 zD$JoEdYaayt=jvt4fPilXT4$mG1XF?sU@7cMP Q0lJ03)78&qol`;+0CXs7uK)l5 literal 422 zcmV;X0a^ZuP)!&+3TGD>bL&;^=u2_Q2+n{0d!JMQvg8b*k%9#0S`$;K~y-)y;IAQgdhwY$43Bh zP*DE=Q>O!n#4Y!*hizl1vYVDbc)k7=y5fO#&IK1ZermL~&bo|HG=jJGq+!C67^A-N zwy?<~Mxkg8@07*qoM6N<$f^wm>1ONa4 diff --git a/textures/farming_mayo.png b/textures/farming_mayo.png index c8e773b9fd38043f47db61a77148336917884466..0178f140681460e7a9a59df32caff782ec15fe5e 100644 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VWWk>|FoER8@0zC=}3JivG z&M`0;CZFq{(l}=h!?|;F{{LtA|Nq?o|NmtY7n}yFWh@Eu3ubV5b|VeQ3G;Mu4B@z* zoN$0CV#*Ym13cd^1PB`(K6xX8^~{H$pe#o1$l`BjxF#q~GcJEWkHNU7mzPzsXNw8P z;hgX1Tr`r?lzhBI&RA4GKcl%pR&RCKPKTUQ#)}M1sS-XrT<0zY+Q8uH>gTe~DWM4f DE2>GV literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyt^qzFt{_1L1>Ly$42E+U7>fI+ zG%_#*J%9e_|NsAM*RC~8K6mciob%^5|NnoEfnhHLLk|Ok(>XBb|9=KUhB^O}ljqD~ zm>l?TInW^Sk|4ie2B1zXU_*EDeV~$yo-U3d7QI&|pA>6W;Bn-TjQMX={X{zHef3i=2BpOI2clsQR4ODPOiSp1aNcc!}8I2ewvv zCe2gIU7Q=wXy`baRHh|$tPnbIxr8%kMn1E}e(q5214?s*5>@v++iCClJZ9SbmIGfH z4O_My;5A6dQq&hT-llqFt3YbvERLtqy<2jg&9b`z556xU=ZLF;#$tYFi}UkeocpV z)?9;Q(^YP-P`kQT=h;DfuPYxP0TnTp1o;IsI6S+N2IMq&x;Tb#Tu)ALU`SSAxOnFE zxxLnj3@JBk&USj+^N3j3egCz+I$cU)P2BIj)%BmxB(eS8^lSb5|4dKc4<6JpTW0|LxiiN2R=1+pD(Ea${RI&*roF=cGCf1B0wJ^<~d9Co?cNPjGX0pR9Bt n#mzA_*_n~ez&n89Brk)!zTwKEnZZ>+$1r%h`njxgN@xNA!Yp6N delta 472 zcmV;}0Vn=~0_OuPiBL{Q4GJ0x0000DNk~Le0000W0000W2m=5B07RsU#sB~SGf+%a zMVpX|kt`d3b&Ddbh%0KHFvgc8+o&ehtt{rjKX_U}Gynhq0d!JMQvg8b*k%9#0b)r+ zK~y-)y_4H=!ypVqV}m3x=<@$x+ZDDmX?l5UH5nMP2Wdh0@%Yy$&-g(dI`W73%9PTE zyQ;ef=F#2|>>jGj>_%Y`rkUlFj?GHJtaLagQGFqQmae8WgQb!IQzAl=TZb&t#j2Tv zGu!lv|KQ{VhE}Y(ck(pJ5w5~=3@ulI=`^WUsMEc|BX<;j;z6Jh&`%%3e-|HJz7{LU1_0v# O0000ERLtqy<2jgBeI_=<){xDYF2d5LX~wDkaixCc7xu zXri4~z5U@sGl61^B|(0{3=Yq3qyafqo-U3d5|@3?G77aQaIgm4;)&hx>+b(ezYngF zy&(BPanpPE{}oRj?cI5zFxJ3DtH4Z<{hw6)#J(3-q9Xkday{PHD#^ZJm8OTzu}ZH7 zg=JYiK|)I&Y`*6m^g+67qso!Zsa$>=Zk@~JDD2f&IpD@LX}RG6k=NSSI>ZjXVsDERLtq!mDzgBeJ=Ea^H1r0fHHLR?>jGI;ZHrSo!? zN{O_a$u0^uS|4IM(NwE`hha$%P!VHEkY6x^!?PP{K+XwI7sn8b(`zr^{vE1i;5;k;aK0a&tlR>!cVgC7I>1kh+m)YkX+L*-kdeR;&e~8|0U~Ji$}Sc$sPC2VV;=UPdb>=U9&xU53yE z^*$%gJ*+P{cybe;^fAabF4XP0BUX{aRVBOra%%na`}$wG-3p|IcTZl$1oRYxr>mdK II;Vst07g@Dg#Z8m diff --git a/textures/farming_porridge.png b/textures/farming_porridge.png index cd4466fbe3ec2a6baa1290e10e9496a81c6a64c9..e31929be509af70b9a8d4141098b2a6123f4f95c 100644 GIT binary patch delta 176 zcmX@ec!qI;O1*l3Plzi681(AvueP*&esS`<*SVkG6(2GZ5x*?Ua)u)19S6+PR)svCMgAoFW#_m(jo>A`^5_u cFiiT$@H0+e?z_Lt<8 delta 165 zcmV;W09yad0l@)~B!3%FOjJd|004Xz7_l`0=h2h@>`wpcW&ZPt{`p(}`gM{%3Ml{p z00DGTPE!Ct=GbNc002};L_t&t*JEJ73yfiOny~?dZVhn;3Nm|?m$$e$8!!l&xO;Sj zx+pRTDw{YPI~yr7Fe<4SDH$mVFfa%yD=8@{0(CJ0X^;R=2p%E;6cQ8^z-A!;jaUp7 T1~D9lKikjn`Ut~^6AZsDF#NyD@c*vV|3|j} zpU3=vUFCJ)5+Be&#*!evUnzE`HV|) l^4w(e1?R1|-1z#4HSaHrcg#VxUqCw;JYD@<);T3K0RW+rSY7}C literal 687 zcmV;g0#N;lP)4CKe|g9dy!xMH1s+>_knJ z#27-13?@n%2C4yV0+ANuDOnl#T&bjB_?|a|5?}7;vCQSVA z$jhZ!W{}icWFryJh2UggZf9oIEHg-C0~P`Wv^ckt)|9$i$%5wZyF)y@}e! zk_BtqO-AqEqi4W{=J#TCy3+PWf}X!}#2{XuM7E}p>Bj{ks$15^EJpnKsYOI}%cqBR zBC1;?)Fl$?lIMdKSsSzHx#|{C-LgK3OpT)`B}mnaHUmcznF3--=mvuH*CE)f@D?v3%u^cH3@ayrV@%F@d!A>rcO-P_CC*d^)e l+{?@A@Jo`Fm36`!Muv{Xe9uIrf%Q~loCIA74J1+nL literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvl>na*S0F7T%4emk>}jE{oT8i& zXkcDoUYBIqool|R&g=HIYyUrds6Ki@3#g8{( zh_nUoZ3w-STg~`(aY%`--d!mtmiz^?1@2wA=s0JtQCD{wA7AZsW8ZE$$NxV6k57Nn zYVgfpvg!1n+lijfR<8f>G9ozhjPv)Dj;;*nqj8VUG~3*cELy$u^I~zo%eQVZ3(j=C zr_~(%!feVm3zO|NSDJK9j!pZbHQV!P)yQO0nWgWJ_XxT@@Fj=8O6( z*S~d9S`_5uAX6ofA|%Rn?sCPIUMn#nS8bQS(M?A}`Q#fn8ZdS|{@2p?r@-i^Es4m`}f!Zs#bG^$b= zS|lDg?q_8F(B;I-8ady=^`PjsH;35j7XAxewRFdIEgSuNg%?kpVorLtMDBoc_BSad ztx3U7(y3E4g?CL}F(=hIwQS~F#usNSYc@vB{ZM0a?)eY4^T)+Gx1G|t3$&HN)78&q Iol`;+0F`P@H~;_u literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w=>VS)*F**eE_TM5#vCz0YG3>X zSZ0eXTr}_bVvBFzKUN%=vJ$9_u_VYZn8D%MjWi&q)zif>MB?(=E<>)v20X4)bz<-G zsU>SM?Q&4q9sR*_&y>ES98XN;vSfFAO;`~IW-0m}y!Cs;Q=uW`}$=~wTYud8v| z#i`qNx3oLgq}KO*HB)D*+=>z6Ii+*PkR>WHqx8|t=^eSO>!SpV&$e*o0RSQ6wH%;50s zMjDWl;_2cTB5`?ZpQBK-0S~kCfj$Md1OM&4n=<|PhKWa8Z%&^6X?@PFYj)rK%Vno; z@jjKeMC8+gXY6bI`Yj~yv_&LL_UB$KohHHX;?kofUrQUVeOMMYMP=<(^%KSpLJxjN dO6}jjk1->inNL+tu?c7&gQu&X%Q~loCIB-zP~!jq literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy2LgOTTs<_HWkmU`bd@sXIzyB(YUyi*)CjZ>VHnROhv6vBvodu_Y1A?`j#oE%!S#w`4(^ z-RZ?fK*I(K_;^mJ0ov_Q666=m@SidutUb>VXx1H17sn8b-n$dH`wlDcxFm0AakMa6 zIqSE4>G28tcf)KQ)V)NW+piS>;TD&YD<(0mKa7}I zyflT5UJ2Qq$kXWOs8xJl>Bzl@{7IbKC%o=@y!}#=59_M`-DfsWD6A^)OPD6`LPV^H zSyx#!WX9o8hQ{3w1syDZ=+kSRn_TzEV1bOzo_F?|<#rG5 ZpOZgq!@G^u%*G28U!JahF6*2UngEpu&*cCB diff --git a/textures/farming_sunflower.png b/textures/farming_sunflower.png index 06b9387db5d1611cc119614f70184b2c74c573d0..17a91c97377cb20982dda5256891caeb7293bb28 100644 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}V1Q4ED+5DYdcHUKW=<7Plk!-@JXecyS~4%=Cv`Zy&lfmBoL7*vejQbRIhRh z*FVN~My`TiSq65jF0Jf$E$fN+orU1OF0K=>S!?6k3tN_Qg0LHlh&btZB zzW~d`0M*9^)XV_i&;i}l2k71d>fj6L-o?C0004WQchCG?OIWFrxPlK z8v+FAs%l%>wGp6|%VOVkJ~rj^JrAFv-{rdiqg(@^7LC|wJm2oc$@z*QAiCz+ zXN(3h4<6D#yFEG#Qj4m73fUv`WA4StY`0g+IDdRUM57UX47_ME;C@p(3yi#C^oeh#37Ankj%Fy07r9>s9;lv{*c}A zWZoPBrF6wofai8S9zWcrZ`)2>-QfVNz~oD>Ry4=%pA}Eu7=lP3=X2YE)n4~nN?#M$ z-CWnLDW$d}m0B8`el~r6?JkMwDXv!6oG**w>zLmn7TIc*70cp<6wB9_K7xgfY?&9? lB46}Bp~$lAHOm&x^-mjINsT*=<<0;A002ovPDHLkV1lQaEpz|? diff --git a/textures/farming_sunflower_bread.png b/textures/farming_sunflower_bread.png index 112e8c63f70b362f8082ad8af8e33463a7c9334e..49938700db621fcec716fa332bd88e99c2a11102 100644 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWWysHIj5VH^Z@;`Vb^qMb z)9c&6U+QoN$}*M&`2{mLJiCzw($L}Q5* zQ__kZZ5EcysZLHYvCd8`5;Gj8tQMZIFzL~ooJA@J4y<5d>SE&IaZ-p9SkWEm;TaIX gkfNkK#f_bzIGy|28r4(hfi^IBy85}Sb4q9e0P_|-jsO4v literal 440 zcmV;p0Z0CcP) zHzZs<9&Af3bWtdNS~-YdGlphOg=kQTYdeo>MVoLnlX6&^bV-GdOM Date: Sat, 31 Aug 2024 12:05:16 +0100 Subject: [PATCH 36/49] add vegan butter and jerusalem artichokes. --- item_food.lua | 18 ++++++++++++++ item_recipes.lua | 28 +++++++++++++++++++++- textures/farming_jerusalem_artichokes.png | Bin 0 -> 218 bytes textures/farming_vegan_butter.png | Bin 0 -> 181 bytes 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 textures/farming_jerusalem_artichokes.png create mode 100644 textures/farming_vegan_butter.png diff --git a/item_food.lua b/item_food.lua index cbcf965..c7f7f19 100644 --- a/item_food.lua +++ b/item_food.lua @@ -606,6 +606,14 @@ minetest.register_craftitem("farming:cheese_vegan", { farming.add_eatable("farming:cheese_vegan", 2) +-- Vegan Butter + +minetest.register_craftitem("farming:butter_vegan", { + description = S("Vegan Butter"), + inventory_image = "farming_vegan_butter.png", + groups = {food_butter = 1} +}) + -- Onigiri minetest.register_craftitem("farming:onigiri", { @@ -942,6 +950,16 @@ minetest.register_node("farming:vanilla_extract", { sounds = farming.node_sound_glass_defaults(), }) +-- Jerusalem Artichokes with miso butter + +minetest.register_craftitem("farming:jerusalem_artichokes", { + description = S("Jerusalem Artichokes"), + inventory_image = "farming_jerusalem_artichokes.png", + on_use = minetest.item_eat(11, a.bowl) +}) + +farming.add_eatable("ethereal:jerusalem_artichokes", 11) + --= Foods we shouldn't add when using Mineclonia/VoxeLibre if not farming.mcl then diff --git a/item_recipes.lua b/item_recipes.lua index 69d8d0e..6b8d265 100644 --- a/item_recipes.lua +++ b/item_recipes.lua @@ -136,7 +136,6 @@ minetest.register_craft({ -- cornstarch - minetest.register_craft({ output = "farming:cornstarch", recipe = { @@ -685,6 +684,21 @@ minetest.register_craft({ } }) +-- vegan butter + +minetest.register_craft({ + output = "farming:butter_vegan", + recipe = { + {"farming:soy_milk", "farming:sunflower_oil", "farming:soy_milk"}, + {"group:food_salt", a.dye_yellow, "farming:mixing_bowl"} + }, + replacements = { + {"farming:soy_milk", a.drinking_glass .. " 2"}, + {"farming:sunflower_oil", a.glass_bottle}, + {"farming:mixing_bowl", "farming:mixing_bowl"} + } +}) + -- onigiri minetest.register_craft({ @@ -983,6 +997,18 @@ minetest.register_craft( { } }) +-- jerusalem artichokes + +minetest.register_craft({ + output = "farming:jerusalem_artichokes", + recipe = { + {"group:food_artichoke", "group:food_garlic_clove", "group:food_artichoke"}, + {"group:food_soy", "group:food_salt", "group:food_soy"}, + {"group:food_butter", "group:food_skillet", "group:food_bowl"} + }, + replacements = {{"group:food_skillet", "farming:skillet"}} +}) + -- wooden scarecrow base minetest.register_craft({ diff --git a/textures/farming_jerusalem_artichokes.png b/textures/farming_jerusalem_artichokes.png new file mode 100644 index 0000000000000000000000000000000000000000..db87dbc59253e087b1ad0b52ce4916946c6b66c6 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VD+2?gji!u+j*PR3w3oSB zxwTZgn_^mkUVWU^@>sp=nSv+E-LCe<|LlFzk+{6J_cULF0S62B7Vc?LfBvuk8oD^Hw|KU%+U!f|r=pGbeEAvnG9zx) zlgm5xx4LdAc%H1_^pS%lgNIGX=gM;sxCdGqi;sJ>pmt>l_m^ zhgCwtxpB*6p$Q8gJzBJcNvN6k)WC)WfvsUsO{a&kD#0wN*<7_#*E asu}e*a&uliG~X9!ID@CFpUXO@geCz0BRQG? literal 0 HcmV?d00001 From 4bf83d3bbfaf8e4520b2ebc6d25e0fc0715a12c3 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Fri, 6 Sep 2024 15:15:21 +0100 Subject: [PATCH 37/49] log seed placement (thx Emojigit) --- init.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/init.lua b/init.lua index 7211c40..7d17119 100644 --- a/init.lua +++ b/init.lua @@ -12,7 +12,7 @@ local S = minetest.get_translator("farming") farming = { mod = "redo", - version = "20240825", + version = "20240906", path = minetest.get_modpath("farming"), select = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, select_final = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}}, @@ -482,6 +482,12 @@ function farming.place_seed(itemstack, placer, pointed_thing, plantname) minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}) + minetest.log("action", string.format( + "%s planted %s at %s", + placer:is_player() and placer:get_player_name() or "A mod", + itemstack:get_name(), minetest.pos_to_string(pt.above) + )) + if placer and itemstack and not farming.is_creative(placer:get_player_name()) then From 8dc7d4188ee48f14ef5a8367f734970772dd5d00 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Fri, 6 Sep 2024 17:18:56 +0100 Subject: [PATCH 38/49] update russian translation (thx adikalon) --- locale/farming.ru.tr | 104 +++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/locale/farming.ru.tr b/locale/farming.ru.tr index d7403e6..ec37055 100644 --- a/locale/farming.ru.tr +++ b/locale/farming.ru.tr @@ -1,24 +1,24 @@ # textdomain: farming -Artichoke= -Asparagus= +Artichoke=Артишок +Asparagus=Спаржа Barley Seed=Семена ячменя Barley=Ячмень Green Beans=Зеленая фасоль Bean Pole (place on soil before planting beans)=Жердь для бобовых (установите на почву перед посадкой бобовых) Beetroot=Свекла Beetroot Soup=Борщ -Blackberries= +Blackberries=Ежевика Wild Blueberries=Голубика Blueberry Muffin=Кекс с голубикой Blueberry Pie=Пирог с голубикой -Cabbage= +Cabbage=Капуста Carrot=Морковь Carrot Juice=Морковный сок Golden Carrot=Золотая морковь Chili Pepper=Перец чили Bowl of Chili=Миска чили -Chili Powder= -Raw Cocoa Beans= +Chili Powder=Порошок чили +Raw Cocoa Beans=Сырые какао-бобы Cocoa Beans=Какао-бобы Cookie=Печенье Bar of Dark Chocolate=Плитка темного шоколада @@ -30,7 +30,7 @@ Banana Leaves=Листья банана Orange=Апельсин Corn=Кукуруза Corn on the Cob=Початок кукурузы -Popcorn= +Popcorn=Попкорн Cornstarch=Кукурузный крахмал Bottle of Ethanol=Бутылка спирта Wild Cotton=Дикорастущий хлопок @@ -38,13 +38,13 @@ Cotton Seed=Семена хлопка Cotton=Хлопок String=Нить Cucumber=Огурец -Eggplant= -Glass of Water= +Eggplant=Баклажан +Glass of Water=Стакан воды Sugar=Сахар -Sugar Cube= -Caramel= +Sugar Cube=Кусочек сахара +Caramel=Карамель Salt=Соль -Mayonnaise= +Mayonnaise=Майонез Rose Water=Розовая вода Turkish Delight=Рахат-лукум Garlic Bread=Чесночный хлеб @@ -55,26 +55,26 @@ Porridge=Каша Jaffa Cake=Яффский пирог Apple Pie=Яблочный пирог Cactus Juice=Кактусовый сок -Pasta= -Mac & Cheese= -Spaghetti= -Bibimbap= -Burger= -Salad= -Triple Berry Smoothie= -Spanish Potatoes= -Potato omelet= -Paella= -Vanilla Flan= -Vegan Cheese= -Onigiri= -Gyoza= -Mochi= -Gingerbread Man= +Pasta=Паста +Mac & Cheese=Макароны с сыром +Spaghetti=Спагетти +Bibimbap=Бибимпап +Burger=Бургер +Salad=Салат +Triple Berry Smoothie=Тройной ягодный смузи +Spanish Potatoes=Испанский картофель +Potato omelet=Картофельный омлет +Paella=Паэлья +Vanilla Flan=Ванильный флан +Vegan Cheese=Веганский сыр +Onigiri=Онигири +Gyoza=Гёдза +Mochi=Моти +Gingerbread Man=Пряничный человечек Garlic clove=Зубчик чеснока Garlic=Чеснок Garlic Braid=Связка чеснока -Ginger= +Ginger=Имбирь Grapes=Виноград Trellis (place on soil before planting grapes)=Решетка (поставьте на почву перед посадкой винограда) Hemp Seed=Семена конопли @@ -90,11 +90,11 @@ Steel Hoe=Стальная мотыга Bronze Hoe=Бронзовая мотыга Mese Hoe=Магическая мотыга Diamond Hoe=Алмазная мотыга -Wood Hoe= +Wood Hoe=Деревянная мотыга Hoe Bomb (use or throw on grassy areas to hoe land)=Мотыгобомба (используйте или бросьте на траву для ее обработки) -Mithril Scythe (Use to harvest and replant crops)= +Mithril Scythe (Use to harvest and replant crops)=Мифриловая коса (используется для сбора и пересадки урожая) Seed=Семена -Lettuce= +Lettuce=Латук Melon Slice=Долька арбуза Melon=Арбуз Mint Seeds=Семена мяты @@ -102,13 +102,13 @@ Mint Leaf=Лист мяты Mint Tea=Чай с мятой Onion=Лук Onion Soup=Луковый суп -Parsley= +Parsley=Петрушка Pea Pod=Стручок гороха Pea Soup=Гороховый суп Peppercorn=Перчинка -Green Pepper= -Yellow Pepper= -Red Pepper= +Green Pepper=Зеленый перец +Yellow Pepper=Желтый перец +Red Pepper=Красный перец Ground Pepper=Молотый перец Pineapple Top=Верхушка ананаса Pineapple=Ананас @@ -127,34 +127,34 @@ Raspberries=Малина Raspberry Smoothie=Малиновый смузи Rhubarb=Ревень Rhubarb Pie=Пирог с ревенем -Rice Seed= +Rice Seed=Семена риса Rice=Рис Rice Bread=Рисовый хлеб Rice Flour=Рисовая мука Rye seed=Зёрна ржи Rye=Рожь Oat seed=Семена овса -Oats= +Oats=Овес Multigrain Flour=Мультизерновая мука Multigrain Bread=Мультизерновой хлеб Savanna Soil=Земля саванны Wet Savanna Soil=Увлажненная земля саванны Soil=Земля Wet Soil=Увлажненная земля -Soy Pod= -Soy Sauce= -Soy Milk= -Tofu= -Cooked Tofu= -Spinach= +Soy Pod=Соевый стручок +Soy Sauce=Соевый соус +Soy Milk=Соевое молоко +Tofu=Тофу +Cooked Tofu=Вареный тофу +Spinach=Шпинат Strawberry=Земляника -Sunflower= -Sunflower Seeds= -Toasted Sunflower Seeds= -Bottle of Sunflower Oil= -Sunflower Seed Bread= +Sunflower=Подсолнечник +Sunflower Seeds=Семена подсолнечника +Toasted Sunflower Seeds=Жаренные семена подсолнечника +Bottle of Sunflower Oil=Бутылка подсолнечного масла +Sunflower Seed Bread=Хлеб из семян подсолнечника Tomato=Помидор -Tomato Soup= +Tomato Soup=Томатный суп Wooden Bowl=Деревянная миска Saucepan=Кастрюля Cooking Pot=Котел @@ -164,8 +164,8 @@ Mortar and Pestle=Ступка и пестик Cutting Board=Разделочная доска Juicer=Соковыжималка Glass Mixing Bowl=Стеклянная чаша -Vanilla= -Vanilla Extract= +Vanilla=Ваниль +Vanilla Extract=Экстракт ванили Wheat Seed=Зёрна пшеницы Wheat=Пшеница Straw=Солома From 2f1a233441e45b85fb576c89b0b8d816401febd6 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 7 Sep 2024 08:09:35 +0100 Subject: [PATCH 39/49] add desc to crop stages (api only) --- init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/init.lua b/init.lua index 7d17119..09720c9 100644 --- a/init.lua +++ b/init.lua @@ -607,6 +607,7 @@ farming.register_plant = function(name, def) end minetest.register_node(node_name, { + description = pname:gsub("^%l", string.upper) .. " Crop", drawtype = "plantlike", waving = 1, tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, From 2b65a7416b1840b1cde957c24ef0fc0e93c75fe5 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 7 Sep 2024 10:45:05 +0100 Subject: [PATCH 40/49] add descriptions to all crop stages --- crops/artichoke.lua | 1 + crops/asparagus.lua | 1 + crops/barley.lua | 1 + crops/beans.lua | 1 + crops/beetroot.lua | 1 + crops/blackberry.lua | 1 + crops/blueberry.lua | 1 + crops/cabbage.lua | 1 + crops/carrot.lua | 1 + crops/chili.lua | 1 + crops/cocoa.lua | 1 + crops/coffee.lua | 1 + crops/corn.lua | 1 + crops/cotton.lua | 1 + crops/cucumber.lua | 1 + crops/eggplant.lua | 1 + crops/garlic.lua | 1 + crops/ginger.lua | 1 + crops/grapes.lua | 1 + crops/hemp.lua | 1 + crops/lettuce.lua | 1 + crops/melon.lua | 1 + crops/mint.lua | 1 + crops/onion.lua | 1 + crops/parsley.lua | 1 + crops/peas.lua | 1 + crops/pepper.lua | 1 + crops/pineapple.lua | 1 + crops/potato.lua | 1 + crops/pumpkin.lua | 1 + crops/raspberry.lua | 1 + crops/rhubarb.lua | 1 + crops/rice.lua | 1 + crops/soy.lua | 1 + crops/spinach.lua | 1 + crops/strawberry.lua | 1 + crops/sunflower.lua | 1 + crops/tomato.lua | 1 + crops/vanilla.lua | 1 + crops/wheat.lua | 1 + init.lua | 6 ++++-- locale/farming.en.tr | 1 + 42 files changed, 45 insertions(+), 2 deletions(-) diff --git a/crops/artichoke.lua b/crops/artichoke.lua index a8e3ae7..6a986aa 100644 --- a/crops/artichoke.lua +++ b/crops/artichoke.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:artichoke", 4) -- crop definition local def = { + description = S("Artichoke") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_artichoke_1.png"}, paramtype = "light", diff --git a/crops/asparagus.lua b/crops/asparagus.lua index 6af267d..5cd4d02 100644 --- a/crops/asparagus.lua +++ b/crops/asparagus.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:asparagus", 1) -- crop definition local def = { + description = S("Asparagus") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_asparagus_1.png"}, paramtype = "light", diff --git a/crops/barley.lua b/crops/barley.lua index 3f5487d..ca65456 100644 --- a/crops/barley.lua +++ b/crops/barley.lua @@ -42,6 +42,7 @@ minetest.register_craftitem("farming:barley", { -- crop definition local def = { + description = S("Barley") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_barley_1.png"}, paramtype = "light", diff --git a/crops/beans.lua b/crops/beans.lua index 2d0eb8f..22ca1bd 100644 --- a/crops/beans.lua +++ b/crops/beans.lua @@ -139,6 +139,7 @@ minetest.register_node("farming:beanpole", { -- crop definition local def = { + description = S("Green Beans") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_beanpole_1.png"}, visual_scale = 1.90, diff --git a/crops/beetroot.lua b/crops/beetroot.lua index eef43d3..149b978 100644 --- a/crops/beetroot.lua +++ b/crops/beetroot.lua @@ -20,6 +20,7 @@ farming.add_eatable("farming:beetroot", 1) -- crop definition local def = { + description = S("Beetroot") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_beetroot_1.png"}, paramtype = "light", diff --git a/crops/blackberry.lua b/crops/blackberry.lua index 9df38af..2d308ac 100644 --- a/crops/blackberry.lua +++ b/crops/blackberry.lua @@ -22,6 +22,7 @@ farming.add_eatable("farming:blackberry", 1) -- crop definition local def = { + description = S("Blackberry") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_blackberry_1.png"}, paramtype = "light", diff --git a/crops/blueberry.lua b/crops/blueberry.lua index 864ed26..85bbeeb 100644 --- a/crops/blueberry.lua +++ b/crops/blueberry.lua @@ -21,6 +21,7 @@ farming.add_eatable("farming:blueberries", 1) -- ctop definition local def = { + description = S("Blueberry") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_blueberry_1.png"}, paramtype = "light", diff --git a/crops/cabbage.lua b/crops/cabbage.lua index a90e7f0..c72c43f 100644 --- a/crops/cabbage.lua +++ b/crops/cabbage.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:cabbage", 1) -- crop definition local def = { + description = S("Cabbage") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_cabbage_1.png"}, paramtype = "light", diff --git a/crops/carrot.lua b/crops/carrot.lua index 8220cf7..26f69c9 100644 --- a/crops/carrot.lua +++ b/crops/carrot.lua @@ -23,6 +23,7 @@ farming.add_eatable("farming:carrot", 4) -- crop definition local def = { + description = S("Carrot") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_carrot_1.png"}, paramtype = "light", diff --git a/crops/chili.lua b/crops/chili.lua index 831a77f..00ae994 100644 --- a/crops/chili.lua +++ b/crops/chili.lua @@ -20,6 +20,7 @@ farming.add_eatable("farming:chili_pepper", 2) -- crop definition local def = { + description = S("Chili Pepper") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_chili_1.png"}, paramtype = "light", diff --git a/crops/cocoa.lua b/crops/cocoa.lua index 75a9b62..9f35174 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -69,6 +69,7 @@ minetest.register_craftitem("farming:cocoa_beans_raw", { -- crop definition local def = { + description = S("Cocoa Beans") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_cocoa_1.png"}, paramtype = "light", diff --git a/crops/coffee.lua b/crops/coffee.lua index cb5bd9c..e1f254b 100644 --- a/crops/coffee.lua +++ b/crops/coffee.lua @@ -16,6 +16,7 @@ minetest.register_craftitem("farming:coffee_beans", { -- crop definition local def = { + description = S("Coffee") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_coffee_1.png"}, paramtype = "light", diff --git a/crops/corn.lua b/crops/corn.lua index 2ede7da..b56d9c8 100644 --- a/crops/corn.lua +++ b/crops/corn.lua @@ -24,6 +24,7 @@ farming.add_eatable("farming:corn", 3) -- crop definition local def = { + description = S("Corn") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_corn_1.png"}, paramtype = "light", diff --git a/crops/cotton.lua b/crops/cotton.lua index 1ce1583..bc1d142 100644 --- a/crops/cotton.lua +++ b/crops/cotton.lua @@ -42,6 +42,7 @@ minetest.register_craftitem("farming:cotton", { -- crop definition local def = { + description = S("Cotton") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_cotton_1.png"}, paramtype = "light", diff --git a/crops/cucumber.lua b/crops/cucumber.lua index def49c2..66d3867 100644 --- a/crops/cucumber.lua +++ b/crops/cucumber.lua @@ -24,6 +24,7 @@ farming.add_eatable("farming:cucumber", 4) -- crop definition local def = { + description = S("Cucumber") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_cucumber_1.png"}, paramtype = "light", diff --git a/crops/eggplant.lua b/crops/eggplant.lua index 8df39d9..941e6ee 100644 --- a/crops/eggplant.lua +++ b/crops/eggplant.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:eggplant", 3) -- crop definition local def = { + description = S("Eggplant") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_eggplant_1.png"}, paramtype = "light", diff --git a/crops/garlic.lua b/crops/garlic.lua index 91fcb0d..51cd03c 100644 --- a/crops/garlic.lua +++ b/crops/garlic.lua @@ -16,6 +16,7 @@ minetest.register_craftitem("farming:garlic_clove", { -- crop definition local def = { + description = S("Garlic") .. S(" Crop"), drawtype = "plantlike", tiles = {"crops_garlic_plant_1.png"}, paramtype = "light", diff --git a/crops/ginger.lua b/crops/ginger.lua index 03e1534..103f1e0 100644 --- a/crops/ginger.lua +++ b/crops/ginger.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:ginger", 1) -- crop definition local def = { + description = S("Ginger") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_ginger_1.png"}, paramtype = "light", diff --git a/crops/grapes.lua b/crops/grapes.lua index fa65c08..6e0fd6d 100644 --- a/crops/grapes.lua +++ b/crops/grapes.lua @@ -137,6 +137,7 @@ minetest.register_node("farming:trellis", { -- crop definition local def = { + description = S("Grapes") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_grapes_1.png"}, visual_scale = 1.9, diff --git a/crops/hemp.lua b/crops/hemp.lua index 0ddd5c6..4bb595b 100644 --- a/crops/hemp.lua +++ b/crops/hemp.lua @@ -42,6 +42,7 @@ minetest.register_craftitem("farming:hemp_leaf", { -- crop definition local def = { + description = S("Hemp") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_hemp_1.png"}, paramtype = "light", diff --git a/crops/lettuce.lua b/crops/lettuce.lua index 6f25b04..a950d0f 100644 --- a/crops/lettuce.lua +++ b/crops/lettuce.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:lettuce", 2) -- crop definition local def = { + description = S("Lettuce") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_lettuce_1.png"}, paramtype = "light", diff --git a/crops/melon.lua b/crops/melon.lua index 0cedc77..b123eb0 100644 --- a/crops/melon.lua +++ b/crops/melon.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:melon_slice", 2) -- crop definition local def = { + description = S("Melon") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_melon_1.png"}, paramtype = "light", diff --git a/crops/mint.lua b/crops/mint.lua index ad5c78d..9894e7e 100644 --- a/crops/mint.lua +++ b/crops/mint.lua @@ -42,6 +42,7 @@ minetest.register_craftitem("farming:mint_leaf", { -- crop definition local def = { + description = S("Mint") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_mint_1.png"}, paramtype = "light", diff --git a/crops/onion.lua b/crops/onion.lua index 4ffee32..1c56b4f 100644 --- a/crops/onion.lua +++ b/crops/onion.lua @@ -25,6 +25,7 @@ farming.add_eatable("farming:onion", 1) -- crop definition local def = { + description = S("Onion") .. S(" Crop"), drawtype = "plantlike", tiles = {"crops_onion_plant_1.png"}, paramtype = "light", diff --git a/crops/parsley.lua b/crops/parsley.lua index 8461e5e..4be7ab9 100644 --- a/crops/parsley.lua +++ b/crops/parsley.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:parsley", 1) -- crop definition local def = { + description = S("Parsley") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_parsley_1.png"}, paramtype = "light", diff --git a/crops/peas.lua b/crops/peas.lua index 550209a..467d08e 100644 --- a/crops/peas.lua +++ b/crops/peas.lua @@ -25,6 +25,7 @@ minetest.register_alias("farming:peas", "farming:pea_pod") -- crop definition local def = { + description = S("Pea") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_pea_1.png"}, paramtype = "light", diff --git a/crops/pepper.lua b/crops/pepper.lua index 47a131c..2147929 100644 --- a/crops/pepper.lua +++ b/crops/pepper.lua @@ -62,6 +62,7 @@ minetest.register_craft({ -- crop definition local def = { + description = S("Pepper") .. S(" Crop"), drawtype = "plantlike", tiles = {"crops_pepper_plant_1.png"}, paramtype = "light", diff --git a/crops/pineapple.lua b/crops/pineapple.lua index ef2cda4..3f18eed 100644 --- a/crops/pineapple.lua +++ b/crops/pineapple.lua @@ -38,6 +38,7 @@ minetest.register_node("farming:pineapple", { -- crop definition local def = { + description = S("Pineapple") .. S(" Crop"), drawtype = "plantlike", visual_scale = 1.5, tiles = {"farming_pineapple_1.png"}, diff --git a/crops/potato.lua b/crops/potato.lua index adb50a9..1f76493 100644 --- a/crops/potato.lua +++ b/crops/potato.lua @@ -36,6 +36,7 @@ farming.add_eatable("farming:potato", 1) -- crop definition local def = { + description = S("Potato") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_potato_1.png"}, paramtype = "light", diff --git a/crops/pumpkin.lua b/crops/pumpkin.lua index 0156895..de3fe08 100644 --- a/crops/pumpkin.lua +++ b/crops/pumpkin.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:pumpkin_slice", 2) -- crop definition local def = { + description = S("Pumpkin") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_pumpkin_1.png"}, paramtype = "light", diff --git a/crops/raspberry.lua b/crops/raspberry.lua index 573384b..210225d 100644 --- a/crops/raspberry.lua +++ b/crops/raspberry.lua @@ -22,6 +22,7 @@ farming.add_eatable("farming:raspberries", 1) -- crop definition local def = { + description = S("Raspberry") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_raspberry_1.png"}, paramtype = "light", diff --git a/crops/rhubarb.lua b/crops/rhubarb.lua index de3232c..15ff9df 100644 --- a/crops/rhubarb.lua +++ b/crops/rhubarb.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:rhubarb", 1) -- crop definition local def = { + description = S("Rhubarb") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_rhubarb_1.png"}, paramtype = "light", diff --git a/crops/rice.lua b/crops/rice.lua index a00fa04..66c0c04 100644 --- a/crops/rice.lua +++ b/crops/rice.lua @@ -51,6 +51,7 @@ minetest.register_craft({ -- crop definition local def = { + description = S("Rice") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_rice_1.png"}, paramtype = "light", diff --git a/crops/soy.lua b/crops/soy.lua index 6fe5d2b..78e9390 100644 --- a/crops/soy.lua +++ b/crops/soy.lua @@ -20,6 +20,7 @@ minetest.register_alias("farming:soy_beans", "farming:soy_pod") -- crop definition local def = { + description = S("Soy") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_soy_1.png"}, paramtype = "light", diff --git a/crops/spinach.lua b/crops/spinach.lua index 87a06e3..e84f976 100644 --- a/crops/spinach.lua +++ b/crops/spinach.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:spinach", 1) -- crop definition local def = { + description = S("Spinach") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_spinach_1.png"}, paramtype = "light", diff --git a/crops/strawberry.lua b/crops/strawberry.lua index ad8a2c2..9d49485 100644 --- a/crops/strawberry.lua +++ b/crops/strawberry.lua @@ -19,6 +19,7 @@ farming.add_eatable("ethereal:strawberry", 1) -- crop definition local def = { + description = S("Strawberry") .. S(" Crop"), drawtype = "plantlike", tiles = {"ethereal_strawberry_1.png"}, paramtype = "light", diff --git a/crops/sunflower.lua b/crops/sunflower.lua index 9e4f392..9738d5e 100644 --- a/crops/sunflower.lua +++ b/crops/sunflower.lua @@ -51,6 +51,7 @@ minetest.register_craft({ -- crop definition local def = { + description = S("Sunflower") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_sunflower_1.png"}, paramtype = "light", diff --git a/crops/tomato.lua b/crops/tomato.lua index 1e770dd..b97246c 100644 --- a/crops/tomato.lua +++ b/crops/tomato.lua @@ -24,6 +24,7 @@ farming.add_eatable("farming:tomato", 4) -- crop definition local def = { + description = S("Tomato") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_tomato_1.png"}, paramtype = "light", diff --git a/crops/vanilla.lua b/crops/vanilla.lua index 96c6b03..307cd46 100644 --- a/crops/vanilla.lua +++ b/crops/vanilla.lua @@ -19,6 +19,7 @@ farming.add_eatable("farming:vanilla", 1) -- crop definition local def = { + description = S("Vanilla") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_vanilla_1.png"}, paramtype = "light", diff --git a/crops/wheat.lua b/crops/wheat.lua index 381ea0c..c00208b 100644 --- a/crops/wheat.lua +++ b/crops/wheat.lua @@ -41,6 +41,7 @@ minetest.register_craftitem("farming:wheat", { -- crop definition local def = { + description = S("Wheat") .. S(" Crop"), drawtype = "plantlike", tiles = {"farming_wheat_1.png"}, paramtype = "light", diff --git a/init.lua b/init.lua index 09720c9..e4fae44 100644 --- a/init.lua +++ b/init.lua @@ -12,7 +12,7 @@ local S = minetest.get_translator("farming") farming = { mod = "redo", - version = "20240906", + version = "20240907", path = minetest.get_modpath("farming"), select = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, select_final = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}}, @@ -606,8 +606,10 @@ farming.register_plant = function(name, def) next_plant = mname .. ":" .. pname .. "_" .. (i + 1) end + local desc = pname:gsub("^%l", string.upper) + minetest.register_node(node_name, { - description = pname:gsub("^%l", string.upper) .. " Crop", + description = S(desc) .. S(" Crop"), drawtype = "plantlike", waving = 1, tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, diff --git a/locale/farming.en.tr b/locale/farming.en.tr index 746a41e..a18bd89 100644 --- a/locale/farming.en.tr +++ b/locale/farming.en.tr @@ -1,4 +1,5 @@ # textdomain: farming + Crop= Artichoke= Asparagus= Barley Seed= From ddd7c56a2c3c5b3afeb969ef0e0163f1118b4804 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 7 Sep 2024 12:01:06 +0100 Subject: [PATCH 41/49] add " crop" translation for russian --- locale/farming.ru.tr | 1 + 1 file changed, 1 insertion(+) diff --git a/locale/farming.ru.tr b/locale/farming.ru.tr index ec37055..9e4b6b3 100644 --- a/locale/farming.ru.tr +++ b/locale/farming.ru.tr @@ -1,4 +1,5 @@ # textdomain: farming + Crop= растёт Artichoke=Артишок Asparagus=Спаржа Barley Seed=Семена ячменя From a952846bde2be4d1134a51a137a8b8f9b2b38539 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 7 Sep 2024 13:19:12 +0100 Subject: [PATCH 42/49] add some missing translation --- locale/farming.en.tr | 2 ++ locale/farming.ru.tr | 2 ++ 2 files changed, 4 insertions(+) diff --git a/locale/farming.en.tr b/locale/farming.en.tr index a18bd89..70ab2d9 100644 --- a/locale/farming.en.tr +++ b/locale/farming.en.tr @@ -103,9 +103,11 @@ Mint Leaf= Mint Tea= Onion= Onion Soup= +Pea= Parsley= Pea Pod= Pea Soup= +Pepper= Peppercorn= Green Pepper= Yellow Pepper= diff --git a/locale/farming.ru.tr b/locale/farming.ru.tr index 9e4b6b3..717ecae 100644 --- a/locale/farming.ru.tr +++ b/locale/farming.ru.tr @@ -104,8 +104,10 @@ Mint Tea=Чай с мятой Onion=Лук Onion Soup=Луковый суп Parsley=Петрушка +Pea=Горох Pea Pod=Стручок гороха Pea Soup=Гороховый суп +Pepper=Перец Peppercorn=Перчинка Green Pepper=Зеленый перец Yellow Pepper=Желтый перец From 45e13d263fa4eb0629ac98b9a14aae598e8c0987 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 8 Sep 2024 15:43:02 +0100 Subject: [PATCH 43/49] update translation (thx adikalon) --- locale/farming.en.tr | 9 ++- locale/farming.ru.tr | 9 ++- locale/template.txt | 177 ------------------------------------------- 3 files changed, 16 insertions(+), 179 deletions(-) delete mode 100644 locale/template.txt diff --git a/locale/farming.en.tr b/locale/farming.en.tr index 70ab2d9..6f83b3e 100644 --- a/locale/farming.en.tr +++ b/locale/farming.en.tr @@ -8,8 +8,10 @@ Green Beans= Bean Pole (place on soil before planting beans)= Beetroot= Beetroot Soup= +Blackberry= Blackberries= Wild Blueberries= +Blueberry= Blueberry Muffin= Blueberry Pie= Cabbage= @@ -24,6 +26,7 @@ Cocoa Beans= Cookie= Bar of Dark Chocolate= Chocolate Block= +Coffee= Coffee Beans= Cup of Coffee= Banana= @@ -78,6 +81,7 @@ Garlic Braid= Ginger= Grapes= Trellis (place on soil before planting grapes)= +Hemp= Hemp Seed= Hemp Leaf= Bottle of Hemp Oil= @@ -98,13 +102,14 @@ Seed= Lettuce= Melon Slice= Melon= +Mint= Mint Seeds= Mint Leaf= Mint Tea= Onion= Onion Soup= -Pea= Parsley= +Pea= Pea Pod= Pea Soup= Pepper= @@ -126,6 +131,7 @@ Scarecrow Bottom= Pumpkin Bread= Pumpkin Dough= Pumpkin= +Raspberry= Raspberries= Raspberry Smoothie= Rhubarb= @@ -144,6 +150,7 @@ Savanna Soil= Wet Savanna Soil= Soil= Wet Soil= +Soy= Soy Pod= Soy Sauce= Soy Milk= diff --git a/locale/farming.ru.tr b/locale/farming.ru.tr index 717ecae..e78e043 100644 --- a/locale/farming.ru.tr +++ b/locale/farming.ru.tr @@ -1,5 +1,5 @@ # textdomain: farming - Crop= растёт + Crop=. Artichoke=Артишок Asparagus=Спаржа Barley Seed=Семена ячменя @@ -8,8 +8,10 @@ Green Beans=Зеленая фасоль Bean Pole (place on soil before planting beans)=Жердь для бобовых (установите на почву перед посадкой бобовых) Beetroot=Свекла Beetroot Soup=Борщ +Blackberry=Ежевика Blackberries=Ежевика Wild Blueberries=Голубика +Blueberry=Голубика Blueberry Muffin=Кекс с голубикой Blueberry Pie=Пирог с голубикой Cabbage=Капуста @@ -24,6 +26,7 @@ Cocoa Beans=Какао-бобы Cookie=Печенье Bar of Dark Chocolate=Плитка темного шоколада Chocolate Block=Шоколадный блок +Coffee=Кофе Coffee Beans=Кофейные зерна Cup of Coffee=Чашка кофе Banana=Банан @@ -78,6 +81,7 @@ Garlic Braid=Связка чеснока Ginger=Имбирь Grapes=Виноград Trellis (place on soil before planting grapes)=Решетка (поставьте на почву перед посадкой винограда) +Hemp=Конопля Hemp Seed=Семена конопли Hemp Leaf=Лист конопли Bottle of Hemp Oil=Бутылка конопляного масла @@ -98,6 +102,7 @@ Seed=Семена Lettuce=Латук Melon Slice=Долька арбуза Melon=Арбуз +Mint=Мята Mint Seeds=Семена мяты Mint Leaf=Лист мяты Mint Tea=Чай с мятой @@ -126,6 +131,7 @@ Scarecrow Bottom=Основание пугала Pumpkin Bread=Тыквенный хлеб Pumpkin Dough=Тыквенное тесто Pumpkin=Тыква +Raspberry=Малина Raspberries=Малина Raspberry Smoothie=Малиновый смузи Rhubarb=Ревень @@ -144,6 +150,7 @@ Savanna Soil=Земля саванны Wet Savanna Soil=Увлажненная земля саванны Soil=Земля Wet Soil=Увлажненная земля +Soy=Соя Soy Pod=Соевый стручок Soy Sauce=Соевый соус Soy Milk=Соевое молоко diff --git a/locale/template.txt b/locale/template.txt deleted file mode 100644 index d5fa9b6..0000000 --- a/locale/template.txt +++ /dev/null @@ -1,177 +0,0 @@ -# textdomain: farming -Banana= -Banana Leaves= -Orange= -Artichoke= -Asparagus= -Barley Seed= -Barley= -Green Beans= -Bean Pole (place on soil before planting beans)= -Beetroot= -Beetroot Soup= -Blackberries= -Wild Blueberries= -Blueberry Muffin= -Blueberry Pie= -Cabbage= -Carrot= -Carrot Juice= -Golden Carrot= -Chili Pepper= -Bowl of Chili= -Chili Powder= -Raw Cocoa Beans= -Cocoa Beans= -Cookie= -Bar of Dark Chocolate= -Chocolate Block= -Coffee Beans= -Cup of Coffee= -Corn= -Corn on the Cob= -Popcorn= -Cornstarch= -Bottle of Ethanol= -Wild Cotton= -Cotton Seed= -Cotton= -String= -Cucumber= -Eggplant= -Garlic clove= -Garlic= -Garlic Braid= -Ginger= -Grapes= -Trellis (place on soil before planting grapes)= -Hemp Seed= -Hemp Leaf= -Bottle of Hemp Oil= -Hemp Fibre= -Hemp Block= -Hemp Rope= -Lettuce= -Melon Slice= -Melon= -Mint Seeds= -Mint Leaf= -Mint Tea= -Onion= -Onion Soup= -Parsley= -Pea Pod= -Pea Soup= -Peppercorn= -Green Pepper= -Yellow Pepper= -Red Pepper= -Ground Pepper= -Pineapple Top= -Pineapple= -Pineapple Ring= -Pineapple Juice= -Potato= -Baked Potato= -Cucumber and Potato Salad= -Pumpkin Slice= -Jack 'O Lantern (punch to turn on and off)= -Scarecrow Bottom= -Pumpkin Bread= -Pumpkin Dough= -Pumpkin= -Raspberries= -Raspberry Smoothie= -Rhubarb= -Rhubarb Pie= -Rice Seed= -Rice= -Rice Bread= -Rice Flour= -Rye seed= -Rye= -Oat seed= -Oats= -Multigrain Flour= -Multigrain Bread= -Soy Pod= -Soy Sauce= -Soy Milk= -Tofu= -Cooked Tofu= -Spinach= -Strawberry= -Sunflower= -Sunflower Seeds= -Toasted Sunflower Seeds= -Bottle of Sunflower Oil= -Sunflower Seed Bread= -Tomato= -Tomato Soup= -Vanilla= -Vanilla Extract= -Wheat Seed= -Wheat= -Straw= -Flour= -Bread= -Sliced Bread= -Toast= -Toast Sandwich= -Glass of Water= -Sugar= -Sugar Cube= -Caramel= -Salt= -Salt crystal= -Mayonnaise= -Rose Water= -Turkish Delight= -Garlic Bread= -Donut= -Chocolate Donut= -Apple Donut= -Porridge= -Jaffa Cake= -Apple Pie= -Cactus Juice= -Pasta= -Mac & Cheese= -Spaghetti= -Bibimbap= -Burger= -Salad= -Triple Berry Smoothie= -Spanish Potatoes= -Potato omelet= -Paella= -Vanilla Flan= -Vegan Cheese= -Onigiri= -Gyoza= -Mochi= -Gingerbread Man= -Hoe= -Wooden Hoe= -Stone Hoe= -Steel Hoe= -Bronze Hoe= -Mese Hoe= -Diamond Hoe= -Wood Hoe= -Hoe Bomb (use or throw on grassy areas to hoe land)= -Mithril Scythe (Use to harvest and replant crops)= -Seed= -Savanna Soil= -Wet Savanna Soil= -Soil= -Wet Soil= -Wooden Bowl= -Saucepan= -Cooking Pot= -Baking Tray= -Skillet= -Mortar and Pestle= -Cutting Board= -Juicer= -Glass Mixing Bowl= From b7603c243990b6d0b08f8dd9eb8faedd1178e7a8 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Tue, 10 Sep 2024 06:58:32 +0100 Subject: [PATCH 44/49] fix nil --- init.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/init.lua b/init.lua index e4fae44..217b23a 100644 --- a/init.lua +++ b/init.lua @@ -12,7 +12,7 @@ local S = minetest.get_translator("farming") farming = { mod = "redo", - version = "20240907", + version = "20240910", path = minetest.get_modpath("farming"), select = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, select_final = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}}, @@ -482,9 +482,8 @@ function farming.place_seed(itemstack, placer, pointed_thing, plantname) minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}) - minetest.log("action", string.format( - "%s planted %s at %s", - placer:is_player() and placer:get_player_name() or "A mod", + minetest.log("action", string.format("%s planted %s at %s", + (placer and placer:is_player() and placer:get_player_name() or "A mod"), itemstack:get_name(), minetest.pos_to_string(pt.above) )) From 0040f21962c1fe9e3ca832d4a18c0eb6ebb2fdbf Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Wed, 11 Sep 2024 11:33:58 +0100 Subject: [PATCH 45/49] add missing {grassland} groups --- soil.lua | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/soil.lua b/soil.lua index 215342b..7572d57 100644 --- a/soil.lua +++ b/soil.lua @@ -71,7 +71,8 @@ if minetest.registered_nodes["default:dry_dirt"] then "default_dry_dirt.png" }, drop = "default:dry_dirt", - groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 2, field = 1}, + groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 2, grassland = 1, + field = 1}, is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { @@ -87,7 +88,8 @@ if minetest.registered_nodes["default:dry_dirt"] then "default_dry_dirt.png^farming_soil_wet_side.png" }, drop = "default:dry_dirt", - groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 3, field = 1}, + groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 3, grassland = 1, + field = 1}, is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { @@ -105,7 +107,8 @@ minetest.register_node("farming:soil", { description = S("Soil"), tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, drop = "default:dirt", - groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 2, field = 1}, + groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 2, grassland = 1, + field = 1}, is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { @@ -122,7 +125,8 @@ minetest.register_node("farming:soil_wet", { "default_dirt.png^farming_soil_wet_side.png" }, drop = "default:dirt", - groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 3, field = 1}, + groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 3, grassland = 1, + field = 1}, is_ground_content = false, sounds = default.node_sound_dirt_defaults(), soil = { From 87d6973420a23fdb8995861148f18910e4886238 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Thu, 12 Sep 2024 07:57:25 +0100 Subject: [PATCH 46/49] tweak code --- init.lua | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/init.lua b/init.lua index 217b23a..7d19dae 100644 --- a/init.lua +++ b/init.lua @@ -12,7 +12,7 @@ local S = minetest.get_translator("farming") farming = { mod = "redo", - version = "20240910", + version = "20240912", path = minetest.get_modpath("farming"), select = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, select_final = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}}, @@ -63,9 +63,7 @@ local random = math.random local floor = math.floor local time_speed = tonumber(minetest.settings:get("time_speed")) or 72 local SECS_PER_CYCLE = (time_speed > 0 and (24 * 60 * 60) / time_speed) or 0 -local function clamp(x, min, max) - return (x < min and min) or (x > max and max) or x -end +local function clamp(x, min, max) return (x < min and min) or (x > max and max) or x end -- return amount of day or night that has elapsed -- dt is time elapsed, count_day if true counts day, otherwise night @@ -237,8 +235,9 @@ local function reg_plant_stages(plant_name, stage, force_last) return stages end +-- split name and stage and register crop -local register_plant_node = function(node) +local function register_plant_node(node) local plant_name, stage = plant_name_stage(node) @@ -250,6 +249,7 @@ local register_plant_node = function(node) end end +-- check for further growth and set or stop timer local function set_growing(pos, stages_left) @@ -284,6 +284,15 @@ function farming.handle_growth(pos, node) if stages_left then set_growing(pos, stages_left) end end +-- register crops nodes and add timer functions + +minetest.after(0, function() + + for _, node_def in pairs(minetest.registered_nodes) do + register_plant_node(node_def) + end +end) + -- Just in case a growing type or added node is missed (also catches existing -- nodes added to map before timers were incorporated). From a415cf5364d2ad1248e05bb7d7a3bda57a4a837e Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Thu, 12 Sep 2024 11:21:32 +0100 Subject: [PATCH 47/49] tweak poisson functions --- hoes.lua | 13 +++------ init.lua | 6 ++--- statistics.lua | 73 ++++++++++++++++++++++---------------------------- 3 files changed, 37 insertions(+), 55 deletions(-) diff --git a/hoes.lua b/hoes.lua index 29ae2cf..e686575 100644 --- a/hoes.lua +++ b/hoes.lua @@ -251,7 +251,6 @@ local function hoe_area(pos, player) end -- replace dirt with tilled soil - res = nil res = minetest.find_nodes_in_area_under_air( {x = pos.x - r, y = pos.y - 1, z = pos.z - r}, {x = pos.x + r, y = pos.y + 2, z = pos.z + r}, @@ -318,13 +317,10 @@ minetest.register_entity("farming:hoebomb_entity", { local function throw_potion(itemstack, player) - local playerpos = player:get_pos() + local pos = player:get_pos() local obj = minetest.add_entity({ - x = playerpos.x, - y = playerpos.y + 1.5, - z = playerpos.z - }, "farming:hoebomb_entity") + x = pos.x, y = pos.y + 1.5, z = pos.z}, "farming:hoebomb_entity") if not obj then return end @@ -440,10 +436,7 @@ minetest.register_tool("farming:scythe_mithril", { if obj then obj:set_velocity({ - x = math.random(-10, 10) / 9, - y = 3, - z = math.random(-10, 10) / 9 - }) + x = math.random() - 0.5, y = 3, z = math.random() - 0.5}) end end end diff --git a/init.lua b/init.lua index 7d19dae..a562edc 100644 --- a/init.lua +++ b/init.lua @@ -17,8 +17,7 @@ farming = { select = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, select_final = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}}, registered_plants = {}, - min_light = 12, - max_light = 15, + min_light = 12, max_light = 15, mapgen = minetest.get_mapgen_setting("mg_name"), use_utensils = minetest.settings:get_bool("farming_use_utensils") ~= false, mtg = minetest.get_modpath("default"), @@ -59,8 +58,7 @@ end -- stats, locals, settings, function helper local statistics = dofile(farming.path .. "/statistics.lua") -local random = math.random -local floor = math.floor +local random, floor = math.random, math.floor local time_speed = tonumber(minetest.settings:get("time_speed")) or 72 local SECS_PER_CYCLE = (time_speed > 0 and (24 * 60 * 60) / time_speed) or 0 local function clamp(x, min, max) return (x < min and min) or (x > max and max) or x end diff --git a/statistics.lua b/statistics.lua index c5d5396..df12bd9 100644 --- a/statistics.lua +++ b/statistics.lua @@ -3,36 +3,36 @@ -- https://en.wikipedia.org/wiki/Error_function local statistics = {} -local ROOT_2 = math.sqrt(2.0) -local erf -local erf_inv +local random, floor, ceil = math.random, math.floor, math.ceil +local exp, log, sqrt = math.exp, math.log, math.sqrt +local ROOT_2 = sqrt(2.0) local A = 8 * (math.pi - 3.0) / (3.0 * math.pi * (4.0 - math.pi)) local B = 4.0 / math.pi local C = 2.0 / (math.pi * A) local D = 1.0 / A -erf = function(x) +local function erf(x) - if x == 0 then return 0; end + if x == 0 then return 0 end local xSq = x * x local aXSq = A * xSq - local v = math.sqrt(1.0 - math.exp(-xSq * (B + aXSq) / (1.0 + aXSq))) + local v = sqrt(1.0 - exp(-xSq * (B + aXSq) / (1.0 + aXSq))) return (x > 0 and v) or -v end -erf_inv = function(x) +local function erf_inv(x) - if x == 0 then return 0; end + if x == 0 then return 0 end - if x <= -1 or x >= 1 then return nil; end + if x <= -1 or x >= 1 then return nil end - local y = math.log(1 - x * x) + local y = log(1 - x * x) local u = C + 0.5 * y - local v = math.sqrt(math.sqrt(u * u - D * y) - u) + local v = sqrt(sqrt(u * u - D * y) - u) return (x > 0 and v) or -v end @@ -43,14 +43,10 @@ local function std_normal(u) end -local poisson -local cdf_table = {} - - local function generate_cdf(lambda_index, lambda) - local max = math.ceil(4 * lambda) - local pdf = math.exp(-lambda) + local max = ceil(4 * lambda) + local pdf = exp(-lambda) local cdf = pdf local t = { [0] = pdf } @@ -64,30 +60,32 @@ local function generate_cdf(lambda_index, lambda) end +local cdf_table = {} + for li = 1, 100 do cdf_table[li] = generate_cdf(li, 0.25 * li) end -poisson = function(lambda, max) +local function poisson(lambda, max) if max < 2 then - return (math.random() < math.exp(-lambda) and 0) or 1 + return (random() < exp(-lambda) and 0) or 1 elseif lambda >= 2 * max then return max end - local u = math.random() - local lambda_index = math.floor(4 * lambda + 0.5) + local u = random() + local lambda_index = floor(4 * lambda + 0.5) local cdfs = cdf_table[lambda_index] if cdfs then lambda = 0.25 * lambda_index - if u < cdfs[0] then return 0; end - if max > #cdfs then max = #cdfs + 1 else max = math.floor(max); end - if u >= cdfs[max - 1] then return max; end + if u < cdfs[0] then return 0 end + if max > #cdfs then max = #cdfs + 1 else max = floor(max) end + if u >= cdfs[max - 1] then return max end if max > 4 then -- Binary search @@ -95,30 +93,27 @@ poisson = function(lambda, max) while s + 1 < max do - local m = math.floor(0.5 * (s + max)) + local m = floor(0.5 * (s + max)) - if u < cdfs[m] then max = m; else s = m; end + if u < cdfs[m] then max = m else s = m end end else for i = 1, max - 1 do - if u < cdfs[i] then return i; end + if u < cdfs[i] then return i end end end return max else - local x = lambda + math.sqrt(lambda) * std_normal(u) + local x = lambda + sqrt(lambda) * std_normal(u) - return (x < 0.5 and 0) or (x >= max - 0.5 and max) or math.floor(x + 0.5) + return (x < 0.5 and 0) or (x >= max - 0.5 and max) or floor(x + 0.5) end end --- Error function. +-- Error and Inverse error functions statistics.erf = erf - --- Inverse error function. - statistics.erf_inv = erf_inv --- Standard normal distribution function (mean 0, standard deviation 1). @@ -126,13 +121,9 @@ statistics.erf_inv = erf_inv statistics.std_normal = function() - local u = math.random() + local u = random() - if u < 0.001 then - return -3.0 - elseif u > 0.999 then - return 3.0 - end + if u < 0.001 then return -3.0 elseif u > 0.999 then return 3.0 end return std_normal(u) end @@ -144,7 +135,7 @@ end statistics.normal = function(mu, sigma) - local u = math.random() + local u = random() if u < 0.001 then return mu - 3.0 * sigma @@ -164,7 +155,7 @@ statistics.poisson = function(lambda, max) lambda, max = tonumber(lambda), tonumber(max) - if not lambda or not max or lambda <= 0 or max < 1 then return 0; end + if not lambda or not max or lambda <= 0 or max < 1 then return 0 end return poisson(lambda, max) end From 201da1cc34bd11dc1a66551c7cc1d34238c3b564 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Thu, 12 Sep 2024 17:23:32 +0100 Subject: [PATCH 48/49] new popcorn, potato salad texture --- textures/farming_popcorn.png | Bin 258 -> 261 bytes textures/farming_potato_salad.png | Bin 195 -> 168 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/textures/farming_popcorn.png b/textures/farming_popcorn.png index 54f6bf09b38d049d347bce33ea72dd9f110ad422..9aa758074edb93788f6f1c433fd30b9798ac91ac 100644 GIT binary patch delta 183 zcmV;o07(CW0)+yQBnUZBOjJbx05Op%Hh;i41%m(p00DGTPE!Ct=GbNc004SPL_t&- z(?!hz5``cL1W=|_^rO{w|HJ-;v_{7n)(40j$2s=yck82z$a&u|_*GnuK?lCz$6&yd zTC3s}tPt-KW^90}h9EJv`-tqoiK!Y-&H+O3Tj!Dx97FLeaq(_hf*q{NRURQ-eIx|R l96_>z36@BoNPb#sF8+402|6#(a!RiNtl?godd7pdhkg0I#(Our&QTBme*a07*qoM6N<$f@w4(2LJ#7 delta 117 zcmZ3%c$jfQXkMhJi(?4K_2dKvz710yUzSW|F;Kp{S4QVZSlqgId_rFOTIKrX$q5NM z;hOsTfx-z1B0Bno-oh+KPDi;~S$bI|BwU=kdwY2syChwmdwE$Meo3;jvQBuz$k4Hv V@7b!FOS>3=z|+;wWt~$(6975~CinmV From 663cf0b86c22bbbd9751924945fa29bf3fccdbda Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 14 Sep 2024 12:37:07 +0100 Subject: [PATCH 49/49] 16px vanilla_flan, spaghetti, burger --- alt_textures/farming_vanilla_flan_32px.png | Bin 0 -> 1216 bytes license.txt | 6 +++++- textures/farming_burger.png | Bin 270 -> 288 bytes textures/farming_spaghetti.png | Bin 212 -> 195 bytes textures/farming_vanilla_flan.png | Bin 1216 -> 264 bytes 5 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 alt_textures/farming_vanilla_flan_32px.png diff --git a/alt_textures/farming_vanilla_flan_32px.png b/alt_textures/farming_vanilla_flan_32px.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b9ff06a63d54e5208ede2b8e3d1d8a5c7a11ff GIT binary patch literal 1216 zcmWkudoWD6JZ~v=VF{JJoVxrA$zMa| zt)w!SQR$1RoMls2%&8ph$(Twto=jghkiNPjn^k|F+f=}7&UH}T+%{QeOWk6UiY=tl zk=%766%N!*7AfCCZf~W^?a3b-sbXuY(3&c;)s%Aot@LQV=2mr<+h651`cOdCdJyR@ zA`_4XZ_*$n^4&z{MWg~E^Cb0rQtM70xsn?GRGn~4x>r%eufE{i`(W=x<9^bzpD48O zCyD@~@FPz}q(zGWO{4#(DxaZR-!~OLL-N3HPlJdeXi5>Jmim3XD~RySoPm2gy`^e@oa@=WpbBIB5+b?V+SCl(ZfoZ6TyPLH#A;V|SYI z!nqQOBrPpXsZ^Ghmd3@!CAsW-qy1yrVGnmtu>1ZD*6Qmn90vhQ(b^$#ZD22vMopN6 zJ_t77F5{{?JyKRg9=zx6x|EagCQr=X&pmbxeHPwnap&WozFRNQ&L$j|3eL0C`J`b6iBYFkNi;;fvmk__~Wj!;{BkenoF-iHT0)XN&3j zHHAjgO~Q4ay;^>TGqd>l_CV{+%q1CFnR|3Io949yTI4R;$x8`PH#YX<81UMaZ8thb zcN}0CCl-kAoM^hyTV8$lk!kwtuJUTD$Z+3$-SCK^fxh7*M@~^klk5vOH7_vCw)~*! zxi7THZQGI96#XzhDJqoao%==QZExSDiqYjsjvk2=P7c!x zoKS!EVVIZr9#7B}G_YxodS)eiFZ9|M%@Qs@an3<`LS3!?F=bBqyhCYoxF(NNVM;IA zC2Cl>D)YUUTgUujf9q?(ytzxA^yHil!GeIdEfGqutfbBV)f1!RFK6;;!)~(^IorOc NkPFwHbKB8R{69GRG*18k literal 0 HcmV?d00001 diff --git a/license.txt b/license.txt index 0857019..b3e9b07 100644 --- a/license.txt +++ b/license.txt @@ -31,6 +31,10 @@ Created by TenPlus1 (CC0): Created by Hugues Ross (CC BY-SA 4.0): ethereal_strawberry*.png +Created by NameNotQuality (CC0): + farming_vanilla_flan.png + farming_spaghetti.png + Created by Oz-tal (license: CC BY-SA 3.0): crops_garlic_*.png crops_onion.png @@ -189,7 +193,7 @@ Created by Felfa (CC0) farming_paella*.png farming_potato_omelette.png farming_spanish_potatoes_32px.png - farming_vanilla_flan.png + farming_vanilla_flan_32px.png farming_sunflower*.png [except sunflower_bread.png] farming_mayo*.png diff --git a/textures/farming_burger.png b/textures/farming_burger.png index 572e47abe02068e1a4772a95c12b1c3acd999d9c..59bc3405b39f95ba8fef76a62bb88cb1c2f0fcfb 100644 GIT binary patch delta 226 zcmV<803H910-yqrBnC@ROjJcNkt!yC(}yzEi8SAmJgLAe`Ktx{%xLw`o&M5n``xbC z>zn`c<^THg{USMD00001bW%=J06^y0W&i*HgGod|R2b8Zj@uH#APhvQXhOg?wGib0 zztkkyj*spzJClLThhwub8P^F1TcYw%It-FML zXSqL0FCEmZzD0;--(x2Nf(t}Y5f}(jh5CT#dm=qwDXF#Q(Gcw)wal7#CRJ^lg^`&Z c9p!oA0|loDEN?t}I{*Lx07*qoM6N<$f;)w0&Hw-a delta 208 zcmV;>05AWb0*(TZBnCWCOjJbxkt!yC-;zA3z%2Qz1^&`(``xbC>zn`j^SPhb7XSbN z0d!JMQvg8b*k%9#0DwtEK~xyiZI9s&10e{5y?Fzx<0kt4?>azt*^f1bq#vf%l>Vw# zKyX`@D$=zpzH2crqH}8O1NfCWCjx|52ReR$5#4}U`UtI9KF((wZIBK3k4(8gT~{6e zfo_n=1agqFiR}=uBg*Stij8jV9I(H`(XY#@UUym1{kcGOMSK7>C$%IHOGPcsO)Uv1kdl;= z61O_8KB8l2bw(Wt1rsx|67!WkY3l one74S%sG6qTAlEGG|uPv2G7SA3AV~C-2eap07*qoM6N<$f`{8VI{*Lx diff --git a/textures/farming_vanilla_flan.png b/textures/farming_vanilla_flan.png index c8b9ff06a63d54e5208ede2b8e3d1d8a5c7a11ff..10008c4be51d00527b9a41c54d16283ccca4153f 100644 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!cYsfbt0IuWz)-5j(5uHV&6r`G zA;T$qhRe1Lt5ewDg)=;hW!O-q{I^5w*#wp2bNn7|j^4R@$N#Oar_P-Ge=70+wSqhM zZohlc{pS7a|NsB{E)hQsG>fq$$S;_|;n|HeASc_?#W6(Ua&P}dz6J#j24xd&@3kg> z|Lga5<>cCykpMMw`AT^5|=ZBnT2>=WG}}4%G|R-=#I{g;Df(H zKk(h??tf&si%BNvUdxF36!+@YL{xu|iEWD6JZ~v=VF{JJoVxrA$zMa| zt)w!SQR$1RoMls2%&8ph$(Twto=jghkiNPjn^k|F+f=}7&UH}T+%{QeOWk6UiY=tl zk=%766%N!*7AfCCZf~W^?a3b-sbXuY(3&c;)s%Aot@LQV=2mr<+h651`cOdCdJyR@ zA`_4XZ_*$n^4&z{MWg~E^Cb0rQtM70xsn?GRGn~4x>r%eufE{i`(W=x<9^bzpD48O zCyD@~@FPz}q(zGWO{4#(DxaZR-!~OLL-N3HPlJdeXi5>Jmim3XD~RySoPm2gy`^e@oa@=WpbBIB5+b?V+SCl(ZfoZ6TyPLH#A;V|SYI z!nqQOBrPpXsZ^Ghmd3@!CAsW-qy1yrVGnmtu>1ZD*6Qmn90vhQ(b^$#ZD22vMopN6 zJ_t77F5{{?JyKRg9=zx6x|EagCQr=X&pmbxeHPwnap&WozFRNQ&L$j|3eL0C`J`b6iBYFkNi;;fvmk__~Wj!;{BkenoF-iHT0)XN&3j zHHAjgO~Q4ay;^>TGqd>l_CV{+%q1CFnR|3Io949yTI4R;$x8`PH#YX<81UMaZ8thb zcN}0CCl-kAoM^hyTV8$lk!kwtuJUTD$Z+3$-SCK^fxh7*M@~^klk5vOH7_vCw)~*! zxi7THZQGI96#XzhDJqoao%==QZExSDiqYjsjvk2=P7c!x zoKS!EVVIZr9#7B}G_YxodS)eiFZ9|M%@Qs@an3<`LS3!?F=bBqyhCYoxF(NNVM;IA zC2Cl>D)YUUTgUujf9q?(ytzxA^yHil!GeIdEfGqutfbBV)f1!RFK6;;!)~(^IorOc NkPFwHbKB8R{69GRG*18k