From 745a3b003697065525a77a6748d34aa73d9bc90d Mon Sep 17 00:00:00 2001 From: "A. Demant" Date: Wed, 28 Nov 2018 16:54:51 +0100 Subject: [PATCH] add new mortar for awards --- README.md | 62 ++++ README.txt | 2 + api.txt | 53 ++++ coffee.lua | 46 +++ compatibility.lua | 172 +++++++++++ craft.lua | 9 + crops/barley.lua | 105 +++++++ crops/beans.lua | 249 ++++++++++++++++ crops/beetroot.lua | 85 ++++++ crops/blueberry.lua | 85 ++++++ crops/carrot.lua | 96 ++++++ crops/chili.lua | 92 ++++++ crops/cocoa.lua | 210 +++++++++++++ crops/coffee.lua | 123 ++++++++ crops/corn.lua | 149 +++++++++ crops/cotton.lua | 151 ++++++++++ crops/cucumber.lua | 56 ++++ crops/garlic.lua | 128 ++++++++ crops/grapes.lua | 256 ++++++++++++++++ crops/hemp.lua | 251 ++++++++++++++++ crops/melon.lua | 86 ++++++ crops/onion.lua | 68 +++++ crops/peas.lua | 89 ++++++ crops/pepper.lua | 106 +++++++ crops/pineapple.lua | 129 ++++++++ crops/potato.lua | 94 ++++++ crops/pumpkin.lua | 213 +++++++++++++ crops/raspberry.lua | 69 +++++ crops/rhubarb.lua | 66 ++++ crops/spelt.lua | 171 +++++++++++ crops/tomato.lua | 79 +++++ crops/wheat.lua | 244 +++++++++++++++ farming.conf_example | 34 +++ food.lua | 188 ++++++++++++ grains.lua | 197 ++++++++++++ grass.lua | 44 +++ hoes.lua | 332 +++++++++++++++++++++ locale/fr.po | 259 ++++++++++++++++ locale/pt.po | 258 ++++++++++++++++ locale/ru.po | 262 ++++++++++++++++ locale/template.pot | 258 ++++++++++++++++ lucky_block.lua | 38 +++ mapgen.lua | 142 +++++++++ mod.conf | 2 +- nohup.out | 0 soil.lua | 67 +++++ statistics.lua | 174 +++++++++++ textures/banana_leaf.png | Bin 0 -> 412 bytes textures/banana_single.png | Bin 0 -> 198 bytes textures/crops_garlic.png | Bin 0 -> 643 bytes textures/crops_garlic_braid.png | Bin 0 -> 1104 bytes textures/crops_garlic_braid_side.png | Bin 0 -> 1083 bytes textures/crops_garlic_clove.png | Bin 0 -> 520 bytes textures/crops_garlic_plant_1.png | Bin 0 -> 109 bytes textures/crops_garlic_plant_2.png | Bin 0 -> 113 bytes textures/crops_garlic_plant_3.png | Bin 0 -> 164 bytes textures/crops_garlic_plant_4.png | Bin 0 -> 209 bytes textures/crops_garlic_plant_5.png | Bin 0 -> 257 bytes textures/crops_onion.png | Bin 0 -> 756 bytes textures/crops_onion_plant_1.png | Bin 0 -> 128 bytes textures/crops_onion_plant_2.png | Bin 0 -> 135 bytes textures/crops_onion_plant_3.png | Bin 0 -> 146 bytes textures/crops_onion_plant_4.png | Bin 0 -> 193 bytes textures/crops_onion_plant_5.png | Bin 0 -> 352 bytes textures/crops_pepper.png | Bin 0 -> 227 bytes textures/crops_pepper_ground.png | Bin 0 -> 189 bytes textures/crops_pepper_plant_1.png | Bin 0 -> 111 bytes textures/crops_pepper_plant_2.png | Bin 0 -> 136 bytes textures/crops_pepper_plant_3.png | Bin 0 -> 161 bytes textures/crops_pepper_plant_4.png | Bin 0 -> 217 bytes textures/crops_pepper_plant_5.png | Bin 0 -> 231 bytes textures/crops_peppercorn.png | Bin 0 -> 127 bytes textures/default_junglegrass.png | Bin 0 -> 258 bytes textures/farming_baked_potato.png | Bin 0 -> 305 bytes textures/farming_baking_tray.png | Bin 0 -> 148 bytes textures/farming_beanbush.png | Bin 0 -> 217 bytes textures/farming_beanpole.png | Bin 0 -> 211 bytes textures/farming_beanpole_1.png | Bin 0 -> 236 bytes textures/farming_beanpole_2.png | Bin 0 -> 258 bytes textures/farming_beanpole_3.png | Bin 0 -> 293 bytes textures/farming_beanpole_4.png | Bin 0 -> 344 bytes textures/farming_beanpole_5.png | Bin 0 -> 343 bytes textures/farming_beans.png | Bin 0 -> 186 bytes textures/farming_blueberries.png | Bin 0 -> 162 bytes textures/farming_bottle_ethanol.png | Bin 0 -> 167 bytes textures/farming_bowl.png | Bin 0 -> 144 bytes textures/farming_bread_slice.png | Bin 0 -> 157 bytes textures/farming_carrot.png | Bin 0 -> 212 bytes textures/farming_chili_pepper.png | Bin 0 -> 163 bytes textures/farming_chocolate_dark.png | Bin 0 -> 189 bytes textures/farming_cocoa_1.png | Bin 0 -> 226 bytes textures/farming_cocoa_2.png | Bin 0 -> 232 bytes textures/farming_cocoa_3.png | Bin 0 -> 300 bytes textures/farming_cocoa_4.png | Bin 0 -> 247 bytes textures/farming_cocoa_beans.png | Bin 0 -> 186 bytes textures/farming_coffee_beans.png | Bin 0 -> 195 bytes textures/farming_coffee_beans_raw.png | Bin 0 -> 195 bytes textures/farming_cookie.png | Bin 0 -> 548 bytes textures/farming_corn.png | Bin 0 -> 195 bytes textures/farming_cucumber.png | Bin 0 -> 176 bytes textures/farming_cucumber_1.png | Bin 0 -> 119 bytes textures/farming_cucumber_2.png | Bin 0 -> 145 bytes textures/farming_cucumber_3.png | Bin 0 -> 208 bytes textures/farming_cucumber_4.png | Bin 0 -> 243 bytes textures/farming_cutting_board.png | Bin 0 -> 186 bytes textures/farming_donut.png | Bin 0 -> 252 bytes textures/farming_donut_apple.png | Bin 0 -> 248 bytes textures/farming_donut_chocolate.png | Bin 0 -> 252 bytes textures/farming_flail.png | Bin 0 -> 300 bytes textures/farming_garlic_bread.png | Bin 0 -> 185 bytes textures/farming_grapebush.png | Bin 0 -> 143 bytes textures/farming_grapes.png | Bin 0 -> 172 bytes textures/farming_hemp_leaf.png | Bin 0 -> 172 bytes textures/farming_hoe_bomb.png | Bin 0 -> 188 bytes textures/farming_juicer.png | Bin 0 -> 154 bytes textures/farming_melon_1.png | Bin 0 -> 131 bytes textures/farming_melon_2.png | Bin 0 -> 143 bytes textures/farming_melon_3.png | Bin 0 -> 160 bytes textures/farming_melon_4.png | Bin 0 -> 181 bytes textures/farming_melon_5.png | Bin 0 -> 193 bytes textures/farming_melon_6.png | Bin 0 -> 217 bytes textures/farming_melon_7.png | Bin 0 -> 242 bytes textures/farming_melon_side.png | Bin 0 -> 270 bytes textures/farming_melon_slice.png | Bin 0 -> 223 bytes textures/farming_melon_top.png | Bin 0 -> 272 bytes textures/farming_mixing_bowl.png | Bin 0 -> 132 bytes textures/farming_mortar_pestle.png | Bin 0 -> 171 bytes textures/farming_orange.png | Bin 0 -> 233 bytes textures/farming_pea_1.png | Bin 0 -> 170 bytes textures/farming_pea_2.png | Bin 0 -> 185 bytes textures/farming_pea_3.png | Bin 0 -> 354 bytes textures/farming_pea_4.png | Bin 0 -> 441 bytes textures/farming_pea_5.png | Bin 0 -> 592 bytes textures/farming_pea_peas.png | Bin 0 -> 535 bytes textures/farming_pea_pod.png | Bin 0 -> 483 bytes textures/farming_pea_soup.png | Bin 0 -> 160 bytes textures/farming_pineapple.png | Bin 0 -> 139 bytes textures/farming_pineapple_1.png | Bin 0 -> 108 bytes textures/farming_pineapple_2.png | Bin 0 -> 120 bytes textures/farming_pineapple_3.png | Bin 0 -> 125 bytes textures/farming_pineapple_4.png | Bin 0 -> 135 bytes textures/farming_pineapple_5.png | Bin 0 -> 163 bytes textures/farming_pineapple_6.png | Bin 0 -> 200 bytes textures/farming_pineapple_7.png | Bin 0 -> 207 bytes textures/farming_pineapple_8.png | Bin 0 -> 193 bytes textures/farming_pineapple_juice.png | Bin 0 -> 166 bytes textures/farming_pineapple_ring.png | Bin 0 -> 161 bytes textures/farming_pineapple_top.png | Bin 0 -> 142 bytes textures/farming_porridge.png | Bin 0 -> 192 bytes textures/farming_pot.png | Bin 0 -> 160 bytes textures/farming_potato.png | Bin 0 -> 233 bytes textures/farming_potato_salad.png | Bin 0 -> 324 bytes textures/farming_pumpkin_1.png | Bin 0 -> 158 bytes textures/farming_pumpkin_2.png | Bin 0 -> 181 bytes textures/farming_pumpkin_3.png | Bin 0 -> 198 bytes textures/farming_pumpkin_4.png | Bin 0 -> 228 bytes textures/farming_pumpkin_5.png | Bin 0 -> 258 bytes textures/farming_pumpkin_6.png | Bin 0 -> 261 bytes textures/farming_pumpkin_7.png | Bin 0 -> 268 bytes textures/farming_pumpkin_8.png | Bin 0 -> 273 bytes textures/farming_pumpkin_bread.png | Bin 0 -> 198 bytes textures/farming_pumpkin_dough.png | Bin 0 -> 192 bytes textures/farming_pumpkin_face_off.png | Bin 0 -> 259 bytes textures/farming_pumpkin_face_on.png | Bin 0 -> 268 bytes textures/farming_pumpkin_side.png | Bin 0 -> 231 bytes textures/farming_pumpkin_slice.png | Bin 0 -> 203 bytes textures/farming_pumpkin_top.png | Bin 0 -> 270 bytes textures/farming_raspberries.png | Bin 0 -> 194 bytes textures/farming_rhubarb.png | Bin 0 -> 164 bytes textures/farming_roasted_powder.png | Bin 0 -> 159 bytes textures/farming_rose_water.png | Bin 0 -> 176 bytes textures/farming_salt.png | Bin 0 -> 181 bytes textures/farming_saucepan.png | Bin 0 -> 170 bytes textures/farming_skillet.png | Bin 0 -> 169 bytes textures/farming_spelt_seed_roasted.png | Bin 0 -> 144 bytes textures/farming_sugar.png | Bin 0 -> 127 bytes textures/farming_toast.png | Bin 0 -> 157 bytes textures/farming_toast_sandwich.png | Bin 0 -> 173 bytes textures/farming_tool_bronzehoe.png | Bin 0 -> 256 bytes textures/farming_tool_diamondhoe.png | Bin 0 -> 240 bytes textures/farming_tool_mesehoe.png | Bin 0 -> 230 bytes textures/farming_tool_mortar_pestle_hl.png | Bin 0 -> 178 bytes textures/farming_tool_spinningwheel.png | Bin 0 -> 2050 bytes textures/farming_tool_steelhoe.png | Bin 0 -> 229 bytes textures/farming_tool_stonehoe.png | Bin 0 -> 250 bytes textures/farming_tool_woodhoe.png | Bin 0 -> 218 bytes textures/farming_trellis.png | Bin 0 -> 225 bytes textures/farming_turkish_delight.png | Bin 0 -> 155 bytes textures/farming_wheat_seed_roasted.png | Bin 0 -> 141 bytes textures/farming_wildspelt.png | Bin 0 -> 220 bytes textures/farming_wildwheat.png | Bin 0 -> 228 bytes textures/farming_wildwheat_1.png | Bin 0 -> 117 bytes textures/farming_wildwheat_2.png | Bin 0 -> 134 bytes textures/farming_wildwheat_3.png | Bin 0 -> 158 bytes textures/farming_wildwheat_4.png | Bin 0 -> 170 bytes textures/farming_wildwheat_5.png | Bin 0 -> 188 bytes textures/farming_wildwheat_6.png | Bin 0 -> 210 bytes textures/farming_wildwheat_7.png | Bin 0 -> 225 bytes textures/farming_wildwheat_8.png | Bin 0 -> 266 bytes textures/farming_wildwheat_seed.png | Bin 0 -> 138 bytes textures/farming_yarn.png | Bin 0 -> 2789 bytes textures/src/Garnknäuel_gefärbt.jpg | Bin 0 -> 37842 bytes textures/src/SpinningWheel.svg | 61 ++++ textures/strawberry.png | Bin 0 -> 365 bytes textures/vessels_drinking_cup.png | Bin 0 -> 145 bytes utensils.lua | 14 + 206 files changed, 6123 insertions(+), 1 deletion(-) create mode 100644 README.md create mode 100644 api.txt create mode 100644 coffee.lua create mode 100644 compatibility.lua create mode 100644 crops/barley.lua create mode 100644 crops/beans.lua create mode 100644 crops/beetroot.lua create mode 100644 crops/blueberry.lua create mode 100644 crops/carrot.lua create mode 100644 crops/chili.lua create mode 100644 crops/cocoa.lua create mode 100644 crops/coffee.lua create mode 100644 crops/corn.lua create mode 100644 crops/cotton.lua create mode 100644 crops/cucumber.lua create mode 100644 crops/garlic.lua create mode 100644 crops/grapes.lua create mode 100644 crops/hemp.lua create mode 100644 crops/melon.lua create mode 100644 crops/onion.lua create mode 100644 crops/peas.lua create mode 100644 crops/pepper.lua create mode 100644 crops/pineapple.lua create mode 100644 crops/potato.lua create mode 100644 crops/pumpkin.lua create mode 100644 crops/raspberry.lua create mode 100644 crops/rhubarb.lua create mode 100644 crops/spelt.lua create mode 100644 crops/tomato.lua create mode 100644 crops/wheat.lua create mode 100644 farming.conf_example create mode 100644 food.lua create mode 100644 grains.lua create mode 100644 grass.lua create mode 100644 hoes.lua create mode 100644 locale/fr.po create mode 100644 locale/pt.po create mode 100644 locale/ru.po create mode 100644 locale/template.pot create mode 100644 lucky_block.lua create mode 100644 mapgen.lua create mode 100644 nohup.out create mode 100644 soil.lua create mode 100644 statistics.lua create mode 100644 textures/banana_leaf.png create mode 100644 textures/banana_single.png create mode 100644 textures/crops_garlic.png create mode 100644 textures/crops_garlic_braid.png create mode 100644 textures/crops_garlic_braid_side.png create mode 100644 textures/crops_garlic_clove.png create mode 100644 textures/crops_garlic_plant_1.png create mode 100644 textures/crops_garlic_plant_2.png create mode 100644 textures/crops_garlic_plant_3.png create mode 100644 textures/crops_garlic_plant_4.png create mode 100644 textures/crops_garlic_plant_5.png create mode 100644 textures/crops_onion.png create mode 100644 textures/crops_onion_plant_1.png create mode 100644 textures/crops_onion_plant_2.png create mode 100644 textures/crops_onion_plant_3.png create mode 100644 textures/crops_onion_plant_4.png create mode 100644 textures/crops_onion_plant_5.png create mode 100644 textures/crops_pepper.png create mode 100644 textures/crops_pepper_ground.png create mode 100644 textures/crops_pepper_plant_1.png create mode 100644 textures/crops_pepper_plant_2.png create mode 100644 textures/crops_pepper_plant_3.png create mode 100644 textures/crops_pepper_plant_4.png create mode 100644 textures/crops_pepper_plant_5.png create mode 100644 textures/crops_peppercorn.png create mode 100644 textures/default_junglegrass.png create mode 100644 textures/farming_baked_potato.png create mode 100644 textures/farming_baking_tray.png create mode 100644 textures/farming_beanbush.png create mode 100644 textures/farming_beanpole.png create mode 100644 textures/farming_beanpole_1.png create mode 100644 textures/farming_beanpole_2.png create mode 100644 textures/farming_beanpole_3.png create mode 100644 textures/farming_beanpole_4.png create mode 100644 textures/farming_beanpole_5.png create mode 100644 textures/farming_beans.png create mode 100644 textures/farming_blueberries.png create mode 100644 textures/farming_bottle_ethanol.png create mode 100644 textures/farming_bowl.png create mode 100644 textures/farming_bread_slice.png create mode 100644 textures/farming_carrot.png create mode 100644 textures/farming_chili_pepper.png create mode 100644 textures/farming_chocolate_dark.png create mode 100644 textures/farming_cocoa_1.png create mode 100644 textures/farming_cocoa_2.png create mode 100644 textures/farming_cocoa_3.png create mode 100644 textures/farming_cocoa_4.png create mode 100644 textures/farming_cocoa_beans.png create mode 100644 textures/farming_coffee_beans.png create mode 100644 textures/farming_coffee_beans_raw.png create mode 100644 textures/farming_cookie.png create mode 100644 textures/farming_corn.png create mode 100644 textures/farming_cucumber.png create mode 100644 textures/farming_cucumber_1.png create mode 100644 textures/farming_cucumber_2.png create mode 100644 textures/farming_cucumber_3.png create mode 100644 textures/farming_cucumber_4.png create mode 100644 textures/farming_cutting_board.png create mode 100644 textures/farming_donut.png create mode 100644 textures/farming_donut_apple.png create mode 100644 textures/farming_donut_chocolate.png create mode 100644 textures/farming_flail.png create mode 100644 textures/farming_garlic_bread.png create mode 100644 textures/farming_grapebush.png create mode 100644 textures/farming_grapes.png create mode 100644 textures/farming_hemp_leaf.png create mode 100644 textures/farming_hoe_bomb.png create mode 100644 textures/farming_juicer.png create mode 100644 textures/farming_melon_1.png create mode 100644 textures/farming_melon_2.png create mode 100644 textures/farming_melon_3.png create mode 100644 textures/farming_melon_4.png create mode 100644 textures/farming_melon_5.png create mode 100644 textures/farming_melon_6.png create mode 100644 textures/farming_melon_7.png create mode 100644 textures/farming_melon_side.png create mode 100644 textures/farming_melon_slice.png create mode 100644 textures/farming_melon_top.png create mode 100644 textures/farming_mixing_bowl.png create mode 100644 textures/farming_mortar_pestle.png create mode 100644 textures/farming_orange.png create mode 100644 textures/farming_pea_1.png create mode 100644 textures/farming_pea_2.png create mode 100644 textures/farming_pea_3.png create mode 100644 textures/farming_pea_4.png create mode 100644 textures/farming_pea_5.png create mode 100644 textures/farming_pea_peas.png create mode 100644 textures/farming_pea_pod.png create mode 100644 textures/farming_pea_soup.png create mode 100644 textures/farming_pineapple.png create mode 100644 textures/farming_pineapple_1.png create mode 100644 textures/farming_pineapple_2.png create mode 100644 textures/farming_pineapple_3.png create mode 100644 textures/farming_pineapple_4.png create mode 100644 textures/farming_pineapple_5.png create mode 100644 textures/farming_pineapple_6.png create mode 100644 textures/farming_pineapple_7.png create mode 100644 textures/farming_pineapple_8.png create mode 100644 textures/farming_pineapple_juice.png create mode 100644 textures/farming_pineapple_ring.png create mode 100644 textures/farming_pineapple_top.png create mode 100644 textures/farming_porridge.png create mode 100644 textures/farming_pot.png create mode 100644 textures/farming_potato.png create mode 100644 textures/farming_potato_salad.png create mode 100644 textures/farming_pumpkin_1.png create mode 100644 textures/farming_pumpkin_2.png create mode 100644 textures/farming_pumpkin_3.png create mode 100644 textures/farming_pumpkin_4.png create mode 100644 textures/farming_pumpkin_5.png create mode 100644 textures/farming_pumpkin_6.png create mode 100644 textures/farming_pumpkin_7.png create mode 100644 textures/farming_pumpkin_8.png create mode 100644 textures/farming_pumpkin_bread.png create mode 100644 textures/farming_pumpkin_dough.png create mode 100644 textures/farming_pumpkin_face_off.png create mode 100644 textures/farming_pumpkin_face_on.png create mode 100644 textures/farming_pumpkin_side.png create mode 100644 textures/farming_pumpkin_slice.png create mode 100644 textures/farming_pumpkin_top.png create mode 100644 textures/farming_raspberries.png create mode 100644 textures/farming_rhubarb.png create mode 100644 textures/farming_roasted_powder.png create mode 100644 textures/farming_rose_water.png create mode 100644 textures/farming_salt.png create mode 100644 textures/farming_saucepan.png create mode 100644 textures/farming_skillet.png create mode 100644 textures/farming_spelt_seed_roasted.png create mode 100644 textures/farming_sugar.png create mode 100644 textures/farming_toast.png create mode 100644 textures/farming_toast_sandwich.png create mode 100644 textures/farming_tool_bronzehoe.png create mode 100644 textures/farming_tool_diamondhoe.png create mode 100644 textures/farming_tool_mesehoe.png create mode 100644 textures/farming_tool_mortar_pestle_hl.png create mode 100644 textures/farming_tool_spinningwheel.png create mode 100644 textures/farming_tool_steelhoe.png create mode 100644 textures/farming_tool_stonehoe.png create mode 100644 textures/farming_tool_woodhoe.png create mode 100644 textures/farming_trellis.png create mode 100644 textures/farming_turkish_delight.png create mode 100644 textures/farming_wheat_seed_roasted.png create mode 100644 textures/farming_wildspelt.png create mode 100644 textures/farming_wildwheat.png create mode 100644 textures/farming_wildwheat_1.png create mode 100644 textures/farming_wildwheat_2.png create mode 100644 textures/farming_wildwheat_3.png create mode 100644 textures/farming_wildwheat_4.png create mode 100644 textures/farming_wildwheat_5.png create mode 100644 textures/farming_wildwheat_6.png create mode 100644 textures/farming_wildwheat_7.png create mode 100644 textures/farming_wildwheat_8.png create mode 100644 textures/farming_wildwheat_seed.png create mode 100644 textures/farming_yarn.png create mode 100644 textures/src/Garnknäuel_gefärbt.jpg create mode 100644 textures/src/SpinningWheel.svg create mode 100644 textures/strawberry.png create mode 100644 textures/vessels_drinking_cup.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..012edd4 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# Farming Redo Mod +### by TenPlus1 + +https://forum.minetest.net/viewtopic.php?id=9019 + +Farming Redo is a simplified version of the built-in farming mod in minetest and comes with wheat, cotton, carrot, cucumber, potato and tomato to start out with which spawn throughout the map... new foods need only be planted on tilled soil so no seeds are required, original wheat and cotton will require seeds which are found inside normal and jungle grass... + +This mod works by adding your new plant to the {growing=1} group and numbering the stages from _1 to as many stages as you like, but the underscore MUST be used only once in the node name to separate plant from stage number e.g. + +"farming:cotton_1" through to "farming:cotton_8" +"farming:wheat_1" through to "farming:wheat_8" +"farming:cucumber_4" through to "farming:cucumber_4" + +### Changelog: + +- 1.38 - Pumpkin grows into block, use chopping board to cut into 4x slices, same with melon block, 2x2 slices makes a block, cocoa pods are no longer walkable +- 1.37 - Added custom 'growth_check(pos, nodename) function for crop nodes to use (check cocoa.lua for example) +- 1.36 - Added Beetroot, Beetroot Soup (6x beetroot, 1x bowl), fix register_plant() issue, add new recipes +- 1.35 - Deprecated bronze/mese/diamond hoe's, added hoe bomb and deprecated hoe's as lucky block prizes +- 1.34 - Added scarecrow Base (5x sticks in a cross shape) +- 1.33 - Added cooking utensils (wooden bowl, saucepan, cooking pot, baking tray, skillet, cutting board, mortar & pestle, juicer, glass mixing bowl) for easier food crafts. +- 1.32 - Added Pea plant (textures by Andrey01) - also added Wooden Bowl and Pea Soup crafts +- 1.31 - Added Pineapple which can be found growing in savannah areas (place pineapple in crafting to obtain 5x rings to eat and a top for re-planting), also Salt which is made from cooking a bucket of water, added food groups so it's more compatible with Ruben's food mods. +- 1.30 - Added Garlic, Pepper and Onions thanks to Grizzly Adam for sharing textures +- 1.29 - Updating functions so requires Minetest 0.4.16 and above to run +- 1.28 - Added chili peppers and bowl of chili, optimized code and fixed a few bugs, added porridge +- 1.27 - Added meshoptions to api and wheat plants, added farming.rarity setting to spawn more/less crops on map, have separate cotton/string items (4x cotton = 1x wool, 2x cotton = 2x string) +- 1.26 - Added support for [toolranks] mod when using hoe's +- 1.25 - Added check for farming.conf setting file to disable specific crops globally (inside mod folder) or world specific (inside world folder) +- 1.24 - Added Hemp which can be crafted into fibre, paper, string, rope and oil. +- 1.23 - Huge code tweak and tidy done and added barley seeds to be found in dry grass, barley can make flour for bread also. +- 1.22 - Added grape bushes at high climates which can be cultivated into grape vines using trellis (9 sticks). +- 1.21 - Added auto-refill code for planting crops (thanks crabman77), also fixed a few bugs +- 1.20b - Tidied code, made api compatible with new 0.4.13 changes and changed to soil texture overlays +- 1.20 - NEW growing routine added that allows crops to grow while player is away doing other things (thanks prestidigitator) +- 1.14 - Added Green Beans from Crops mod (thanks sofar), little bushels in the wild but need to be grown using beanpoles crafted with 4 sticks (2 either side) +- 1.13 - Fixed seed double-placement glitch. Mapgen now uses 0.4.12+ for plant generation +- 1.12 - Player cannot place seeds in protected area, also growing speeds changed to match defaults +- 1.11 - Added Straw Bale, streamlined growing abm a little, fixed melon rotation bug with screwdriver +- 1.10 - Added Blueberry Bush and Blueberry Muffins, also Pumpkin/Melon easier to pick up, added check for unloaded map +- 1.09 - Corn now uses single nodes instead of 1 ontop of the other, Ethanol recipe is more expensive (requires 5 corn) and some code cleanup. +- 1.08 - Added Farming Plus compatibility, plus can be removed and no more missing nodes +- 1.07 - Added Rhubarb and Rhubarb Pie +- 1.06 - register_hoe and register_plant added for compatibility with default farming mod, although any plants registered will use farming redo to grow +- 1.05 - Added Raspberry Bushels and Raspberry Smoothie +- 1.04 - Added Donuts... normal, chocolate and apple... and a few code cleanups and now compatible with jungletree's from MoreTrees mod +- 1.03 - Bug fixes and more compatibility as drop-in replacement for built-in farming mod +- 1.02 - Added farming.mod string to help other mods identify which farming mod is running, if it returns "redo" then you're using this one, "" empty is built-in mod +- 1.01 - Crafting coffee or ethanol returns empty bucket/bottle, also Cocoa spawns a little rarer +- 1.0 - Added Cocoa which randomly grows on jungle tree's, pods give cocoa beans which can be used to farm more pods on a jungle trunk or make Cookies which have been added (or other treats) +- 0.9 - Added Pumpkin, Jack 'O Lantern, Pumpkin Slice and Sugar (a huge thanks to painterly.net for allowing me to use their textures) +- 0.8 - Added Watermelon and Melon Slice +- 0.7 - Added Coffee, Coffee Beans, Drinking Cup, Cold and Hot Cup of Coffee +- 0.6 - Added Corn, Corn on the Cob... Also reworked Abm +- 0.5 - Added Carrot, Cucumber, Potato (and Baked Potato), Tomato +- 0.4 - Checks for Protection, also performance changes +- 0.3 - Added Diamond and Mese hoe +- 0.2 - Fixed check for wet soil +- 0.1 - Fixed growing bug +- 0.0 - Initial release + +### Lucky Blocks: 30 diff --git a/README.txt b/README.txt index c1e627b..47ecf73 100644 --- a/README.txt +++ b/README.txt @@ -96,3 +96,5 @@ Created by ademant (CC BY 3.0): farming_spelt (based on farming_barley) farming_hop farming_tobaco (based on pictures of wikimedia) + farming_tool_spinningwheal (based on drawing by firkin on opencliparts) + farming_yarn (based on picture from ikiwana on wikimedia) diff --git a/api.txt b/api.txt new file mode 100644 index 0000000..eda1289 --- /dev/null +++ b/api.txt @@ -0,0 +1,53 @@ +Farming API +----------- + +The farming API allows you to easily register plants and hoes. + +`farming.register_hoe(name, hoe definition)` + * Register a new hoe, see [#hoe definition] + +`farming.register_plant(name, Plant definition)` + * Register a new growing plant, see [#Plant definition] + +`farming.registered_plants[name] = definition` + * Table of registered plants, indexed by plant name + +### Hoe Definition + + + { + description = "", -- Description for tooltip + inventory_image = "unknown_item.png", -- Image to be used as wield- and inventory image + max_uses = 30, -- Uses until destroyed + material = "", -- Material for recipes + recipe = { -- Craft recipe, if material isn't used + {"air", "air", "air"}, + {"", "group:stick"}, + {"", "group:stick"}, + } + } + +### Plant definition + + { + description = "", -- Description of seed item + inventory_image = "unknown_item.png", -- Image to be used as seed's wield- and inventory image + steps = 8, -- How many steps the plant has to grow, until it can be harvested + -- ^ Always provide a plant texture for each step, format: modname_plantname_i.png (i = stepnumber) + minlight = 13, -- Minimum light to grow + maxlight = default.LIGHT_MAX -- Maximum light to grow + } + +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. + +### Crop functions + +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) + -- check surrounding for jungle tree + if minetest.find_node_near(pos, 1, {"default:jungletree"}) then + return false -- place next growth stage + end + return true -- condition not met, skip next growth stage until next check +end, diff --git a/coffee.lua b/coffee.lua new file mode 100644 index 0000000..bea5a36 --- /dev/null +++ b/coffee.lua @@ -0,0 +1,46 @@ +local S = farming.intllib + +-- cold cup of coffee +minetest.register_node("farming:grain_coffee_cup", { + description = S("Cup of Grain Coffee"), + drawtype = "torchlike", --"plantlike", + 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}, + on_use = minetest.item_eat(2, "vessels:drinking_glass"), + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_alias("farming:grain_coffee_cup_hot", "farming:grain_coffee_cup") + +minetest.register_craft( { + output = "farming:grain_coffee_cup", + type = "shapeless", + recipe = {"vessels:drinking_glass", "group:food_grain_powder", + "bucket:bucket_water", "group:food_saucepan"}, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"}, + {"group:food_saucepan", "farming:saucepan"}, + } +}) + +minetest.register_craftitem("farming:grain_coffee", { + description = S("Grain Coffee"), + inventory_image = "farming_roasted_powder.png", + groups = {food_grain_powder = 1, flammable = 2}, +}) +minetest.register_craft({ + type = "shapeless", + output = "farming:grain_coffee", + recipe = { + "group:food_grain_roasted", "group:food_grain_roasted", "farming:coffee_grinder" + }, + replacements = {{"group:food_coffee_grinder", "farming:coffee_grinder"}}, +}) diff --git a/compatibility.lua b/compatibility.lua new file mode 100644 index 0000000..808000d --- /dev/null +++ b/compatibility.lua @@ -0,0 +1,172 @@ + +--= Helpers + +local eth = minetest.get_modpath("ethereal") +local alias = function(orig, new) + minetest.register_alias(orig, new) +end + +--= Overrides (add food_* group to apple and brown mushroom) + +minetest.override_item("default:apple", { + groups = {food_apple = 1, fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 3, leafdecay_drop = 1}, +}) + +if minetest.registered_nodes["flowers:mushroom_brown"] then +minetest.override_item("flowers:mushroom_brown", { + light_source = 1, + groups = {food_mushroom = 1, snappy = 3, attached_node = 1, flammable = 2}, +}) +end + +--= Aliases + +-- Banana +if eth then + alias("farming_plus:banana_sapling", "ethereal:banana_tree_sapling") + alias("farming_plus:banana_leaves", "ethereal:bananaleaves") + alias("farming_plus:banana", "ethereal:banana") +else + minetest.register_node(":ethereal:banana", { + description = "Banana", + drawtype = "torchlike", + tiles = {"banana_single.png"}, + inventory_image = "banana_single.png", + wield_image = "banana_single.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + 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}, + on_use = minetest.item_eat(2), + sounds = default.node_sound_leaves_defaults(), + }) + + minetest.register_node(":ethereal:bananaleaves", { + description = "Banana Leaves", + tiles = {"banana_leaf.png"}, + inventory_image = "banana_leaf.png", + wield_image = "banana_leaf.png", + paramtype = "light", + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + sounds = default.node_sound_leaves_defaults(), + }) + + alias("farming_plus:banana_sapling", "default:sapling") + alias("farming_plus:banana_leaves", "ethereal:bananaleaves") + alias("farming_plus:banana", "ethereal:banana") +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") +alias("farming_plus:carrot_3", "farming:carrot_6") +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") + +if eth then + alias("farming_plus:orange_item", "ethereal:orange") + alias("farming_plus:orange", "ethereal:orange") + alias("farming_plus:orange_seed", "ethereal:orange_tree_sapling") +else + minetest.register_node(":ethereal:orange", { + description = "Orange", + drawtype = "plantlike", + tiles = {"farming_orange.png"}, + inventory_image = "farming_orange.png", + wield_image = "farming_orange.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + 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}, + on_use = minetest.item_eat(4), + sounds = default.node_sound_leaves_defaults(), + }) + + alias("farming_plus:orange_item", "ethereal:orange") + alias("farming_plus:orange", "ethereal:orange") + alias("farming_plus:orange_seed", "default:sapling") +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") +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") +alias("farming:big_pumpkin", "farming:jackolantern") +alias("farming:big_pumpkin_side", "air") +alias("farming:big_pumpkin_top", "air") +alias("farming:big_pumpkin_corner", "air") +alias("farming:scarecrow", "farming:jackolantern") +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") +alias("farming_plus:rhubarb", "farming:rhubarb_3") +alias("farming_plus:rhubarb_item", "farming:rhubarb") + +-- Strawberry +if eth then + alias("farming_plus:strawberry_item", "ethereal:strawberry") + alias("farming_plus:strawberry_seed", "ethereal:strawberry") + alias("farming_plus:strawberry_1", "ethereal:strawberry_1") + alias("farming_plus:strawberry_2", "ethereal:strawberry_3") + alias("farming_plus:strawberry_3", "ethereal:strawberry_5") + alias("farming_plus:strawberry", "ethereal:strawberry_7") +else + minetest.register_craftitem(":ethereal:strawberry", { + description = "Strawberry", + inventory_image = "strawberry.png", + wield_image = "strawberry.png", + groups = {food_strawberry = 1, flammable = 2}, + on_use = minetest.item_eat(1), + }) + + alias("farming_plus:strawberry_item", "ethereal:strawberry") + alias("farming_plus:strawberry_seed", "ethereal:strawberry") + alias("farming_plus:strawberry_1", "farming:raspberry_1") + alias("farming_plus:strawberry_2", "farming:raspberry_2") + alias("farming_plus:strawberry_3", "farming:raspberry_3") + alias("farming_plus:strawberry", "farming:raspberry_4") +end + +-- Tomato +alias("farming_plus:tomato_seed", "farming:tomato") +alias("farming_plus:tomato_item", "farming:tomato") +alias("farming_plus:tomato_1", "farming:tomato_2") +alias("farming_plus:tomato_2", "farming:tomato_4") +alias("farming_plus:tomato_3", "farming:tomato_6") +alias("farming_plus:tomato", "farming:tomato_8") + +-- Weed +alias("farming:weed", "default:grass_2") diff --git a/craft.lua b/craft.lua index d920448..2d8ea6d 100644 --- a/craft.lua +++ b/craft.lua @@ -24,6 +24,15 @@ minetest.register_craft({ replacements = {{"group:food_mortar_pestle", modname..":mortar_pestle"}}, }) +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = { + "group:for_flour", "group:for_flour", "group:for_flour", + modname..":mortar_pestle_highlevel" + }, + replacements = {{modname..":mortar_pestle_highlevel", modname..":mortar_pestle_highlevel"}}, +}) minetest.register_craftitem("farming:bread", { diff --git a/crops/barley.lua b/crops/barley.lua new file mode 100644 index 0000000..f509335 --- /dev/null +++ b/crops/barley.lua @@ -0,0 +1,105 @@ + +local S = farming.intllib + +-- barley seeds +minetest.register_node("farming:seed_barley", { + description = S("Barley Seed"), + tiles = {"farming_barley_seed.png"}, + inventory_image = "farming_barley_seed.png", + wield_image = "farming_barley_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:barley_1") + end, +}) + +-- harvested barley +minetest.register_craftitem("farming:barley", { + description = S("Barley"), + inventory_image = "farming_barley.png", + groups = {food_barley = 1, flammable = 2}, +}) + +-- flour +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = { + "farming:barley", "farming:barley", "farming:barley", + "farming:barley", "farming:mortar_pestle" + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}}, +}) + +-- barley definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_barley_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:barley_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_barley_2.png"} +minetest.register_node("farming:barley_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_barley_3.png"} +minetest.register_node("farming:barley_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_barley_4.png"} +minetest.register_node("farming:barley_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_barley_5.png"} +crop_def.drop = { + items = { + {items = {'farming:barley'}, rarity = 2}, + {items = {'farming:seed_barley'}, rarity = 2}, + } +} +minetest.register_node("farming:barley_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_barley_6.png"} +crop_def.drop = { + items = { + {items = {'farming:barley'}, rarity = 2}, + {items = {'farming:seed_barley'}, rarity = 1}, + } +} +minetest.register_node("farming:barley_6", table.copy(crop_def)) + +-- stage 7 (final) +crop_def.tiles = {"farming_barley_7.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:barley'}, rarity = 1}, + {items = {'farming:barley'}, rarity = 3}, + {items = {'farming:seed_barley'}, rarity = 1}, + {items = {'farming:seed_barley'}, rarity = 3}, + } +} +minetest.register_node("farming:barley_7", table.copy(crop_def)) diff --git a/crops/beans.lua b/crops/beans.lua new file mode 100644 index 0000000..a575956 --- /dev/null +++ b/crops/beans.lua @@ -0,0 +1,249 @@ +--[[ + All textures by + (C) Auke Kok + CC-BY-SA-3.0 +]] + +local S = farming.intllib + +-- place beans +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 + + 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 + + -- 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 def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + -- is player planting crop? + local name = placer and placer:get_player_name() or "" + + -- check for protection + if minetest.is_protected(pt.under, name) then + return + end + + -- check if pointing at bean pole + 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}) + + if placer or not farming.is_creative(placer:get_player_name()) then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:beans", + placer:get_wield_index() + ) + end + end + + return itemstack +end + +-- beans +minetest.register_craftitem("farming:beans", { + description = S("Green Beans"), + inventory_image = "farming_beans.png", + groups = {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, +}) + +-- beans can be used for green dye +minetest.register_craft({ + output = "dye:green", + recipe = { + {'farming:beans'}, + } +}) + +-- beanpole +minetest.register_node("farming:beanpole", { + description = S("Bean Pole (place on soil before planting beans)"), + drawtype = "plantlike", + tiles = {"farming_beanpole.png"}, + inventory_image = "farming_beanpole.png", + visual_scale = 1.90, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = "farming:beanpole", + selection_box = farming.select, + groups = {snappy = 3, flammable = 2, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_place = function(itemstack, placer, pointed_thing) + + local pt = pointed_thing + + -- check if pointing at a node + 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 + + -- 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) + end + + if minetest.is_protected(pt.above, placer:get_player_name()) then + return + end + + local nodename = under.name + + if minetest.get_item_group(nodename, "soil") < 2 then + return + end + + local top = { + x = pointed_thing.above.x, + y = pointed_thing.above.y + 1, + z = pointed_thing.above.z + } + + nodename = minetest.get_node(top).name + + if nodename ~= "air" then + return + end + + minetest.set_node(pointed_thing.above, {name = "farming:beanpole"}) + + if not farming.is_creative(placer:get_player_name()) then + itemstack:take_item() + end + + return itemstack + end +}) + +minetest.register_craft({ + output = "farming:beanpole", + recipe = { + {'', '', ''}, + {'default:stick', '', 'default:stick'}, + {'default:stick', '', 'default:stick'}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:beanpole", + burntime = 10, +}) + +-- green bean definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_beanpole_1.png"}, + visual_scale = 1.90, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:beanpole'}, rarity = 1}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, not_in_creative_inventory = 1, + attached_node = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:beanpole_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_beanpole_2.png"} +minetest.register_node("farming:beanpole_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_beanpole_3.png"} +minetest.register_node("farming:beanpole_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_beanpole_4.png"} +minetest.register_node("farming:beanpole_4", table.copy(crop_def)) + +-- stage 5 (final) +crop_def.tiles = {"farming_beanpole_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:beanpole'}, rarity = 1}, + {items = {'farming:beans 3'}, rarity = 1}, + {items = {'farming:beans 2'}, rarity = 2}, + {items = {'farming:beans 2'}, rarity = 3}, + } +} +minetest.register_node("farming:beanpole_5", table.copy(crop_def)) + +-- wild green bean bush (this is what you find on the map) +minetest.register_node("farming:beanbush", { + drawtype = "plantlike", + tiles = {"farming_beanbush.png"}, + paramtype = "light", + waving = 1, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:beans 1'}, rarity = 1}, + {items = {'farming:beans 1'}, rarity = 2}, + {items = {'farming:beans 1'}, rarity = 3}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory=1 + }, + sounds = default.node_sound_leaves_defaults(), +}) diff --git a/crops/beetroot.lua b/crops/beetroot.lua new file mode 100644 index 0000000..e683a94 --- /dev/null +++ b/crops/beetroot.lua @@ -0,0 +1,85 @@ + +local S = farming.intllib + +-- beetroot +minetest.register_craftitem("farming:beetroot", { + description = S("Beetroot"), + inventory_image = "farming_beetroot.png", + groups = {food_beetroot = 1, flammable = 2}, + 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), +}) + +-- beetroot soup +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"), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:beetroot_soup", + recipe = { + "group:food_beetroot", "group:food_beetroot", + "group:food_beetroot", "group:food_beetroot", + "group:food_beetroot", "group:food_beetroot","group:food_bowl" + } +}) + +-- red dye +minetest.register_craft({ + type = "shapeless", + output = "dye:red", + recipe = {"group:food_beetroot"}, +}) + +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_beetroot_1.png"}, + paramtype = "light", +-- paramtype2 = "meshoptions", +-- place_param2 = 3, + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:beetroot_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_beetroot_2.png"} +minetest.register_node("farming:beetroot_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_beetroot_3.png"} +minetest.register_node("farming:beetroot_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_beetroot_4.png"} +minetest.register_node("farming:beetroot_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_beetroot_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + max_items = 4, items = { + {items = {'farming:beetroot'}, rarity = 1}, + {items = {'farming:beetroot'}, rarity = 2}, + {items = {'farming:beetroot'}, rarity = 3}, + {items = {'farming:beetroot'}, rarity = 4}, + } +} +minetest.register_node("farming:beetroot_5", table.copy(crop_def)) diff --git a/crops/blueberry.lua b/crops/blueberry.lua new file mode 100644 index 0000000..9a30387 --- /dev/null +++ b/crops/blueberry.lua @@ -0,0 +1,85 @@ + +local S = farming.intllib + +-- blueberries +minetest.register_craftitem("farming:blueberries", { + description = S("Blueberries"), + inventory_image = "farming_blueberries.png", + groups = {food_blueberries = 1, food_blueberry = 1, food_berry = 1, flammable = 2}, + 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), +}) + +-- 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), +}) + +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), +}) + +minetest.register_craft({ + output = "farming:blueberry_pie", + type = "shapeless", + recipe = { + "group:food_flour", "group:food_sugar", + "group:food_blueberries", "group:food_baking_tray" + }, +}) + +-- blueberry definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_blueberry_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:blueberry_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_blueberry_2.png"} +minetest.register_node("farming:blueberry_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_blueberry_3.png"} +minetest.register_node("farming:blueberry_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_blueberry_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:blueberries 2'}, rarity = 1}, + {items = {'farming:blueberries'}, rarity = 2}, + {items = {'farming:blueberries'}, rarity = 3}, + } +} +minetest.register_node("farming:blueberry_4", table.copy(crop_def)) diff --git a/crops/carrot.lua b/crops/carrot.lua new file mode 100644 index 0000000..0aefcfd --- /dev/null +++ b/crops/carrot.lua @@ -0,0 +1,96 @@ + +--[[ + Original textures from PixelBox texture pack + https://forum.minetest.net/viewtopic.php?id=4990 +]] + +local S = farming.intllib + +-- carrot +minetest.register_craftitem("farming:carrot", { + description = S("Carrot"), + inventory_image = "farming_carrot.png", + groups = {food_carrot = 1, flammable = 2}, + 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), +}) + +-- golden carrot +minetest.register_craftitem("farming:carrot_gold", { + description = S("Golden Carrot"), + inventory_image = "farming_carrot_gold.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:carrot_gold", + recipe = { + {"", "default:gold_lump", ""}, + {"default:gold_lump", "group:food_carrot", "default:gold_lump"}, + {"", "default:gold_lump", ""}, + } +}) + +-- carrot definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_carrot_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + + +-- stage 1 +minetest.register_node("farming:carrot_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_carrot_2.png"} +minetest.register_node("farming:carrot_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_carrot_3.png"} +minetest.register_node("farming:carrot_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_carrot_4.png"} +minetest.register_node("farming:carrot_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_carrot_5.png"} +minetest.register_node("farming:carrot_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_carrot_6.png"} +minetest.register_node("farming:carrot_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_carrot_7.png"} +crop_def.drop = { + items = { + {items = {'farming:carrot'}, rarity = 1}, + {items = {'farming:carrot 2'}, rarity = 3}, + } +} +minetest.register_node("farming:carrot_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_carrot_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:carrot 2'}, rarity = 1}, + {items = {'farming:carrot 3'}, rarity = 2}, + } +} +minetest.register_node("farming:carrot_8", table.copy(crop_def)) diff --git a/crops/chili.lua b/crops/chili.lua new file mode 100644 index 0000000..9889162 --- /dev/null +++ b/crops/chili.lua @@ -0,0 +1,92 @@ + +local S = farming.intllib + +-- chili pepper +minetest.register_craftitem("farming:chili_pepper", { + description = S("Chili Pepper"), + inventory_image = "farming_chili_pepper.png", + groups = {food_chili_pepper = 1, flammable = 4}, + 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), +}) + +-- 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, "farming:bowl"), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:chili_bowl", + recipe = { + "group:food_chili_pepper", "group:food_barley", + "group:food_tomato", "group:food_beans", "group:food_bowl" + }, +}) + +-- chili can be used for red dye +minetest.register_craft({ + output = "dye:red", + recipe = { + {'farming:chili_pepper'}, + } +}) + +-- chili definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_chili_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 4, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:chili_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_chili_2.png"} +minetest.register_node("farming:chili_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_chili_3.png"} +minetest.register_node("farming:chili_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_chili_4.png"} +minetest.register_node("farming:chili_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_chili_5.png"} +minetest.register_node("farming:chili_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_chili_6.png"} +minetest.register_node("farming:chili_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_chili_7.png"} +minetest.register_node("farming:chili_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_chili_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:chili_pepper 3'}, rarity = 1}, + {items = {'farming:chili_pepper 2'}, rarity = 2}, + } +} +minetest.register_node("farming:chili_8", table.copy(crop_def)) diff --git a/crops/cocoa.lua b/crops/cocoa.lua new file mode 100644 index 0000000..ecefcea --- /dev/null +++ b/crops/cocoa.lua @@ -0,0 +1,210 @@ + +local S = farming.intllib + +-- place cocoa +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 + + 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 + + -- 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 def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + -- check if pointing at jungletree + if under.name ~= "default:jungletree" + or minetest.get_node(pt.above).name ~= "air" then + return + end + + -- is player planting crop? + local name = placer and placer:get_player_name() or "" + + -- check for protection + 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}) + + if placer and not farming.is_creative(placer:get_player_name()) then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:cocoa_beans", + placer:get_wield_index() + ) + end + end + + return itemstack +end + +-- cocoa beans +minetest.register_craftitem("farming:cocoa_beans", { + description = S("Cocoa Beans"), + inventory_image = "farming_cocoa_beans.png", + groups = {food_cocoa = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return place_cocoa(itemstack, placer, pointed_thing, "farming:cocoa_1") + end, +}) + +minetest.register_craft( { + output = "dye:brown 2", + 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), +}) + +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), +}) + +minetest.register_craft( { + output = "farming:chocolate_dark", + recipe = { + {"group:food_cocoa", "group:food_cocoa", "group:food_cocoa"}, + } +}) + +-- cocoa definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_cocoa_1.png"}, + paramtype = "light", + walkable = false, + drop = { + items = { + {items = {'farming:cocoa_beans 1'}, rarity = 2}, + } + }, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + groups = { + snappy = 3, flammable = 2, plant = 1, growing = 1, + not_in_creative_inventory=1, leafdecay = 1, leafdecay_drop = 1 + }, + sounds = default.node_sound_leaves_defaults(), + growth_check = function(pos, node_name) + if minetest.find_node_near(pos, 1, {"default:jungletree"}) then + return false + end + return true + end, +} + +-- stage 1 +minetest.register_node("farming:cocoa_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_cocoa_2.png"} +minetest.register_node("farming:cocoa_2", table.copy(crop_def)) + +-- stage3 +crop_def.tiles = {"farming_cocoa_3.png"} +crop_def.drop = { + items = { + {items = {'farming:cocoa_beans 1'}, rarity = 1}, + } +} +minetest.register_node("farming:cocoa_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_cocoa_4.png"} +crop_def.groups.growing = 0 +crop_def.growth_check = nil +crop_def.drop = { + items = { + {items = {'farming:cocoa_beans 2'}, rarity = 1}, + {items = {'farming:cocoa_beans 1'}, rarity = 2}, + {items = {'farming:cocoa_beans 1'}, rarity = 4}, + } +} +minetest.register_node("farming:cocoa_4", table.copy(crop_def)) + +-- 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") + + for n = 1, #cocoa do + + pos = cocoa[n] + + if minetest.find_node_near(pos, 1, + {"default:jungleleaves", "moretrees:jungletree_leaves_green"}) then + + dir = math.random(1, 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(math.random(1, 4)) + }) + end + + end + end +end) diff --git a/crops/coffee.lua b/crops/coffee.lua new file mode 100644 index 0000000..357fdd6 --- /dev/null +++ b/crops/coffee.lua @@ -0,0 +1,123 @@ + +local S = farming.intllib + +-- coffee +minetest.register_craftitem("farming:coffee_beans_raw", { + description = S("Raw Coffee Beans"), + inventory_image = "farming_coffee_beans_raw.png", + groups = {food_coffee_raw = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:coffee_1") + end, +}) +minetest.register_craftitem("farming:coffee_beans", { + description = S("Coffee Beans"), + inventory_image = "farming_coffee_beans.png", + groups = {food_coffee = 1, flammable = 2}, +}) + +-- roasted coffee +minetest.register_craftitem("farming:coffee_beans", { + description = S("Caffee Beans"), + inventory_image = "farming_coffee_beans_raw.png", + groups = {food_coffee = 1, flammable = 2}, +}) +minetest.register_craft({ + type = "cooking", + cooktime = 5, + output = "farming:coffee_beans", + recipe = "farming:coffee_beans_raw" +}) + +-- spelt coffee +minetest.register_craftitem("farming:coffee_powder", { + description = S("Coffee Powder"), + inventory_image = "farming_roasted_powder.png", + groups = {food_coffee_powder = 1, flammable = 2}, +}) +minetest.register_craft({ + type = "shapeless", + output = "farming:coffee_powder", + recipe = { + "farming:coffee_beans", "farming:coffee_beans", "farming:coffee_beans", + "farming:coffee_beans", "farming:coffee_grinder" + }, + replacements = {{"group:food_coffee_grinder", "farming:coffee_grinder"}}, +}) + + +-- cold cup of coffee +minetest.register_node("farming:coffee_cup", { + description = S("Cup of Coffee"), + drawtype = "torchlike", --"plantlike", + 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}, + on_use = minetest.item_eat(2, "vessels:drinking_glass"), + sounds = default.node_sound_glass_defaults(), +}) + +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", + type = "shapeless", + recipe = {"vessels:drinking_glass", "group:food_coffee_powder", + "bucket:bucket_water", "group:food_saucepan"}, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"}, + {"group:food_saucepan", "farming:saucepan"}, + } +}) + +-- coffee definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_coffee_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:coffee_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_coffee_2.png"} +minetest.register_node("farming:coffee_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_coffee_3.png"} +minetest.register_node("farming:coffee_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_coffee_4.png"} +minetest.register_node("farming:coffee_4", table.copy(crop_def)) + +-- stage 5 (final) +crop_def.tiles = {"farming_coffee_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:coffee_beans 2'}, rarity = 1}, + {items = {'farming:coffee_beans 2'}, rarity = 2}, + {items = {'farming:coffee_beans 2'}, rarity = 3}, + } +} +minetest.register_node("farming:coffee_5", table.copy(crop_def)) diff --git a/crops/corn.lua b/crops/corn.lua new file mode 100644 index 0000000..4847903 --- /dev/null +++ b/crops/corn.lua @@ -0,0 +1,149 @@ + +--[[ + Original textures from GeMinecraft + 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.intllib + +-- corn +minetest.register_craftitem("farming:corn", { + description = S("Corn"), + inventory_image = "farming_corn.png", + groups = {food_corn = 1, flammable = 2}, + 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), +}) + +-- 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 = {food_corn_cooked = 1, flammable = 2}, + on_use = minetest.item_eat(5), +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:corn_cob", + recipe = "group:food_corn" +}) + +-- cornstarch +minetest.register_craftitem("farming:cornstarch", { + description = S("Cornstarch"), + inventory_image = "farming_cornstarch.png", + groups = {food_cornstarch = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:cornstarch", + recipe = { + {"group:food_mortar_pestle", "group:food_corn_cooked", "group:food_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 = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "farming:bottle_ethanol", + recipe = { + { "vessels:glass_bottle", "group:food_corn", "group:food_corn"}, + { "group:food_corn", "group:food_corn", "group:food_corn"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:bottle_ethanol", + burntime = 80, --240, + replacements = {{ "farming:bottle_ethanol", "vessels:glass_bottle"}} +}) + +-- corn definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_corn_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:corn_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_corn_2.png"} +minetest.register_node("farming:corn_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_corn_3.png"} +minetest.register_node("farming:corn_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_corn_4.png"} +minetest.register_node("farming:corn_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_corn_5.png"} +minetest.register_node("farming:corn_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_corn_6.png"} +crop_def.visual_scale = 1.9 -- 1.45 +minetest.register_node("farming:corn_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_corn_7.png"} +crop_def.drop = { + items = { + {items = {'farming:corn'}, rarity = 1}, + {items = {'farming:corn'}, rarity = 2}, + {items = {'farming:corn'}, rarity = 3}, + } +} +minetest.register_node("farming:corn_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_corn_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:corn 2'}, rarity = 1}, + {items = {'farming:corn 2'}, rarity = 2}, + {items = {'farming:corn 2'}, rarity = 2}, + } +} +minetest.register_node("farming:corn_8", table.copy(crop_def)) diff --git a/crops/cotton.lua b/crops/cotton.lua new file mode 100644 index 0000000..7f893ec --- /dev/null +++ b/crops/cotton.lua @@ -0,0 +1,151 @@ + +local S = farming.intllib + +-- cotton seeds +minetest.register_node("farming:seed_cotton", { + description = S("Cotton Seed"), + tiles = {"farming_cotton_seed.png"}, + inventory_image = "farming_cotton_seed.png", + wield_image = "farming_cotton_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1, flammable = 4}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:cotton_1") + end, +}) + +-- cotton / string + +minetest.register_craftitem("farming:cotton", { + description = S("Cotton"), + inventory_image = "farming_cotton.png", + groups = {flammable = 4}, +}) + +minetest.register_craftitem("farming:string", { + description = S("String"), + inventory_image = "farming_string.png", + groups = {flammable = 2}, +}) + +-- cotton to wool +minetest.register_craft({ + output = "wool:white", + recipe = { + {"farming:cotton", "farming:cotton"}, + {"farming:cotton", "farming:cotton"}, + } +}) + +-- cotton to string +minetest.register_craft({ + output = "farming: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 crop_def = { + drawtype = "plantlike", + tiles = {"farming_cotton_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 4, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:cotton_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_cotton_2.png"} +minetest.register_node("farming:cotton_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_cotton_3.png"} +minetest.register_node("farming:cotton_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_cotton_4.png"} +minetest.register_node("farming:cotton_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_cotton_5.png"} +crop_def.drop = { + items = { + {items = {"farming:seed_cotton"}, rarity = 1}, + } +} +minetest.register_node("farming:cotton_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_cotton_6.png"} +crop_def.drop = { + items = { + {items = {"farming:cotton"}, rarity = 1}, + {items = {"farming:cotton"}, rarity = 2}, + } +} +minetest.register_node("farming:cotton_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_cotton_7.png"} +crop_def.drop = { + items = { + {items = {"farming:cotton"}, rarity = 1}, + {items = {"farming:cotton"}, rarity = 2}, + {items = {"farming:seed_cotton"}, rarity = 1}, + {items = {"farming:seed_cotton"}, rarity = 2}, + } +} +minetest.register_node("farming:cotton_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_cotton_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {"farming:cotton"}, rarity = 1}, + {items = {"farming:cotton"}, rarity = 2}, + {items = {"farming:cotton"}, rarity = 3}, + {items = {"farming:seed_cotton"}, rarity = 1}, + {items = {"farming:seed_cotton"}, rarity = 2}, + {items = {"farming:seed_cotton"}, rarity = 3}, + } +} +minetest.register_node("farming:cotton_8", table.copy(crop_def)) + +--[[ Cotton (example, is already registered in cotton.lua) +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 new file mode 100644 index 0000000..4e6981c --- /dev/null +++ b/crops/cucumber.lua @@ -0,0 +1,56 @@ + +--[[ + Original textures from DocFarming mod + https://forum.minetest.net/viewtopic.php?id=3948 +]] + +local S = farming.intllib + +-- cucumber +minetest.register_craftitem("farming:cucumber", { + description = S("Cucumber"), + inventory_image = "farming_cucumber.png", + groups = {food_cucumber = 1, flammable = 2}, + 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), +}) + +-- cucumber definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_cucumber_1.png"}, + paramtype = "light", + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:cucumber_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_cucumber_2.png"} +minetest.register_node("farming:cucumber_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_cucumber_3.png"} +minetest.register_node("farming:cucumber_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_cucumber_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:cucumber 2'}, rarity = 1}, + {items = {'farming:cucumber 2'}, rarity = 2}, + } +} +minetest.register_node("farming:cucumber_4", table.copy(crop_def)) diff --git a/crops/garlic.lua b/crops/garlic.lua new file mode 100644 index 0000000..f2bb16d --- /dev/null +++ b/crops/garlic.lua @@ -0,0 +1,128 @@ + +--[[ + Original textures from Crops Plus mod + Copyright (C) 2018 Grizzly Adam + https://forum.minetest.net/viewtopic.php?f=9&t=19488 +]] + +local S = farming.intllib + +-- potato +minetest.register_craftitem("farming:garlic_clove", { + description = S("Garlic clove"), + inventory_image = "crops_garlic_clove.png", + groups = {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, flammable = 3}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:garlic_clove 9", + 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", "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", + paramtype = "light", + paramtype2 = "facedir", + tiles = { + "crops_garlic_braid_side.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}, + sounds = default.node_sound_leaves_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.13, -0.45, 0.5, 0.13, 0.45, 0.24}, + }, + } +}) + +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 crop_def = { + drawtype = "plantlike", + tiles = {"crops_garlic_plant_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:garlic_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"crops_garlic_plant_2.png"} +minetest.register_node("farming:garlic_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"crops_garlic_plant_3.png"} +minetest.register_node("farming:garlic_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"crops_garlic_plant_4.png"} +minetest.register_node("farming:garlic_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"crops_garlic_plant_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + max_items = 5, items = { + {items = {'farming:garlic'}, rarity = 1}, + {items = {'farming:garlic'}, rarity = 1}, + {items = {'farming:garlic'}, rarity = 1}, + {items = {'farming:garlic'}, rarity = 2}, + {items = {'farming:garlic'}, rarity = 5}, + } +} +minetest.register_node("farming:garlic_5", table.copy(crop_def)) diff --git a/crops/grapes.lua b/crops/grapes.lua new file mode 100644 index 0000000..d8c6c3f --- /dev/null +++ b/crops/grapes.lua @@ -0,0 +1,256 @@ + +local S = farming.intllib + +-- 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 + + 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 + + -- 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 def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + -- is player planting seed? + local name = placer and placer:get_player_name() or "" + + -- check for protection + if minetest.is_protected(pt.under, name) then + return + end + + -- check if pointing at trellis + 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}) + + if placer and not farming.is_creative(placer:get_player_name()) then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:grapes", + placer:get_wield_index() + ) + end + end + + return itemstack +end + +-- grapes +minetest.register_craftitem("farming:grapes", { + description = S("Grapes"), + inventory_image = "farming_grapes.png", + on_use = minetest.item_eat(2), + groups = {food_grapes = 1, flammable = 3}, + + on_place = function(itemstack, placer, pointed_thing) + return place_grapes(itemstack, placer, pointed_thing, "farming:grapes_1") + end, +}) + +-- grapes can be used for violet dye +minetest.register_craft({ + output = "dye:violet", + recipe = { + {'farming:grapes'}, + } +}) + +-- trellis +minetest.register_node("farming:trellis", { + description = S("Trellis (place on soil before planting grapes)"), + drawtype = "plantlike", + tiles = {"farming_trellis.png"}, + inventory_image = "farming_trellis.png", + visual_scale = 1.9, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = "farming:trellis", + selection_box = farming.select, + groups = {snappy = 3, flammable = 2, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_place = function(itemstack, placer, pointed_thing) + + local pt = pointed_thing + + -- check if pointing at a node + 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 + + -- 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) + end + + if minetest.is_protected(pt.above, placer:get_player_name()) then + return + end + + local nodename = under.name + + if minetest.get_item_group(nodename, "soil") < 2 then + return + end + + local top = { + x = pointed_thing.above.x, + y = pointed_thing.above.y + 1, + z = pointed_thing.above.z + } + + nodename = minetest.get_node(top).name + + if nodename ~= "air" then + return + end + + minetest.set_node(pointed_thing.above, {name = "farming:trellis"}) + + if not farming.is_creative(placer:get_player_name()) then + itemstack:take_item() + end + + return itemstack + end +}) + +minetest.register_craft({ + output = "farming:trellis", + recipe = { + {'default:stick', 'default:stick', 'default:stick'}, + {'default:stick', 'default:stick', 'default:stick'}, + {'default:stick', 'default:stick', 'default:stick'}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:trellis", + burntime = 15, +}) + +-- grapes definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_grapes_1.png"}, + visual_scale = 1.9, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:trellis'}, rarity = 1}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, not_in_creative_inventory = 1, + attached_node = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:grapes_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_grapes_2.png"} +minetest.register_node("farming:grapes_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_grapes_3.png"} +minetest.register_node("farming:grapes_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_grapes_4.png"} +minetest.register_node("farming:grapes_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_grapes_5.png"} +minetest.register_node("farming:grapes_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_grapes_6.png"} +minetest.register_node("farming:grapes_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_grapes_7.png"} +minetest.register_node("farming:grapes_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_grapes_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:trellis'}, rarity = 1}, + {items = {'farming:grapes 3'}, rarity = 1}, + {items = {'farming:grapes 1'}, rarity = 2}, + {items = {'farming:grapes 1'}, rarity = 3}, + } +} +minetest.register_node("farming:grapes_8", table.copy(crop_def)) + +-- wild grape vine (this is what you find on the map) +minetest.register_node("farming:grapebush", { + drawtype = "plantlike", + tiles = {"farming_grapebush.png"}, + paramtype = "light", + waving = 1, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:grapes 1'}, rarity = 1}, + {items = {'farming:grapes 1'}, rarity = 2}, + {items = {'farming:grapes 1'}, rarity = 3}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory=1 + }, + sounds = default.node_sound_leaves_defaults(), +}) diff --git a/crops/hemp.lua b/crops/hemp.lua new file mode 100644 index 0000000..eb522a9 --- /dev/null +++ b/crops/hemp.lua @@ -0,0 +1,251 @@ + +local S = farming.intllib + +-- hemp seeds +minetest.register_node("farming:seed_hemp", { + description = S("Hemp Seed"), + tiles = {"farming_hemp_seed.png"}, + inventory_image = "farming_hemp_seed.png", + wield_image = "farming_hemp_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:hemp_1") + end, +}) + +-- harvested hemp +minetest.register_craftitem("farming:hemp_leaf", { + description = S("Hemp Leaf"), + inventory_image = "farming_hemp_leaf.png", +}) + +-- 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}, + sounds = default.node_sound_glass_defaults(), +}) + +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"}, + {"", "vessels: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", "vessels:glass_bottle", "farming:seed_hemp"} + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:hemp_oil", + burntime = 20, + replacements = {{ "farming:hemp_oil", "vessels:glass_bottle"}} +}) + +-- hemp fibre +minetest.register_craftitem("farming:hemp_fibre", { + description = S("Hemp Fibre"), + inventory_image = "farming_hemp_fibre.png", +}) + +minetest.register_craft( { + output = "farming:hemp_fibre 8", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "bucket:bucket_water", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"} + }, + replacements = {{ "bucket:bucket_water", "bucket:bucket_empty"}} +}) + +minetest.register_craft( { + output = "farming:hemp_fibre 8", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "bucket:bucket_river_water", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"} + }, + replacements = {{ "bucket:bucket_river_water", "bucket:bucket_empty"}} +}) + +-- hemp block +minetest.register_node("farming:hemp_block", { + description = S("Hemp Block"), + tiles = {"farming_hemp_block.png"}, + paramtype = "light", + groups = {snappy = 1, oddly_breakable_by_hand = 1, flammable = 2} +}) + +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 = 1, flammable = 2}, + {"farming_hemp_block.png"}, + "Hemp Block", + default.node_sound_leaves_defaults()) + else + + stairs.register_stair_and_slab("hemp_block", "farming:hemp_block", + {snappy = 1, flammable = 2}, + {"farming_hemp_block.png"}, + "Hemp Block Stair", + "Hemp Block Slab", + default.node_sound_leaves_defaults()) + end +end + +-- paper +minetest.register_craft( { + output = "default:paper", + recipe = { + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + } +}) + +-- string +minetest.register_craft( { + output = "farming:cotton", + 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 = {flammable = 2, choppy = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, +}) + +-- 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 crop_def = { + drawtype = "plantlike", + tiles = {"farming_hemp_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:hemp_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_hemp_2.png"} +minetest.register_node("farming:hemp_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_hemp_3.png"} +minetest.register_node("farming:hemp_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_hemp_4.png"} +minetest.register_node("farming:hemp_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_hemp_5.png"} +minetest.register_node("farming:hemp_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_hemp_6.png"} +crop_def.drop = { + items = { + {items = {'farming:hemp_leaf'}, rarity = 2}, + {items = {'farming:seed_hemp'}, rarity = 1}, + } +} +minetest.register_node("farming:hemp_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_hemp_7.png"} +crop_def.drop = { + items = { + {items = {'farming:hemp_leaf'}, rarity = 1}, + {items = {'farming:hemp_leaf'}, rarity = 3}, + {items = {'farming:seed_hemp'}, rarity = 1}, + {items = {'farming:seed_hemp'}, rarity = 3}, + } +} +minetest.register_node("farming:hemp_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_hemp_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:hemp_leaf 2'}, rarity = 1}, + {items = {'farming:hemp_leaf'}, rarity = 2}, + {items = {'farming:seed_hemp'}, rarity = 1}, + {items = {'farming:seed_hemp'}, rarity = 2}, + } +} +minetest.register_node("farming:hemp_8", table.copy(crop_def)) diff --git a/crops/melon.lua b/crops/melon.lua new file mode 100644 index 0000000..43c0809 --- /dev/null +++ b/crops/melon.lua @@ -0,0 +1,86 @@ + +local S = farming.intllib + +-- melon +minetest.register_craftitem("farming:melon_slice", { + description = S("Melon Slice"), + inventory_image = "farming_melon_slice.png", + groups = {food_melon_slice = 1, flammable = 3}, + 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), +}) + +minetest.register_craft({ + output = "farming:melon_8", + recipe = { + {"farming:melon_slice", "farming:melon_slice"}, + {"farming:melon_slice", "farming:melon_slice"}, + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:melon_slice 4", + recipe = {"farming:melon_8", "farming:cutting_board"}, + replacements = {{"farming:cutting_board", "farming:cutting_board"}}, +}) + +-- melon definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_melon_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:melon_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_melon_2.png"} +minetest.register_node("farming:melon_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_melon_3.png"} +minetest.register_node("farming:melon_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_melon_4.png"} +minetest.register_node("farming:melon_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_melon_5.png"} +minetest.register_node("farming:melon_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_melon_6.png"} +minetest.register_node("farming:melon_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_melon_7.png"} +minetest.register_node("farming:melon_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.drawtype = "nodebox" +crop_def.description = S("Melon") +crop_def.tiles = {"farming_melon_top.png", "farming_melon_top.png", "farming_melon_side.png"} +crop_def.selection_box = {-.5, -.5, -.5, .5, .5, .5} +crop_def.walkable = true +crop_def.groups = { + food_melon = 1, snappy = 1, oddly_breakable_by_hand = 1, + flammable = 2, plant = 1 +} +--crop_def.drop = "farming:melon_slice 9" +crop_def.drop = "farming:melon_8" +minetest.register_node("farming:melon_8", table.copy(crop_def)) diff --git a/crops/onion.lua b/crops/onion.lua new file mode 100644 index 0000000..d9268f8 --- /dev/null +++ b/crops/onion.lua @@ -0,0 +1,68 @@ + +--[[ + Original textures from Crops Plus mod + Copyright (C) 2018 Grizzly Adam + https://forum.minetest.net/viewtopic.php?f=9&t=19488 +]] + +local S = farming.intllib + +-- potato +minetest.register_craftitem("farming:onion", { + description = S("Onion"), + inventory_image = "crops_onion.png", + groups = {food_onion = 1, flammable = 3}, + 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), +}) + +-- crop definition +local crop_def = { + drawtype = "plantlike", + tiles = {"crops_onion_plant_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:onion_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"crops_onion_plant_2.png"} +minetest.register_node("farming:onion_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"crops_onion_plant_3.png"} +minetest.register_node("farming:onion_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"crops_onion_plant_4.png"} +minetest.register_node("farming:onion_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"crops_onion_plant_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + max_items = 5, items = { + {items = {'farming:onion'}, rarity = 1}, + {items = {'farming:onion'}, rarity = 1}, + {items = {'farming:onion'}, rarity = 2}, + {items = {'farming:onion'}, rarity = 2}, + {items = {'farming:onion'}, rarity = 5}, + } +} +minetest.register_node("farming:onion_5", table.copy(crop_def)) diff --git a/crops/peas.lua b/crops/peas.lua new file mode 100644 index 0000000..e50564e --- /dev/null +++ b/crops/peas.lua @@ -0,0 +1,89 @@ + +local S = farming.intllib + +-- Textures for Pea crop and Peas were done by Andrey01 + +-- pea pod +minetest.register_craftitem("farming:pea_pod", { + description = S("Pea Pod"), + inventory_image = "farming_pea_pod.png", + groups = {food_pea_pod = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:pea_1") + end +}) + +minetest.register_craftitem("farming:peas", { + description = S("Peas"), + inventory_image = "farming_pea_peas.png", + groups = {food_peas = 1, flammable = 2}, + on_use = minetest.item_eat(1) +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:peas", + recipe = {"farming:pea_pod"} +}) + +-- pea soup +minetest.register_craftitem("farming:pea_soup", { + description = S("Pea Soup"), + inventory_image = "farming_pea_soup.png", + groups = {flammable = 2}, + on_use = minetest.item_eat(4, "farming:bowl"), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:pea_soup", + recipe = {"group:food_peas", "group:food_peas", "group:food_bowl"} +}) + +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_pea_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:pea_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_pea_2.png"} +minetest.register_node("farming:pea_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_pea_3.png"} +minetest.register_node("farming:pea_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_pea_4.png"} +minetest.register_node("farming:pea_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_pea_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + max_items = 5, items = { + {items = {'farming:pea_pod'}, rarity = 1}, + {items = {'farming:pea_pod'}, rarity = 2}, + {items = {'farming:pea_pod'}, rarity = 3}, + {items = {'farming:pea_pod'}, rarity = 4}, + {items = {'farming:pea_pod'}, rarity = 5}, + } +} +minetest.register_node("farming:pea_5", table.copy(crop_def)) diff --git a/crops/pepper.lua b/crops/pepper.lua new file mode 100644 index 0000000..498556e --- /dev/null +++ b/crops/pepper.lua @@ -0,0 +1,106 @@ + +--[[ + Original textures from Crops Plus mod + Copyright (C) 2018 Grizzly Adam + https://forum.minetest.net/viewtopic.php?f=9&t=19488 +]] + +local S = farming.intllib + +-- peppercorn (seed) +minetest.register_craftitem("farming:peppercorn", { + description = S("Peppercorn"), + inventory_image = "crops_peppercorn.png", + groups = {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("Pepper"), + inventory_image = "crops_pepper.png", + on_use = minetest.item_eat(2), + groups = {food_pepper = 1, flammable = 3}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:peppercorn", + recipe = {"farming:pepper"} +}) + +-- ground pepper +minetest.register_node("farming:pepper_ground", { + description = ("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 + }, + sounds = default.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", + type = "shapeless", + recipe = {"group:food_peppercorn", "vessels:glass_bottle", "farming:mortar_pestle"}, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}}, +}) + +-- crop definition +local crop_def = { + drawtype = "plantlike", + tiles = {"crops_pepper_plant_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 1, + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:pepper_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"crops_pepper_plant_2.png"} +minetest.register_node("farming:pepper_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"crops_pepper_plant_3.png"} +minetest.register_node("farming:pepper_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"crops_pepper_plant_4.png"} +minetest.register_node("farming:pepper_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"crops_pepper_plant_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + max_items = 2, items = { + {items = {'farming:pepper 2'}, rarity = 1}, + {items = {'farming:pepper'}, rarity = 2}, + {items = {'farming:pepper'}, rarity = 3}, + } +} +minetest.register_node("farming:pepper_5", table.copy(crop_def)) diff --git a/crops/pineapple.lua b/crops/pineapple.lua new file mode 100644 index 0000000..3525136 --- /dev/null +++ b/crops/pineapple.lua @@ -0,0 +1,129 @@ + +local S = farming.intllib + +-- pineapple top +minetest.register_craftitem("farming:pineapple_top", { + description = S("Pineapple Top"), + inventory_image = "farming_pineapple_top.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:pineapple_1") + end, +}) + +-- pineapple +minetest.register_node("farming:pineapple", { + description = S("Pineapple"), + drawtype = "plantlike", + tiles = {"farming_pineapple.png"}, + inventory_image = "farming_pineapple.png", + wield_image = "farming_pineapple.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + 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}, +}) + +-- pineapple +minetest.register_craftitem("farming:pineapple_ring", { + description = S("Pineapple Ring"), + inventory_image = "farming_pineapple_ring.png", + groups = {food_pineapple_ring = 1, flammable = 2}, + on_use = minetest.item_eat(1), +}) + +minetest.register_craft( { + output = "farming:pineapple_ring 5", + type = "shapeless", + 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"), +}) + +minetest.register_craft({ + output = "farming:pineapple_juice", + type = "shapeless", + recipe = {"vessels:drinking_glass", "group:food_pineapple_ring", + "group:food_pineapple_ring", "group:food_pineapple_ring", + "farming:juicer"}, + replacements = { + {"group:food_juicer", "farming:juicer"}, + }, +}) + +minetest.register_craft({ + output = "farming:pineapple_juice 2", + type = "shapeless", + recipe = { + "vessels:drinking_glass", "vessels:drinking_glass", + "group:food_pineapple", "farming:juicer" + }, + replacements = { + {"group:food_juicer", "farming:juicer"}, + }, +}) + +-- crop definition +local crop_def = { + drawtype = "plantlike", + visual_scale = 1.5, + tiles = {"farming_pineapple_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:pineapple_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_pineapple_2.png"} +minetest.register_node("farming:pineapple_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_pineapple_3.png"} +minetest.register_node("farming:pineapple_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_pineapple_4.png"} +minetest.register_node("farming:pineapple_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_pineapple_5.png"} +minetest.register_node("farming:pineapple_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_pineapple_6.png"} +minetest.register_node("farming:pineapple_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_pineapple_7.png"} +minetest.register_node("farming:pineapple_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_pineapple_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:pineapple'}, rarity = 1}, + {items = {'farming:pineapple'}, rarity = 15}, + } +} +minetest.register_node("farming:pineapple_8", table.copy(crop_def)) diff --git a/crops/potato.lua b/crops/potato.lua new file mode 100644 index 0000000..a1512c2 --- /dev/null +++ b/crops/potato.lua @@ -0,0 +1,94 @@ + +--[[ + Original textures from DocFarming mod + https://forum.minetest.net/viewtopic.php?id=3948 +]] + +local S = farming.intllib + +-- potato +minetest.register_craftitem("farming:potato", { + description = S("Potato"), + inventory_image = "farming_potato.png", + groups = {food_potato = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:potato_1") + end, + on_use = minetest.item_eat(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), +}) + +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"), +}) + +minetest.register_craft({ + output = "farming:potato_salad", + recipe = { + {"group:food_cucumber"}, + {"farming:baked_potato"}, + {"group:food_bowl"}, + } +}) + +-- potato definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_potato_1.png"}, + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:potato_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_potato_2.png"} +minetest.register_node("farming:potato_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_potato_3.png"} +crop_def.drop = { + items = { + {items = {'farming:potato'}, rarity = 1}, + {items = {'farming:potato'}, rarity = 3}, + } +} +minetest.register_node("farming:potato_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_potato_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:potato 2'}, rarity = 1}, + {items = {'farming:potato 3'}, rarity = 2}, + } +} +minetest.register_node("farming:potato_4", table.copy(crop_def)) diff --git a/crops/pumpkin.lua b/crops/pumpkin.lua new file mode 100644 index 0000000..c864d55 --- /dev/null +++ b/crops/pumpkin.lua @@ -0,0 +1,213 @@ + +--[[ + Big thanks to PainterlyPack.net for allowing me to use these textures +]] + +local S = farming.intllib + +-- pumpkin slice +minetest.register_craftitem("farming:pumpkin_slice", { + description = S("Pumpkin Slice"), + inventory_image = "farming_pumpkin_slice.png", + groups = {food_pumpkin_slice = 1, flammable = 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), +}) + +minetest.register_craft({ + output = "farming:pumpkin", + recipe = { + {"farming:pumpkin_slice", "farming:pumpkin_slice"}, + {"farming:pumpkin_slice", "farming:pumpkin_slice"}, + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:pumpkin_slice 4", + recipe = {"farming:pumpkin", "farming:cutting_board"}, + 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_top.png", + "farming_pumpkin_top.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_face_off.png" + }, + paramtype2 = "facedir", + groups = {choppy = 1, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos, node, puncher) + node.name = "farming:jackolantern_on" + minetest.swap_node(pos, node) + end, +}) + +minetest.register_node("farming:jackolantern_on", { + tiles = { + "farming_pumpkin_top.png", + "farming_pumpkin_top.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_face_on.png" + }, + light_source = default.LIGHT_MAX - 1, + paramtype2 = "facedir", + groups = { + choppy = 1, oddly_breakable_by_hand = 1, flammable = 2, + not_in_creative_inventory = 1 + }, + sounds = default.node_sound_wood_defaults(), + drop = "farming:jackolantern", + on_punch = function(pos, node, puncher) + node.name = "farming:jackolantern" + minetest.swap_node(pos, node) + end, +}) + +minetest.register_craft({ + output = "farming:jackolantern", + recipe = { + {"default:torch"}, + {"group:food_pumpkin"}, + } +}) + +--- wooden scarecrow base +minetest.register_node("farming: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 = {snappy = 3, flammable = 2}, +}) + +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, flammable = 2}, +}) + +minetest.register_craftitem("farming:pumpkin_dough", { + description = S("Pumpkin Dough"), + inventory_image = "farming_pumpkin_dough.png", +}) + +minetest.register_craft({ + output = "farming:pumpkin_dough", + type = "shapeless", + recipe = {"group:food_flour", "group:food_pumpkin_slice", "group:food_pumpkin_slice"} +}) + +minetest.register_craft({ + type = "cooking", + output = "farming:pumpkin_bread", + recipe = "farming:pumpkin_dough", + cooktime = 10 +}) + +-- pumpkin definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_pumpkin_1.png"}, + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:pumpkin_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_pumpkin_2.png"} +minetest.register_node("farming:pumpkin_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_pumpkin_3.png"} +minetest.register_node("farming:pumpkin_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_pumpkin_4.png"} +minetest.register_node("farming:pumpkin_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_pumpkin_5.png"} +minetest.register_node("farming:pumpkin_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_pumpkin_6.png"} +minetest.register_node("farming:pumpkin_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_pumpkin_7.png"} +minetest.register_node("farming:pumpkin_7", table.copy(crop_def)) + +-- stage 8 (final) +--[[ +crop_def.tiles = {"farming_pumpkin_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:pumpkin_slice 9'}, rarity = 1}, + } +} +minetest.register_node("farming:pumpkin_8", table.copy(crop_def)) +]] + +minetest.register_node("farming:pumpkin_8", { + description = S("Pumpkin"), + tiles = { + "farming_pumpkin_top.png", + "farming_pumpkin_top.png", + "farming_pumpkin_side.png" + }, + groups = { + food_pumpkin = 1, choppy = 1, oddly_breakable_by_hand = 1, + flammable = 2, plant = 1 + }, +-- drop = { +-- items = { +-- {items = {'farming:pumpkin_slice 9'}, rarity = 1}, +-- } +-- }, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_alias("farming:pumpkin", "farming:pumpkin_8") diff --git a/crops/raspberry.lua b/crops/raspberry.lua new file mode 100644 index 0000000..713ea2f --- /dev/null +++ b/crops/raspberry.lua @@ -0,0 +1,69 @@ + +local S = farming.intllib + +-- raspberries +minetest.register_craftitem("farming:raspberries", { + description = S("Raspberries"), + inventory_image = "farming_raspberries.png", + groups = {food_raspberries = 1, food_raspberry = 1, food_berry = 1, flammable = 2}, + 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), +}) + +-- 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"), +}) + +minetest.register_craft({ + output = "farming:smoothie_raspberry", + recipe = { + {"default:snow"}, + {"group:food_raspberries"}, + {"vessels:drinking_glass"}, + } +}) + +-- raspberries definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_raspberry_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:raspberry_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_raspberry_2.png"} +minetest.register_node("farming:raspberry_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_raspberry_3.png"} +minetest.register_node("farming:raspberry_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_raspberry_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:raspberries 2'}, rarity = 1}, + {items = {'farming:raspberries'}, rarity = 2}, + {items = {'farming:raspberries'}, rarity = 3}, + } +} +minetest.register_node("farming:raspberry_4", table.copy(crop_def)) diff --git a/crops/rhubarb.lua b/crops/rhubarb.lua new file mode 100644 index 0000000..90a2d8b --- /dev/null +++ b/crops/rhubarb.lua @@ -0,0 +1,66 @@ + +local S = farming.intllib + +-- rhubarb +minetest.register_craftitem("farming:rhubarb", { + description = S("Rhubarb"), + inventory_image = "farming_rhubarb.png", + groups = {food_rhubarb = 1, flammable = 2}, + 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), +}) + +-- rhubarb pie +minetest.register_craftitem("farming:rhubarb_pie", { + description = S("Rhubarb Pie"), + inventory_image = "farming_rhubarb_pie.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:rhubarb_pie", + recipe = { + {"farming: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 crop_def = { + drawtype = "plantlike", + tiles = {"farming_rhubarb_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:rhubarb_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_rhubarb_2.png"} +minetest.register_node("farming:rhubarb_2", table.copy(crop_def)) + +-- stage 3 (final) +crop_def.tiles = {"farming_rhubarb_3.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:rhubarb 2'}, rarity = 1}, + {items = {'farming:rhubarb'}, rarity = 2}, + {items = {'farming:rhubarb'}, rarity = 3}, + } +} +minetest.register_node("farming:rhubarb_3", table.copy(crop_def)) diff --git a/crops/spelt.lua b/crops/spelt.lua new file mode 100644 index 0000000..48701d1 --- /dev/null +++ b/crops/spelt.lua @@ -0,0 +1,171 @@ + +local S = farming.intllib + +-- spelt seeds +minetest.register_node("farming:seed_spelt", { + description = S("Spelt Seed"), + tiles = {"farming_spelt_seed.png"}, + inventory_image = "farming_spelt_seed.png", + wield_image = "farming_spelt_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:spelt_1") + end, +}) + +-- harvested spelt +minetest.register_craftitem("farming:spelt", { + description = S("Spelt"), + inventory_image = "farming_spelt.png", + groups = {food_spelt = 1, flammable = 2}, +}) + +-- flour +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = { + "farming:spelt", "farming:spelt", "farming:spelt", + "farming:spelt", "farming:mortar_pestle" + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}}, +}) + +-- roasted spelt +minetest.register_craftitem("farming:spelt_roasted", { + description = S("Roasted Spelt"), + inventory_image = "farming_spelt_roasted.png", + groups = {food_spelt_roasted = 1, flammable = 2}, +}) +minetest.register_craft({ + type = "cooking", + cooktime = 1, + output = "farming:spelt_roasted", + recipe = "farming:spelt" +}) + +-- spelt coffee +minetest.register_craftitem("farming:spelt_coffee", { + description = S("Spelt Coffee"), + inventory_image = "farming_roasted_powder.png", + groups = {food_spelt_powder = 1, flammable = 2}, +}) +minetest.register_craft({ + type = "shapeless", + output = "farming:spelt_coffee", + recipe = { + "farming:spelt_roasted", "farming:spelt_roasted", "farming:coffee_grinder" + }, + replacements = {{"group:food_coffee_grinder", "farming:coffee_grinder"}}, +}) + +-- cold cup of coffee +minetest.register_node("farming:spelt_coffee_cup", { + description = S("Cup of Spelt Coffee"), + drawtype = "torchlike", --"plantlike", + 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}, + on_use = minetest.item_eat(2, "vessels:drinking_glass"), + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_alias("farming:spelt_coffee_cup_hot", "farming:spelt_coffee_cup") + +minetest.register_craft( { + output = "farming:spelt_coffee_cup", + type = "shapeless", + recipe = {"vessels:drinking_glass", "group:food_spelt_powder", + "bucket:bucket_water", "group:food_saucepan"}, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"}, + {"group:food_saucepan", "farming:saucepan"}, + } +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:spelt_roasted", + recipe = "farming:spelt" +}) + +-- spelt definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_spelt_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:spelt_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_spelt_2.png"} +minetest.register_node("farming:spelt_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_spelt_3.png"} +minetest.register_node("farming:spelt_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_spelt_4.png"} +minetest.register_node("farming:spelt_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_spelt_5.png"} +crop_def.drop = { + items = { + {items = {'farming:spelt'}, rarity = 2}, + {items = {'farming:seed_spelt'}, rarity = 2}, + } +} +minetest.register_node("farming:spelt_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_spelt_6.png"} +crop_def.drop = { + items = { + {items = {'farming:spelt'}, rarity = 2}, + {items = {'farming:seed_spelt'}, rarity = 1}, + } +} +minetest.register_node("farming:spelt_6", table.copy(crop_def)) + +-- stage 7 (final) +crop_def.tiles = {"farming_spelt_7.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:spelt'}, rarity = 1}, + {items = {'farming:spelt'}, rarity = 3}, + {items = {'farming:seed_spelt'}, rarity = 1}, + {items = {'farming:seed_spelt'}, rarity = 3}, + } +} +minetest.register_node("farming:spelt_7", table.copy(crop_def)) diff --git a/crops/tomato.lua b/crops/tomato.lua new file mode 100644 index 0000000..53012a8 --- /dev/null +++ b/crops/tomato.lua @@ -0,0 +1,79 @@ + +--[[ + Textures edited from: + 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.intllib + +-- tomato +minetest.register_craftitem("farming:tomato", { + description = S("Tomato"), + inventory_image = "farming_tomato.png", + groups = {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), +}) + +-- tomato definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_tomato_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:tomato_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_tomato_2.png"} +minetest.register_node("farming:tomato_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_tomato_3.png"} +minetest.register_node("farming:tomato_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_tomato_4.png"} +minetest.register_node("farming:tomato_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_tomato_5.png"} +minetest.register_node("farming:tomato_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_tomato_6.png"} +minetest.register_node("farming:tomato_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_tomato_7.png"} +crop_def.drop = { + items = { + {items = {'farming:tomato'}, rarity = 1}, + {items = {'farming:tomato'}, rarity = 3}, + } +} +minetest.register_node("farming:tomato_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_tomato_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:tomato 3'}, rarity = 1}, + {items = {'farming:tomato 3'}, rarity = 2}, + } +} +minetest.register_node("farming:tomato_8", table.copy(crop_def)) diff --git a/crops/wheat.lua b/crops/wheat.lua new file mode 100644 index 0000000..abf3ada --- /dev/null +++ b/crops/wheat.lua @@ -0,0 +1,244 @@ + +local S = farming.intllib + +-- wheat seeds +minetest.register_node("farming:seed_wheat", { + description = S("Wheat Seed"), + tiles = {"farming_wheat_seed.png"}, + inventory_image = "farming_wheat_seed.png", + wield_image = "farming_wheat_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1, flammable = 4}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:wheat_1") + end, +}) + +-- harvested wheat +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 = {snappy = 3, flammable = 4, fall_damage_add_percent = -30}, + sounds = default.node_sound_leaves_defaults(), +}) + +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", + default.node_sound_leaves_defaults()) + else + + stairs.register_stair_and_slab("straw", "farming:straw", + {snappy = 3, flammable = 4}, + {"farming_straw.png"}, + "Straw Stair", + "Straw Slab", + default.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({ + type = "shapeless", + output = "farming:flour", + recipe = { + "farming:wheat", "farming:wheat", "farming:wheat", + "farming:wheat", "farming: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, flammable = 2}, +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" +}) + +-- 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, flammable = 2}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:bread_slice 5", + recipe = {"farming:bread", "group:food_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, flammable = 2}, +}) + +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 = {flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:toast_sandwich", + recipe = { + {"farming:bread_slice"}, + {"farming:toast"}, + {"farming:bread_slice"}, + } +}) + +-- wheat definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_wheat_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 4, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:wheat_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_wheat_2.png"} +minetest.register_node("farming:wheat_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_wheat_3.png"} +minetest.register_node("farming:wheat_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_wheat_4.png"} +minetest.register_node("farming:wheat_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_wheat_5.png"} +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 2}, + {items = {'farming:seed_wheat'}, rarity = 2}, + } +} +minetest.register_node("farming:wheat_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_wheat_6.png"} +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 2}, + {items = {'farming:seed_wheat'}, rarity = 1}, + } +} +minetest.register_node("farming:wheat_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_wheat_7.png"} +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 1}, + {items = {'farming:wheat'}, rarity = 3}, + {items = {'farming:seed_wheat'}, rarity = 1}, + {items = {'farming:seed_wheat'}, rarity = 3}, + } +} +minetest.register_node("farming:wheat_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_wheat_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 1}, + {items = {'farming:wheat'}, rarity = 3}, + {items = {'farming:seed_wheat'}, rarity = 1}, + {items = {'farming:seed_wheat'}, rarity = 3}, + } +} +minetest.register_node("farming:wheat_8", table.copy(crop_def)) + +-- fuels +minetest.register_craft({ + type = "fuel", + recipe = "farming:straw", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:wheat", + burntime = 1, +}) diff --git a/farming.conf_example b/farming.conf_example new file mode 100644 index 0000000..f652e9c --- /dev/null +++ b/farming.conf_example @@ -0,0 +1,34 @@ + +--[[ + Farming settings can be changed here and kept inside mod folder + even after the mod has been updated, or you can place inside + world folder for map specific settings. +--]] + +-- true to enable crop/food in-game and on mapgen +farming.carrot = true +farming.potato = true +farming.tomato = true +farming.cucumber = true +farming.corn = true +farming.coffee = true +farming.melon = true +farming.pumpkin = true +farming.cocoa = true +farming.raspberry = true +farming.blueberry = true +farming.rhubarb = true +farming.beans = true +farming.grapes = true +farming.barley = true +farming.chili = true +farming.hemp = true +farming.onion = true +farming.garlic = true +farming.pepper = true +farming.pineapple = true +farming.peas = true +farming.beetroot = true + +-- rarety of crops on map, default is 0.001 (higher number = more crops) +farming.rarety = 0.002 diff --git a/food.lua b/food.lua new file mode 100644 index 0000000..f099e53 --- /dev/null +++ b/food.lua @@ -0,0 +1,188 @@ + +local S = farming.intllib + +--= Sugar + +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", +}) + + +--= Salt + +minetest.register_node("farming:salt", { + description = ("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}, + sounds = default.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:salt", + recipe = "bucket:bucket_water", + replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}} +}) + +--= Rose Water + +minetest.register_node("farming:rose_water", { + description = ("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}, + sounds = default.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 = { + {"flowers:rose", "flowers:rose", "flowers:rose"}, + {"flowers:rose", "flowers:rose", "flowers:rose"}, + {"bucket:bucket_water", "group:food_pot", "vessels:glass_bottle"}, + }, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"}, + {"group:food_pot", "farming:pot"}, + } +}) + +--= Turkish Delight + +minetest.register_craftitem("farming:turkish_delight", { + description = S("Turkish Delight"), + inventory_image = "farming_turkish_delight.png", + groups = {flammable = 3}, + on_use = minetest.item_eat(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_cornstarch", "group:food_sugar", "dye:pink"}, + }, + replacements = { + {"group:food_cornstarch", "farming:bowl"}, + {"group:food_rose_water", "vessels:glass_bottle"}, + }, +}) + +--= Garlic Bread + +minetest.register_craftitem("farming:garlic_bread", { + description = S("Garlic Bread"), + inventory_image = "farming_garlic_bread.png", + groups = {flammable = 3}, + on_use = minetest.item_eat(2), +}) + +minetest.register_craft({ + type = "shapeless", + 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), +}) + +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), +}) + +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), +}) + +minetest.register_craft({ + output = "farming:donut_apple", + recipe = { + {'default:apple'}, + {'farming:donut'}, + } +}) + +--= Porridge Oats + +minetest.register_craftitem("farming:porridge", { + description = S("Porridge"), + inventory_image = "farming_porridge.png", + on_use = minetest.item_eat(6, "farming:bowl"), +}) + +minetest.after(0, function() + + local fluid = "bucket:bucket_water" + local fluid_return = "bucket:bucket_water" + + if minetest.get_modpath("mobs") and mobs and mobs.mod == "redo" then + fluid = "group:food_milk" + fluid_return = "mobs:bucket_milk" + end + + minetest.register_craft({ + type = "shapeless", + output = "farming:porridge", + recipe = { + "group:food_barley", "group:food_barley", "group:food_wheat", + "group:food_wheat", "group:food_bowl", fluid + }, + replacements = {{fluid_return, "bucket:bucket_empty"}} + }) +end) diff --git a/grains.lua b/grains.lua new file mode 100644 index 0000000..a7951a7 --- /dev/null +++ b/grains.lua @@ -0,0 +1,197 @@ + +local S = farming.intllib + +-- fuels +minetest.register_craft({ + type = "fuel", + recipe = "farming:straw", + burntime = 3, +}) +-- flour +minetest.register_craftitem("farming:flour", { + description = S("Flour"), + inventory_image = "farming_flour.png", + groups = {food_flour = 1, flammable = 1}, +}) +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = { + "group:seed", "group:seed", "group:seed", + "group:seed", "farming: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, flammable = 2}, +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" +}) + +-- 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, flammable = 2}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:bread_slice 5", + recipe = {"farming:bread", "group:food_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, flammable = 2}, +}) + +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 = {flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:toast_sandwich", + recipe = { + {"farming:bread_slice"}, + {"farming:toast"}, + {"farming:bread_slice"}, + } +}) + +local function register_grain(grain_name_in,bwild,max_level,harvest_threshold,seed_threshold,seed_rarity) +local grain_name=string.lower(grain_name_in) +local print_name=string.upper(string.sub(grain_name,1,1))..string.sub(grain_name,2,99) +local modname=minetest.get_current_modname() +local farming_name=modname..":"..grain_name +local seed_name=modname..":seed_"..grain_name +print("registering "..seed_name) +local seed_png="farming_"..grain_name.."_seed.png" + +-- seeds +minetest.register_node(seed_name, { + description = S(print_name.." Seed"), + tiles = {seed_png}, + inventory_image = seed_png, + wield_image = seed_png, + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1, flammable = 4}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:"..grain_name.."_1") + end, +}) +-- harvested +minetest.register_craftitem(farming_name, { + description = S(print_name), + inventory_image = "farming_"..grain_name..".png", + groups = {food_harvested = 1, flammable = 4}, +}) +-- roasted +minetest.register_craftitem(seed_name.."_roasted", { + description = S(print_name.." roasted"), + inventory_image = "farming_"..grain_name.."_seed_roasted.png", + groups = {food_grain_roasted = 1, flammable = 4}, +}) +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = seed_name.."_roasted", + recipe = seed_name +}) + +minetest.register_craft({ + type = "shapeless", + output = seed_name, + recipe = { + farming_name, farming_name, farming_name, + farming_name, modname..":flail" + }, + replacements = {{"group:flail", "farming:flail"}, + {"group:harvested",modname..":straw"}}, +}) +-- grain definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_"..grain_name.."_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 4, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stages +for level=1,max_level,1 do + crop_def.tiles = {"farming_"..grain_name.."_"..level..".png"} + if (level >= harvest_threshold) and (level < seed_threshold) then + crop_def.drop={items={items = {items = {farming_name},rarity=1}}} + end + if (level >= seed_threshold) then + crop_def.drop={ items = { + {items = {farming_name},rarity=1}, + {items = {farming_name},rarity=3}, + {items = {seed_name},rarity=seed_rarity} + } + } + end + if (level == max_level) then + crop_def.groups.growing = 0 + end + minetest.register_node(farming_name.."_"..level, table.copy(crop_def)) +end + + + +-- fuels +minetest.register_craft({ + type = "fuel", + recipe = farming_name, + burntime = 1, +}) + +end + +register_grain("wheat",true,8,5,7,2) +print("register grain spelt") +register_grain("spelt",true,7,5,6,2) + + diff --git a/grass.lua b/grass.lua new file mode 100644 index 0000000..570710c --- /dev/null +++ b/grass.lua @@ -0,0 +1,44 @@ + +for i = 4, 5 do + + -- Override default grass and have it drop Wheat Seeds + + minetest.override_item("default:grass_" .. i, { + drop = { + max_items = 1, + items = { + {items = {'farming:seed_wheat'}, rarity = 5}, + {items = {'farming:seed_spelt'}, rarity = 5}, + {items = {'default:grass_1'}}, + } + }, + }) + + -- Override default dry grass and have it drop Barley Seeds + + if minetest.registered_nodes["default:dry_grass_1"] then + + minetest.override_item("default:dry_grass_" .. i, { + drop = { + max_items = 1, + items = { + {items = {'farming:seed_barley'}, rarity = 6}, + {items = {'default:dry_grass_1'}}, + } + }, + }) + end + +end + +-- Override default Jungle Grass and have it drop Cotton Seeds + +minetest.override_item("default:junglegrass", { + drop = { + max_items = 1, + items = { + {items = {'farming:seed_cotton'}, rarity = 8}, + {items = {'default:junglegrass'}}, + } + }, +}) diff --git a/hoes.lua b/hoes.lua new file mode 100644 index 0000000..633e6f0 --- /dev/null +++ b/hoes.lua @@ -0,0 +1,332 @@ + +local S = farming.intllib +local 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 + + -- Check def table + 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.max_uses == nil then + def.max_uses = 30 + end + + -- Register the tool + minetest.register_tool(name, { + description = def.description, + inventory_image = def.inventory_image, + 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"}, + }) + + -- 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 = { + {def.material, def.material, ""}, + {"", "group:stick", ""}, + {"", "group:stick", ""} + } + }) + end +end + +-- Turns dirt with group soil=1 into soil + +function farming.hoe_on_use(itemstack, user, pointed_thing, uses) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + return + 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 + + -- turn the node into soil, wear out item and play sound + minetest.set_node(pt.under, {name = "farming:soil"}) + + minetest.sound_play("default_dig_crumbly", {pos = pt.under, gain = 0.5}) + + local wear = 65535 / (uses -1) + + if farming.is_creative(user:get_player_name()) then + if tr then + wear = 1 + else + wear = 0 + end + end + + if tr then + itemstack = toolranks.new_afteruse(itemstack, user, under, {wear = wear}) + else + itemstack:add_wear(wear) + end + + return itemstack +end + +-- Define Hoes + +farming.register_hoe(":farming:hoe_wood", { + description = S("Wooden Hoe"), + inventory_image = "farming_tool_woodhoe.png", + max_uses = 30, + material = "group:wood" +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:hoe_wood", + burntime = 5, +}) + +farming.register_hoe(":farming:hoe_stone", { + description = S("Stone Hoe"), + inventory_image = "farming_tool_stonehoe.png", + max_uses = 90, + 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" +}) + +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}, +}) + +farming.register_hoe(":farming:hoe_mese", { + description = S("Mese Hoe"), + inventory_image = "farming_tool_mesehoe.png", + max_uses = 350, + groups = {not_in_creative_inventory = 1}, +}) + +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}, +}) + +-- Toolranks support +if tr then + +minetest.override_item("farming:hoe_wood", { + original_description = "Wood Hoe", + description = toolranks.create_description("Wood Hoe")}) + +minetest.override_item("farming:hoe_stone", { + original_description = "Stone Hoe", + description = toolranks.create_description("Stone Hoe")}) + +minetest.override_item("farming:hoe_steel", { + original_description = "Steel Hoe", + description = toolranks.create_description("Steel Hoe")}) + +minetest.override_item("farming:hoe_bronze", { + original_description = "Bronze Hoe", + description = toolranks.create_description("Bronze Hoe")}) + +minetest.override_item("farming:hoe_mese", { + original_description = "Mese Hoe", + description = toolranks.create_description("Mese Hoe")}) + +minetest.override_item("farming:hoe_diamond", { + original_description = "Diamond Hoe", + description = toolranks.create_description("Diamond Hoe")}) +end + + +-- hoe bomb function +local function hoe_area(pos, player) + + -- check for protection + if minetest.is_protected(pos, player:get_player_name()) then + minetest.record_protection_violation(pos, player:get_player_name()) + return + end + + local r = 5 -- radius + + -- 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"}) + + for n = 1, #res do + minetest.swap_node(res[n], {name = "air"}) + 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}, + {"group:soil"}) + + for n = 1, #res do + minetest.swap_node(res[n], {name = "farming:soil"}) + end +end + + +-- throwable hoe bomb +minetest.register_entity("farming:hoebomb_entity", { + physical = true, + visual = "sprite", + visual_size = {x = 1.0, y = 1.0}, + textures = {"farming_hoe_bomb.png"}, + collisionbox = {0,0,0,0,0,0}, + lastpos = {}, + player = "", + + on_step = function(self, dtime) + + if not self.player then + + self.object:remove() + + return + end + + local pos = self.object:get_pos() + + if self.lastpos.x ~= nil then + + local vel = self.object:getvelocity() + + -- only when potion hits something physical + if vel.x == 0 + or vel.y == 0 + or vel.z == 0 then + + if self.player ~= "" then + + -- round up coords to fix glitching through doors + self.lastpos = vector.round(self.lastpos) + + hoe_area(self.lastpos, self.player) + end + + self.object:remove() + + return + + end + end + + self.lastpos = pos + end +}) + + +-- actual throwing function +local function throw_potion(itemstack, player) + + local playerpos = player:get_pos() + + local obj = minetest.add_entity({ + x = playerpos.x, + y = playerpos.y + 1.5, + z = playerpos.z + }, "farming:hoebomb_entity") + + local dir = player:get_look_dir() + local velocity = 20 + + obj:setvelocity({ + x = dir.x * velocity, + y = dir.y * velocity, + z = dir.z * velocity + }) + + obj:setacceleration({ + x = dir.x * -3, + y = -9.5, + z = dir.z * -3 + }) + + obj:setyaw(player:get_look_yaw() + math.pi) + 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 + hoe_area(pointed_thing.above, user) + else + throw_potion(itemstack, user) + + if not farming.is_creative(user:get_player_name()) then + + itemstack:take_item() + + return itemstack + end + end + end, +}) diff --git a/locale/fr.po b/locale/fr.po new file mode 100644 index 0000000..7b50640 --- /dev/null +++ b/locale/fr.po @@ -0,0 +1,259 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-27 20:21+0200\n" +"PO-Revision-Date: 2018-03-27 22:16+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.7.1\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: fr\n" + +#: barley.lua +msgid "Barley Seed" +msgstr "Graine d'orge" + +#: barley.lua +msgid "Barley" +msgstr "Orge" + +#: beanpole.lua +msgid "Green Beans" +msgstr "Haricots verts" + +#: beanpole.lua +msgid "Bean Pole (place on soil before planting beans)" +msgstr "Tuteur pour haricots (placer sur le sol avant de planter des haricots)" + +#: blueberry.lua +msgid "Blueberries" +msgstr "Myrtilles" + +#: blueberry.lua +msgid "Blueberry Muffin" +msgstr "Gâteau aux myrtilles" + +#: carrot.lua +msgid "Carrot" +msgstr "Carotte" + +#: carrot.lua +msgid "Golden Carrot" +msgstr "Carotte dorée" + +#: cocoa.lua +msgid "Cocoa Beans" +msgstr "Fèves de chocolat" + +#: cocoa.lua +msgid "Cookie" +msgstr "Biscuit" + +#: cocoa.lua +msgid "Bar of Dark Chocolate" +msgstr "Barre de chocolat noir" + +#: coffee.lua +msgid "Coffee Beans" +msgstr "Grains de café" + +#: coffee.lua +msgid "Drinking Cup (empty)" +msgstr "Tasse (vide)" + +#: coffee.lua +msgid "Cold Cup of Coffee" +msgstr "Tasse de café froid" + +#: coffee.lua +msgid "Hot Cup of Coffee" +msgstr "Tasse de café chaud" + +#: corn.lua +msgid "Corn" +msgstr "Maïs" + +#: corn.lua +msgid "Corn on the Cob" +msgstr "Épi de maïs" + +#: corn.lua +msgid "Bottle of Ethanol" +msgstr "Bouteille de'éthanol" + +#: cotton.lua +msgid "Cotton Seed" +msgstr "Graines de coton" + +#: cotton.lua +msgid "Cotton" +msgstr "Coton" + +#: cucumber.lua +msgid "Cucumber" +msgstr "Concombre" + +#: donut.lua +msgid "Donut" +msgstr "Beignet" + +#: donut.lua +msgid "Chocolate Donut" +msgstr "Beignet au chocolat" + +#: donut.lua +msgid "Apple Donut" +msgstr "Beignet aux pommes" + +#: grapes.lua +msgid "Grapes" +msgstr "Raisins" + +#: grapes.lua +msgid "Trellis (place on soil before planting grapes)" +msgstr "Treillis (placer sur le sol avant de planter les raisins)" + +#: hemp.lua +msgid "Hemp Seed" +msgstr "Graines de chanvre" + +#: hemp.lua +msgid "Hemp Leaf" +msgstr "Feuille de chanvre" + +#: hemp.lua +msgid "Bottle of Hemp Oil" +msgstr "Bouteille d'huile de chanvre" + +#: hemp.lua +msgid "Hemp Fibre" +msgstr "Fibre de chanvre" + +#: hemp.lua +msgid "Hemp Rope" +msgstr "Corde de chanvre" + +#: hoes.lua +msgid "Wooden Hoe" +msgstr "Houe en bois" + +#: hoes.lua +msgid "Stone Hoe" +msgstr "Houe en pierre" + +#: hoes.lua +msgid "Steel Hoe" +msgstr "Houe en acier" + +#: hoes.lua +msgid "Bronze Hoe" +msgstr "Houe en bronze" + +#: hoes.lua +msgid "Mese Hoe" +msgstr "Houe en mese" + +#: hoes.lua +msgid "Diamond Hoe" +msgstr "Houe en diamant" + +#: init.lua +msgid "Seed" +msgstr "Graine" + +#: melon.lua +msgid "Melon Slice" +msgstr "Tranche de melon" + +#: melon.lua +msgid "Melon" +msgstr "Melon" + +#: potato.lua +msgid "Potato" +msgstr "Pomme de terre" + +#: potato.lua +msgid "Baked Potato" +msgstr "Pomme de terre cuite" + +#: pumpkin.lua +msgid "Pumpkin" +msgstr "Citrouille" + +#: pumpkin.lua +msgid "Pumpkin Slice" +msgstr "Tranche de citrouille" + +#: pumpkin.lua +msgid "Jack 'O Lantern (punch to turn on and off)" +msgstr "Jack 'O Lantern (tapé pour allumer et éteindre)" + +#: pumpkin.lua +msgid "Pumpkin Bread" +msgstr "Pain à la citrouille" + +#: pumpkin.lua +msgid "Pumpkin Dough" +msgstr "Pâte à la citrouille" + +#: raspberry.lua +msgid "Raspberries" +msgstr "Framboises" + +#: raspberry.lua +msgid "Raspberry Smoothie" +msgstr "Smoothie aux framboises" + +#: rhubarb.lua +msgid "Rhubarb" +msgstr "Rhubarbe" + +#: rhubarb.lua +msgid "Rhubarb Pie" +msgstr "Tarte à la rhubarbe" + +#: soil.lua +msgid "Soil" +msgstr "Sol" + +#: soil.lua +msgid "Wet Soil" +msgstr "Sol humide" + +#: sugar.lua +msgid "Sugar" +msgstr "Sucre" + +#: tomato.lua +msgid "Tomato" +msgstr "Tomate" + +#: wheat.lua +msgid "Wheat Seed" +msgstr "Graine de blé" + +#: wheat.lua +msgid "Wheat" +msgstr "Blé" + +#: wheat.lua +msgid "Straw" +msgstr "Paille" + +#: wheat.lua +msgid "Flour" +msgstr "Farine" + +#: wheat.lua +msgid "Bread" +msgstr "Pain" diff --git a/locale/pt.po b/locale/pt.po new file mode 100644 index 0000000..bc4352f --- /dev/null +++ b/locale/pt.po @@ -0,0 +1,258 @@ +# Portuguese Translation for farming mod. +# Copyright (C) 2017 +# This file is distributed under the same license as the farming package. +# BrunoMine , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: 1.27\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-16 17:38-0300\n" +"PO-Revision-Date: 2017-08-17 17:01-0300\n" +"Last-Translator: BrunoMine \n" +"Language-Team: \n" +"Language: Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Gtranslator 2.91.7\n" + +#: barley.lua +msgid "Barley Seed" +msgstr "Sementes de Cevada" + +#: barley.lua +msgid "Barley" +msgstr "Cevada" + +#: beanpole.lua +msgid "Green Beans" +msgstr "Feijoes Verdes" + +#: beanpole.lua +msgid "Bean Pole (place on soil before planting beans)" +msgstr "Apoio de feijao (coloque no solo antes de plantar feijao)" + +#: blueberry.lua +msgid "Blueberries" +msgstr "Mirtilos" + +#: blueberry.lua +msgid "Blueberry Muffin" +msgstr "Muffin de Mirtilos" + +#: carrot.lua +msgid "Carrot" +msgstr "Cenoura" + +#: carrot.lua +msgid "Golden Carrot" +msgstr "Cenoura Dourada" + +#: cocoa.lua +msgid "Cocoa Beans" +msgstr "Amendoas de Cacau" + +#: cocoa.lua +msgid "Cookie" +msgstr "Cookie" + +#: cocoa.lua +msgid "Bar of Dark Chocolate" +msgstr "Barra de Chocolate Preto" + +#: coffee.lua +msgid "Coffee Beans" +msgstr "Grao de Cafe" + +#: coffee.lua +msgid "Drinking Cup (empty)" +msgstr "Xicara (vazia)" + +#: coffee.lua +msgid "Cold Cup of Coffee" +msgstr "Xicara de Cafe Frio" + +#: coffee.lua +msgid "Hot Cup of Coffee" +msgstr "Xicara de Cafe Quente" + +#: corn.lua +msgid "Corn" +msgstr "Milho" + +#: corn.lua +msgid "Corn on the Cob" +msgstr "Espiga de Milho" + +#: corn.lua +msgid "Bottle of Ethanol" +msgstr "Garrafa de Etanol" + +#: cotton.lua +msgid "Cotton Seed" +msgstr "Sementes de Algodao" + +#: cotton.lua +msgid "Cotton" +msgstr "Algodao" + +#: cucumber.lua +msgid "Cucumber" +msgstr "Pepino" + +#: donut.lua +msgid "Donut" +msgstr "Donut" + +#: donut.lua +msgid "Chocolate Donut" +msgstr "Donut de Chocolate" + +#: donut.lua +msgid "Apple Donut" +msgstr "Donut de Maça" + +#: grapes.lua +msgid "Grapes" +msgstr "Uvas" + +#: grapes.lua +msgid "Trellis (place on soil before planting grapes)" +msgstr "Grade de Ripas (colocar no solo antes de plantar uvas)" + +#: hemp.lua +msgid "Hemp Seed" +msgstr "Sementes de Canhamo" + +#: hemp.lua +msgid "Hemp Leaf" +msgstr "Folha de Canhamo" + +#: hemp.lua +msgid "Bottle of Hemp Oil" +msgstr "Garrafa de Oleo de Canhamo" + +#: hemp.lua +msgid "Hemp Fibre" +msgstr "Fibra de Canhamo" + +#: hemp.lua +msgid "Hemp Rope" +msgstr "Corda de Canhamo" + +#: hoes.lua +msgid "Wooden Hoe" +msgstr "Enxada de Madeira" + +#: hoes.lua +msgid "Stone Hoe" +msgstr "Enxada de Pedra" + +#: hoes.lua +msgid "Steel Hoe" +msgstr "Enxada de Aço" + +#: hoes.lua +msgid "Bronze Hoe" +msgstr "Enxada de Bronze" + +#: hoes.lua +msgid "Mese Hoe" +msgstr "Enxada de Mese" + +#: hoes.lua +msgid "Diamond Hoe" +msgstr "Enxada de Diamante" + +#: init.lua +msgid "Seed" +msgstr "Sementes" + +#: melon.lua +msgid "Melon Slice" +msgstr "Sementes de Melancia" + +#: melon.lua +msgid "Melon" +msgstr "Melancia" + +#: potato.lua +msgid "Potato" +msgstr "Batata" + +#: potato.lua +msgid "Baked Potato" +msgstr "Batata Cozida" + +#: pumpkin.lua +msgid "Pumpkin" +msgstr "Abobora" + +#: pumpkin.lua +msgid "Pumpkin Slice" +msgstr "Pedaço de Abobora" + +#: pumpkin.lua +msgid "Jack 'O Lantern (punch to turn on and off)" +msgstr "Jack 'O Lantern (Socos para ligar e desligar)" + +#: pumpkin.lua +msgid "Pumpkin Bread" +msgstr "Pao de Abobora" + +#: pumpkin.lua +msgid "Pumpkin Dough" +msgstr "Massa de Abobora" + +#: raspberry.lua +msgid "Raspberries" +msgstr "Framboesa" + +#: raspberry.lua +msgid "Raspberry Smoothie" +msgstr "Batida de Framboesa" + +#: rhubarb.lua +msgid "Rhubarb" +msgstr "Ruibarbo" + +#: rhubarb.lua +msgid "Rhubarb Pie" +msgstr "Torta de Ruibarbo" + +#: soil.lua +msgid "Soil" +msgstr "Solo" + +#: soil.lua +msgid "Wet Soil" +msgstr "Solo Seco" + +#: sugar.lua +msgid "Sugar" +msgstr "Açucar" + +#: tomato.lua +msgid "Tomato" +msgstr "Tomate" + +#: wheat.lua +msgid "Wheat Seed" +msgstr "Sementes de Trigo" + +#: wheat.lua +msgid "Wheat" +msgstr "Trigo" + +#: wheat.lua +msgid "Straw" +msgstr "Palha" + +#: wheat.lua +msgid "Flour" +msgstr "Farinha" + +#: wheat.lua +msgid "Bread" +msgstr "Pao" diff --git a/locale/ru.po b/locale/ru.po new file mode 100644 index 0000000..607c96d --- /dev/null +++ b/locale/ru.po @@ -0,0 +1,262 @@ +# Russian translation for farming mod. +# Copyright (C) 2018 +# This file is distributed under the same license as the farming package. +# codexp , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: 1.27\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-22 01:25+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: barley.lua +msgid "Barley Seed" +msgstr "семена ячменя" + +#: barley.lua +msgid "Barley" +msgstr "ячмень" + +#: beanpole.lua +msgid "Green Beans" +msgstr "зеленая фасоль" + +#: beanpole.lua +msgid "Bean Pole (place on soil before planting beans)" +msgstr "жердь для бобовых (установите на почву перед посадкой бобовых)" + +#: blueberry.lua +msgid "Blueberries" +msgstr "голубика" + +#: blueberry.lua +msgid "Blueberry Muffin" +msgstr "кекс из голубики" + +#: carrot.lua +msgid "Carrot" +msgstr "морковь" + +#: carrot.lua +msgid "Golden Carrot" +msgstr "золотая морковь" + +#: cocoa.lua +msgid "Cocoa Beans" +msgstr "бобы какао" + +#: cocoa.lua +msgid "Cookie" +msgstr "печенье" + +#: cocoa.lua +msgid "Bar of Dark Chocolate" +msgstr "плитка темного шоколада" + +#: coffee.lua +msgid "Coffee Beans" +msgstr "кофе в зернах" + +#: coffee.lua +msgid "Drinking Cup (empty)" +msgstr "чашка (пустая)" + +#: coffee.lua +msgid "Cold Cup of Coffee" +msgstr "холодная чашка кофе" + +#: coffee.lua +msgid "Hot Cup of Coffee" +msgstr "горячая чашка кофе" + +#: corn.lua +msgid "Corn" +msgstr "кукуруза" + +#: corn.lua +msgid "Corn on the Cob" +msgstr "початок кукурузы" + +#: corn.lua +msgid "Bottle of Ethanol" +msgstr "бутылка этилового спирта" + +#: cotton.lua +msgid "Cotton Seed" +msgstr "семена хлопка" + +#: cotton.lua +msgid "Cotton" +msgstr "хлопок" + +#: cucumber.lua +msgid "Cucumber" +msgstr "огурец" + +#: donut.lua +msgid "Donut" +msgstr "пончик" + +#: donut.lua +msgid "Chocolate Donut" +msgstr "шоколадный пончик" + +#: donut.lua +msgid "Apple Donut" +msgstr "яблочный пончик" + +#: grapes.lua +msgid "Grapes" +msgstr "виноград" + +#: grapes.lua +msgid "Trellis (place on soil before planting grapes)" +msgstr "решетка (поставьте на почву для посадки винограда)" + +#: hemp.lua +msgid "Hemp Seed" +msgstr "семена конопли" + +#: hemp.lua +msgid "Hemp Leaf" +msgstr "листья конопли" + +#: hemp.lua +msgid "Bottle of Hemp Oil" +msgstr "бутылка конопляного масла" + +#: hemp.lua +msgid "Hemp Fibre" +msgstr "" + +#: hemp.lua +msgid "Hemp Rope" +msgstr "Пенька" + +#: hoes.lua +msgid "Hoe" +msgstr "мотыга" + +#: hoes.lua +msgid "Wooden Hoe" +msgstr "деревянная мотыга" + +#: hoes.lua +msgid "Stone Hoe" +msgstr "каменная мотыга" + +#: hoes.lua +msgid "Steel Hoe" +msgstr "стальная мотыга" + +#: hoes.lua +msgid "Bronze Hoe" +msgstr "бронзовая мотыга" + +#: hoes.lua +msgid "Mese Hoe" +msgstr "магическая мотыга" + +#: hoes.lua +msgid "Diamond Hoe" +msgstr "алмазная мотыга" + +#: init.lua +msgid "Seed" +msgstr "семена" + +#: melon.lua +msgid "Melon Slice" +msgstr "ломтик арбуза" + +#: melon.lua +msgid "Melon" +msgstr "арбуз" + +#: potato.lua +msgid "Potato" +msgstr "картофель" + +#: potato.lua +msgid "Baked Potato" +msgstr "запеченный картофель" + +#: pumpkin.lua +msgid "Pumpkin" +msgstr "тыква" + +#: pumpkin.lua +msgid "Pumpkin Slice" +msgstr "ломтик тыквы" + +#: pumpkin.lua +msgid "Jack 'O Lantern (punch to turn on and off)" +msgstr "светильник джека (удар для включения и отключения)" + +#: pumpkin.lua +msgid "Pumpkin Bread" +msgstr "тыквенный хлеб" + +#: pumpkin.lua +msgid "Pumpkin Dough" +msgstr "тыквенное тесто" + +#: raspberry.lua +msgid "Raspberries" +msgstr "малина" + +#: raspberry.lua +msgid "Raspberry Smoothie" +msgstr "малиновый коктейль" + +#: rhubarb.lua +msgid "Rhubarb" +msgstr "ревень" + +#: rhubarb.lua +msgid "Rhubarb Pie" +msgstr "пирог из ревеня" + +#: soil.lua +msgid "Soil" +msgstr "земля" + +#: soil.lua +msgid "Wet Soil" +msgstr "мокрая земля" + +#: sugar.lua +msgid "Sugar" +msgstr "сахар" + +#: tomato.lua +msgid "Tomato" +msgstr "помидор" + +#: wheat.lua +msgid "Wheat Seed" +msgstr "" + +#: wheat.lua +msgid "Wheat" +msgstr "семена пшеницы" + +#: wheat.lua +msgid "Straw" +msgstr "солома" + +#: wheat.lua +msgid "Flour" +msgstr "мука" + +#: wheat.lua +msgid "Bread" +msgstr "хлеб" diff --git a/locale/template.pot b/locale/template.pot new file mode 100644 index 0000000..210d946 --- /dev/null +++ b/locale/template.pot @@ -0,0 +1,258 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-16 17:38-0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: barley.lua +msgid "Barley Seed" +msgstr "" + +#: barley.lua +msgid "Barley" +msgstr "" + +#: beanpole.lua +msgid "Green Beans" +msgstr "" + +#: beanpole.lua +msgid "Bean Pole (place on soil before planting beans)" +msgstr "" + +#: blueberry.lua +msgid "Blueberries" +msgstr "" + +#: blueberry.lua +msgid "Blueberry Muffin" +msgstr "" + +#: carrot.lua +msgid "Carrot" +msgstr "" + +#: carrot.lua +msgid "Golden Carrot" +msgstr "" + +#: cocoa.lua +msgid "Cocoa Beans" +msgstr "" + +#: cocoa.lua +msgid "Cookie" +msgstr "" + +#: cocoa.lua +msgid "Bar of Dark Chocolate" +msgstr "" + +#: coffee.lua +msgid "Coffee Beans" +msgstr "" + +#: coffee.lua +msgid "Drinking Cup (empty)" +msgstr "" + +#: coffee.lua +msgid "Cold Cup of Coffee" +msgstr "" + +#: coffee.lua +msgid "Hot Cup of Coffee" +msgstr "" + +#: corn.lua +msgid "Corn" +msgstr "" + +#: corn.lua +msgid "Corn on the Cob" +msgstr "" + +#: corn.lua +msgid "Bottle of Ethanol" +msgstr "" + +#: cotton.lua +msgid "Cotton Seed" +msgstr "" + +#: cotton.lua +msgid "Cotton" +msgstr "" + +#: cucumber.lua +msgid "Cucumber" +msgstr "" + +#: donut.lua +msgid "Donut" +msgstr "" + +#: donut.lua +msgid "Chocolate Donut" +msgstr "" + +#: donut.lua +msgid "Apple Donut" +msgstr "" + +#: grapes.lua +msgid "Grapes" +msgstr "" + +#: grapes.lua +msgid "Trellis (place on soil before planting grapes)" +msgstr "" + +#: hemp.lua +msgid "Hemp Seed" +msgstr "" + +#: hemp.lua +msgid "Hemp Leaf" +msgstr "" + +#: hemp.lua +msgid "Bottle of Hemp Oil" +msgstr "" + +#: hemp.lua +msgid "Hemp Fibre" +msgstr "" + +#: hemp.lua +msgid "Hemp Rope" +msgstr "" + +#: hoes.lua +msgid "Wooden Hoe" +msgstr "" + +#: hoes.lua +msgid "Stone Hoe" +msgstr "" + +#: hoes.lua +msgid "Steel Hoe" +msgstr "" + +#: hoes.lua +msgid "Bronze Hoe" +msgstr "" + +#: hoes.lua +msgid "Mese Hoe" +msgstr "" + +#: hoes.lua +msgid "Diamond Hoe" +msgstr "" + +#: init.lua +msgid "Seed" +msgstr "" + +#: melon.lua +msgid "Melon Slice" +msgstr "" + +#: melon.lua +msgid "Melon" +msgstr "" + +#: potato.lua +msgid "Potato" +msgstr "" + +#: potato.lua +msgid "Baked Potato" +msgstr "" + +#: pumpkin.lua +msgid "Pumpkin" +msgstr "" + +#: pumpkin.lua +msgid "Pumpkin Slice" +msgstr "" + +#: pumpkin.lua +msgid "Jack 'O Lantern (punch to turn on and off)" +msgstr "" + +#: pumpkin.lua +msgid "Pumpkin Bread" +msgstr "" + +#: pumpkin.lua +msgid "Pumpkin Dough" +msgstr "" + +#: raspberry.lua +msgid "Raspberries" +msgstr "" + +#: raspberry.lua +msgid "Raspberry Smoothie" +msgstr "" + +#: rhubarb.lua +msgid "Rhubarb" +msgstr "" + +#: rhubarb.lua +msgid "Rhubarb Pie" +msgstr "" + +#: soil.lua +msgid "Soil" +msgstr "" + +#: soil.lua +msgid "Wet Soil" +msgstr "" + +#: sugar.lua +msgid "Sugar" +msgstr "" + +#: tomato.lua +msgid "Tomato" +msgstr "" + +#: wheat.lua +msgid "Wheat Seed" +msgstr "" + +#: wheat.lua +msgid "Wheat" +msgstr "" + +#: wheat.lua +msgid "Straw" +msgstr "" + +#: wheat.lua +msgid "Flour" +msgstr "" + +#: wheat.lua +msgid "Bread" +msgstr "" diff --git a/lucky_block.lua b/lucky_block.lua new file mode 100644 index 0000000..b24ed32 --- /dev/null +++ b/lucky_block.lua @@ -0,0 +1,38 @@ + +-- add lucky blocks + +if minetest.get_modpath("lucky_block") then + + 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}, + {"tel"}, + {"dro", {"farming:trellis", "farming:grapes"}, 5}, + {"dro", {"farming:bottle_ethanol"}, 1}, + {"nod", "farming:melon", 0}, + {"dro", {"farming:donut", "farming:donut_chocolate", "farming:donut_apple"}, 5}, + {"dro", {"farming:hemp_leaf", "farming:hemp_fibre", "farming:seed_hemp"}, 5}, + {"nod", "fire:permanent_flame", 1}, + {"dro", {"farming:chili_pepper", "farming:chili_bowl"}, 5}, + {"dro", {"farming:bowl"}, 3}, + {"dro", {"farming:saucepan"}, 1}, + {"dro", {"farming:pot"}, 1}, + {"dro", {"farming:baking_tray"}, 1}, + {"dro", {"farming:skillet"}, 1}, + {"exp", 4}, + {"dro", {"farming:mortar_pestle"}, 1}, + {"dro", {"farming:cutting_board"}, 1}, + {"dro", {"farming:juicer"}, 1}, + {"dro", {"farming:mixing_bowl"}, 1}, + {"dro", {"farming:hoe_bronze"}, 1}, + {"dro", {"farming:hoe_mese"}, 1}, + {"dro", {"farming:hoe_diamond"}, 1}, + {"dro", {"farming:hoe_bomb"}, 10}, + {"dro", {"farming:turkish_delight"}, 5}, + {"lig"}, + }) +end diff --git a/mapgen.lua b/mapgen.lua new file mode 100644 index 0000000..2554a15 --- /dev/null +++ b/mapgen.lua @@ -0,0 +1,142 @@ + +-- decoration function +local function register_plant(name, min, max, spawnon, spawnby, num, enabled) + + if enabled ~= true then + return + end + + minetest.register_decoration({ + deco_type = "simple", + place_on = spawnon or {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = farming.rarety, -- 0.006, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_min = min, + y_max = max, + decoration = "farming:" .. name, + spawn_by = spawnby, + num_spawn_by = num, + }) +end + + +-- add crops to mapgen +register_plant("potato_3", 15, 40, nil, "", -1, farming.potato) +register_plant("tomato_7", 5, 20, nil, "", -1, farming.tomato) +register_plant("corn_7", 12, 22, nil, "", -1, farming.corn) +register_plant("coffee_5", 20, 45, {"default:dirt_with_dry_grass", + "default:dirt_with_rainforest_litter"}, "", -1, farming.coffee) +register_plant("raspberry_4", 3, 10, nil, "", -1, farming.raspberry) +register_plant("rhubarb_3", 3, 15, nil, "", -1, farming.rhubarb) +register_plant("blueberry_4", 3, 10, nil, "", -1, farming.blueberry) +register_plant("beanbush", 18, 35, nil, "", -1, farming.beans) +register_plant("grapebush", 25, 45, nil, "", -1, farming.grapes) +register_plant("onion_5", 5, 22, nil, "", -1, farming.onion) +register_plant("garlic_5", 3, 30, nil, "group:tree", 1, farming.garlic) +register_plant("pea_5", 25, 50, nil, "", -1, farming.peas) +register_plant("beetroot_5", 1, 15, nil, "", -1, farming.beetroot) + + +if minetest.get_mapgen_setting("mg_name") == "v6" then + + register_plant("carrot_8", 1, 30, nil, "group:water", 1, farming.carrot) + register_plant("cucumber_4", 1, 20, nil, "group:water", 1, farming.cucumber) + register_plant("melon_8", 1, 20, nil, "group:water", 1, farming.melon) + register_plant("pumpkin_8", 1, 20, nil, "group:water", 1, farming.pumpkin) +else + -- v7 maps have a beach so plants growing near water is limited to 6 high + register_plant("carrot_8", 1, 15, nil, "", -1, farming.carrot) + register_plant("cucumber_4", 1, 10, nil, "", -1, farming.cucumber) + register_plant("melon_8", 1, 6, {"default:dirt_with_dry_grass", + "default:dirt_with_rainforest_litter"}, "", -1, farming.melon) + register_plant("pumpkin_8", 1, 6, nil, "", -1, farming.pumpkin) +end + +if farming.hemp then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass", "default:dirt_with_rainforest_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = farming.rarety, -- 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 420, + octaves = 3, + persist = 0.6 + }, + y_min = 3, + y_max = 45, + decoration = "farming:hemp_7", + spawn_by = "group:tree", + num_spawn_by = 1, +}) +end + +if farming.chili then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass", "default:dirt_with_rainforest_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = farming.rarety, -- 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 760, + octaves = 3, + persist = 0.6 + }, + y_min = 5, + y_max = 35, + decoration = {"farming:chili_8"}, + spawn_by = "group:tree", + num_spawn_by = 1, +}) +end + +if farming.pepper then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = farming.rarety, -- 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 933, + octaves = 3, + persist = 0.6 + }, + y_min = 5, + y_max = 35, + decoration = {"farming:pepper_5"}, + spawn_by = "group:tree", + num_spawn_by = 1, +}) +end + +if farming.pineapple then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = farming.rarety, -- 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 917, + octaves = 3, + persist = 0.6 + }, + y_min = 18, + y_max = 30, + decoration = {"farming:pineapple_8"}, +}) +end diff --git a/mod.conf b/mod.conf index 9dd8b6e..99c61c6 100644 --- a/mod.conf +++ b/mod.conf @@ -2,6 +2,6 @@ name = farming title = Farming author = ademant description = An enhanced farming mod with spreding crops which wilt if not harvested. -optional_depends = intllib,default,wool,vessels,bucket,thirsty,stamina +optional_depends = intllib,default,wool,vessels,bucket,thirsty license = MIT version = 1.0.0 diff --git a/nohup.out b/nohup.out new file mode 100644 index 0000000..e69de29 diff --git a/soil.lua b/soil.lua new file mode 100644 index 0000000..0b4844a --- /dev/null +++ b/soil.lua @@ -0,0 +1,67 @@ + +local S = farming.intllib + +-- normal soil +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}, + sounds = default.node_sound_dirt_defaults(), +}) + +-- wet soil +minetest.register_node("farming:soil_wet", { + description = S("Wet Soil"), + tiles = {"default_dirt.png^farming_soil_wet.png", "default_dirt.png^farming_soil_wet_side.png"}, + drop = "default:dirt", + groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 3}, + sounds = default.node_sound_dirt_defaults(), +}) + +-- sand is not soil, change existing sand-soil to use normal soil +minetest.register_alias("farming:desert_sand_soil", "farming:soil") +minetest.register_alias("farming:desert_sand_soil_wet", "farming:soil_wet") + +-- if water near soil then change to wet soil +minetest.register_abm({ + nodenames = {"farming:soil", "farming:soil_wet"}, + interval = 15, + chance = 4, + catch_up = false, + + action = function(pos, node) + + pos.y = pos.y + 1 + local nn = minetest.get_node_or_nil(pos) + pos.y = pos.y - 1 + + if nn then nn = nn.name else return end + + -- what's on top of soil, if solid/not plant change soil to dirt + if minetest.registered_nodes[nn] + and minetest.registered_nodes[nn].walkable + and minetest.get_item_group(nn, "plant") == 0 then + minetest.set_node(pos, {name = "default:dirt"}) + return + end + + -- if map around soil not loaded then skip until loaded + if minetest.find_node_near(pos, 3, {"ignore"}) then + return + end + + -- check if there is water nearby and change soil accordingly + if minetest.find_node_near(pos, 3, {"group:water"}) then + if node.name == "farming:soil" then + minetest.set_node(pos, {name = "farming:soil_wet"}) + end + + elseif node.name == "farming:soil_wet" then + minetest.set_node(pos, {name = "farming:soil"}) + + elseif node.name == "farming:soil" and minetest.get_item_group(nn, "plant") == 0 then + minetest.set_node(pos, {name = "default:dirt"}) + end + end, +}) \ No newline at end of file diff --git a/statistics.lua b/statistics.lua new file mode 100644 index 0000000..c8defa2 --- /dev/null +++ b/statistics.lua @@ -0,0 +1,174 @@ +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 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) +local D = 1.0 / A + +erf = function(x) + + 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))) + + return (x > 0 and v) or -v +end + +erf_inv = function(x) + + if x == 0 then return 0; end + + if x <= -1 or x >= 1 then return nil; end + + local y = math.log(1 - x * x) + local u = C + 0.5 * y + local v = math.sqrt(math.sqrt(u * u - D * y) - u) + + return (x > 0 and v) or -v +end + +local function std_normal(u) + return ROOT_2 * erf_inv(2.0 * u - 1.0) +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 cdf = pdf + local t = { [0] = pdf } + + for i = 1, max - 1 do + pdf = pdf * lambda / i + cdf = cdf + pdf + t[i] = cdf + end + + return t +end + +for li = 1, 100 do + cdf_table[li] = generate_cdf(li, 0.25 * li) +end + +poisson = function(lambda, max) + + if max < 2 then + return (math.random() < math.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 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 max > 4 then -- Binary search + + local s = 0 + + while s + 1 < max do + + local m = math.floor(0.5 * (s + max)) + + 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 + end + end + + return max + else + local x = lambda + math.sqrt(lambda) * std_normal(u) + + return (x < 0.5 and 0) or (x >= max - 0.5 and max) or math.floor(x + 0.5) + 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). + +statistics.std_normal = function() + + local u = math.random() + + if u < 0.001 then + return -3.0 + elseif u > 0.999 then + return 3.0 + end + + 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). + +statistics.normal = function(mu, sigma) + + local u = math.random() + + if u < 0.001 then + return mu - 3.0 * sigma + elseif u > 0.999 then + return mu + 3.0 * sigma + end + + 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). + +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 + + return poisson(lambda, max) +end + +return statistics diff --git a/textures/banana_leaf.png b/textures/banana_leaf.png new file mode 100644 index 0000000000000000000000000000000000000000..497b13413a036239f51fd8d4fe93e8aa74962d71 GIT binary patch literal 412 zcmV;N0b~A&P)iIJL}zUl(}acdrrnccO)=;S q4_VX2vhu;4omrwGpU=#6U}DJoB`j#v{ge@CJcFmJpUXO@geCwfMnEk9 literal 0 HcmV?d00001 diff --git a/textures/crops_garlic.png b/textures/crops_garlic.png new file mode 100644 index 0000000000000000000000000000000000000000..567efd4506dee647fd94b0e44b36b088fcd59f76 GIT binary patch literal 643 zcmV-}0(||6P)h5{}|Nm#irG^oo0e3GS1W-l|30On{_#6Fpwz0`}HwgQDfN+PF-6gl} z1ljy;jb|Qv*_wIArzdsEQ7q-=Ru*sX{p!qb6)+mi_M8xo8-Qual>qQx0R49TctkkN zObLl}@wSxI{MET%E_R!*FWKY4g_sabt5sxkS(7nZ6J)$XPgJ7cW?)bIDR(-!6}bLE z+qOZX5V|grOj?+~U;z@@JT(n#bD^^6(N7je{p!rfv%^#>cW^l9f)WDL)KHl@3#OHZ z?}yMNES1eeXY^*nPXJP&<9WX71*XG34AVlPSVkt7$ESOe#jwkYzP2JwJxQ^M5$n$ zUHS5iQrg<{yZ2h-(PZAt*>g~@zQMvJOJNTO2z>8@BCZ)QHG#acMkDXx<^xC9e^H=m zMY(qKf%(MiUu;&NLy!RNW(`99hM|4PCJI~x_5k6#eSVV+(u^}R9a`6IarxryIbMDEa^>xBuKTy| d+`Wme764sqJC18-h1dW9002ovPDHLkV1fm3Bc%WU literal 0 HcmV?d00001 diff --git a/textures/crops_garlic_braid.png b/textures/crops_garlic_braid.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc0f792476b66e8a4c5bd7cb606fa5be0fe5e8a GIT binary patch literal 1104 zcmV-W1h4yvP)ipuXI?xm;9e1Zsnt_uKDY9 zL~|?2m!X>Pj=}-km6EkzmC4q;2~Ed*Sa>tRPSz|Sv6<^lj=$=q z-NIGRW3Xm6lm+jDx8xOQ>pno(-26D9A*lZA9e4A4r2vl7)PKE?yY@o_#v5Um6(MG7 zhC{q!%e20Iu1mQ58bXV;{i|l*a4E;s`3F{ha4YI&ykZt@di#xrlBN?$J~&!F_RD5o z4Bp&3vFXFxTS-2pVr&`fP{L~vfjjphlz(!`J^5Qa;hSqym0;!j*THWRz%kwhEoaS$ zM=$IIa15a-9cOPzh3$!$M}@)0*>H`uW0bQ6I(Zd1g})r=+W6fFp(&SQv&>`%rpzMv z4LmR=0cO2?C8Q0@F)k`Z?Sj_<;39fA5c8%p5i{b`2I#r-;5YOjXqTXV?u$@$ZNj*u z0Uqzb*@T8{GH_Hn5xCbo)&kE^2^PL_73{LrV68I9>X(2q3gI>?vV^8gf-ywBSSoigvkk`+^y3gfTm*xe71fJ zbghJ0T?U^;39nVPh4LR@;TkAG&@&ACa3hqBOYqNg=fR^F!=Vv^U-&)fK0!8^Nyiy% zOS6au>|m?|DF63a4EJt6@(F8aK58d4ZO;b(*qUL{I{P6gs(**iszT|!uTk>HW0;hb zYk#<$oJ?rhwQJ|8A?F~HQxo8>ej82mUW4DJgra^HJO(}-` zu=Zh*5_0kJxL1M3 zf1g74iuYh1=b^9Q2Uteh;kT)wlh=XJlnmRE4jK@3DiLRfFr^oud;PaaN8E7g6&USX zgQdT{dj-XRkkALLB1|;@2G+oZUQ&RD#UH{t&;qAPjlqt^TtZVW7knTSv13~&H0000*)NS;v|6-YMY4VL0$9t3iGvii1$?6)v z56x)qB=Is(_0w_q&vvaO?Yk0L>buai?S_T773_G`9zx4t!x!fOILWU%aGbvJ>znw= zul*@Zei{8$+o8<+7`y{-KwI+(rp=8{6B>f*4Ij80KPm=roTm2sf4FI%A~0GHyQ~0n zrbal#iMf;d)}1b4!VQELYwLH7zQJOSseK)iKDiS$Ti!5>vfqEFuBhQu5)Y21&;7Ek zmxH(SUSxlIcQc8nr8%~QbtvIAh``Xw zd1Hfg3me8Cx6rM3-e$oIvcNhGIE(Glo)b4y0s*Y@o zO6uV8_MJ~}0}Fu%y(3NV3>0DSJJ-Q3O95+@K~{SJj8O=;Q4t|Dg%=pZtalW4RT0KJ z_QE8~$ClS`#xOVQ=;H8NR3J3@^gUPzXff?p!*Ak%v8bVyl|fLp2@bsi9Z4U|5}IO* zOvUd}7A^Z;MZu4^gLSBnZ6f{qdm*pgg7mNNT}Eh{3+Q&nmi+Jyl|j?C1wLCZ`Z|(e zR+qqMQNn9g6wEL?p>2zmx#AFPM6{s1<;bP+syF&r8p`1wDB?h{0U;m|yTUqUQq z19mXhK9p{L5rf@1$39{8)+gTo0q76#D*d zG$nq8ly4tKKc@&TQ`h6hzNX^{EwSkQ=)6~f`pwUwGw~ysM|tSUTL#NeEBrP!bn+Sy znii++2n7w8bt*B>3}8YpKxf8}2+g?R)GILDlZu0DKD>s|^4l*9`hZo0vBouE4P59Y zd8pg}DXe`>aGKQUZ`;qM`w64LN5V69{1Tl;(5FX$(LpCKgS2kXoYx@#fW*tMkr~T` zk%#e~6u6C2SjRfUl6wEGx zkOfE-17VEFu^Zau<;%DqoV>YWcDIK&j?I?=AeGO(jaBV%g=LOZ%Sxc747fgpL@6N2 zAc_hB4Mf#}07=Von$Uc1FUeFJLGZ1XYAc#Sz4yq=h zB{K+o4lnutlwQLo?j-oZ$z?P1hAOWylF4DJu4qE0gohqt!6EAgBw68#mJWTc%zopr0AuSJ AMF0Q* literal 0 HcmV?d00001 diff --git a/textures/crops_garlic_plant_2.png b/textures/crops_garlic_plant_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9de81b6d70d578646e58e55166023abc5dd9cb05 GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`7M?DSAr*|t5>g2wJxy~edHzql zsgmt8mubnu8ih24(+mP^pFEij&Ib6{ap42zy9nB6CYuY<$jGD6-^lT zFRo%wW0<7)gTcd)?Y}*X^6AML9toCb?ziwbW;ig)|C|56-(Qa5yG3fn+a literal 0 HcmV?d00001 diff --git a/textures/crops_garlic_plant_4.png b/textures/crops_garlic_plant_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f6097c0345503ab46ce71064f362d9ea3c6094bc GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Gdx`!Ln;`P4zO?g{{EM}eF|rT zkkJJO3AUt+`fUk+=P+8lakpOC%CYN<#q`Z_aXCrbCO=C2n%;HJ*W;+jT=l?B=PX)} zeG}2uRd?>s`p>pF?6G10N@c6Q(8;T;Z)MjXSvjF2FN8TFcBy=+d-3-aH?vc>e*5-T z{$S2jP`iC7`Tq0k|7^`G#UuDWYb!bnNCg~d|Ns2|mdK II;Vst00z`lB>(^b literal 0 HcmV?d00001 diff --git a/textures/crops_garlic_plant_5.png b/textures/crops_garlic_plant_5.png new file mode 100644 index 0000000000000000000000000000000000000000..32627f6cfb28c84e9a48cefa0efbc17eb48363fc GIT binary patch literal 257 zcmV+c0sj7pP)>88U(QYAp@Ty`JHDJGYbNiruz=yjQZxr;p@ z_`PI9)395o=bj@SV(vLZCi5*@@B42UAg~;jfA?1Be|+))B*^vLU5#y}!q;uaL;=HlWMeDmN|{*tl~0dxhM8uA%eR%S8cGJtVY zU%r);081yJZ)ym&j% zZf}>V@u}xFs?~4U?|^;Be;=9%lGJXHreaH>G_*FuQf5;NGEf)Zc8~iH;NQj_7oB`@ zo!guC*<~m2Vy&GlFITfPV^T_JW047ser}%3q`l_+n;-iAKMVh95rcao*e@s;c&XJW zH`ZsBN*S$Y)8{(Yug6#~Hm5YWy7%$R&)MhSZS3F1mB;UfLLojn<}J?8Ca-~CAbr=YFEhB7!Z6$(m8khqTGrrV>q`A(ow2>}UE z2xC+@JeWJEW|Lk2v+&U6=dr#f$7{zb0~;bo3|d(qgiyFNf$c58WQp%H1RjLIZc2<; z9{@N22(74gIIvy_kV}CqSwb{91j7KcJO!J!0RWDNFg${zG7PBWD*$K&j*wgdRw`sF z2kXrth62&PU95tXTW~CbNK<4|clrwAe}Ej;ar3u&lYhnIRYab6b#yz z(pW5X`u*R#y71o_Or?>{gnYi&9|)-2rxd*`MOPE_5M$ug4*pcuZ6iq*F}>X0aIr5o z{_h$;{O&s(v0-=F&@zD*hk8n)iDx4rGzkDoy+nid;w*k18p5xOY1q^3>FE`C1lE4du2|Nic nLOz^6oIE_d4krp49x^bj3}U}%eB!h}P(OpGtDnm{r-UW|!+;{9 literal 0 HcmV?d00001 diff --git a/textures/crops_onion_plant_4.png b/textures/crops_onion_plant_4.png new file mode 100644 index 0000000000000000000000000000000000000000..90741024eed8a868c58621f071b227c3075615f8 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9iA?ZAr*{C3#@khEP7tQ>1lkO z^>_J}lT+DCypCBg95UcJBVNfO{HCMcp#0f%*6EC=CoNtvQOSCa=d`}J91iIfI_@PV zf9@?{^<$n=E1tjeH)qtNcTGA5G0uxD(^oj`t320i7SX7@z;Wla;zprWpDf;YeEr4n sFVdQ&MBb@00JvbrvLx| literal 0 HcmV?d00001 diff --git a/textures/crops_onion_plant_5.png b/textures/crops_onion_plant_5.png new file mode 100644 index 0000000000000000000000000000000000000000..d33c190cd6e4a177e20a286506c5af5bc169b648 GIT binary patch literal 352 zcmV-m0iXVfP)=*`Q1 zq2}x40B<#I*2~dkjYq)+kU?r>@Wpj?VTa}-X!6kG$4RM;%h%7-LOpmJd~OabZm14q z>#hfHg14^c0_}|@uFzO7sOJEN1Hq}$-+chBG`oH~+d#WF>g*Qe53y2bnDpD4DaDd( z%;AUGR=JyP4ldHr)`VW>yqb=BJhtK@VYwc-R4Pa3(dAe}L{BOT_M2 yU0gP!!UDKfMM5uG#RubWEqw^52bSZKM*sk3P{9f5Up(Ug0000Rw>Eyh!|O!{k|$k_tfXvdxDpTH%XRgTe~DWM4f Dv|1YB literal 0 HcmV?d00001 diff --git a/textures/crops_pepper_plant_2.png b/textures/crops_pepper_plant_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c3522103f004c32ca0ab640280a0a8d8c8720301 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!9W@a@|Lkr1X8x1E{-7; zjL8xb23&idH3}pyn8_CU)+St_qai2hOG60rSAp!^Q8J9e3%4zopr0Q~7AX#fBK literal 0 HcmV?d00001 diff --git a/textures/crops_pepper_plant_3.png b/textures/crops_pepper_plant_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a918176d7269e5eb2fc68cebbb25e6e4b36087 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU1=3#g7@X${YNjz*&f!yw zW3Xvpu*+kxD~mn~lw&Lj@(X5gcy=QV$T9bHaSW+oOjh9IFf?e+6ccA-;qI%#9`(cS^4m=ERZ?a5CJ?C)|Xas|&tDnm{r-UW| D{0uGu literal 0 HcmV?d00001 diff --git a/textures/crops_pepper_plant_4.png b/textures/crops_pepper_plant_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e786f65097ec8c3afd90096eeec324dbd517fc8d GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv3GfMV1=2PR4F5O2dwbxq^ISo@ zJO;}-e7Y43YHrs4m&^2n)G?L>`2{mLJiCzwOj%B6jdPHD6_5NbD5i=382@0%#qBr>mdK II;Vst00sy_8vp2rZtdnsX}Y>$ntElei?U|K_K>kUXBh!NObWW#~UsTDn)A1M_d^eX@E978G? zb9);(859JVX1@w6d8_b{;mv|4roTU{Yp}Xii9h=6C>|2+C!79qgWAk9@h3i4`Ml8) XKeUZsOlxLwJ;-EFS3j3^P6o literal 0 HcmV?d00001 diff --git a/textures/default_junglegrass.png b/textures/default_junglegrass.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac578c491809d1136919e7a0f82eb5188311b38 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5qY_A{%q``m*|9h&C` zMmD(lB^m|h8tQqdB^KHGW>`4I89VxGT8C^}0FE8Eya#n72>EgRzdH={ucko|r>HO96;$8UNfQHr;tcA?)E-Y%~TzP51@rWbh zip@tBNr&9$HhCqYY>;|NXvWE)_Ldhy(ibC+hFI1Ksj@`h=bf((bO?i|tDnm{r-UW| DH>O`U literal 0 HcmV?d00001 diff --git a/textures/farming_baked_potato.png b/textures/farming_baked_potato.png new file mode 100644 index 0000000000000000000000000000000000000000..9222eb22d8071144cb177e4526fa4fa4ffed8244 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!9W@a@|Lkr1X9mDT^vIy z7?UN69$d7VdHHf=qe|k^>*Cx@f-a^L7*#k||NFJ|(Z$7Art23s+$y-mY$&?o#g9V$ z1z8HaO0~Z|IyzzJOa;x7s{+A|m!!=km`xd`GF_Z!`^{nE%1#NXZ>5H3&ZjX*aZX{I zV?LgTrp?JbUf r{;${MnY3`BCeNGy;l2$S&CCq{dnEolEYI8wG=ag>)z4*}Q$iB}np-f< literal 0 HcmV?d00001 diff --git a/textures/farming_beanbush.png b/textures/farming_beanbush.png new file mode 100644 index 0000000000000000000000000000000000000000..47aeb972c589a2912a622d476122273e2fbf5bcb GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeXEjDD#Ss;=&O}IU0!|a+< z=QsRszLr+LL9FsvT){HYndy?5K$VOoL4Lsu4$p3+0XdnTE{-7;jJgL6g&Z9PTrd8f z^~?9$pNvCtjioC#F*dULbhae3tK>vKlKIE8(X!d9qFU5&!GyI3t5$50urXwb*Aub& z%5Q#mF0b$&b!#r;gu+KpS^JwZW@R$luF-M`UeZ`l5$~{GdE+N$*=yWvd($^40xf0m MboFyt=akR{07gAbcK`qY literal 0 HcmV?d00001 diff --git a/textures/farming_beanpole.png b/textures/farming_beanpole.png new file mode 100644 index 0000000000000000000000000000000000000000..b94ccca120ef25f85aeec78d765448ad4cc7fdbb GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@o&cW^S0LTyBhnHpk>evGb@Ay9 zAfK@$$S;_|;n|HeAg9#R#WAFUG4*^Z;~_&4mJhQZz4L2vjbKp{Xyo|M;i4qOJK^|U z^=12i$}uGL#D8in@Mj9G$av}1@;~@cg6|QJEv>clCDI?sbj(&>CG3>EclDq4>-I7i zIK-WUBx)B(C>5BUv3D(Wb7uV2W^E8s;m62+w&nv{*)guhKdMoIKnE~*y85}Sb4q9e E00m@4#{d8T literal 0 HcmV?d00001 diff --git a/textures/farming_beanpole_1.png b/textures/farming_beanpole_1.png new file mode 100644 index 0000000000000000000000000000000000000000..803c2cbee5787bb0f4a6d086c087ea7053a9d9dc GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$Dv*Te#bHXo6eScx1Tk(>o0 z|Lj=tcJ90x*F@MiczXzx%rjy5zg<9P+LlAJ8LoX4n0za1YS`Ih|BthO zxYEPQrJ<8>N8Pcu(MscYu~|&QRMzm>2X-D=H?i33-9{DzgAHm1N;-+<2?Yto32sGh gjMmJ|))5R0qJeDklfCA=2D*m9)78&qol`;+03yXvE&u=k literal 0 HcmV?d00001 diff --git a/textures/farming_beanpole_2.png b/textures/farming_beanpole_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3d014d4eb9cebd38bcde880605261ffc2896bd0b GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$Dv*Te#bHXo6eScx1Tk+f;T z$ zZV5@ks zN|xN@RhCBb=R8t!T~8&u1#z$M;hO8YL3jek5p4@bwky2yi+78Z0o};p>FVdQ&MBb@ E08#{BcK`qY literal 0 HcmV?d00001 diff --git a/textures/farming_beanpole_3.png b/textures/farming_beanpole_3.png new file mode 100644 index 0000000000000000000000000000000000000000..261d74405f9867bb7f0bbba2b66c78fa9c21f7ad GIT binary patch literal 293 zcmV+=0owkFP)J3 zOcaD&7;H=wcd!<0pcH176L6*#1RT%k00001bW%=J06^y0W&i*HyGcYrRCob}k+Dw3 zFboDiH?dh$0Om5V1E_nK?na`Stx9?SSAYz~Cd+?Ahf^b;Y+MljGo?Y$CkDzW-o_{Q zgGe`~?4X2iI2G@-Gz6^R84+IO2@x`mAz4Y~qp0YeCI15^fOLT$J9ikd3+n)K00000NkvXXu0mjf{QGl& literal 0 HcmV?d00001 diff --git a/textures/farming_beanpole_4.png b/textures/farming_beanpole_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9822a97d98de4935a71e277a75b4f036e18c227e GIT binary patch literal 344 zcmV-e0jK_nP)7MR zG5GU>8Q9>$l?u9A#Hy7=G2|WA29| zA5*%5kxC@obgNRMDHFl3%7b`~)U82Xz@FM7A@q(SyKsvXJh(BKNaavZtxg zv1=L$z}@M;W1?F@+OWB=_bjPoVte&YtpXMGQ-O)1&m7-%+GQm|tEq@R;H1Gqst^B; qD_SL_VtRM6uykl<8BhlJ+wlRkqb>E?rY;Ns00003F? literal 0 HcmV?d00001 diff --git a/textures/farming_beanpole_5.png b/textures/farming_beanpole_5.png new file mode 100644 index 0000000000000000000000000000000000000000..e6fdcb5d0b6ba21af735b562fefabca569e8f929 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvxd5LKR|Y|bHXo7l4PrS9L|S4c za(qP6rU^G+ORGE(}tLkqdj-m$NIaWcKyGS;D^lI^zrwWr@dQ+$I@6hYheE!@1VxaQ| no$q{ovhq*8;uNe8{O!6b}NdpDDoWLRPs@Vm2n?e?}LTa z|AT$@&+7E5kNbJ4PQgomu3F*kl?HpO?jBG$+IYA}G9jF6=WVang@2p;QvXd{rEW1% gG9j@q;Mr3~tz+CjiWpfFfyOgSJKXW*Q^>KJhqpMGYNC3~G4NQx;dmb_{SVnNpJ(jEA4>W+m)78&qol`;+ E05}aR-2eap literal 0 HcmV?d00001 diff --git a/textures/farming_bottle_ethanol.png b/textures/farming_bottle_ethanol.png new file mode 100644 index 0000000000000000000000000000000000000000..deba8acb0919a86e0bb0f970e8ffd4af38820cee GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(a1=4r#-+BJ>*_W@Mwk+Cy zVAFxCm#<&Ca`E`dW89zh*8!y&OM?7@862M7NCR@LJY5_^Dj1Uwut`kq6;;q-O=FYc zal0%Rr4o59o7&t;ucLK6VI7bq40 literal 0 HcmV?d00001 diff --git a/textures/farming_bread_slice.png b/textures/farming_bread_slice.png new file mode 100644 index 0000000000000000000000000000000000000000..edecd2ae619c046e714c2f83c34c0fdf0a8a0c3c GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bO)b#{GG~^DtxT4Cabaie z=9!s5K4VFcUoeBivm0qZj*X{_V@L&KG6SQdBOAxs6di`8u`-P&$`ja(Tc*Uu#IQK< z2rC>GoOy5skGNvrLk>fBm*y?A88SPbCP*=O$MaVdd(Pztn#17f>gTe~DWM4fLN6P-odR~P+{;tt=f+9Zc#7QZGQ3o;))OS65yJUow(q_&E&k%)UxC^gOM?7@862M7 zNCR^GJzX3_Dj28sY-MCnudS$Nrn+zL4DXd0 zDQ`~|>nl&(zI?;Wz{Urwh4-{q??2?N6a9Dj>#+YDPFjYUPGl-H_%xvoXf%VTtDnm{ Hr-UW|s%c28 literal 0 HcmV?d00001 diff --git a/textures/farming_chili_pepper.png b/textures/farming_chili_pepper.png new file mode 100644 index 0000000000000000000000000000000000000000..1fdca592129c4988fc5fb1251caf6746e7db6124 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`S)MMAAr*|t5;X_1wz6?dUMtz^ zD^zjju=5EA0k^dO$MYGSc$Q7fIQyc@@zZ}ti4$$fNlXH(1RMDa3L8zDZ?G^6%ubuZ zXmGf&nsK?C&uIhR0~b18>fX87u|`nWheL|tx{pFY=KM7;^BEZGkLOfW3trU(+REVR L>gTe~DWM4f1vNL( literal 0 HcmV?d00001 diff --git a/textures/farming_chocolate_dark.png b/textures/farming_chocolate_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..47bd0f9d23063eb74f6b4e2ce66bae4d0bbef5e8 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6O!VDyj#A@{cDgFST5LZP826GvPRAZ)e6NU~K z##)8j+CVABk|4ie28U-i(tw;8PZ!6K3P#(rj-rPRcvu2k8)MnzBpXjD7}oprZmGR> z`OoE9X6;|qR+}!I>gzFCVf(7Be|dIK*_Yo|>-X@ji;T^;<`1?Z$GIQed7$HM(HOVh krS$*qs37l~YwQ0r+_*2KD6!{MB+woPPgg&ebxsLQ057&d2LJ#7 literal 0 HcmV?d00001 diff --git a/textures/farming_cocoa_1.png b/textures/farming_cocoa_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8baadb49f2baaf1a7dd509bf831dab73626fc1e6 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VtFfu3cCx;TpGx_au)1pr z?KiV0+$mjnzbfsVefCAKvP-^krwl^(=mu=k@>#9wvQW!$vWnj|%QT>N#*!evUCnxEN~_rN z^%kamVmy_!?2iMdI_EO>RpMOB#G}@#YRJsX(tmd^USjXGpa+-dlpa_gc-?RUFGHLP WQ)Yk1gi}C^7(8A5T-G@yGywoc7*Zbq literal 0 HcmV?d00001 diff --git a/textures/farming_cocoa_2.png b/textures/farming_cocoa_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4208de8fbaa18e206b65d30e129c311e27786c7f GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VtFfu3cCx;TpUS)E1;3t0 zf4pe$?}_J~Z4BQ}%Kdv<^y7la&l3zs=P^9m#BgCQ!>lf$^_>i9EBihHwKJ9k`2{mL zJiCzw zJs;G4oKz};4WCc>(VoM;^Ev;SqQcFeoN}YyMA(0+o1|&CGU{r{gXwY6!GF$1Rv*5_ ec*9+XfnjAXv!>1KRoy`A7(8A5T-G@yGywpFdRu7# literal 0 HcmV?d00001 diff --git a/textures/farming_cocoa_3.png b/textures/farming_cocoa_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1e3063749e1e09505f1aa0598eb30aa8b49a189e GIT binary patch literal 300 zcmV+{0n`48P)GtU%howoqqCgw|GQP2 zZ#%<;5P+c1lO>s>EuTm*B3^Si#kt>fGa-dFcf-%?eZd&Maj^-AdLZWhD*#{u@E0Uy z0uVw0v^_{rd#uv|4|7HKyxL=cFe{`n6X0>76h%OYbt>R$tiXUE%o-KuTwWK#EA%Cl y8E`id0Fu7rg`*H80CPVT{R%< literal 0 HcmV?d00001 diff --git a/textures/farming_cocoa_4.png b/textures/farming_cocoa_4.png new file mode 100644 index 0000000000000000000000000000000000000000..5daea03af45ad74b168e179352358cadf4106325 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VYi?q?cCx;TpUUg3khi5t z@0#*I^i;k|@OU0#{b_#H*Ts3yJ#_DyNItVuI%6QdUsG_chDb_t;WVIj#*!evUVKJDdVDKK~DOb?bu z$BRvDMmdKI;Vst04_jXWB>pF literal 0 HcmV?d00001 diff --git a/textures/farming_cocoa_beans.png b/textures/farming_cocoa_beans.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d787257fa569957990d7299eebe8461cd14ab0 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ4cpE+J>9J{!pu>LH_<}2 zz(v(pTl9ypa41j#V@Z%-FoVOh8)-mJu&0Y-NCjiE18dJIfm1UzC0x2CRgI;aC9=|v zoncdGE1ty|(c7?b!-SPa9!nc1tc*06kf@WDmBSX4qmZUE>jh6x&Y3l7EQtmZ($da3 e3^SYA85mw)=iC_PwJZ;4JcFmJpUXO@geCy-vo~-6 literal 0 HcmV?d00001 diff --git a/textures/farming_coffee_beans.png b/textures/farming_coffee_beans.png new file mode 100644 index 0000000000000000000000000000000000000000..85e74c5b668cc5105a02aab0d558812e878e33cd GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXI+D%9 z-g&rB`ZV8*gyV^kR?l~buVA>wnO1V;`YYCZm1h?2TGYa{P>10w=Z7CoTRVC+h2KRU qP~7TN%VmH0qQl=Uo)6Z1WxsQm>*~j&4C{b4FnGH9xvXO?XC literal 0 HcmV?d00001 diff --git a/textures/farming_coffee_beans_raw.png b/textures/farming_coffee_beans_raw.png new file mode 100644 index 0000000000000000000000000000000000000000..b671ac9f3548a3880cc2afe5d411bfe544eaf2e7 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRb*h8Cd}F`z+BADl+MAF z$j(^H%N)+e*vQZ9^{UPXsEn~B$S;_|;n|HeAScYz#WAFUQS_v`*dYfIhl{i2I(rt2 zcOLGOKF#+c;do-C)$`rqD;TbErj=Z|{)+Wp<(Y-M7PT-f)M5C_`QeAt){b6H;dhY- p6t_Cna@k+L=NklF_Li+W&+uutA2sIf z-vY44m?EP3XKXM4A~1;jjMdcL;Uq%%o2V;A7hn-|`aSoEOhkl85k8Clh=IX(X#fei zk8yqWK!dp7$DHw681qt*j>k}q$i4R%{GHf{gbpI#o(A0FC0{5%tQS2RT zJo!)5dZY$8Q*97gYxF#a9ri}VPM2KnJyEC=aE&gG&;+{%$Ysn4^u5EipZh#>=MGH~ zTSj5M&d4O-G*8X(oUI8gS!lo(1of2rZK9c)9=1eOg#d3m(RnXYrhBYqGNpk7(&7;2 z9*T00001Rk&D zap`k9vw%S+MoGC)-D>s|N1!ssk|4ie28U-i(tw;WPZ!6K3dUpy<|ZbAS%EhhU0RK} zq?;ufo3gYLIvqBeY+%q1U^v4O;$6(h-LX{F(m}#g?J28+n@jL4HfPI@iwi>-uHCs9 o7{|BhruHex8wZ`9CU7w_G`a9Qly3PM0kna^)78&qol`;+0EFy2ga7~l literal 0 HcmV?d00001 diff --git a/textures/farming_cucumber.png b/textures/farming_cucumber.png new file mode 100644 index 0000000000000000000000000000000000000000..8e269722b892720ca3acc77d512c5c434c17d267 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnY1=2SC4C+-3hAj+YnGF0% z3=Dw`a)k_>F$@eo49sB+$AUi304icE3GxeOaCmkj4al+eba4!+U`$q!<SB}hp7={(yXL1=@5;b-)>fYYOsC)U>1McqjIRdAh z^!|A|boZzq7g?!d9K2mj@$Ds*`;M$lIsa=N9$%YzcS6Xe%h%65SRMMd&iBPEFN-S$ z-*+ia$ogY1)Yq|Ik>kYepL@<+bTT(l@;=0qXlP7SzRp~IuVVKOQw7??l(I}X&$SQ6wH z%;50sMjDWl;pyTSQo)$CfHT2GoWVp_lugW8QHOt>X3+im8{YdLyPPro_lAAOm)}3U z+7s{Wmpm~&-R$Ayh7%$a1X;8aPd@vrzi{=95APUu1YNu>_we{m2Jwey6rwz07_u`a m+|~)O6X9`6J0Ro!Kz{p7rc)6PVZVWPGI+ZBxvXoYgrb%+=4~jV08XK{#vNU|!#vs|86&BEQuwB#q#FY98 hk#U^C?wmh13Qw5u?!UKu&N`sg44$rjF6*2Ung9#LJpcdz literal 0 HcmV?d00001 diff --git a/textures/farming_donut.png b/textures/farming_donut.png new file mode 100644 index 0000000000000000000000000000000000000000..a906d3d68bdc0fd1da2c0d2976af5e4d069eb96d GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5qY{T=DoH^g6Dop^Oa z>dB?i2NuWfn-j5VO4###sh2k=Y@Hr-WMS;Cxe;fVhaFuWb#q6q?8nk>pmxTRAirP+ zhi5m^fShtq7srqa#v}zHhErnvDx6LdY)sn(*&n6-`+sYzS-aXQ?{!;e{?yjI9}t#f zE@*V>oh-BFq@e%HtglHi`y9?WW47^Fl(oCcG7beFR*~|~{{rrBV*Nfp6N*fjaMQpz zHd3J>$j|@HiL2J-o-wRaHy7%d9Bl5|AH#4hlErM>;xI{|6Bs;Q{an^LB{Ts5Q4L=K literal 0 HcmV?d00001 diff --git a/textures/farming_donut_apple.png b/textures/farming_donut_apple.png new file mode 100644 index 0000000000000000000000000000000000000000..90d4e688c58972157d8cfc5b1c36bf1c3ef01cc6 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vt4g8Q{mz!V`AM(B9Ue5) zzMnkhvy%QUewl|w1@Gt0Tf!>&C?)7=M#j@n&)XGg_xBbZU6Guw#a<26&R7!U7tG-B z>_!@pQ|#&D7*fI5dn%mCS&_pfP}I#)b>H9hW|Qxo{#m5A%>L<|?h|)|LL6?bOm!}{ zSdgW&r@UZVV^;B|8M_Z3lUS6N>!Ec#K*=XJ%41d>|xpVYL7N literal 0 HcmV?d00001 diff --git a/textures/farming_donut_chocolate.png b/textures/farming_donut_chocolate.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0497540a61d1fccf899cf16f744d2243ef2c93 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vt4g6)kvn6B4|}EqbFMQ( zdoV+d7elf&LzD%>tXPJLkqqT-%uf!Lon4)FU{T!bLj|{X<}B)CT?N$6SQ6wH%;50s zMjDV)?&;zfQo-2MV<_gV$id<&c458SyZT!?nRT;YrrmS;E&P(}foX~HXNR6o_nz0t zv6U;lFp|u%oaQ|>Zk+<7V2|3?b~j6{6@TANU(b3-z+lyN<`)vV`K}q6JsqDjXUBvt wO_OWW+G(6Wsc70Bp7p|d7Ix3A*ZgB)Fp6YNUA@6O3Frg{Pgg&ebxsLQ0N2@9nE(I) literal 0 HcmV?d00001 diff --git a/textures/farming_flail.png b/textures/farming_flail.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba0cb85b23966dc8b316caabfdceb3458e6bf60 GIT binary patch literal 300 zcmV+{0n`48P)9HYV*Cc zm#<-Oj0?}i`9M*|k|4ie28U-i(tw;GPZ!6K3P#s6jhqJzI9vknDwMUPwJc+1+2pYB zIorGaPNB@U4gUouBq@d1uHUwM+4Q{}GPMVz5;Q)jERcHeFFv7Dx^1RGj>G+??f*hL d+s)N)^1q4_JXPZ~M+;~=gQu&X%Q~loCII1#KVSd= literal 0 HcmV?d00001 diff --git a/textures/farming_grapebush.png b/textures/farming_grapebush.png new file mode 100644 index 0000000000000000000000000000000000000000..7a13e4c0b74f2b646ba41e9e44266a3781218398 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bO)b$?n5g4sBGbV+tx>+` z+*30hpcG?CkY6x^!?PP{K#rcLi(^OyWAXw^frJF6%ROEWY{mlI%$8kxZCqaG*m!)J l^qiWS{2UnB+yugy7))j}om;{7pb4mx!PC{xWt~$(699b6B-{W1 literal 0 HcmV?d00001 diff --git a/textures/farming_grapes.png b/textures/farming_grapes.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec1e7ff6c206229f75849889d16be038cd89ab4 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bO)b&wWt){@$n;e8N4-KH zPg43hpcG?CkY6x^!?PP{K#sSki(^OyqpvqBV}pahZH)#t1tu|uA79sh$$M_@C@%9U zZh9uy@m0@%Dt+=$bNF&%rp96y$(bIBuaBrJElPI^Ti$$9WI<1ZanYN7vPZQ!TcRF( Ry#X|q!PC{xWt~$(69Bh%I3c(BNWV&5-$wfvt_{A43{jW>uH@nQ7A7qru}`=9Yh$CKhe=CgV`n2H!^T8mYpVnX Pko63nu6{1-oD!Mzopr0CjUfUH||9 literal 0 HcmV?d00001 diff --git a/textures/farming_juicer.png b/textures/farming_juicer.png new file mode 100644 index 0000000000000000000000000000000000000000..81127e10a991cc68c60b0951090ab0fc0c6d4359 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uBp1|KxS@kZck57&5rI! zAcwIe$S;_|;n|HeAjihj#WAFUG5G+Oglq%LZ59Q=?Nb{YOYd!CV0-y$yT3xqi}&9Z yd5RV;^p<$?|9{k>1ONVCWnnvZA%J~@AH%;oA&>h9Q>OsUVeoYIb6Mw<&;$UV>NB$d literal 0 HcmV?d00001 diff --git a/textures/farming_melon_1.png b/textures/farming_melon_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c487ae04d31aff77ee7e784be0def788d692cf4d GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!9d!Qfx%VgW*?Ac;pyTS zQo)#(d@n!mMCQM=fC{yIcMr#O)=dlRrdaxr}yIn bTC5BfOPp6Pi%XUVn!(`d>gTe~DWM4fL1ZWZ literal 0 HcmV?d00001 diff --git a/textures/farming_melon_2.png b/textures/farming_melon_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e5727705f497adaefa720ed6bbe6f96906d8a6d4 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!3;(~$S`Te-AHfY zNCjiEfsqm~uRQN!sdX`iTQ@3RYztnl<8kf6EiIolZPUaiet%!Pc(J7ChKK+E-*}Sp oEqM8w&Z{3Dw_ji4nG~^gYW6`*+xp00i_>zopr0P7|(YybcN literal 0 HcmV?d00001 diff --git a/textures/farming_melon_3.png b/textures/farming_melon_3.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6ebd6f9a19ae0b573c60e38a59887b1fa5f0f9 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!3-8a7Q_GVU#<&+A+tbHsf@j-kuHKj10jEKJlB6$*%-i>FyIJp1- literal 0 HcmV?d00001 diff --git a/textures/farming_melon_4.png b/textures/farming_melon_4.png new file mode 100644 index 0000000000000000000000000000000000000000..d9199f3c822400e9a2d64e085a6ff49d562a6d83 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDUH8NthwP8s2lZuXJNK0ia zDHp1%7i?+anb0q?XSeE^Q|2en=w806`|P>x`w!m#{)Sl}dYKQ@%UBZR7tG-B>_!@p zW9;eT7{YNqIpF}eP(n|$!7(0*W^cx08Vwij>w9SAAra1pW(n<@X noeSlSX05^{)z4*}Q$iB}Xfi$k literal 0 HcmV?d00001 diff --git a/textures/farming_melon_6.png b/textures/farming_melon_6.png new file mode 100644 index 0000000000000000000000000000000000000000..19761226579c3c5978ce8af858109a45489960c3 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5o?XNSO!w|gp#$}*(#*!evU1M0;0$eBwSakto`UC!E}6v#rMMa#wL%<2cIhcKTq@~*cb=7L`$WkyJ)rpv Mp00i_>zopr0R1#dEC2ui literal 0 HcmV?d00001 diff --git a/textures/farming_melon_7.png b/textures/farming_melon_7.png new file mode 100644 index 0000000000000000000000000000000000000000..664dc5a0846ca7adfb2485109c56782d49b2895c GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VYihq?XNSOjycGvd@rf%RRs4j>xS`RdFW;YE_P>HLhVd=x+M5SYpjG4u;}cycVwKHRm78 nw`A=V7S&>S!am{U@gnAh0W2jm%m38@EoSg^^>bP0l+XkKHKkRq literal 0 HcmV?d00001 diff --git a/textures/farming_melon_side.png b/textures/farming_melon_side.png new file mode 100644 index 0000000000000000000000000000000000000000..88e40c6a08421585274e41b58ecd19c88cc0a567 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU4U7?v%ixdBP{=6K$S#$s zZPcu3mhPS?(>qCf#yqX1a}?&xmtVbBcl~DNotss6?NL|JS|ktDJJZv}F@)oK@{YLA z^^yPPZrRLp{n9`G*Y<)^rweqxl z-n}%AK{7bxo$hJ7cV&Hv-LL;A&$B+1W|-4m@m;67`nFx$%gz7uPTSqB6=OIp>~5eJ S&Y}l&B!j1`pUXO@geCyK literal 0 HcmV?d00001 diff --git a/textures/farming_melon_slice.png b/textures/farming_melon_slice.png new file mode 100644 index 0000000000000000000000000000000000000000..5f92e14c0ca6b944339c2ed77c5a0f5ef96a8617 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5ptUkvZ|Jt{TLqHm9% zxFe_Y zVIJq&KU2z8-59>=vn(i8_-Do3!7DqzyiP;WoQzo(4u{&UX$0PoR*-laKwya4X=gWi+Ly?p?@_+i_~$-7nnRLexK z2pW0Z093n#Zw3<0>;P08eRME7yX*kD5k!(n-7*{i?#d9WV-XZ40Pc7dz@QxcHUPOH zUhwf3&TIg=1Yhy<0=}#O>Dumo?wDxo0NL&7e!H48oB+Q6`?>%8ddUFHySrM;yU*+? WGEAu4rZoWo00009zYt_PgQu&X%Q~loCIC-nA7ual literal 0 HcmV?d00001 diff --git a/textures/farming_mortar_pestle.png b/textures/farming_mortar_pestle.png new file mode 100644 index 0000000000000000000000000000000000000000..c44fcf5b6ea9b906768b9506ae17095cc37451e3 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bO)b#{GHasba&vQgdU~Q& zJ(GZZ#*!evUayx$tKFvRMKd3*`?S z=UlRP@jbo83sz6k2so*;Pygb}-wY*|fo1}!w;~VSt=}PRYp^flNhiDSJ8rJjg^LY= PrZRZC`njxgN@xNAN-a4! literal 0 HcmV?d00001 diff --git a/textures/farming_orange.png b/textures/farming_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..f729a32e631f96efd719b6d489f06215e76edc49 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5o?O1E8UyZNI!*7qeG zhx0@tb5z1Aj87-COiLAhRLFTKhPk0m_f9tBkrd9Yk!%y(m<+OZNCCAomIV0)GdMiE zkp|?Xc)B=-R4|tK9%VeBAkbVq=kM~h)hG4ev3>Zb+VH)cxASQA)$Yk3&zQQRcRqZ7CbjC}6V`i0bL}1e%>HxX l{>gIdV)g$w56<^vXuWLoQTf1$LZDk1JYD@<);T3K0RaCGPeT9z literal 0 HcmV?d00001 diff --git a/textures/farming_pea_3.png b/textures/farming_pea_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c3335c78e84e057cff177e17ac57a61659c160ba GIT binary patch literal 354 zcmV-o0iFJdP)3AP#V?Dq7^wMz1NvS)c9@kocNqzmz<#}PKPj7sB_!9 z{t7{KN z5JeLZR04MEmHVGB_2& zRH4&cq9Qn5`^=z|f;LO}sq*#DoJX5okM{599M4ax!S~$;A^-pY07*qoM6N<$f+I4Y A0{{R3 literal 0 HcmV?d00001 diff --git a/textures/farming_pea_4.png b/textures/farming_pea_4.png new file mode 100644 index 0000000000000000000000000000000000000000..056381f753e98451cbd52362460b281f4c25441e GIT binary patch literal 441 zcmV;q0Y?6bP)$;?Yqx>7Xc68I=-~un&R<6M7KzO5lfp6_5Hv;t>ARN@d!~xZ`)Cc( z=lZn&gvP9z1FSZKiXdMC9H;}PiA?DP)?u;_HAbA!^eBVIq=^4)5vsJK83UQ|z zkZ@ofX}c8yuh!^FrnnrB_~UCxIvflZP@ZMMB8_wS5`6ByL&h$aom|%4ix#BpSw+Ip z4bCjn8m&^QX+e!yVf+bR>k);tJ@;7;$xM3gs+7sK{^Xk_DbPt jcryo(a;QRVZqNe&B5meOisZ@i00000NkvXXu0mjf6$Q(# literal 0 HcmV?d00001 diff --git a/textures/farming_pea_5.png b/textures/farming_pea_5.png new file mode 100644 index 0000000000000000000000000000000000000000..b4f5d88b206ef6bae6b0b791ac893cf7f655741e GIT binary patch literal 592 zcmV-W0JJO%23nl!%*8o|6CIX3_YS~4GL?dc_A2ok07Q}Ca3w-zADR!sI9 z+Cts}C&$UB;7bSPpx-WXq^;_L2GZIMkZ3)BC3y{D5_hY)^^;wV;jkH?@=d za8A~<>ZBdHlfzVoT{xm|C#$(NQto-_{4;o;T7XMWfoQ3} z2NKC<79)o#oLtB3BIDIrPYw2Sh=4scfCB~!guVu6su(m|VnpsEIJpnYAdC4;hQ*I% zMdcs^R0F-f#WS869%NsA&NhFJTCkC<=CqUJcn0`q$CK=<_gN;1oDv2y1mXbuAAYsQ znSWYDX3O`I`$&#wWj{hsd{s!e(<%w%4<^t++I!e@ql0Z-J~s$Bk7W=X^U>~PnIzCW zm_QkdnSA{1#x9@TjC^vQ6fVX8YvE@}u<(1nVOzQNBz6H~ROqun6o`jD$4W|>mn4Rb?3zC=nTOk6 zgjU)v7>DYyT>3@Ru1?OATAMPzFn+T>Cp#fxz$3H;9dEBE8#awTfC!d{#fua$MEjwuMtyx%g+HPZ|7F)jD9wJMlVq!w^f) ZVIoLS9s^^2k{bX3002ovPDHLkV1guw2oV4P literal 0 HcmV?d00001 diff --git a/textures/farming_pea_pod.png b/textures/farming_pea_pod.png new file mode 100644 index 0000000000000000000000000000000000000000..3c448e2292b3ffd221bfdbc7724d11d0291cbc06 GIT binary patch literal 483 zcmV<90UZ8`P)C z#S-EX#Ce^Z95zXaZ&v~tc`R)r&&8)K$vzbnki+Ida$9*5V+7bHA&(^@@|iz``3mzv z?6&QM;YTnCnt@2W?l&h(lfYd0<8kgCFl+<4m=|L{#4HtgFP#j>KG0&{b+rNk3K5{g zTxNag+xNq;0+c)TUM=++zOQucyB&xC*`~`bWn;*G+a5U9fr9@X7pos8Pb_rkzM3o8 z?;1t`FEcm4;~^aDDR64D$H3j}Ao)ur?>t|H=S#v~mC5q)L{G_ni{xqIO!4=|Lq&HJ zMkW4jJy|Qnj?N+b&DG49-X`y2h#W$W>w771S|!R3_mezP{%k%TC&aNhWY*k8iLsJ% zG@JLGcUSTDtJ%2ea**QOb1U;h_Oev`z)IK@n)+?^Fev$4d&J*+_<@3VTqvg45kXk1 z#aIxt8SlK1Pq8c$_aN1-Ic(X(%uD}te0vnK4ugJB%xuvkkG*3leC{M> Zh15bh^WY{g4}Jgu002ovPDHLkV1mG9;WYpN literal 0 HcmV?d00001 diff --git a/textures/farming_pea_soup.png b/textures/farming_pea_soup.png new file mode 100644 index 0000000000000000000000000000000000000000..39806fb109bcb6dfc60e12c4770eb94ec7c54060 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWP0r5&GV`l68+-Mq=c?93 z$t{xn`2Z-ySQ6wH%;50sMjDV~o11Q8n3Fz}v&~=7}2uCj>;8 zE;Tu{bu3=6AVa~Uw>vvSBVy|UZ;b%9GfbB_7#P01Wu0VQU@;YF4uhwwpUXO@geCwD CWG^%T literal 0 HcmV?d00001 diff --git a/textures/farming_pineapple.png b/textures/farming_pineapple.png new file mode 100644 index 0000000000000000000000000000000000000000..b2aba7dd01e7ab4f5922d89d0f091d065221b656 GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uBp1|{;@hWQF7CBRUdA+ zdkZMeSQ6wH%;50sMjDW#>*?YcQo)$qz#zt`p!kAGC4xCY=N+$u(|g_tH}*<V jPTkAw@xiu1f`#GwTfPIXbJ%o%8W}uY{an^LB{Ts5O716B literal 0 HcmV?d00001 diff --git a/textures/farming_pineapple_1.png b/textures/farming_pineapple_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bc4df3028265011d9b819a7c53e631c442c314a8 GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)Toc!a`p4?%C5S%&iZGT0 z`2{mLJiCzwIEGX(CQGy^Fm}w8YG6rbW@g~r%$Tx!_2O=zJcFmJpUXO@geCys CVj3j? literal 0 HcmV?d00001 diff --git a/textures/farming_pineapple_2.png b/textures/farming_pineapple_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4b96d1720f81900e202a5decfa22d43bb8d82e9b GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T$6J{{bO}L)ba)ZMHowh z{DK)Ap4~_Tsr7Vm4B@z*oFKvCz}PWUrlBQ;c|yWpW|bMU8(5N=nHf}8F*A#wV!I4f O%i!ti=d#Wzp$Pz3Umhs{ literal 0 HcmV?d00001 diff --git a/textures/farming_pineapple_3.png b/textures/farming_pineapple_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7e206f6fb0b83e12029811825ac884cbeb68a3 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T&F(@^^eu@Jy9qF6k#k0 z@(X5gcy=QV$WirlaSW+oOqMV>z@wxi+raW#PT;%1gcUgqLTl?C?x-moym5emA@&Dr UbN)wX4WI@FPgg&ebxsLQ086AIiU0rr literal 0 HcmV?d00001 diff --git a/textures/farming_pineapple_4.png b/textures/farming_pineapple_4.png new file mode 100644 index 0000000000000000000000000000000000000000..caa76af5b3f5e76872f246c571585194590d4ccd GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)TzN}F{bO||3GcTAiZGT0 z`2{mLJiCzwH|;qE)XL!L>gTe~DWM4fj(H}4 literal 0 HcmV?d00001 diff --git a/textures/farming_pineapple_5.png b/textures/farming_pineapple_5.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0ec88be2205ec6c6ec0716496b8a28cb926373 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@&H$efR|bak$)O4Uu{yWo&i(`n zGL{7S1v5B2yO9RuczC)vhEy;nOB5WK#*pf9uEA)Bn1iGbZwAjg*MMV8>(+?|Xs$?F ztF|JfIq0(1idTGXYzB8(LKiQ%vXvo?m3`N`P=l3hd@A0IrjGo vqMa;1S~8EVJZfFwRCj;Toljei%(rG}I?3kTd+vlC&`JhRS3j3^P6X!8yd^2>Yh|dN+_RpI5+Y8u{B$HLZ+I}+idsY)SiD^nj5w_$|yNZ z$>_4V*e)c<6X~gPVE&D?oTI#NPW%=teX8^FcrD}S0*)=`bss+k+RWhT>gTe~DWM4f DAo@=Z literal 0 HcmV?d00001 diff --git a/textures/farming_pineapple_8.png b/textures/farming_pineapple_8.png new file mode 100644 index 0000000000000000000000000000000000000000..38e3ea8195331093122a0eb0de8fe595bb14099e GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@o&cW^*Hqnf|5%-xD7opmst-5Z zy#*9!ED7=pW^j0RBMrz&_H=O!sbEY#z#qY~fX7i>quG=pwxybR%EIq#r*7<(K2`C( zk45mcYyjJRW{u{Hj8hMuka}@|BaL;#t~Q6I3*HHqwrG_Jl<>4#U2Q$c=wt14m4jm! n+ku*cP3yEp)Sez_O3`H4P%L)KVvo^vpmhwMu6{1-oD!M<-jP5S literal 0 HcmV?d00001 diff --git a/textures/farming_pineapple_juice.png b/textures/farming_pineapple_juice.png new file mode 100644 index 0000000000000000000000000000000000000000..0a05c1f882e625ac6cf30024b52004a7b53d84d9 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ%`eJ*^6c@&%NKt9`hM;d z@11Lcx9;5hBJ}STPyu5}kY6x^!?PP{K#skqi(^OyWAXv+mMK$298DH8GBa;x;A*~k z;|9YShLg>bI(mA132qt!0tp5)+uGQ)8@8xPOV4h6n-t{D1at={7q{l-j{#*sqZmA0 L{an^LB{Ts5_lP%G literal 0 HcmV?d00001 diff --git a/textures/farming_pineapple_ring.png b/textures/farming_pineapple_ring.png new file mode 100644 index 0000000000000000000000000000000000000000..e42943e8e2082d792ed81fe5054b649992ec8133 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t_%$6cdiMZJH$ZMJ)I8ZOBND*vge8zz}+$|G;af=7~TP89ZJ6T-G@y GGywp)*DXf? literal 0 HcmV?d00001 diff --git a/textures/farming_pineapple_top.png b/textures/farming_pineapple_top.png new file mode 100644 index 0000000000000000000000000000000000000000..27230763475d23b73a84a2579360e279e0181603 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bO)b&&kJYJ(lAE5Zx_bvt zQrqp1KqFVdQ&MBb@08kGjH~;_u literal 0 HcmV?d00001 diff --git a/textures/farming_porridge.png b/textures/farming_porridge.png new file mode 100644 index 0000000000000000000000000000000000000000..7eaded52dcd4ade550aafef01b10e6f2947d6bd6 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aJ;=cD{Nm()pF98kD*gW| z_5T~ce?OyZ#3VMFGDem}bOMzzmIV0)GdMiEkp|=hd%8G=R4^tV;ActPGHC%ri&-Hr z3zrew@})D|*tiTrI@(yJceiXao?_m`#>M8f#dt&c7OxVI5)lJ~5RmNu{WSAc#;+OpJat_dV22WQ%mvv4FO#m-sKEnV2 literal 0 HcmV?d00001 diff --git a/textures/farming_pot.png b/textures/farming_pot.png new file mode 100644 index 0000000000000000000000000000000000000000..6d2264bf60092c10a42bcfb447a8d64d8f4e7ef1 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!3?Pkx(w-e%@jd53-`8$r>8Rku&79OSV{^*t*! zCz8Q@8Q+0$rMp}%uf$%|F{U2-#oQs4@a>oE&dz=n7KV%`Z0(CSUzPw`z~JfX=d#Wz Gp$P!|ZZSmw literal 0 HcmV?d00001 diff --git a/textures/farming_potato.png b/textures/farming_potato.png new file mode 100644 index 0000000000000000000000000000000000000000..19281b78e97ba7fd3768a39532d33468cf62d321 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!O@L2`E0F$v*zm~)xp%uXZY>kJ zx{&|D8mS`_n9tAVTwl#_aW41PMuyYV*><)vPEBO!jb!MFU|3zwFgKH-){|kw+YVcx ze#Vj@zhDN3XE)M-oM=xM$B+ufCB8=)8w>gumCoYG?keht)E-C;NOB;=Ft-H+qVN eno7@ccZQ7(jL*c|05Z@4 zM(1+POULvG?HBMq-yiX>ID^9F?+sUI9_<0vn~vy>d9bkb3b}dHSf1L4 z=NfFMqt+cFnp?@q`F1V?uTPzNlAkPIK^g7w-m9^#BJSX(^kxs#{0OoK0JxUa4lKk( zw6oUUxzG%P86y!nmlEW;ii=GoM=69Rmj&~cA|(#$f|I_S0XSHgdw`tzht*WXAMyR6cZXh9f5l8EPyj%L>zqI0!c4s^wEbzhN`V904<6^`2{84T3S;OXk;vd$@?2>=Ov BEPwz2 literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_2.png b/textures/farming_pumpkin_2.png new file mode 100644 index 0000000000000000000000000000000000000000..552c724b162b597f0931736109272bb8d63cc79a GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeXWe{Z0kLOYFV$cs`vM5sS zUZ$Mf$nV-LA!^8w*~RC*`EU+UC1XjDUoeBivm0qZj;p7OV@L&K@&d*Lk)VVCGX|p> zF~T#QSR^E5MQ0ody~`ru;xtv_h-k2ggjDP#mb=y>k`fjybG@`@s4-qO%UrU;M9YAI Z;j;?o%ErWli9iDxJYD@<);T3K0RY(EF6jUO literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_3.png b/textures/farming_pumpkin_3.png new file mode 100644 index 0000000000000000000000000000000000000000..39cb0394bae68e76b06ca72da3f475b9e7764600 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeXWl&^L@M6#pW3nhx){p1u zUZ$Mc#pl{Ak=)2HYRE7}`)xc>C1XjDUoeBivm0qZPMD{QV@L&K@&XnEtws-FcD6ua zHZkUB8-$KM5Mz5T5a?LW$?wc29_+|gJ~4@%E&aKh_~)5Q4qw&UmQL;Ibg=E4boNlN qisLR-wW6pFYX(WBHl2f$bQ$zF@IG#xC-V(x1B0ilpUXO@geCySh&U+# literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_4.png b/textures/farming_pumpkin_4.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2ec36507be5396bdb57768f1c135783abc9588 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW4p&2Tw^DY=nf)R4ioSz^+iTppla#*!evU9va4d8Z^K6qWw^*w1+)f#cHdMV~_WQ#u|g+r|H7U}Fpa>T+#bZMdXU)zax1JEqp9 zc9in+@a+5^*Vw4}?&Y5a;?oSX`FW}HB`FnGH9xvXx#Irt7|@_{#y;IFWS| z?DNhXu(|*3W$Kp=CM6%f90{Jlbna#1rlVG3@8qN=d}Muki)E3~^VmS3TNpfD{an^L HB{Ts5Bhp;z literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_7.png b/textures/farming_pumpkin_7.png new file mode 100644 index 0000000000000000000000000000000000000000..602618cd807d06edf82d5d308fb929009ff5cb3c GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5oCpDL%g8JnOsgG_*+ zxGj6u1U|P^R@D?PV^dz2W&tHH25w1)`UYXcc=qrT!3B$DDldLd0BUC}3GxeOaCmkj z4ajNtba4!+U`#r|%Mk0!Da5SEA#9j*ZRwBy*Ts&V3-vGZb@|sZujkvp+3X6jC45`j z6pfbYikPX)yRforDVy}IhKT`DLJ{VTiClKG*Q@3EPQJm{ZHT*BEnl^9o#Xk{|2|XW_UR}&$JlwOTdv)r>E58@iG75ZPZCd&7#a5t` O7(8A5T-G@yGywpl*qwmWm89Yc*j+bzfZ+N23<04n+sd{2)~(FmSi|5oi7oHm Tg3qsj?qcwC^>bP0l+XkKYl&fh literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_bread.png b/textures/farming_pumpkin_bread.png new file mode 100644 index 0000000000000000000000000000000000000000..743a48a1b828fb4cd72e8d7f330598996c3262fc GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnY1=0&b7|u6v@5*JlJ4N!{ zHv3yA8s5CvJjs>e)w7Ln&gLFkeWo0!h_NKdFPOpM*^M+HC)m@)F{FYq*@3l(DIn^E zz#)O6P%#GXCCjbM8(3|YYc@;ttW(q!Q()X^6yDKr>Ws>UhJcV6n;ASDu9kKxMy&7T ra?x+!Fq!qp4L9cn3=u1suQD>MxWs!dgRN&f(0B$5Qco(ncJt(%S7SG`fsAv@|tY nwY9Vi4N5q;$~ejl1eh7Nz2mjMbt^R-Xgq_btDnm{r-UW|zu81} literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_face_off.png b/textures/farming_pumpkin_face_off.png new file mode 100644 index 0000000000000000000000000000000000000000..df7017147ed7088768b756be54fef4da23b1b5e8 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv5AX?b)n#CA31^?2#JwhgV{rz@ zwp@pt zSecodDm-G9dCc&sLW*P8$K|^|vZx;B)p5&rIM643&|^cT=HE-lU3U7d+N8Qo$gA|H zSY+K|r~8&C8lHFdC)`~uTT$6DEzw7rGke+e$Nzk67JE&qcKy=Pbo7tZqv^5tx92-X zyg1_Ay8ag1O#d+oNvf3iChV#LI+4NC)z4*} HQ$iB}bbn|M literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_face_on.png b/textures/farming_pumpkin_face_on.png new file mode 100644 index 0000000000000000000000000000000000000000..d5ae10466cc56da69af2bca4640c56f8db7dc1ff GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZZ3$6-+d zKd-S(+vU4WipO_ay3ws$?@|p)Y+e|or(exZ+u*^sZdF&8XnUuDuP#r$!p9`3bjj$9*Yw#kk~5~x?FpIW%OWAc;@dN~l~s~K@S)yT&5+~q QKvyz&y85}Sb4q9e03*z4cK`qY literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_side.png b/textures/farming_pumpkin_side.png new file mode 100644 index 0000000000000000000000000000000000000000..2d30f203570c434bdb20c0deaa49834c4a2ff3a4 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aZ3$rysCNEPo+5*SslcI4Q*N#R8p`15>gTe~DWM4fjj2rJ literal 0 HcmV?d00001 diff --git a/textures/farming_pumpkin_top.png b/textures/farming_pumpkin_top.png new file mode 100644 index 0000000000000000000000000000000000000000..cba51562a61176586525bc162e7532b7fc1695ee GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU?TckylgM(if^Sg<(~W+v zt$D1ES2I62&fu*n$m`C}r@}tH#_0H(K;2~aJU51r4u-UezA`|)Gd*1#Ln;`P69kL` z!%D=G5)#6S!VHT_{n84!JbgJmO}&!>Jb68Xymf;U4S0(~-xvfLrUlI0df`_|@CL5t z=VznE^wm~d8lKr(zj}T0(=9G+=XchJm)zN(c}5|{vN-JisZ2kfGk#si`dfoVBttGW ziSnF1G)bZ*Ciu|QLqWZgJ%@oTr%AGsGp-!E(iAh7$Kjknm|$2U0|QI9=Dlsa_1l4t OWbkzLb6Mw<&;$U?pwng~4TW=ajCl1_|9qxr&RJ9NavXxXtch3UEuB8txIL5paG}$B_veL>(rsm@}X#7eOR28c~#SY~;Po8u-ML;qQ}vnT$w^#YAx@O1Ta JS?83{1ON)@GlKvC literal 0 HcmV?d00001 diff --git a/textures/farming_roasted_powder.png b/textures/farming_roasted_powder.png new file mode 100644 index 0000000000000000000000000000000000000000..a470b6c7d0275937ad2790efe34e0fa0313bcee9 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ%`eJLPEJltOw7*C&dkhA zOG}H3i;JqM6agw=ED7=pW^j0RBMr#0@N{tusbEZ2kmTTW$WRqlHaMG+l*1$zWM*c@ z$;92#*3!Z#>9cO(!i5TgR|6CnIy;s!HZs{=X1u+JQ+cW9D`}t^44$rjF6*2UngD|t BEGYm0 literal 0 HcmV?d00001 diff --git a/textures/farming_rose_water.png b/textures/farming_rose_water.png new file mode 100644 index 0000000000000000000000000000000000000000..527087601a229fa929a6e720a3e4a37d9dbf542a GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv5AX?b1=2Gcb31Zl_a3=??97ex zm+xP?{&4HoGY1b|*|O*C%{^CFZ#{8#^~nk4+AD!d8B2ovf*Bm1-ADs+%spKkLn;`P z6@(1595T|bhp=;;4iwc2J;0S*;E-`HbTvCNvA@TzF?Mylx7=l6>^J z4=KkoZ|W4D-KWY_vr0@c;VyUMPtmW+Dyna%6n-(C*uZkk^~ZbGiwRt1Y1`7dfo3vz My85}Sb4q9e0A?39zyJUM literal 0 HcmV?d00001 diff --git a/textures/farming_spelt_seed_roasted.png b/textures/farming_spelt_seed_roasted.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf7b93bd7083c0e499bd7dbba1a76c5ce05a51d GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ%`eKWh|x{=k}U{RN_3V= zahEBL(g<6yO%bSou_VYZn8D%MjWi%f)6>N@E978G? zlNP8klo;J-;bC#)aXmZ#;)99HYV&1U zV)+5cXDkWw3ubV5b|VeQvGH_q45?sDW?*!5WaC(yqQkH>R;JNJc>aoF&$;|Sa~M2b{an^LB{Ts5jz}rQ literal 0 HcmV?d00001 diff --git a/textures/farming_toast_sandwich.png b/textures/farming_toast_sandwich.png new file mode 100644 index 0000000000000000000000000000000000000000..e50a22e88a77578e4aafe53831b8504f6f635bea GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ%`eIYGGAQSxiVR9W_eh< zpZKCUnbKYjX`m=$NswPKgTu2MX+Vyfr;B4q1!J-UgQEb$r5-N@g#!l^dQJtnq**vV zb@5ri6DYhwCV7VNl!vn(F|qXV@F*o_I!xe5+0n-2sBnQ#TtJ}VHWxd?Gj9R$b&RSX QfhIC|y85}Sb4q9e0K5q@C;$Ke literal 0 HcmV?d00001 diff --git a/textures/farming_tool_bronzehoe.png b/textures/farming_tool_bronzehoe.png new file mode 100644 index 0000000000000000000000000000000000000000..12dc4b1681106bae120fe361b14231756c36b54f GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}NPtg>>;M1%Cwx19w?y}0xxv0< zg?F8P|K}GSF4x%{EB(C5?SH%N;M1%8FWhnw`>wFFV&sU zS8(}a?uBz*Z(j#)+TgWjW%D%FOTcxA08+ z)LPf5F=s{P8m;Gf7HOWdp0+e!TC^ssA!712S;s2<9)q6AoC{`&*Hx9MH|%E2zh7Yf kAkV>cy;4i5sKXA~j;+jWh1RDg0WDzgboFyt=akR{0LFJ!AOHXW literal 0 HcmV?d00001 diff --git a/textures/farming_tool_mesehoe.png b/textures/farming_tool_mesehoe.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd597a49544f1a65c7ebf8466d9949720badf42 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!eSlAh>xo5q|Ns9tl;bs2WIX+IQxMyB~PQ%96t;@=9}p{tEFG;u~%{E-e4| b@CEzcwM+}0=9Omx&1dj*^>bP0l+XkKCcsp* literal 0 HcmV?d00001 diff --git a/textures/farming_tool_mortar_pestle_hl.png b/textures/farming_tool_mortar_pestle_hl.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd9e397d3960064810d00417a9762867f9e7d82 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!3@a^`3yPRcdt$YillqG zIEGX(CV8AY&p5@3U5(+8fq?7W6OLSY*BXuHJ>U;mzkK5lPKHV8yG%H@tzO^owqwJw z<^`7+(v&qfq{$z;!yuj1cWs6V(+R14+9zJ?)i++=r*7cSSoJ>J;mqyH22bDDGxp@) bv1D9(=TYo`FQrdFD;Ydp{an^LB{Ts5!k|EV literal 0 HcmV?d00001 diff --git a/textures/farming_tool_spinningwheel.png b/textures/farming_tool_spinningwheel.png new file mode 100644 index 0000000000000000000000000000000000000000..7e14b7af76d886fefbd612b07d7f1fd132b6664a GIT binary patch literal 2050 zcmV+d2>thoP)amK%W<`QE&Wlv`PNDjp@rh5`74QT*PuCoUIv+BnjzW&;;m37 zN(6HCmh8`Ec->^cUbfp|wWGYK*pVLauu^To0EcNVtU`kf^JmIEqc>=)L9Uiyj{5<< zo#`c6ptJ4bg;8dvB!9HV>w1FzR%;7jws(X~aEC+1psN~TRLavDK@EN}7$iCuA=3qO zCpS3-j5g8Vs!)xfEt+fwUEHNis*p)eLr4o}`Aik46)hkbE380Bj2(XSwr1dH9c}l5 zK>$WMNl2WFU1z)d^+A6#2}$*msg5)lu-r-^&0X$JKdS+QEJuu^Y}XYq*tr0r)wtK5 zSZ58WBxFw)$Z(m9^a5+t0_fm2>#g*I1aPcopo6lm-`SDS7u}-;LQ*XP1p;Qe(FEOGX0UUuagUcA04Vm04j>;v$N5sF>m(ZE8A%9P zpcGUIxWToy>f-}xTB-JkegNuyDGr<=+eS+)k|o2zCVI$NFFMZMUh=F95R&F3P$rq6J~T&9WQ01cYNf%7yt&H^cNmDuKbUs&f>?cC^BO@8&V+nnw~Pr2XqJ^|$d zs>N8WM2&B}W}DA6dE9(Z?`K`Wd_nv9TDrH@OLB#moh0EO)!*KRI^4;iT0oh0lFe|O zCI`w>=V|ZyKx-8H&K@9J(4}7YtVeAZ<$ka0hL8$XphQ5PeH~zb&-%nXBmLwG>-=gc z=4vtqWFjQr!_Ic67j!qx_l63pu?7?fSZKO#68)&j7hdzKgH&p=H+Iux1;`Z#V6HPf z=5-a05~E&&i^U1);wU+YRxBVxzV_<9?j^r^#gE>W?|%z1RK+T6a*lN4#v7r#Ev_(5NK4mv(}5t_Sb_!_p$II|=oarg z$Zl?Ot#*J+Z)>s^L^)h4R*7kisGTr2>w62v&!!!C7_0`<;TY^&p4r`}~K6AhrbV|`-+ z;BbkaR)Z~uBhhvb%M=aTJ5(zG?$v03G&g$0`C_ohG(d$Cr#s%oM(YV6*U`R{g<2zQ zvrL5yM_Mmmg+XEfyIP|qA(f6W#UyvTRk|JG#mZH!+(tJ@1avk+riGR{#1Xo=#g}eT zZj(HJCe~t0ML|$!J@j{-W+u478g(knvY$5oD8V|74wmO8Y|{xr@lveP&)?{1opj?s zb9Dq^GG)s#%KQs@1AiuEY`60g)SK7rm`S zNL%}vVTq-3Et4wcvawU_B7Ip$^0$!s#Ph zC$->KTkPcu2@tt-&9t#xIB9lMU=KulT#^T6S_+X{f^o(Or$Mw$pqo2TkJS*l#i-U= zIP3JZ1Ppd179vGIBA0`D;jNIT4ajg7=4hssY9hA)>xC1qL@i*wOVP_b97^OC>MKV$ zS#FSv9IJfkc~PiGtymF?l`Tzw;p7|d0E>*n6xl{#sct43C_=qVR4Kd?o2<4UV520o zk*|$15gH;

SGy+y*THEt~=7tr)P#4##LGtoCLa=SL|r zq?j+oEc48EuqpP_#dhN*{-Zib_(!z`u@+k;O@@;VlPFDC39=mFYI*YHEBVJQmiLcZ zBt?}s{iaEiZ+!1JKWXysdej~glzU#3mBNaasJ%baR)Pe*B}%l90R|Xh;y)@`ihq<; gDUwwyROB!G7hh;8Np;M1%7g+N>dh}@T-o4+y ze?N2P%(G|DfP$Yte-5;ianluj|NgzTs(`ho$m7S4o%O~2O?eF!`Eopk4dr;vlmzbN z-MR}jim4>X4`^iBIp+3CPfjJz}X*nFIv%c=l>dMAEVHcYwtI? z2k)N7V8F0TcCFBYckW-^87^&hW76L{^~2A9E)MhS4Iap={4hKs{fPHto1M7I8rMVD ZINc^Pb$I`{-vKn9!PC{xWt~$(69D93S(yL; literal 0 HcmV?d00001 diff --git a/textures/farming_tool_stonehoe.png b/textures/farming_tool_stonehoe.png new file mode 100644 index 0000000000000000000000000000000000000000..c082518904f8daef2424416f79caba7d4b11928f GIT binary patch literal 250 zcmVQ5BLIW2 z$Ls1^nx;XLB4JJ@)#fFamU&~+V(qA(Fz;Ig0Lad6--T`P-rU}jeLG5m!iUn0q7 zX7(F-nF;VR6X0bgz{^a4;M1%FW9h0+KQ*Rh$Ooy z=XeVHoARc+Nk!T6rMk%lTFSWTidt)mq&N#0D)L#Y3OMVF8_MyTDG9u_6mJI_!c-FE z2Q;i~@>vTY&(G7vF{FYq^~6y|CP#*&0h=D{{r%omZ?b*Q<@y7OYnUAlJZ$cs&u~v| z`f2un+Skq>MDE)s{<`LF^k{uwQ0VdvjVS)S4Reh{vz8LchxoR!5M-2 zOB;N=%%xNObX<&O*jUYifyx+5g8YIR9G=}s19D0{T^vIy7?T+o-B{Du1yULsFSr~G zI{fHB&<=-%RXeM9PTpl5)1cY7l99zRXNBY%Rs|061o4Cr2FD!?#f-CbeRwm{7*Yd6 zS+u0JxmL5SKE&$P9dg>cQ6SNqsZDYXr$R@-!-fL(Rr!Kx1ttv&%epRpU|^7oFyU1F S@R|>3KZB>MpUXO@geCwK2tn@v literal 0 HcmV?d00001 diff --git a/textures/farming_turkish_delight.png b/textures/farming_turkish_delight.png new file mode 100644 index 0000000000000000000000000000000000000000..cbb5913a6d73a136eeec1799b42a2b95e82aa722 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bO)b&A-BR7}>wbIR?%N)g zYh1r71Em;Cg8YIR9G=}s19Gf9T^vIy7?Tfhvoty|dKk~zVZqJaC~-(nPt8d{P+Z*L yFst-o$uk9Ig@!D~JiZD_J_gK^QyLg%_cBai;heu9Y)dN86b4UMKbLh*2~7ZgC@V(* literal 0 HcmV?d00001 diff --git a/textures/farming_wheat_seed_roasted.png b/textures/farming_wheat_seed_roasted.png new file mode 100644 index 0000000000000000000000000000000000000000..041f104009f46f31624da35fe9731b34020e5ae8 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ%`eKW2~kV36V3IIin0(Y z^OKLW7G9B2a~7z8u_VYZn8D%MjWi%f&C|s(q=GT|09#7}k1!isqQvbG##0H!48c8Y j9Ck(r*0J97sbOH)_<<>5=?7&4pbiF4S3j3^P6TOO@ literal 0 HcmV?d00001 diff --git a/textures/farming_wildwheat.png b/textures/farming_wildwheat.png new file mode 100644 index 0000000000000000000000000000000000000000..90cb6d5bf8dbd7611871cafe6276a44d101e1942 GIT binary patch literal 228 zcmVACx@)D9LaM5xx2RvfuVS*G zPU7O=nwpcw#=+?lz~TS^00DGTPE!Ct=GbNc002-)L_t(|0b-ys08ljzHULCXEZ@e{ z{-d55)>ZmPjn&Hehw2cM%5S99ma?~JLiaHypmXUAcm+h$1avjKvz}O>*r(njz$oSO er*&UPnfn0@g91-+`KogO0000T^vIy7?UM36d065W;95+XfrS{e`1*Y+i2=dbB*g## literal 0 HcmV?d00001 diff --git a/textures/farming_wildwheat_3.png b/textures/farming_wildwheat_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ef4a51a3cfb96e5d64fe10fbabb76ed115dea GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUO)OwozAJ3fO4q{|a@OpN zuAHnpeXYm-bL9*EUiJp6VJr#q3ubV5b|VeQG4XV94B@z*oUp*ogF%qdL5E?HYyywM z!50e-9C(nxkfOmL%BjI5$?723=)%S(#;V}#D9O-U&T=-k{eLJ>KZB>MpUXO@geCw( CjW0(4 literal 0 HcmV?d00001 diff --git a/textures/farming_wildwheat_4.png b/textures/farming_wildwheat_4.png new file mode 100644 index 0000000000000000000000000000000000000000..25e83c4a084c2d835ec1a1026d9fcb26a50d5c71 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aow&|r;nvW$xfbgWCT~5O zar|=WoQ;7;FE!Q9F%j0+SO!$aSQ6wH%;50sMjDV~>*?YcQo)$KKu&-`kjo*5VUeta zM8rWJg@bP<960bmfGI_VgJJ39#-1h?1?L%!jjD_%JUm!EMGXu@wlFXp+r<9zVA+9f QK!X@OUHx3vIVCg!03TB}n*aa+ literal 0 HcmV?d00001 diff --git a/textures/farming_wildwheat_5.png b/textures/farming_wildwheat_5.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1a90788ff7a9fa321116c7d1b1e2bf53c17ae3 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnYox8?=`TFSYDRx_SXYSme zcjkQcqSfK2E_5_cv6{Zzt9_>JqmywUos1zopr0I{Jvp8x;= literal 0 HcmV?d00001 diff --git a/textures/farming_wildwheat_6.png b/textures/farming_wildwheat_6.png new file mode 100644 index 0000000000000000000000000000000000000000..f2c9014bb8a048076d53fa9b77f3960c6512fdba GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv5AX?b1=2HT*{xg?x^8pir0G_> z_hcM6n0x$a;Qm92-BZoyuXJC!!Dq+*R2?s)-9V*`B|(0{3=Yq3qyagRo-U3d6^y+H z7xEr*kYKwIK8g8|$b3bWP}3Q!F0ZI>@oU^C7{GCZV_FjHz0dPG%OVymzF^L0da-+3 z>s!CmPIEJruS~6V(%ZswZ1S`T;>XY2t$F+ literal 0 HcmV?d00001 diff --git a/textures/farming_wildwheat_7.png b/textures/farming_wildwheat_7.png new file mode 100644 index 0000000000000000000000000000000000000000..966b432fe246a8954c502dfc1dcf24eb6b4a7a23 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VWWe8;0JlA5+X1`%tCijl6s^cGY5&-CLa3EHyiQJl*g0>^DGNj3q&S!3+-1ZlnP@sh%#5 zAr*{C2iO=`4{ls}C_sYkLb3flZV!k5$NrgJ>k>|B$$8{fEF@%y85}Sb4q9e0Pc!j-~a#s literal 0 HcmV?d00001 diff --git a/textures/farming_wildwheat_8.png b/textures/farming_wildwheat_8.png new file mode 100644 index 0000000000000000000000000000000000000000..4221411a9cd50d79813bad7b80da8872560020b0 GIT binary patch literal 266 zcmV+l0rmcgP)8{sCJ00001bW%=J06^y0W&i*Ha7jc#RCobBO9cu5K@jq~ zYxDmB&Ocrc2 iJR|bJ>%;6$28O(5#*K$!ZXN(CXYh3Ob6Mw<&;$U@Xe_V* literal 0 HcmV?d00001 diff --git a/textures/farming_yarn.png b/textures/farming_yarn.png new file mode 100644 index 0000000000000000000000000000000000000000..9eab55572eeff86a6d8a9b7f755c5fd7a6f25921 GIT binary patch literal 2789 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�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 + + + + + + + image/svg+xml + + + + + + + + + diff --git a/textures/strawberry.png b/textures/strawberry.png new file mode 100644 index 0000000000000000000000000000000000000000..c785cce0d7c98bba5141f150136e54ce38f27372 GIT binary patch literal 365 zcmV-z0h0cSP){;Wh>n+U8`YLOpPXF)8f>8ZscrZQlU*1X@AB z3>4L5tfEn12#gF>111g;0zvMALXZ_(B4NyF=E4FGf@20}Mad|j1q8vqc)&@JeVW8oK)}0Y4kqm$&;TgFOKJYs2UAG&%zS7yb-D-}g6K00000 LNkvXXu0mjf;2D95 literal 0 HcmV?d00001 diff --git a/textures/vessels_drinking_cup.png b/textures/vessels_drinking_cup.png new file mode 100644 index 0000000000000000000000000000000000000000..399241b34048e2b709504721d6e3d8f658b7df4b GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bVJY5_^Dj1U&h!}8jX>oBeNS;xcw~=W|;(?y&2bCC} paA-1Ap5x(BOK6Vh>6Mj`U`Y36`giZ#^k$%522WQ%mvv4FO#q#