From 5d11a34b04da7ea4f677cfca17e8397d3730540f Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Sun, 11 Nov 2012 11:47:53 +0100 Subject: [PATCH] Add farming mod --- mods/default/nodes.lua | 2 +- mods/farming/README.txt | 57 ++ mods/farming/depends.txt | 2 + mods/farming/init.lua | 492 ++++++++++++++++++ mods/farming/textures/farming_bread.png | Bin 0 -> 559 bytes mods/farming/textures/farming_cotton_1.png | Bin 0 -> 145 bytes mods/farming/textures/farming_cotton_2.png | Bin 0 -> 183 bytes mods/farming/textures/farming_cotton_3.png | Bin 0 -> 230 bytes mods/farming/textures/farming_cotton_4.png | Bin 0 -> 285 bytes mods/farming/textures/farming_cotton_5.png | Bin 0 -> 347 bytes mods/farming/textures/farming_cotton_6.png | Bin 0 -> 506 bytes mods/farming/textures/farming_cotton_7.png | Bin 0 -> 512 bytes mods/farming/textures/farming_cotton_8.png | Bin 0 -> 468 bytes mods/farming/textures/farming_cotton_seed.png | Bin 0 -> 485 bytes mods/farming/textures/farming_flour.png | Bin 0 -> 459 bytes mods/farming/textures/farming_soil.png | Bin 0 -> 883 bytes mods/farming/textures/farming_soil_wet.png | Bin 0 -> 823 bytes .../textures/farming_soil_wet_side.png | Bin 0 -> 889 bytes mods/farming/textures/farming_string.png | Bin 0 -> 367 bytes .../textures/farming_tool_bronzehoe.png | Bin 0 -> 334 bytes .../textures/farming_tool_steelhoe.png | Bin 0 -> 331 bytes .../textures/farming_tool_stonehoe.png | Bin 0 -> 362 bytes .../farming/textures/farming_tool_woodhoe.png | Bin 0 -> 285 bytes mods/farming/textures/farming_wheat.png | Bin 0 -> 658 bytes mods/farming/textures/farming_wheat_1.png | Bin 0 -> 159 bytes mods/farming/textures/farming_wheat_2.png | Bin 0 -> 209 bytes mods/farming/textures/farming_wheat_3.png | Bin 0 -> 261 bytes mods/farming/textures/farming_wheat_4.png | Bin 0 -> 304 bytes mods/farming/textures/farming_wheat_5.png | Bin 0 -> 454 bytes mods/farming/textures/farming_wheat_6.png | Bin 0 -> 607 bytes mods/farming/textures/farming_wheat_7.png | Bin 0 -> 676 bytes mods/farming/textures/farming_wheat_8.png | Bin 0 -> 811 bytes mods/farming/textures/farming_wheat_seed.png | Bin 0 -> 467 bytes 33 files changed, 552 insertions(+), 1 deletion(-) create mode 100644 mods/farming/README.txt create mode 100644 mods/farming/depends.txt create mode 100644 mods/farming/init.lua create mode 100644 mods/farming/textures/farming_bread.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_flour.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_string.png create mode 100644 mods/farming/textures/farming_tool_bronzehoe.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_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 diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index e2f81aa4..3a0cf49e 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -1125,7 +1125,7 @@ minetest.register_node("default:apple", { fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2} }, groups = {fleshy=3,dig_immediate=3,flammable=2,leafdecay=1,leafdecay_drop=1}, - on_use = minetest.item_eat(4), + on_use = minetest.item_eat(1), sounds = default.node_sound_defaults(), after_place_node = function(pos, placer, itemstack) if placer:is_player() then diff --git a/mods/farming/README.txt b/mods/farming/README.txt new file mode 100644 index 00000000..b92e0bee --- /dev/null +++ b/mods/farming/README.txt @@ -0,0 +1,57 @@ +Minetest 0.4 mod: farming +========================= + +License of source code: +----------------------- +Copyright (C) 2012-2013 PilzAdam + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + +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 + +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 diff --git a/mods/farming/depends.txt b/mods/farming/depends.txt new file mode 100644 index 00000000..470ec30b --- /dev/null +++ b/mods/farming/depends.txt @@ -0,0 +1,2 @@ +default +wool diff --git a/mods/farming/init.lua b/mods/farming/init.lua new file mode 100644 index 00000000..1fc22a8c --- /dev/null +++ b/mods/farming/init.lua @@ -0,0 +1,492 @@ +-- Minetest 0.4 mod: farming +-- See README.txt for licensing and other information. + +-- +-- Soil +-- +minetest.register_node("farming:soil", { + description = "Soil", + tiles = {"farming_soil.png", "default_dirt.png"}, + drop = "default:dirt", + is_ground_content = true, + groups = {crumbly=3, not_in_creative_inventory=1, soil=2}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("farming:soil_wet", { + description = "Wet Soil", + tiles = {"farming_soil_wet.png", "farming_soil_wet_side.png"}, + drop = "default:dirt", + is_ground_content = true, + groups = {crumbly=3, not_in_creative_inventory=1, soil=3}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_abm({ + nodenames = {"farming:soil", "farming:soil_wet"}, + interval = 15, + chance = 4, + action = function(pos, node) + pos.y = pos.y+1 + local nn = minetest.env:get_node(pos).name + pos.y = pos.y-1 + if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].walkable then + minetest.env:set_node(pos, {name="default:dirt"}) + end + -- check if there is water nearby + if minetest.env:find_node_near(pos, 3, {"group:water"}) then + -- if it is dry soil turn it into wet soil + if node.name == "farming:soil" then + minetest.env:set_node(pos, {name="farming:soil_wet"}) + end + else + -- turn it back into dirt if it is already dry + if node.name == "farming:soil" then + -- only turn it back if there is no plant on top of it + if minetest.get_item_group(nn, "plant") == 0 then + minetest.env:set_node(pos, {name="default:dirt"}) + end + + -- if its wet turn it back into dry soil + elseif node.name == "farming:soil_wet" then + minetest.env:set_node(pos, {name="farming:soil"}) + end + end + end, +}) + +-- +-- Hoes +-- +-- turns nodes with group soil=1 into soil; drop seeds if plowing grass +local function hoe_on_use(itemstack, user, pointed_thing, uses) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return + end + if pt.type ~= "node" then + return + end + + local under = minetest.env:get_node(pt.under) + local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + local above = minetest.env:get_node(p) + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return + end + if not minetest.registered_nodes[above.name] then + return + end + + -- check if the node above the pointed thing is air + if above.name ~= "air" then + return + end + + -- check if pointing at 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.env:set_node(pt.under, {name="farming:soil"}) + minetest.sound_play("default_dig_crumbly", { + pos = pt.under, + gain = 0.5, + }) + itemstack:add_wear(65535/(uses-1)) + return itemstack +end + +minetest.register_tool("farming:hoe_wood", { + description = "Wooden Hoe", + inventory_image = "farming_tool_woodhoe.png", + + on_use = function(itemstack, user, pointed_thing) + return hoe_on_use(itemstack, user, pointed_thing, 30) + end, +}) + +minetest.register_tool("farming:hoe_stone", { + description = "Stone Hoe", + inventory_image = "farming_tool_stonehoe.png", + + on_use = function(itemstack, user, pointed_thing) + return hoe_on_use(itemstack, user, pointed_thing, 90) + end, +}) + +minetest.register_tool("farming:hoe_steel", { + description = "Steel Hoe", + inventory_image = "farming_tool_steelhoe.png", + + on_use = function(itemstack, user, pointed_thing) + return hoe_on_use(itemstack, user, pointed_thing, 200) + end, +}) + +minetest.register_tool("farming:hoe_bronze", { + description = "Bronze Hoe", + inventory_image = "farming_tool_bronzehoe.png", + + on_use = function(itemstack, user, pointed_thing) + return hoe_on_use(itemstack, user, pointed_thing, 220) + end, +}) + +minetest.register_craft({ + output = "farming:hoe_wood", + recipe = { + {"group:wood", "group:wood"}, + {"", "default:stick"}, + {"", "default:stick"}, + } +}) + +minetest.register_craft({ + output = "farming:hoe_stone", + recipe = { + {"group:stone", "group:stone"}, + {"", "default:stick"}, + {"", "default:stick"}, + } +}) + +minetest.register_craft({ + output = "farming:hoe_steel", + recipe = { + {"default:steel_ingot", "default:steel_ingot"}, + {"", "default:stick"}, + {"", "default:stick"}, + } +}) + +minetest.register_craft({ + output = "farming:hoe_bronze", + recipe = { + {"default:bronze_ingot", "default:bronze_ingot"}, + {"", "default:stick"}, + {"", "default:stick"}, + } +}) + +-- +-- Override grass for drops +-- +minetest.register_node(":default:grass_1", { + description = "Grass", + drawtype = "plantlike", + tiles = {"default_grass_1.png"}, + -- use a bigger inventory image + inventory_image = "default_grass_3.png", + wield_image = "default_grass_3.png", + paramtype = "light", + walkable = false, + buildable_to = true, + drop = { + max_items = 1, + items = { + {items = {'farming:seed'},rarity = 20}, + {items = {'default:grass_1'}}, + } + }, + groups = {snappy=3,flammable=3,flora=1,attached_node=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + on_place = function(itemstack, placer, pointed_thing) + -- place a random grass node + local stack = ItemStack("default:grass_"..math.random(1,5)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:grass_1 "..itemstack:get_count()-(1-ret:get_count())) + end, +}) + +for i=2,5 do + minetest.register_node(":default:grass_"..i, { + description = "Grass", + drawtype = "plantlike", + tiles = {"default_grass_"..i..".png"}, + inventory_image = "default_grass_"..i..".png", + wield_image = "default_grass_"..i..".png", + paramtype = "light", + walkable = false, + buildable_to = true, + is_ground_content = true, + drop = { + max_items = 1, + items = { + {items = {'farming:seed_wheat'},rarity = 20}, + {items = {'default:grass_1'}}, + } + }, + groups = {snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + }) +end + +minetest.register_node(":default:junglegrass", { + description = "Jungle Grass", + drawtype = "plantlike", + visual_scale = 1.3, + tiles = {"default_junglegrass.png"}, + inventory_image = "default_junglegrass.png", + wield_image = "default_junglegrass.png", + paramtype = "light", + walkable = false, + buildable_to = true, + is_ground_content = true, + drop = { + max_items = 1, + items = { + {items = {'farming:seed_cotton'},rarity = 20}, + {items = {'default:junglegrass'}}, + } + }, + groups = {snappy=3,flammable=2,flora=1,attached_node=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, +}) + +-- +-- Place seeds +-- +local function place_seed(itemstack, placer, pointed_thing, plantname) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return + end + if pt.type ~= "node" then + return + end + + local under = minetest.env:get_node(pt.under) + local above = minetest.env:get_node(pt.above) + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return + end + if not minetest.registered_nodes[above.name] then + return + end + + -- check if pointing at the top of the node + if pt.above.y ~= pt.under.y+1 then + return + end + + -- check if you can replace the node above the pointed node + if not minetest.registered_nodes[above.name].buildable_to then + return + end + + -- check if pointing at soil + if minetest.get_item_group(under.name, "soil") <= 1 then + return + end + + -- add the node and remove 1 item from the itemstack + minetest.env:add_node(pt.above, {name=plantname}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack +end + +-- +-- Wheat +-- +minetest.register_craftitem("farming:seed_wheat", { + description = "Wheat Seed", + inventory_image = "farming_wheat_seed.png", + on_place = function(itemstack, placer, pointed_thing) + return place_seed(itemstack, placer, pointed_thing, "farming:wheat_1") + end, +}) + +minetest.register_craftitem("farming:wheat", { + description = "Wheat", + inventory_image = "farming_wheat.png", +}) + +minetest.register_craftitem("farming:flour", { + description = "Flour", + inventory_image = "farming_flour.png", +}) + +minetest.register_craftitem("farming:bread", { + description = "Bread", + inventory_image = "farming_bread.png", + on_use = minetest.item_eat(4), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = {"farming:wheat", "farming:wheat", "farming:wheat", "farming:wheat"} +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" +}) + +for i=1,8 do + local drop = { + items = { + {items = {'farming:wheat'},rarity=9-i}, + {items = {'farming:wheat'},rarity=18-i*2}, + {items = {'farming:seed_wheat'},rarity=9-i}, + {items = {'farming:seed_wheat'},rarity=18-i*2}, + } + } + minetest.register_node("farming:wheat_"..i, { + drawtype = "plantlike", + tiles = {"farming_wheat_"..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 = {snappy=3,flammable=2,plant=1,wheat=i,not_in_creative_inventory=1,attached_node=1}, + sounds = default.node_sound_leaves_defaults(), + }) +end + +minetest.register_abm({ + nodenames = {"group:wheat"}, + neighbors = {"group:soil"}, + interval = 90, + chance = 2, + action = function(pos, node) + -- return if already full grown + if minetest.get_item_group(node.name, "wheat") == 8 then + return + end + + -- check if on wet soil + pos.y = pos.y-1 + local n = minetest.env:get_node(pos) + if minetest.get_item_group(n.name, "soil") < 3 then + return + end + pos.y = pos.y+1 + + -- check light + if not minetest.env:get_node_light(pos) then + return + end + if minetest.env:get_node_light(pos) < 13 then + return + end + + -- grow + local height = minetest.get_item_group(node.name, "wheat") + 1 + minetest.env:set_node(pos, {name="farming:wheat_"..height}) + end +}) + +-- +-- Cotton +-- +minetest.register_craftitem("farming:seed_cotton", { + description = "Cotton Seed", + inventory_image = "farming_cotton_seed.png", + on_place = function(itemstack, placer, pointed_thing) + return place_seed(itemstack, placer, pointed_thing, "farming:cotton_1") + end, +}) + +minetest.register_craftitem("farming:string", { + description = "String", + inventory_image = "farming_string.png", +}) + +minetest.register_craft({ + output = "wool:white", + recipe = { + {"farming:string", "farming:string"}, + {"farming:string", "farming:string"}, + } +}) + +for i=1,8 do + local drop = { + items = { + {items = {'farming:string'},rarity=9-i}, + {items = {'farming:string'},rarity=18-i*2}, + {items = {'farming:string'},rarity=27-i*3}, + {items = {'farming:seed_cotton'},rarity=9-i}, + {items = {'farming:seed_cotton'},rarity=18-i*2}, + {items = {'farming:seed_cotton'},rarity=27-i*3}, + } + } + minetest.register_node("farming:cotton_"..i, { + drawtype = "plantlike", + tiles = {"farming_cotton_"..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 = {snappy=3,flammable=2,plant=1,cotton=i,not_in_creative_inventory=1,attached_node=1}, + sounds = default.node_sound_leaves_defaults(), + }) +end + +minetest.register_abm({ + nodenames = {"group:cotton"}, + neighbors = {"group:soil"}, + interval = 80, + chance = 2, + action = function(pos, node) + -- return if already full grown + if minetest.get_item_group(node.name, "cotton") == 8 then + return + end + + -- check if on wet soil + pos.y = pos.y-1 + local n = minetest.env:get_node(pos) + if minetest.get_item_group(n.name, "soil") < 3 then + return + end + pos.y = pos.y+1 + + -- check light + if not minetest.env:get_node_light(pos) then + return + end + if minetest.env:get_node_light(pos) < 13 then + return + end + + -- grow + local height = minetest.get_item_group(node.name, "cotton") + 1 + minetest.env:set_node(pos, {name="farming:cotton_"..height}) + end +}) diff --git a/mods/farming/textures/farming_bread.png b/mods/farming/textures/farming_bread.png new file mode 100644 index 0000000000000000000000000000000000000000..e508cc7f1d9d6de091a4cd55f086a46777883d65 GIT binary patch literal 559 zcmV+~0?_@5P))6qo)~l$sNpn&$8HBLwIn}LDn9cJbo`0qo0SG;?{XE z)7O>#E~_Xnlf;vYPq=|X2A(dCAr_~T6C_v{Cy4MACFHCAp5NHmc<^A{XE z)7O>#E~_Xnlf;vYPq=|XVV*9IAr_~T6C_v{Cx|>?*_O8H|HPlmc1`+UxH9#S+K=z= z>)EPTC|*;$^xr?e?wrRY#^dMg694>pYt9S;+{VIj*Eczopr070TWz5oCK literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cotton_3.png b/mods/farming/textures/farming_cotton_3.png new file mode 100644 index 0000000000000000000000000000000000000000..eaec6d06cba3d3732580a69b19b261dfa4c6faad GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#E~_Xnlf;vYPq=|Xt)4E9Ar_~T6C_v{CtP5(<=yyy$CDi2l#Qnh6^mPbSV-jb z8j9YMIQi%Q$ItxCj?8>>s*e1a|Iog9;xv|3iak6$%k}NkRWcZunVAny-0UyW`or>p z-!_v8|IQye)N=WD&kmKCwIcuP|NorbII(f!!w)x)TU>o;QuTe~?;af;AD;h`{~q&J ZF#PjZ+UzS^coOI!22WQ%mvv4FO#rn)Rrvq_ 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..38404b3dd6d5b0aa5f5af686bdd5e3948bbfc699 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#E~_XnljP)USLOnR_ISEDhFF|VPLNfiCq11ndbm$0w<*%`dKx%19{`}%(m%NUuNnGg5J*GtIsJpE^EU|_IghW3HnVza6L z|9`!m-}ZR=d?TSRleg~sQXib_DYD#Zrsf}Y2{wZd?tUGO^V?-z-+X_+pT|YIpy+ez zvG?|Mhm((9b^2(}Zq4n-T=47U#gKphfj}}Ma)xBt{2k{#ws0pT{D0Zr6Tk0o(vN?S e&F>j7GrV79Z?j=0$1b2h7(8A5T-G@yGywp8hII)5 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cotton_5.png b/mods/farming/textures/farming_cotton_5.png new file mode 100644 index 0000000000000000000000000000000000000000..0d4b4d21aa15fc59d310f810286fda7b1ddbb446 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#E~_XnlN8teR&}7zFHaZ85R21qgKYho90h8v+h4n{>1lo9U?=5~Fi}EJ{Ate& zhor;npRzZwvhv0??PYX+E*}taj4k}#p>1qA-@0l2yyry+F1nv%Yn&eb(y2Op rB8B7d%R9H+&5}g)TihRA-xBYzHsF56hQq&sp}^qj>gTe~DWM4fWg?8_ 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..8b2b3deb18d531aa86e4238b26ff57f67eac6a7c GIT binary patch literal 506 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 BXaN8K literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_soil_wet_side.png b/mods/farming/textures/farming_soil_wet_side.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5b252d8845e35c2399f7ba2cf16609fc774e93 GIT binary patch literal 889 zcmV-<1BU#GP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00QAjL_t(I%QcT%Ph4dfg`fBP z_MSb=kpbpF1WM@$r4Xp5*m$Rji8uOZ{006pqu$sw(WXHIt+ka-12e0d1rMIES70P2+z z0M$x?;&P6ketSdU0}9^$y*g*_+HBO8X>M;4Sc`LxmuDALSIZ>Hm~=R%kjv5z6XrlM zYxw-|KB9^zBIL6^4|lg{U0l+=iBJV2!eBT>L_m~}eS6WxT1z?{(F+rdQ&3f&{eI3> z?*?7mX|LBSMDd7|&-SQS3dF++Njm0>#}AmyX9T`Sknyn9fFCy+tAtU?O*A5(4-kPk z8FRF^$#^tot+7gAEMc6mGWd?O95BCn1w3xsEk^K+>+1JCl4u>3jF-bAEc8hjg=w`72HCJ(-F?WU@}DnjDR(Q z`ReID-+g<6HG&|d@qnFs4RoP|(FiwF5SYwn?Cvx;-rZn2gIti|;L}ayn`T+-Yh}`8 zK(SPy-HUJw#W}}Sm>>e4g?x}ql*)P9*S9$5P*s)!pGW)m z`TENP3b_pJFv1IOVwSQ#3kNtjIod%LetmwgTe~DWM4f D*65B` literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tool_bronzehoe.png b/mods/farming/textures/farming_tool_bronzehoe.png new file mode 100644 index 0000000000000000000000000000000000000000..8c608a0e60cf7dfcf835c16237acecb1e0f5adbb GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DinK$vl=HlH+5kiEpy*OmP)t0=D`({iaSkTJJCT^vI!PA4ZU5HL6-@n2ozkNZT8 ziUS^#7!3>#w?Ew9#=+dYw~;BZ?ctOL$s-3C4A0bSDl^-&8y|jjxIEyC!9yd3WNzlg zhnd)pN#{#Q@WoXe0E5FPPd-?3y{*_lz2+|Kx$D*bk9j0TTn}#2Ne=Rw zlFG>tQP^km?9?hp@yrL`T(&>&j?DkLr3_(uV2Uee~Ll3M%R`pLJf;FI1UGFVUl2VTwr_NS+jM@C9d5Si4F{2n$I?C_Rp1% zyI)i&df>$O+PAy(?#p{W`P*l5K5~uOqb!C4r-Q@g-`}_2&OSfcxS!qj?*-AEa=yP8 zUB0+aj#`myJU#Vf(pJIK>$k30b;{=qpM}}%%@%!(CpN8-EI5}lWtnELuE|WsNh&M1 zUd&A17jiT)r2cqnrTo_?4?oY{_tJc;uieG7C#(N537yK-Y3f-N4-5hZPgg&ebxsLQ E06HR)=l}o! literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tool_woodhoe.png b/mods/farming/textures/farming_tool_woodhoe.png new file mode 100644 index 0000000000000000000000000000000000000000..2a059f613c566f1391db88bcb22e765d64af241b GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DinK$vl=HlH+5kiEpy*OmPaH=D4KXuyzvrcy1pSa>?K-XjYsuEtt*^)rFoY*GG#h`G+ WUitT5wu3-dGkCiCxvXNklWx0-{2M4GT1p=t7Orr3;t- z2W$wT1g&A?PFF5XaOF~r3k``SMk7%PHI$$U!8S^TzG>&#>zzw5!nh%x%2 zeRF{S4DxsX;_GoHNfd2C8H@qlLrId)%&^YW##d3O*h4{Mz=o(BCN<9MN0ytx3SHFt!7T(UIscCQ=bsCGs z28KpwNcJ7~plRXE$UWi}l?Ngk@j>#(aWqVkU0DVtJ&3j+gRZym;^}SY2Z7RE|NjY) zWf|MQ@&X%DWe`H3C=xf*gHWgkCO6qMTO#iQT)))8zO5G#iz>otMi{mVIS!GahGL@8 z%k|6huKIm@aOL6=R;`(cxBGGH=2{XE z)7O>#E~_XnlMo9FuP9K+&eO#)#Nu>vf&}a01QDK~3v~*Q>^Ejb^SAs>Zz|l?=lVB2 zAtB+%@elotK(H`1U*pb#S-y-BH~-iDPiJ75I$b3FS5A@)&?E*=S3j3^P6{XE z)7O>#E~_XnlMo9FuP9Kcz|+Ms#Nu>vf&}a01d#+*VgC02>QQeOcKr8w(G-90e~Y(} z(SzH|<9Q00tG>1TNl!>f`0@L>JTnj+eji`|fNOVI%K_f(`%)a~n>QIN^CYAuCj!+Z wJb0E4Qk(GOKYyaI@+9k-GX!MJ{L{XE z)7O>#E~_XnlW;M!Z8K14iKmNWh{fsT1PRu~4Ppte)=l`oWJS7@c*64()u`h8%NqVm zu>JYXU3g$oupvwAA@viTFPqlSuQxIP0VBb(gU8G73$UHBl=(To5eS;QS(7d-k1uGQ zySnz_x|v&SCC)v2l;|w+;qh(#DFzQ5xVYu&%9a=;wQc_Y@8|IYSN2{XE z)7O>#E~_XnlW;M!Z8K2lyr+v}h{fr*6HoIUbP#FV|579B(X5W=LV|JUy<83*@{;1d z=dpFmiwGX$Q%*g3vdQEs`)>or1s6Z%o@1ZybR*^A zyAESslifj87hZ-jS{zv!IVDKyPEIx3_FHm(WyMh|#ftYUEH${esQtSKpE!fq?TJBN z4|lk}eP49VCw2dX?vMi2tyL#wTCHE}oPNM1?-)3xW{qwo&}$5yu6{1-oD!M<1fhCk literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_wheat_5.png b/mods/farming/textures/farming_wheat_5.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc98f7c6a9c1aa92d1f57838991f4aac65e3d47 GIT binary patch literal 454 zcmV;%0XhDOP)+ z|M~m5zFd>v@Qv?47)C!9-(Iha0dRM-5pR8csl|k^_@JpjKk5YT>k}vCf&gSPc1-AY zy90&CJM#iyCVCa7=ZZ=x1wgYI0&se?AP*1sv8Y-q#A(v$Bmj*@_;~}zu>i1>2>?2w zFjv@9{r5h8QC$+(4FE7r17m+HD*!>DH%A>EdpP}BWp6Vlv-z?DaNh#*D~Afewi6h` zz0HnDu$>c>LPVdSR`;kB z^P-RZ wqYb*kS!GdL?TD0P#<5#L2Y`34h3|)a01+dQaz?hkEC2ui07*qoM6N<$g5C$bj{pDw literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_wheat_6.png b/mods/farming/textures/farming_wheat_6.png new file mode 100644 index 0000000000000000000000000000000000000000..75cf64867f7029a6e402cdd223fc8d82e2260404 GIT binary patch literal 607 zcmV-l0-*hgP) zQ3D@$X6~8$YjK)83K6vJtbXTkzTfZpe$N;FuQfe>TV_Aqk$=Is8#fD!KAHMB0OPMa zB$04AeDZ<%6L8{PrxZ&edg?=0q`0FoNh)bM{bE2}I`&uf#_dV;>YCx>%bNnQ|L8q6 zF*O6go?RJyKiHtywaJ>+n(uQz(G6Q;)NiRNt*;vZ_8qyazRZ3DVDkMfQOe@q7H$Z@ zp%dL|X>lHX;MjdNJ@Yjp5UE6SscdIQtH{pM;yj}RZ35uBE*c;ebIJ8K3qUMpGZ^k` zl0?FS4j%7Tlb@|f+m%tJkce0VWG}u@%CU!4P&(yt=F)QoFgDaG##n1lAGb(32&16& zU{6*6;&Bgv>cvW>mRTiKoWE930L8#??rL5Ec&>x4253z9+qVUpN=SdtDFImZ%j5@I zt#4hcj^ik_<2V3#p0nwXMTE;8uT<_)R_c;5ioO-tmWeYqbk-8DmC@xOr2pY*Dfu?> zy}L7(pkfOcie_b{MEmu;Dh#&C!txr;7e-XBw^_8-Xsw|>oxp^K;l3vMF}KW{k#=!B t#j__ZVvHf3w)NiGkRqM%qE`k%z%O?i$i?-kOZ)%;002ovPDHLkV1iI04<7&k 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..b12686dd642b3310afd6403598d55a300674e858 GIT binary patch literal 676 zcmV;V0$crwP)@(AT!)9 zUcrE89;U=A8f~({MQ4Un0#GWM9^(lI0Hsvba-|Y+@yfIUD3(JmUwfheHa#D`kt-Te z2xE88iG(IG2tsB?Is~Au)?(~Vn*h|hHko15Zn-4r?K@yQ3fne-m8{33kw*udh_CIF6Oj79=Aj@b=AsNlLbYVv+c z&UQ_x>2yl8hM0;`k%*OS9!FWk>==8KF28erHQ6ha34CEsvX(yv$@*uv7{;;y0000< KMNUMnLSTZU@GC$e}?Fz)Sxf3Bw_ zaR9)Dvqw#RDCB|tZ^^}PUpHE7_8oXv06u;1+2oOjA56Qw0(JS^u^q%D4lw2xf#sDB z0CD6}6n1{){4sO)*l_B53K2oI*S5HF-X5tcLl{_6f$tDUJ^=kplf)hX-Clt)hR#L? zfVy*cNM2|FTvs7tksf+-S_Tq(U?6r$yEy;`!S`UO7Lddq>i+$2%cWoc1YqBRX(_8) zo?QI-cL1)gb_oKOG5Ok8VwCkRFG{{!c+sqPGWwb3iN?Hqzxa}At#&y$c}hO}V8Se~ zbWrz>4H1VvV+A|xI(|569zuY5#iwEDe*jq#?)zvLJtu^ zYv}iK=4U2MRaJO_!$zl%7YWU&1qpnQIC7E2*@oF&57AoF*|g|dgHnpEe!lR_^C=<2o9~HHzNVD-HELubai7-e=wd`LQC?h&KGq=Uy$4duXcvtV< zckbn!b1yJwyq7eZRp-M;Eti%6&GNXRS;-$>jstLI@$H&~#?dR~@bmUP0Rqgm7_ z(8T{?8Zv{Xp;60n@llb7Z~&;^$n;+>(?kPXs(S>4Lkyk1Co`z!(&U2hdOZd!!b8g< zL?U7Y+{_qEYs2oDD@fN