From c72800ff83ca65189adc6f3f9925f9217c1fd617 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Mon, 3 Sep 2012 14:59:59 +0200 Subject: [PATCH 1/6] Make fences not jumpable --- mods/default/init.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mods/default/init.lua b/mods/default/init.lua index 2dbb8f51..69651451 100644 --- a/mods/default/init.lua +++ b/mods/default/init.lua @@ -924,6 +924,10 @@ minetest.register_node("default:fence_wood", { type = "fixed", fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, }, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 1, 0.5}, + }, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2}, sounds = default.node_sound_wood_defaults(), }) From d81b8c7c8dc827e0fa7738649b4037b1e80668cc Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Mon, 3 Sep 2012 15:25:18 +0200 Subject: [PATCH 2/6] Make all stacks in creative inventory maxx sized and add a trash field --- mods/creative/init.lua | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/mods/creative/init.lua b/mods/creative/init.lua index a18140bb..ea9da60c 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -7,18 +7,10 @@ creative_inventory.creative_inventory_size = 0 minetest.after(0, function() local inv = minetest.create_detached_inventory("creative", { allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) - if minetest.setting_getbool("creative_mode") then - return count - else - return 0 - end + return 0 end, allow_put = function(inv, listname, index, stack, player) - if minetest.setting_getbool("creative_mode") then - return -1 - else - return 0 - end + return 0 end, allow_take = function(inv, listname, index, stack, player) if minetest.setting_getbool("creative_mode") then @@ -55,7 +47,7 @@ minetest.after(0, function() stack2 = ItemStack(stack:get_name()) else -- Insert half full so that a taken stack can be put back - stack2 = ItemStack(stack:get_name().." "..(stack:get_stack_max()/2)) + stack2 = ItemStack(stack:get_name().." "..(stack:get_stack_max())) end inv:add_item("main", stack2) end @@ -63,6 +55,17 @@ minetest.after(0, function() print("creative inventory size: "..dump(creative_inventory.creative_inventory_size)) end) +local trash = minetest.create_detached_inventory("trash", { + allow_put = function(inv, listname, index, stack, player) + if minetest.setting_getbool("creative_mode") then -- TODO check wether inv is creative + return -1 + else + return 0 + end + end +}) +trash:set_size("main", 1) + creative_inventory.set_creative_formspec = function(player, start_i, pagenum) pagenum = math.floor(pagenum) local pagemax = math.floor((creative_inventory.creative_inventory_size-1) / (6*4) + 1) @@ -74,7 +77,9 @@ creative_inventory.set_creative_formspec = function(player, start_i, pagenum) "list[detached:creative;main;0.3,0.5;4,6;"..tostring(start_i).."]".. "label[2.0,6.55;"..tostring(pagenum).."/"..tostring(pagemax).."]".. "button[0.3,6.5;1.6,1;creative_prev;<<]".. - "button[2.7,6.5;1.6,1;creative_next;>>]") + "button[2.7,6.5;1.6,1;creative_next;>>]".. + "label[6,1.5;Trash:]".. + "list[detached:trash;main;6,2;1,1;]") end minetest.register_on_joinplayer(function(player) -- If in creative mode, modify player's inventory forms From 130aa1e78dcd7b9f3e6ec5957219f33ebc7f81e6 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Mon, 3 Sep 2012 15:26:02 +0200 Subject: [PATCH 3/6] Add throwing mod --- mods/throwing/README | 47 ++++++++ mods/throwing/arrow.lua | 81 +++++++++++++ mods/throwing/build_arrow.lua | 85 +++++++++++++ mods/throwing/depends.txt | 4 + mods/throwing/dig_arrow.lua | 81 +++++++++++++ mods/throwing/fire_arrow.lua | 114 ++++++++++++++++++ mods/throwing/init.lua | 99 +++++++++++++++ mods/throwing/sounds/throwing_sound.ogg | Bin 0 -> 11011 bytes mods/throwing/teleport_arrow.lua | 88 ++++++++++++++ mods/throwing/textures/throwing_arrow.png | Bin 0 -> 213 bytes mods/throwing/textures/throwing_arrow_2.png | Bin 0 -> 208 bytes .../throwing/textures/throwing_arrow_back.png | Bin 0 -> 228 bytes .../textures/throwing_arrow_build.png | Bin 0 -> 213 bytes .../textures/throwing_arrow_build_2.png | Bin 0 -> 220 bytes .../textures/throwing_arrow_build_back.png | Bin 0 -> 227 bytes .../textures/throwing_arrow_build_front.png | Bin 0 -> 191 bytes mods/throwing/textures/throwing_arrow_dig.png | Bin 0 -> 213 bytes .../textures/throwing_arrow_dig_2.png | Bin 0 -> 214 bytes .../textures/throwing_arrow_dig_back.png | Bin 0 -> 228 bytes .../textures/throwing_arrow_dig_front.png | Bin 0 -> 191 bytes .../throwing/textures/throwing_arrow_fire.png | Bin 0 -> 266 bytes .../textures/throwing_arrow_fire_2.png | Bin 0 -> 266 bytes .../textures/throwing_arrow_fire_back.png | Bin 0 -> 268 bytes .../textures/throwing_arrow_fire_front.png | Bin 0 -> 306 bytes .../textures/throwing_arrow_front.png | Bin 0 -> 190 bytes .../textures/throwing_arrow_teleport.png | Bin 0 -> 213 bytes .../textures/throwing_arrow_teleport_2.png | Bin 0 -> 213 bytes .../textures/throwing_arrow_teleport_back.png | Bin 0 -> 225 bytes .../throwing_arrow_teleport_front.png | Bin 0 -> 189 bytes mods/throwing/textures/throwing_bow_steel.png | Bin 0 -> 576 bytes mods/throwing/textures/throwing_bow_stone.png | Bin 0 -> 574 bytes mods/throwing/textures/throwing_bow_wood.png | Bin 0 -> 484 bytes mods/throwing/textures/throwing_empty.png | Bin 0 -> 178 bytes 33 files changed, 599 insertions(+) create mode 100644 mods/throwing/README create mode 100644 mods/throwing/arrow.lua create mode 100644 mods/throwing/build_arrow.lua create mode 100644 mods/throwing/depends.txt create mode 100644 mods/throwing/dig_arrow.lua create mode 100644 mods/throwing/fire_arrow.lua create mode 100644 mods/throwing/init.lua create mode 100644 mods/throwing/sounds/throwing_sound.ogg create mode 100644 mods/throwing/teleport_arrow.lua create mode 100644 mods/throwing/textures/throwing_arrow.png create mode 100644 mods/throwing/textures/throwing_arrow_2.png create mode 100644 mods/throwing/textures/throwing_arrow_back.png create mode 100644 mods/throwing/textures/throwing_arrow_build.png create mode 100644 mods/throwing/textures/throwing_arrow_build_2.png create mode 100644 mods/throwing/textures/throwing_arrow_build_back.png create mode 100644 mods/throwing/textures/throwing_arrow_build_front.png create mode 100644 mods/throwing/textures/throwing_arrow_dig.png create mode 100644 mods/throwing/textures/throwing_arrow_dig_2.png create mode 100644 mods/throwing/textures/throwing_arrow_dig_back.png create mode 100644 mods/throwing/textures/throwing_arrow_dig_front.png create mode 100644 mods/throwing/textures/throwing_arrow_fire.png create mode 100644 mods/throwing/textures/throwing_arrow_fire_2.png create mode 100644 mods/throwing/textures/throwing_arrow_fire_back.png create mode 100644 mods/throwing/textures/throwing_arrow_fire_front.png create mode 100644 mods/throwing/textures/throwing_arrow_front.png create mode 100644 mods/throwing/textures/throwing_arrow_teleport.png create mode 100644 mods/throwing/textures/throwing_arrow_teleport_2.png create mode 100644 mods/throwing/textures/throwing_arrow_teleport_back.png create mode 100644 mods/throwing/textures/throwing_arrow_teleport_front.png create mode 100644 mods/throwing/textures/throwing_bow_steel.png create mode 100644 mods/throwing/textures/throwing_bow_stone.png create mode 100644 mods/throwing/textures/throwing_bow_wood.png create mode 100644 mods/throwing/textures/throwing_empty.png diff --git a/mods/throwing/README b/mods/throwing/README new file mode 100644 index 00000000..826f470d --- /dev/null +++ b/mods/throwing/README @@ -0,0 +1,47 @@ +=== THROWING-MOD for MINETEST-C55 === +by PilzAdam + +Inroduction: +This mod adds bows and arrows to Minetest. + +How to install: +Unzip the archive an place it in minetest-base-directory/mods/minetest/ +if you have a windows client or a linux run-in-place client. If you have +a linux system-wide instalation place it in ~/.minetest/mods/minetest/. +If you want to install this mod only in one world create the folder +worldmods/ in your worlddirectory. +For further information or help see: +http://wiki.minetest.com/wiki/Installing_Mods + +How to use the mod: +Craft a bow with the strings from the farming mod: +string wood +string wood +string wood +Craft arrows with: +stick stick steel +Select the bow and shoot with left mouse click. Every shoot will take 1 +arrow from your inventory and wears out the bow (you have around 50 +shoots). + +License: +This mod was originally published by Jeija. +Sourcecode: WTFPL (see below) +Grahpics: WTFPL (see below) + +See also: +http://minetest.net/ + + 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. diff --git a/mods/throwing/arrow.lua b/mods/throwing/arrow.lua new file mode 100644 index 00000000..3e237fd4 --- /dev/null +++ b/mods/throwing/arrow.lua @@ -0,0 +1,81 @@ +minetest.register_craftitem("throwing:arrow", { + description = "Arrow", + inventory_image = "throwing_arrow.png", +}) + +minetest.register_node("throwing:arrow_box", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + -- Shaft + {-6.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17}, + --Spitze + {-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17}, + {-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17}, + --Federn + {6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17}, + {7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17}, + {7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17}, + {6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17}, + + {7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17}, + {8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17}, + {8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17}, + {7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17}, + } + }, + tiles = {"throwing_arrow.png", "throwing_arrow.png", "throwing_arrow_back.png", "throwing_arrow_front.png", "throwing_arrow_2.png", "throwing_arrow.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + +THROWING_ARROW_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.env:get_node(pos) + + if self.timer>0.2 then + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "throwing:arrow_entity" and obj:get_luaentity().name ~= "__builtin:item" then + obj:set_hp(obj:get_hp()-2) + if obj:get_hp() <= 0 then + obj:remove() + end + self.object:remove() + end + else + obj:set_hp(obj:get_hp()-2) + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" then + minetest.env:add_item(self.lastpos, 'throwing:arrow') + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow 16', + recipe = { + {'default:stick', 'default:stick', 'default:steel_ingot'}, + } +}) diff --git a/mods/throwing/build_arrow.lua b/mods/throwing/build_arrow.lua new file mode 100644 index 00000000..2ea1bf6e --- /dev/null +++ b/mods/throwing/build_arrow.lua @@ -0,0 +1,85 @@ +minetest.register_craftitem("throwing:arrow_build", { + description = "Build Arrow", + inventory_image = "throwing_arrow_build.png", +}) + +minetest.register_node("throwing:arrow_build_box", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + -- Shaft + {-6.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17}, + --Spitze + {-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17}, + {-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17}, + --Federn + {6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17}, + {7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17}, + {7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17}, + {6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17}, + + {7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17}, + {8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17}, + {8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17}, + {7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17}, + } + }, + tiles = {"throwing_arrow_build.png", "throwing_arrow_build.png", "throwing_arrow_build_back.png", "throwing_arrow_build_front.png", "throwing_arrow_build_2.png", "throwing_arrow_build.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_build_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, + node = "", +} + +THROWING_ARROW_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.env:get_node(pos) + + if self.timer>0.2 then + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "throwing:arrow_build_entity" and obj:get_luaentity().name ~= "__builtin:item" then + if self.node ~= "" then + minetest.env:set_node(self.lastpos, {name=self.node}) + end + self.object:remove() + end + else + if self.node ~= "" then + minetest.env:set_node(self.lastpos, {name=self.node}) + end + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" then + if self.node ~= "" then + minetest.env:set_node(self.lastpos, {name=self.node}) + end + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_build_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow_build', + recipe = { + {'default:stick', 'default:stick', 'default:shovel_steel'}, + } +}) diff --git a/mods/throwing/depends.txt b/mods/throwing/depends.txt new file mode 100644 index 00000000..252d6655 --- /dev/null +++ b/mods/throwing/depends.txt @@ -0,0 +1,4 @@ +default +bucket +fire +farming diff --git a/mods/throwing/dig_arrow.lua b/mods/throwing/dig_arrow.lua new file mode 100644 index 00000000..e756a34d --- /dev/null +++ b/mods/throwing/dig_arrow.lua @@ -0,0 +1,81 @@ +minetest.register_craftitem("throwing:arrow_dig", { + description = "Dig Arrow", + inventory_image = "throwing_arrow_dig.png", +}) + +minetest.register_node("throwing:arrow_dig_box", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + -- Shaft + {-6.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17}, + --Spitze + {-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17}, + {-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17}, + --Federn + {6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17}, + {7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17}, + {7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17}, + {6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17}, + + {7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17}, + {8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17}, + {8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17}, + {7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17}, + } + }, + tiles = {"throwing_arrow_dig.png", "throwing_arrow_dig.png", "throwing_arrow_dig_back.png", "throwing_arrow_dig_front.png", "throwing_arrow_dig_2.png", "throwing_arrow_dig.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_dig_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + +THROWING_ARROW_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.env:get_node(pos) + + if self.timer>0.2 then + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "throwing:arrow_dig_entity" and obj:get_luaentity().name ~= "__builtin:item" then + minetest.env:add_item(pos, 'throwing:arrow_dig') + minetest.env:remove_node(pos) + self.object:remove() + end + else + minetest.env:add_item(pos, 'throwing:arrow_dig') + minetest.env:remove_node(pos) + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" then + minetest.env:add_item(self.lastpos, 'throwing:arrow_dig') + minetest.env:remove_node(pos) + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_dig_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow_dig', + recipe = { + {'default:stick', 'default:stick', 'default:pick_steel'}, + } +}) diff --git a/mods/throwing/fire_arrow.lua b/mods/throwing/fire_arrow.lua new file mode 100644 index 00000000..e3b930d6 --- /dev/null +++ b/mods/throwing/fire_arrow.lua @@ -0,0 +1,114 @@ +minetest.register_craftitem("throwing:arrow_fire", { + description = "Fire Arrow", + inventory_image = "throwing_arrow_fire.png", +}) + +minetest.register_node("throwing:arrow_fire_box", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + -- Shaft + {-6.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17}, + --Spitze + {-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17}, + {-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17}, + --Federn + {6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17}, + {7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17}, + {7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17}, + {6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17}, + + {7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17}, + {8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17}, + {8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17}, + {7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17}, + } + }, + tiles = {"throwing_arrow_fire.png", "throwing_arrow_fire.png", "throwing_arrow_fire_back.png", "throwing_arrow_fire_front.png", "throwing_arrow_fire_2.png", "throwing_arrow_fire.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_fire_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + +THROWING_ARROW_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.env:get_node(pos) + + if self.timer>0.2 then + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "throwing:arrow_fire_entity" and obj:get_luaentity().name ~= "__builtin:item" then + obj:set_hp(obj:get_hp()-3) + if obj:get_hp() <= 0 then + obj:remove() + end + self.object:remove() + end + else + obj:set_hp(obj:get_hp()-3) + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" and node.name ~= "throwing:light" then + minetest.env:set_node(self.lastpos, {name="fire:basic_flame"}) + self.object:remove() + end + if math.floor(self.lastpos.x+0.5) ~= math.floor(pos.x+0.5) or math.floor(self.lastpos.y+0.5) ~= math.floor(pos.y+0.5) or math.floor(self.lastpos.z+0.5) ~= math.floor(pos.z+0.5) then + if minetest.env:get_node(self.lastpos).name == "throwing:light" then + minetest.env:remove_node(self.lastpos) + end + if minetest.env:get_node(pos).name == "air" then + minetest.env:set_node(pos, {name="throwing:light"}) + end + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_fire_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow_fire 4', + recipe = { + {'default:stick', 'default:stick', 'bucket:bucket_lava'}, + }, + replacements = { + {"bucket:bucket_lava", "bucket:bucket_empty"} + } +}) + +minetest.register_node("throwing:light", { + drawtype = "glasslike", + tiles = {"throwing_empty.png"}, + light_source = LIGHT_MAX-4, + selection_box = { + type = "fixed", + fixed = { + {0,0,0,0,0,0} + } + }, + groups = {not_in_creative_inventory=1} +}) + +minetest.register_abm({ + nodenames = {"throwing:light"}, + interval = 10, + chance = 1, + action = function(pos, node) + minetest.env:remove_node(pos) + end +}) diff --git a/mods/throwing/init.lua b/mods/throwing/init.lua new file mode 100644 index 00000000..108eb45e --- /dev/null +++ b/mods/throwing/init.lua @@ -0,0 +1,99 @@ +arrows = { + {"throwing:arrow", "throwing:arrow_entity"}, + {"throwing:arrow_fire", "throwing:arrow_fire_entity"}, + {"throwing:arrow_teleport", "throwing:arrow_teleport_entity"}, + {"throwing:arrow_dig", "throwing:arrow_dig_entity"}, + {"throwing:arrow_build", "throwing:arrow_build_entity"} +} + +local throwing_shoot_arrow = function(itemstack, player) + for _,stack in ipairs(player:get_inventory():get_list("main")) do + for _,arrow in ipairs(arrows) do + if stack:get_name() == arrow[1] then + player:get_inventory():remove_item("main", arrow[1]) + local playerpos = player:getpos() + local obj = minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, arrow[2]) + local dir = player:get_look_dir() + obj:setvelocity({x=dir.x*19, y=dir.y*19, z=dir.z*19}) + obj:setacceleration({x=dir.x*-3, y=-10, z=dir.z*-3}) + obj:setyaw(player:get_look_yaw()+math.pi) + minetest.sound_play("throwing_sound", {pos=playerpos}) + if obj:get_luaentity().player == "" then + obj:get_luaentity().player = player + end + obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name() + return true + end + end + end + return false +end + +minetest.register_tool("throwing:bow_wood", { + description = "Wood Bow", + inventory_image = "throwing_bow_wood.png", + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + if throwing_shoot_arrow(itemstack, user, pointed_thing) then + itemstack:add_wear(65535/50) + end + return itemstack + end, +}) + +minetest.register_craft({ + output = 'throwing:bow_wood', + recipe = { + {'farming:string', 'default:wood', ''}, + {'farming:string', '', 'default:wood'}, + {'farming:string', 'default:wood', ''}, + } +}) + +minetest.register_tool("throwing:bow_stone", { + description = "Stone Bow", + inventory_image = "throwing_bow_stone.png", + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + if throwing_shoot_arrow(item, user, pointed_thing) then + itemstack:add_wear(65535/100) + end + return itemstack + end, +}) + +minetest.register_craft({ + output = 'throwing:bow_stone', + recipe = { + {'farming:string', 'default:cobble', ''}, + {'farming:string', '', 'default:cobble'}, + {'farming:string', 'default:cobble', ''}, + } +}) + +minetest.register_tool("throwing:bow_steel", { + description = "Steel Bow", + inventory_image = "throwing_bow_steel.png", + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + if throwing_shoot_arrow(item, user, pointed_thing) then + itemstack:add_wear(65535/200) + end + return itemstack + end, +}) + +minetest.register_craft({ + output = 'throwing:bow_steel', + recipe = { + {'farming:string', 'default:steel_ingot', ''}, + {'farming:string', '', 'default:steel_ingot'}, + {'farming:string', 'default:steel_ingot', ''}, + } +}) + +dofile(minetest.get_modpath("throwing").."/arrow.lua") +dofile(minetest.get_modpath("throwing").."/fire_arrow.lua") +dofile(minetest.get_modpath("throwing").."/teleport_arrow.lua") +dofile(minetest.get_modpath("throwing").."/dig_arrow.lua") +dofile(minetest.get_modpath("throwing").."/build_arrow.lua") \ No newline at end of file diff --git a/mods/throwing/sounds/throwing_sound.ogg b/mods/throwing/sounds/throwing_sound.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c8911e5fed64d61e1a0007b98847b27d8044e3cc GIT binary patch literal 11011 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 literal 0 HcmV?d00001 diff --git a/mods/throwing/teleport_arrow.lua b/mods/throwing/teleport_arrow.lua new file mode 100644 index 00000000..301cc5d6 --- /dev/null +++ b/mods/throwing/teleport_arrow.lua @@ -0,0 +1,88 @@ +minetest.register_craftitem("throwing:arrow_teleport", { + description = "Teleport Arrow", + inventory_image = "throwing_arrow_teleport.png", +}) + +minetest.register_node("throwing:arrow_teleport_box", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + -- Shaft + {-6.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17}, + --Spitze + {-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17}, + {-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17}, + --Federn + {6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17}, + {7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17}, + {7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17}, + {6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17}, + + {7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17}, + {8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17}, + {8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17}, + {7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17}, + } + }, + tiles = {"throwing_arrow_teleport.png", "throwing_arrow_teleport.png", "throwing_arrow_teleport_back.png", "throwing_arrow_teleport_front.png", "throwing_arrow_teleport_2.png", "throwing_arrow_teleport.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_teleport_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, + player = "", +} + +THROWING_ARROW_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.env:get_node(pos) + + if self.timer>0.2 then + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "throwing:arrow_teleport_entity" and obj:get_luaentity().name ~= "__builtin:item" then + if self.player ~= "" then + self.player:setpos(pos) + self.player:get_inventory():add_item("main", ItemStack("throwing:arrow_teleport")) + end + self.object:remove() + end + else + if self.player ~= "" then + self.player:setpos(pos) + self.player:get_inventory():add_item("main", ItemStack("throwing:arrow_teleport")) + end + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" then + if self.player ~= "" then + self.player:setpos(self.lastpos) + self.player:get_inventory():add_item("main", ItemStack("throwing:arrow_teleport")) + end + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_teleport_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow_teleport', + recipe = { + {'default:stick', 'default:stick', 'default:mese'}, + } +}) diff --git a/mods/throwing/textures/throwing_arrow.png b/mods/throwing/textures/throwing_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9b72ee98a69fed6b29b839fe2655fbb8a6b31db8 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)1JN z&^jdh2vCHxz$3Dlfq`2Xgc%uT&5-~KvX^-Jy0YKl5aeT1O|uPV0SbkBx;TbdoK8-V zU~Lx8xwq%1eOrRB@7ekw-h_k8EMsT4E^xGyeJ!~ygvH1J2sTVeGB#?EJOBb$E?qiw t1Bg9VDFT%gdQTEo+tN8V&_R}g!F#g8vp@UyZ3bGv;OXk;vd$@?2>>`}LD2vJ literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_2.png b/mods/throwing/textures/throwing_arrow_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b5980d0244ac5119e1dd80b9f19d7245a4d61996 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)1JN z&^jdh2vCHxz$3Dlfq`2Xgc%uT&5-~KvX^-Jy0YKl5ai=ixYwuK3=|6Rba4!^IGvmz z!McTUwt4-G2co#^NA%Cx&(BWL^R}Y)RhkE)3}m z+6*iYRcft(BAf*tk;M!QLSW3;qqLJ9D9B#o>FdgVheME0PAFz}9?0AjPZ!4!i_^&o z3uFw8411Us9e8$j_J8Hi%g<*X)Z*igaI0aPYf~w7&fMHQ{lnLFVdQ&MBb@03c&S@c;k- literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_build.png b/mods/throwing/textures/throwing_arrow_build.png new file mode 100644 index 0000000000000000000000000000000000000000..02653e139af7bcfecac0fc8e0e3a24ca5d60d09c GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoGQ^_I0a9W1vu|r;B5V#p&b( z3D#!eoO^qI+P6K}`;+Itr)dN0>}MspVohv6OV*^{2ogMT00f-6&YoaMV_*h?$w5lY vi-A~qW!sOEHOF;5{bpQHD|2HkWni$FBlqL>tuH{!85lfW{an^LB{Ts5=-WdZ literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_build_2.png b/mods/throwing/textures/throwing_arrow_build_2.png new file mode 100644 index 0000000000000000000000000000000000000000..fd576d4068c3ef8001a6566c0400b73e4ed1cd4d GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoGQ^p;knNCr~KH)5S5w;&gI? z1nU;Y+2;BG{L7o)olQRwaQe`J0|z!NRhp3a`Pte3+e27{63@u*aP;cr>EYqw5m1Vq z-I_6d%Je@61(KT#YpkwKmf-=(8C(yLQM=MTH_)M$fk9tZv2>}u@e80m44$rjF6*2U FngHeDMMD4p literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_build_back.png b/mods/throwing/textures/throwing_arrow_build_back.png new file mode 100644 index 0000000000000000000000000000000000000000..18c2f02c7ebab870ca1aca18966d2f0f4ced701e GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP|#9t#-x%!pir`>i(`nz>Ewh3 zG6qJ5Jxq%ZJUcu4zw+nh=Q9s#@o`7E)v#sm|JeF@eOFG}hp%6cE}J)zb-LoM{2EEC zYJp2nRrguM`c2h1mc^mN)4}q8rJ&l8qkM`V9hunz*-}&v9G6=9f{B6on)0-r3e7A) P>li#;{an^LB{Ts5`x;84 literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_build_front.png b/mods/throwing/textures/throwing_arrow_build_front.png new file mode 100644 index 0000000000000000000000000000000000000000..b6b6967202e1abfcde638c1877cd4d351494f27f GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP|%Vi$L%0cgu&j^#WBR4kHC+M!Rbo buHp;~91{eKz8!ch4KmBq)z4*}Q$iB}8PqoI literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_dig.png b/mods/throwing/textures/throwing_arrow_dig.png new file mode 100644 index 0000000000000000000000000000000000000000..02f6a00027c9fdbf347d68159b4be7dd550db884 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoGRSu3T{)NN1?0i(`nz>Er|n z)@I?HdwYJ`w>@ZNX8$)ii-Fth?8{p^EWDpyMx5WURB1vZ2(*gKp2&EHfei@M*xA|L tKsbo^Cf literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_dig_2.png b/mods/throwing/textures/throwing_arrow_dig_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b514b5d217edfa6b7ecc264a2f79bc2638bb489c GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoGRS@sk?oE}&4Dr;B5V#p&b( z3Dzx)v(5AW`Ik5I$yhWjoHntsu~9L0_S60T$E(_OMH^XoJLl|TKUY>zkl-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP*7A+{HW0(piqjZi(`nz>Ewh3 zG6qJ5Jxq%ZJUcu4zw+nh=Q9s#@o`7E)v$g1^y$#g`S$f`AHIG)x@_J=*6E6S_Uz#~ zy*c*5pA##q3wF)X3hcQm5FsJJ`7c=6r=wfe=}|Kq&mx`^9u57bUKd#za`}}xlub=% Q0_|h)boFyt=akR{0Q@XXB>(^b literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_dig_front.png b/mods/throwing/textures/throwing_arrow_dig_front.png new file mode 100644 index 0000000000000000000000000000000000000000..6681c998062736218d4ccf79cdec3d475872af3e GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP*7C(zEH9gP{`iX#WBRBrJ)1!z1PV&zN`G4N02>fm8=KrkXW@ cU3v@*_g@JWnV0kU1C3(vboFyt=akR{04+;5XaE2J literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_fire.png b/mods/throwing/textures/throwing_arrow_fire.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5075a32bbd59c7462620023181181c687fd138 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE(~88 zW-;h19ZJy!if|TqL>4nJa0`PlBg3pY5H=O_B$Mc{EE7pA2O!^g}OXl978Nl zCnrd-HVfz6+w;@D?ZM-Ui~pBM9r$GIKCRKwvE$*dW!3*hpSnm|lvGMy+InBudc3S z|MlCp*V_xEcK9E!x--eX`pf@dkrg4`a|0b@85pi>={{b^@M;gxRScf4elF{r5}E*j CU|@>? literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_fire_2.png b/mods/throwing/textures/throwing_arrow_fire_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0aa5fb9e16e14d29185050e97fd6efa046a182 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE(~88 zW-;h19ZJy!if|TqL>4nJa0`PlBg3pY5H=O_B$Mc{EB9lEvGtwLS3FNjv*GO zlM^IZw=m8&&;RFN-Yj>#J84B~VnRZ~jUd4j8!A6P`yZ{v#3`k;O#A2u!?y4L|GKZ2 zH2FJ4LQ-x|azc}*P%;BEGxK44UpY3lY4drQn&$9)FSq@9{=liP@_8Np$Ez0cRQ~?X ze7ODpeu*c(Qzf5#HkG)^)FSE0H+jD8um73i){7f}UMiF_=syvs5ArR8r>mdKI;Vst E0Pg8n`~Uy| literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_fire_back.png b/mods/throwing/textures/throwing_arrow_fire_back.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7d99306fee4e38782e07eebb99f431d6fc500e GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE(~88 zW-;h19ZJy!if|TqL>4nJ2!SzUkJ3(dpdfpRr>`sf9S%W$W%j6?6$U_|9#0p?5R22v z2@7Nlj0}6279DtYcJ_be&&$te9@OIFj@ZNYcmCsl|I_>4{GV_8>wlrd0TAf8JcYY# z&;RB7|MERI_YFuBDBpY1BS?gsqiE5GqiaG6c1f*Py!?EN!HL;gi#z^SsWqMM`CoDP zN&3QH|E2Q|{r@kX^@v;eQBwPa9}5_pHJFWr=C*uv(PWsdVZQm_niZ))cQJUn`njxg HN@xNAjoD_% literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_fire_front.png b/mods/throwing/textures/throwing_arrow_fire_front.png new file mode 100644 index 0000000000000000000000000000000000000000..3994257d15c3e6b7026d44e765ad54e7909382be GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE(~88 zW-;h19ZJy!if|TqL>4nJ2!SzUkJ3(dpdfpRr>`sf9S%W$B_)nxUo)W4CQlc~5R22v z2@7Nlj0}6279DtYcJ}|t3g=FAoL<0Pw&%a-Qx{1Kmq^KX@wJB+tkXSq;6}ad>?$|0 zm^KcMA|r#1e^L@APfnZg^kLGEb$SO594L@o9W^IVCx6wM4-fzAv$4$!=ZSx_&+t#( zHFVdQ&MBb@01jDi#sB~S literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_front.png b/mods/throwing/textures/throwing_arrow_front.png new file mode 100644 index 0000000000000000000000000000000000000000..828a486f11de86378b779285cf4bcfea250c1296 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)3}m z+6*iYRcft(BAf*tk;M!QLSW3;qqLJ9D9B#o>FdgVheME0o-IDAI}a#i=jq}YVsSb- zVS$W+kzo(hq65#)&i+4H;oOOi(+g(JlH%dj)z$4W>7MJDe4>8YK_TmAcAiB%Cp;SZ dO}#F%GMxV-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoFES`;Q$)20)=uPZ!4!i_^&o z60FU_IrsMbv~PRx|3A-vPtyk0+0ROH#hTcDmaIv?5hQrx00=mBojt*j#=r~&!ph3b t${@V5?MKO)-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoFESUt>zw6rfP3r;B5V#p&b( z3Dzx)v(5AW`Ik5U`=5Rw;Pjyb2M%mlsx%?-^Ru)6w}-F@C7zMr;n>r|(^KG_z&4R9 zq0R6hOO4gF$vGU#%FN1VOhwu`zb2)N1jsWm%-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP(aUYWttJl{6tR|#}JFt$q5T& z42%qWm=+y)c6RoE<-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP(V*<^PXqrKp|UC7sn8b)5!@7 zWDJZ9dzcm-cy@O7|H%sHPIR1J@c+N$zvRHP9-D7Snza2%m(tm2Tya3*R6`HTkBG%0 au|VUO2o~A7iGKzf#Ng@b=d#Wzp$P!)%{(Fi literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_bow_steel.png b/mods/throwing/textures/throwing_bow_steel.png new file mode 100644 index 0000000000000000000000000000000000000000..e14c45c4dfb653137f07c0cf1dd1f0c19ff9f8e4 GIT binary patch literal 576 zcmV-G0>AxPx#24YJ`L;&sp?f~wJY48*P000SaNLh0L01|Wn01|Wo-ewBL_t(I%Y9Q#iW5N;{@$zVA;DFSAcLZ~^8#_#r;tHWX6FTFnVez- z1-(QFBy>n}g%K3ILS_|0_pA5KBB`1r4i*&E^?vJn-`7GC|63^~hzL{_?haKw@#}do z0JuBceIK9-RfU-W0L~lgadHTuBrTUqni)g{i^YQZ75Sd?;&HXnXhc=T&CQJfziUVS0K21>3ng40wsh15kZU* zRaF%jB=S->P)Px#24YJ`L;&sp?f~wJY48*P000SaNLh0L01|Wn01|Wo-ew6E#P{LXQbGp3ZVSS+ZjXxmnXPLIiQ zxs=jUKJ)pU@1BEio`Ox&(9B?FaCdZFhpy|8QbJ0p*vbg*j<#(D0Isf3MhPK6L=a;{ zRaIpSl1H1FA%uX(THgKmjN7{;dGlrlRRu}*eJ`WY=wXDE5}KwVNw_=SzYxBC2Hsqw z=(?_hyTi*HW0c+wBMdlgR{`!kG*1UXq<) zgq$2?SULZPzVAz5RaGE~?RLw&o4T&$tli6FW;h%U|L9k%6)$yv0TD=EZ|soslK=n! M07*qoM6N<$g8jSqm;e9( literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_bow_wood.png b/mods/throwing/textures/throwing_bow_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..07f303a5cc8818289caa5500224df992f1b32826 GIT binary patch literal 484 zcmVN2bPDNB8 zb~7$DE-^4L^m3s900Cf0L_t(IPkoYIPK7WKg$vOacj3Q2nQJt<8UOXs6&Q^odx8g8 z7lgl&Z(y2o?~P3k)6&kFGpCJ2#Qit=zIRa+xj2s9FborFei!FwyplN zwdHIi+s43fP?G!xsHXs4FY8zlb=tV-0eF( zL{)(7rfC#&dw$O=u%01!Id$@V6-n6d+T6FN6-+W!!RKlML`EDMIp#=JRZ9;zXy#Du z^(>O7V*5dtF6kI4(&CF$)v7Ki|AJRm}_Fp)OQZEMM{@bSpW`)W^N#UL;; zZ(?}ABpU($xfT3C(X2$WEK|a*1oj&38d>891osDey^`m-!aq~kLKCe=q?#H?XlXnv zWm&2kui*D)M*w3?&?>Xr8X4nFX@p?wOEd$i%G``XT~QQXwk0nVgg;5H>w4i2`}7>1 aWBv#3=%ksXVTCgQ0000Er?+O75NtU=qlsM<- z=BDPAFgO>bCYGe8D3oWGWGJ|M`UZqI@`(c#@p`&AhHzX@P5=TRmz9Ar?z5H^kj3EX L>gTe~DWM4fuVE-u literal 0 HcmV?d00001 From 4efba586ad4c9578b745c00c8a7239ac7df97e5d Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Mon, 3 Sep 2012 15:26:22 +0200 Subject: [PATCH 4/6] Add TNT mod --- mods/tnt/README.txt | 45 +++ mods/tnt/depends.txt | 2 + mods/tnt/init.lua | 285 ++++++++++++++++++ mods/tnt/sounds/tnt_explode.ogg | Bin 0 -> 12808 bytes mods/tnt/sounds/tnt_gunpowder_burning.ogg | Bin 0 -> 34335 bytes mods/tnt/sounds/tnt_ignite.ogg | Bin 0 -> 29271 bytes mods/tnt/textures/tnt_boom.png | Bin 0 -> 330 bytes mods/tnt/textures/tnt_bottom.png | Bin 0 -> 160 bytes mods/tnt/textures/tnt_gunpowder.png | Bin 0 -> 516 bytes mods/tnt/textures/tnt_gunpowder_burning.png | Bin 0 -> 536 bytes .../tnt_gunpowder_burning_animated.png | Bin 0 -> 455 bytes mods/tnt/textures/tnt_gunpowder_inventory.png | Bin 0 -> 455 bytes mods/tnt/textures/tnt_side.png | Bin 0 -> 191 bytes mods/tnt/textures/tnt_smoke.png | Bin 0 -> 323 bytes mods/tnt/textures/tnt_top.png | Bin 0 -> 243 bytes mods/tnt/textures/tnt_top_burning.png | Bin 0 -> 275 bytes .../tnt/textures/tnt_top_burning_animated.png | Bin 0 -> 458 bytes 17 files changed, 332 insertions(+) create mode 100644 mods/tnt/README.txt create mode 100644 mods/tnt/depends.txt create mode 100644 mods/tnt/init.lua create mode 100644 mods/tnt/sounds/tnt_explode.ogg create mode 100644 mods/tnt/sounds/tnt_gunpowder_burning.ogg create mode 100644 mods/tnt/sounds/tnt_ignite.ogg create mode 100644 mods/tnt/textures/tnt_boom.png create mode 100644 mods/tnt/textures/tnt_bottom.png create mode 100644 mods/tnt/textures/tnt_gunpowder.png create mode 100644 mods/tnt/textures/tnt_gunpowder_burning.png create mode 100644 mods/tnt/textures/tnt_gunpowder_burning_animated.png create mode 100644 mods/tnt/textures/tnt_gunpowder_inventory.png create mode 100644 mods/tnt/textures/tnt_side.png create mode 100644 mods/tnt/textures/tnt_smoke.png create mode 100644 mods/tnt/textures/tnt_top.png create mode 100644 mods/tnt/textures/tnt_top_burning.png create mode 100644 mods/tnt/textures/tnt_top_burning_animated.png diff --git a/mods/tnt/README.txt b/mods/tnt/README.txt new file mode 100644 index 00000000..46d3fca1 --- /dev/null +++ b/mods/tnt/README.txt @@ -0,0 +1,45 @@ +=== TNT-MOD for MINETEST-C55 === +by PilzAdam + +Introduction: +This mod adds TNT to Minetest. TNT is a tool to help the player +in mining. + +How to install: +Unzip the archive an place it in minetest-base-directory/mods/minetest/ +if you have a windows client or a linux run-in-place client. If you have +a linux system-wide instalation place it in ~/.minetest/mods/minetest/. +If you want to install this mod only in one world create the folder +worldmods/ in your worlddirectory. +For further information or help see: +http://wiki.minetest.com/wiki/Installing_Mods + +How to use the mod: +Craft gunpowder by placing coal and gravel in the crafting area. The +gunpowder can be used to craft TNT or as fuze for TNT. To craft TNT +surround gunpowder with 4 wood in a + shape. +There are different ways to blow up TNT: +1. Hit it with a torch. +2. Hit a gunpowder fuze that leads to a TNT block with a torch. +3. Activate it with mesecons (fastest way) +Be aware of the damage radius of 7 blocks! + +License: +WTFPL (see below) + +See also: +http://minetest.net/ + + 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. diff --git a/mods/tnt/depends.txt b/mods/tnt/depends.txt new file mode 100644 index 00000000..70715c7b --- /dev/null +++ b/mods/tnt/depends.txt @@ -0,0 +1,2 @@ +default +fire diff --git a/mods/tnt/init.lua b/mods/tnt/init.lua new file mode 100644 index 00000000..ec14f4a6 --- /dev/null +++ b/mods/tnt/init.lua @@ -0,0 +1,285 @@ +local destroy = function(pos) + if math.random(1,5) <= 4 then + minetest.env:add_entity({x=pos.x+math.random(0,10)/10-0.5, y=pos.y, z=pos.z+math.random(0,10)/10-0.5}, "tnt:smoke") + end + local nodename = minetest.env:get_node(pos).name + if nodename ~= "air" then + minetest.env:remove_node(pos) + if minetest.registered_nodes[nodename].groups.flammable ~= nil then + minetest.env:set_node(pos, {name="fire:basic_flame"}) + return + end + local drop + if not minetest.get_modpath("item_drop") then + drop = minetest.get_node_drops(nodename, "") + else + drop = minetest.get_drops(nodename, "") + end + for _,item in ipairs(drop) do + if type(item) == "string" then + local obj = minetest.env:add_item(pos, item) + if obj == nil then + return + end + obj:get_luaentity().collect = true + obj:setacceleration({x=0, y=-10, z=0}) + obj:setvelocity({x=math.random(0,6)-3, y=10, z=math.random(0,6)-3}) + else + for i=1,item:get_count() do + local obj = minetest.env:add_item(pos, item:get_name()) + if obj == nil then + return + end + obj:get_luaentity().collect = true + obj:setacceleration({x=0, y=-10, z=0}) + obj:setvelocity({x=math.random(0,6)-3, y=10, z=math.random(0,6)-3}) + end + end + end + end +end + +boom = function(pos, time) + minetest.after(time, function(pos) + if minetest.env:get_node(pos).name ~= "tnt:tnt_burning" then + return + end + minetest.sound_play("tnt_explode", {pos=pos, gain=1.5, max_hear_distance=2*64}) + minetest.env:set_node(pos, {name="tnt:boom"}) + minetest.after(0.5, function(pos) + minetest.env:remove_node(pos) + end, {x=pos.x, y=pos.y, z=pos.z}) + + local objects = minetest.env:get_objects_inside_radius(pos, 7) + for _,obj in ipairs(objects) do + if obj:is_player() or obj:get_luaentity().name ~= "__builtin:item" then + local obj_p = obj:getpos() + local vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z} + local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5 + local damage = (80*0.5^dist)*2 + obj:set_hp(obj:get_hp()-damage) + --[[obj:punch(obj, 1.0, { FIXME + full_punch_interval=1.0, + groupcaps={ + fleshy={times={[1]=1/damage, [2]=1/damage, [3]=1/damage}}, + snappy={times={[1]=1/damage, [2]=1/damage, [3]=1/damage}}, + } + }, nil)]] + end + end + + for dx=-2,2 do + for dz=-2,2 do + for dy=-2,2 do + pos.x = pos.x+dx + pos.y = pos.y+dy + pos.z = pos.z+dz + + local node = minetest.env:get_node(pos) + if node.name == "tnt:tnt" or node.name == "tnt:tnt_burning" then + minetest.env:set_node(pos, {name="tnt:tnt_burning"}) + boom({x=pos.x, y=pos.y, z=pos.z}, 0) + elseif node.name == "fire:basic_flame" or string.find(node.name, "default:water_") or string.find(node.name, "default:lava_") or node.name == "tnt:boom" then + + else + if math.abs(dx)<2 and math.abs(dy)<2 and math.abs(dz)<2 then + destroy(pos) + else + if math.random(1,5) <= 4 then + destroy(pos) + end + end + end + + pos.x = pos.x-dx + pos.y = pos.y-dy + pos.z = pos.z-dz + end + end + end + end, pos) +end + +minetest.register_node("tnt:tnt", { + description = "TNT", + tiles = {"tnt_top.png", "tnt_bottom.png", "tnt_side.png"}, + groups = {dig_immediate=2, mesecon=2}, + sounds = default.node_sound_wood_defaults(), + + on_punch = function(pos, node, puncher) + if puncher:get_wielded_item():get_name() == "default:torch" then + minetest.sound_play("tnt_ignite", {pos=pos}) + minetest.env:set_node(pos, {name="tnt:tnt_burning"}) + boom(pos, 4) + end + end, +}) + +minetest.register_node("tnt:tnt_burning", { + --tiles = {"tnt_top_burning.png", "tnt_bottom.png", "tnt_side.png"}, + tiles = {{name="tnt_top_burning_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1}}, "tnt_bottom.png", "tnt_side.png"}, + light_source = 5, + drop = "", + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("tnt:boom", { + drawtype = "plantlike", + tiles = {"tnt_boom.png"}, + light_source = LIGHT_MAX, + walkable = false, +}) + +burn = function(pos) + if minetest.env:get_node(pos).name == "tnt:tnt" then + minetest.sound_play("tnt_ignite", {pos=pos}) + minetest.env:set_node(pos, {name="tnt:tnt_burning"}) + boom(pos, 1) + return + end + if minetest.env:get_node(pos).name ~= "tnt:gunpowder" then + return + end + minetest.sound_play("tnt_gunpowder_burning", {pos=pos, gain=2}) + minetest.env:set_node(pos, {name="tnt:gunpowder_burning"}) + + minetest.after(1, function(pos) + if minetest.env:get_node(pos).name ~= "tnt:gunpowder_burning" then + return + end + minetest.after(0.5, function(pos) + minetest.env:remove_node(pos) + end, {x=pos.x, y=pos.y, z=pos.z}) + for dx=-1,1 do + for dz=-1,1 do + for dy=-1,1 do + pos.x = pos.x+dx + pos.y = pos.y+dy + pos.z = pos.z+dz + + if not (math.abs(dx) == 1 and math.abs(dz) == 1) then + if dy == 0 then + burn({x=pos.x, y=pos.y, z=pos.z}) + else + if math.abs(dx) == 1 or math.abs(dz) == 1 then + burn({x=pos.x, y=pos.y, z=pos.z}) + end + end + end + + pos.x = pos.x-dx + pos.y = pos.y-dy + pos.z = pos.z-dz + end + end + end + end, pos) +end + +minetest.register_node("tnt:gunpowder", { + description = "Gun Powder", + drawtype = "raillike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + tiles = {"tnt_gunpowder.png",}, + inventory_image = "tnt_gunpowder_inventory.png", + wield_image = "tnt_gunpowder_inventory.png", + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + groups = {dig_immediate=2}, + sounds = default.node_sound_leaves_defaults(), + + on_punch = function(pos, node, puncher) + if puncher:get_wielded_item():get_name() == "default:torch" then + burn(pos) + end + end, +}) + +minetest.register_node("tnt:gunpowder_burning", { + drawtype = "raillike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + light_source = 5, + --tiles = {"tnt_gunpowder_burning.png"}, + tiles = {{name="tnt_gunpowder_burning_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1}}}, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + drop = "", + groups = {dig_immediate=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_abm({ + nodenames = {"tnt:tnt", "tnt:gunpowder"}, + neighbors = {"fire:basic_flame"}, + interval = 2, + chance = 10, + action = function(pos, node) + if node.name == "tnt:tnt" then + minetest.env:set_node(pos, {name="tnt:tnt_burning"}) + boom({x=pos.x, y=pos.y, z=pos.z}, 0) + else + burn(pos) + end + end +}) + +minetest.register_craft({ + output = "tnt:gunpowder", + type = "shapeless", + recipe = {"default:coal_lump", "default:gravel"} +}) + +minetest.register_craft({ + output = "tnt:tnt", + recipe = { + {"", "default:wood", ""}, + {"default:wood", "tnt:gunpowder", "default:wood"}, + {"", "default:wood", ""} + } +}) + +minetest.register_entity("tnt:smoke", { + physical = true, + visual = "sprite", + textures = {"tnt_smoke.png"}, + collisionbox = {0,0,0,0,0,0}, + + timer = 0, + time = 5, + + on_activate = function(self, staticdata) + self.object:setacceleration({x=math.random(0,10)/10-0.5, y=5, z=math.random(0,10)/10-0.5}) + self.time = math.random(1, 10)/10 + end, + + on_step = function(self, dtime) + self.timer = self.timer+dtime + if self.timer > self.time then + self.object:remove() + end + end, +}) + +if minetest.get_modpath("mesecons") ~= nil then + minetest.after(0, function() + + --mesecon:add_rules("tnt_above", {{x=0,y=1,z=0}}) FIXME + mesecon:register_effector("tnt:tnt", "tnt:tnt") --, mesecon:get_rules("tnt_above")) + + mesecon:register_on_signal_on(function(pos, node) + if node.name == "tnt:tnt" then + minetest.env:set_node(pos, {name="tnt:tnt_burning"}) + boom(pos, 0) + end + end) + + end) +end diff --git a/mods/tnt/sounds/tnt_explode.ogg b/mods/tnt/sounds/tnt_explode.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a414ea046bf76298f6f1406d574f15741c515248 GIT binary patch literal 12808 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 SB5R<789ZJ6T-G@yGywo(`g7j^ literal 0 HcmV?d00001 diff --git a/mods/tnt/textures/tnt_bottom.png b/mods/tnt/textures/tnt_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..68e1b1cac7bed1a07c3a981cb4957587c5e5cbb2 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|I14-?iy0XB z4ude`@%$AjKtc8rPhVH|I~+3Hf}Bf_FLVbA8F{)mhG?8mt~tuUdR{_eNk_tF0|SGY y1P~BNPEcq&d&EI0VUNSAwm|!yUyWXM3=F1MRT-l~W%Yo%89ZJ6T-G@yGywp;lq*mG literal 0 HcmV?d00001 diff --git a/mods/tnt/textures/tnt_gunpowder.png b/mods/tnt/textures/tnt_gunpowder.png new file mode 100644 index 0000000000000000000000000000000000000000..53c28156b6e2a38ce72c5f5089ff9e43a82ae2be GIT binary patch literal 516 zcmV+f0{i`mP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2pkbG2B=n#lK=n#mPtfGR5;6h zlRHZTK@^3*3H}Bv5s~c_d@Excu!wd+f~9DsqKy)KG~%n!Mnww~5fl-TpoMI)ur?M! z6eDPCTv9~DH`s|bYvJx>cVoOT?9AOcXYQPH2b?fWo$gqaU|7=s?T$q;OkMpC1p&*0 zb!xsHZ$V2#aSY>hP+2nISU6zJ*oL!Fk*y#R21_X@!G*Cz}46o#qO zyLjP0*)Vl1St!+8wm1I0!gysAEnQf9=5{H<5WvoO3mxHz+PpSg&(Vx@fwr4Z)z)&b zp90``z8!!v04x87Vd^9{HnAi^Te-pm1YoeMLc|j{ZcbcepNchbY_tQzM`lTU8vG}i z{nrSJ2*B<{tEymqq`?Pvi0$NPqarSH;XM1O5(CQ_+mZ-CI8N9A{Y#fP6^J4ihF;~R6Z-9g zcctuU=7EV=6_zY?V$a+etL2rdl>yFgpG)?EvbEG(@Wu~fg{%8(yCNq50000 literal 0 HcmV?d00001 diff --git a/mods/tnt/textures/tnt_gunpowder_burning.png b/mods/tnt/textures/tnt_gunpowder_burning.png new file mode 100644 index 0000000000000000000000000000000000000000..080a8a4526d49844a36f38898029f050e4b833f7 GIT binary patch literal 536 zcmV+z0_XjSP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2pkabucLKJ@$ra2B%9Rw5$kwXjF zVqw#yIF4Ji5N)z-aUzK)0Xxy=S?s>IZ|}St7~bscoA1ngXC6f2xHiR7fll$QAXWuA$cOgfn4%PX0Wa_Xv^%{V&(L6uDW@CVvj{_>`-|d~sb`i7zIRA4C zz~jR`Tdf+7Ycsj+B{Ms&jc>)J>SgQFw}r)YflNLA)@;!WFa@x;m}6`-uP*P*4RO3? z5qJnd1YxzJHaN)PK@EVD%?~lkw~1G33R)H+HSiF#p9YY&$Z9`DFDCqUordp?3$(0OMENd#PN*=l^1EX$^gyFo9FjHA8W6- apvx0I^1+>hTQBYa0000QL70(Y)*K0-AbW|YuPgf<4p|0frhgm_Gk`*pC9V-A&iT2y zsd*&~&PAz-C8;S2<(VZJ3hti10pX2&;y|mEJY5_^A`ZWup2&5`fT#8Ik>B%k;u7Va z{!Biy_o&Hh8LlMu)>o5sTK25h^td(id6N2kc}|9gyNvI)UzK2BEST4&pmI4i?TYKA zXPI~H-)bGNjOtk&EO}shz3yq3>!s^6R2Umn9=@;1Pg~D;ObSZ>9$tsT0S^=<64Hl-O>7*u>PDZLbQ6`OxLb5g{d`S54K!E>|?V{iN7WiEF?`68pp=cKS&D^C=9J@W* vD>jI1n8&~F=0>@6mAz~wCx4!=_`q=R^X|QCGB?TtgOtJ3)z4*}Q$iB}zxliW literal 0 HcmV?d00001 diff --git a/mods/tnt/textures/tnt_gunpowder_inventory.png b/mods/tnt/textures/tnt_gunpowder_inventory.png new file mode 100644 index 0000000000000000000000000000000000000000..4e593fca4873a8f94ef2405598844928a9ca68f7 GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf|KM1A@?+x(KV;O7@oIV||L{E0%b$0gmmgf_NaL2+`>O80jNj~nyZ22`b?=tGa#~`M z#60Gn9j_b@H=pLNsJOD(&u!N>HHYp)k}aP<@fzLRx_z17N0#+momUR|#JF5-HPQX< z#Wq*%O18l~r=x-nz50^Dg)A$BWaJP2<_ddl%O>e3bs_h*LwkW7kW!I8`6V|zJJog5 z!vvA7KY4W+54v36Yy3IkSoEQUgy?|v4X-m24JJB#FxL2d{ilz^N?XY-QdUP?n%;9B zNSAc~G4Db0+KgZ9Z8uIi=Lnu#eAtO4;@E%oAFAIac-lHN?)|G((+T^<+O<32SBuG2 uCEa^%E3(fi_@% literal 0 HcmV?d00001 diff --git a/mods/tnt/textures/tnt_smoke.png b/mods/tnt/textures/tnt_smoke.png new file mode 100644 index 0000000000000000000000000000000000000000..6c07c300b0280113e3eb6e7255f65307a643f5f5 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^O!` zprjN3Q=kZEfk$L90|U1(2s1Lwnj--eWH0gbb!ET9AtNMXecDs36euKF;u=xnoS&PU znpeW$T$GwvlA5AWo>`Ki;O^-g5Z=fq4pcPH)5S5w;&f~9X;BtMj>ToW7BG4@x$QAt z{w8@M|MbF;Ndglzj_kd@(QNbmSu^J@3kbdcjge!LUc1YZ)b4bChiPZdtXp-Dab0Su zVCSi-gEO+%O|hw7YxpoG^sj$iTGv-bgHv|TZN7&upJ*awymh@&#_86Wn!>`*&v#Dv zE%X1hWXHR0Y`T+wDRg%%E`1!38e;s}i&f~D;kp|}jQ2PNFS2_dySe)9^(7oYmoj*| L`njxgN@xNAmq2xL literal 0 HcmV?d00001 diff --git a/mods/tnt/textures/tnt_top.png b/mods/tnt/textures/tnt_top.png new file mode 100644 index 0000000000000000000000000000000000000000..e63de0eb4f3a0dca503d1a3b0c0754770bdde28e GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|I14-?iy0XB z4ude`@%$AjKtc8rPhVH|I~+3Hf)eM;8@B?5T0LDHLp09sopeyJL4k)Qyj`jy!gbYx zjMWRcU4GNgGoDQr>u<8*x>ttA%#Kd%m-0+!AW2Dr7U+;XwJBqa_}=( zPQb#37vYw=PxBnkFFrb7a@PA*OZTKtIJfc6-FV(-a*txKWWV9rJ?-~|v-g~XN@v|^ m=DB8X^ry&M?oRZl0)~Ah28ZOQoCyUwh{4m<&t;ucLK6UB3S3bD literal 0 HcmV?d00001 diff --git a/mods/tnt/textures/tnt_top_burning.png b/mods/tnt/textures/tnt_top_burning.png new file mode 100644 index 0000000000000000000000000000000000000000..04e39a2cc543d34aa49f7a52ee3a10251ce19888 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|I14-?iy0XB z4ude`@%$AjKtc8rPhVH|I~+2C!p06hHWz_HOFdm2Lp07Gon*^*Sb?Y2eo>#Ovh%SO z>w)a$AF{4|E4cpm635|qsfWy~RyfXB TAZWE0=wJpPx#32;bRa{vGi!vFvd!vV){sAK>D00(qQO+^RX2ps?j1{#r_N&o->TuDShR7l6| zmNAaPFc3vw5G6{Pf->R&F6InAbj~mZ2S6#eNQpSW7LJ`EiE&b(MOs{q%*4$1`1!jU z7{?EsH^fKa3P1x};scrSQ2g3_b;0g|Ur4>?ImD5lwCmCZ0L!3W^`qBa^ZiU9o zKXi=e8dBW@^ooaC$M4rQ)TUx*_J`LRny3}%qnMCW4Q7weX1!2b2OfrEA1*p&_qw4E zZc#eLKD_@d8(4wZX8PIC?6=ex|=DDz;4 z%~{vbF{0DOdQ#4Dbx(tmo8SSN{vq3kI?DL+@EQJ4#|!fh{ULFj{K4_kAFL-H^*(fPQCi_9leU6CwDR?b5Alb6JcO%h2M?A3%SM)mUMC(b8(Dt{OL|KFFncfc zi%WK0!$WChdNSFZ@_Xr`oTStTAKkfj~IS}BLDyZ07*qoM6N<$g4ig- A+yDRo literal 0 HcmV?d00001 From faa676fd0c18400705eb47c31ecf4eaa66583182 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Mon, 3 Sep 2012 15:26:49 +0200 Subject: [PATCH 5/6] Add farming mod --- mods/farming/README.txt | 48 ++ mods/farming/bananas.lua | 63 +++ mods/farming/cactus.lua | 22 + mods/farming/carrots.lua | 89 ++++ mods/farming/changelog.txt | 17 + mods/farming/cotton.lua | 90 ++++ mods/farming/depends.txt | 3 + mods/farming/hoes.lua | 83 ++++ mods/farming/init.lua | 185 ++++++++ mods/farming/oranges.lua | 89 ++++ mods/farming/papyrus.lua | 25 + mods/farming/potatoes.lua | 72 +++ mods/farming/pumpkin.lua | 446 ++++++++++++++++++ mods/farming/rhubarb.lua | 72 +++ mods/farming/rubber.lua | 104 ++++ mods/farming/soil.lua | 45 ++ mods/farming/strawberries.lua | 89 ++++ mods/farming/textures/farming_banana.png | Bin 0 -> 515 bytes .../textures/farming_banana_leaves.png | Bin 0 -> 621 bytes .../textures/farming_banana_sapling.png | Bin 0 -> 647 bytes mods/farming/textures/farming_bread.png | Bin 0 -> 918 bytes .../textures/farming_bread_pumpkin.png | Bin 0 -> 511 bytes .../textures/farming_bucket_rubber.png | Bin 0 -> 317 bytes mods/farming/textures/farming_cake_mix.png | Bin 0 -> 343 bytes .../textures/farming_cake_mix_pumpkin.png | Bin 0 -> 343 bytes mods/farming/textures/farming_carrot.png | Bin 0 -> 575 bytes mods/farming/textures/farming_carrot_1.png | Bin 0 -> 438 bytes mods/farming/textures/farming_carrot_2.png | Bin 0 -> 453 bytes mods/farming/textures/farming_carrot_3.png | Bin 0 -> 507 bytes mods/farming/textures/farming_carrot_4.png | Bin 0 -> 550 bytes mods/farming/textures/farming_carrot_seed.png | Bin 0 -> 476 bytes mods/farming/textures/farming_cotton.png | Bin 0 -> 428 bytes mods/farming/textures/farming_cotton_1.png | Bin 0 -> 359 bytes mods/farming/textures/farming_cotton_2.png | Bin 0 -> 351 bytes mods/farming/textures/farming_cotton_seed.png | Bin 0 -> 280 bytes mods/farming/textures/farming_flour.png | Bin 0 -> 344 bytes mods/farming/textures/farming_hoe_steel.png | Bin 0 -> 338 bytes mods/farming/textures/farming_hoe_stone.png | Bin 0 -> 333 bytes mods/farming/textures/farming_hoe_wood.png | Bin 0 -> 325 bytes mods/farming/textures/farming_orange.png | Bin 0 -> 504 bytes mods/farming/textures/farming_orange_1.png | Bin 0 -> 430 bytes mods/farming/textures/farming_orange_2.png | Bin 0 -> 468 bytes mods/farming/textures/farming_orange_3.png | Bin 0 -> 544 bytes mods/farming/textures/farming_orange_4.png | Bin 0 -> 540 bytes mods/farming/textures/farming_orange_seed.png | Bin 0 -> 281 bytes mods/farming/textures/farming_potatoe.png | Bin 0 -> 525 bytes mods/farming/textures/farming_potatoe_1.png | Bin 0 -> 473 bytes mods/farming/textures/farming_potatoe_2.png | Bin 0 -> 502 bytes mods/farming/textures/farming_potatoe_3.png | Bin 0 -> 292 bytes .../farming/textures/farming_potatoe_seed.png | Bin 0 -> 221 bytes .../textures/farming_pumpkin_big_side.png | Bin 0 -> 600 bytes .../textures/farming_pumpkin_big_top.png | Bin 0 -> 600 bytes .../farming_pumpkin_big_top_corner.png | Bin 0 -> 289 bytes .../textures/farming_pumpkin_big_top_side.png | Bin 0 -> 378 bytes .../farming/textures/farming_pumpkin_face.png | Bin 0 -> 622 bytes .../textures/farming_pumpkin_face_light.png | Bin 0 -> 632 bytes .../farming/textures/farming_pumpkin_seed.png | Bin 0 -> 312 bytes .../farming/textures/farming_pumpkin_side.png | Bin 0 -> 627 bytes mods/farming/textures/farming_pumpkin_top.png | Bin 0 -> 623 bytes mods/farming/textures/farming_rhubarb.png | Bin 0 -> 502 bytes mods/farming/textures/farming_rhubarb_1.png | Bin 0 -> 530 bytes mods/farming/textures/farming_rhubarb_2.png | Bin 0 -> 365 bytes mods/farming/textures/farming_rhubarb_3.png | Bin 0 -> 301 bytes .../farming/textures/farming_rhubarb_seed.png | Bin 0 -> 219 bytes .../textures/farming_rubber_sapling.png | Bin 0 -> 333 bytes .../textures/farming_rubber_tree_empty.png | Bin 0 -> 835 bytes .../textures/farming_rubber_tree_full.png | Bin 0 -> 808 bytes .../textures/farming_scarecrow_front.png | Bin 0 -> 634 bytes .../farming_scarecrow_front_light.png | Bin 0 -> 641 bytes .../textures/farming_scarecrow_side.png | Bin 0 -> 613 bytes .../textures/farming_scarecrow_top.png | Bin 0 -> 639 bytes mods/farming/textures/farming_soil.png | Bin 0 -> 947 bytes mods/farming/textures/farming_soil_wet.png | Bin 0 -> 880 bytes .../textures/farming_soil_wet_side.png | Bin 0 -> 867 bytes mods/farming/textures/farming_strawberry.png | Bin 0 -> 250 bytes .../farming/textures/farming_strawberry_1.png | Bin 0 -> 356 bytes .../farming/textures/farming_strawberry_2.png | Bin 0 -> 342 bytes .../farming/textures/farming_strawberry_3.png | Bin 0 -> 357 bytes .../farming/textures/farming_strawberry_4.png | Bin 0 -> 400 bytes .../textures/farming_strawberry_seed.png | Bin 0 -> 212 bytes mods/farming/textures/farming_string.png | Bin 0 -> 367 bytes mods/farming/textures/farming_tomato.png | Bin 0 -> 581 bytes mods/farming/textures/farming_tomato_1.png | Bin 0 -> 482 bytes mods/farming/textures/farming_tomato_2.png | Bin 0 -> 506 bytes mods/farming/textures/farming_tomato_3.png | Bin 0 -> 578 bytes mods/farming/textures/farming_tomato_4.png | Bin 0 -> 591 bytes mods/farming/textures/farming_tomato_seed.png | Bin 0 -> 221 bytes mods/farming/textures/farming_weed.png | Bin 0 -> 591 bytes mods/farming/textures/farming_wheat.png | Bin 0 -> 536 bytes mods/farming/textures/farming_wheat_1.png | Bin 0 -> 540 bytes mods/farming/textures/farming_wheat_2.png | Bin 0 -> 534 bytes mods/farming/textures/farming_wheat_3.png | Bin 0 -> 500 bytes .../textures/farming_wheat_harvested.png | Bin 0 -> 597 bytes mods/farming/textures/farming_wheat_seed.png | Bin 0 -> 286 bytes mods/farming/tomatoes.lua | 89 ++++ mods/farming/weed.lua | 39 ++ mods/farming/wheat.lua | 169 +++++++ 97 files changed, 1839 insertions(+) create mode 100644 mods/farming/README.txt create mode 100644 mods/farming/bananas.lua create mode 100644 mods/farming/cactus.lua create mode 100644 mods/farming/carrots.lua create mode 100644 mods/farming/changelog.txt create mode 100644 mods/farming/cotton.lua create mode 100644 mods/farming/depends.txt create mode 100644 mods/farming/hoes.lua create mode 100644 mods/farming/init.lua create mode 100644 mods/farming/oranges.lua create mode 100644 mods/farming/papyrus.lua create mode 100644 mods/farming/potatoes.lua create mode 100644 mods/farming/pumpkin.lua create mode 100644 mods/farming/rhubarb.lua create mode 100644 mods/farming/rubber.lua create mode 100644 mods/farming/soil.lua create mode 100644 mods/farming/strawberries.lua create mode 100644 mods/farming/textures/farming_banana.png create mode 100644 mods/farming/textures/farming_banana_leaves.png create mode 100644 mods/farming/textures/farming_banana_sapling.png create mode 100644 mods/farming/textures/farming_bread.png create mode 100644 mods/farming/textures/farming_bread_pumpkin.png create mode 100644 mods/farming/textures/farming_bucket_rubber.png create mode 100644 mods/farming/textures/farming_cake_mix.png create mode 100644 mods/farming/textures/farming_cake_mix_pumpkin.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_seed.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_seed.png create mode 100644 mods/farming/textures/farming_flour.png create mode 100644 mods/farming/textures/farming_hoe_steel.png create mode 100644 mods/farming/textures/farming_hoe_stone.png create mode 100644 mods/farming/textures/farming_hoe_wood.png create mode 100644 mods/farming/textures/farming_orange.png create mode 100644 mods/farming/textures/farming_orange_1.png create mode 100644 mods/farming/textures/farming_orange_2.png create mode 100644 mods/farming/textures/farming_orange_3.png create mode 100644 mods/farming/textures/farming_orange_4.png create mode 100644 mods/farming/textures/farming_orange_seed.png create mode 100644 mods/farming/textures/farming_potatoe.png create mode 100644 mods/farming/textures/farming_potatoe_1.png create mode 100644 mods/farming/textures/farming_potatoe_2.png create mode 100644 mods/farming/textures/farming_potatoe_3.png create mode 100644 mods/farming/textures/farming_potatoe_seed.png create mode 100644 mods/farming/textures/farming_pumpkin_big_side.png create mode 100644 mods/farming/textures/farming_pumpkin_big_top.png create mode 100644 mods/farming/textures/farming_pumpkin_big_top_corner.png create mode 100644 mods/farming/textures/farming_pumpkin_big_top_side.png create mode 100644 mods/farming/textures/farming_pumpkin_face.png create mode 100644 mods/farming/textures/farming_pumpkin_face_light.png create mode 100644 mods/farming/textures/farming_pumpkin_seed.png create mode 100644 mods/farming/textures/farming_pumpkin_side.png create mode 100644 mods/farming/textures/farming_pumpkin_top.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_seed.png create mode 100644 mods/farming/textures/farming_rubber_sapling.png create mode 100755 mods/farming/textures/farming_rubber_tree_empty.png create mode 100755 mods/farming/textures/farming_rubber_tree_full.png create mode 100644 mods/farming/textures/farming_scarecrow_front.png create mode 100644 mods/farming/textures/farming_scarecrow_front_light.png create mode 100644 mods/farming/textures/farming_scarecrow_side.png create mode 100644 mods/farming/textures/farming_scarecrow_top.png create mode 100644 mods/farming/textures/farming_soil.png create mode 100644 mods/farming/textures/farming_soil_wet.png create mode 100755 mods/farming/textures/farming_soil_wet_side.png create mode 100644 mods/farming/textures/farming_strawberry.png create mode 100644 mods/farming/textures/farming_strawberry_1.png create mode 100644 mods/farming/textures/farming_strawberry_2.png create mode 100644 mods/farming/textures/farming_strawberry_3.png create mode 100644 mods/farming/textures/farming_strawberry_4.png create mode 100644 mods/farming/textures/farming_strawberry_seed.png create mode 100644 mods/farming/textures/farming_string.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_seed.png create mode 100644 mods/farming/textures/farming_weed.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_harvested.png create mode 100644 mods/farming/textures/farming_wheat_seed.png create mode 100644 mods/farming/tomatoes.lua create mode 100644 mods/farming/weed.lua create mode 100644 mods/farming/wheat.lua diff --git a/mods/farming/README.txt b/mods/farming/README.txt new file mode 100644 index 00000000..cc5052e1 --- /dev/null +++ b/mods/farming/README.txt @@ -0,0 +1,48 @@ +===FARMING MOD for MINETEST-C55=== +by PilzAdam + +Version 4.dev + +Introduction: +This mod adds farming to Minetest. + +How to install: +Unzip the archive an place it in minetest-base-directory/mods/minetest/ +if you have a windows client or a linux run-in-place client. If you have +a linux system-wide instalation place it in ~/.minetest/mods/minetest/. +If you want to install this mod only in one world create the folder +worldmods/ in your worlddirectory. +For further information or help see: +http://wiki.minetest.com/wiki/Installing_Mods + +How to use the mod: +Craft a wood/stone/steel hoe: +material material + stick + stick +Dig dirt with it and turn it to soil. Water the soil and plant the seeds +you get by digging dirt with the hoe. Wait until the seeds are seasoned +and harvest them. When harvesting you will get the product and new seeds. +For further information or help see: +http://minetest.net/forum/viewtopic.php?id=2787 + +License: +Sourcecode: WTFPL (see below) +Graphics: WTFPL (see below) + +See also: +http://minetest.net/ + + 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. diff --git a/mods/farming/bananas.lua b/mods/farming/bananas.lua new file mode 100644 index 00000000..723be556 --- /dev/null +++ b/mods/farming/bananas.lua @@ -0,0 +1,63 @@ +minetest.register_node("farming:banana_sapling", { + description = "Banana Tree Sapling", + drawtype = "plantlike", + tiles = {"farming_banana_sapling.png"}, + inventory_image = "farming_banana_sapling.png", + wield_image = "farming_banana_sapling.png", + paramtype = "light", + walkable = false, + groups = {dig_immediate=3,flammable=2}, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("farming:banana_leaves", { + drawtype = "allfaces_optional", + tiles = {"farming_banana_leaves.png"}, + paramtype = "light", + groups = {snappy=3, leafdecay=3, flammable=2, not_in_creative_inventory=1}, + drop = { + max_items = 1, + items = { + { + items = {'farming:banana_sapling'}, + rarity = 20, + }, + } + }, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_abm({ + nodenames = {"farming:banana_sapling"}, + interval = 60, + chance = 20, + action = function(pos, node) + farming:generate_tree(pos, "default:tree", "farming:banana_leaves", {"default:dirt", "default:dirt_with_grass"}, {["farming:banana"]=20}) + end +}) + +minetest.register_on_generated(function(minp, maxp, blockseed) + if math.random(1, 100) > 5 then + return + end + local tmp = {x=(maxp.x-minp.x)/2+minp.x, y=(maxp.y-minp.y)/2+minp.y, z=(maxp.z-minp.z)/2+minp.z} + local pos = minetest.env:find_node_near(tmp, maxp.x-minp.x, {"default:dirt_with_grass"}) + if pos ~= nil then + farming:generate_tree({x=pos.x, y=pos.y+1, z=pos.z}, "default:tree", "farming:banana_leaves", {"default:dirt", "default:dirt_with_grass"}, {["farming:banana"]=10}) + end +end) + +minetest.register_node("farming:banana", { + description = "Banana", + tiles = {"farming_banana.png"}, + inventory_image = "farming_banana.png", + wield_image = "farming_banana.png", + drawtype = "torchlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + groups = {fleshy=3,dig_immediate=3,flammable=2}, + sounds = default.node_sound_defaults(), + + on_use = minetest.item_eat(6), +}) diff --git a/mods/farming/cactus.lua b/mods/farming/cactus.lua new file mode 100644 index 00000000..3723e702 --- /dev/null +++ b/mods/farming/cactus.lua @@ -0,0 +1,22 @@ +minetest.register_abm({ + nodenames = {"default:cactus"}, + interval = 50, + chance = 20, + action = function(pos, node) + pos.y = pos.y-1 + local name = minetest.env:get_node(pos).name + if name == "default:desert_sand" or name == "default:sand" then + pos.y = pos.y+1 + local height = 0 + while minetest.env:get_node(pos).name == "default:cactus" do + height = height+1 + pos.y = pos.y+1 + end + if height < 4 then + if minetest.env:get_node(pos).name == "air" then + minetest.env:set_node(pos, node) + end + end + end + end +}) diff --git a/mods/farming/carrots.lua b/mods/farming/carrots.lua new file mode 100644 index 00000000..0195525a --- /dev/null +++ b/mods/farming/carrots.lua @@ -0,0 +1,89 @@ +minetest.register_craftitem("farming:carrot_seed", { + description = "Carrot Seeds", + inventory_image = "farming_carrot_seed.png", + on_place = function(itemstack, placer, pointed_thing) + local above = minetest.env:get_node(pointed_thing.above) + if above.name == "air" then + above.name = "farming:carrot_1" + minetest.env:set_node(pointed_thing.above, above) + itemstack:take_item(1) + return itemstack + end + end +}) + +minetest.register_node("farming:carrot_1", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_carrot_1.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+3/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:carrot_2", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_carrot_2.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+5/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:carrot_3", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_carrot_3.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+12/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:carrot", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + tiles = {"farming_carrot_4.png"}, + drop = { + max_items = 6, + items = { + { items = {'farming:carrot_seed'} }, + { items = {'farming:carrot_seed'}, rarity = 2}, + { items = {'farming:carrot_seed'}, rarity = 5}, + { items = {'farming:carrot_item'} }, + { items = {'farming:carrot_item'}, rarity = 2 }, + { items = {'farming:carrot_item'}, rarity = 5 } + } + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craftitem("farming:carrot_item", { + description = "Carrot", + inventory_image = "farming_carrot.png", + on_use = minetest.item_eat(3), +}) + +farming:add_plant("farming:carrot", {"farming:carrot_1", "farming:carrot_2", "farming:carrot_3"}, 50, 20) diff --git a/mods/farming/changelog.txt b/mods/farming/changelog.txt new file mode 100644 index 00000000..80138c54 --- /dev/null +++ b/mods/farming/changelog.txt @@ -0,0 +1,17 @@ +Version 3: +- make pumpkins with face not craftable but created by punching with a sword +- change groups of pumpkins to more wood like +- add big pumpkin +- add scarecrow +- make bread non stackable +- make saplings plantable everywhere (they still grow only with light and wet soil) +- add weed +- add fuel attributes to nearly everything +- add pumpkin bread +Version 2: +- soil dont turn to dirt when walking over it +- fix hoe bug +- rename corn to wheat +- new textures for harvested wheat +- make cotton drop strings when harvested +- add rubber diff --git a/mods/farming/cotton.lua b/mods/farming/cotton.lua new file mode 100644 index 00000000..3ea33905 --- /dev/null +++ b/mods/farming/cotton.lua @@ -0,0 +1,90 @@ +minetest.register_craftitem("farming:cotton_seed", { + description = "Cotton Seeds", + inventory_image = "farming_cotton_seed.png", + on_place = function(itemstack, placer, pointed_thing) + local above = minetest.env:get_node(pointed_thing.above) + if above.name == "air" then + above.name = "farming:cotton_1" + minetest.env:set_node(pointed_thing.above, above) + itemstack:take_item(1) + return itemstack + end + end +}) + +minetest.register_node("farming:cotton_1", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_cotton_1.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+6/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:cotton_2", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_cotton_2.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+12/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:cotton", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + tiles = {"farming_cotton.png"}, + drop = { + max_items = 6, + items = { + { items = {'farming:cotton_seed'} }, + { items = {'farming:cotton_seed'}, rarity = 2}, + { items = {'farming:cotton_seed'}, rarity = 5}, + { items = {'farming:string'} }, + { items = {'farming:string'}, rarity = 2 }, + { items = {'farming:string'}, rarity = 5 } + } + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +farming:add_plant("farming:cotton", {"farming:cotton_1", "farming:cotton_2"}, 50, 20) + +minetest.register_craftitem("farming:string", { + description = "String", + inventory_image = "farming_string.png", +}) + +minetest.register_craft({ + output = "wool:white", + recipe = {{"farming:string"}} +}) + +-- ========= FUEL ========= +minetest.register_craft({ + type = "fuel", + recipe = "farming:cotton_seed", + burntime = 1 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:string", + burntime = 1 +}) diff --git a/mods/farming/depends.txt b/mods/farming/depends.txt new file mode 100644 index 00000000..0b8ebe02 --- /dev/null +++ b/mods/farming/depends.txt @@ -0,0 +1,3 @@ +default +bucket +wool diff --git a/mods/farming/hoes.lua b/mods/farming/hoes.lua new file mode 100644 index 00000000..33cf462b --- /dev/null +++ b/mods/farming/hoes.lua @@ -0,0 +1,83 @@ +local function create_soil(pos, inv, p) + if pos == nil then + return false + end + local node = minetest.env:get_node(pos) + local name = node.name + local above = minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}) + if name == "default:dirt" or name == "default:dirt_with_grass" then + if above.name == "air" then + node.name = "farming:soil" + minetest.env:set_node(pos, node) + if inv and p and name == "default:dirt_with_grass" then + for name,rarity in pairs(farming.seeds) do + if math.random(1, rarity-p) == 1 then + inv:add_item("main", ItemStack(name)) + end + end + end + return true + end + end + return false +end + +minetest.register_tool("farming:hoe_wood", { + description = "Wood Hoe", + inventory_image = "farming_hoe_wood.png", + on_use = function(itemstack, user, pointed_thing) + if create_soil(pointed_thing.under, user:get_inventory(), 0) then + itemstack:add_wear(65535/30) + return itemstack + end + end +}) + +minetest.register_craft({ + output = "farming:hoe_wood", + recipe = { + {"default:wood", "default:wood"}, + {"", "default:stick"}, + {"", "default:stick"} + } +}) + +minetest.register_tool("farming:hoe_stone", { + description = "Stone Hoe", + inventory_image = "farming_hoe_stone.png", + on_use = function(itemstack, user, pointed_thing) + if create_soil(pointed_thing.under, user:get_inventory(), 5) then + itemstack:add_wear(65535/50) + return itemstack + end + end +}) + +minetest.register_craft({ + output = "farming:hoe_stone", + recipe = { + {"default:cobble", "default:cobble"}, + {"", "default:stick"}, + {"", "default:stick"} + } +}) + +minetest.register_tool("farming:hoe_steel", { + description = "Steel Hoe", + inventory_image = "farming_hoe_steel.png", + on_use = function(itemstack, user, pointed_thing) + if create_soil(pointed_thing.under, user:get_inventory(), 10) then + itemstack:add_wear(65535/80) + return itemstack + end + end +}) + +minetest.register_craft({ + output = "farming:hoe_steel", + recipe = { + {"default:steel_ingot", "default:steel_ingot"}, + {"", "default:stick"}, + {"", "default:stick"} + } +}) diff --git a/mods/farming/init.lua b/mods/farming/init.lua new file mode 100644 index 00000000..efc2959d --- /dev/null +++ b/mods/farming/init.lua @@ -0,0 +1,185 @@ +farming = {} + +function farming:add_plant(full_grown, names, interval, chance) + minetest.register_abm({ + nodenames = names, + interval = interval, + chance = chance, + action = function(pos, node) + pos.y = pos.y-1 + if minetest.env:get_node(pos).name ~= "farming:soil_wet" then + return + end + pos.y = pos.y+1 + if minetest.env:get_node_light(pos) < 8 then + return + end + local step = nil + for i,name in ipairs(names) do + if name == node.name then + step = i + break + end + end + if step == nil then + return + end + local new_node = {name=names[step+1]} + if new_node.name == nil then + new_node.name = full_grown + end + minetest.env:set_node(pos, new_node) + end +} ) +end + +function farming:generate_tree(pos, trunk, leaves, underground, replacements) + pos.y = pos.y-1 + local nodename = minetest.env:get_node(pos).name + local ret = true + for _,name in ipairs(underground) do + if nodename == name then + ret = false + break + end + end + pos.y = pos.y+1 + if ret or minetest.env:get_node_light(pos) < 8 then + return + end + + node = {name = ""} + for dy=1,4 do + pos.y = pos.y+dy + if minetest.env:get_node(pos).name ~= "air" then + return + end + pos.y = pos.y-dy + end + node.name = trunk + for dy=0,4 do + pos.y = pos.y+dy + minetest.env:set_node(pos, node) + pos.y = pos.y-dy + end + + if not replacements then + replacements = {} + end + + node.name = leaves + pos.y = pos.y+3 + for dx=-2,2 do + for dz=-2,2 do + for dy=0,3 do + pos.x = pos.x+dx + pos.y = pos.y+dy + pos.z = pos.z+dz + + if dx == 0 and dz == 0 and dy==3 then + if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then + minetest.env:set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.env:set_node(pos, {name=name}) + end + end + end + elseif dx == 0 and dz == 0 and dy==4 then + if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then + minetest.env:set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.env:set_node(pos, {name=name}) + end + end + end + elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then + if minetest.env:get_node(pos).name == "air" then + minetest.env:set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.env:set_node(pos, {name=name}) + end + end + end + else + if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then + if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then + minetest.env:set_node(pos, node) + for name,rarity in pairs(replacements) do + if math.random(1, rarity) == 1 then + minetest.env:set_node(pos, {name=name}) + end + end + end + end + end + + pos.x = pos.x-dx + pos.y = pos.y-dy + pos.z = pos.z-dz + end + end + end +end + +farming.seeds = { + ["farming:wheat_seed"]=20, + ["farming:cotton_seed"]=30, + ["farming:pumpkin_seed"]=60, + ["farming:strawberry_seed"]=30, + ["farming:rhubarb_seed"]=30, + ["farming:potatoe_seed"]=30, + ["farming:tomato_seed"]=30, + ["farming:orange_seed"]=30, + ["farming:carrot_seed"]=30, +} + +-- ========= SOIL ========= +dofile(minetest.get_modpath("farming").."/soil.lua") + +-- ========= HOES ========= +dofile(minetest.get_modpath("farming").."/hoes.lua") + +-- ========= CORN ========= +dofile(minetest.get_modpath("farming").."/wheat.lua") + +-- ========= COTTON ========= +dofile(minetest.get_modpath("farming").."/cotton.lua") + +-- ========= PUMPKINS ========= +dofile(minetest.get_modpath("farming").."/pumpkin.lua") + +-- ========= RUBBER ========= +dofile(minetest.get_modpath("farming").."/rubber.lua") + +-- ========= WEED ========= +dofile(minetest.get_modpath("farming").."/weed.lua") + +-- ========= STRAWBERRIES ========= +dofile(minetest.get_modpath("farming").."/strawberries.lua") + +-- ========= RHUBARB ========= +dofile(minetest.get_modpath("farming").."/rhubarb.lua") + +-- ========= POTATOES ========= +dofile(minetest.get_modpath("farming").."/potatoes.lua") + +-- ========= TOMATOES ========= +dofile(minetest.get_modpath("farming").."/tomatoes.lua") + +-- ========= ORANGES ========= +dofile(minetest.get_modpath("farming").."/oranges.lua") + +-- ========= BANANAS ========= +dofile(minetest.get_modpath("farming").."/bananas.lua") + +-- ========= PAPYRUS ========= +dofile(minetest.get_modpath("farming").."/papyrus.lua") + +-- ========= CACTUS ========= +dofile(minetest.get_modpath("farming").."/cactus.lua") + +-- ========= CARROTS ========= +dofile(minetest.get_modpath("farming").."/carrots.lua") diff --git a/mods/farming/oranges.lua b/mods/farming/oranges.lua new file mode 100644 index 00000000..cebbcfd0 --- /dev/null +++ b/mods/farming/oranges.lua @@ -0,0 +1,89 @@ +minetest.register_craftitem("farming:orange_seed", { + description = "Orange Seeds", + inventory_image = "farming_orange_seed.png", + on_place = function(itemstack, placer, pointed_thing) + local above = minetest.env:get_node(pointed_thing.above) + if above.name == "air" then + above.name = "farming:orange_1" + minetest.env:set_node(pointed_thing.above, above) + itemstack:take_item(1) + return itemstack + end + end +}) + +minetest.register_node("farming:orange_1", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_orange_1.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+3/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:orange_2", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_orange_2.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+8/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:orange_3", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_orange_3.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+14/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:orange", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + tiles = {"farming_orange_4.png"}, + drop = { + max_items = 6, + items = { + { items = {'farming:orange_seed'} }, + { items = {'farming:orange_seed'}, rarity = 2}, + { items = {'farming:orange_seed'}, rarity = 5}, + { items = {'farming:orange_item'} }, + { items = {'farming:orange_item'}, rarity = 2 }, + { items = {'farming:orange_item'}, rarity = 5 } + } + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craftitem("farming:orange_item", { + description = "Orange", + inventory_image = "farming_orange.png", + on_use = minetest.item_eat(4), +}) + +farming:add_plant("farming:orange", {"farming:orange_1", "farming:orange_2", "farming:orange_3"}, 50, 20) diff --git a/mods/farming/papyrus.lua b/mods/farming/papyrus.lua new file mode 100644 index 00000000..d33e072f --- /dev/null +++ b/mods/farming/papyrus.lua @@ -0,0 +1,25 @@ +minetest.register_abm({ + nodenames = {"default:papyrus"}, + interval = 50, + chance = 20, + action = function(pos, node) + pos.y = pos.y-1 + local name = minetest.env:get_node(pos).name + if name == "default:dirt" or name == "default:dirt_with_grass" then + if minetest.env:find_node_near(pos, 3, {"default:water_source", "default:water_flowing"}) == nil then + return + end + pos.y = pos.y+1 + local height = 0 + while minetest.env:get_node(pos).name == "default:papyrus" do + height = height+1 + pos.y = pos.y+1 + end + if height < 4 then + if minetest.env:get_node(pos).name == "air" then + minetest.env:set_node(pos, node) + end + end + end + end +}) diff --git a/mods/farming/potatoes.lua b/mods/farming/potatoes.lua new file mode 100644 index 00000000..6b886a43 --- /dev/null +++ b/mods/farming/potatoes.lua @@ -0,0 +1,72 @@ +minetest.register_craftitem("farming:potatoe_seed", { + description = "Potatoe Seeds", + inventory_image = "farming_potatoe_seed.png", + on_place = function(itemstack, placer, pointed_thing) + local above = minetest.env:get_node(pointed_thing.above) + if above.name == "air" then + above.name = "farming:potatoe_1" + minetest.env:set_node(pointed_thing.above, above) + itemstack:take_item(1) + return itemstack + end + end +}) + +minetest.register_node("farming:potatoe_1", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_potatoe_1.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+6/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:potatoe_2", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_potatoe_2.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+9/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:potatoe", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + tiles = {"farming_potatoe_3.png"}, + drop = { + max_items = 6, + items = { + { items = {'farming:potatoe_seed'} }, + { items = {'farming:potatoe_seed'}, rarity = 2}, + { items = {'farming:potatoe_seed'}, rarity = 5}, + { items = {'farming:potatoe_item'} }, + { items = {'farming:potatoe_item'}, rarity = 2 }, + { items = {'farming:potatoe_item'}, rarity = 5 } + } + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craftitem("farming:potatoe_item", { + description = "Potatoe", + inventory_image = "farming_potatoe.png", +}) + +farming:add_plant("farming:potatoe", {"farming:potatoe_1", "farming:potatoe_2"}, 50, 20) diff --git a/mods/farming/pumpkin.lua b/mods/farming/pumpkin.lua new file mode 100644 index 00000000..73991ca7 --- /dev/null +++ b/mods/farming/pumpkin.lua @@ -0,0 +1,446 @@ +minetest.register_craftitem("farming:pumpkin_seed", { + description = "Pumpkin Seed", + inventory_image = "farming_pumpkin_seed.png", + on_place = function(itemstack, placer, pointed_thing) + local above = minetest.env:get_node(pointed_thing.above) + if above.name == "air" then + above.name = "farming:pumpkin_1" + minetest.env:set_node(pointed_thing.above, above) + itemstack:take_item(1) + return itemstack + end + end +}) + +minetest.register_node("farming:pumpkin_1", { + paramtype = "light", + drawtype = "nodebox", + drop = "", + tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png"}, + node_box = { + type = "fixed", + fixed = { + {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + }, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("farming:pumpkin_2", { + paramtype = "light", + drawtype = "nodebox", + drop = "", + tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png"}, + node_box = { + type = "fixed", + fixed = { + {-0.35, -0.5, -0.35, 0.35, 0.2, 0.35} + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.35, -0.5, -0.35, 0.35, 0.2, 0.35} + }, + }, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("farming:pumpkin", { + description = "Pumpkin", + paramtype2 = "facedir", + tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png"}, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2}, + sounds = default.node_sound_wood_defaults(), + + on_punch = function(pos, node, puncher) + local tool = puncher:get_wielded_item():get_name() + if tool and tool == "default:sword_wood" or tool == "default:sword_stone" or tool == "default:sword_steel" then + node.name = "farming:pumpkin_face" + minetest.env:set_node(pos, node) + puncher:get_inventory():add_item("main", ItemStack("farming:pumpkin_seed")) + if math.random(1, 5) == 1 then + puncher:get_inventory():add_item("main", ItemStack("farming:pumpkin_seed")) + end + end + end +}) + +farming:add_plant("farming:pumpkin", {"farming:pumpkin_1", "farming:pumpkin_2"}, 80, 20) + +minetest.register_node("farming:pumpkin_face", { + description = "Pumpkin", + paramtype2 = "facedir", + tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face.png"}, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("farming:pumpkin_face_light", { + description = "Pumpkin", + paramtype2 = "facedir", + light_source = LIGHT_MAX-2, + tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face_light.png"}, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:pumpkin_face_light", + recipe = {"farming:pumpkin_face", "default:torch"} +}) + +-- ========= BIG PUMPKIN ========= +minetest.register_node("farming:big_pumpkin", { + description = "Big Pumpkin", + paramtype2 = "facedir", + tiles = {"farming_pumpkin_big_side.png"}, + selection_box = { + type = "fixed", + fixed = { + {-1, -0.5, -1, 1, 1.5, 1} + } + }, + groups = {choppy=1, oddly_breakable_by_hand=1, flammable=2}, + sounds = default.node_sound_wood_defaults(), + + after_place_node = function(pos, placer) + for dx=-1,1 do + for dy=0,1 do + for dz=-1,1 do + pos.x = pos.x+dx + pos.y = pos.y+dy + pos.z = pos.z+dz + if dx ~= 0 or dy ~= 0 or dz ~= 0 then + if minetest.env:get_node(pos).name ~= "air" then + pos.x = pos.x-dx + pos.y = pos.y-dy + pos.z = pos.z-dz + minetest.env:remove_node(pos) + minetest.after(0.1, function(placer) + local inv = placer:get_inventory() + local index = placer:get_wield_index() + inv:set_stack("main", index, ItemStack("farming:big_pumpkin")) + end, placer) + return + end + end + pos.x = pos.x-dx + pos.y = pos.y-dy + pos.z = pos.z-dz + end + end + end + for dy=0,1 do + pos.y = pos.y+dy + pos.z = pos.z+1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=2}) + pos.x = pos.x-1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=2}) + pos.x = pos.x+1 + pos.z = pos.z-2 + minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=4}) + pos.x = pos.x+1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=4}) + pos.z = pos.z+1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=3}) + pos.z = pos.z+1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=3}) + pos.z = pos.z-1 + pos.x = pos.x-2 + minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=1}) + pos.z = pos.z-1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=1}) + pos.z = pos.z+1 + pos.x = pos.x+1 + pos.y = pos.y-dy + end + pos.y = pos.y+1 + minetest.env:set_node(pos, {name="farming:big_pumpkin_top"}) + end, + + after_destruct = function(pos, oldnode) + for dx=-1,1 do + for dy=0,1 do + for dz=-1,1 do + pos.x = pos.x+dx + pos.y = pos.y+dy + pos.z = pos.z+dz + local name = minetest.env:get_node(pos).name + if string.find(name, "farming:big_pumpkin") then + minetest.env:remove_node(pos) + end + pos.x = pos.x-dx + pos.y = pos.y-dy + pos.z = pos.z-dz + end + end + end + end +}) + +minetest.register_node("farming:big_pumpkin_side", { + paramtype = "light", + paramtype2 = "facedir", + tiles = {"farming_pumpkin_big_top_side.png", "farming_pumpkin_big_side.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0, 0.5, 0.5, 0.5} + } + }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0} + } + }, + groups = {not_in_creative_inventory=1}, +}) +minetest.register_node("farming:big_pumpkin_corner", { + paramtype = "light", + paramtype2 = "facedir", + tiles = {"farming_pumpkin_big_top_corner.png", "farming_pumpkin_big_side.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0, 0, 0.5, 0.5} + } + }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0} + } + }, + groups = {not_in_creative_inventory=1}, +}) + +minetest.register_node("farming:big_pumpkin_top", { + paramtype = "light", + tiles = {"farming_pumpkin_big_top.png"}, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0} + } + }, + groups = {not_in_creative_inventory=1}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:big_pumpkin", + recipe = {"bucket:bucket_water", "farming:pumpkin"}, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"} + } +}) + +-- ========= SCARECROW ========= +local box1 = { + {-1, -8, -1, 1, 8, 1}, +} + +local box2 = { + {-1, -8, -1, 1, 8, 1}, + {-12, -8, -1, 12, -7, 1}, + {-5, -2, -5, 5, 8, 5} +} + +for j,list in ipairs(box1) do + for i,int in ipairs(list) do + list[i] = int/16 + end + box1[j] = list +end + +for j,list in ipairs(box2) do + for i,int in ipairs(list) do + list[i] = int/16 + end + box2[j] = list +end + +minetest.register_node("farming:scarecrow", { + description = "Scarecrow", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"farming_scarecrow_top.png", "farming_scarecrow_top.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_front.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = box2 + }, + selection_box = { + type = "fixed", + fixed = { + {-12/16, -1.5, -0.5, 12/16, 0.5, 0.5} + } + }, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2}, + + after_place_node = function(pos, placer) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + pos.y = pos.y+1 + if minetest.env:get_node(pos).name ~= "air" then + pos.y = pos.y-1 + minetest.env:remove_node(pos) + minetest.after(0.1, function(placer) + local inv = placer:get_inventory() + local index = placer:get_wield_index() + inv:set_stack("main", index, ItemStack("farming:scarecrow")) + end, placer) + return + end + minetest.env:set_node(pos, node) + pos.y = pos.y-1 + node.name = "farming:scarecrow_bottom" + minetest.env:set_node(pos, node) + end, + + after_destruct = function(pos, oldnode) + pos.y = pos.y-1 + if minetest.env:get_node(pos).name == "farming:scarecrow_bottom" then + minetest.env:remove_node(pos) + end + end +}) + +minetest.register_node("farming:scarecrow_bottom", { + paramtype = "light", + paramtype2 = "facedir", + tiles = {"default_wood.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = box1 + }, + groups = {not_in_creative_inventory=1}, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0} + } + } +}) + +minetest.register_craft({ + output = "farming:scarecrow", + recipe = { + {"", "farming:pumpkin_face", "",}, + {"default:stick", "default:stick", "default:stick",}, + {"", "default:stick", "",} + } +}) + +minetest.register_node("farming:scarecrow_light", { + description = "Scarecrow", + paramtype = "light", + paramtype2 = "facedir", + light_source = LIGHT_MAX-2, + tiles = {"farming_scarecrow_top.png", "farming_scarecrow_top.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_front_light.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = box2 + }, + selection_box = { + type = "fixed", + fixed = { + {-12/16, -1.5, -0.5, 12/16, 0.5, 0.5} + } + }, + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2}, + + after_place_node = function(pos, placer) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + pos.y = pos.y+1 + if minetest.env:get_node(pos).name ~= "air" then + pos.y = pos.y-1 + minetest.env:remove_node(pos) + minetest.after(0.1, function(placer) + local inv = placer:get_inventory() + local index = placer:get_wield_index() + inv:set_stack("main", index, ItemStack("farming:scarecrow_light")) + end, placer) + return + end + minetest.env:set_node(pos, node) + pos.y = pos.y-1 + node.name = "farming:scarecrow_bottom" + minetest.env:set_node(pos, node) + end, + + after_destruct = function(pos, oldnode) + pos.y = pos.y-1 + if minetest.env:get_node(pos).name == "farming:scarecrow_bottom" then + minetest.env:remove_node(pos) + end + end +}) + +minetest.register_craft({ + output = "farming:scarecrow_light", + recipe = { + {"", "farming:pumpkin_face_light", "",}, + {"default:stick", "default:stick", "default:stick",}, + {"", "default:stick", "",} + } +}) + +-- ========= FUEL ========= +minetest.register_craft({ + type = "fuel", + recipe = "farming:pumpkin_seed", + burntime = 1 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:pumpkin", + burntime = 5 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:pumpkin_face", + burntime = 5 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:pumpkin_face_light", + burntime = 7 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:big_pumpkin", + burntime = 10 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:scarecrow", + burntime = 5 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:scarecrow_light", + burntime = 5 +}) diff --git a/mods/farming/rhubarb.lua b/mods/farming/rhubarb.lua new file mode 100644 index 00000000..e9dd59b6 --- /dev/null +++ b/mods/farming/rhubarb.lua @@ -0,0 +1,72 @@ +minetest.register_craftitem("farming:rhubarb_seed", { + description = "Rhubarb Seeds", + inventory_image = "farming_rhubarb_seed.png", + on_place = function(itemstack, placer, pointed_thing) + local above = minetest.env:get_node(pointed_thing.above) + if above.name == "air" then + above.name = "farming:rhubarb_1" + minetest.env:set_node(pointed_thing.above, above) + itemstack:take_item(1) + return itemstack + end + end +}) + +minetest.register_node("farming:rhubarb_1", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_rhubarb_1.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+5/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:rhubarb_2", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_rhubarb_2.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+11/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:rhubarb", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + tiles = {"farming_rhubarb_3.png"}, + drop = { + max_items = 6, + items = { + { items = {'farming:rhubarb_seed'} }, + { items = {'farming:rhubarb_seed'}, rarity = 2}, + { items = {'farming:rhubarb_seed'}, rarity = 5}, + { items = {'farming:rhubarb_item'} }, + { items = {'farming:rhubarb_item'}, rarity = 2 }, + { items = {'farming:rhubarb_item'}, rarity = 5 } + } + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craftitem("farming:rhubarb_item", { + description = "Rhubarb", + inventory_image = "farming_rhubarb.png", +}) + +farming:add_plant("farming:rhubarb", {"farming:rhubarb_1", "farming:rhubarb_2"}, 50, 20) diff --git a/mods/farming/rubber.lua b/mods/farming/rubber.lua new file mode 100644 index 00000000..768466d3 --- /dev/null +++ b/mods/farming/rubber.lua @@ -0,0 +1,104 @@ +minetest.register_node("farming:rubber_sapling", { + description = "Rubber Tree Sapling", + drawtype = "plantlike", + tiles = {"farming_rubber_sapling.png"}, + inventory_image = "farming_rubber_sapling.png", + wield_image = "farming_rubber_sapling.png", + paramtype = "light", + walkable = false, + groups = {dig_immediate=3,flammable=2}, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("farming:rubber_tree_full", { + description = "Rubber Tree", + tiles = {"default_tree_top.png", "default_tree_top.png", "farming_rubber_tree_full.png"}, + groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, + drop = "default:tree", + sounds = default.node_sound_wood_defaults(), + + on_dig = function(pos, node, digger) + minetest.node_dig(pos, node, digger) + minetest.env:remove_node(pos) + end, + + after_destruct = function(pos, oldnode) + oldnode.name = "farming:rubber_tree_empty" + minetest.env:set_node(pos, oldnode) + end +}) + + +minetest.register_node("farming:rubber_tree_empty", { + tiles = {"default_tree_top.png", "default_tree_top.png", "farming_rubber_tree_empty.png"}, + groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2, not_in_creative_inventory=1}, + drop = "default:tree", + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_abm({ + nodenames = {"farming:rubber_tree_empty"}, + interval = 60, + chance = 15, + action = function(pos, node) + node.name = "farming:rubber_tree_full" + minetest.env:set_node(pos, node) + end +}) + +minetest.register_node("farming:rubber_leaves", { + drawtype = "allfaces_optional", + visual_scale = 1.3, + tiles = {"default_leaves.png"}, + paramtype = "light", + groups = {snappy=3, leafdecay=3, flammable=2, not_in_creative_inventory=1}, + drop = { + max_items = 1, + items = { + { + items = {'farming:rubber_sapling'}, + rarity = 20, + }, + } + }, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_abm({ + nodenames = {"farming:rubber_sapling"}, + interval = 60, + chance = 20, + action = function(pos, node) + farming:generate_tree(pos, "farming:rubber_tree_full", "farming:rubber_leaves", {"default:dirt", "default:dirt_with_grass"}) + end +}) + +minetest.register_on_generated(function(minp, maxp, blockseed) + if math.random(1, 100) > 5 then + return + end + local tmp = {x=(maxp.x-minp.x)/2+minp.x, y=(maxp.y-minp.y)/2+minp.y, z=(maxp.z-minp.z)/2+minp.z} + local pos = minetest.env:find_node_near(tmp, maxp.x-minp.x, {"default:dirt_with_grass"}) + if pos ~= nil then + farming:generate_tree({x=pos.x, y=pos.y+1, z=pos.z}, "farming:rubber_tree_full", "farming:rubber_leaves", {"default:dirt", "default:dirt_with_grass"}) + end +end) + +minetest.register_craftitem("farming:bucket_rubber", { + description = "Bucket with Caoutchouc", + inventory_image = "farming_bucket_rubber.png", + stack_max = 1, +}) + +local bucket_tmp = { + source = "farming:rubber_tree_full", + itemname = "farming:bucket_rubber" +} +bucket.liquids["farming:rubber_tree_full"] = bucket_tmp + +-- ========= FUEL ========= +minetest.register_craft({ + type = "fuel", + recipe = "farming:rubber_sapling", + burntime = 10 +}) diff --git a/mods/farming/soil.lua b/mods/farming/soil.lua new file mode 100644 index 00000000..f8003354 --- /dev/null +++ b/mods/farming/soil.lua @@ -0,0 +1,45 @@ +minetest.register_node("farming:soil", { + tiles = {"farming_soil.png", "default_dirt.png", "default_dirt.png", "default_dirt.png", "default_dirt.png", "default_dirt.png"}, + drop = "default:dirt", + groups = {crumbly=3, not_in_creative_inventory=1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.4}, + }), +}) + +minetest.register_node("farming:soil_wet", { + tiles = {"farming_soil_wet.png", "farming_soil_wet_side.png", "farming_soil_wet_side.png", "farming_soil_wet_side.png", "farming_soil_wet_side.png", "farming_soil_wet_side.png"}, + drop = "default:dirt", + groups = {crumbly=3, not_in_creative_inventory=1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.4}, + }), +}) + +minetest.register_abm({ + nodenames = {"farming:soil"}, + interval = 15, + chance = 3, + action = function(pos, node) + if minetest.env:find_node_near(pos, 4, {"default:water_source", "default:water_flowing"}) then + node.name = "farming:soil_wet" + minetest.env:set_node(pos, node) + end + end, +}) + +-- ========= EXPERIMENTAL ========= +-- This will turn soil to dirt when walking over it +--[[minetest.register_abm({ + nodenames = {"farming:soil", "farming:soil_wet"}, + interval = 2, + chance = 2, + action = function(pos, node) + pos.y = pos.y+1 + if #(minetest.env:get_objects_inside_radius(pos, 0.8)) > 0 then + pos.y = pos.y-1 + node.name = "default:dirt" + minetest.env:set_node(pos, node) + end + end, +})]] diff --git a/mods/farming/strawberries.lua b/mods/farming/strawberries.lua new file mode 100644 index 00000000..e2b21326 --- /dev/null +++ b/mods/farming/strawberries.lua @@ -0,0 +1,89 @@ +minetest.register_craftitem("farming:strawberry_seed", { + description = "Strawberry Seeds", + inventory_image = "farming_strawberry_seed.png", + on_place = function(itemstack, placer, pointed_thing) + local above = minetest.env:get_node(pointed_thing.above) + if above.name == "air" then + above.name = "farming:strawberry_1" + minetest.env:set_node(pointed_thing.above, above) + itemstack:take_item(1) + return itemstack + end + end +}) + +minetest.register_node("farming:strawberry_1", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_strawberry_1.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+9/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:strawberry_2", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_strawberry_2.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+12/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:strawberry_3", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + drop = "", + tiles = {"farming_strawberry_3.png"}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+14/16, 0.5} + }, + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("farming:strawberry", { + paramtype = "light", + walkable = false, + drawtype = "plantlike", + tiles = {"farming_strawberry_4.png"}, + drop = { + max_items = 6, + items = { + { items = {'farming:strawberry_seed'} }, + { items = {'farming:strawberry_seed'}, rarity = 2}, + { items = {'farming:strawberry_seed'}, rarity = 5}, + { items = {'farming:strawberry_item'} }, + { items = {'farming:strawberry_item'}, rarity = 2 }, + { items = {'farming:strawberry_item'}, rarity = 5 } + } + }, + groups = {snappy=3, flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craftitem("farming:strawberry_item", { + description = "Strawberry", + inventory_image = "farming_strawberry.png", + on_use = minetest.item_eat(2), +}) + +farming:add_plant("farming:strawberry", {"farming:strawberry_1", "farming:strawberry_2", "farming:strawberry_3"}, 50, 20) diff --git a/mods/farming/textures/farming_banana.png b/mods/farming/textures/farming_banana.png new file mode 100644 index 0000000000000000000000000000000000000000..f775e14cd96d00ee04e28ff5ed0080e56036f673 GIT binary patch literal 515 zcmV+e0{s1nP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#00007bV*G`2iyoB z5CbCwPWwFo00DzZL_t(I%cYXdD@0Kkho5urU}hsb*(eKkV`D2j zd;i8PZIot3N!h3=+fjG0n1#r3XE=bYbj-rn;FDJ4$pY-<&l z({ONckmdatic^587CLtf2!@US0g5G@4Dn!NfY+Nup@ZR`4vyAG{si!tDhiDSz~p!w z`Fw@BIq}=+%ZJAdHV*|rf0sr&p5i=t!tL%DPdhUe!^v$QrYccnrnKh*@YFZ+VnO=+ zf`%52+|D!~o;T_=ANP01sOAl}o#Q!uOE8>bzRd%G*KeSB{YHs4w`9v?UPvo@jVqTY z6J5cbkK%gIku(g__gNOETFU=ID4-KQO~|1>jn1ZCA{To?sj{h772ZFqv4lX=+hxLt z0f^$mKUD7T(s(i9=qiHV-63o0o2b)#JYKGmipTg4^C4Qxdk_lf#iayLtv8e^8-W{3 z2mrFwic$YzWs$xi747o+4e=`zLjk>XU`dtX*{CRY?+bQ;r%1TN|Ahbm002ovPDHLk FV1iwP-J}2j literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_banana_leaves.png b/mods/farming/textures/farming_banana_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8eecbf1251e08347e964853dabed27c627c9c1 GIT binary patch literal 621 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{Fww*V5f^YV91b zkZVMVV`)i7ei6gUb!R+)LR=+4A?N&p%A(Blj1q=5{Aa9yqI_V{qSVBa%=|oslFZyx z2Gj5SoIn{)kW6rXT1k0gQ7S`h!GDl)Zjhi$W^r;(B2Z}&!}bGP`hmh6AmQ-DqP)z! zbcO@c&)R`v>=6B>MaiiQU;j71hADH-&&^HED`EI{X4-zB7#m1gNM=b+D#MC*m(+nG zKRjI=Lo9mNPBP3sY#`7&-$#gJp{C+&Ly0c#s4Xck?Jw4Un`9r5EFh7qq;iyF$$`=g z|B0Km@&#=QFO`4y6A-l97jbT=B~E zd_O;bN8SH~H@zqHXF6rhKLz3xYk)|@-0-_^MPE{EQuf?NCdwPs1JIq_M( zT6xN}Dk&pf9Jf8hUt7<1gZRASkVVs7fs)D#-Al Ze$|J$Odc;*=K#Zi!PC{xWt~$(697ur;#U9w literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_banana_sapling.png b/mods/farming/textures/farming_banana_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..821c64ff374ad182b4b0bb87d4a4f7a44b450430 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{FwwmonjgZoD2W ziU&OF--5C#{5LXFM$T`2DvM4h>ql94%{~0TwC?8m~C^fMpGe1wEBr`Xa z!Sp*nCs2kHBomyUR#Ki=l*$lW@E@d{8zktGS)81c2vl0cu>HW6exNW1NH{#PC@(WF zo#BA=vv!~uJ4AnJQF1E7*Z+aL#|S@MTYn?|&dS>`lg!Z}QV+jMQ$iTEsS=XHB!xDhR)^ zGb6E7kSje>`SAbd%MuT`zJ@&gw^+LCovDcanR_daZFs2Aq<`l0!Gv|If6Z@fY&>`} z;_v>(SGsJ>SEDuT5?uP-)RVvd|FdTg&ujiUi6us1|NnozZqJryrq;H8|3AYydunD2 z+HwT&SeVTH`2X^C9v|Ms~&PkjBq)CXzl$1*t??jF*;>6opb0}L+)Pgg&ebxsLQ0A8N` Am;e9( literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_bread.png b/mods/farming/textures/farming_bread.png new file mode 100644 index 0000000000000000000000000000000000000000..6dca9831cc77450685c708758f2207294995f8fe GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*bKrO34m@#Ixngjy_v!nwN`(;m!MB z47Z>CVEFv)F9Q=;6p4V@1QP;jfPwG7|1pU2vx2z@Q6LwjDa1yE;nUB*3|H@e1uM{2 zarp^Z6Nn8DRU;K{oB@HZ39b>u07VJ10$5^3 a7DHzLo3u}!^TzcPATdu@KbLh*2~7Yq>)hD@ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_bread_pumpkin.png b/mods/farming/textures/farming_bread_pumpkin.png new file mode 100644 index 0000000000000000000000000000000000000000..44db02e254c97d2d3ae003eb3192236258aeca54 GIT binary patch literal 511 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m1E01m1FT&pG+00007bV*G`2iyn` z5eysp4`Rds00DnVL_t(2&xMk|O9EjS$3GY4A{fdAq7Zl_2sIUvLP3KBbxr;ihcY5J{KhNjO^E`rW+x&Lq zWXSWVlsW>y*k4do^r0N+Xn;F zM!WBSfpRiruPp}2$r`l>C|2SCtj<-5h2iij!da%p&Z$VZXAMCo-fYYdKu*@kD-xRv z8pTQ+wP66zd^YL!ER<4572#`ty*j&(nVZ2e0 z3#JkQ@`^+zUFBt9QLMyiJoVXMZ;gZi#+{4P6ackhd~3u{2te3a3fl8Ce#D@Uwr-M5 zH@PT8el@vKl~PBzy))c7#lrjxeOrK^3;h=a@Chq7+kHZuO{4$-002ovPDHLkV1k^( B(3t=L literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_bucket_rubber.png b/mods/farming/textures/farming_bucket_rubber.png new file mode 100644 index 0000000000000000000000000000000000000000..effdcac6668055ea457970d96759feec677d797b GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf<4n6@6vB)*o^npTqJzX3_EKZ-D zbda~jfQRM!i(L+laW7QXE)ncDtGK{rq*3~&mVwnnK&an(|00du^GbRC>{?QAez}w; z=gGzG9&zgF8)x2C+MZi|!HcunIBOQ$XPfy)Z~h1gU8NOn%(P(U#WNfYiY!&{XPW(f zV$h!G&?CrT(5Jj>oim4`^h&RZd%jO+KfUSA^UPTbRZWr$W&fX4dV9Zep8KWPduuj5c>jv~)Oo+hjj!xa06oIs>FVdQ I&MBb@0M0#oCjbBd literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cake_mix.png b/mods/farming/textures/farming_cake_mix.png new file mode 100644 index 0000000000000000000000000000000000000000..5c4b19758af8a5804049ebb615aafdd7c758c972 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf<4qib4wyWi{PXmRnd%8G=Se(8a zq{w&JfM-w0;^c!<+kQ2C`kSb7sUXvx?OR9Vzl4gQ6LkUsMpxLUux&Y#!+*kInx1Fy zRKLwBC(CNS-Q@ewUbG`J_LFj=@rHM6=Zb&MxyyXllp}TXl06$jJsN7~cU&-QI{M%}NB^l+>}pCDY;%g=oWI19 zW51ZiJH*R3fxTxYL&J{!GqUICHYVTJ*XWOaJZ+Ds>hHP1h39^j_=&{_dSzbwH%p*t isr@A{L-`-ppV-15#66uI@wXZ1MFvk-KbLh*2~7Y>4TyOF literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_cake_mix_pumpkin.png b/mods/farming/textures/farming_cake_mix_pumpkin.png new file mode 100644 index 0000000000000000000000000000000000000000..171e486703dae23880edc55c83aa53c49815ffc5 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf<4t_yy^;wD?EkL2`o-U3d7N_q9 zE#y07AW$1?@VoP-+hCRN?r?J?>Zx- zw{uDP-tX`3K5ekya`)!1AQ_37jaL)yN7}6qV^+BBsWnqHb!VwN%K|ygR}*j5T-4Fv zNSP&U>SWB|aJ@)LG$7@hzm|hdZ4<|h{?@b?QGQMz%3GwjzH4kvE8sdcLNEG}l)CqW4{wFP9d9r6zIUYS@41aNGm9LKy<>2wPfdG!ZI!M1 hN9QQT&yD+&^*t^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{EBB*Wuq6=JW_G ziU&OF--5C#{5LXFM$T`2DvM4h>ql94%{~0TwC?8m~C^fMpGe1wEBr`Xa z!Sp*nCs2kHBomyUR#Ki=l*$lW@E@d{8zktGS)81c2vl0cu>HW6exNW1NH{#PC@(WF zo#BA=vv!~uJ4AnJQF1E7*ZWC7o9Pe{8~#uaoot*W`nfXUiTA*u!>U4)^7r)2Rjx z4_Q+h)^MgNR8>6q%4BwZ!S0p>FPHD9fciSWGw~eAaW&(4X0?dN!JNZV#>0p~dVz&G a6T_VNEl)1DZ0rR3iow&>&t;ucLK6U;PT(Z~ 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..09cfe7391f52a0230312094a3f2cc990076fa459 GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{EBBSJXF{CX)^p za*Zf)EG@~%FJf4^?u-Xeh^quB|BMw-ln*Rgl$uzQnV+Xnl9`*z zVEUb(6DY$8k_paFD=AMbN@a*G_zzOf4H9(8EKbfz1S&0J*nVJ3KTwzhBpjYtl$V*8 z&Tv5bSvydS9iqRqC^?nk>;LB0FlEm9xw)x%B@ExrOxq6>V*@D*$t=l9Wmxg^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{EBBR}#IueVQ0p z$TgzGv9u&3zldSwx-%X?A+8djkaK=PWl?5&MhU|j{xeoUQ9iI}QEFmIW`3SRNoH;; zgXwpEPM{1YNG3Qxt)x7$D3u|$;6F$?H%QPWvp6{?5va6?Vf%qC{Xk(3kZ^cnQC?Q0!XYD{Sc8LDcqU2PDum780!<0Ga=jNv7l`woeGi^Umj18nLB(o$Zm0`uZOX@(8 z08bak5R2aAKmY&RGpjaqD&1Yo)+6Om%)HHZ`tS97PJXxVIhJ|o|NsAnAFicu`k%Pv zlG}VB?|*v3#TOE*84cEKx%k}vj6uwd1!+!g0dJTXWFH^ZP1rL3F3@ZSPgg&ebxsLQ E05U(Gng9R* 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..74e3dc89c8dc55cd5e870dc7a8d63b02aafdcdac GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{EBBSLRs0>U1Ai z$TgzGv9u&3zldSwx-%X?A+8djkaK=PWl?5&MhU|j{xeoUQ9iI}QEFmIW`3SRNoH;; zgXwpEPM{1YNG3Qxt)x7$D3u|$;6F$?H%QPWvp6{?5va6?Vf%qC{Xk(3kZ^cnQC?Q0!XYD{Sc8LDcqU2PDum780!<0Ga=jNv7l`woeGi^Umj18nLB(o$Zm0`uZOX@(8 zHcuDF5R2Zc0iIk920SuH{VO)G|LuK|Ec&L|X3KdA|3<0X3pkn@6`vSHYfY*!{;K`W zo~5Sb%SBQ7s}U{?61Vpn$$HG&(AsxxZQ)9VK07PE*FFpr=B}L-EP7qH6~*Yo zYcA*uU$zcke#7^~%Y9Q7dRGfSap~gx!tZ6kTGDi!X}*dD!`!BATffbH{2b^a22WQ% Jmvv4FO#nUWuQ&hz 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..1c6445f39126b115294f9b9e93f77ebce99c4a61 GIT binary patch literal 550 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{EBBS7EORakv2% za*Zf)EG@~%FJf4^?u-Xeh^quB|BMw-ln*Rgl$uzQnV+Xnl9`*z zVEUb(6DY$8k_paFD=AMbN@a*G_zzOf4H9(8EKbfz1S&0J*nVJ3KTwzhBpjYtl$V*8 z&Tv5bSvydS9iqRqC^?nk>;LB0FlEm9xw)x%B@ExrOxq6>V*@D*$t=l9WmxgpplG+fy*XWt`##MEbq{l1_L&$HQQE7xWgf14xnjB6#6y0=K+^tBIDcL_4QJDbP0l+XkK Dd6dN( literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_carrot_seed.png b/mods/farming/textures/farming_carrot_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..69bc45040a4fbbd43ba9063841ab88cbf22bcb0f GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{EBB*W>QyeNqV) za*Zf)EG@~%FJf4^?u-Xeh^quB|BMw-ln*Rgl$uzQnV+Xnl9`*z zVEUb(6DY$8k_paFD=AMbN@a*G_zzOf4H9(8EKbfz1S&0J*nVJ3KTwzhBpjYtl$V*8 z&Tv5bSvydS9iqRqC^?nk>;LB0FlEm9xw)x%B@ExrOxq6>V*@D*$t=l9Wmxg@yzdEZJXOv zUamPXTxE@Z3{JO0`AEuZ$h zZ{am{HLLeeVoca<`o8~fHIF=lTGOSF+;ELkQeLcw6_2<^ChzsR@m1IQ+Wz_fmdPHP zwu@zw3d4(i7v{T6TRt~4@LIvO0Nd)xpHpq>CiUM@=VUEmb(GF}u6jUS;y3ftb&LQL70(Y)*K0-AbW|YuPgf<4qhP!rG+0Z3ju{BOI#yLobz*Y zQ}ap~oQqNuOHxx5$}>wc6x=<11Hv2m#DR(qdAc};Se$-4(VnZ>K;mfplGV=JofLOf zHR(tiS8?i3nOt%<~5Y644w=Qcc--1 zt)KiS?J#RYsg+bz*0q-tekyt@ntHK4%E^uq(tZB(UBZ+W0Vak+k{@a`T8~tR{r=SC zZmk{p_OzAnVwK>!wOXGLXst}5hc#~ zxw)x%B@E6*sfi`2DGKG8B^e6tp1uL$jeO!jMY}v*978Nlzn!p`x7k3T_5Q*wA}^I( zjWTB*;9YuJXJYFN72VJ!S8g^)X?m21@O)U&_aV8N{eCB+u$*{vd z@6PAdev{5g{nKMOwJJfwTSJM7p~|m9s!K8O zd{VrY#;w4UN%8lVvZ$TE)N0Py@cnc5w%5%+ex0@PuG~B4V%c7ot-mjP*0FWt+53CT q)9=}rq>!LLAHFnGH9xvX<>&kwIgI7r2^4WQj1fY;)iEBiObAE1a zYF-J0b5UwyNotBhd1gt5g1e`0KzJjcI8afsr;B5V#p$b;4Y>{|@UUKxe;HuYXpwft zuZK9 Pp!E!%u6{1-oD!MQL70(Y)*K0-AbW|YuPgf<4qib%!=2rX(mnJn(L9DDa z%BtcPaSnuY(;6@dPgI#eRR TUsYlr(02@;u6{1-oD!M-Npt$@a4-FgGWK_!A%j)1yT=|965Oa2o!QJcm1#_a! zr#kw(&zm@Z_EZb~1I(Ahp8mhQ++T9u-^8RR&(m6W_bd>fU|OG=p1!B>J#**9jwO;e z!xr%=_!dH?_b literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_hoe_wood.png b/mods/farming/textures/farming_hoe_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..6b33f6ec31948b7cf6731c84a1c9684f90c4561b GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^M2+ zY#CHE3zWoxBAf*tk;M!Q+`=Ht$S`Y;1W=H@#M9T6{SF5&zrN9~rKc@`LPtGa978Nl zC#M`>oHNDZzqhxyu>lb1*wwTPPPdvPbVTYsjDG@WmleBFM*?zV@|XY2px-}8fQ`;5*;jt%ecmAkRAv9&GtpKtWy z^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{Fww7gpTiU&OF--5C#{5LXFM$T`2DvM4h>ql94%{~0TwC?8m~C^fMpGe1wEBr`Xa z!Sp*nCs2kHBomyUR#Ki=l*$lW@E@d{8zktGS)81c2vl0cu>HW6exNW1NH{#PC@(WF zo#BA=vv!~uJ4AnJQF1E7*ZOj~ic0Wd2gWjPcb0wnv)EKN|`Q{COs9=Vnn+inzEfgqPuW z!BQEcsJs`s&c!TxHu{$Fles4~6iv{)vdYupSowjzsx@C!I(ArV<}j7b-tlb{gWtvF zGaZs^A2{+Vn3v4mlKn!oYWei;zdI+|2x#9qCBOBLbpE7;4zGW;S#AY7hr!d;&t;uc GLK6TGxvawg literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_orange_1.png b/mods/farming/textures/farming_orange_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ab553c899d680e34f02b0658bd3984e01889f8f2 GIT binary patch literal 430 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{Fww7gYJWql94%{~0TwC?8m~C^fMpGe1wEBr`Xa z!Sp*nCs2kHBomyUR#Ki=l*$lW@E@d{8zktGS)81c2vl0cu>HW6exNW1NH{#PC@(WF zo#BA=vv!~u*a^Y;rA5i93}62@zlJGu&d<$F%`0K}c4pdspcorSYe;5EPAbEScbC+G zB9@*mjv*Gk$$$R;w`W#u=v2D9n5{?3fQjeEx0rYTw>>XnDVA~+7chD9|NnoBkLOl> f`2PdMJkP+u<8QU}|KoIDpdk#Nu6{1-oD!M^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{Fww7qqTe^ZhGW z$TgzGv9u&3zldSwx-%X?A+8djkaK=PWl?5&MhU|j{xeoUQ9iI}QEFmIW`3SRNoH;; zgXwpEPM{1YNG3Qxt)x7$D3u|$;6F$?H%QPWvp6{?5va6?Vf%qC{Xk(3kZ^cnQC?Q0!XYD{Sc8LDcqU2PDum780!<0Ga=jNv7l`woeGi^Umj18nLB(o$Zm0`uZOX@(8 zcuyC{5R2aAKmY&RGpjaqD&1Yo#*@ap&33x7T_I3VUi;oJpKta?(lh&eB0os>y%Ews z>E3hWN`geg*`GU1k}DYRuG}%Fx5to4@TS=`&9EOeCk`BF5aX_x>(#^fgn=PBIN#7H Sx%@8BDh5wiKbLh*2~7YwGoHr) literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_orange_3.png b/mods/farming/textures/farming_orange_3.png new file mode 100644 index 0000000000000000000000000000000000000000..af60f387975a7d24b0299856c6c0282bf8f2918b GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{Fww7n09!a(E6F za*Zf)EG@~%FJf4^?u-Xeh^quB|BMw-ln*Rgl$uzQnV+Xnl9`*z zVEUb(6DY$8k_paFD=AMbN@a*G_zzOf4H9(8EKbfz1S&0J*nVJ3KTwzhBpjYtl$V*8 z&Tv5bSvydS9iqRqC^?nk>;LB0FlEm9xw)x%B@ExrOxq6>V*@D*$t=l9WmxgODdIh(@7|{+thu5H_`EW!`Ybz;v0<}7Dov6 qi*I1eX`7V7VAt@FH7M3`BR9i~;J^#X!5ScsFnGH9xvX^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{Fww7v}k-ZcqUh za*Zf)EG@~%FJf4^?u-Xeh^quB|BMw-ln*Rgl$uzQnV+Xnl9`*z zVEUb(6DY$8k_paFD=AMbN@a*G_zzOf4H9(8EKbfz1S&0J*nVJ3KTwzhBpjYtl$V*8 z&Tv5bSvydS9iqRqC^?nk>;LB0FlEm9xw)x%B@ExrOxq6>V*@D*$t=l9Wmxgu zV~xY~BXUw3+gVSGXzw_vzUO~JsjQn$Lb2VZ?hCvJJB)MAwd_2>w9JOJUwi{&PTQmu n20Mq6O^2Uyb;TO+@Gvl#zw?isE5M`!bTWgdtDnm{r-UW|E@`!b literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_orange_seed.png b/mods/farming/textures/farming_orange_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..3873bade454bb2804fe4926ed7db9b02ffc8dd85 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf<4taigt)BV6I)OrxC9V-A&iT2y zsd*&~&PAz-C8;S2<(VZJ3hti10pX2&;y^_uo-U3d7N?W{{QqyytlH4o=yZT7{qMR4 zi&jgKtSyGhb7LF01qvh&vDV*}khlAF{=`{&Uq}D| literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_potatoe.png b/mods/farming/textures/farming_potatoe.png new file mode 100644 index 0000000000000000000000000000000000000000..50411f837b4a462692733b892bbde51f8bc0e8a8 GIT binary patch literal 525 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{Fww(-(bG+g$(_ za*Zf)EG@~%FJf4^?u-Xeh^quB|BMw-ln*Rgl$uzQnV+Xnl9`*z zVEUb(6DY$8k_paFD=AMbN@a*G_zzOf4H9(8EKbfz1S&0J*nVJ3KTwzhBpjYtl$V*8 z&Tv5bSvydS9iqRqC^?nk>;LB0FlEm9xw)x%B@ExrOxq6>V*@D*$t=l9WmxgHT|jDUc^T(Ud{*%^I%b>b;o^X16(aGA-v$*d|=W8mGU2Ipz8TQ-;}2G3yRyF>G>* zX?qCdCGOx!a`8W9AtcBQ1kEk;Ox?PUyk>Gbcl;Go%(??<*38U(dl*7JLedVsVgg39 Yz{22Z+pBDAfo^2*boFyt=akR{02iUMg#Z8m literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_potatoe_1.png b/mods/farming/textures/farming_potatoe_1.png new file mode 100644 index 0000000000000000000000000000000000000000..75a36d9251c7a25e40a17f0f080e00fc960193f1 GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{Fww)6{t7pYR+k ziU&OF--5C#{5LXFM$T`2DvM4h>ql94%{~0TwC?8m~C^fMpGe1wEBr`Xa z!Sp*nCs2kHBomyUR#Ki=l*$lW@E@d{8zktGS)81c2vl0cu>HW6exNW1NH{#PC@(WF zo#BA=vv!~uJ4AnJQF1E7*ZWXh(+()$-Z0+iX5%;oz+*q4k=%I?sDY4H7pw?ByOp3{Il8LtEEzybpGNO)|dnF z4zF5QPJf!yEPk`*nqt)K(vB<>HinDw9}dZ0_|C|n;wZE+H7n=twdB)ZcBMYx-thUc a?jC86%6X3_{y7P>kHOQ`&t;ucLK6U$l%rMv literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_potatoe_2.png b/mods/farming/textures/farming_potatoe_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6491d34ddc2d6ad713f554468e5a89678eda1b52 GIT binary patch literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{Fww(^690e#;6h ziU&OF--5C#{5LXFM$T`2DvM4h>ql94%{~3@%KCoy}YGO%dex5=}W^O8j z>34okpbRHSCOAK>q&%@Gl_9p^KS((@NYEv-I5{T~sI-V-`++U}Kw%D$aCl--US?i8 z!vX1M?LaYhi2l-|Q|C?XKlsV_;=BDPAFnl{RZ9hOhf3 zPZ!4!i{7_Ej$8*6cvf$k{-XTK{#EZkYNv^(E)5pEQ`qRFnL8^(l)moS%W}ZPr)26=gNu&eH0nHRikp+XLS8$b?|h;7;&99+-+j|2Z1t6!^dhzK zw5ZvE>LtBTr9GMgdFmaLQWLuqUhGYLJt6I|i;MZTj~hL{*KUmhI)=g1)z4*}Q$iB} DUS6;$ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_potatoe_3.png b/mods/farming/textures/farming_potatoe_3.png new file mode 100644 index 0000000000000000000000000000000000000000..37a2c972bf486830438d387b1c00aefe86cf6edb GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDEfH31!Z9ZwBAbW|YuPgf<4tahS@!Es6OhBO}o-U3d7N?g^ zIw*KpfrrJvr(UzU>cQN&n2z5K@m3y!SBid0^tVkk@O;aKYPv=}5t{GI_;atd{(1%Ot#a z-MYYam|1b!k$KCkx5oS~XRkG9&92dVkS3IEKgp2O+%=+b{?-j^p{y|y+EN@PZ!4!i_^&o z5*Y_LlD|BU`jeiJkWlgKnKm;JIG_J?y61?*0hg8B5geKdPmFeObE(fym@;u%g2DB0 zwOcTQX!a9K2Q*+ou<>c>XqN*&TUK#LeWUHx3v IIVCg!0QfyfsQ>@~ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_big_side.png b/mods/farming/textures/farming_pumpkin_big_side.png new file mode 100644 index 0000000000000000000000000000000000000000..2651380b2f624c3d4859b36a054a6ab5059de262 GIT binary patch literal 600 zcmV-e0;m0nP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z4k0JvFreW800G!ZL_t(2&n=QmZX-t!1tYVvKV(ysX5bV1nm&PHKoTf5$*#(e7n(@}pV*rBXS=*q4$|FS1p|N#XP}GDf2r7s98qYxf733= z{2~>`EyLB1Z^U%D>P(bGR>cv0Z|keO>qZ=3QsMV^)U=t#zY%?>GK)5yDucG>4wW{| zww-gQ#-2NXOq=FTNh7;XXUfe?n=ujJU(y!QW>*{gVOR70S%~U}R3Mh)?)wwS@wDxn zMdk2*m-Uw{4V?j1Rei%hfXp3P8g0#S*J-uwOl5q9RM`19Boh@w?PR(^rM=E(CfZcB zf4++dl{!-yH6DNpT5r zO{PuSGCp>ZCe!IBQFc`43vFdUzu7c1U5GArDrrB6=zHw{A(qDtPyoLJF%Gd4qSzUr z-+<|D`D4}w*s3ZuGF&cAZLYEV{avS(?Bnwwy>w~Q(&nxFA?vTqRCjOl)>LS#KfI2} z@hpThlvC;MRe@N=$U^Ig=sRsCI|DnPDe#s7^ me)Fo5>4a!iRUGLZTmJ|1{4#PGCFczQ0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z4kI$X+a`zr00G!ZL_t(2&n=QmZX-t!1tYVvKV(ysX5bV1nm&PHKoTf5$*#(e7n(@}pV*rBXS=*q4$|FS1p|N#XP}GDf2r7s98qYxf733= z{2~>`EyLB1Z^U%D>P(bGR>cv0Z|keO>qZ=3QsMV^)U=t#zY%?>GK)5yDucG>4wW{| zww-gQ#-2NXOq=FTNh7;XXUfe?n=ujJU(y!QW>*{gVOR70S%~U}R3Mh)?)wwS@wDxn zMdk2*m-Uw{4V?j1Rei%hfXp3P8g0#S*J-uwOl5q9RM`19Boh@w?PR(^rM=E(CfZcB zf4++dl{!-yH6DNpT5r zO{PuSGCp>ZCe!IBQFc`43vFdUzu7c1U5GArDrrB6=zHw{A(qDtPyoLJF%Gd4qSzUr z-+<|D`D4}w*s3ZuGF&cAZLYEV{avS(?Bnwwy>w~Q(&nxFA?vTqRCjOl)>LS#KfI2} z@hpThlvC;MRe@N=$U^Ig=sRsCI|DnPDe#s7^ me)Fo5>4a!iRUGLZTmJ|1{4#PGCFczQ0000QL70(Y)*K0-AbW|YuPgf<4t_p$0iNrNGJrx0JzX3_Bre;Y zyXbq^K!oAI=kDaCstR=y(_JGM22Bizj=Ej=W5p5Qf|sw2-y6KU`{m!lSies(E|FI+ zNA|3peCWnsZ%xUsO8ZjuEE?U$$-ECVXlXd7|90#XR}-C9BSu zH*Z(nKbI6I5&Gqx@6)3qotYQwcmLfe`8IF*k$*RGzW%D|@luxWzL>W}$K==dV!p>- eTI=0hx$2`=cqu+RD0v&`SO!m5KbLh*2~7Y1%5)k4 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_big_top_side.png b/mods/farming/textures/farming_pumpkin_big_top_side.png new file mode 100644 index 0000000000000000000000000000000000000000..e2eb1a75f5528df9ec7a863145c6e976cadd9427 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!2~4hMP3{LQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf9S(jzH51MA3$uJQd(o`pPl)Vq@9%puj$f z-fiBm+9Yx%PqS``c+bGX@P{+u%hYYmtlQWd%Gd+WUEUul(r{MkjNIYMkd3oyKRypV z)sykJ+_mD=lGIC89`%L)dN>Np*RqQ`rPo)kQ~qV`_@=QWWykMt*6#f+PpsUc7Z@*E zc=(&?FJTko+euf{f;746r~OoU@j=>yse^UR@(hNf@8`|bu?{dYJ}z}H;j{eY4HJxF TW;{9s3Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2o4PfAF2&=CIA2e07*naR4C6) zlD$qFQ51yd{Opf+jZIL5gp@K+_`Om`se^>6sCk|gya(wbMNvd#9Prw^_nv!B3S6Z9 zicd46p@%Og9~LRRAl%*U8Qen`rn;T{hmo@@LU4y zW;@6nRG&~3#S36u(jKJTEVxDqDjrd$k_Ks)X2w0r^h!}|zX2gu^$j5@WfSjwcf4nz@n&7cCRGO)$M+Dk33AeP#eYoG0#9z zKa9}+dooTjh?x2MQJ7+9-$A7y$A zCRG!qaFhaK4_tnITHS$&K3;ED_n@jLX)f0TkzB2J0I2FcL#gf{ik#jwm$ygX$Lr0J ztdEQO^a6kZz>fPo-Yx(<-gE%I-!%V2VgVox)5GWbqEA60A_y-Y)odAg$lIxU*9Qst z1k&(K&GN_3CoWc`?u7}`+QDKfp2q;81Huq)W)TIXQL+OZsgyK8T6jW+cD3g{NL7!& z6m5uvSYUf?dWONCK|}z20M#d+0AhQwh@ff);)sYcxg|*R5A%^NSJ;GpZU6uP07*qo IM6N<$f*3Odk^lez literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_face_light.png b/mods/farming/textures/farming_pumpkin_face_light.png new file mode 100644 index 0000000000000000000000000000000000000000..cef48664d85091313841b76e1ef9ba90b7028a10 GIT binary patch literal 632 zcmV-;0*C#HP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2o4Pk4eT0xBLDyb3Q0skR4C6) zlDlqGQ4mG>N!PG+ycfWtwGAo9@i*A#UsjCQZMbo%(z1t?g}jdW3sG zs!4c(wB7^ZTGiT3y+`EUdjKGvs&5b^@Wj>h+1X^%SDWX&bXV zf4V)6PY-tF>}YG$$6Ejl0JigU`Surp%k%F5uFk*y4~YeUG)xyS>Z2|NiHIP)cvO=` zOmJI!KxJ*0&v zWazZ^yauW2?k`0fA|V#oTAPkxup1B&0PjKd+!H`-w-ympO+XwGQAW1}Y5oD|YAJEa S?TTXn0000F6yYrJh%9Dc;1&j9Muu5)B!GhKC7!;n>~}c$c=VZi`d=vng(OQ{BTAg} zb8}PkN*J7rQWHy3QxwWGOEMJPJ$(bh8~Mb6iY9xyIEGl9PX6=%zdf^RLuaGY0jA_T znU9hafZ)g9pT^8U(46+Y-fB04xWW^o9o!+O%nS?+j0`t?`Y8Oih7AbZVm1~m?|g5+ z=`0TqPftax1IL3R$%||&uGAfP&zjR%x;*lMeTcDgPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2o4M)C7dfE1poj59cffpbVF}# zZDnqB0000007G(RVRU6=Aa`kWXdp*PO;BVmWd{HN0o+MMK~yNuEs{xY*`Bl9PR zB1|l{SpFF1b;C%MCzm(Y#aA$Ww=fax>Fr48+%` zv`Mtt&H8rO&3toi!=Ipx; zv#kr2@flKK%O8*oRCaB1(-kW1c{DT8rmE-rtB6pkBb8D84yaK6P{1yh_fw|lejep_ zonPosj@octD~|8If&Mmfo5zFHPPypY7=!e(^QEUM?KY-z7`fb(*v`JOUGhD7sZLGfe{;I=F zp8fqGy>x2B)W)^^F7uDd)bMEI+Ei$>-@T5={wRb6%Bghssz9uwCup4!=SG{!la4K8 z_8l>^-@j}&i8RrM?>4Q9<8O!vkQ*{SY9K N002ovPDHLkV1mDD8Lj{T literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_pumpkin_top.png b/mods/farming/textures/farming_pumpkin_top.png new file mode 100644 index 0000000000000000000000000000000000000000..edef2d94bd59cd02eeb0dbbec9206e6e638c9521 GIT binary patch literal 623 zcmV-#0+9WQP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2o4M)Dh!l7lmGw#9cffpbVF}# zZDnqB0000007G(RVRU6=Aa`kWXdp*PO;BVmWd{HN0oX}IK~yNuEs{%aBS#PgBeSwU zWK)!8;1m0rK7nCC5-2svuF8)Wn(bRe0D&j}{QXKiD}&0+^bd5yu5TQl*qZleyS!8m z(%oGJ1Aq)?po`9bso04eQE0k<(=N#TA{E9h!_|*(#B{mpOq4`c#SwjP>#Mu#MjT&K z;rDmcw3)`g5q+mJi#DAqgSO@ll{U?`opYzgo;!d{o90eQBfCy#%FRrhF%jQi(iYKX zR~!3bSM&W@i0Xz^AeQ6q`xD6VwC$Wl#xjIcW?97RA{R|ypG86EQB+ZQ|azifmp@JLhFd=J8dO913S+-?ueQF z`DL?3q=`2CKCLgxz&{WXAa`Vb$qu4^^Qw~RglJV&9O)ff{|EE@GIALu=M4Y=002ov JPDHLkV1n8|5Yqqv literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_rhubarb.png b/mods/farming/textures/farming_rhubarb.png new file mode 100644 index 0000000000000000000000000000000000000000..849f61bf4329d95fef070f9fa5ec649fe3ce20db GIT binary patch literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{FwwlQU}9vRnxk za*Zf)EG@~%FJf4^?u-Xeh^quB|BMw-ln*Rgl$uzQnV+Xnl9`*z zVEUb(6DY$8k_paFD=AMbN@a*G_zzOf4H9(8EKbfz1S&0J*nVJ3KTwzhBpjYtl$V*8 z&Tv5bSvydS9iqRqC^?nk>;LB0FlEm9xw)x%B@ExrOxq6>V*@D*$t=l9WmxguvwF53b#-fFV}L0kEzRsSa%hKXzBesP@Gu#+K;qxq)$ zo^=UFrU@l(6HMj^V-Da^6yUSqRS@Huw8RJK_oyhR9NC+b<^dhU;OXk;vd$@?2>|ak Bre**D 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..706d8cf6d56b458f6de2962c4033f25c3ce3c80f GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{FwwlNLH?{8j}l ziU&OF--5C#{5LXFM$T`2DvM4h>ql94%{~0TwC?8m~C^fMpGe1wEBr`Xa z!Sp*nCs2kHBomyUR#Ki=l*$lW@E@d{8zktGS)81c2vl0cu>HW6exNW1NH{#PC@(WF zo#BA=vv!~uJ4AnJQF1E7*Z@_Of>R8 zxqANY33S)~Kfj__(sd$Gs#$Hnkn?m$JLNM4F%5#zX-0SCKK{S_emzh5Uo+!FIVou= zNk4x7muCio!?F9%_EhjX7(KBE@|3xijhV%{*$-Eq7oBnMH_#1!Yj&!>sK0XY)c+q> afFZCd>D^_yq#mF{89ZJ6T-G@yGywqGkGQb_ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_rhubarb_2.png b/mods/farming/textures/farming_rhubarb_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2aadf5fde122960e9f91c6ff3fe35233e16de4d9 GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDEfH31!Z9ZwBAbW|YuPgf<4tYLJmK)P~Sb#!rJzX3_EKa|j zWa#ZwC~~y^_;-!MpTf1x_037d48vImw2w|BWq=wn0uN>XU(iNU}?>B?U69?(c z(4MHne79xJOzT`)nbzRM8gj@ebKc*M<+-k_zUFy;?s@#+M3#D}+viTEsXsP^{>e1H zrytPK<6q4d;JYrA^K?(X+|Q}a`FnO;-MH^U{nYZu+;?sSYkD+jp8$HC!PC{xWt~$( F697bMl`{YU 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..833f65b4d75e1874bf566a2d05c9ac75b0455c78 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDEfH31!Z9ZwBAbW|YuPgf<4tYK;on!ppZGl2-JzX3_EKVN{ z+{t^`fX7B?p2A*fX|_!c+cs?Vcy>}@+p!Z&j7*^~ZJYFZ6*ZdX9dcc_$m3Oo4VP!n zZ6}$6V_aGi+mE{YPfVN}nN@bo%V(bR^w~FlxTLRP<5ckuni)LhSr?0;=UH(}pPuC{ z74Oyg8K$3)R=yP9lsLDWYu@+i>V!Z literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_rubber_sapling.png b/mods/farming/textures/farming_rubber_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..e5c9f5de0c191c2fb3c9e113a113ed69138bff8d GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^JsM z;N)AjnLrWF0*}aI1_o|n5N2eUHAey{$X?><>&kwIgHJ$?^Mp+vFHq>Lr;B5V#p$g< z2f3OYL~61hX)Wn)ymZfq<$bNw{EPixrq((-z0v*jXz3c&8G2$$%T_!K%CI}PN1uVgq>(Mx+ekjBKx1jbBbMLh9IxaUnTDVm=wso0n|R zT%5b~qx==U4)bC!=~>TRm%6J@>^OCG(&eAuDtZ^~>pbejcFwRwGUdSnzXi9yeq;99 W5#n{Q?w1qLV+@|IelF{r5}E)?uYE%R literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_rubber_tree_empty.png b/mods/farming/textures/farming_rubber_tree_empty.png new file mode 100755 index 0000000000000000000000000000000000000000..1792951edd5e5783c39432d545a82be85c54fbaf GIT binary patch literal 835 zcmV-J1HAl+P)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn_ z5CR+B@r3A6mdXN25~mJai_QxT^b`9rl-2QKJUG+i;m|HoR8<2 zCub9NE@3>%`Rw2a0It9EEItO3Y{30{_t|>v4D-_!!#pPu!@OL9QRd|ei9nhqG)>R` z)4Kp%eg0)2k~v{sF3Ho3)H$4UsIhe3W353$M8rUvS;Ps(7;av_#)X|dX4~h98i}gZ zb<4QOiNUj|Rsi&U00V*%oU>RfBx3pN&p!Zo`_}vP3aLw|>W0pH+NL9F1R#V+R1kyW zePA>k(8oaE^#JT&-Nkn;o0AR7MTHZgY8#?P5^HJN0D!0}O&2i6(D#9e@WzYJP}LP} z(=je`FhbRIbalt4UmQ}k9Wi*&hZP3ak~+t7S)oxuz>09^^KTdq60A{%gB1TTe%-c+ z5yXHqs)!Tns=)_O3?8wLFTekZqr-1eE2t_#m28l$`^P}Q5Mhlm%M!|ELs8^3Z3nEK zcJ?k)E-TumC(AN6i=3M`Ugx``U+@|bz!?;^%IRXsx!I$1ZHuDpU)g0golq_ow0=Eo znq}O2?*m?a;R;zcpldrsF$h9lq)avniaf_+@V>{Tj?Q9|$e@RP5JG14|Iy$={Ms47kbfafk>Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn_ z5CJtR2^p@NZCU9<}q5?q+?yqS0J zJzY%Rl=LjmIscDy{_3^*I`RF08xvCi9C&v-QJBLxOAyvD{cM_-*RNw{c9AQ;jRLU$ zt<9i>nYl%@18z)AF*bS&0OuU#qyjiXUo$heK$HtJFhF7qo~ID&&|0OFT>XK%+rOcJxU?j`nYZ3N)VsV{Ki2t1E+Yyr?BDZ%4EA7lh)zrMu4_umnh z6AHBvRhP+fLLncq6el=qKtNZA|2+ANt(zJ$k|W2u>AzMYUlZV|RK$qGTFY`Aqm@Q0 z&}zlO4?kbWSVMQ$p;iA7Pg8Xn)`aQ(&SIU#K^o)TiQ9~i-r_<}FO%bAD?j-LfVqVw z;&KImp_`Kwua@}Z?jwv?G~g?Qug-nR)4!iHGIk&BRg?IXuJ%^u=I4n`WtFQB+qMyg zH6(F@78DxIorh2O{FA-ZMp3rt=X_>gERgek1_v(F-`fL#=LdwjR7t=7Mk7C7{T+bb zE5od-D`b%>QRLU;0cdUO$cX!X8lg}d;Y3iczEUU3Q*78!PjT>iYJbl*ibExiw(nwk zVV=M#taId}5Nj+0zovpMjSXl)uoc6JQ|B{<;!r6~K!hmpQA)8~j)}rB16NCn2%TNW zd9$fGYaV`YXFAlH#pQ&xg<3qVFaihLcKioc3az!K>$7eECdWqUczX*P`1qX`#1nET m%9RAq4=~28Qs20#k$(Z;HXch*gveL`0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z3pEH~gop+J00H_*L_t(I%cYXfY7o*UA3{&Q4t(G zMd^ZNMupAB;*x#+Lb(RmfbuX1EVqg&Q}R)ay`F(oEHkn$S%&2J+1Mut5gz!F;qY~pJoa|c^$q4Crm@?(;u!a#9`FIE!%sKVr zJi=BM09M7qSr>@P2Kji1?bk5*1S2FmPe3Sa$K~i-|Hgy8c7tgWv*uMX(_;`0Tl+%* zP7fw*byB(q69vBTkw-d0{NjW`mX?13FJHho2MQqlC zMTn1YpDp&Fdhv;Seuh*I7>#rTvf&7O!v|AwLWdH#53(SF!$Ao)-I1^FG; UvMH`M-~a#s07*qoM6N<$f{x1#`2YX_ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_scarecrow_front_light.png b/mods/farming/textures/farming_scarecrow_front_light.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b3cf289b9525f2d4ae8004719a924434bb925a GIT binary patch literal 641 zcmV-{0)G98P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z3eCM9?yGOiu z+%jD1`TgH4`6;Hz&|0HYP$fXkA*7Ab8F_lnoA0eLf?B)hF)N*DWJzL`J&Ghk>Kvqv zaLOp1GtH=Gy*9a|U%yby12&*s3<9fE#uN$JAi`cuK`N#h+3AOjLyy1+3u(KozOEuI zMR67(tP<<*8f3$Se0a_@qegKAz}}xB&AU(x3XBu8_o{<11=4jfMZ&@M0K0OV?Cbt&SDS>+bOa0t#{?YW~;_1j+l4Ln9(i> zhsMhVV1fPMh(@qXJLs|+ECFz^Jz%pn<-sV9Xx1-^2*(AZ0cdX>(+HN?4~|$3mS}Gs zU;a?YO4Xl)`1tn8WDm;SPu%fRq;kM$WXUHz8DLjDFgXYXw#)l&{c41thdt)qG62mu z1rHFC{4_;+1C+18zc6NI_eYiepzge## b`A_`?RC(3*j&oOz00000NkvXXu0mjfqj(y4 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_scarecrow_side.png b/mods/farming/textures/farming_scarecrow_side.png new file mode 100644 index 0000000000000000000000000000000000000000..e22e84ba1dd15382c478abe92c35b03ffd9ba9f7 GIT binary patch literal 613 zcmV-r0-F7aP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z3pEq#;X&#E00HGmL_t(I%cYXfiqlXOhrfGsle9@2+Jab&2zD{dl)9MBJb~cC2XNs+ zpT~#s8QeOEf(}Jov?vw}g)mLpbn@?B7qy+VA_{)H1NS@p&bddtd^$4x;>F2V?gu%h zD$rV^b5Jgz8VG4)bU~Tl@ap4er=U(B_#C4%jdUee+o#GBq%J|)2&awGC3Qy)2jRZR z-@T=30ydyL3pPKsz*=rlrl9;V8WP7AvmP^=b^!_HHmCNZ|M0I(VsPDdab zU5eEL+wY;v9FXWD1);DVm&^CF+XNS*kWHG<^xBxs6$poFy?_Etu|@z@nju>OWfJ3b zdR&ac!x4sqknv=Oa6K?NmVbvI>m_%uGwhDLT`HiO3Z2C~><7R9!f+5GzJEYhB{EwQ z1{&%1$QKcI*QZ*=SiTRo$9Pg3VLX}9^xE4dX%0RhB;_(k`VlHnU`nLt0bsJ_{yl(r z{^ZQmk7&2he?>hS1P6x!@cPXc&QJS)l{aaE0;rDxaDLi9Sk#{hwhfLG?5JPqal`36 z-X<6h!h?s$?8NCj=JIOBv&U!q_`^YnRP00000NkvXXu0mjfYmf>R literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_scarecrow_top.png b/mods/farming/textures/farming_scarecrow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..3a4addcd66f7399cedc6e9c415ff044c18ae5ec7 GIT binary patch literal 639 zcmV-_0)YLAP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn` z3p51=F2(u)00I9=L_t(I%YBniYZFlv#eeV3o0(=NGo%4&As{rXHl%`^euA!a*Nt1h zkDtV?Tm1rdBVwtdn1UEB1cJ#VGo3&0Jr`jnomf1(d%5>=IOkmP^7+_u4`rnRaFx@l zYt;Q3>iBWkYK(@1R{i?jXI`A20B}8-vJ3I%)kTZJ&F%7^p)5@vJPx4lFFY~tc@`H~ zU1E&E6rg;dyN8f2cJ+~}xZ`bc-t5RMO~}%O4_|JZrpXObO57;ISin>px?Y4*s$rF- z3F^~i*$7koO3)p^1yq1V;P??%=almVw^x8vTwZOpP-o)-S(?xZBFwidtZ;CY5Bd)2 z$5e|sPB+5s3CeX2z}a}Kh04-|(Qv@^WQsZfJ=a(-MRXlZI!6WpR_92si@P6Fu4Wwd zVkY35fXl z9iuB`zF-g=q~E8Q&2jfb^lFI{hTsM~Jw9x#RCPor6wd92!gvHQ;d!|tmC Z`~`sUPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyl6 z7a=$y_CX>@2HM@dakSAh-}0009HNklonD{?TDnMCLlzb`EOA$iN>&q-&AzP~<0|z3CHJc&aQiCLtsdO zc=2RMC-a0sH07il;7SQ-lmaaQAfIsna5E_;NrIRsREsWXkb7^|Fr~z@Ew`qEk1mF4^s$%o3Y6+FH*2gy1tD9ww7|F(jtmqqm^cLF^7?|IcwhX>C*%DHYzxl$taqz zzf)%#&v9%MCuL$hSX+8ouPqZrW4`;Nf#cY8{E)6cVs)j&-;Ha=QWAtSI{uLM?U1!n z0Uak;hJn;t^Vj(`mz{v+VuoH2aXSdn8k9=t`Vo!SH~g>F3&>|3nx0Rr6~;z6|5C*Y zVF(TncKGbsI}E#hY)evG%n>V%V_QVw1jn*SnFbwygkzfoqY3ialRZBF_>e(3MQFiq zM-9@sEL}h1xX~qvHI)Sy*D-nWXp^T0+sx-NStrH*&IaPkPu|tFl?8&qh!bysKL|;* zMk`G(h!6s#gtTojo5hUhiv7D4b~jgPb$m>KE3Z%6^ZEX?$(>T3M8hx~Q!N)kf)oNN zCB2{rQZSp&`1Pnky;{UHfu`qkGaU2${ayZTcF|h%=w6MSo93U(4wZ5q(=f+$NM%|bp+b!CB{|GYpe4FU`VxonE<%^Iz?Pogz(qF7nX@gL%I Va*JV5Iz|8h002ovPDHLkV1j5}svH0S 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..398f72774fed5b831e15fe08e5a61ce71bfb4c2b GIT binary patch literal 880 zcmV-$1CRWPP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn^ z4+#$;69f$a000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0008ZNklE-{uzECh!s)=5~8$-q;1+H zuE+M+%#0s1_RQSN!sSSx&gSSWK5^Ez_5QYpVF*5cnouvhG#fQ)UWH#@T_X%|B&ZB7 zj`z?4)`jB64@uSvX(5Mm=?*~{m9F!#Ug+gfv)#fY*)_@JnRxkrD8j`P1 z4-raZ3Ivssg|}0oW*bc7ISSCL4A->@qLe~|>qxYMMWToj#e9(vOk<=1w9*8_kZ~BJ zm8M@*1kx3B znl4HeI2D&TO7JH+t_Azs7R_o2%QBH#!`01*{v@Xkgmd_J4qAg!1=Bd=?$eC_Gt8h` zb{GUPg;t1O4K0CG!RezeCl9;){LAkw(lwn%6+c{3C|E9Yl!jytLO`PeQi6Q`^bs$< zf5L1DLJQtp-r-itOk>SeKc*<4RWDO^;OTjnXBS_P6;N_4PLH~X@9x)hXLpPFY{|QE zOgzgdG@u|{gJ6RzAybe7CoPNP!#2Yp#su)k5#u1{uL$Zu0W5%)1xSzrgoJRp@sO=E zUSIb4vQ@)0fk6;6S-`jVYupWDw1)GxhgWg<*q^Z5@Gzx8$&c7=Rq1Tk82SNz5Fvvw zrsP_rIqcV~^o~089(K6CoimRT1Yjt*ypCv9O`aSd@b-4ZH|GzqZ42?^i^n=!WekIm zw>Kl|RhL$Ci&y{j(P|?=0$$nV!C{BtIHu5=qR=$!75)R=giZMGX2Es<0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn^ z4+$b<%vg8;00QGlL_t(I%QcW&ZyQw@Mb|lJF1E+lG`^%wtu!@h(xeGRRRnK+K;i}Q zWB3L9G6XzDl|U5*LgBQ3GY7i@wB4VtWmAx zNs>9g{`HZghdW#kBCy~Z(8efS?a=OzSg$SjYGqv4!7&EU)zqp5l4Oo@6rS(#x-%e} zEfAwH8r12wmUL}#wBpHeli&X6AR<@`q6L8ZRuO<|xj>!iqZM%=whGe=R93^NgAXd2e`I2sUgVuBA+>Uzc(x>& zE;v8iXSrG7y9VDgm}*9Sx7*la6ipdNGjc%&1tiIwCx=buvpL(1JNVi#j3#7Vm&t5} zY*Jif&?3T{_JG-ZjcB14Mtlr!Z`d^DpMJ#URfqr6AI0QzKG$K)Ml9-a2{9;woX7dI zLkh)!AAbCW>2gKAQoxELwL+XMumaQN5)CK?Ml1C5&mZ&kSLbLAN)(f5#(uMbY=mL7 zAl=+LS*}+c?AJN_WS7+%a=y>;!F|-1t&%jhOC-sRLNTBhMx<7-R_G36G++$mGd}ah z3g7dvz@rB>dSQG!05Aw+G8vabkY!_q-Z19m;SOkxF$za(UR`ylR|0xBQnbQAOJw8e{;uTkHA^Qo+tD|&;7x19l{LWbIQkylqA tkXwHkAjo;N_UiNpF)6|(6{_Wce*q~QV5K&DN2mY*002ovPDHLkV1m7pjimqp literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_strawberry.png b/mods/farming/textures/farming_strawberry.png new file mode 100644 index 0000000000000000000000000000000000000000..0a80f45ddf486546c7eb9556b86503843eaa5183 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^RlY zSq#SNHJ^bLXMsm#F$061G6*wPEVVBK3bL1Y`ns~;;gILCvsWZRl)tGRR^OcI-5Se z-~V4iZ^Nxe#}54Xe!o6-#e+4v|DQ@o%#=3-YFlFX#HHbIV`8njar=;V=7V>BIl`_way#T~C3!_sL9SyXum! z_E#324~xE2A@T7k>k^05m@QB3o#*f?A2yFnYG&>B1dL^Cw=qPpxA>LTyhmZj8TMXMxRc_zI&ItCS9;;kFY_{g z6zR?rnEmzYnyX&S_Zcnv&MY|`-X79;s#Wle$y2_p_lr&SdN$l}nfL9&kCOM5uKzA- gt~P&Y`*$}}yk_8!YeI>ZKp!%Ay85}Sb4q9e0Ag~1lK=n! literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_strawberry_3.png b/mods/farming/textures/farming_strawberry_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ca77389e0ece5a7ba20785684d45409cd4380b26 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*x381$4un6YB1eHl=Yy~NYkmHiHfJTDXP)!Oe9fI?3_T^vI!PQRVB zF^kDj#P$5_*w%(?2TwI@``K{AD`!srhVJ;3rAZqFIF_7YNpw8@m)l;!RZCZ7^KYF; zdh4{CGG4xJn`t@6y4)pnXBtmXM#QL>|!NtrbbHeG%5@)#>Iw#+e z3=EB0H#yhD&A3h8bm6bX41e<`8Q*k1-FR8IVNcE8XDeRKeD-JMz6X_)7~AguUj&qG zeAHg_^>6X!PyL^l-n@2sBZI+$fXnwXZWhh$nzQ=jgFw{+uk&5Y3a=O&ey9lSZ43@P wKjjjevh=@S)4$2x{J=k9cI^`D2W$&5IS(z@Sx_lypfi6%)4TbJ57>gZf)NO7!I4Aa}!oj*ZiQ9`O}&a4Rusq>sJUQ=q# z5H_jSy>mi^?T_d4>u1mGeSXKY3u`_IZo$FV?%=ZwMmkcQOBcFaZhnso|F7ODNbYNaBOpFX#^qw?~hN2e}u zEnQ->_@aoL5aWiMa#mT6F^#tmuMPP7#nf2Gs_sBA->0-W>TDmL`QGOJsoMO5%|h+T oe(se0|H>P)mfTsQU8DVh&%`YBlIxknx}dQ1boFyt=akR{0FIWONB{r; literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_strawberry_seed.png b/mods/farming/textures/farming_strawberry_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..08c958d9e850647d0fcf2d9e033fcbce5b08f4dc GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*x381$4un6YB1eHl=Yy~NYkmHiHfJTC)N`InAnpiqdXi(`nz>Er~7 zi~}6Wf6^0voIh~jK!M1q?T(WUv(L~dW#m?5ZHYP7^hEsF|G>ciYb7NlB&O>ot61`! wC}j+MP#<#TKSgTe~DWM4f D*65B` 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..b112d485d824443af9da899565a6125c52812bbf GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{FwwvtrmM+Sv~l za*Zf)EG@~%FJf4^?u-Xeh^quB|BMw-ln*Rgl$uzQnV+Xnl9`*z zVEUb(6DY$8k_paFD=AMbN@a*G_zzOf4H9(8EKbfz1S&0J*nVIO$T|*?aCl--US?i8 z!vX1M?LaYhi2l-|Q|C?XKlsV_;=BDPAFnl{RZ9hOheT zo-U3d7QIV@t@#cah-_ZXWGy;>VbZI%2S#%ypKiEewUDnSq^xVoai_&5m7E?GU5{>j zERO2p2vW#&QR)5|_$d5Ou0t-%BsPY*x}Cj(5)({vBO?nhUh$l4qgK|Ear%{Wd+W1V zH-w|^h_60pep1HJVXKec7k4K(22mO&&p5yBv82G&Z;GSL2 z-&Dzcx2^d*A*eHli9tcLZlax@Z*2tg><6L@4lWTUrC-ipI?~Ki)@-8wfP>-mrd!L7 ita8j>G$+`*j(NUA*|mKiirs*IWAJqKb6Mw<&;$TJnbY0? literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tomato_1.png b/mods/farming/textures/farming_tomato_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2e7c425ed0fbea8fd75f8fb699d7e23570320bf6 GIT binary patch literal 482 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{FwwGgCXT*0~NW ziU&OF--5C#{5LXFM$T`2DvM4h>ql94%{~0TwC?8m~C^fMpGe1wEBr`Xa z!Sp*nCs2kHBomyUR#Ki=l*$lW@E@d{8zktGS)81c2vl0cu>HW6exNW1NH{#PC@(WF zo#BA=vv!~uJ4AnJQF1E7*ZydIWXRhIY_W!%>jDF+2n;%?aNw)v_ZPLTb@7EvM zt?(=2>VNh7aYi}Y=AWo|{@A(g^E_>dpAkDH7xjlGmLL89|9|15xuFmLe>@3f%GXO2 jaCI4J^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{FwwGZzs|RNfC3 za*Zf)EG@~%FJf4^?u-Xeh^quB|BMw-ln*Rgl$uzQnV+Xnl9`*z zVEUb(6DY$8k_paFD=AMbN@a*G_zzOf4H9(8EKbfz1S&0J*nVJ3KTwzhBpjYtl$V*8 z&Tv5bSvydS9iqRqC^?nk>;LB0FlEm9xw)x%B@ExrOar-;4Wuk2vm_^#Va2;k>OhfJ zPZ!4!i{9iv|Nq-Ft2T5h-CfMaBg$OE|Lp&F+Zp}F8#g?-#FA|P^V_6{m*1~HvRmO- z#MS@m_v4Imw#`3L@%*uK+vj=O5^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{Fwwv*4GR^KA}T z$TgzGv9u&3zldSwx-%X?A+8djkaK=PWl?5&MhU|j{xeoUQ9iI}QEFmIW`3SRNoH;; zgXwpEPM{1YNG3Qxt)x7$D3u|$;6F$?H%QPWvp6{?5va6?Vf%qC{Xk(3kZ^cnQC?Q0!XYD{Sc8LDcqU2PDum780!<0Ga=jNv7l`woeGi^Umj18nLB(o$Zm0`uZOX@(8 zvz{)FAr`&KfByfsXI5?KRJvPYc;I`&zxw;lKP~>AZ1NWF`TOLycbotI{X*}XUL=S9 zpI=jba>LC!rN?vo`6bU)uSPx!k9U@bwf;Y@4rJErBo=i2|G(}P z$Bx`nvupkv8yFb8S=IOBd_kA|VbLCqmkg^CuDkiKSy%e`K40RD+LR>=#S0o@uL^3! zH8X}VU-;9%W@ck!o(q3)@dW^x-)z4*}Q$iB}!lm51 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..e2f5db4e30a01258b54f6281f2d28e57ef309770 GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`K2;$RB|(Yh3I#>^X_+~x3MG{V zsS2qTnQ06R6}KLHtv%uMIEaBcSy@jwxR~46+t`>{!C<4wMiVaw5_$Qs7kmC(Bm$SelvY3H^?+6GpPSxg<1`4v5c>21s-{FwwXAqV|BMw-ln*Rgl$uzQnV+Xnl9`*z zVEUb(6DY$8k_paFD=AMbN@a*G_zzOf4H9(8EKbfz1S&0J*nVJ3KTwzhBpjYtl$V*8 z&Tv5bSvydS9iqRqC^?nk>;LB0FlEm9xw)x%B@ExrOxq6>V*@D*$t=l9WmxgwdiV7npf4FbUHx3vIVCg!02vSBr~m)} literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_tomato_seed.png b/mods/farming/textures/farming_tomato_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..dbef76e7984dbf972498ce7fc0c9917a85c0378d GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85s1GL71^(seKtxkiEpy*OmPahde(Y53hGj3Q#E4)5S5w;&gI? zM8*M*r=e|Nr#m|NU1oRGu7C6zVnU^<&`3Fyv=l*YN^q5re0zpUXO@ GgeCyv?@1N_ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_weed.png b/mods/farming/textures/farming_weed.png new file mode 100644 index 0000000000000000000000000000000000000000..466728706c050be8a875f4ccfd71cfe89a571f1d GIT binary patch literal 591 zcmV-V0Px#24YJ`L;$M*_CX>@2HM@dakSAh-}00051NklfLOTQsQV_b`<}95(!NFT^ zN`%M_fo@I_pB6GD)fRK4TnF#}`ch+;e$%`E_r3T3{@;5C{|O7=D)dlsLS_E~fcB?V zEpW;?fT?_C|AJW||Ax778icpa4?py@K*b3vPH@V(XL$g-R(DZxLZ_T#Do002ovPDHLkV1n!j{hR;* literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_wheat.png b/mods/farming/textures/farming_wheat.png new file mode 100644 index 0000000000000000000000000000000000000000..a508318d5b6d5f8a65df2fbd128c2456bae2a501 GIT binary patch literal 536 zcmV+z0_XjSP)Px#24YJ`L;&Fc%K$uHVo){!000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn^ z5ds&-Gt24#000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004VNklxKk;s_5G{bCYTs3U zicS!>(WQaT0~`qag&#+CJ}l$#Ar27i=864U2>=e8w9!GvA-Xiykw-64&8a6C%=Y4< z7hM_-o7C#9;cF#$2V@)yy)}OG8m}dACL-gI?ywLt4r}&!t?%Kl z&2mY+4#mN;pXiRf*j^vCf}cJoxK*zUI;be6BTFE+68J z0=`Z^p27O~H0s!f2ksUeu-v5e3(RuKc&&xQmz%U6-$@Ss`x_etvRpD57ToT+m<)?M aPksTt!MTao-=3`i0000Px#24YJ`L;y?xVE`Z&JCEo9000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyl9 z6%Y}TQQ2?+000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004ZNklMzIW+HitrY~%^m5O6_nv!_z(3&tJS71tFFC$?1mOPq$O^nx4PYaGeD%n- zA=e=JBiBmE{3W#Ti(I*y($uv7+rCSgYevf#GEB(mx!fpn@O);l8@P7oBRxXT2 z!tD+GZ(=i1Ix{t?i;{pS32?`w;+tsGRKpvm24Oe*3Q-p2-mxF-fPfa;gk;8Y|uDdk%mbC4pYsUH|0=v~MBoW{$Db>3fVvg(FuH e8EBc0(R>0!{J+sU<{=;e0000}c 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..40956a7b30b1b05dd1f37279f4500d6d3c019240 GIT binary patch literal 534 zcmV+x0_pvUP)Px#24YJ`L;y?xVE`Z&JCEo9000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyl9 z6%QODx~o$F000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004TNklCk#IKa-! zY{l|ukBiTJ-e12szCNN=lnkHWST|~1HEP@^inGH5^3@0HM$Pe;+3IHm*>%v#nV9MT zmx*#5;9Q)6pCz_?Az7kmMRh0jaXiN|=^I9MviZ_+A7IeQ0l1ql>Gq>P3(JfO8zar{ z_9GjtO-F5^Rc3v%=qQaDrLp!O$8)ko>2@#lL}4wvW{L9Jy--`FrkNgea?h7ZW*kq> zZO;JRex!vm&+R}+*42X6Z!~g&Q 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..7dc89a7174a7eab3b940b85a9f4fb5e12d6147ad GIT binary patch literal 500 zcmVPx#24YJ`L;y?xVE`Z&JCEo9000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyl9 z6$m%MN5s?s000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0003`Nklt*C0`%!EF7F$nE1*Z*Wt&x$;1Vi ze#G=6aT@*00d!s_V){{TX(T(l(k+d|CGKk@7Z5<&+Nej9c@Chj)u2wpla=jwZZcW* zqf6wwh*et~Kl%kc_bb@0#A(D~+o_wa4zRb$?raAWz5v)1F>P&FB})L>+HkD~mqTB&d{ q{qEnWXS;FOcJqC`f7o_^H2DQW@4arGp_@zq0000IqP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L03N{r03N{s!)a7g00007bV*G`2iyn_ z4-__&&rkON0013nR9JLFZ*6U5Zgc_CX>@2HM@dakWG-a~00053 zNkl6o#K~?!BW<&FwNjc}L6|B>JIZiWDJfW#H0H(5{8hDvA-MWkW>k zpheI+C@3PRMN(9>a1kj5Vd2IUyUgG?W8>UEote*-LeRZT1ijmH-iO0E?}2}m2rEvG z_sLW;%HixD&Yav&cKEeu8*t^4DIYv8iuW(BO21x0RaH8p4V2gshA!OR^+kdJXHO@1 za{rusJN*>LF5`K1TB3&ze*V@M2oOyl+i|IHtWzml`2H4-UBs0cmga8AP{5rDQ`*iJ z-{(K$c^;N!vGDB^t}n5Fm8jJl;S%%JWwh-p$lRJ5i487y%N7idEWVY&7xrzi|C>w=|L(#@;0PTVF)GfZa1j jwFa4<9L>#D{;ReDR{E3xT~xP700000NkvXXu0mjf0oeX) 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..bf2ac77e695ea2a8c1d5fcb427d0ebb040f8aa65 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)9vKF0L!UkSEP+CjC9V-A&iT2y zsd*&~&PAz-C8;S2<(VZJ3hti10pX2&;y^`}o-U3d7N@UHwB>3r;Bkw0Ie2&B;^zfl zcimf9URZc}=L3QEU(E}yL<#&^CgkzylKLtyFC(GJ`TaZBi!6{(i_Zwzr@F(tBS$`9 zh9ARGhE(m3EUDZI8`V!J_nv#T%jF*LkL||<9xmJ{$C@r|B6R)7xkIhzcKCnkRX@e5 Xs9_lTwOn@w&=Cxtu6{1-oD!M Date: Mon, 3 Sep 2012 15:39:23 +0200 Subject: [PATCH 6/6] Update TNT mod --- mods/tnt/init.lua | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/mods/tnt/init.lua b/mods/tnt/init.lua index ec14f4a6..5f33cf8d 100644 --- a/mods/tnt/init.lua +++ b/mods/tnt/init.lua @@ -9,12 +9,7 @@ local destroy = function(pos) minetest.env:set_node(pos, {name="fire:basic_flame"}) return end - local drop - if not minetest.get_modpath("item_drop") then - drop = minetest.get_node_drops(nodename, "") - else - drop = minetest.get_drops(nodename, "") - end + local drop = minetest.get_node_drops(nodename, "") for _,item in ipairs(drop) do if type(item) == "string" then local obj = minetest.env:add_item(pos, item)