From 60957d74691c4afc189f2dfa72bf4df7d6bcda73 Mon Sep 17 00:00:00 2001 From: dicebox Date: Fri, 10 Feb 2017 18:21:27 +0100 Subject: [PATCH] git subrepo clone https://github.com/tenplus1/farming.git mods/farming subrepo: subdir: "mods/farming" merged: "4d5bd4f" upstream: origin: "https://github.com/tenplus1/farming.git" branch: "master" commit: "4d5bd4f" git-subrepo: version: "0.3.1" origin: "https://github.com/ingydotnet/git-subrepo" commit: "a7ee886" --- mods/farming/.gitrepo | 11 + mods/farming/README.txt | 153 ++++ mods/farming/barley.lua | 98 +++ mods/farming/beanpole.lua | 196 +++++ mods/farming/blueberry.lua | 67 ++ mods/farming/carrot.lua | 95 +++ mods/farming/cocoa.lua | 189 +++++ mods/farming/coffee.lua | 132 ++++ mods/farming/compatibility.lua | 144 ++++ mods/farming/corn.lua | 116 +++ mods/farming/cotton.lua | 123 +++ mods/farming/cucumber.lua | 55 ++ mods/farming/depends.txt | 3 + mods/farming/description.txt | 1 + mods/farming/donut.lua | 48 ++ mods/farming/grapes.lua | 203 +++++ mods/farming/grass.lua | 42 ++ mods/farming/hoes.lua | 153 ++++ mods/farming/init.lua | 713 ++++++++++++++++++ mods/farming/init.lua_orig | 192 +++++ mods/farming/license.txt | 21 + mods/farming/locale/de.txt | 104 +++ mods/farming/locale/template.txt | 102 +++ mods/farming/lucky_block.lua | 18 + mods/farming/mapgen.lua | 65 ++ mods/farming/melon.lua | 82 ++ mods/farming/mod.conf | 1 + mods/farming/potato.lua | 77 ++ mods/farming/pumpkin.lua | 184 +++++ mods/farming/raspberry.lua | 68 ++ mods/farming/rhubarb.lua | 64 ++ mods/farming/screenshot.png | Bin 0 -> 42499 bytes mods/farming/soil.lua | 67 ++ mods/farming/statistics.lua | 174 +++++ mods/farming/sugar.lua | 16 + mods/farming/textures/banana_single.png | Bin 0 -> 200 bytes mods/farming/textures/default_junglegrass.png | Bin 0 -> 262 bytes .../farming/textures/farming_baked_potato.png | Bin 0 -> 321 bytes mods/farming/textures/farming_barley.png | Bin 0 -> 230 bytes mods/farming/textures/farming_barley_1.png | Bin 0 -> 140 bytes mods/farming/textures/farming_barley_2.png | Bin 0 -> 151 bytes mods/farming/textures/farming_barley_3.png | Bin 0 -> 209 bytes mods/farming/textures/farming_barley_4.png | Bin 0 -> 229 bytes mods/farming/textures/farming_barley_5.png | Bin 0 -> 246 bytes mods/farming/textures/farming_barley_6.png | Bin 0 -> 271 bytes mods/farming/textures/farming_barley_7.png | Bin 0 -> 277 bytes mods/farming/textures/farming_barley_seed.png | Bin 0 -> 145 bytes mods/farming/textures/farming_beanbush.png | Bin 0 -> 227 bytes mods/farming/textures/farming_beanpole.png | Bin 0 -> 323 bytes mods/farming/textures/farming_beanpole_1.png | Bin 0 -> 242 bytes mods/farming/textures/farming_beanpole_2.png | Bin 0 -> 264 bytes mods/farming/textures/farming_beanpole_3.png | Bin 0 -> 297 bytes mods/farming/textures/farming_beanpole_4.png | Bin 0 -> 355 bytes mods/farming/textures/farming_beanpole_5.png | Bin 0 -> 353 bytes mods/farming/textures/farming_beans.png | Bin 0 -> 193 bytes mods/farming/textures/farming_blueberries.png | Bin 0 -> 164 bytes mods/farming/textures/farming_blueberry_1.png | Bin 0 -> 114 bytes mods/farming/textures/farming_blueberry_2.png | Bin 0 -> 223 bytes mods/farming/textures/farming_blueberry_3.png | Bin 0 -> 231 bytes mods/farming/textures/farming_blueberry_4.png | Bin 0 -> 317 bytes .../textures/farming_blueberry_muffin.png | Bin 0 -> 236 bytes .../textures/farming_bottle_ethanol.png | Bin 0 -> 221 bytes mods/farming/textures/farming_bread.png | Bin 0 -> 552 bytes mods/farming/textures/farming_carrot.png | Bin 0 -> 220 bytes mods/farming/textures/farming_carrot_1.png | Bin 0 -> 108 bytes mods/farming/textures/farming_carrot_2.png | Bin 0 -> 111 bytes mods/farming/textures/farming_carrot_3.png | Bin 0 -> 113 bytes mods/farming/textures/farming_carrot_4.png | Bin 0 -> 119 bytes mods/farming/textures/farming_carrot_5.png | Bin 0 -> 123 bytes mods/farming/textures/farming_carrot_6.png | Bin 0 -> 129 bytes mods/farming/textures/farming_carrot_7.png | Bin 0 -> 144 bytes mods/farming/textures/farming_carrot_8.png | Bin 0 -> 160 bytes mods/farming/textures/farming_carrot_gold.png | Bin 0 -> 207 bytes .../textures/farming_chocolate_dark.png | Bin 0 -> 194 bytes mods/farming/textures/farming_cocoa_1.png | Bin 0 -> 230 bytes mods/farming/textures/farming_cocoa_2.png | Bin 0 -> 244 bytes mods/farming/textures/farming_cocoa_3.png | Bin 0 -> 253 bytes mods/farming/textures/farming_cocoa_beans.png | Bin 0 -> 187 bytes mods/farming/textures/farming_coffee_1.png | Bin 0 -> 135 bytes mods/farming/textures/farming_coffee_2.png | Bin 0 -> 145 bytes mods/farming/textures/farming_coffee_3.png | Bin 0 -> 171 bytes mods/farming/textures/farming_coffee_4.png | Bin 0 -> 192 bytes mods/farming/textures/farming_coffee_5.png | Bin 0 -> 192 bytes .../farming/textures/farming_coffee_beans.png | Bin 0 -> 204 bytes mods/farming/textures/farming_coffee_cup.png | Bin 0 -> 164 bytes .../textures/farming_coffee_cup_hot.png | Bin 0 -> 183 bytes mods/farming/textures/farming_cookie.png | Bin 0 -> 566 bytes mods/farming/textures/farming_corn.png | Bin 0 -> 197 bytes mods/farming/textures/farming_corn_1.png | Bin 0 -> 107 bytes mods/farming/textures/farming_corn_2.png | Bin 0 -> 121 bytes mods/farming/textures/farming_corn_3.png | Bin 0 -> 142 bytes mods/farming/textures/farming_corn_4.png | Bin 0 -> 154 bytes mods/farming/textures/farming_corn_5.png | Bin 0 -> 161 bytes mods/farming/textures/farming_corn_6.png | Bin 0 -> 268 bytes mods/farming/textures/farming_corn_7.png | Bin 0 -> 275 bytes mods/farming/textures/farming_corn_8.png | Bin 0 -> 311 bytes mods/farming/textures/farming_corn_cob.png | Bin 0 -> 182 bytes mods/farming/textures/farming_cotton.png | Bin 0 -> 166 bytes mods/farming/textures/farming_cotton_1.png | Bin 0 -> 110 bytes mods/farming/textures/farming_cotton_2.png | Bin 0 -> 120 bytes mods/farming/textures/farming_cotton_3.png | Bin 0 -> 144 bytes mods/farming/textures/farming_cotton_4.png | Bin 0 -> 150 bytes mods/farming/textures/farming_cotton_5.png | Bin 0 -> 159 bytes mods/farming/textures/farming_cotton_6.png | Bin 0 -> 164 bytes mods/farming/textures/farming_cotton_7.png | Bin 0 -> 170 bytes mods/farming/textures/farming_cotton_8.png | Bin 0 -> 196 bytes mods/farming/textures/farming_cotton_seed.png | Bin 0 -> 150 bytes mods/farming/textures/farming_cucumber.png | Bin 0 -> 185 bytes mods/farming/textures/farming_cucumber_1.png | Bin 0 -> 119 bytes mods/farming/textures/farming_cucumber_2.png | Bin 0 -> 145 bytes mods/farming/textures/farming_cucumber_3.png | Bin 0 -> 217 bytes mods/farming/textures/farming_cucumber_4.png | Bin 0 -> 275 bytes .../textures/farming_desert_sand_soil.png | Bin 0 -> 637 bytes .../textures/farming_desert_sand_soil_wet.png | Bin 0 -> 590 bytes .../farming_desert_sand_soil_wet_side.png | Bin 0 -> 601 bytes mods/farming/textures/farming_donut.png | Bin 0 -> 258 bytes mods/farming/textures/farming_donut_apple.png | Bin 0 -> 252 bytes .../textures/farming_donut_chocolate.png | Bin 0 -> 256 bytes mods/farming/textures/farming_flour.png | Bin 0 -> 159 bytes mods/farming/textures/farming_grapebush.png | Bin 0 -> 144 bytes mods/farming/textures/farming_grapes.png | Bin 0 -> 175 bytes mods/farming/textures/farming_grapes_1.png | Bin 0 -> 255 bytes mods/farming/textures/farming_grapes_2.png | Bin 0 -> 290 bytes mods/farming/textures/farming_grapes_3.png | Bin 0 -> 307 bytes mods/farming/textures/farming_grapes_4.png | Bin 0 -> 330 bytes mods/farming/textures/farming_grapes_5.png | Bin 0 -> 338 bytes mods/farming/textures/farming_grapes_6.png | Bin 0 -> 347 bytes mods/farming/textures/farming_grapes_7.png | Bin 0 -> 358 bytes mods/farming/textures/farming_grapes_8.png | Bin 0 -> 350 bytes mods/farming/textures/farming_melon_1.png | Bin 0 -> 138 bytes mods/farming/textures/farming_melon_2.png | Bin 0 -> 161 bytes mods/farming/textures/farming_melon_3.png | Bin 0 -> 177 bytes mods/farming/textures/farming_melon_4.png | Bin 0 -> 181 bytes mods/farming/textures/farming_melon_5.png | Bin 0 -> 196 bytes mods/farming/textures/farming_melon_6.png | Bin 0 -> 219 bytes mods/farming/textures/farming_melon_7.png | Bin 0 -> 247 bytes mods/farming/textures/farming_melon_side.png | Bin 0 -> 270 bytes mods/farming/textures/farming_melon_slice.png | Bin 0 -> 227 bytes mods/farming/textures/farming_melon_top.png | Bin 0 -> 272 bytes mods/farming/textures/farming_orange.png | Bin 0 -> 236 bytes mods/farming/textures/farming_potato.png | Bin 0 -> 252 bytes mods/farming/textures/farming_potato_1.png | Bin 0 -> 132 bytes mods/farming/textures/farming_potato_2.png | Bin 0 -> 187 bytes mods/farming/textures/farming_potato_3.png | Bin 0 -> 237 bytes mods/farming/textures/farming_potato_4.png | Bin 0 -> 283 bytes mods/farming/textures/farming_pumpkin_1.png | Bin 0 -> 159 bytes mods/farming/textures/farming_pumpkin_2.png | Bin 0 -> 182 bytes mods/farming/textures/farming_pumpkin_3.png | Bin 0 -> 199 bytes mods/farming/textures/farming_pumpkin_4.png | Bin 0 -> 230 bytes mods/farming/textures/farming_pumpkin_5.png | Bin 0 -> 259 bytes mods/farming/textures/farming_pumpkin_6.png | Bin 0 -> 263 bytes mods/farming/textures/farming_pumpkin_7.png | Bin 0 -> 271 bytes mods/farming/textures/farming_pumpkin_8.png | Bin 0 -> 275 bytes .../textures/farming_pumpkin_bread.png | Bin 0 -> 200 bytes .../textures/farming_pumpkin_dough.png | Bin 0 -> 193 bytes .../textures/farming_pumpkin_face_off.png | Bin 0 -> 259 bytes .../textures/farming_pumpkin_face_on.png | Bin 0 -> 269 bytes .../farming/textures/farming_pumpkin_side.png | Bin 0 -> 231 bytes .../textures/farming_pumpkin_slice.png | Bin 0 -> 204 bytes mods/farming/textures/farming_pumpkin_top.png | Bin 0 -> 272 bytes mods/farming/textures/farming_raspberries.png | Bin 0 -> 230 bytes mods/farming/textures/farming_raspberry_1.png | Bin 0 -> 100 bytes mods/farming/textures/farming_raspberry_2.png | Bin 0 -> 223 bytes mods/farming/textures/farming_raspberry_3.png | Bin 0 -> 231 bytes mods/farming/textures/farming_raspberry_4.png | Bin 0 -> 239 bytes .../textures/farming_raspberry_smoothie.png | Bin 0 -> 231 bytes mods/farming/textures/farming_rhubarb.png | Bin 0 -> 165 bytes mods/farming/textures/farming_rhubarb_1.png | Bin 0 -> 119 bytes mods/farming/textures/farming_rhubarb_2.png | Bin 0 -> 152 bytes mods/farming/textures/farming_rhubarb_3.png | Bin 0 -> 167 bytes mods/farming/textures/farming_rhubarb_pie.png | Bin 0 -> 198 bytes mods/farming/textures/farming_soil.png | Bin 0 -> 706 bytes mods/farming/textures/farming_soil_wet.png | Bin 0 -> 677 bytes .../textures/farming_soil_wet_side.png | Bin 0 -> 96 bytes mods/farming/textures/farming_straw.png | Bin 0 -> 892 bytes mods/farming/textures/farming_sugar.png | Bin 0 -> 142 bytes mods/farming/textures/farming_tomato.png | Bin 0 -> 488 bytes mods/farming/textures/farming_tomato_1.png | Bin 0 -> 207 bytes mods/farming/textures/farming_tomato_2.png | Bin 0 -> 223 bytes mods/farming/textures/farming_tomato_3.png | Bin 0 -> 250 bytes mods/farming/textures/farming_tomato_4.png | Bin 0 -> 269 bytes mods/farming/textures/farming_tomato_5.png | Bin 0 -> 320 bytes mods/farming/textures/farming_tomato_6.png | Bin 0 -> 490 bytes mods/farming/textures/farming_tomato_7.png | Bin 0 -> 570 bytes mods/farming/textures/farming_tomato_8.png | Bin 0 -> 510 bytes .../textures/farming_tool_bronzehoe.png | Bin 0 -> 258 bytes .../textures/farming_tool_diamondhoe.png | Bin 0 -> 244 bytes .../farming/textures/farming_tool_mesehoe.png | Bin 0 -> 230 bytes .../textures/farming_tool_steelhoe.png | Bin 0 -> 230 bytes .../textures/farming_tool_stonehoe.png | Bin 0 -> 263 bytes .../farming/textures/farming_tool_woodhoe.png | Bin 0 -> 222 bytes mods/farming/textures/farming_trellis.png | Bin 0 -> 227 bytes mods/farming/textures/farming_wheat.png | Bin 0 -> 241 bytes mods/farming/textures/farming_wheat_1.png | Bin 0 -> 120 bytes mods/farming/textures/farming_wheat_2.png | Bin 0 -> 142 bytes mods/farming/textures/farming_wheat_3.png | Bin 0 -> 172 bytes mods/farming/textures/farming_wheat_4.png | Bin 0 -> 191 bytes mods/farming/textures/farming_wheat_5.png | Bin 0 -> 218 bytes mods/farming/textures/farming_wheat_6.png | Bin 0 -> 234 bytes mods/farming/textures/farming_wheat_7.png | Bin 0 -> 253 bytes mods/farming/textures/farming_wheat_8.png | Bin 0 -> 310 bytes mods/farming/textures/farming_wheat_seed.png | Bin 0 -> 141 bytes mods/farming/textures/strawberry.png | Bin 0 -> 382 bytes .../farming/textures/vessels_drinking_cup.png | Bin 0 -> 200 bytes mods/farming/tomato.lua | 78 ++ mods/farming/wheat.lua | 154 ++++ 206 files changed, 4009 insertions(+) create mode 100644 mods/farming/.gitrepo create mode 100644 mods/farming/README.txt create mode 100644 mods/farming/barley.lua create mode 100644 mods/farming/beanpole.lua create mode 100644 mods/farming/blueberry.lua create mode 100644 mods/farming/carrot.lua create mode 100644 mods/farming/cocoa.lua create mode 100644 mods/farming/coffee.lua create mode 100644 mods/farming/compatibility.lua create mode 100644 mods/farming/corn.lua create mode 100644 mods/farming/cotton.lua create mode 100644 mods/farming/cucumber.lua create mode 100644 mods/farming/depends.txt create mode 100644 mods/farming/description.txt create mode 100644 mods/farming/donut.lua create mode 100644 mods/farming/grapes.lua create mode 100644 mods/farming/grass.lua create mode 100644 mods/farming/hoes.lua create mode 100644 mods/farming/init.lua create mode 100644 mods/farming/init.lua_orig create mode 100644 mods/farming/license.txt create mode 100644 mods/farming/locale/de.txt create mode 100644 mods/farming/locale/template.txt create mode 100644 mods/farming/lucky_block.lua create mode 100644 mods/farming/mapgen.lua create mode 100644 mods/farming/melon.lua create mode 100644 mods/farming/mod.conf create mode 100644 mods/farming/potato.lua create mode 100644 mods/farming/pumpkin.lua create mode 100644 mods/farming/raspberry.lua create mode 100644 mods/farming/rhubarb.lua create mode 100644 mods/farming/screenshot.png create mode 100644 mods/farming/soil.lua create mode 100644 mods/farming/statistics.lua create mode 100644 mods/farming/sugar.lua create mode 100644 mods/farming/textures/banana_single.png create mode 100644 mods/farming/textures/default_junglegrass.png create mode 100644 mods/farming/textures/farming_baked_potato.png create mode 100644 mods/farming/textures/farming_barley.png create mode 100644 mods/farming/textures/farming_barley_1.png create mode 100644 mods/farming/textures/farming_barley_2.png create mode 100644 mods/farming/textures/farming_barley_3.png create mode 100644 mods/farming/textures/farming_barley_4.png create mode 100644 mods/farming/textures/farming_barley_5.png create mode 100644 mods/farming/textures/farming_barley_6.png create mode 100644 mods/farming/textures/farming_barley_7.png create mode 100644 mods/farming/textures/farming_barley_seed.png create mode 100644 mods/farming/textures/farming_beanbush.png create mode 100644 mods/farming/textures/farming_beanpole.png create mode 100644 mods/farming/textures/farming_beanpole_1.png create mode 100644 mods/farming/textures/farming_beanpole_2.png create mode 100644 mods/farming/textures/farming_beanpole_3.png create mode 100644 mods/farming/textures/farming_beanpole_4.png create mode 100644 mods/farming/textures/farming_beanpole_5.png create mode 100644 mods/farming/textures/farming_beans.png create mode 100644 mods/farming/textures/farming_blueberries.png create mode 100644 mods/farming/textures/farming_blueberry_1.png create mode 100644 mods/farming/textures/farming_blueberry_2.png create mode 100644 mods/farming/textures/farming_blueberry_3.png create mode 100644 mods/farming/textures/farming_blueberry_4.png create mode 100644 mods/farming/textures/farming_blueberry_muffin.png create mode 100644 mods/farming/textures/farming_bottle_ethanol.png create mode 100644 mods/farming/textures/farming_bread.png create mode 100644 mods/farming/textures/farming_carrot.png create mode 100644 mods/farming/textures/farming_carrot_1.png create mode 100644 mods/farming/textures/farming_carrot_2.png create mode 100644 mods/farming/textures/farming_carrot_3.png create mode 100644 mods/farming/textures/farming_carrot_4.png create mode 100644 mods/farming/textures/farming_carrot_5.png create mode 100644 mods/farming/textures/farming_carrot_6.png create mode 100644 mods/farming/textures/farming_carrot_7.png create mode 100644 mods/farming/textures/farming_carrot_8.png create mode 100644 mods/farming/textures/farming_carrot_gold.png create mode 100644 mods/farming/textures/farming_chocolate_dark.png create mode 100644 mods/farming/textures/farming_cocoa_1.png create mode 100644 mods/farming/textures/farming_cocoa_2.png create mode 100644 mods/farming/textures/farming_cocoa_3.png create mode 100644 mods/farming/textures/farming_cocoa_beans.png create mode 100644 mods/farming/textures/farming_coffee_1.png create mode 100644 mods/farming/textures/farming_coffee_2.png create mode 100644 mods/farming/textures/farming_coffee_3.png create mode 100644 mods/farming/textures/farming_coffee_4.png create mode 100644 mods/farming/textures/farming_coffee_5.png create mode 100644 mods/farming/textures/farming_coffee_beans.png create mode 100644 mods/farming/textures/farming_coffee_cup.png create mode 100644 mods/farming/textures/farming_coffee_cup_hot.png create mode 100644 mods/farming/textures/farming_cookie.png create mode 100644 mods/farming/textures/farming_corn.png create mode 100644 mods/farming/textures/farming_corn_1.png create mode 100644 mods/farming/textures/farming_corn_2.png create mode 100644 mods/farming/textures/farming_corn_3.png create mode 100644 mods/farming/textures/farming_corn_4.png create mode 100644 mods/farming/textures/farming_corn_5.png create mode 100644 mods/farming/textures/farming_corn_6.png create mode 100644 mods/farming/textures/farming_corn_7.png create mode 100644 mods/farming/textures/farming_corn_8.png create mode 100644 mods/farming/textures/farming_corn_cob.png create mode 100644 mods/farming/textures/farming_cotton.png create mode 100644 mods/farming/textures/farming_cotton_1.png create mode 100644 mods/farming/textures/farming_cotton_2.png create mode 100644 mods/farming/textures/farming_cotton_3.png create mode 100644 mods/farming/textures/farming_cotton_4.png create mode 100644 mods/farming/textures/farming_cotton_5.png create mode 100644 mods/farming/textures/farming_cotton_6.png create mode 100644 mods/farming/textures/farming_cotton_7.png create mode 100644 mods/farming/textures/farming_cotton_8.png create mode 100644 mods/farming/textures/farming_cotton_seed.png create mode 100644 mods/farming/textures/farming_cucumber.png create mode 100644 mods/farming/textures/farming_cucumber_1.png create mode 100644 mods/farming/textures/farming_cucumber_2.png create mode 100644 mods/farming/textures/farming_cucumber_3.png create mode 100644 mods/farming/textures/farming_cucumber_4.png create mode 100644 mods/farming/textures/farming_desert_sand_soil.png create mode 100644 mods/farming/textures/farming_desert_sand_soil_wet.png create mode 100644 mods/farming/textures/farming_desert_sand_soil_wet_side.png create mode 100644 mods/farming/textures/farming_donut.png create mode 100644 mods/farming/textures/farming_donut_apple.png create mode 100644 mods/farming/textures/farming_donut_chocolate.png create mode 100644 mods/farming/textures/farming_flour.png create mode 100644 mods/farming/textures/farming_grapebush.png create mode 100644 mods/farming/textures/farming_grapes.png create mode 100644 mods/farming/textures/farming_grapes_1.png create mode 100644 mods/farming/textures/farming_grapes_2.png create mode 100644 mods/farming/textures/farming_grapes_3.png create mode 100644 mods/farming/textures/farming_grapes_4.png create mode 100644 mods/farming/textures/farming_grapes_5.png create mode 100644 mods/farming/textures/farming_grapes_6.png create mode 100644 mods/farming/textures/farming_grapes_7.png create mode 100644 mods/farming/textures/farming_grapes_8.png create mode 100644 mods/farming/textures/farming_melon_1.png create mode 100644 mods/farming/textures/farming_melon_2.png create mode 100644 mods/farming/textures/farming_melon_3.png create mode 100644 mods/farming/textures/farming_melon_4.png create mode 100644 mods/farming/textures/farming_melon_5.png create mode 100644 mods/farming/textures/farming_melon_6.png create mode 100644 mods/farming/textures/farming_melon_7.png create mode 100644 mods/farming/textures/farming_melon_side.png create mode 100644 mods/farming/textures/farming_melon_slice.png create mode 100644 mods/farming/textures/farming_melon_top.png create mode 100644 mods/farming/textures/farming_orange.png create mode 100644 mods/farming/textures/farming_potato.png create mode 100644 mods/farming/textures/farming_potato_1.png create mode 100644 mods/farming/textures/farming_potato_2.png create mode 100644 mods/farming/textures/farming_potato_3.png create mode 100644 mods/farming/textures/farming_potato_4.png create mode 100644 mods/farming/textures/farming_pumpkin_1.png create mode 100644 mods/farming/textures/farming_pumpkin_2.png create mode 100644 mods/farming/textures/farming_pumpkin_3.png create mode 100644 mods/farming/textures/farming_pumpkin_4.png create mode 100644 mods/farming/textures/farming_pumpkin_5.png create mode 100644 mods/farming/textures/farming_pumpkin_6.png create mode 100644 mods/farming/textures/farming_pumpkin_7.png create mode 100644 mods/farming/textures/farming_pumpkin_8.png create mode 100644 mods/farming/textures/farming_pumpkin_bread.png create mode 100644 mods/farming/textures/farming_pumpkin_dough.png create mode 100644 mods/farming/textures/farming_pumpkin_face_off.png create mode 100644 mods/farming/textures/farming_pumpkin_face_on.png create mode 100644 mods/farming/textures/farming_pumpkin_side.png create mode 100644 mods/farming/textures/farming_pumpkin_slice.png create mode 100644 mods/farming/textures/farming_pumpkin_top.png create mode 100644 mods/farming/textures/farming_raspberries.png create mode 100644 mods/farming/textures/farming_raspberry_1.png create mode 100644 mods/farming/textures/farming_raspberry_2.png create mode 100644 mods/farming/textures/farming_raspberry_3.png create mode 100644 mods/farming/textures/farming_raspberry_4.png create mode 100644 mods/farming/textures/farming_raspberry_smoothie.png create mode 100644 mods/farming/textures/farming_rhubarb.png create mode 100644 mods/farming/textures/farming_rhubarb_1.png create mode 100644 mods/farming/textures/farming_rhubarb_2.png create mode 100644 mods/farming/textures/farming_rhubarb_3.png create mode 100644 mods/farming/textures/farming_rhubarb_pie.png create mode 100644 mods/farming/textures/farming_soil.png create mode 100644 mods/farming/textures/farming_soil_wet.png create mode 100644 mods/farming/textures/farming_soil_wet_side.png create mode 100644 mods/farming/textures/farming_straw.png create mode 100644 mods/farming/textures/farming_sugar.png create mode 100644 mods/farming/textures/farming_tomato.png create mode 100644 mods/farming/textures/farming_tomato_1.png create mode 100644 mods/farming/textures/farming_tomato_2.png create mode 100644 mods/farming/textures/farming_tomato_3.png create mode 100644 mods/farming/textures/farming_tomato_4.png create mode 100644 mods/farming/textures/farming_tomato_5.png create mode 100644 mods/farming/textures/farming_tomato_6.png create mode 100644 mods/farming/textures/farming_tomato_7.png create mode 100644 mods/farming/textures/farming_tomato_8.png create mode 100644 mods/farming/textures/farming_tool_bronzehoe.png create mode 100644 mods/farming/textures/farming_tool_diamondhoe.png create mode 100644 mods/farming/textures/farming_tool_mesehoe.png create mode 100644 mods/farming/textures/farming_tool_steelhoe.png create mode 100644 mods/farming/textures/farming_tool_stonehoe.png create mode 100644 mods/farming/textures/farming_tool_woodhoe.png create mode 100644 mods/farming/textures/farming_trellis.png create mode 100644 mods/farming/textures/farming_wheat.png create mode 100644 mods/farming/textures/farming_wheat_1.png create mode 100644 mods/farming/textures/farming_wheat_2.png create mode 100644 mods/farming/textures/farming_wheat_3.png create mode 100644 mods/farming/textures/farming_wheat_4.png create mode 100644 mods/farming/textures/farming_wheat_5.png create mode 100644 mods/farming/textures/farming_wheat_6.png create mode 100644 mods/farming/textures/farming_wheat_7.png create mode 100644 mods/farming/textures/farming_wheat_8.png create mode 100644 mods/farming/textures/farming_wheat_seed.png create mode 100644 mods/farming/textures/strawberry.png create mode 100644 mods/farming/textures/vessels_drinking_cup.png create mode 100644 mods/farming/tomato.lua create mode 100644 mods/farming/wheat.lua diff --git a/mods/farming/.gitrepo b/mods/farming/.gitrepo new file mode 100644 index 0000000..646f9f9 --- /dev/null +++ b/mods/farming/.gitrepo @@ -0,0 +1,11 @@ +; DO NOT EDIT (unless you know what you are doing) +; +; This subdirectory is a git "subrepo", and this file is maintained by the +; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme +; +[subrepo] + remote = https://github.com/tenplus1/farming.git + branch = master + commit = 4d5bd4fff1bd5ebf1212e14dc2392c049be68505 + parent = 161cbdbd37bd0d051a4ee373ef8545b0426bfb37 + cmdver = 0.3.1 diff --git a/mods/farming/README.txt b/mods/farming/README.txt new file mode 100644 index 0000000..811a535 --- /dev/null +++ b/mods/farming/README.txt @@ -0,0 +1,153 @@ +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.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: 10 (plus 3 for default farming items) + + +License of media (textures): +---------------------------- +Created by PilzAdam (License: WTFPL): + farming_bread.png + farming_soil.png + farming_soil_wet.png + farming_soil_wet_side.png + farming_string.png + +Created by Calinou (License: CC BY-SA): + farming_tool_bronzehoe.png + farming_tool_steelhoe.png + farming_tool_stonehoe.png + farming_tool_woodhoe.png + farming_tool_mesehoe.png + farming_tool_diamondhoe.png + +Created by VanessaE (License: WTFPL): + farming_cotton_seed.png + farming_wheat_seed.png + farming_flour.png + farming_wheat.png + farming_wheat_1.png + farming_wheat_2.png + farming_wheat_3.png + farming_wheat_4.png + farming_wheat_5.png + farming_wheat_5.png + farming_wheat_7.png + farming_wheat_8.png + farming_cotton_1.png + farming_cotton_2.png + farming_cotton_3.png + farming_cotton_4.png + farming_cotton_5.png + farming_cotton_6.png + farming_cotton_7.png + farming_cotton_8.png + +Created by Doc (License: WTFPL): + farming_cucumber.png + farming_cucumber_1.png + farming_cucumber_2.png + farming_cucumber_3.png + farming_cucumber_4.png + farming_potato.png + farming_potato_1.png + farming_potato_2.png + farming_potato_3.png + farming_potato_4.png + farming_raspberries.png + farming_raspberry_1.png + farming_raspberry_2.png + farming_raspberry_3.png + farming_raspberry_4.png + +Created by Gambit: + default_junglegrass.png + farming_carrot.png + farming_carrot_1.png + farming_carrot_2.png + farming_carrot_3.png + farming_carrot_4.png + farming_carrot_5.png + farming_carrot_6.png + farming_carrot_7.png + farming_carrot_8.png + +Created by JoseTheCrafter and edited by TenPlus1: + farming_tomato.png + farming_tomato_1.png + farming_tomato_2.png + farming_tomato_3.png + farming_tomato_4.png + farming_tomato_5.png + farming_tomato_6.png + farming_tomato_7.png + farming_tomato_8.png + +Created by GeMinecraft and edited by TenPlus1: + farming_corn.png + farming_corn_cob.png + farming_corn_1.png + farming_corn_2.png + farming_corn_3.png + farming_corn_4.png + farming_corn_5.png + farming_corn_6.png + farming_corn_7.png + farming_corn_8.png + +Created by TenPlus1 + farming_cocoa_1.png + farming_cocoa_2.png + farming_cocoa_3.png + farming_cocoa_beans.png + farming_cookie.png + farming_raspberry_smoothie.png + farming_rhubarb_1.png + farming_rhubarb_2.png + farming_rhubarb_3.png + farming_rhubarb.png + farming_rhubarb_pie.png \ No newline at end of file diff --git a/mods/farming/barley.lua b/mods/farming/barley.lua new file mode 100644 index 0000000..b7bf530 --- /dev/null +++ b/mods/farming/barley.lua @@ -0,0 +1,98 @@ + +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", +}) + +-- flour +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = {"farming:barley", "farming:barley", "farming:barley", "farming:barley"} +}) + +-- barley definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_barley_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: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/mods/farming/beanpole.lua b/mods/farming/beanpole.lua new file mode 100644 index 0000000..cef2767 --- /dev/null +++ b/mods/farming/beanpole.lua @@ -0,0 +1,196 @@ +--[[ + All textures by + (C) Auke Kok + CC-BY-SA-3.0 +]] + +local S = farming.intllib + +-- beans +minetest.register_craftitem("farming:beans", { + description = S("Green Beans"), + inventory_image = "farming_beans.png", + on_use = minetest.item_eat(1), + + on_place = function(itemstack, placer, pointed_thing) + + if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then + return + end + + local nodename = minetest.get_node(pointed_thing.under).name + + if nodename == "farming:beanpole" then + minetest.set_node(pointed_thing.under, {name = "farming:beanpole_1"}) + + minetest.sound_play("default_place_node", {pos = pointed_thing.above, gain = 1.0}) + else + return + end + + if not minetest.setting_getbool("creative_mode") 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 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.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) + + if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then + return + end + + local nodename = minetest.get_node(pointed_thing.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 minetest.setting_getbool("creative_mode") 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.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/mods/farming/blueberry.lua b/mods/farming/blueberry.lua new file mode 100644 index 0000000..82ce7ff --- /dev/null +++ b/mods/farming/blueberry.lua @@ -0,0 +1,67 @@ + +local S = farming.intllib + +-- blueberries +minetest.register_craftitem("farming:blueberries", { + description = S("Blueberries"), + inventory_image = "farming_blueberries.png", + 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 = { + {"farming:blueberries", "farming:bread", "farming:blueberries"}, + } +}) + +-- 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/mods/farming/carrot.lua b/mods/farming/carrot.lua new file mode 100644 index 0000000..9cfcee0 --- /dev/null +++ b/mods/farming/carrot.lua @@ -0,0 +1,95 @@ + +--[[ + 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", + 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", "farming: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/mods/farming/cocoa.lua b/mods/farming/cocoa.lua new file mode 100644 index 0000000..fad1733 --- /dev/null +++ b/mods/farming/cocoa.lua @@ -0,0 +1,189 @@ + +local S = farming.intllib + +-- place cocoa +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 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 + + -- 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 not minetest.setting_getbool("creative_mode") 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", + 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 = { + { "farming:wheat", "farming:cocoa_beans", "farming: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 = { + { "farming:cocoa_beans", "farming:cocoa_beans", "farming:cocoa_beans" }, + } +}) + +-- cocoa definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_cocoa_1.png"}, + paramtype = "light", + walkable = true, + 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() +} + +-- stage 1 +minetest.register_node("farming:cocoa_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_cocoa_2.png"} +crop_def.drop = { + items = { + {items = {'farming:cocoa_beans 1'}, rarity = 1}, + } +} +minetest.register_node("farming:cocoa_2", table.copy(crop_def)) + +-- stage 3 (final) +crop_def.tiles = {"farming_cocoa_3.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:cocoa_beans 2'}, rarity = 1}, + {items = {'farming:cocoa_beans 1'}, rarity = 2}, + } +} +minetest.register_node("farming:cocoa_3", 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, 3)) + }) + end + + end + end +end) diff --git a/mods/farming/coffee.lua b/mods/farming/coffee.lua new file mode 100644 index 0000000..f9632d2 --- /dev/null +++ b/mods/farming/coffee.lua @@ -0,0 +1,132 @@ + +local S = farming.intllib + +-- coffee +minetest.register_craftitem("farming:coffee_beans", { + description = S("Coffee Beans"), + inventory_image = "farming_coffee_beans.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:coffee_1") + end, +}) + + +-- drinking cup +minetest.register_node("farming:drinking_cup", { + description = S("Drinking Cup (empty)"), + drawtype = "plantlike", + tiles = {"vessels_drinking_cup.png"}, + inventory_image = "vessels_drinking_cup.png", + wield_image = "vessels_drinking_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}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "farming:drinking_cup 5", + recipe = { + { "default:glass", "", "default:glass" }, + {"", "default:glass",""}, + } +}) + +-- cold cup of coffee +minetest.register_node("farming:coffee_cup", { + description = S("Cold Cup of Coffee"), + drawtype = "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, "farming:drinking_cup"), + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "farming:coffee_cup", + recipe = { + {"farming:drinking_cup", "farming:coffee_beans","bucket:bucket_water"}, + }, + replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}} +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 5, + output = "farming:coffee_cup_hot", + recipe = "farming:coffee_cup" +}) + +-- hot cup of coffee +minetest.register_node("farming:coffee_cup_hot", { + description = S("Hot Cup of Coffee"), + drawtype = "plantlike", + tiles = {"farming_coffee_cup_hot.png"}, + inventory_image = "farming_coffee_cup_hot.png", + wield_image = "farming_coffee_cup_hot.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(3, "farming:drinking_cup"), + sounds = default.node_sound_glass_defaults(), +}) + +-- 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/mods/farming/compatibility.lua b/mods/farming/compatibility.lua new file mode 100644 index 0000000..8d24daf --- /dev/null +++ b/mods/farming/compatibility.lua @@ -0,0 +1,144 @@ +-- is Ethereal mod installed? +local eth = minetest.get_modpath("ethereal") or nil + +-- Banana +if eth then + minetest.register_alias("farming_plus:banana_sapling", "ethereal:banana_tree_sapling") + minetest.register_alias("farming_plus:banana_leaves", "ethereal:bananaleaves") + minetest.register_alias("farming_plus:banana", "ethereal:banana") +else + minetest.register_node(":ethereal:banana", { + description = "Banana", + drawtype = "torchlike", + visual_scale = 1.0, + 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 = {fleshy = 3, dig_immediate = 3, flammable = 2}, + on_use = minetest.item_eat(2), + sounds = default.node_sound_leaves_defaults(), + }) + + minetest.register_alias("farming_plus:banana_sapling", "default:sapling") + minetest.register_alias("farming_plus:banana_leaves", "default:leaves") + minetest.register_alias("farming_plus:banana", "ethereal:banana") +end + +-- Carrot +minetest.register_alias("farming_plus:carrot_seed", "farming:carrot") +minetest.register_alias("farming_plus:carrot_1", "farming:carrot_1") +minetest.register_alias("farming_plus:carrot_2", "farming:carrot_4") +minetest.register_alias("farming_plus:carrot_3", "farming:carrot_6") +minetest.register_alias("farming_plus:carrot", "farming:carrot_8") +minetest.register_alias("farming_plus:carrot_item", "farming:carrot") + +-- Cocoa +minetest.register_alias("farming_plus:cocoa_sapling", "farming:cocoa_2") +minetest.register_alias("farming_plus:cocoa_leaves", "default:leaves") +minetest.register_alias("farming_plus:cocoa", "default:apple") +minetest.register_alias("farming_plus:cocoa_bean", "farming:cocoa_beans") + +-- Orange +minetest.register_alias("farming_plus:orange_1", "farming:tomato_1") +minetest.register_alias("farming_plus:orange_2", "farming:tomato_4") +minetest.register_alias("farming_plus:orange_3", "farming:tomato_6") +minetest.register_alias("farming_plus:orange", "farming:tomato_8") + +if eth then + minetest.register_alias("farming_plus:orange_item", "ethereal:orange") + minetest.register_alias("farming_plus:orange", "ethereal:orange") + minetest.register_alias("farming_plus:orange_seed", "ethereal:orange_tree_sapling") +else + minetest.register_node(":ethereal:orange", { + description = "Orange", + drawtype = "plantlike", + visual_scale = 1.0, + 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 = {fleshy = 3, dig_immediate = 3, flammable = 2}, + on_use = minetest.item_eat(4), + sounds = default.node_sound_leaves_defaults(), + }) + + minetest.register_alias("farming_plus:orange_item", "ethereal:orange") + minetest.register_alias("farming_plus:orange", "ethereal:orange") + minetest.register_alias("farming_plus:orange_seed", "default:sapling") +end + +-- Potato +minetest.register_alias("farming_plus:potato_item", "farming:potato") +minetest.register_alias("farming_plus:potato_1", "farming:potato_1") +minetest.register_alias("farming_plus:potato_2", "farming:potato_2") +minetest.register_alias("farming_plus:potato", "farming:potato_3") +minetest.register_alias("farming_plus:potato_seed", "farming:potato") + +-- Pumpkin +minetest.register_alias("farming:pumpkin_seed", "farming:pumpkin_slice") +minetest.register_alias("farming:pumpkin_face", "farming:jackolantern") +minetest.register_alias("farming:pumpkin_face_light", "farming:jackolantern_on") +minetest.register_alias("farming:big_pumpkin", "farming:pumpkin") +minetest.register_alias("farming:big_pumpkin_side", "air") +minetest.register_alias("farming:big_pumpkin_corner", "air") +minetest.register_alias("farming:big_pumpkin_top", "air") +minetest.register_alias("farming:scarecrow", "farming:jackolantern") +minetest.register_alias("farming:scarecrow_bottom", "default:fence_wood") +minetest.register_alias("farming:scarecrow_light", "farming:jackolantern_on") +minetest.register_alias("farming:pumpkin_flour", "farming:pumpkin_dough") + +-- Rhubarb +minetest.register_alias("farming_plus:rhubarb_seed", "farming:rhubarb") +minetest.register_alias("farming_plus:rhubarb_1", "farming:rhubarb_1") +minetest.register_alias("farming_plus:rhubarb_2", "farming:rhubarb_2") +minetest.register_alias("farming_plus:rhubarb", "farming:rhubarb_3") +minetest.register_alias("farming_plus:rhubarb_item", "farming:rhubarb") + +-- Strawberry +if eth then + minetest.register_alias("farming_plus:strawberry_item", "ethereal:strawberry") + minetest.register_alias("farming_plus:strawberry_seed", "ethereal:strawberry") + minetest.register_alias("farming_plus:strawberry_1", "ethereal:strawberry_1") + minetest.register_alias("farming_plus:strawberry_2", "ethereal:strawberry_3") + minetest.register_alias("farming_plus:strawberry_3", "ethereal:strawberry_5") + minetest.register_alias("farming_plus:strawberry", "ethereal:strawberry_7") +else + minetest.register_craftitem(":ethereal:strawberry", { + description = "Strawberry", + inventory_image = "strawberry.png", + wield_image = "strawberry.png", + on_use = minetest.item_eat(1), + }) + + minetest.register_alias("farming_plus:strawberry_item", "ethereal:strawberry") + minetest.register_alias("farming_plus:strawberry_seed", "ethereal:strawberry") + minetest.register_alias("farming_plus:strawberry_1", "farming:raspberry_1") + minetest.register_alias("farming_plus:strawberry_2", "farming:raspberry_2") + minetest.register_alias("farming_plus:strawberry_3", "farming:raspberry_3") + minetest.register_alias("farming_plus:strawberry", "farming:raspberry_4") + +end + +-- Tomato +minetest.register_alias("farming_plus:tomato_seed", "farming:tomato") +minetest.register_alias("farming_plus:tomato_item", "farming:tomato") +minetest.register_alias("farming_plus:tomato_1", "farming:tomato_2") +minetest.register_alias("farming_plus:tomato_2", "farming:tomato_4") +minetest.register_alias("farming_plus:tomato_3", "farming:tomato_6") +minetest.register_alias("farming_plus:tomato", "farming:tomato_8") + +-- Weed +minetest.register_alias("farming:weed", "default:grass_2") diff --git a/mods/farming/corn.lua b/mods/farming/corn.lua new file mode 100644 index 0000000..f178a48 --- /dev/null +++ b/mods/farming/corn.lua @@ -0,0 +1,116 @@ + +--[[ + 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", + 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", + on_use = minetest.item_eat(5), +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:corn_cob", + recipe = "farming:corn" +}) + +-- ethanol (thanks to JKMurray for this idea) +minetest.register_craftitem("farming:bottle_ethanol", { + description = S("Bottle of Ethanol"), + inventory_image = "farming_bottle_ethanol.png", +}) + +minetest.register_craft( { + output = "farming:bottle_ethanol", + recipe = { + { "vessels:glass_bottle", "farming:corn", "farming:corn"}, + { "farming:corn", "farming:corn", "farming:corn"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:bottle_ethanol", + burntime = 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.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/mods/farming/cotton.lua b/mods/farming/cotton.lua new file mode 100644 index 0000000..eef6425 --- /dev/null +++ b/mods/farming/cotton.lua @@ -0,0 +1,123 @@ + +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}, + 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", +}) + +minetest.register_alias("farming:string", "farming:cotton") + +-- cotton to wool +minetest.register_craft({ + output = "wool:white", + recipe = { + {"farming:string", "farming:string"}, + {"farming:string", "farming:string"}, + } +}) + +-- 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 = 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: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:string"}, rarity = 1}, + {items = {"farming:string"}, rarity = 2}, + {items = {"farming:string"}, 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", + steps = 8, +})]] diff --git a/mods/farming/cucumber.lua b/mods/farming/cucumber.lua new file mode 100644 index 0000000..8e29215 --- /dev/null +++ b/mods/farming/cucumber.lua @@ -0,0 +1,55 @@ + +--[[ + 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", + 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'}, rarity = 1}, + {items = {'farming:cucumber 2'}, rarity = 2}, + } +} +minetest.register_node("farming:cucumber_4", table.copy(crop_def)) diff --git a/mods/farming/depends.txt b/mods/farming/depends.txt new file mode 100644 index 0000000..8a8d2a2 --- /dev/null +++ b/mods/farming/depends.txt @@ -0,0 +1,3 @@ +default +intllib? +lucky_block? \ No newline at end of file diff --git a/mods/farming/description.txt b/mods/farming/description.txt new file mode 100644 index 0000000..58bdc81 --- /dev/null +++ b/mods/farming/description.txt @@ -0,0 +1 @@ +Adds many plants and food to Minetest \ No newline at end of file diff --git a/mods/farming/donut.lua b/mods/farming/donut.lua new file mode 100644 index 0000000..68aeb8e --- /dev/null +++ b/mods/farming/donut.lua @@ -0,0 +1,48 @@ + +local S = farming.intllib + +-- Donut (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 = { + {'', 'farming:wheat', ''}, + {'farming:wheat', '', 'farming:wheat'}, + {'', 'farming:wheat', ''}, + } +}) + +-- Chocolate Donut +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 = { + {'farming:cocoa_beans'}, + {'farming:donut'}, + } +}) + +-- Apple 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'}, + } +}) diff --git a/mods/farming/grapes.lua b/mods/farming/grapes.lua new file mode 100644 index 0000000..7a3bfc5 --- /dev/null +++ b/mods/farming/grapes.lua @@ -0,0 +1,203 @@ + +local S = farming.intllib + +-- grapes +minetest.register_craftitem("farming:grapes", { + description = S("Grapes"), + inventory_image = "farming_grapes.png", + on_use = minetest.item_eat(2), + + on_place = function(itemstack, placer, pointed_thing) + + if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then + return + end + + local nodename = minetest.get_node(pointed_thing.under).name + + if nodename == "farming:trellis" then + minetest.set_node(pointed_thing.under, {name = "farming:grapes_1"}) + + minetest.sound_play("default_place_node", {pos = pointed_thing.above, gain = 1.0}) + else + return + end + + if not minetest.setting_getbool("creative_mode") 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 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.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) + + if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then + return + end + + local nodename = minetest.get_node(pointed_thing.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 minetest.setting_getbool("creative_mode") 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.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/mods/farming/grass.lua b/mods/farming/grass.lua new file mode 100644 index 0000000..aacb220 --- /dev/null +++ b/mods/farming/grass.lua @@ -0,0 +1,42 @@ + +for i = 3, 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 = {'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/mods/farming/hoes.lua b/mods/farming/hoes.lua new file mode 100644 index 0000000..dab2ac9 --- /dev/null +++ b/mods/farming/hoes.lua @@ -0,0 +1,153 @@ + +local S = farming.intllib + +-- 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 = "Hoe" + end + + if def.inventory_image == nil then + def.inventory_image = "unknown_item.png" + end + + if def.recipe == nil then + def.recipe = { + {"air","air",""}, + {"","group:stick",""}, + {"","group:stick",""} + } + 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 + }) + + -- Register its recipe + if def.material == nil then + minetest.register_craft({ + output = name:sub(2), + recipe = def.recipe + }) + else + 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}) + + if not minetest.setting_getbool("creative_mode") then + itemstack:add_wear(65535/(uses-1)) + 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" +}) + +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 = 220, + material = "default:bronze_ingot" +}) + +farming.register_hoe(":farming:hoe_mese", { + description = S("Mese Hoe"), + inventory_image = "farming_tool_mesehoe.png", + max_uses = 350, + material = "default:mese_crystal" +}) + +farming.register_hoe(":farming:hoe_diamond", { + description = S("Diamond Hoe"), + inventory_image = "farming_tool_diamondhoe.png", + max_uses = 500, + material = "default:diamond" +}) diff --git a/mods/farming/init.lua b/mods/farming/init.lua new file mode 100644 index 0000000..b08112e --- /dev/null +++ b/mods/farming/init.lua @@ -0,0 +1,713 @@ +--[[ + Minetest Farming Redo Mod 1.23 (12th November 2016) + by TenPlus1 + NEW growing routine by prestidigitator + auto-refill by crabman77 +]] + +farming = {} +farming.mod = "redo" +farming.path = minetest.get_modpath("farming") +farming.hoe_on_use = default.hoe_on_use +farming.select = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} +} + +farming.DEBUG = false +-- farming.DEBUG = {} -- Uncomment to turn on profiling code/functions + +local DEBUG_abm_runs = 0 +local DEBUG_abm_time = 0 +local DEBUG_timer_runs = 0 +local DEBUG_timer_time = 0 + +if farming.DEBUG then + + function farming.DEBUG.reset_times() + DEBUG_abm_runs = 0 + DEBUG_abm_time = 0 + DEBUG_timer_runs = 0 + DEBUG_timer_time = 0 + end + + function farming.DEBUG.report_times() + + local abm_n = DEBUG_abm_runs + local abm_dt = DEBUG_abm_time + local abm_avg = (abm_n > 0 and abm_dt / abm_n) or 0 + local timer_n = DEBUG_timer_runs + local timer_dt = DEBUG_timer_time + local timer_avg = (timer_n > 0 and timer_dt / timer_n) or 0 + local dt = abm_dt + timer_dt + + print("ABM ran for "..abm_dt.."µs over "..abm_n.." runs: "..abm_avg.."µs/run") + print("Timer ran for "..timer_dt.."µs over "..timer_n.." runs: "..timer_avg.."µs/run") + print("Total farming time: "..dt.."µs") + end +end + +local statistics = dofile(farming.path.."/statistics.lua") + +-- Intllib + +local S +if minetest.get_modpath("intllib") then + S = intllib.Getter() +else + S = function(s) return s end +end +farming.intllib = S + +-- Utility Functions + +local time_speed = tonumber(minetest.setting_get("time_speed")) or 72 +local SECS_PER_CYCLE = (time_speed > 0 and 24 * 60 * 60 / time_speed) or 0 + +local function clamp(x, min, max) + return (x < min and min) or (x > max and max) or x +end + +local function in_range(x, min, max) + return min <= x and x <= max +end + +--- Tests the amount of day or night time between two times. + -- + -- @param t_game + -- The current time, as reported by mintest.get_gametime(). + -- @param t_day + -- The current time, as reported by mintest.get_timeofday(). + -- @param dt + -- The amount of elapsed time. + -- @param count_day + -- If true, count elapsed day time. Otherwise, count elapsed night time. + -- @return + -- The amount of day or night time that has elapsed. + +local function day_or_night_time(t_game, t_day, dt, count_day) + + local t1_day = t_day - dt / SECS_PER_CYCLE + local t1_c, t2_c -- t1_c < t2_c and t2_c always in [0, 1) + + if count_day then + + if t_day < 0.25 then + t1_c = t1_day + 0.75 -- Relative to sunup, yesterday + t2_c = t_day + 0.75 + else + t1_c = t1_day - 0.25 -- Relative to sunup, today + t2_c = t_day - 0.25 + end + else + if t_day < 0.75 then + t1_c = t1_day + 0.25 -- Relative to sundown, yesterday + t2_c = t_day + 0.25 + else + t1_c = t1_day - 0.75 -- Relative to sundown, today + t2_c = t_day - 0.75 + end + end + + local dt_c = clamp(t2_c, 0, 0.5) - clamp(t1_c, 0, 0.5) -- this cycle + + if t1_c < -0.5 then + local nc = math.floor(-t1_c) + t1_c = t1_c + nc + dt_c = dt_c + 0.5 * nc + clamp(-t1_c - 0.5, 0, 0.5) + end + + return dt_c * SECS_PER_CYCLE +end + +--- Tests the amount of elapsed day time. + -- + -- @param dt + -- The amount of elapsed time. + -- @return + -- The amount of day time that has elapsed. + -- +local function day_time(dt) + return day_or_night_time(minetest.get_gametime(), minetest.get_timeofday(), dt, true) +end + +--- Tests the amount of elapsed night time. + -- + -- @param dt + -- The amount of elapsed time. + -- @return + -- The amount of night time that has elapsed. + -- +local function night_time(time_game, time_day, dt, count_day) + return day_or_night_time(minetest.get_gametime(), minetest.get_timeofday(), dt, false) +end + + +-- Growth Logic + +local STAGE_LENGTH_AVG = 160.0 +local STAGE_LENGTH_DEV = STAGE_LENGTH_AVG / 6 +local MIN_LIGHT = 13 +local MAX_LIGHT = 1000 + +--- Determines plant name and stage from node. + -- + -- Separates node name on the last underscore (_). + -- + -- @param node + -- Node or position table, or node name. + -- @return + -- List (plant_name, stage), or nothing (nil) if node isn't loaded + +local function plant_name_stage(node) + + local name + + if type(node) == 'table' then + + if node.name then + name = node.name + elseif node.x and node.y and node.z then + node = minetest.get_node_or_nil(node) + name = node and node.name + end + else + name = tostring(node) + end + + if not name or name == "ignore" then + return nil + end + + local sep_pos = name:find("_[^_]+$") + + if sep_pos and sep_pos > 1 then + + local stage = tonumber(name:sub(sep_pos + 1)) + + if stage and stage >= 0 then + return name:sub(1, sep_pos - 1), stage + end + end + + return name, 0 +end + +-- Map from node name to +-- { plant_name = ..., name = ..., stage = n, stages_left = { node_name, ... } } + +local plant_stages = {} + +farming.plant_stages = plant_stages + +--- Registers the stages of growth of a (possible plant) node. + -- + -- @param node + -- Node or position table, or node name. + -- @return + -- The (possibly zero) number of stages of growth the plant will go through + -- before being fully grown, or nil if not a plant. + +local register_plant_node + +-- Recursive helper +local function reg_plant_stages(plant_name, stage, force_last) + + local node_name = plant_name and plant_name .. "_" .. stage + local node_def = node_name and minetest.registered_nodes[node_name] + + if not node_def then + return nil + end + + local stages = plant_stages[node_name] + + if stages then + return stages + end + + if minetest.get_item_group(node_name, "growing") > 0 then + + local ns = reg_plant_stages(plant_name, stage + 1, true) + local stages_left = (ns and { ns.name, unpack(ns.stages_left) }) or {} + + stages = { + plant_name = plant_name, + name = node_name, + stage = stage, + stages_left = stages_left + } + + if #stages_left > 0 then + + local old_constr = node_def.on_construct + local old_destr = node_def.on_destruct + + minetest.override_item(node_name, + { + on_construct = function(pos) + + if old_constr then + old_constr(pos) + end + + farming.handle_growth(pos) + end, + + on_destruct = function(pos) + + minetest.get_node_timer(pos):stop() + + if old_destr then + old_destr(pos) + end + end, + + on_timer = function(pos, elapsed) + return farming.plant_growth_timer(pos, elapsed, node_name) + end, + }) + end + + elseif force_last then + + stages = { + plant_name = plant_name, + name = node_name, + stage = stage, + stages_left = {} + } + else + return nil + end + + plant_stages[node_name] = stages + + return stages +end + +register_plant_node = function(node) + + local plant_name, stage = plant_name_stage(node) + + if plant_name then + + local stages = reg_plant_stages(plant_name, stage, false) + return stages and #stages.stages_left + else + return nil + end +end + +local function set_growing(pos, stages_left) + + if not stages_left then + return + end + + local timer = minetest.get_node_timer(pos) + + if stages_left > 0 then + + if not timer:is_started() then + + local stage_length = statistics.normal(STAGE_LENGTH_AVG, STAGE_LENGTH_DEV) + + stage_length = clamp(stage_length, 0.5 * STAGE_LENGTH_AVG, 3.0 * STAGE_LENGTH_AVG) + + timer:set(stage_length, -0.5 * math.random() * STAGE_LENGTH_AVG) + end + + elseif timer:is_started() then + timer:stop() + end +end + +-- Detects a plant type node at the given position, starting +-- or stopping the plant growth timer as appopriate + +-- @param pos +-- The node's position. +-- @param node +-- The cached node table if available, or nil. + +function farming.handle_growth(pos, node) + + if not pos then + return + end + + local stages_left = register_plant_node(node or pos) + + if stages_left then + set_growing(pos, stages_left) + end +end + +minetest.after(0, function() + + for _, node_def in pairs(minetest.registered_nodes) do + register_plant_node(node_def) + end +end) + +local abm_func = farming.handle_growth + +if farming.DEBUG then + + local normal_abm_func = abm_func + + abm_func = function(...) + + local t0 = minetest.get_us_time() + local r = { normal_abm_func(...) } + local t1 = minetest.get_us_time() + + DEBUG_abm_runs = DEBUG_abm_runs + 1 + DEBUG_abm_time = DEBUG_abm_time + (t1 - t0) + + return unpack(r) + end +end + +-- Just in case a growing type or added node is missed (also catches existing +-- nodes added to map before timers were incorporated). + +minetest.register_abm({ + nodenames = { "group:growing" }, + interval = 300, + chance = 1, + action = abm_func +}) + +-- Plant timer function. +-- Grows plants under the right conditions. + +function farming.plant_growth_timer(pos, elapsed, node_name) + + local stages = plant_stages[node_name] + + if not stages then + return false + end + + local max_growth = #stages.stages_left + + if max_growth <= 0 then + return false + end + + if stages.plant_name == "farming:cocoa" then + + if not minetest.find_node_near(pos, 1, + {"default:jungletree", "moretrees:jungletree_leaves_green"}) then + + return true + end + else + local under = minetest.get_node({ x = pos.x, y = pos.y - 1, z = pos.z }) + + if minetest.get_item_group(under.name, "soil") < 3 then + return true + end + end + + local growth + local light_pos = {x = pos.x, y = pos.y + 1, z = pos.z} + local lambda = elapsed / STAGE_LENGTH_AVG + + if lambda < 0.1 then + return true + end + + if max_growth == 1 or lambda < 2.0 then + + local light = (minetest.get_node_light(light_pos) or 0) + --print ("light level:", light) + + if not in_range(light, MIN_LIGHT, MAX_LIGHT) then + return true + end + + growth = 1 + else + local night_light = (minetest.get_node_light(light_pos, 0) or 0) + local day_light = (minetest.get_node_light(light_pos, 0.5) or 0) + local night_growth = in_range(night_light, MIN_LIGHT, MAX_LIGHT) + local day_growth = in_range(day_light, MIN_LIGHT, MAX_LIGHT) + + if not night_growth then + + if not day_growth then + return true + end + + lambda = day_time(elapsed) / STAGE_LENGTH_AVG + + elseif not day_growth then + + lambda = night_time(elapsed) / STAGE_LENGTH_AVG + end + + growth = statistics.poisson(lambda, max_growth) + + if growth < 1 then + return true + end + end + + if minetest.registered_nodes[stages.stages_left[growth]] then + minetest.swap_node(pos, {name = stages.stages_left[growth]}) + else + return true + end + + return growth ~= max_growth +end + +if farming.DEBUG then + + local timer_func = farming.plant_growth_timer; + + farming.plant_growth_timer = function(pos, elapsed, node_name) + + local t0 = minetest.get_us_time() + local r = { timer_func(pos, elapsed, node_name) } + local t1 = minetest.get_us_time() + + DEBUG_timer_runs = DEBUG_timer_runs + 1 + DEBUG_timer_time = DEBUG_timer_time + (t1 - t0) + + return unpack(r) + end +end + +-- refill placed plant by crabman (26/08/2015) +local can_refill_plant = { + ["farming:blueberry_1"] = "farming:blueberries", + ["farming:carrot_1"] = "farming:carrot", + ["farming:coffee_1"] = "farming:coffee_beans", + ["farming:corn_1"] = "farming:corn", + ["farming:cotton_1"] = "farming:seed_cotton", + ["farming:cucumber_1"] = "farming:cucumber", + ["farming:melon_1"] = "farming:melon_slice", + ["farming:potato_1"] = "farming:potato", + ["farming:pumpkin_1"] = "farming:pumpkin_slice", + ["farming:raspberry_1"] = "farming:raspberries", + ["farming:rhubarb_1"] = "farming:rhubarb", + ["farming:tomato_1"] = "farming:tomato", + ["farming:wheat_1"] = "farming:seed_wheat", + ["farming:grapes_1"] = "farming:grapes", + ["farming:beans_1"] = "farming:beans", + ["farming:rhubarb_1"] = "farming:rhubarb", + ["farming:cocoa_1"] = "farming:cocoa_beans", + ["farming:barley_1"] = "farming:seed_barley", +} + +function farming.refill_plant(player, plantname, index) + + local inv = player:get_inventory() + local old_stack = inv:get_stack("main", index) + + if old_stack:get_name() ~= "" then + return + end + + for i, stack in pairs(inv:get_list("main")) do + + if stack:get_name() == plantname and i ~= index then + + inv:set_stack("main", index, stack) + stack:clear() + inv:set_stack("main", i, stack) + --minetest.log("action", "farming: refilled stack("..plantname..") of " .. player:get_player_name() ) + return + end + end +end + +-- Place Seeds on Soil + +function farming.place_seed(itemstack, placer, pointed_thing, plantname) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + local above = minetest.get_node(pt.above) + + -- check if pointing at the top of the node + if pt.above.y ~= pt.under.y + 1 then + return + end + + -- 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 + + -- can I replace above node, and am I pointing at soil + if not minetest.registered_nodes[above.name].buildable_to + or minetest.get_item_group(under.name, "soil") < 2 + -- avoid multiple seed placement bug + or minetest.get_item_group(above.name, "plant") ~= 0 then + return + end + + -- if not protected then add node and remove 1 item from the itemstack + if not minetest.is_protected(pt.above, placer:get_player_name()) then + + minetest.set_node(pt.above, {name = plantname, param2 = 1}) + + minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}) + + if not minetest.setting_getbool("creative_mode") then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 + and can_refill_plant[plantname] then + + minetest.after(0.10, + farming.refill_plant, + placer, + can_refill_plant[plantname], + placer:get_wield_index() + ) + end + end + + return itemstack + end +end + +-- Function to register plants (for compatibility) + +farming.register_plant = function(name, def) + + local mname = name:split(":")[1] + local pname = name:split(":")[2] + + -- Check def table + if not def.description then + def.description = S("Seed") + end + + if not def.inventory_image then + def.inventory_image = "unknown_item.png" + end + + if not def.steps then + return nil + end + + -- Register seed + minetest.register_node(":" .. mname .. ":seed_" .. pname, { + + description = def.description, + tiles = {def.inventory_image}, + inventory_image = def.inventory_image, + wield_image = def.inventory_image, + 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, mname .. ":" .. pname .. "_1") + end, + }) + + -- Register harvest + minetest.register_craftitem(":" .. mname .. ":" .. pname, { + description = pname:gsub("^%l", string.upper), + inventory_image = mname .. "_" .. pname .. ".png", + }) + + -- Register growing steps + for i = 1, def.steps do + + local drop = { + items = { + {items = {mname .. ":" .. pname}, rarity = 9 - i}, + {items = {mname .. ":" .. pname}, rarity= 18 - i * 2}, + {items = {mname .. ":seed_" .. pname}, rarity = 9 - i}, + {items = {mname .. ":seed_" .. pname}, rarity = 18 - i * 2}, + } + } + + local g = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1, growing = 1} + + -- Last step doesn't need growing=1 so Abm never has to check these + if i == def.steps then + g.growing = 0 + end + + local node_name = mname .. ":" .. pname .. "_" .. i + + minetest.register_node(node_name, { + drawtype = "plantlike", + waving = 1, + tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, + paramtype = "light", + walkable = false, + buildable_to = true, + drop = drop, + selection_box = farming.select, + groups = g, + sounds = default.node_sound_leaves_defaults(), + }) + +-- register_plant_node(node_name) + end + + -- Return info + local r = {seed = mname .. ":seed_" .. pname, harvest = mname .. ":" .. pname} + return r +end + +-- load crops + +dofile(farming.path.."/soil.lua") +dofile(farming.path.."/hoes.lua") +dofile(farming.path.."/grass.lua") +dofile(farming.path.."/wheat.lua") +dofile(farming.path.."/cotton.lua") +dofile(farming.path.."/carrot.lua") +dofile(farming.path.."/potato.lua") +dofile(farming.path.."/tomato.lua") +dofile(farming.path.."/cucumber.lua") +dofile(farming.path.."/corn.lua") +dofile(farming.path.."/coffee.lua") +dofile(farming.path.."/melon.lua") +dofile(farming.path.."/sugar.lua") +dofile(farming.path.."/pumpkin.lua") +dofile(farming.path.."/cocoa.lua") +dofile(farming.path.."/raspberry.lua") +dofile(farming.path.."/blueberry.lua") +dofile(farming.path.."/rhubarb.lua") +dofile(farming.path.."/beanpole.lua") +dofile(farming.path.."/grapes.lua") +dofile(farming.path.."/barley.lua") +dofile(farming.path.."/donut.lua") +dofile(farming.path.."/mapgen.lua") +dofile(farming.path.."/compatibility.lua") -- Farming Plus compatibility +dofile(farming.path.."/lucky_block.lua") diff --git a/mods/farming/init.lua_orig b/mods/farming/init.lua_orig new file mode 100644 index 0000000..aee9976 --- /dev/null +++ b/mods/farming/init.lua_orig @@ -0,0 +1,192 @@ +--[[ + Minetest Farming Redo Mod 1.14 (11th May 2015) + by TenPlus1 +]] + +farming = {} +farming.mod = "redo" +farming.path = minetest.get_modpath("farming") +farming.hoe_on_use = default.hoe_on_use + +dofile(farming.path.."/soil.lua") +dofile(farming.path.."/hoes.lua") +dofile(farming.path.."/grass.lua") +dofile(farming.path.."/wheat.lua") +dofile(farming.path.."/cotton.lua") +dofile(farming.path.."/carrot.lua") +dofile(farming.path.."/potato.lua") +dofile(farming.path.."/tomato.lua") +dofile(farming.path.."/cucumber.lua") +dofile(farming.path.."/corn.lua") +dofile(farming.path.."/coffee.lua") +dofile(farming.path.."/melon.lua") +dofile(farming.path.."/sugar.lua") +dofile(farming.path.."/pumpkin.lua") +dofile(farming.path.."/cocoa.lua") +dofile(farming.path.."/raspberry.lua") +dofile(farming.path.."/blueberry.lua") +dofile(farming.path.."/rhubarb.lua") +dofile(farming.path.."/beanpole.lua") +dofile(farming.path.."/donut.lua") +dofile(farming.path.."/mapgen.lua") +dofile(farming.path.."/compatibility.lua") -- Farming Plus compatibility + +-- Place Seeds on Soil + +function farming.place_seed(itemstack, placer, pointed_thing, plantname) + local pt = pointed_thing + + -- check if pointing at a node + if not pt and pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + local above = minetest.get_node(pt.above) + + -- check if pointing at the top of the node + if pt.above.y ~= pt.under.y+1 then + return + end + + -- 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 + + -- can I replace above node, and am I pointing at soil + if not minetest.registered_nodes[above.name].buildable_to + or minetest.get_item_group(under.name, "soil") < 2 + or minetest.get_item_group(above.name, "plant") ~= 0 then -- ADDED this line for multiple seed placement bug + return + end + + -- add the node and remove 1 item from the itemstack + if not minetest.is_protected(pt.above, placer:get_player_name()) then + minetest.add_node(pt.above, {name=plantname}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end +end + +-- Single ABM Handles Growing of All Plants + +minetest.register_abm({ + nodenames = {"group:growing"}, + neighbors = {"farming:soil_wet", "default:jungletree"}, + interval = 80, + chance = 2, + + action = function(pos, node) + + -- split plant name (e.g. farming:wheat_1) + local plant = node.name:split("_")[1].."_" + local numb = node.name:split("_")[2] + + -- fully grown ? + if not minetest.registered_nodes[plant..(numb + 1)] then return end + + -- cocoa pod on jungle tree ? + if plant ~= "farming:cocoa_" then + + -- growing on wet soil ? + if minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name ~= "farming:soil_wet" then return end + end + + -- enough light ? + if minetest.get_node_light(pos) < 13 then return end + + -- grow + minetest.set_node(pos, {name=plant..(numb + 1)}) + + end +}) + +-- Function to register plants (for compatibility) + +farming.register_plant = function(name, def) + local mname = name:split(":")[1] + local pname = name:split(":")[2] + + -- Check def table + if not def.description then + def.description = "Seed" + end + if not def.inventory_image then + def.inventory_image = "unknown_item.png" + end + if not def.steps then + return nil + end + + -- Register seed + minetest.register_node(":" .. mname .. ":seed_" .. pname, { + description = def.description, + tiles = {def.inventory_image}, + inventory_image = def.inventory_image, + wield_image = def.inventory_image, + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":"..pname.."_1") + end + }) + + -- Register harvest + minetest.register_craftitem(":" .. mname .. ":" .. pname, { + description = pname:gsub("^%l", string.upper), + inventory_image = mname .. "_" .. pname .. ".png", + }) + + -- Register growing steps + for i=1,def.steps do + local drop = { + items = { + {items = {mname .. ":" .. pname}, rarity = 9 - i}, + {items = {mname .. ":" .. pname}, rarity= 18 - i * 2}, + {items = {mname .. ":seed_" .. pname}, rarity = 9 - i}, + {items = {mname .. ":seed_" .. pname}, rarity = 18 - i * 2}, + } + } + + local g = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1, growing = 1} + -- Last step doesn't need growing=1 so Abm never has to check these + if i == def.steps then + g = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1} + end + + minetest.register_node(mname .. ":" .. pname .. "_" .. i, { + drawtype = "plantlike", + waving = 1, + tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, + paramtype = "light", + walkable = false, + buildable_to = true, + is_ground_content = true, + drop = drop, + selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, + groups = g, + sounds = default.node_sound_leaves_defaults(), + }) + end + + -- Return info + local r = {seed = mname .. ":seed_" .. pname, harvest = mname .. ":" .. pname} + return r +end + +--[[ Cotton (example, is already registered in cotton.lua) +farming.register_plant("farming:cotton", { + description = "Cotton seed", + inventory_image = "farming_cotton_seed.png", + steps = 8, +}) +--]] diff --git a/mods/farming/license.txt b/mods/farming/license.txt new file mode 100644 index 0000000..fec6f6a --- /dev/null +++ b/mods/farming/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 TenPlus1 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/mods/farming/locale/de.txt b/mods/farming/locale/de.txt new file mode 100644 index 0000000..82cee4f --- /dev/null +++ b/mods/farming/locale/de.txt @@ -0,0 +1,104 @@ +# German Translation for farming mod +# Deutsche Ãœbersetzung der farming Mod +# last update: 2016/March/31 +# Author: Xanthin + +#init.lua +Seed = Saatgut + +#barley.lua +Barley Seed = Gerstenkörner +Barley = Gerste + +#beanpole.lua +Green Beans = Grüne Bohnen +Bean Pole (place on soil before planting beans) = Bohnenstange (vor dem Pflanzen der Bohnen auf den\nAckerboden stellen) + +#blueberry.lua +Blueberries = Blaubeeren +Blueberry Muffin = Blaubeermuffin + +#carrot.lua +Carrot = Möhre +Golden Carrot = Goldene Möhre + +#cocoa.lua +Cocoa Beans = Kakaobohne +Cookie = Keks +Bar of Dark Chocolate = Tafel Zartbitterschokolade + +#coffee.lua +Coffee Beans = Kaffeebohnen +Drinking Cup (empty) = Tasse (leer) +Cold Cup of Coffee = Kalte Tasse Kaffee +Hot Cup of Coffee = Heiße Tasse Kaffee + +#corn.lua +Corn = Mais +Corn on the Cob = Maiskolben +Bottle of Ethanol = Flasche Ethanol + +#cotton.lua +Cotton Seed = Baumwollsamen +Cotton = Baumwolle + +#cucumber.lua +Cucumber = Gurke + +#donut.lua +Donut = Donut +Chocolate Donut = Schokodonut +Apple Donut = Apfeldonut + +#grapes.lua +Grapes = Weintrauben +Trellis (place on soil before planting grapes) = Spalier (vor dem Pflanzen der Weintrauben auf den\nAckerboden stellen) + +#hoes.lua +Hoe = Hacke +Wooden Hoe = Holzhacke +Stone Hoe = Steinhacke +Steel Hoe = Stahlhacke +Bronze Hoe = Bronzehacke +Mese Hoe = Mesehacke +Diamond Hoe = Diamanthacke + +#melon.lua +Melon Slice = Melonenscheibe +Melon = Melone + +#potato.lua +Potato = Kartoffel +Baked Potato = Ofenkartoffel + +#pumpkin.lua +Pumpkin = Kürbis +Pumpkin Slice = Kürbisscheibe +Jack 'O Lantern = Kürbislaterne +Pumpkin Bread = Kürbisbrot +Pumpkin Dough = Kürbisteig + +#rasperry.lua +Raspberries = Himbeeren +Raspberry Smoothie = Himbeersmoothie + +#rhubarb.lua +Rhubarb = Rhabarber +Rhubarb Pie = Rhabarberkuchen + +#soil.lua +Soil = Ackerboden +Wet Soil = Bewässerter Ackerboden + +#sugar.lua +Sugar = Zucker + +#tomato.lua +Tomato = Tomate + +#wheat.lua +Wheat Seed = Weizenkörner +Wheat = Weizen +Straw = Stroh +Flour = Mehl +Bread = Brot \ No newline at end of file diff --git a/mods/farming/locale/template.txt b/mods/farming/locale/template.txt new file mode 100644 index 0000000..6d067f5 --- /dev/null +++ b/mods/farming/locale/template.txt @@ -0,0 +1,102 @@ +# Template for translations of farming mod +# last update: 2016/March/31 + +#init.lua +Seed = + +#barley.lua +Barley Seed = +Barley = + +#beanpole.lua +Green Beans = +Bean Pole (place on soil before planting beans) = + +#blueberry.lua +Blueberries = +Blueberry Muffin = + +#carrot.lua +Carrot = +Golden Carrot = + +#cocoa.lua +Cocoa Beans = +Cookie = +Bar of Dark Chocolate = + +#coffee.lua +Coffee Beans = +Drinking Cup (empty) = +Cold Cup of Coffee = +Hot Cup of Coffee = + +#corn.lua +Corn = +Corn on the Cob = +Bottle of Ethanol = + +#cotton.lua +Cotton Seed = +Cotton = + +#cucumber.lua +Cucumber = + +#donut.lua +Donut = +Chocolate Donut = +Apple Donut = + +#grapes.lua +Grapes = +Trellis (place on soil before planting grapes) = + +#hoes.lua +Hoe = +Wooden Hoe = +Stone Hoe = +Steel Hoe = +Bronze Hoe = +Mese Hoe = +Diamond Hoe = + +#melon.lua +Melon Slice = +Melon = + +#potato.lua +Potato = +Baked Potato = + +#pumpkin.lua +Pumpkin = +Pumpkin Slice = +Jack 'O Lantern = +Pumpkin Bread = +Pumpkin Dough = + +#rasperry.lua +Raspberries = +Raspberry Smoothie = + +#rhubarb.lua +Rhubarb = +Rhubarb Pie = + +#soil.lua +Soil = +Wet Soil = + +#sugar.lua +Sugar = + +#tomato.lua +Tomato = + +#wheat.lua +Wheat Seed = +Wheat = +Straw = +Flour = +Bread = \ No newline at end of file diff --git a/mods/farming/lucky_block.lua b/mods/farming/lucky_block.lua new file mode 100644 index 0000000..df5c54f --- /dev/null +++ b/mods/farming/lucky_block.lua @@ -0,0 +1,18 @@ + +-- 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}, + {"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}, + }) +end diff --git a/mods/farming/mapgen.lua b/mods/farming/mapgen.lua new file mode 100644 index 0000000..36d4792 --- /dev/null +++ b/mods/farming/mapgen.lua @@ -0,0 +1,65 @@ +-- decoration function +local function register_plant(name, min, max, spawnby, num) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 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 + +function farming.register_mgv6_decorations() + register_plant("potato_3", 15, 40, "", -1) + register_plant("tomato_7", 5, 20, "", -1) + register_plant("carrot_8", 1, 30, "group:water", 1) + register_plant("cucumber_4", 1, 20, "group:water", 1) + register_plant("corn_7", 12, 22, "", -1) + register_plant("corn_8", 10, 20, "", -1) + register_plant("coffee_5", 20, 45, "", -1) + register_plant("melon_8", 1, 20, "group:water", 1) + register_plant("pumpkin_8", 1, 20, "group:water", 1) + register_plant("raspberry_4", 3, 10, "", -1) + register_plant("rhubarb_3", 3, 15, "", -1) + register_plant("blueberry_4", 3, 10, "", -1) + register_plant("beanbush", 18, 35, "", -1) + register_plant("grapebush", 25, 45, "", -1) +end + +-- v7 maps have a beach so plants growing near water is limited to 6 high +function farming.register_mgv7_decorations() + register_plant("potato_3", 15, 40, "", -1) + register_plant("tomato_7", 5, 20, "", -1) + register_plant("carrot_8", 1, 6, "", -1) + register_plant("cucumber_4", 1, 6, "", -1) + register_plant("corn_7", 12, 22, "", -1) + register_plant("corn_8", 10, 20, "", -1) + register_plant("coffee_5", 20, 45, "", -1) + register_plant("melon_8", 1, 6, "", -1) + register_plant("pumpkin_8", 1, 6, "", -1) + register_plant("raspberry_4", 3, 10, "", -1) + register_plant("rhubarb_3", 3, 15, "", -1) + register_plant("blueberry_4", 3, 10, "", -1) + register_plant("beanbush", 18, 35, "", -1) + register_plant("grapebush", 25, 45, "", -1) +end + +-- detect mapgen +local mg_name = minetest.get_mapgen_params().mgname + +if mg_name == "v6" then + farming.register_mgv6_decorations() +else + farming.register_mgv7_decorations() +end diff --git a/mods/farming/melon.lua b/mods/farming/melon.lua new file mode 100644 index 0000000..e2f6564 --- /dev/null +++ b/mods/farming/melon.lua @@ -0,0 +1,82 @@ + +local S = farming.intllib + +-- melon +minetest.register_craftitem("farming:melon_slice", { + description = S("Melon Slice"), + inventory_image = "farming_melon_slice.png", + 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", "farming:melon_slice", "farming:melon_slice"}, + {"farming:melon_slice", "farming:melon_slice", "farming:melon_slice"}, + } +}) + +minetest.register_craft({ + output = "farming:melon_slice 9", + recipe = { + {"", "farming:melon_8", ""}, + } +}) + +-- 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 = {snappy = 1, oddly_breakable_by_hand = 1, flammable = 2, plant = 1} +crop_def.drop = "farming:melon_slice 9" +minetest.register_node("farming:melon_8", table.copy(crop_def)) diff --git a/mods/farming/mod.conf b/mods/farming/mod.conf new file mode 100644 index 0000000..80ab8b0 --- /dev/null +++ b/mods/farming/mod.conf @@ -0,0 +1 @@ +name = farming \ No newline at end of file diff --git a/mods/farming/potato.lua b/mods/farming/potato.lua new file mode 100644 index 0000000..be36905 --- /dev/null +++ b/mods/farming/potato.lua @@ -0,0 +1,77 @@ + +--[[ + 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", + 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 = "farming:potato" +}) + +-- 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/mods/farming/pumpkin.lua b/mods/farming/pumpkin.lua new file mode 100644 index 0000000..4be0bf4 --- /dev/null +++ b/mods/farming/pumpkin.lua @@ -0,0 +1,184 @@ + +--[[ + Big thanks to PainterlyPack.net for allowing me to use these textures +]] + +local S = farming.intllib + +-- pumpkin +minetest.register_node("farming:pumpkin", { + description = S("Pumpkin"), + tiles = { + "farming_pumpkin_top.png", + "farming_pumpkin_top.png", + "farming_pumpkin_side.png" + }, + groups = { + 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(), +}) + +-- pumpkin slice +minetest.register_craftitem("farming:pumpkin_slice", { + description = S("Pumpkin Slice"), + inventory_image = "farming_pumpkin_slice.png", + 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", "farming:pumpkin_slice", "farming:pumpkin_slice"}, + {"farming:pumpkin_slice", "farming:pumpkin_slice", "farming:pumpkin_slice"}, + } +}) + +minetest.register_craft({ + output = "farming:pumpkin_slice 9", + recipe = { + {"", "farming:pumpkin", ""}, + } +}) + +-- jack 'o lantern +minetest.register_node("farming:jackolantern", { + description = S("Jack 'O Lantern"), + 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", ""}, + {"", "farming:pumpkin", ""}, + } +}) + +-- pumpkin bread +minetest.register_craftitem("farming:pumpkin_bread", { + description = S("Pumpkin Bread"), + inventory_image = "farming_pumpkin_bread.png", + on_use = minetest.item_eat(8) +}) + +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 = {"farming:flour", "farming:pumpkin_slice", "farming: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)) diff --git a/mods/farming/raspberry.lua b/mods/farming/raspberry.lua new file mode 100644 index 0000000..384eb59 --- /dev/null +++ b/mods/farming/raspberry.lua @@ -0,0 +1,68 @@ + +local S = farming.intllib + +-- raspberries +minetest.register_craftitem("farming:raspberries", { + description = S("Raspberries"), + inventory_image = "farming_raspberries.png", + 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"}, + {"farming: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/mods/farming/rhubarb.lua b/mods/farming/rhubarb.lua new file mode 100644 index 0000000..30e9fba --- /dev/null +++ b/mods/farming/rhubarb.lua @@ -0,0 +1,64 @@ + +local S = farming.intllib + +-- rhubarb +minetest.register_craftitem("farming:rhubarb", { + description = S("Rhubarb"), + inventory_image = "farming_rhubarb.png", + 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:sugar", ""}, + {"farming:rhubarb", "farming:rhubarb", "farming:rhubarb"}, + {"farming:wheat", "farming:wheat", "farming:wheat"}, + } +}) + +-- 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/mods/farming/screenshot.png b/mods/farming/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..aba30f016aae3e97daa01c0793c2b8468a921880 GIT binary patch literal 42499 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νDV(0f4oRX)Eyy2k1#kox* zD59mAbUdP3l}P_d>7@sn%Lm#J{0axr;zb2)SvT)6ZXK}*DnCh%G@SBFzkYD(4eIC& z{0CzcAiM+YaAm((KuC-I4TcTT%fGKU*M~ER0kB}uxM595tVCY+DPjWjMQ$F*phajq7)aVenvEUF8val6nAQltVcTk+qV0XU0V=$D>nfKudeg5-1 z089p{2QCG=^*vmY4j^T4TD1HPtPh59rGYbQwSPWny?3ki}_oDz^#F$sIuDclk$z}W0R4>TrjsN%Y{{8!Ra45ve z%RXD4QdC;(P+>o8V_;dg*z6fD{iQ{EX}a_;wPJtp(0}X>!~2{2AiAZc8}ldx&3Mxt zrjLMS`wpq=5@hK4FzgQxf`uePiG{G;uPHXugUjz(=>ppccDo+7gXYrUlz6rfS*MH9 zh@K)3i^TE#+gYn^r7D6FOU24AzfbE{PZQZcJ&IH>84PHWR@6k4f>dy@EJB=fJt6fu z(yNhw#FVkXp{3||9JYjQceXV8M>;am>-8$|B?m7;6p>mSG_b&7iG zS;hNn!6d|ZhflsmSQg5+(9lWW9@E5FxgXL}oD?8I;BPM>Tt7XD6=GLv?!4;CwrV!+ zUI^DlTc{-wk?L3P=L|a|Na1M$t0VC9BOO#pI z5$aBJGLS%a=DA{IGw#w7sspiZLL*@`(88BL01)1c`-AcQ&Gg}pmb$&a0|>LnflDf} zZOjzt6xNun00@h6utD+p`dSWzJRQ{O`|D;1Zv1-@qK!(;)~Unic#6HE6I?F65R0ZK zB}%O#;aL`;m|hVQfVf69U>Jrdn>2 zIU)l%1=tk#JLV@O3s0vQoJz{>#*+XXij27UT3}U~L$d;rihkFSq>^~uXs+-CRTy=z zLwF_Vrc4$d4|juptRk$8?+~eWH+;;-_xJa>#_H(){?5mR$5A8R-$MVZ`!prL&(nH`-!X>icyg@^ExbRs>nEq$mx5HBxDw%(}1E1BqVVV zMd^a3sL>=t6u2sc0Rx*&hq!t=YfqyaK1oRp8v!*FkMjAJw#H-p(K7`FhQc_-S!e7h zTG}BDL3-lRjG-~R@)TjTl(K^neh}2Fy~JZCIs^kG^gV%Kpg;^z`Q;J(;NLY@#!RPo z0oh>qkhB~NgFyYen}<0g)M*P%7UdUC$>)eiSv*%5zCXVch8eXIib2Hg0t%3N zw*3r;?3#6A4-F0ygwcG$MogDj7)hbp5i0~438(z-u0Lp}hqMVZ?8o!@P+PBQ9Q6l? z)$QalCXZ0AZp℞1^eq+rXb`F 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 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/mods/farming/sugar.lua b/mods/farming/sugar.lua new file mode 100644 index 0000000..97efc67 --- /dev/null +++ b/mods/farming/sugar.lua @@ -0,0 +1,16 @@ + +local S = farming.intllib + +--= Sugar + +minetest.register_craftitem("farming:sugar", { + description = S("Sugar"), + inventory_image = "farming_sugar.png", +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 3, + output = "farming:sugar 2", + recipe = "default:papyrus", +}) \ No newline at end of file diff --git a/mods/farming/textures/banana_single.png b/mods/farming/textures/banana_single.png new file mode 100644 index 0000000000000000000000000000000000000000..b15ed2fa270a525be476f37959a93f66316bc7b3 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnY1=1EO-0r%3VdjG6d9v-b zitCnW@7tn(?TqPzs}^5g*j{97$OkH7ED7=pW^j0RBMrz2^>lFz;kcfhz`*Rr$Z=MI zC)GgGXo0bdj6%u5axJ_$%~>L6=H*77Wm~qa2^Dov^?9~>n*VtQ sBZ;Hh+SWmiS`p6HRtsi1J2$d0bRHL~pM1&O5oiH}r>mdKI;Vst01O2_SO5S3 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/default_junglegrass.png b/mods/farming/textures/default_junglegrass.png new file mode 100644 index 0000000000000000000000000000000000000000..5d8cdbca17d37713fb2941f135c402c29128f8ea GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5ptrmd2mhnkt2s-wTA zb*Q#usIF6-v0tK*Z-zx+u3>PgLt>F_WP@9FpL_G%!0l&N&o{o@1=P-1666=m;PC85 z8j#cI>Eak7aXGa&n(wdy2g~%l0|EAve$U?~@O*Jl&dCFB6qwf+?>+IW``s4%!&SGo z{)~Kl$7%n?HM3S;zrFpZ?s@L3UoI>WZeyMQ#@`ViQ4~+wv!Zf@O{5h#P zb9&;DjRMUrhP+vE%&oVaIJRUYGEOw`^=OGY5#hui`1A+kj#JE!W*jv<0CWt4r>mdK II;Vst0OFNmo#s5c-QvbhvnFBV6pi5vjf;1dI z?giEi!nbb4{=axJ{BQP$7!J}rD~$oW?Hg+$ z27qjX8C2uJ@PA4I!~X+4I5fflNC7Bh8+;i4cZD(hZwX-dU+>NEe`YGg)&)5X_@i!9 z9mD@^O%TP4^BMk6OM=iKgK9k)h>LfS29T3MPMw|%!6YZy?r?_x`PO7;Bo_bxNuTQ` TQlETq00000NkvXXu0mjfmmPeM`@`MFO=mmIV0)GdMiE zkp|=>db&7tSePLZmF-$ zXkB{w_sm^~RA+u?6=jw_w&a#zK gim|o1v@x(Tuxw?xnXsmG6;KU>r>mdKI;Vst0HOCHn*aa+ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_barley_2.png b/mods/farming/textures/farming_barley_2.png new file mode 100644 index 0000000000000000000000000000000000000000..96610c2f9f4e98fa44990ef6d947acffe15fc04c GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aH3Ty9nYpI%TF&BQ*eqX@bbU` tfkOw_QWy#qoST`LnRg30FKA|DW-#bt7Ex>w{sq*<;OXk;vd$@?2>^5&Ctd&m literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_barley_3.png b/mods/farming/textures/farming_barley_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ef14b5b321603ee5d643ab99f571187ab1f8985a GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs{@c>!@v~Ez?;R)P|IZ5 z#LGIFFSL%|x|@?>nP6f!ul;;MyH&hdi&=HHaWb6XV!6wZa$#mWP#0rKkY6x^!?PP{ zK#q^6i(`ny<+DA3d<_O1&fLLfZF%?pZ|U3U@|g3<;!54j#`?S8c&Es{)8`er{%on( z$*2F7clNJb#I;dn!&O7Ao>RwuZ!xkE_B$2h{*=wxlQG1&$~_EdE`z75pUXO@geCxA C(Lojf literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_barley_4.png b/mods/farming/textures/farming_barley_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f7c90544fff9159878eef2d06988e7ffad86f9b4 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs{;cAn*#$+AcJZ=19J|G zXcY%XFE7JlZCka&oc;91V{HGd>)EEBd(gaO?w+Ox z%Px0@)J-_>YT3=BCq&(DI=`Qo*X3T^dTNpIl*O*nm%?2wcl!w3W)tK+@c1m-%p+Va a1&j;+F=gf&UE2?|i^0>?&t;ucLK6V)PEErA literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_barley_5.png b/mods/farming/textures/farming_barley_5.png new file mode 100644 index 0000000000000000000000000000000000000000..68c0d683934b8b164bb092a1bbf61e83d453b49b GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs{;drh%|$|4uhH@gT6h3 zsTYG+DsxaCS9CRZYCCsEFGIm}o{GhSWy=|wHZyb|WSDx1p?UhH*+A`#B|(0{3=Yq3 zqyagFo-U3d5|`)pIEo!n;BXGsW?E$M-Tv)@x2IAgKOFMs_)z+YWwZQ)>*v1Q`N6o$ zFM8qzUz!}?^t*>W5IQwj;($Zl9o(Z r6DH)tmv=Yr|a zayO=|{uSMpJDG21lg^7PrRTqS%gHJ}{Jg{EQ}gGVtOE-0HBL7-F7HFLCz(d%UNvHN`jx>Nu3N;S8}{Yop`!|-@qsL?g3~S5 Rw*y_p;OXk;vd$@?2>`@0V5tBA literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_barley_7.png b/mods/farming/textures/farming_barley_7.png new file mode 100644 index 0000000000000000000000000000000000000000..1c636afbea800b2748fade6f1718ddffc5b375f5 GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs{;cA8y|y+EQ7Q2S>qlrZtl-D_1cz?qI#JIq>0`zGL6|m4MnAOM?7@862M7 zNCR>vc)B=-NL+U9jTB;0b-o$zCufKIhy-Ad!ofgNPTR&d?y8r9L>$kV2uPIKJ zuXW7((YNx0^&JkwocX&xx8*$TVO<=-X8UmJEFSrTk^Q#}oMQy0 zWlGVl0vCOQwc##YSB{GsURuafxoRQLmgwnm4pz;-8Eu|0Znv7icEgTe~DWM4fHVR=7 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_barley_seed.png b/mods/farming/textures/farming_barley_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..2f00a20af9e02653dff065ad6897fc40a3cb7ddd GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ%`eK$=rqflXjL-9wrzv^ zgq=at_QsgAU-=7Ez*rLG7tG-B>_!@pqvh%17{YNqIpF})q(mO~5HqfX;s&D`EDwC9 pB?!!9I?|=kwwf`9lX)TogWzmtuh%D{b^>)Vc)I$ztaD0e0svrzE2sbf literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_beanbush.png b/mods/farming/textures/farming_beanbush.png new file mode 100644 index 0000000000000000000000000000000000000000..637e7162d46a9bf193f8b400c076ad7156a2958a GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeXEjDCq&)JYRO?Yba4#fxUPEIkc-Jtz~y58 z?Y`O{dcG z;=kW33gm8XwEOwXJJr+dU2pBCO~;osEtB4(%-+3yQB07poMuJwDS^qE=1Yz-&i={R YZovOR;>fG%KeyY002ovPDHLkV1gyTi>&|v literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_beanpole_1.png b/mods/farming/textures/farming_beanpole_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ef2bd5abe14f6a13a035f901d2ecc7d749335014 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$Dv*Te#b93PQ3ACZ<=iL`0L zISWJzmWh^c5IdzH7YbCvSQ6wH%;50sMjDXQ;pyTSqH(@;;z8bK0|A!r=hS`*WgKW^ z3(#7?GTnjm<$qQtmD`IwJ|3RtW_7m8e^>u%+k*^$SQoflC{AJ9@L#Oypm@~7ScX0B z6P$0cak@`p+w=4P7v>1rBf?x9ItSM0Fa)!zeXHw}mgd`VuYB)Trk>e9V$MgX+zqeF nJ32cltS)7B(we|7^&5;%AK3h5RvMlKx{1Nl)z4*}Q$iB}1btSk literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_beanpole_2.png b/mods/farming/textures/farming_beanpole_2.png new file mode 100644 index 0000000000000000000000000000000000000000..34143e470fa2e7762acddb6d6ec296fe18ef0f3b GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$Dv*Te#b93PQ3ACZ<=iL`0L zISWJzmWh^c5IdzH7YbCvSQ6wH%;50sMjDVa&(p;*MB{wxL_@yA3Oug82UC5cOP8O# zVET%4Ps;Wpp?CJ87gzDcPkqJMss6xTdXc|juP8Hv9rJ>wghSfg4Ik`T54MK;wB8YA z@K?Cxj^qMcWT|5sV*baT(%Nj-0tJp9l*>z23d9tM_gJVym?I+_Dr%HZkh K=d#Wzp$PyKw_sTS literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_beanpole_3.png b/mods/farming/textures/farming_beanpole_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d693f17090f63db73650a55b8691dac267d39b5a GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$Dv*Te#b93PQ3ACZ<=iL`0L zISWJzmWh^c5IdzH7YbCvSQ6wH%;50sMjDW_-_yl0MB{wx#Jzln40u}RUQyGwenJ4$$`Ixl}+Uz z3=-Pb%1_RH$Z_1uS$SSoxSF&|hxnX~K*w1uX(G7?YXfIWOxa(S&TDjDa>r`UqHc%K z37j5F%ul|TX>l{YlI||kG^w%CLh`De+(VG;L^B|S6B st5l*^=(wKmXxfyNe(uB!^}PqVlPtueObpeefL>wnboFyt=akR{0Ota4WdHyG literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_beanpole_4.png b/mods/farming/textures/farming_beanpole_4.png new file mode 100644 index 0000000000000000000000000000000000000000..c779b254c52345ce2dea0642ce8e5243a98b19a0 GIT binary patch literal 355 zcmV-p0i6DcP)g)3qH~!@pMDPF=b)wCZL!P*y-lNS)l1Qq*s88!Ho^lN41K z$D5z-z4wa`;C~FL>3>SE(8Aq;%{^p8?5I_HkWiv1;nbf`R+}tk8-C7NNWI9`6E@%Q zt3&BwS$X}*+WA?A`cdI?Ru@g#a>F+3=;80Kooc?zSj4|mZTmka@E@i)#-dq3x002ovPDHLkV1l^F BlU4u# literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_beanpole_5.png b/mods/farming/textures/farming_beanpole_5.png new file mode 100644 index 0000000000000000000000000000000000000000..910f8a07d54f862539b2877ce6a389c4120c7bcd GIT binary patch literal 353 zcmV-n0iOPeP)00DGTPE!Ct=GbNc008kxL_t(2 z&s~wRPQx$|h8_2gI9m$pZb~b}hLAe28G@x|J0e$g-y%!)Ac0V~sOpf%#X^X?^tSt? z`~CS&slU=nR!*~Q0?_HXx*!%?(T77QfduG`zN;rAV-^k*&{r=;_T6XmKJH~GUcdHU zfZ@&h)g%I+VJ*Q?Z?TkLiKhsaP(@$GB1l!Z9gTKE1FbSU$08vl@Uamh&4WU<8W>at zi53jPuFeS`8FV_PmzLi=vfK_>`y+$Jnev#i7}&2?nHifkHsuw~J%gf8Yju`KBDOgZ zFW|`op>sF?pu`r_efi!N2FVdQ&MBb@0Np=DHvj+t literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_blueberries.png b/mods/farming/textures/farming_blueberries.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c493195c4b46e5196221e5f0c49b7cf16adbe7 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRRD?FGDuXi$VD)y%x2Nu z%@EKjnzcu)@s{-NqaT5?j3q&S!3+-1ZlnP@=AJH&Asp9}6ArM=;90=a@1mh>BdEnV zmC3VVrUK^%Edl=7S_bwuf;x{FmmEk^Xnkl9TX4I9fuU*%*L>$Uk3)b)FnGH9xvX$ZR|6JHC@W!tw1D8g70 zk;uyklJvl*vMMOe^MMi?9N`j})P-6!J10MrZdH|!oHc%CVr>mdK II;Vst03L!ESpWb4 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_blueberry_2.png b/mods/farming/textures/farming_blueberry_2.png new file mode 100644 index 0000000000000000000000000000000000000000..308a0caf006a7d617319c7cc98453d7a36d8e55b GIT binary patch literal 223 zcmV<503iQ~P)h@_o(N*kEDlq_MDpfx^<_@_uNhOZC!QT2eMpOHmS^?`&TPXZ(4@sY%cA zl0Ne_9U^u^NIGpFGEo8&0@ojGm;88dLFHYfOeTPFrK;OW-U$p&5#YGGh@MlB^Cmfb zWPd}r$K`-w?vG&d7cJ`L!QKv;LafsNG$q1uSqDGCEqex*5DA=q}lDyOs9=l?9XkQhdkU? zdA_gnC*U(5xxYq^mnc9Hh={sk^>o1k?oN@typvRADj-)A^*RU@C?k)O65!6x8m>ZQ z%K4CDF4_M8w$t0Gaoj2sR}(q@zBeSTvO3K#t7hf60d-Vp|FQ~fYG49Q0!V>s?P^~) hprJiz53o6Y;uowDqLJPOy4wH%002ovPDHLkV1k`AU_Af; literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_blueberry_4.png b/mods/farming/textures/farming_blueberry_4.png new file mode 100644 index 0000000000000000000000000000000000000000..75fb69a0ee637f2bcfd309bd8b3c1e8ddd049559 GIT binary patch literal 317 zcmV-D0mA-?P)EJl!N5h5>1s;&t8sh>gb_^9sCPZ`kin0Dz*7 zDZR4II2tjpz||JtBIgz8MDBuRn-O_s!MaJP45*ugVG3mevAdCQoPeBAJp>9-8H;l! zQmZXES#*^9BVnoSk)Cc6H%=5f_dRfav)|-i)G^;*J|h5FYH&IQW;5V;=SDgURafPeRJjAo%Jt|_3c=7)EcOTu_VYZn8D%MjWi&q*we)^gyVX0 zLPCOwh)4nhlUrwBpPPVpMD^FSUbh7flh3Vj)-LBT@OWcc{Orlh%e_2@W~KLBn`61= zgu<3*J(p$$PZp6>c{V4qluhNRhVACX$=z9ifz~s4y85}Sb4q9e08e;RLI3~& literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_bottle_ethanol.png b/mods/farming/textures/farming_bottle_ethanol.png new file mode 100644 index 0000000000000000000000000000000000000000..84e6162de837acf5f930477d9c6ee8877d35229f GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(a1=3pm&!lD{!JP~7dHDYce{k<=MVsk>iBic20p~P(_^K!~ zL-&a;Uf5VD?|otpPlZcMA+>7ELAOQ!1V-uzL|CcCh_)FWLgFA5 zvGq6Vd;H>Y0oE!)wHkBqy+!A!ARXomGs`e9Xf@i*8K_)@%P~Y?81p&P(>O+m7DkwDL%_&g^5`h%3o&rPg)&T*D zfd!Q3AWZGv+0-xTSF`}9;ILR6D0nC;%7ltCacc)*OqlWP_J*oE1%*!D!(v#{5HzB% q18(j#gjsK&T=V!_d-W}!f8i%XZ^E3%vu4Er0000q|v6C`4u zBWO{^JvUCuu9bUvs=Rxrz`imq|5*azOT{kLtKID~d@|dYO{aVtP&;EukY6x^!?PP{ zKu)-)i(`ny<*9w1LJbN$EQ;L@90&jJ58E>3X!p}QRxf8A*(smcHg&7U`53cKXHUjZ zvkU1$t0Xrz{HTsEKh1Hmd|{#5b!ok07w7xUU)Fr^Q%^7FbpH4sbD3S;nLJmoom2<3 Og2B_(&t;ucLK6UaE=pej literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_carrot_1.png b/mods/farming/textures/farming_carrot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bbeae7e8a3ca2915c4b76dba28933e95a6ebdc0b GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uId~D{<8$amx`^jo6-jq zWGo5t3ubV5b|VeQ5%hF%4B@z*oUlMBgCR+cosEGdjNx!I_xT$@Nd`|>KbLh*2~7Z+ CK^ZXs literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_carrot_2.png b/mods/farming/textures/farming_carrot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b24ecc05049160fe0965788b1c5b767530ae92b5 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t{xl${<8$amx^gVx%C?; z$XF8O7tG-B>_!@pBjV}e7{YNqIbnf}34@_>M?z5o0|QqaqYL-egkwN?22WQ%mvv4F FO#mQi8odAj literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_carrot_3.png b/mods/farming/textures/farming_carrot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..840050570f0fb4f23654553e1a90026f3defe895 GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|u1cH&{<8$amx}2yUyKI| zGL{7S1v5B2yO9Ruh%YY?E4sHEZY|a0#z`0y85}S Ib4q9e00lT2M*si- literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_carrot_4.png b/mods/farming/textures/farming_carrot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..32ee26245c9e8c2a2821d3fae65a911b4abdedbb GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0YzoQ^0?gK=@Lz`)+;~ zKt5whkY6x^!?PP{K#ruRi(?4K_2h&FECnVEoXeOUnu-}ao*rOe5MRM$=KRjmdKI;Vst0KR`6IRF3v literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_carrot_5.png b/mods/farming/textures/farming_carrot_5.png new file mode 100644 index 0000000000000000000000000000000000000000..0bcd9c1e3baf7dcc4ce9c88dbf3dcfe4ca6dc1bd GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0YzoQ^0?gK=@Lz`)+;~ zKt5whkY6x^!?PP{K#r`Zi(?4K_2dKv;Q|u|&Sl09O~s5IPZ?As_zf5sR2i6=nXX@q Q04ikgboFyt=akR{0P;>7g#Z8m literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_carrot_6.png b/mods/farming/textures/farming_carrot_6.png new file mode 100644 index 0000000000000000000000000000000000000000..a17c6b2bbff968e6e4946726acf6442f54f92bcf GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0YzoQ^0?gK=@Lz`)+;~ zKt5whkY6x^!?PP{K#sDfi(?4K_2dKvUI~VcuFMk>te90S#2Gl1*%b~}FsM8`z`)?- Wz;T{J7 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_carrot_7.png b/mods/farming/textures/farming_carrot_7.png new file mode 100644 index 0000000000000000000000000000000000000000..d26eee7cce6a0d6cc021517a73d615b470958d6b GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZWnj>>DC4$k<#z8BaOo59 zpCu5!R4n1wn;$?0j3q&S!3+-1ZlnP@nw~C>Asp9}6Be*07&inkG79Wt%ywdG5tZQz nJ($H1c=*5@hO0+Z7*rTaYMHGL_B2cdYGUwo^>bP0l+XkK-Pb3p literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_carrot_8.png b/mods/farming/textures/farming_carrot_8.png new file mode 100644 index 0000000000000000000000000000000000000000..00b6d92885e473fd0ca76295b14c1294559d9765 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnY1=1E}+;*+p?wtZIeFFQ+ zwESlYgfA7lRIhfo%kar;Upb}x)j&mzB|(0{3=Yq3qyag)o-U3d9M_W*7APf{Hw18U z3hZNyc4TasI)^RvU>ZZ<;RA0Nt{zcgNIjFqD#Wl#j%9yxW zDB~{3;k9e!cJCDMpCu5!RBZ7g_k;VSE?+i&|32&Y?@M18c|is-mIV0)GdMiEkp|@W zdb&7$25|E$vl_U=5cVDjCxgN1oEBVV>8g9xwSQID##Z-53fc)I$ztaD0e0stTJ BMu`9b literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_chocolate_dark.png b/mods/farming/textures/farming_chocolate_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..03243b274bcacd462e39b4042b2c364fbdee6007 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6O!VDyj#A@{cDgFST5LZP826GvPRAZ)e6NU~K z##)8j+CVABk|4ie28U-i(tw;qPZ!4!j_bbt7X=R}a5xt-mohgCU*MhcH(je^>$7&7 zzGjClAx5&ITmDqb6!CLv38-&bpa04@nCo<{Lh#iW{1zQeOZ{1Fx}F|A&~=OF_qJD| p->yC>5L#nhvwUaqw%^Tf<8Ry-Qj|ClUjej?!PC{xWt~$(69D9SLB9Y1 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cocoa_1.png b/mods/farming/textures/farming_cocoa_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f887a1fb1b758229c763a7f60d4bd15436877b8e GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VYl>^Oil2&hvcBVF6_gTe~DWM4f?R-~> literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cocoa_2.png b/mods/farming/textures/farming_cocoa_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d393532509e2d9c2aae1735feff65735cafe99 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VYl>;Uil2&hvi__tq4k{% zN9QqIn9J~J6T_Wt3_njWd_O7ozo$iOpB-Kg)XrEE9`#i+@Rf5OstdO^*N$;BSKlD_7nqT#Gab8NqXM3P_#*!evU5E&^1fZW1~Xy1dW!13K|+5 f8yU0s^cWa6ALXe3yedx!Xg-6dtDnm{r-UW|E!{Vd literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_coffee_1.png b/mods/farming/textures/farming_coffee_1.png new file mode 100644 index 0000000000000000000000000000000000000000..97c207a313610e5e4e8316d762ab75d8e8236aad GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXJ?3guI(Qc@;KxK?2L4Lsu4$p3+0Xb5hE{-7_*OL<#=xekX-jG?q!^f)8 de3ik2fkAvRqo}92{sN#X22WQ%mvv4FO#q!(BT@hW literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_coffee_2.png b/mods/farming/textures/farming_coffee_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a659f851fd94fe9e9025d2ef700b41bb19714e01 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXJ?4B(Nhlrx)a6Llym z`9fObi<*XaRb5~EjM74dfyx+5g8YIR9G=}s19DV6T^vI=t|uofkmG1EjCjbytkLYt ocL&V_ils_RF7~fa)1MUHx3vIVCg!0Fnal#7TQD| zib^@3TJ)&2{ZmK7QinM}X~vQuzhDN3XE)M-96L`J#}JO|$q5R48xBgc1+eYTWNbOO zP=IgQ=}V#tLVPk@0j4sqQUi{jQ{ziuTg~Lm6rmuxO0CtGAx~8>m!CkB O7(8A5T-G@yGywoQ%rRa7 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_coffee_4.png b/mods/farming/textures/farming_coffee_4.png new file mode 100644 index 0000000000000000000000000000000000000000..37a609f66d24cd61f8aed53098d2f0eb4a19578f GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXJ?4&jlhRxq1tYqQWM z>QGe5`P8CErR|?Oaz20h1ysgZ666=m;PC858jut0>Eal|aXmS~fr%|(mZ6}U5L0po zr-Nh;TY%W^Oh?8UiVG$9u7yln$1t&AV*tbI#PlZt`pqlS%FPNHj9o;J2s>=4Smng& l(PDelcLBqqHeMG-23`lwI{$O`*n!3~c)I$ztaD0e0suJ!Ix7GG literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_coffee_5.png b/mods/farming/textures/farming_coffee_5.png new file mode 100644 index 0000000000000000000000000000000000000000..e624fbebe1129c5c884a7c3abd76d86350e62e8c GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXJ?^y6M^&LC5*U^dm( zW}!{u>7=4ZrR|?OmWRFS2P$JM3GxeOaCmkj4af=hba4#fxSpKgz{D3YOH)v75?AsH zO$W&wz5ub^(T2Z?7p4WwY)Hf7ON6Hxp?`) zua9p(eS7-h+sAI6D}q2Zj3q&S!3+-1ZlnP@R-P`7Asp9}6BY<;Sh}=zsValy8-=(^ zh6#y0EUa%%@Te*{ByLdQ;_6z?Bx<~an`>GFZ<3~dc|rmM!;xOD{YKWQEkIKkJYD@< J);T3K0RRauGzb6y literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_coffee_cup_hot.png b/mods/farming/textures/farming_coffee_cup_hot.png new file mode 100644 index 0000000000000000000000000000000000000000..f4fae904142e3ac14ccd50da6311f4074b9a2e9e GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUO)Ovtu@TDh5pRl>xp?`) zua9p(eS7-h+sAI6D}q2Zj3q&S!3+-1ZlnP@zMd|QAsp9}6C4=W#n{*d&K{d^fK4oc zk+YF8K!MSfS7yV~rL9XFpWJZV^NB&>umlI!jfs+84h@GAJViuA{8_cq3dBWp8Y9Bu c_)H`jZvW$TpwF8eK4VnkVej4iHHIL|Z{@0du{7%sg@=)F1|2u;yki%fWHt zfSZ)#AZ*{LgV+NMJMkx2kCZSdl?6nyM(3RHfD8~YU9-C{p(YLhHQE?~hz$nF-e3nH zkB4oXW1dKHge0oep@A|{XUGBonUfml9FmwF?Y0280KhEAEffi+N9&xdRfoG1%f5<~ ziSBjeP*%GP{ntgzU3FwQ#NkH$rs{;6}Zn*(S7C2{?1z5*?m2&qR z4($ShzF1}V4hj94C|N^@wKwSWx_#sLgxHWcvcvU6`~Yja46a=ygM+Q6ecH9(!sQNa16E5n*d qPfvj(=?Nl2DG4mxoK6}R3=H$q`CGmUMxOz5*r z?Xl13bDgm%Zjp@19iSSp z?RU?c>{>bBYubjSmC7G^fyx+5g8YIR9G=}s19EgdT^vI=t|uobh>AG8WMkKGc3!}E yC}ERF1DE7M5$OXNj60Gvnnl%)PG~s8!0=-~OVCWWTg!nO89ZJ6T-G@yGywoEeJ!Z~ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_corn_5.png b/mods/farming/textures/farming_corn_5.png new file mode 100644 index 0000000000000000000000000000000000000000..7b6fb02b707ae653e7b29c5b384271e3e94dd93f GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXK7E;o#9HBD}Hi0?7W zndDwI&$Dhp$kdH-Pt4_R0+lhA1o;IsI6S+N2IQD{x;Tb#Tu)9oz%Qd9BHeTF#sr3` z8ymU|HdvWBMoKXzteW7+tEJ2k93#gNyoSNpl0lo9p}dQYy)kBP0#HALr>mdKI;Vst E0Bim&3jhEB literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_corn_6.png b/mods/farming/textures/farming_corn_6.png new file mode 100644 index 0000000000000000000000000000000000000000..313697b90653b62819b4df7606ac80e65157911d GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy#sNMduHAMEG?QgK%MC)BO`==v z;@d5wJB?F%>=OGdGA4OtPj)Su>{dS4y>ms#v<*qKHpNZfme@0)dJ0fGV@Z%-FoVOh z8)+a;lDE4HLkFv@2av;A;1OBOz`!jG!i)^F=12eq*-JcqUD@w(3UlgNWwtGQ2NVkO zba4!^IGvmz!McUP=g*YY4;~~WJV-sVys6i*L2|v|nwp9ymNOf;Dn4XBPf1KT`rfU~ zFO6wm!twPC5?pUu4s~`1cog-wskpEzvc|NCENE9@SkuY4r?JYY2xvNkr>mdKI;Vst E0JTIseMktGlFuaxD`!yE1MZqJlm&sj)#`cJ#(O5#*!evUYh7ML)4Ealo zaXvXgBE&&Hw&A5SFVdQ&MBb@0HPvQCjbBd literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_corn_8.png b/mods/farming/textures/farming_corn_8.png new file mode 100644 index 0000000000000000000000000000000000000000..77e442b09977c3945e4b2cd3aec4cbe34a897e6d GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy#sNMdu8%LS&`y>y$}(Las^eZ^ zU{PxsP-Pm{YLeJto!Dm)JR>M;vU|~F*Zk?8`&%+=7yETBk95DqEeX`lSQ6wH%;50s zMjD8d z^N5Wh^?P>0zf+r-`=@bT-ol5$D=qIum}J7} z`#h|Rc0GF7E>|PmdWZAEe~-_>zmENVvcrGTC04#yKXMNM9m3%0>gTe~DWM4f`<8Ex literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_corn_cob.png b/mods/farming/textures/farming_corn_cob.png new file mode 100644 index 0000000000000000000000000000000000000000..a2fd9da7d09358e8ac76ea460d817656b5031c12 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUO)OxLiBVE6RA1gEdT=Vk zskyAT*T~%7pSjar_Y6=CV@Z%-FoVOh8)-m}kEe@c2*>s0ga!sijkziu3vc>}DwJep zFwF?eOJZAg(>rDXlWJN5TlG$FDVGCBC3Ox=d&DE?QCMckU_2?dM{(II3uhLIR-OxQ bS{WIpvT*hl)xgG#>vCLxQk&%%X!6lKsg3aS3j3^P6N1~t zT7lw>B|(0{3=Yq3qyafno-U3d6^zLXSPYCdFr0Mfa%j5C=_!@pqwneB7{YNqd4UMW0SP{XHb$ow$z^Sx4T37?j~qC$fI-YC mC8cFmP*}r-9yd1!AqL+pCe=^OGu(k%89ZJ6T-G@yGywoue<@V} literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cotton_4.png b/mods/farming/textures/farming_cotton_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f314b07b7e1968592fb8bf3f9fb592f4a6467010 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=7hmI;G_XzVTY!9oC1Y zup|P77)yfuf*Bm1-ADs+Og&v3LpZJ{EAVbOAi-zQ#?;oq5F)ymnOS)P%j(3i1g4Y5 q%sbf$~F!A+hX*qB)6klZKoY&;i1vH7l)78&qol`;+0Mzd* A1ONa4 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cotton_6.png b/mods/farming/textures/farming_cotton_6.png new file mode 100644 index 0000000000000000000000000000000000000000..f4bd4fb346ec9ee2a71696d9337723d2be7de8dd GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VW^~o%3Ot#4jH=kbW9_ejT z5o;-L`KAjf%UBZR7tG-B>_!@pn!GVY2Kz8F^Aq7W=<|h7su7+0_ z%;(jgy1^6crYhviImc{Ej=$HGy^A(l>lC<3yg$co;R#@=OgfrXJV)k$6JL*(mP0PX<{vDId%2_RfQB-7 My85}Sb4q9e07KF(tpET3 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cotton_8.png b/mods/farming/textures/farming_cotton_8.png new file mode 100644 index 0000000000000000000000000000000000000000..f835ba5b3f6f2c4d0e6c3f730be01e599dab7b6e GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ1=1BEstJygSFT*~H50Ya z6g2nMH80Iv29#hd3GxeOaCmkj4akZ0ba4#fxSrd&k+;Es=fIpT2I&tPJ~#^SGX#C- zlbP^;{Q{w$icL9n8i96(^{U|s@{S!nx`{Fen{H}v4KbMfXl0lD=7OY*ggmJ~bxxfl+I4L|LH_AoGby85}Sb4q9e09F4!`v3p{ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cotton_seed.png b/mods/farming/textures/farming_cotton_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d5b8ab714e2f074b8136aac0d8dab88c0acc2a GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b^~o&sbXJcEvo6REsH=<@ zI$@IslwvFi@(X5gcy=QV$T9VFaSW+oOg_LkL)2l3Fmv-nh7LuY0}32s=^+P}PGejn t#^aEscx$0U1mmeR5eCVl4VN|87&b3ts&D#O@cf4Ux*d*m>!qJ?|+p;0iq>WL5F(thzheea+CfA~;T#88w zQaJ)zopr0F+lb?f?J) literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cucumber_1.png b/mods/farming/textures/farming_cucumber_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e008fd12aef55c66f70a05c7d444c0ad69eca6d5 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`cAhSdAr-fh6C_v{Cx{5}-sv;? z!@u{?hxr<}1CrGePVcx!&=f9@W zfh6n0^>eSTXlsc}{J}4zev9EKE5}iVvkJ@;W81DzRq&jV`@fOli2F5$Ny;yzCNQNm z?{x;uhBhM ztpmcH2lO@;Mu!w7fENmcKVfppLLlVSJ8P#?b7PU|5&=+-7MJ7%T9d8jG6{Xerfm_k z><&QdSnTc7ff3MNWjhGSN00006VoOIv0RI600RN!9r;`8x0t!h) zK~yMHJ<&;S6G0RJ&_7l6V8?M1j06jWI2TvrIGh6(AOs|FoY>tp{DB36E4+uFKYjf2 z^Zxtsl#+z@!+!tnaK{Lb&*j(i%l&d;2ncYa+w1AW-GROxpN^#vQe90Q*VYYecQuX! zmDV{zjU}g??0Qb~O!V+l&Aj#|i5L+8d%)ANl&*Q;P#Y8UVjjcYZr4;P2||#N03Zr6 z;lurTydq2(rktdCAj3FtS&fnDD(68k3AmZMU#bHk5TjC4BcTjo4xpBqy#u{_eY2lt zMhT2)7@>@D`n}E*w_w+(VHjZGOKZ1>iO6Zcoe*Oh1_M{KuKwyUPiZ)8M<&z~^Gr*3 z&UjgrhEcj%Ep{$zL_kD0t)|;uy4lTLaUO=&W0WL7+FTxAo*&MOB}#xmpo)gTM5XnY zr2uwJ0@klL6Bx6ESm06{N2v2S5@@^IkKpk2{^@a95vi_5j757&mWPSll!^SmH{_Y} zTI$28xY_?70#c?hli!aQ?_H8K4`N7!y#_}J!K%preuVLKTCjxduQtcBkWf~yjv}zx zrrVq8STCwQ0#wZrF4f6mM~c(Aw(ja{1VY5QR1g0H XybyEF)T0<%00000NkvXXu0mjf*|Hr( literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_desert_sand_soil_wet.png b/mods/farming/textures/farming_desert_sand_soil_wet.png new file mode 100644 index 0000000000000000000000000000000000000000..cffa955d6689ad88d675921a3e033256869343f7 GIT binary patch literal 590 zcmV-U0TPe1t@7;T-w)^~?9) zmtV`GsxUjv^Yi&g!Sz=E-0zolB?3Sg4|Dl^JoD#uxz;LRt8RhXyTkXpQVMJ9M3_@k zO3CISjRSePS9fpLR7nv)dSJQM+Iubv^O9iIBg%2VZ)Qv?2&yOmQBv@Fd6XR`NtjW! zJ3y4ex;cg1<(w5s5$@)`wg3SkjLl3`62b#8&t!D)`Fxm%k)k0HT_TKv+sif&)fh%udoanm8FNu{tJNNLivS|JS#_KC z>98BR$(VERQB)PQ=IMIBUmlw)6#>FbT%aPg_4`&K9jfBC9|t(8NFLZ)d-E=Zkan62 z0zY1s*L8dQAyKWTRaBBi3sGR2(%~>HZ8hr%n7Iko>f)Aq<1{Aw&)eWVjO3@M({UW- z{l~+VczT*RmVBBD<=wkQ-C9HxVoC`fZ$BQMvr@^V+?Ue*pZAb;$a!7*m=sliy2+ zH91To`P;3^doPf5RFgz&Hwb0-5XkF|FL5WZbM{o1T|bcQv91-$`Zf>`FwO0KD9J-; zB-?&nha<^nkqvKpA!UHKTc0`RZJD>ZbHKx_A*q4@o_;kYUtGz$>&yBsu+91WO6wAk z&3w!ovLA)wZFM6J2#(K9-tGC`4-`4gsO|zT~Q~``^I4EOL z>7-`Q{JEid)bUTz<7swwX2};X8%KmzY}TPj_G9%(fSt0vZ~9fuNv#fDkSrxDEMb8L zK--uqAik+ctnA0BBTvTm-Ko-|M<%HAI1mP4hSt3bzs|s!o{td!Fmi&WPy!egWDr8& zwhaPVek)<80J>TZJasq$HE25x7GIxS+#x1 z2KIYZ!NA=Enlu0(XCYZwWfLWQ3e}n~e_H2m!L&wzb{oCrmotgm6{H%NP)Yx-Q{f`< zH@JO-3eZ`a@+U&YmBnK_2Q1)?O?ZRdhUZQdDj+yK>Q(Rh3NFdZ=TG7>NIAI_??n!m z_&4Bw=&L%yD+{WZtr9sn0=#FV02K@&nKJ~oIqCbdYF)_k>$#~cas%rKG#CJ|#wxE+ nMIKmUBX=JleSSG%=DPSlp*&w|_r}1_00000NkvXXu0mjfA;%Mv literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_donut.png b/mods/farming/textures/farming_donut.png new file mode 100644 index 0000000000000000000000000000000000000000..8985299bb01d7abc91a4a81270891b52f0e933fb GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5qYrYT`trw8qt8?kRr z#F2%u2NuVkTpE3JdDPkEVHZ~?Uf&RZbwldq%?USmR*2>u50K%;a(!5;&F3d7)zEetIr{yH9G^m*Xn9Bc^4fBRn&2MuymLFy;*aW(>PKZ z{L+-}Up~daIAiWaDR;m3IlFX39w=DfD&8YybEEFxXI`5HY|cmXe$E3rgu&C*&t;uc GLK6UdziDj% literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_donut_apple.png b/mods/farming/textures/farming_donut_apple.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfe63d5980364e3abe99d0ec5168b03d247dd93 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vt4g8Q5?0Aw{4$@F^q+=$ zz6y7EloIqbBjav<(!-*H+ZAaK8fx!%w!EJ_<>-p!_w(l6-&-UjlX(EBov|dyFPOpM z*^M+Hr`*%UF+}2WZ;!XoVFQk%GPfHz@Bf~^P32w6rP!^L6XLS}FI>g_AT{YQ&#$~w z*A5@@X<5IhD&nP+v`ER*)8jIBIPrMdhs+sfr`9}*YDnPuVz!EZYSNT|`ghCEMw)Up3a@2buy?yp>x<3T zUB9&}eO{qum=rvvv&Z6~$mJs^JElvTMcn)Se13ee1#9}B-gTe~DWM4f D3aex3 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_flour.png b/mods/farming/textures/farming_flour.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a97836efa64c2bf3867a9fe9155bd9247bc515 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ1=3%?e*ORd|D#8bUc7km z`}glRZ{F66&XcY3~p)~x=Jbv3`rdl*4ENZu5)^OeI1;7 z90c7vrgR#*oH}xYMdzqO&k~6>ZH_l?Na`>L@g^ELnKZU6P~z!nGWadpAi*&43dhd! T=tKX3CNp@t`njxgN@xNA6R|Z; literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_grapes_1.png b/mods/farming/textures/farming_grapes_1.png new file mode 100644 index 0000000000000000000000000000000000000000..64a935d27a6b088bfb71470cb180119014a75862 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=>VS)*FXja7h@SObLkj&)ii%y z`H4FHMYc;DeAcuF>q)B$1C=qB1o;IsI6S+N2INfgba4#PIG>!rz+}eE$1af4&{(w9 z7@SE6XK-xcVmB#I_%Y43F_3|!aJ9s#hYwG!<7(m% yWz1o8C}%mq8o?XUShhhahcl2vguzijnnA2f{mewspshgHF?hQAxvXVS)S49Q}7h@SObLkj&)ii%y z`H4FHMYc;DeAcuF=cyL|1S(@J3GxeOaCmkj4anK*>EaloasKE8L;gbw0%4 zyU+22%6L|FC?7j!u`A;bb69=j%k$H`A3NsE*_*GZKmEI0xJY5kI^Cd}XB+qYy1wqa zN{%!`hO|PXrkbEo%Q_t=r%Ev?#l$lwg528AByYNy-}d#a4KL?D(+A3$uD&)}txI@+ zUrqjWJLs&+r|QS?-#NBEo|gXIg7VS)*Fpvc7h@SObLkj&)ii%y z`H4FHMYc;DeAcuFPx@566R3=_B*-tA!Qt7BG$7}gr;B5V#`(Du4EdW31X>N3wr=FE z7N2X~P^z+UYoDpW;}eTM@^}1WI(&Yc_@k{(F>kh;=<9!f7dPq0@sv2`lh19&6uQ@f743&i) z3a)In6}!GH>1gBqzW=`sG)iozuKD$<`P?s!j_gY5yN`;T_iBGBl=Bxa<*%Kw?2_AU zy(Jyfgx$Lg4yR-*#JryIxz<8tMT_mCDSk4R4FApT7HZl5weSlA`iQ~P)z4*}Q$iB} Dz?m zGaO1c8(c>vW=}02kt~mLJ*9w5tcO!@Z;nO)0004WQchCe3 zyAFad6vdRbj9uKj=-dIsu?ekpEP)^+i^LxQ{Q-@iZ5y?>%01i3&3Pq>J0ddak$msE z9nIr7n?M|LrBs!xKp>8oM<9rx(jyS*K!isi-X4+5TOra|e9Zgj?o!^$K$xmj#sOUT zLW6P-_>g}&7Hw0$vMW|cU5ZTivXA!YMsq(-(H^Z*x+)+Cb~!LZ76@^Y)KVRYcEExZ zKYQT6J=VxJtckkVOk?*2d-TulTu!iu&!ClQ!G$+21zLlKrW+4vYl(Gx#7TXQ$fe~q ct3P|Z09FVrZ1Y1n!TUtP)vW=}02kt~mLJ*9w5tcO!>C3E=z0004WQchCe( zvChIE6oqT>mX0jlS$^jZ);f|DejKl9qa9r|zJS#i(D>Lw8ZTGnY+nfH@MT#zc~zL0 z?0v3_lYeYRPvC!Pt!R>I?3+#=b8{_)9Iybk5fNvY? zLkNKGlqf|>U@&_v|0ELV4a6PDmO|(Nwp7n>tG4Vfb>RjxFdw^NB!XgzI>DdJJm5CSUBKI$KkmvW=}02kt~mLJ*9w5tcO!>C3E=z0004WQchCGx zv5vwp42F9OPBV64&vG|sps+?FxiA_vYBREccmWD8a3>xcN2iNZ?Cp;gfBu?=N*ZNz zH~)42x`f}u97^!Lan9{Gt^`6u2c1}#U^FdGw)G`|lk7($u>=a02MfGKtOflsbUfh| zy(gZSQ`%mq$F2lnm|Tc~IY19YQE?Grebwb6o+HHS1{Rn4)|A9(DJ%prT_Q_XQ7 zFX88Kt9(S~{JyU_@-2e5fFT=L`G_at=%wLnEiA3m9XKp}yc?U-b3E^E>?1RHGQwN3 t53GDBPd2FeT9ml(0q;Jd&Nlvhya0u2Fp(z*et-Y~002ovPDHLkV1h~pi$nkb literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_grapes_7.png b/mods/farming/textures/farming_grapes_7.png new file mode 100644 index 0000000000000000000000000000000000000000..9e70b6d559fe4dec85b6800cec67d983055021cb GIT binary patch literal 358 zcmV-s0h#`ZP)Gx zu};G<5Qc-X7@Jruc~l_ zlIF72b@mTCe|VXE2G2`t?bFg`z<}ejMFxYa!)R)kK{E?IC@~j6I&K;Q?8KmfR|3*W zlT4%>Q;e(g__5Bwccb;aryLwQOi|>BW`ufChYWhdl~96!P#n8*`f?9^F*duh(FQKH4IGy zu};G<5I_?Y+c#p#LX027O(y2OpAf;s%H3KVJ{HCC`5AQcZ(L2nJM-pHYY1=7B^a>lblh3^7@z}x#WRj`#Z z+s9ozVlLs7qj+e{IE;-)@daUoR6+KdEsOxe0QhU}a+eldP<9YdIh3Zye2Jg#TRdJ| z2(OOBV{lw#Qt}r)agEgU$RF%MO%J$wG}YCpQs(=}j`UlsG2P<6p5s^JVJT3s#|qwT wMwL!Zp5cLOjJ*IgnZ!LLvi{#AQFWow7c2#_-A&)A#RvfBf+J|3B7hCqoQSFJnoNUoeBivm0qZ zj=ZOfV+hCfM(|FKecZ~FnYGnNGT1v5B2 zyO9Ru=yx`w!m#{)Sl}dYKQ@%UBZR7tG-B>_!@p zW9;eT7{YNqIpF}eP(n|$!7(0*W^cx08Vwij>%Yg-IWj@@l q;aj-vSx=sr*2e!qIkfJ=U2eX)fsD4sWg9^5WbkzLb6Mw<&;$T^KR~en literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_melon_6.png b/mods/farming/textures/farming_melon_6.png new file mode 100644 index 0000000000000000000000000000000000000000..b31a5b4c42108dd21eb2bad0bea009707f5f2e6e GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5ptxjAFHpHy@-Lq-Ni zWFA9i4MR~oLuZFT^(2O_#SHUzG3?o`dghGL(`OEE-Z=gH8}?_d>OY`%#*!evU^3zkiFVX<4v0sH;<#nrmV*ttQk2+nN|o-3$(atY{kf&&vYqwCs!=c O1_n=8KbLh*2~7aaq)apb literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_melon_7.png b/mods/farming/textures/farming_melon_7.png new file mode 100644 index 0000000000000000000000000000000000000000..3aebfdd6d6d9d11483acb45d81b10f914b1d958c GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VYihrtxjAFHpHy@-Lq-Ni zWFA9i4MR~oLuZFT^(2O_#SHUzG3?o`dghGL(`OEE-Z=gH8`gE|vL8@8V@Z%-FoVOh z8)-mJk*AAeh{WaG-ax)X20YH@9-h5Xdb%@PXD&()nygzeNfBt{Ob*zfaDlQ#URWsXMpIAuL$a|56#tmiT?43xT#Xc)I$ztaD0e0ss=dT&@5B literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_melon_side.png b/mods/farming/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/mods/farming/textures/farming_melon_slice.png b/mods/farming/textures/farming_melon_slice.png new file mode 100644 index 0000000000000000000000000000000000000000..6ee977577899412a6e1423c94cf160f1037e3c97 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5ptFAGz#fWUEC^^@|l zM^qK}tE=CU(>bHA;TOYO(=7Ub=92AuRNfvx@#XT4|4&c+cz>mT&8kyC?TjTse!&b5 z&u*jvIdPsYjv*44d;4zk9Z=w4`52*9apnL2TUnPQJbzuNyxqtvP^)k>P50}D&(mi1 zzBs7(u2+tMMS0TgGiwa`=lh0XQU88U1;r=|W{BDyd&ujIF1Xv@Ds Z#&hD#3zFP&3xPHQzo(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*+? WGEAu4rZoWo0000_ft=UF~G==1gE ziQ*Dj{R=D_tCnpKXw>XkDAS;5y4dvDO9s=H8IGcs2d|lxNIj_(SGY5mSH)c6`-~}5 hc3t0_x@>+Vp?wsOMq4~c)I$ztaD0e0sw5wQ{w;t literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_potato.png b/mods/farming/textures/farming_potato.png new file mode 100644 index 0000000000000000000000000000000000000000..6e91d6ae8949445d7edba0c3cc8c5f542e93b011 GIT binary patch literal 252 zcmVOT3}^k{ zY@qj3^!${6!l?p2iXCp(TFw{nOg~_7P+p|k`JU7U1VdMGwZ@ri4C4A f`Yxd@-h2#9D@^8Jt}t~38q476>gTe~DWM4f8{R9! literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_potato_2.png b/mods/farming/textures/farming_potato_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c81830c40bcf17038f5b7e927a2779f9a63f2e6a GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`O`a}}Ar-fh6C_xjIo4Dx`!YYp z_x66Nf9_@rekw5MIWLPB{nLN$xLVs~h6yiSr4`H?ZW!F2klT8)nTKg7$IaFP0kc-d zqbm)X6D8JbPssI(<1l17^6k}u64to02GbR!o8HCFVLM>b$a5f7+b>+fTftg7mTx)Z liEX#8FVbq-$upOi;n>^MqwF@kM}e+k@O1TaS?83{1OWb|L(~8O literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_potato_3.png b/mods/farming/textures/farming_potato_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d7920918e958a2283b9ded3ed89b32830827b3 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`TRdGHLn>}1CoEvU@$c#f`$(zf z@uDo*F&}+8ZI~UTX7d~UQO{toQ*Vl4EavpPzCgNR4abt58O(?4Qw}?&gskyLHuiU!j^1z1-hTX)78&qol`;+05CpP;{X5v literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_potato_4.png b/mods/farming/textures/farming_potato_4.png new file mode 100644 index 0000000000000000000000000000000000000000..405b7e56d71be2991d1330f58325f12b9c0934ec GIT binary patch literal 283 zcmV+$0p$LPP)^*=N$PMhRY&?KqZD*Oz+Df!n6hu335TY1d8DWxrzX*a0VfVeA znVq*0`DeVeQsh<9)1Szf>sgVPx9)d=@?L06WU`i8fR2KARuA3oHj3=`=KGG~0~wg8 z2;OKNSj!-fa;Y8Q3|A7H#2Nse35JNh3!M0>oJ1gM>m+!NFF^9~bok_K(FjBriY5Ud zQxHJ*AVPQ8Q}p)^XW}f0)^Tt5&>D6c>cO-Tw9iPA>BNe(E!+u`Ads4xbYUCTw%egi=o^~tu%ABX?|002ovPDHLkV1lGBd`18O literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_1.png b/mods/farming/textures/farming_pumpkin_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b9a2bf946b3957a96b53dc9c6c7d1b87183fe5 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXHcHDplmV$hH0u_#h@ zZI(!Gt3e3veDNJsEn~B$S;_|;n|HeAjinl#W95AdUC=7#)QHKqZzXmrwBLi zWb8=1v?M``A&FzRre%|>gzuE2a}IV*acSX|lwj!8Wmy^d*kvbBH-o3EpUXO@geCyk C%q)Qb literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_2.png b/mods/farming/textures/farming_pumpkin_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d977e8c22021375b2d19f1e0fdba16ba159bfbe7 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeXWe{W#HDplmV$cs`(vRn{ zC{lK9mPl^o&+OvsUZxymd_xnclCdPnFPOpM*^M+H$Ia8lF@)oKa>4?;gu^%3F>n9? literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_3.png b/mods/farming/textures/farming_pumpkin_3.png new file mode 100644 index 0000000000000000000000000000000000000000..83f81905173ce0e5c5e113435a0e758b0280416b GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeXWl&@gHDplmV$cs`(vRn{ zC{lK9mPl^o&+OvsUZ%_>?U@c#$ygHP7tG-B>_!@p6YlBa7{YNqIbi{Vfn@Uu0d}^t z0&LS5u1RY81ba)wEYHx|xpFtV;SLuq!yPM^SQ+ftCAPDLa}~qYc9v8%BU8q&7Mjym rb!jw}tmZasTW!f8spY5>Eb7hBlgzKH?>b=~&Ea`*IyjKSvyt?&7$Sjt1 zg`J9q^~6lUfd0uzt5d2D~Dc#Ol8eSv1V+QytvmaO}ND_6-XPCE2J@X^C3w=|Y9 ZFf3jx5kBXP&J>`n44$rjF6*2UngA7SP2B(h literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_5.png b/mods/farming/textures/farming_pumpkin_5.png new file mode 100644 index 0000000000000000000000000000000000000000..59fa78eb0ebc9e5d8dc3b6989e3eeb22cb31eaec GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDUZEWQfHDplmV$cs`(vRn{ zC{lK9mbje2l-$UFDw`p*i|>CiWA`%Ux6>K^Z(;aEpoGJUMCgst%iBYSoiThlDXj%CUQ)lD;i+8IlN{DK)Ap4~_T za+*9{977~7_x1&fF$HosU6o9GvGnP`aOr(f4*woDa;N>j|1fRGy7^H{?AM%@4FZlj*U%tHD7ss+=p9Sqg-4sN=MbFGNbZ3n@HQCr> zqVb&@-sfVYXD=6YjJ$I8?Bu>9TMW$jFSee&a_r$k235P@Tdc})w{qqHUBlq%>gTe~ HDWM4fdKz5H literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_7.png b/mods/farming/textures/farming_pumpkin_7.png new file mode 100644 index 0000000000000000000000000000000000000000..79190e09ec135158eee1ff6ccff404b3c09eed69 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5oCwkx;TbNTrTaqEyS$I;T)T^NHpy4|Mj|Mzpu>vbYQ|^)hVCM&(t~iHbw0(RbML= zmah3Gt@h`Gi|4L%M=-F@xfeKtWy7R~$2Swo1IjP6&g=HLl(*IF>4wKnd!{A5+gUm{ zeO2c63q7``KVG~!Hj}e9$8>Ya&pUN)FS=&PPvAV>%2j@Hzg29TicRNJ-V9yVJMnV@ RI)ScY@O1TaS?83{1OR`rVs`)l literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_8.png b/mods/farming/textures/farming_pumpkin_8.png new file mode 100644 index 0000000000000000000000000000000000000000..b941442cc236ebf2b29362ba98433dd05c6f9a0e GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5oCn*+_C z`i?bO?9oT2zJA@Z_tzc=+bvnTM?Hg^x>{FESN3CEJB^3;d&QSkaX!YTv5T@7-nA%Y VQ{5#yV>i%c44$rjF6*2UngHtQU9$iH literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_bread.png b/mods/farming/textures/farming_pumpkin_bread.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfae08fd83a2c6ee7a88c67adaceb5f2882215f GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnY1=5pT85V>v?8;?1-@tu$ zisZX(_P0(nyg8fu>ewF_r}R1v5B2yO9RugnGI-hHzX@PHam-GLS`c)I$ztaD0e0stQ@K=%Lu literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_dough.png b/mods/farming/textures/farming_pumpkin_dough.png new file mode 100644 index 0000000000000000000000000000000000000000..62ea7a65ffadc1aac24e9c9fde35a25130509537 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXIvzcu3H!Gcd`y1!gn z{PpUluQ&F6yM6lm{R_f6o7#cO7)yfuf*Bm1-ADs+LOfj@LpZJ{Cmdj(5gW^UprpcM z7iWjyyn7QbzB_Q>fK*^$T%6pq0|`O5xKg$*Gn%o?ZHxPs>1@U`mbC3!w%c0TNMiSn p9ZRgNcN-XJNJ?upt 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/mods/farming/textures/farming_pumpkin_face_on.png b/mods/farming/textures/farming_pumpkin_face_on.png new file mode 100644 index 0000000000000000000000000000000000000000..fa71c9d474c140e8b123c3da04fe468ad6d2846f GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZZ3$?r(G2H0m{6C-J(F)E-+c>|UVfcU7{{PEnvHLM=ff{Ffx;Tb#TxXoXkpG{7 zFZ;nkr+4;FRNM&)qp<%wXz! z_TGcLcbpl_&c2n)cnD+&$;vUOEe=y;U`|#uOKLU(`c2TtSXo$*VNJ5p$41TVzktqU N@O1TaS?83{1OVymUPS-^ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_side.png b/mods/farming/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$KDxKFNRRa>P%mRikY6x^!?PP{ zK#rHEi(?4K_2h&D+!4(p3R^BsQZP`y6MLFlXUV1~=R4UZ_;}Vnd&B9#Hu>_&+U<@! z$7WUP8#{VQ*yi1Dkx<@f&Uh$c9 A`Tzg` literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_top.png b/mods/farming/textures/farming_pumpkin_top.png new file mode 100644 index 0000000000000000000000000000000000000000..79283454ef1f0d5ab418e9c6366b49a5783c1579 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU`;dA-N*M-pFDn@;q;uFcjnxzz0I)a=A7GmZ~ooGP&xPHHo@vWL{YYc}}S{MaAoXQ!pi&F}1CrGevVRa8t`9J@1 z@IU`)$7WBf`tN9RvhB?@u^;;*XE3i3bUAEr!l7wac(HMVX%o-Pg9jRt1bk$cKU3A= zNnllIRXD3)cfw&p+6;>`3TxO7h%~+6TfnGL-^|k}$x_UC?L&hmgXX;B3 zV_4a^lcUAZNp^|EGKQOBDbpK|JagRJ{*Y+`(+oueUIQsHyAwHU5*aS_$jv=bGh_9N eX+e%+3=F%)R;U`^(L4!sID@CFpUXO@geCwLQB*h@_o(N*kEDlq_MDpfx^<_@_uNhOZC!QT2eMpOHmS^?`&TPXZ(4@sY%cA zl0Ne_9U^u^NIGpFGEo8&0@ojGm;88dLFHYfOeTPFrK;OW-U$p&5#YGGh@MlB^Cmfb zWPd}r$K`-w?vG&d7cJ`L!QKv;LafsNG$q1uSqDGCEqex*5DA=q}lDyOs9=l?9XkQhdkU? zdA_gnC*U(5xxYq^mnc9Hh={sk^>o1k?oN@typvRADj-)A^*RU@C?k)O65!6x8m>ZQ z%K4CDF4_M8w$t0Gaoj2sR}(q@zBeSTvO3K#t7hf60d-Vp|FQ~fYG49Q0!V>s?P^~) hprJiz53o6Y;uowDqLJPOy4wH%002ovPDHLkV1k`AU_Af; literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_raspberry_4.png b/mods/farming/textures/farming_raspberry_4.png new file mode 100644 index 0000000000000000000000000000000000000000..32da6b9fb11cb9c6a88566d4b66c4cc1ea7a235f GIT binary patch literal 239 zcmV~)tMMF*!<2lGZ|Ke{5Ga~VrqiGIUOT1y?KgH` zE#s@k{yLBSFpJY|5g#+|E+w|-68HcBWNreOCDPa(%Y>1*AXrsKLb)(zH%7bv6%0#`N>tf{-75Ee|)Ii;1}dZx_t`&rzI{0vRj< p5C!Dg(MAe#Q@ha2uB{L6_XBqktmj>mMT`Id002ovPDHLkV1g?AU84X1 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_raspberry_smoothie.png b/mods/farming/textures/farming_raspberry_smoothie.png new file mode 100644 index 0000000000000000000000000000000000000000..fe178d114214e7f35ed7bf02d40ddf466237088e GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5qYGz*J)c6Q6`?KeBS z%=Px!;o<31CU7t&?oetlF4stYMu@ilNf4KUKTW%b%HA czx*cqoJQtdn-4@818rmQboFyt=akR{0OU1RPyhe` literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_rhubarb.png b/mods/farming/textures/farming_rhubarb.png new file mode 100644 index 0000000000000000000000000000000000000000..7d416ab21b752b0d4c59c01e5abf428d1d072db1 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXI~gZa+;6dc z_CeQcbLKwSwEpe+vjMHf=Yh%?OM?7@862M7NCR>#JY5_^IIbrrD6lv!Fj>tpWg&-X zqF7mj!6XsIpd7Db3l$Xmo@`+en7{ZY&!PoqdCsIKtj|zLk!F}B#dg-tebFSK84RAT KelF{r5}E+AIyGtl literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_rhubarb_1.png b/mods/farming/textures/farming_rhubarb_1.png new file mode 100644 index 0000000000000000000000000000000000000000..01585b1bee3fcf44ad3e39e1cd562728576e0616 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t{=BCWF7Q;bN+muf!bc6 zAY)08UoeBivm0qZj*O>^V+hCf&XcU{2MGR4Gb(9B>i->`1G_C6y4awT*U;M vC3_rrm^GRYHXM{VX3$_X;~@{53LC>^S?05Qc*Pe1jbQL}^>bP0l+XkK&Zs9( literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_rhubarb_3.png b/mods/farming/textures/farming_rhubarb_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b412f7e0105cdf29452d5c44e378ae73745dd3c0 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bKe4jKI@=o z!oo>#3(3IS&|cxLoW%%h0DVbHM{9#=G^)+7>Mg zc=+Jp+zIjmLhQNf#xw+RozDKEWt&^CE*a@_PucJJ3W1 MPgg&ebxsLQ0P7VvcmMzZ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_rhubarb_pie.png b/mods/farming/textures/farming_rhubarb_pie.png new file mode 100644 index 0000000000000000000000000000000000000000..1f77b535cc6a30729099d3ba2f1cbe7f2c8bdf08 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aElDk2Y;Be0Z@k&rWuvF} z?!ch>6rZmA@M+b_%Y#h|fyx+5g8YIR9G=}s19BogT^vI=t|uoPV83ztH1~m$jT<*w zbg(XI)LFpLVP>Y2@Ib)KjF;CmFX2IkNtvh!537+CQ!g_stF*)nBP**W5msRdi7QrC rQZp_!+?sjCN=iY^SW`1$t02SnRKb}pI-9NnEn)C<^>bP0l+XkKFLyjV literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_soil.png b/mods/farming/textures/farming_soil.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd3e681c4c3f74943026d67941e1f03a75d8cbe GIT binary patch literal 706 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47&QZYLR^7dkPrg{3z!5FY%qoj zACm|hg9HZyCj$c$SkOyP!ck4oMO)lOT~vaZK}(25f|bEaRhXZV0f>MaIl#*FCAl<2 z*jzM4Ty?~h`4}A)c{PPt?KMP{c^Kt*n1q=bRCrk=xEU0986`OxWVslmco^k*nT44c z#Mwdm`4||0?gk==lYqvmax=(sFz88e+o=nSF))N!Dw)c0i7+sj$_sdC3VG;?gI%2B*-tAL5ssp zg-ugQ=JU=uj`9Nk{{8*_^zOAo%NAzE^8Wkr>FulM&mKK`aOcLA%jZt--?L|7TSI-Y zt)cF}e?Ncx`2PLeVafjvYCCXwRlio7S(M+S^r<9N}ZCe)ikpO+brY zd%8G=NL=n)e-CV|fjjVi!YBt~8j4oBq$NwtYo?c(at-|KQ;Z)*ex=iq0{<>owioXsq z1ik!ouD*J@sM%aW-=!Po+i&^w^w-O$1utxSnvFerlGdfq=U>%&>050@iqkdj*>7K8 zJlePNw(E6UM$dR}myBgQQ(tAd;k@w1$+=w<)GdgYQ#>vo>l>7bDJ MboFyt=akR{09AqB)&Kwi literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_soil_wet.png b/mods/farming/textures/farming_soil_wet.png new file mode 100644 index 0000000000000000000000000000000000000000..0b4487d8a2460c3d06a49560ca5c5905fba69f30 GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47zG1-LR^7dWWa>P5ny3}a5aQk zlzAD&I2c(N7(8_)M41?z)kK^$g=k&_1z9AS7;Myp6}cH@xEVEsScI4u6nU5>SQz9v8BG<0gupt1 zRs)eLH-jt(gNgvFtqQNLnozKXqA&x4u^hh=Ka(O4g9sx-u(`aRB&P;HqZAW^hk>lM zs-U?nueJzhxSgh{s(_IUzpav(z67Tv50eNVv$>LpFgt@N2LlHK13xPxC@dJEPBoO| zc2*a*m*WYkKbr#-k0=T93--^>2ncORO^Q697xMSp<(hy0etmua=>DBkhxYAWKC!1L z=-=Nzzu&!k`}+0E7tfzOzItWP>gkpLfP%k%e);tA!@F0{pFey2=+VQwH*Q?Jc>dJU z1KT#NTRwkg+w`@aM}T&`_H=O!k+^Jn*0t!cgNWZBPMTc0`OG>O8!?2L;U3OjqcUv+ABv;?~9#d{o(b^nay(07R%SGXNIn&nK znOvFwJ}Nf1EPC0^J6hQZUuDye%goDK+%3E|dFq1YmQz){p2r*YUS{8(#M)%2n9=H@ zmn6v&AfenM{N*640LzLG3TIy2d9bs`we7(TyUla%{dlG4ndTo^!uzW1_O!k{@#e$l z;x^diH(34tvgh~rmvwuu<@&2lSCIU~ZJK2JzAAqFsmt5n?&*{zmPJ9FmS}fu#KGe9b zh&FwWw2Y$OMdVUMIF@m12GebmTEioW4{YNWPoFE0>6BHO&ws73ECr`lAXM;oHJqx6 zu#HoyPma0#p~-fma{BcbC`A)pTOyn_g`yH9D^A)~j?c@4i-3! zNHY|BgOrEpRT;aa!S;ZZ>-a;3B2RG4F~LkhYy(=|C5zb_fn+jzSboK&?-};%l-eE! z3H$Ms$%Bu$c`wmwyA0oN=v{QMYjr-{q^!e?e?FFxr9PM6t~l&`TD2HmU1D~?k4>B- z6_KuE7PB261`g~KiZDcTJc=Y@@vx*-H>i3QHp_%odri0+^5QHbo&=no+X&aK5Dfms zamxg=CBf7o+wBqJIm2O0p&j`9_Z-{SNz^LE+GCj-Pz6 zcb{OZ2+sD9t2So3MNvyECnJ{03Q_O&$PO-!J>&M)!j#+W_Ei>fh3TWo%C~vac*@2v zGnqHJ`_JRq%O=Gpq2nru!L^EPJ~HZ0DD;F)G-f&zM0=l`KQ`n{(6R;b-oPK;a@>d* z+)2nKm1@^U1X+YGA937!O)wavOA(5^B?~j0&JIlpDH=9!-rSQ$GSwrKq)0ew&baTZ z2um2O*K0bLHCheOJcC14LsANww!@d-T@ej7l=Xlory*9Q$2RCwv7RCFkpBT>mv7$x S>1I#>0000~2NA~|><~j58 mwUoq+vj5DhewNC|Dl@d7;PEOytjht^%i!ti=d#Wzp$PzctS;mL literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tomato.png b/mods/farming/textures/farming_tomato.png new file mode 100644 index 0000000000000000000000000000000000000000..586aa56de584ab5f8b9eeb101b430fb075f9c9f9 GIT binary patch literal 488 zcmVP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv00043NklJ3R~Lh!4Iq!i`I%-K~U7Y=v|*PZ?k0!N_!Cu3@^!>nM|^4%>NrJiF7Lj_KN{c3WHmhurOFJ z8&t8_1)&c2W8D1;^E-!oTxo#$rHj4?(-uI@@CvI~WFYK7+`?5(QM(R(?Dv2U)<>xO z5Z3`}M!p0cX+ZEjx*<#yx%d!hV4elx=;>vbs_&uc$(A!J3^R%~wkK!lvI6;>1s;*b z3=DiLK$uZE^yx&PAbW|YuPgg)E*W+$v8qKk&45BuC9V-A!TD(=<%vb93;~Imc_n&& zt|1C##(JiDhKBB+oy>u%EIeHtLoEE0B^(dzi<`%KO6H8iz4$nWQ!=cF*_Y^U`ahrX wNPu3YLT=;T|4$;zo=8vHc0sP6k%xyNK#QN#bJ3nxKr!lvI6;>1s;*b z3=DiLK$uZE^yx&PAbW|YuPgg)E*W+$v8qKk&45BuC9V-A!TD(=<%vb93;~Imc_n&& zt|1C##(JiDhKBB+oy>u%JUm?-LoEE0B^(dzi<`%KO6H8iz4$nWQ!=bq*d)8({CA$Y zr14Vfy8o9?T;*X>IGb{tkLhLi+yBdTH~gM&bGnZyTxZMiWCmtthWm~Zc9Xt@hyu-I N@O1TaS?83{1OSgGMg{-? literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tomato_3.png b/mods/farming/textures/farming_tomato_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3dcf0a1302c0353d2e64930465cb80214af8a4 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DiLK$uZE^yx&PAbW|YuPgg)E*W+$v8qKk&45BuC9V-A!TD(=<%vb93;~Imc_n&& zt|1C##(JiDhKBB+oy>u%l0973YF9D)@w|z zxUlE4_!>>t6_&{p|Nh_7`fZ71(5^FI?N3ZFS@7(OYswA=7Kd4m+njeUY5sE5VY&W> q-~M3|4G#ZL3T(JvD1G1n14E~g#?M+?^V>k{7(8A5T-G@yGywoVyHw}^ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tomato_4.png b/mods/farming/textures/farming_tomato_4.png new file mode 100644 index 0000000000000000000000000000000000000000..27c32828dce42efbb2933fbf355752f46dc0335f GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DiLK$uZE^yx&PAbW|YuPgg)E*W+$v8qKk&45BuC9V-A!TD(=<%vb93;~Imc_n&& zt|1C##(JiDhKBB+oy>u%$~;{hLoEE0B^(dzi<`%KO6H8iz4$nWQ%m?fqBFkBpHh)k zIlt*Q|DgcA%mtOp^?%NCWJqD)aNe14-C^bt<{6Bd4re91-~3;$yG8x%giERG62g}- znl9H@I?Sq&-fYsG)6O-K?~*w4+zopr09PwkEC2ui literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tomato_5.png b/mods/farming/textures/farming_tomato_5.png new file mode 100644 index 0000000000000000000000000000000000000000..f369a68f4f864f7868965b3c05bfb649abb69e2b GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DiLK$uZE^yx&PAbW|YuPgg)E*W+$v8qKk&45BuC9V-A!TD(=<%vb93;~Imc_n&& zt|1C##(JiDhKBB+oy>u%R(iTPhFJI~OE@0b7dMaf)DiwaQNI72XBIFB9aigOoD(Iw zb9VW!MH(tm#vCVppXQ#TSNxaXn8l^}$3fvU9mWi74zms|oAsZ6W(wCf+ng@TOtuy# z)5%XtQUs!szuPb14lQ=ruKAIz^7+jF?2=5}?3-elj1TPR6=6&J@2oa!Vw!-CnNtI! zgjFk#ctZ|1<1L>e9);!$E7J~`Fm!sY5XfBcKZS#Fzp()WgX{d%rxFTE1wcnLc)I$z JtaD0e0sub-W`_U( literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tomato_6.png b/mods/farming/textures/farming_tomato_6.png new file mode 100644 index 0000000000000000000000000000000000000000..0135cb53beaee8d64cf0e39ce57bafabecedd70b GIT binary patch literal 490 zcmV1wBo#8Bznu=<=V)-qia7Mqkx zEdBwpAfciZxAz{4HbpBEi!+^^H|LkGbI2OEjRWWdJZDDu*RP1LLGZoT?fRLU$5i=F44hY9O?q44qdivT}n%bArT#Jg~ z5z=#~0$?SxQVB3hjbp=k=C<|m?v=&8Nd;Kko7Aq(ChELW)1m-OZw)FyA!l>2a3S&S zalOeGa2*#h3N1%;el9$x1QyyP6-9+jPVMx3HDF*~F+0hP;UBBJ(_L#1EG zRt`7Msw$`lI9Ry&^k^m`+B@pU`iM_{h}oz%w3d&{J0jrm3DK1i{Tg9S06-}XkG~GZ zB^YSLN@l%A_P)EKkv0YY^l+Ns8=eSVd$kH8j`v=G09l|0;AD{q_g}PIydph#NF#PH$+i&(I z3YDN2QmJ`57I0t!dL}|qDm71o?huspH3P+-%n3zdcP0o*&k@Ew&b(pf`X#_24RZDS_hy0od5s;07*qo IM6N<$f&{?&$N&HU literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tomato_8.png b/mods/farming/textures/farming_tomato_8.png new file mode 100644 index 0000000000000000000000000000000000000000..0b490257f0dab5ec4a4d4e67775159ea75594e3d GIT binary patch literal 510 zcmVH;LN@>a0cS}>K~y+TwUWI~!!QuXyD+eI zB8lC^B_VY@GL#9aZvaTBYNrN_RSggs6nn!*{k*7aCyUCq=pQ-T!=N zyY??+{RU)x4#wsnPC~MM+Pw^hH=SMUZsNr9A}WjEA3+;GE#9$9n?NGrBW}SWO5x}( z19@e{*oB-jP}6m>4Ma!O)r7+v&tbtbm7kd%V7YsAQ_70+zEBp)ykr=os%Ep+QC1@VtQ#wbaH8_f0+cnIQk0e^10q&wmu zFC!?%9Ms4hoDF@)pBw!`i?Mb5(5LRSU0LMo+-WzY*(s<=dl89ot$o{E+U08ek!WXK zz=r;YKN8-I8Z&4O%@{W2XZ(?*KEz@i(rsW2i@Z0?29#U{CQAK~lrG@J$TH61**oy9 zxK<1OxblH{iS7nmcaK4`LVqhR`S`x|%j~t>x6IT|NsAQD93B4$Y-V` zV67@(ttsNHFYcx*>Tk*$XepE9DLl=Oe{-z#zGQ`inc9cTbaH8#Np!rNCL4H7c$|j$+0P>l{$UdT;yk4ZInNgqIb78> zYu}}-Yjk0m$MP#&JXbhZNP^&&i9Z^8&VIPf${NS?h3~*4H=s2Pp00i_>zopr0L^e- A+5i9m literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tool_diamondhoe.png b/mods/farming/textures/farming_tool_diamondhoe.png new file mode 100644 index 0000000000000000000000000000000000000000..093acb821c6a8da2e1ec642f0f0401fa01b3f587 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!M}SX=D}!$7|NsAm%S&}9^cl+W z8Y=RcDG6As3Rr83I4)V_v~;nvzPR(!#csNyUTaqRoAL%)$^>rO5V&Pij;C<$g>wa$ zFP7iD-u3o1`}*2ypqWf1L4H89%O;<-0P-R|T^vIyZpEJQ6l+ira6WiJ!=igZ!T;G- z7xuVq`n{DS#8{)^()8~Y(;rICeR+e$&a1F6n{Aq*?>06bt03Ob_k^_y7HTiQBgS-x lbq5&682o5Fse9oK+o^3#pNh?erT{Hr@O1TaS?83{1OPfLR!RT> literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tool_mesehoe.png b/mods/farming/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/mods/farming/textures/farming_tool_steelhoe.png b/mods/farming/textures/farming_tool_steelhoe.png new file mode 100644 index 0000000000000000000000000000000000000000..893a6958e4b4d2763513392378c2e1fe92cd2ac8 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!eSlAh>jG=O|Ns9R%JCX1@|h_K zSgQ(HYl=AQi@WKH`kV3wTFT^j3h&*!_sp3yj~+dG{P^*+XV2chfB*UO=kMRY12rlv z`8*G36jMo%AJE9M$!9Hqybw!wLZNn(b-`tCzVFXNC64T9aO~-Gwq^as`jzb~o1v7&mSd9J Z{;g7H>h2IuS_L$p!PC{xWt~$(69CsBRk{EG literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tool_stonehoe.png b/mods/farming/textures/farming_tool_stonehoe.png new file mode 100644 index 0000000000000000000000000000000000000000..4f8dade01c39dad208f481013cffc14369eeb91a GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}RDe&2>jqc8|Ns9R%JCX1@|h_K zSgQ(HYl_&Z2srDDyXlJhoAL%)$|NTzr=+B$rKRO~3g_hHeI=6ciN|m6es1 zmzP&mR8&@0R##Wo)YR11*EcjYG&MCXo3?H>&=#hWAU~jOWs}cZfb8^iaSV|Nk3D0~ z)Sw{3axu`bDe2t3|Fgst>h9*nZFJc$c<|cXaQ+7NjOV2jfM3|Ns9R%JCX1@|h_K zSgQ(HYl=AQi@WKH`kV3wTFOM)ibvVh@`s7rMpSxcnX)^z7+~IgsCLR z4`^7~#t_#CmVH Q15Ib}boFyt=akR{0M|c8ZvX%Q literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_trellis.png b/mods/farming/textures/farming_trellis.png new file mode 100644 index 0000000000000000000000000000000000000000..855b932608cdcc2e22e7751858e4d0014b721735 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=>VS)S4Rd07h@SObLkj&)f7LS zj6nVVBHN`6K5N>8n{0mQ0F^P81o;IsI6S+N2IQ1^x;TbtoKH?*U@~LwV-QGbXe`=l z^4+Z8sC-Am>`w0v?+u>;7#+*Z=EaM zw?66EcHjN$UFP>Vu3EMD;^DZZlbjwsdT{x8)Akkdd)7v7THv>8y4&_8*2j(=oHc9m z$z9o7wY5`$rZAQS`2{mLJiCzwlo8NZu>H-brP(K~|(phXOxu6{1-oD!M<;EG@u literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_wheat_1.png b/mods/farming/textures/farming_wheat_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c16ad94ba4e9989dd795c452559376ea2137d78b GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=9Yr1Ue5HHSX6f+M=Q~ zYo{boh_NKdFPOpM*^M+HN8HoJF@)oKvP8xM1|=4W84^4a5|S(;3~VV3TOtB)Z38M{ N@O1TaS?83{1OQMF9ZdiL literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_wheat_2.png b/mods/farming/textures/farming_wheat_2.png new file mode 100644 index 0000000000000000000000000000000000000000..baddb4c544c6ea55d23c5dec5462e351c0f80c54 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ1=3wxO(*WOis%vDe8I1J zrB3l;b^H6RpMVmKB|(0{3=Yq3qyahVo-U3d9M_W<=yNa#vhn!vF!7w>VdLV_abQz! jW}J`^;*pRTP{6<-pT?xP*61c5Pz!^ntDnm{r-UW|z&Rvh literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_wheat_3.png b/mods/farming/textures/farming_wheat_3.png new file mode 100644 index 0000000000000000000000000000000000000000..36ebb1929de7851303f7b7da7a46fe831765608f GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU1=7oRg-u%NdiX-lntjog zlXa)B_1J%|{C~fqJ5Y|XB*-tA!Qt7BG$6;x)5S4_<9hM}Mh^x-Mjjm=CZ07sjC?$2 z9N3hd873r@1SF&t7$gX!gm@&B2n3{Pr0E1ChzWS42qXmt1cU?xurVyGV&j}_c4jru OGzL#sKbLh*2~7aHK`<)- literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_wheat_4.png b/mods/farming/textures/farming_wheat_4.png new file mode 100644 index 0000000000000000000000000000000000000000..735ed7772e5ed4e8ecf29004ce2fc92fc3001247 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeX1=8yeCePUzxb3x$}4MW-^nS{=7dR2o)#&6-Tm*+8s;xLd_unYEgOKA OF?hQAxvX9s(+5ED7=pW^j0RBMrzY^mK6y;kcfx zz^0S%ASuBkAtC7j!z70^W@heYh6$G+95`@J@4(R$7ZeUWIPqe^fpZT64k?^iG2y@q zg#{-J<`yTY8L2jYFgCPWYsLW_)yD%7EVQ;MLk?xjf`9ed6rv>PMO`bP0l+XkKd0|`D literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_wheat_7.png b/mods/farming/textures/farming_wheat_7.png new file mode 100644 index 0000000000000000000000000000000000000000..cc26ca96990f96f8fe71d5c3eed9d0eea3bb7c2e GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW1=42^r0?G1yl-9Ds>LRk zj^=EhYw_T6>gAKMhqp$qS!#Crc>12re#f@OT}v_e094Ib666=m;PC858j#cI>Eal| zaXqzTBQKMoi1Xix@0<#cx*IU@hS*8nQV|kjb-khBePQ`x+dQTzflFvXs>=mhV;2emCjG1i2d=>Yi4QG+X_?w&uF`J&|NjKx2-V2i> z8I~wss2>uhpfH0;Q;cQ6mTSUj*^G3scIec@IkN4fjwkQ5J3rKu+S3!)(;3JQS_PpA z-;0E(n_uCPBcg(a93^6ni1$PrHQeA-jcoLXQ_goZLEjMb50^^>=YLuCB>(^b07*qo IM6N<$f*<&P1^@s6 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_wheat_seed.png b/mods/farming/textures/farming_wheat_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..a9031fba979d5fd323ce9f5200f6ede53b2e733f GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ^~o&Uwme~4v(x#*or@>< z%7V@L&K@&PuV1Rg~;HfM?GGmNJaLK%Y3 kFmc!!9azVD)2D`kVexq;Szopr0Jyg)f&c&j literal 0 HcmV?d00001 diff --git a/mods/farming/textures/strawberry.png b/mods/farming/textures/strawberry.png new file mode 100644 index 0000000000000000000000000000000000000000..5b43e6bc99bc21663a9e91440fcc97a2320b5adf GIT binary patch literal 382 zcmV-^0fGLBP)U1tMAsC~XQXdKo#37T$6IK&m1K!cZOn z0004WQchC^n!~IR0GvPyIJQwW;ofr5@vS_Kk7&-n<{r4R7rea`}dn-usvKah|<3eHx&}k07WI z`e^tbA;t*d0!DATge86gx><#a56X$J{usBwLD+9@5O}LQAv0evdU2--{q|!1v(hB0g#UjTEfK8F8}}l07*qoM6N<$f~dNbB>(^b literal 0 HcmV?d00001 diff --git a/mods/farming/textures/vessels_drinking_cup.png b/mods/farming/textures/vessels_drinking_cup.png new file mode 100644 index 0000000000000000000000000000000000000000..2eba2321a5cf7650e0f3c0ced4896138f1da997e GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b;OkH}&M25w;xW@MN(M*=9wUgGKN z%6^Z7jaSIrGOINgC}ia6;uyklJvm{4fPu8MwzM>Zq>jS8Zl);@4>V0b$Z_Rh5=+P# mg+m7(aF}&mJnGue$jGpSjrr{wFMmy-ZU#?RKbLh*2~7Ypr#ry_ literal 0 HcmV?d00001 diff --git a/mods/farming/tomato.lua b/mods/farming/tomato.lua new file mode 100644 index 0000000..1ed7870 --- /dev/null +++ b/mods/farming/tomato.lua @@ -0,0 +1,78 @@ + +--[[ + 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", + 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/mods/farming/wheat.lua b/mods/farming/wheat.lua new file mode 100644 index 0000000..65e5ce6 --- /dev/null +++ b/mods/farming/wheat.lua @@ -0,0 +1,154 @@ + +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}, + 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", +}) + +-- straw +minetest.register_node("farming:straw", { + description = S("Straw"), + tiles = {"farming_straw.png"}, + is_ground_content = false, + groups = {snappy = 3, flammable = 4}, + 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"}, + } +}) + +-- flour +minetest.register_craftitem("farming:flour", { + description = S("Flour"), + inventory_image = "farming_flour.png", +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = {"farming:wheat", "farming:wheat", "farming:wheat", "farming:wheat"} +}) + +-- bread +minetest.register_craftitem("farming:bread", { + description = S("Bread"), + inventory_image = "farming_bread.png", + on_use = minetest.item_eat(5), +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" +}) + +-- wheat definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_wheat_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: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))