diff options
254 files changed, 4140 insertions, 78 deletions
diff --git a/bobblocks/blocks.lua b/bobblocks/blocks.lua index 85c5782..f0a516e 100644 --- a/bobblocks/blocks.lua +++ b/bobblocks/blocks.lua @@ -16,6 +16,8 @@ bobblocks.colorlist = { "grey" } +bobblocks.opacity = 150 -- Opacity: 0-255; 0 Full transparent, 255 Full opaque + bobblocks.update_bobblock = function (pos, node) local newnode = node if string.find(newnode.name, "_off") then @@ -39,7 +41,7 @@ minetest.register_node("bobblocks:block", { paramtype2 = "color", palette = "unifieddyes_palette.png", sunlight_propagates = true, - is_ground_content = true, + is_ground_content = false, sounds = default.node_sound_glass_defaults(), light_source = LIGHT_MAX-0, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, ud_param2_colorable = 1}, @@ -48,19 +50,20 @@ minetest.register_node("bobblocks:block", { offstate = "bobblocks:block_off" } }, - on_punch = bobblocks.update_bobblock, + on_rightclick = bobblocks.update_bobblock, after_dig_node = unifieddyes.after_dig_node }) minetest.register_node("bobblocks:block_off", { description = "Bobblocks Plain Block (off)", - tiles = {"bobblocks_block.png"}, + drawtype = "glasslike", + tiles = {"bobblocks_block.png^[opacity:"..bobblocks.opacity}, paramtype2 = "color", palette = "unifieddyes_palette.png", - is_ground_content = true, - alpha = WATER_ALPHA, + is_ground_content = false, + use_texture_alpha = true, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3,not_in_creative_inventory=1, ud_param2_colorable = 1}, - drop = 'bobblocks:redblock', + drop = "bobblocks:block", foo = {conductor={ state = mesecon.state.off, onstate = "bobblocks:block" @@ -80,7 +83,7 @@ minetest.register_node("bobblocks:pole", { paramtype2 = "color", palette = "unifieddyes_palette.png", sunlight_propagates = true, - is_ground_content = true, + is_ground_content = false, sounds = default.node_sound_glass_defaults(), light_source = LIGHT_MAX-0, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, ud_param2_colorable = 1}, @@ -96,16 +99,17 @@ minetest.register_node("bobblocks:pole", { minetest.register_node("bobblocks:pole_off", { description = "Bobblocks Pole (off)", drawtype = "fencelike", - tiles = {"bobblocks_block.png"}, + tiles = {"bobblocks_block.png^[opacity:"..bobblocks.opacity}, paramtype = "light", paramtype2 = "color", palette = "unifieddyes_palette.png", sunlight_propagates = true, - is_ground_content = true, + is_ground_content = false, + use_texture_alpha = true, sounds = default.node_sound_glass_defaults(), light_source = LIGHT_MAX-10, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3,not_in_creative_inventory=1, ud_param2_colorable = 1}, - drop = 'bobblocks:redpole', + drop = 'bobblocks:pole', foo = {conductor={ state = mesecon.state.off, onstate = "bobblocks:pole" @@ -123,7 +127,6 @@ minetest.register_node("bobblocks:btm", { "bobblocks_btm_sides.png", "bobblocks_btm_sides.png", "bobblocks_btm.png"}, inventory_image = "bobblocks_btm.png", paramtype2 = "facedir", - material = minetest.digprop_dirtlike(1.0), legacy_facedir_simple = true, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3,not_in_creative_inventory=1}, }) @@ -136,7 +139,7 @@ minetest.register_node("bobblocks:wavyblock", { paramtype2 = "color", palette = "unifieddyes_palette.png", sunlight_propagates = true, - is_ground_content = true, + is_ground_content = false, sounds = default.node_sound_glass_defaults(), light_source = LIGHT_MAX-0, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, ud_param2_colorable = 1}, @@ -146,24 +149,27 @@ minetest.register_node("bobblocks:wavyblock", { offstate = "bobblocks:wavyblock_off" } }, + on_rightclick = bobblocks.update_bobblock, after_dig_node = unifieddyes.after_dig_node }) minetest.register_node("bobblocks:wavyblock_off", { description = "Bobblocks Wavy-textured Block (off)", - tiles = {"bobblocks_wavyblock.png"}, + drawtype = "glasslike", + tiles = {"bobblocks_wavyblock.png^[opacity:"..bobblocks.opacity}, paramtype2 = "color", palette = "unifieddyes_palette.png", - is_ground_content = true, - alpha = WATER_ALPHA, + is_ground_content = false, + use_texture_alpha = true, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3,not_in_creative_inventory=1, ud_param2_colorable = 1}, - drop = 'bobblocks:wavyblock', + drop = "bobblocks:wavyblock", foo = {conductor= { state = mesecon.state.off, onstate = "bobblocks:wavyblock" } }, + on_rightclick = bobblocks.update_bobblock, after_dig_node = unifieddyes.after_dig_node }) @@ -176,7 +182,7 @@ minetest.register_node("bobblocks:wavypole", { paramtype2 = "color", palette = "unifieddyes_palette.png", sunlight_propagates = true, - is_ground_content = true, + is_ground_content = false, sounds = default.node_sound_glass_defaults(), groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, ud_param2_colorable = 1}, after_dig_node = unifieddyes.after_dig_node, diff --git a/bobblocks/health.lua b/bobblocks/health.lua index a26e552..9588f87 100644 --- a/bobblocks/health.lua +++ b/bobblocks/health.lua @@ -37,7 +37,7 @@ minetest.register_node("bobblocks:health_off", { paramtype2 = "facedir", legacy_facedir_simple = true, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3}, - is_ground_content = true, + is_ground_content = false, walkable = false, climbable = false, mesecons = {conductor={ @@ -53,7 +53,7 @@ minetest.register_node("bobblocks:health_on", { legacy_facedir_simple = true, light_source = LIGHT_MAX-0, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3}, - is_ground_content = true, + is_ground_content = false, walkable = false, climbable = false, drop = "bobblocks:health_off", diff --git a/colormachine/init.lua b/colormachine/init.lua index 6a61769..d8b7ec1 100644 --- a/colormachine/init.lua +++ b/colormachine/init.lua @@ -23,6 +23,7 @@ -- Version 0.6 -- Changelog: +-- 16.02.17 Removed support for lrfurn (that mod uses the new coloring mechanism as well) -- 08.02.17 Removed support for homedecor, blox, plasticbox, stainedglass, coloredwood and unifiedbricks -- as those now use a new feature of newer versions of MT that makes the colormachine -- obsolete for them. @@ -214,10 +215,12 @@ colormachine.data = { -- beds_bed_top_top_ = { nr=13, modname='beds', shades={0,0,1,0,0,0,0,0}, grey_shades={1,0,1,0,1}, u=0, descr="beds", block="beds:bed_white", add="bed_bottom_",p=1}, +--[[ lrfurn_armchair_front_ = { nr=14, modname='lrfurn', shades={0,0,1,0,0,0,0,0}, grey_shades={1,0,1,0,1}, u=0, descr="armchair",block="lrfurn:armchair_white", add="armchair_",p=1, composed=1 }, lrfurn_sofa_right_front_ = { nr=15, modname='lrfurn', shades={0,0,1,0,0,0,0,0}, grey_shades={1,0,1,0,1}, u=0, descr="sofa", block="lrfurn:longsofa_white", add="sofa_right_",p=1, composed=1 }, lrfurn_longsofa_middle_front_= { nr=16, modname='lrfurn', shades={0,0,1,0,0,0,0,0}, grey_shades={1,0,1,0,1}, u=0, descr="longsofa",block="lrfurn:sofa_white", add="longsofa_right_",p=1, composed=1 }, +--]] -- grey variants do not seem to exist, even though the textures arethere (perhaps nobody wants a grey flag!) flags_ = { nr=17, modname='flags', shades={0,0,1,0,0,0,0,0}, grey_shades={1,0,0,0,1}, u=1, descr="flags", block="flags:white", add="", p=3 }, diff --git a/farming/README.txt b/farming/README.txt new file mode 100644 index 0000000..811a535 --- /dev/null +++ b/farming/README.txt @@ -0,0 +1,153 @@ +Farming Redo Mod +by TenPlus1 + +https://forum.minetest.net/viewtopic.php?id=9019 + +Farming Redo is a simplified version of the built-in farming mod in minetest and comes with wheat, cotton, carrot, cucumber, potato and tomato to start out with which spawn throughout the map... new foods need only be planted on tilled soil so no seeds are required, original wheat and cotton will require seeds which are found inside normal and jungle grass... + +This mod works by adding your new plant to the {growing=1} group and numbering the stages from _1 to as many stages as you like, but the underscore MUST be used only once in the node name to separate plant from stage number e.g. + +"farming:cotton_1" through to "farming:cotton_8" +"farming:wheat_1" through to "farming:wheat_8" +"farming:cucumber_4" through to "farming:cucumber_4" + +Changelog: + +1.23 - Huge code tweak and tidy done and added barley seeds to be found in dry grass, barley can make flour for bread also. +1.22 - Added grape bushes at high climates which can be cultivated into grape vines using trellis (9 sticks). +1.21 - Added auto-refill code for planting crops (thanks crabman77), also fixed a few bugs +1.20b- Tidied code, made api compatible with new 0.4.13 changes and changed to soil texture overlays +1.20 - NEW growing routine added that allows crops to grow while player is away doing other things (thanks prestidigitator) +1.14 - Added Green Beans from Crops mod (thanks sofar), little bushels in the wild but need to be grown using beanpoles crafted with 4 sticks (2 either side) +1.13 - Fixed seed double-placement glitch. Mapgen now uses 0.4.12+ for plant generation +1.12 - Player cannot place seeds in protected area, also growing speeds changed to match defaults +1.11 - Added Straw Bale, streamlined growing abm a little, fixed melon rotation bug with screwdriver +1.10 - Added Blueberry Bush and Blueberry Muffins, also Pumpkin/Melon easier to pick up, added check for unloaded map +1.09 - Corn now uses single nodes instead of 1 ontop of the other, Ethanol recipe is more expensive (requires 5 corn) and some code cleanup. +1.08 - Added Farming Plus compatibility, plus can be removed and no more missing nodes +1.07 - Added Rhubarb and Rhubarb Pie +1.06 - register_hoe and register_plant added for compatibility with default farming mod, although any plants registered will use farming redo to grow +1.05 - Added Raspberry Bushels and Raspberry Smoothie +1.04 - Added Donuts... normal, chocolate and apple... and a few code cleanups and now compatible with jungletree's from MoreTrees mod +1.03 - Bug fixes and more compatibility as drop-in replacement for built-in farming mod +1.02 - Added farming.mod string to help other mods identify which farming mod is running, if it returns "redo" then you're using this one, "" empty is built-in mod +1.01 - Crafting coffee or ethanol returns empty bucket/bottle, also Cocoa spawns a little rarer +1.0 - Added Cocoa which randomly grows on jungle tree's, pods give cocoa beans which can be used to farm more pods on a jungle trunk or make Cookies which have been added (or other treats) +0.9 - Added Pumpkin, Jack 'O Lantern, Pumpkin Slice and Sugar +(a huge thanks to painterly.net for allowing me to use their textures) +0.8 - Added Watermelon and Melon Slice +0.7 - Added Coffee, Coffee Beans, Drinking Cup, Cold and Hot Cup of Coffee +0.6 - Added Corn, Corn on the Cob... Also reworked Abm +0.5 - Added Carrot, Cucumber, Potato (and Baked Potato), Tomato +0.4 - Checks for Protection, also performance changes +0.3 - Added Diamond and Mese hoe +0.2 - Fixed check for wet soil +0.1 - Fixed growing bug +0.0 - Initial release + +Lucky Blocks: 10 (plus 3 for default farming items) + + +License of media (textures): +---------------------------- +Created by PilzAdam (License: WTFPL): + farming_bread.png + farming_soil.png + farming_soil_wet.png + farming_soil_wet_side.png + farming_string.png + +Created by Calinou (License: CC BY-SA): + farming_tool_bronzehoe.png + farming_tool_steelhoe.png + farming_tool_stonehoe.png + farming_tool_woodhoe.png + farming_tool_mesehoe.png + farming_tool_diamondhoe.png + +Created by VanessaE (License: WTFPL): + farming_cotton_seed.png + farming_wheat_seed.png + farming_flour.png + farming_wheat.png + farming_wheat_1.png + farming_wheat_2.png + farming_wheat_3.png + farming_wheat_4.png + farming_wheat_5.png + farming_wheat_5.png + farming_wheat_7.png + farming_wheat_8.png + farming_cotton_1.png + farming_cotton_2.png + farming_cotton_3.png + farming_cotton_4.png + farming_cotton_5.png + farming_cotton_6.png + farming_cotton_7.png + farming_cotton_8.png + +Created by Doc (License: WTFPL): + farming_cucumber.png + farming_cucumber_1.png + farming_cucumber_2.png + farming_cucumber_3.png + farming_cucumber_4.png + farming_potato.png + farming_potato_1.png + farming_potato_2.png + farming_potato_3.png + farming_potato_4.png + farming_raspberries.png + farming_raspberry_1.png + farming_raspberry_2.png + farming_raspberry_3.png + farming_raspberry_4.png + +Created by Gambit: + default_junglegrass.png + farming_carrot.png + farming_carrot_1.png + farming_carrot_2.png + farming_carrot_3.png + farming_carrot_4.png + farming_carrot_5.png + farming_carrot_6.png + farming_carrot_7.png + farming_carrot_8.png + +Created by JoseTheCrafter and edited by TenPlus1: + farming_tomato.png + farming_tomato_1.png + farming_tomato_2.png + farming_tomato_3.png + farming_tomato_4.png + farming_tomato_5.png + farming_tomato_6.png + farming_tomato_7.png + farming_tomato_8.png + +Created by GeMinecraft and edited by TenPlus1: + farming_corn.png + farming_corn_cob.png + farming_corn_1.png + farming_corn_2.png + farming_corn_3.png + farming_corn_4.png + farming_corn_5.png + farming_corn_6.png + farming_corn_7.png + farming_corn_8.png + +Created by TenPlus1 + farming_cocoa_1.png + farming_cocoa_2.png + farming_cocoa_3.png + farming_cocoa_beans.png + farming_cookie.png + farming_raspberry_smoothie.png + farming_rhubarb_1.png + farming_rhubarb_2.png + farming_rhubarb_3.png + farming_rhubarb.png + farming_rhubarb_pie.png
\ No newline at end of file diff --git a/farming/barley.lua b/farming/barley.lua new file mode 100644 index 0000000..b7bf530 --- /dev/null +++ b/farming/barley.lua @@ -0,0 +1,98 @@ + +local S = farming.intllib + +-- barley seeds +minetest.register_node("farming:seed_barley", { + description = S("Barley Seed"), + tiles = {"farming_barley_seed.png"}, + inventory_image = "farming_barley_seed.png", + wield_image = "farming_barley_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:barley_1") + end, +}) + +-- harvested barley +minetest.register_craftitem("farming:barley", { + description = S("Barley"), + inventory_image = "farming_barley.png", +}) + +-- flour +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = {"farming:barley", "farming:barley", "farming:barley", "farming:barley"} +}) + +-- barley definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_barley_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:barley_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_barley_2.png"} +minetest.register_node("farming:barley_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_barley_3.png"} +minetest.register_node("farming:barley_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_barley_4.png"} +minetest.register_node("farming:barley_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_barley_5.png"} +crop_def.drop = { + items = { + {items = {'farming:barley'}, rarity = 2}, + {items = {'farming:seed_barley'}, rarity = 2}, + } +} +minetest.register_node("farming:barley_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_barley_6.png"} +crop_def.drop = { + items = { + {items = {'farming:barley'}, rarity = 2}, + {items = {'farming:seed_barley'}, rarity = 1}, + } +} +minetest.register_node("farming:barley_6", table.copy(crop_def)) + +-- stage 7 (final) +crop_def.tiles = {"farming_barley_7.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:barley'}, rarity = 1}, + {items = {'farming:barley'}, rarity = 3}, + {items = {'farming:seed_barley'}, rarity = 1}, + {items = {'farming:seed_barley'}, rarity = 3}, + } +} +minetest.register_node("farming:barley_7", table.copy(crop_def)) diff --git a/farming/beanpole.lua b/farming/beanpole.lua new file mode 100644 index 0000000..f06aea5 --- /dev/null +++ b/farming/beanpole.lua @@ -0,0 +1,196 @@ +--[[ + All textures by + (C) Auke Kok <sofar@foo-projects.org> + CC-BY-SA-3.0 +]] + +local S = farming.intllib + +-- beans +minetest.register_craftitem("farming:beans", { + description = S("Green Beans"), + inventory_image = "farming_beans.png", + on_use = minetest.item_eat(1), + + on_place = function(itemstack, placer, pointed_thing) + + if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then + return + end + + local nodename = minetest.get_node(pointed_thing.under).name + + if nodename == "farming:beanpole" then + minetest.set_node(pointed_thing.under, {name = "farming:beanpole_1"}) + + minetest.sound_play("default_place_node", {pos = pointed_thing.above, gain = 1.0}) + else + return + end + + if not minetest.setting_getbool("creative_mode") then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:beans", + placer:get_wield_index() + ) + end + end + + return itemstack + end +}) + +-- beans can be used for green dye +minetest.register_craft({ + output = "dye:green", + recipe = { + {'farming:beans'}, + } +}) + +-- beanpole +minetest.register_node("farming:beanpole", { + description = S("Bean Pole (place on soil before planting beans)"), + drawtype = "plantlike", + tiles = {"farming_beanpole.png"}, + inventory_image = "farming_beanpole.png", + visual_scale = 1.90, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = "farming:beanpole", + selection_box = farming.select, + groups = {snappy = 3, flammable = 2, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_place = function(itemstack, placer, pointed_thing) + + if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then + return + end + + local nodename = minetest.get_node(pointed_thing.under).name + + if minetest.get_item_group(nodename, "soil") < 2 then + return + end + + local top = { + x = pointed_thing.above.x, + y = pointed_thing.above.y + 1, + z = pointed_thing.above.z + } + + nodename = minetest.get_node(top).name + + if nodename ~= "air" then + return + end + + minetest.set_node(pointed_thing.above, {name = "farming:beanpole"}) + + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + + return itemstack + end +}) + +minetest.register_craft({ + output = "farming:beanpole", + recipe = { + {'', '', ''}, + {'default:stick', '', 'default:stick'}, + {'default:stick', '', 'default:stick'}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:beanpole", + burntime = 10, +}) + +-- green bean definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_beanpole_1.png"}, + visual_scale = 1.90, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:beanpole'}, rarity = 1}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, not_in_creative_inventory = 1, + attached_node = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:beanpole_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_beanpole_2.png"} +minetest.register_node("farming:beanpole_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_beanpole_3.png"} +minetest.register_node("farming:beanpole_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_beanpole_4.png"} +minetest.register_node("farming:beanpole_4", table.copy(crop_def)) + +-- stage 5 (final) +crop_def.tiles = {"farming_beanpole_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:beanpole'}, rarity = 1}, + {items = {'farming:beans 3'}, rarity = 1}, + {items = {'farming:beans 2'}, rarity = 2}, + {items = {'farming:beans 2'}, rarity = 3}, + } +} +minetest.register_node("farming:beanpole_5", table.copy(crop_def)) + +-- wild green bean bush (this is what you find on the map) +minetest.register_node("farming:beanbush", { + drawtype = "plantlike", + tiles = {"farming_beanbush.png"}, + paramtype = "light", + waving = 1, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:beans 1'}, rarity = 1}, + {items = {'farming:beans 1'}, rarity = 2}, + {items = {'farming:beans 1'}, rarity = 3}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory=1 + }, + sounds = default.node_sound_leaves_defaults(), +}) diff --git a/farming/blueberry.lua b/farming/blueberry.lua new file mode 100644 index 0000000..82ce7ff --- /dev/null +++ b/farming/blueberry.lua @@ -0,0 +1,67 @@ + +local S = farming.intllib + +-- blueberries +minetest.register_craftitem("farming:blueberries", { + description = S("Blueberries"), + inventory_image = "farming_blueberries.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:blueberry_1") + end, + on_use = minetest.item_eat(1), +}) + +-- blueberry muffin (thanks to sosogirl123 @ deviantart.com for muffin image) + +minetest.register_craftitem("farming:muffin_blueberry", { + description = S("Blueberry Muffin"), + inventory_image = "farming_blueberry_muffin.png", + on_use = minetest.item_eat(2), +}) + +minetest.register_craft({ + output = "farming:muffin_blueberry 2", + recipe = { + {"farming:blueberries", "farming:bread", "farming:blueberries"}, + } +}) + +-- blueberry definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_blueberry_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:blueberry_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_blueberry_2.png"} +minetest.register_node("farming:blueberry_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_blueberry_3.png"} +minetest.register_node("farming:blueberry_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_blueberry_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:blueberries 2'}, rarity = 1}, + {items = {'farming:blueberries'}, rarity = 2}, + {items = {'farming:blueberries'}, rarity = 3}, + } +} +minetest.register_node("farming:blueberry_4", table.copy(crop_def)) diff --git a/farming/carrot.lua b/farming/carrot.lua new file mode 100644 index 0000000..9cfcee0 --- /dev/null +++ b/farming/carrot.lua @@ -0,0 +1,95 @@ + +--[[ + Original textures from PixelBox texture pack + https://forum.minetest.net/viewtopic.php?id=4990 +]] + +local S = farming.intllib + +-- carrot +minetest.register_craftitem("farming:carrot", { + description = S("Carrot"), + inventory_image = "farming_carrot.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:carrot_1") + end, + on_use = minetest.item_eat(4), +}) + +-- golden carrot +minetest.register_craftitem("farming:carrot_gold", { + description = S("Golden Carrot"), + inventory_image = "farming_carrot_gold.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:carrot_gold", + recipe = { + {"", "default:gold_lump", ""}, + {"default:gold_lump", "farming:carrot", "default:gold_lump"}, + {"", "default:gold_lump", ""}, + } +}) + +-- carrot definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_carrot_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + + +-- stage 1 +minetest.register_node("farming:carrot_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_carrot_2.png"} +minetest.register_node("farming:carrot_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_carrot_3.png"} +minetest.register_node("farming:carrot_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_carrot_4.png"} +minetest.register_node("farming:carrot_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_carrot_5.png"} +minetest.register_node("farming:carrot_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_carrot_6.png"} +minetest.register_node("farming:carrot_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_carrot_7.png"} +crop_def.drop = { + items = { + {items = {'farming:carrot'}, rarity = 1}, + {items = {'farming:carrot 2'}, rarity = 3}, + } +} +minetest.register_node("farming:carrot_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_carrot_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:carrot 2'}, rarity = 1}, + {items = {'farming:carrot 3'}, rarity = 2}, + } +} +minetest.register_node("farming:carrot_8", table.copy(crop_def)) diff --git a/farming/cocoa.lua b/farming/cocoa.lua new file mode 100644 index 0000000..fad1733 --- /dev/null +++ b/farming/cocoa.lua @@ -0,0 +1,189 @@ + +local S = farming.intllib + +-- place cocoa +function place_cocoa(itemstack, placer, pointed_thing, plantname) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + + -- return if any of the nodes are not registered + if not minetest.registered_nodes[under.name] then + return + end + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + -- check if pointing at jungletree + if under.name ~= "default:jungletree" + or minetest.get_node(pt.above).name ~= "air" then + return + end + + -- add the node and remove 1 item from the itemstack + minetest.set_node(pt.above, {name = plantname}) + + minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}) + + if not minetest.setting_getbool("creative_mode") then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:cocoa_beans", + placer:get_wield_index() + ) + end + end + + return itemstack +end + +-- cocoa beans +minetest.register_craftitem("farming:cocoa_beans", { + description = S("Cocoa Beans"), + inventory_image = "farming_cocoa_beans.png", + on_place = function(itemstack, placer, pointed_thing) + return place_cocoa(itemstack, placer, pointed_thing, "farming:cocoa_1") + end, +}) + +minetest.register_craft( { + output = "dye:brown 2", + recipe = { + { "farming:cocoa_beans" }, + } +}) + +-- chocolate cookie +minetest.register_craftitem("farming:cookie", { + description = S("Cookie"), + inventory_image = "farming_cookie.png", + on_use = minetest.item_eat(2), +}) + +minetest.register_craft( { + output = "farming:cookie 8", + recipe = { + { "farming:wheat", "farming:cocoa_beans", "farming:wheat" }, + } +}) + +-- bar of dark chocolate (thanks to Ice Pandora for her deviantart.com chocolate tutorial) +minetest.register_craftitem("farming:chocolate_dark", { + description = S("Bar of Dark Chocolate"), + inventory_image = "farming_chocolate_dark.png", + on_use = minetest.item_eat(3), +}) + +minetest.register_craft( { + output = "farming:chocolate_dark", + recipe = { + { "farming:cocoa_beans", "farming:cocoa_beans", "farming:cocoa_beans" }, + } +}) + +-- cocoa definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_cocoa_1.png"}, + paramtype = "light", + walkable = true, + drop = { + items = { + {items = {'farming:cocoa_beans 1'}, rarity = 2}, + } + }, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + groups = { + snappy = 3, flammable = 2, plant = 1, growing = 1, + not_in_creative_inventory=1, leafdecay = 1, leafdecay_drop = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:cocoa_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_cocoa_2.png"} +crop_def.drop = { + items = { + {items = {'farming:cocoa_beans 1'}, rarity = 1}, + } +} +minetest.register_node("farming:cocoa_2", table.copy(crop_def)) + +-- stage 3 (final) +crop_def.tiles = {"farming_cocoa_3.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:cocoa_beans 2'}, rarity = 1}, + {items = {'farming:cocoa_beans 1'}, rarity = 2}, + } +} +minetest.register_node("farming:cocoa_3", table.copy(crop_def)) + +-- add random cocoa pods to jungle tree's +minetest.register_on_generated(function(minp, maxp) + + if maxp.y < 0 then + return + end + + local pos, dir + local cocoa = minetest.find_nodes_in_area(minp, maxp, "default:jungletree") + + for n = 1, #cocoa do + + pos = cocoa[n] + + if minetest.find_node_near(pos, 1, + {"default:jungleleaves", "moretrees:jungletree_leaves_green"}) then + + dir = math.random(1, 80) + + if dir == 1 then + pos.x = pos.x + 1 + elseif dir == 2 then + pos.x = pos.x - 1 + elseif dir == 3 then + pos.z = pos.z + 1 + elseif dir == 4 then + pos.z = pos.z -1 + end + + if dir < 5 + and minetest.get_node(pos).name == "air" + and minetest.get_node_light(pos) > 12 then + + --print ("Cocoa Pod added at " .. minetest.pos_to_string(pos)) + + minetest.swap_node(pos, { + name = "farming:cocoa_" .. tostring(math.random(1, 3)) + }) + end + + end + end +end) diff --git a/farming/coffee.lua b/farming/coffee.lua new file mode 100644 index 0000000..f9632d2 --- /dev/null +++ b/farming/coffee.lua @@ -0,0 +1,132 @@ + +local S = farming.intllib + +-- coffee +minetest.register_craftitem("farming:coffee_beans", { + description = S("Coffee Beans"), + inventory_image = "farming_coffee_beans.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:coffee_1") + end, +}) + + +-- drinking cup +minetest.register_node("farming:drinking_cup", { + description = S("Drinking Cup (empty)"), + drawtype = "plantlike", + tiles = {"vessels_drinking_cup.png"}, + inventory_image = "vessels_drinking_cup.png", + wield_image = "vessels_drinking_cup.png", + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "farming:drinking_cup 5", + recipe = { + { "default:glass", "", "default:glass" }, + {"", "default:glass",""}, + } +}) + +-- cold cup of coffee +minetest.register_node("farming:coffee_cup", { + description = S("Cold Cup of Coffee"), + drawtype = "plantlike", + tiles = {"farming_coffee_cup.png"}, + inventory_image = "farming_coffee_cup.png", + wield_image = "farming_coffee_cup.png", + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + on_use = minetest.item_eat(2, "farming:drinking_cup"), + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "farming:coffee_cup", + recipe = { + {"farming:drinking_cup", "farming:coffee_beans","bucket:bucket_water"}, + }, + replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}} +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 5, + output = "farming:coffee_cup_hot", + recipe = "farming:coffee_cup" +}) + +-- hot cup of coffee +minetest.register_node("farming:coffee_cup_hot", { + description = S("Hot Cup of Coffee"), + drawtype = "plantlike", + tiles = {"farming_coffee_cup_hot.png"}, + inventory_image = "farming_coffee_cup_hot.png", + wield_image = "farming_coffee_cup_hot.png", + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + on_use = minetest.item_eat(3, "farming:drinking_cup"), + sounds = default.node_sound_glass_defaults(), +}) + +-- coffee definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_coffee_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:coffee_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_coffee_2.png"} +minetest.register_node("farming:coffee_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_coffee_3.png"} +minetest.register_node("farming:coffee_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_coffee_4.png"} +minetest.register_node("farming:coffee_4", table.copy(crop_def)) + +-- stage 5 (final) +crop_def.tiles = {"farming_coffee_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:coffee_beans 2'}, rarity = 1}, + {items = {'farming:coffee_beans 2'}, rarity = 2}, + {items = {'farming:coffee_beans 2'}, rarity = 3}, + } +} +minetest.register_node("farming:coffee_5", table.copy(crop_def)) diff --git a/farming/compatibility.lua b/farming/compatibility.lua new file mode 100644 index 0000000..4354e60 --- /dev/null +++ b/farming/compatibility.lua @@ -0,0 +1,142 @@ +-- is Ethereal mod installed? +local eth = minetest.get_modpath("ethereal") or nil + +-- Banana +if eth then + minetest.register_alias("farming_plus:banana_sapling", "ethereal:banana_tree_sapling") + minetest.register_alias("farming_plus:banana_leaves", "ethereal:bananaleaves") + minetest.register_alias("farming_plus:banana", "ethereal:banana") +else + minetest.register_node(":ethereal:banana", { + description = "Banana", + drawtype = "torchlike", + tiles = {"banana_single.png"}, + inventory_image = "banana_single.png", + wield_image = "banana_single.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, 0.2, 0.2} + }, + groups = {fleshy = 3, dig_immediate = 3, flammable = 2}, + on_use = minetest.item_eat(2), + sounds = default.node_sound_leaves_defaults(), + }) + + minetest.register_alias("farming_plus:banana_sapling", "default:sapling") + minetest.register_alias("farming_plus:banana_leaves", "default:leaves") + minetest.register_alias("farming_plus:banana", "ethereal:banana") +end + +-- Carrot +minetest.register_alias("farming_plus:carrot_seed", "farming:carrot") +minetest.register_alias("farming_plus:carrot_1", "farming:carrot_1") +minetest.register_alias("farming_plus:carrot_2", "farming:carrot_4") +minetest.register_alias("farming_plus:carrot_3", "farming:carrot_6") +minetest.register_alias("farming_plus:carrot", "farming:carrot_8") +minetest.register_alias("farming_plus:carrot_item", "farming:carrot") + +-- Cocoa +minetest.register_alias("farming_plus:cocoa_sapling", "farming:cocoa_2") +minetest.register_alias("farming_plus:cocoa_leaves", "default:leaves") +minetest.register_alias("farming_plus:cocoa", "default:apple") +minetest.register_alias("farming_plus:cocoa_bean", "farming:cocoa_beans") + +-- Orange +minetest.register_alias("farming_plus:orange_1", "farming:tomato_1") +minetest.register_alias("farming_plus:orange_2", "farming:tomato_4") +minetest.register_alias("farming_plus:orange_3", "farming:tomato_6") +--minetest.register_alias("farming_plus:orange", "farming:tomato_8") + +if eth then + minetest.register_alias("farming_plus:orange_item", "ethereal:orange") + minetest.register_alias("farming_plus:orange", "ethereal:orange") + minetest.register_alias("farming_plus:orange_seed", "ethereal:orange_tree_sapling") +else + minetest.register_node(":ethereal:orange", { + description = "Orange", + drawtype = "plantlike", + tiles = {"farming_orange.png"}, + inventory_image = "farming_orange.png", + wield_image = "farming_orange.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.3, -0.2, 0.2, 0.2, 0.2} + }, + groups = {fleshy = 3, dig_immediate = 3, flammable = 2}, + on_use = minetest.item_eat(4), + sounds = default.node_sound_leaves_defaults(), + }) + + minetest.register_alias("farming_plus:orange_item", "ethereal:orange") + minetest.register_alias("farming_plus:orange", "ethereal:orange") + minetest.register_alias("farming_plus:orange_seed", "default:sapling") +end + +-- Potato +minetest.register_alias("farming_plus:potato_item", "farming:potato") +minetest.register_alias("farming_plus:potato_1", "farming:potato_1") +minetest.register_alias("farming_plus:potato_2", "farming:potato_2") +minetest.register_alias("farming_plus:potato", "farming:potato_3") +minetest.register_alias("farming_plus:potato_seed", "farming:potato") + +-- Pumpkin +minetest.register_alias("farming:pumpkin_seed", "farming:pumpkin_slice") +minetest.register_alias("farming:pumpkin_face", "farming:jackolantern") +minetest.register_alias("farming:pumpkin_face_light", "farming:jackolantern_on") +minetest.register_alias("farming:big_pumpkin", "farming:pumpkin") +minetest.register_alias("farming:big_pumpkin_side", "air") +minetest.register_alias("farming:big_pumpkin_corner", "air") +minetest.register_alias("farming:big_pumpkin_top", "air") +minetest.register_alias("farming:scarecrow", "farming:jackolantern") +minetest.register_alias("farming:scarecrow_bottom", "default:fence_wood") +minetest.register_alias("farming:scarecrow_light", "farming:jackolantern_on") +minetest.register_alias("farming:pumpkin_flour", "farming:pumpkin_dough") + +-- Rhubarb +minetest.register_alias("farming_plus:rhubarb_seed", "farming:rhubarb") +minetest.register_alias("farming_plus:rhubarb_1", "farming:rhubarb_1") +minetest.register_alias("farming_plus:rhubarb_2", "farming:rhubarb_2") +minetest.register_alias("farming_plus:rhubarb", "farming:rhubarb_3") +minetest.register_alias("farming_plus:rhubarb_item", "farming:rhubarb") + +-- Strawberry +if eth then + minetest.register_alias("farming_plus:strawberry_item", "ethereal:strawberry") + minetest.register_alias("farming_plus:strawberry_seed", "ethereal:strawberry") + minetest.register_alias("farming_plus:strawberry_1", "ethereal:strawberry_1") + minetest.register_alias("farming_plus:strawberry_2", "ethereal:strawberry_3") + minetest.register_alias("farming_plus:strawberry_3", "ethereal:strawberry_5") + minetest.register_alias("farming_plus:strawberry", "ethereal:strawberry_7") +else + minetest.register_craftitem(":ethereal:strawberry", { + description = "Strawberry", + inventory_image = "strawberry.png", + wield_image = "strawberry.png", + on_use = minetest.item_eat(1), + }) + + minetest.register_alias("farming_plus:strawberry_item", "ethereal:strawberry") + minetest.register_alias("farming_plus:strawberry_seed", "ethereal:strawberry") + minetest.register_alias("farming_plus:strawberry_1", "farming:raspberry_1") + minetest.register_alias("farming_plus:strawberry_2", "farming:raspberry_2") + minetest.register_alias("farming_plus:strawberry_3", "farming:raspberry_3") + minetest.register_alias("farming_plus:strawberry", "farming:raspberry_4") + +end + +-- Tomato +minetest.register_alias("farming_plus:tomato_seed", "farming:tomato") +minetest.register_alias("farming_plus:tomato_item", "farming:tomato") +minetest.register_alias("farming_plus:tomato_1", "farming:tomato_2") +minetest.register_alias("farming_plus:tomato_2", "farming:tomato_4") +minetest.register_alias("farming_plus:tomato_3", "farming:tomato_6") +minetest.register_alias("farming_plus:tomato", "farming:tomato_8") + +-- Weed +minetest.register_alias("farming:weed", "default:grass_2") diff --git a/farming/corn.lua b/farming/corn.lua new file mode 100644 index 0000000..3c27ea3 --- /dev/null +++ b/farming/corn.lua @@ -0,0 +1,116 @@ + +--[[ + Original textures from GeMinecraft + http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/wip-mods/1440575-1-2-5-generation-minecraft-beta-1-2-farming-and +]] + +local S = farming.intllib + +-- corn +minetest.register_craftitem("farming:corn", { + description = S("Corn"), + inventory_image = "farming_corn.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:corn_1") + end, + on_use = minetest.item_eat(3), +}) + +-- corn on the cob (texture by TenPlus1) +minetest.register_craftitem("farming:corn_cob", { + description = S("Corn on the Cob"), + inventory_image = "farming_corn_cob.png", + on_use = minetest.item_eat(5), +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:corn_cob", + recipe = "farming:corn" +}) + +-- ethanol (thanks to JKMurray for this idea) +minetest.register_craftitem("farming:bottle_ethanol", { + description = S("Bottle of Ethanol"), + inventory_image = "farming_bottle_ethanol.png", +}) + +minetest.register_craft( { + output = "farming:bottle_ethanol", + recipe = { + { "vessels:glass_bottle", "farming:corn", "farming:corn"}, + { "farming:corn", "farming:corn", "farming:corn"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:bottle_ethanol", + burntime = 240, + replacements = {{ "farming:bottle_ethanol", "vessels:glass_bottle"}} +}) + +-- corn definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_corn_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:corn_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_corn_2.png"} +minetest.register_node("farming:corn_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_corn_3.png"} +minetest.register_node("farming:corn_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_corn_4.png"} +minetest.register_node("farming:corn_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_corn_5.png"} +minetest.register_node("farming:corn_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_corn_6.png"} +crop_def.visual_scale = 1.9 -- 1.45 +minetest.register_node("farming:corn_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_corn_7.png"} +crop_def.drop = { + items = { + {items = {'farming:corn'}, rarity = 1}, + {items = {'farming:corn'}, rarity = 2}, + {items = {'farming:corn'}, rarity = 3}, + } +} +minetest.register_node("farming:corn_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_corn_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:corn 2'}, rarity = 1}, + {items = {'farming:corn 2'}, rarity = 2}, + {items = {'farming:corn 2'}, rarity = 2}, + } +} +minetest.register_node("farming:corn_8", table.copy(crop_def)) diff --git a/farming/cotton.lua b/farming/cotton.lua new file mode 100644 index 0000000..eef6425 --- /dev/null +++ b/farming/cotton.lua @@ -0,0 +1,123 @@ + +local S = farming.intllib + +-- cotton seeds +minetest.register_node("farming:seed_cotton", { + description = S("Cotton Seed"), + tiles = {"farming_cotton_seed.png"}, + inventory_image = "farming_cotton_seed.png", + wield_image = "farming_cotton_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:cotton_1") + end, +}) + +-- cotton / string + +minetest.register_craftitem("farming:cotton", { + description = S("Cotton"), + inventory_image = "farming_cotton.png", +}) + +minetest.register_alias("farming:string", "farming:cotton") + +-- cotton to wool +minetest.register_craft({ + output = "wool:white", + recipe = { + {"farming:string", "farming:string"}, + {"farming:string", "farming:string"}, + } +}) + +-- cotton definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_cotton_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:cotton_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_cotton_2.png"} +minetest.register_node("farming:cotton_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_cotton_3.png"} +minetest.register_node("farming:cotton_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_cotton_4.png"} +minetest.register_node("farming:cotton_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_cotton_5.png"} +crop_def.drop = { + items = { + {items = {"farming:seed_cotton"}, rarity = 1}, + } +} +minetest.register_node("farming:cotton_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_cotton_6.png"} +crop_def.drop = { + items = { + {items = {"farming:cotton"}, rarity = 1}, + {items = {"farming:cotton"}, rarity = 2}, + } +} +minetest.register_node("farming:cotton_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_cotton_7.png"} +crop_def.drop = { + items = { + {items = {"farming:cotton"}, rarity = 1}, + {items = {"farming:cotton"}, rarity = 2}, + {items = {"farming:seed_cotton"}, rarity = 1}, + {items = {"farming:seed_cotton"}, rarity = 2}, + } +} +minetest.register_node("farming:cotton_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_cotton_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {"farming:string"}, rarity = 1}, + {items = {"farming:string"}, rarity = 2}, + {items = {"farming:string"}, rarity = 3}, + {items = {"farming:seed_cotton"}, rarity = 1}, + {items = {"farming:seed_cotton"}, rarity = 2}, + {items = {"farming:seed_cotton"}, rarity = 3}, + } +} +minetest.register_node("farming:cotton_8", table.copy(crop_def)) + +--[[ Cotton (example, is already registered in cotton.lua) +farming.register_plant("farming:cotton", { + description = "Cotton seed", + inventory_image = "farming_cotton_seed.png", + steps = 8, +})]] diff --git a/farming/cucumber.lua b/farming/cucumber.lua new file mode 100644 index 0000000..8e29215 --- /dev/null +++ b/farming/cucumber.lua @@ -0,0 +1,55 @@ + +--[[ + Original textures from DocFarming mod + https://forum.minetest.net/viewtopic.php?id=3948 +]] + +local S = farming.intllib + +-- cucumber +minetest.register_craftitem("farming:cucumber", { + description = S("Cucumber"), + inventory_image = "farming_cucumber.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:cucumber_1") + end, + on_use = minetest.item_eat(4), +}) + +-- cucumber definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_cucumber_1.png"}, + paramtype = "light", + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:cucumber_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_cucumber_2.png"} +minetest.register_node("farming:cucumber_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_cucumber_3.png"} +minetest.register_node("farming:cucumber_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_cucumber_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:cucumber'}, rarity = 1}, + {items = {'farming:cucumber 2'}, rarity = 2}, + } +} +minetest.register_node("farming:cucumber_4", table.copy(crop_def)) diff --git a/farming/depends.txt b/farming/depends.txt new file mode 100644 index 0000000..8a8d2a2 --- /dev/null +++ b/farming/depends.txt @@ -0,0 +1,3 @@ +default +intllib? +lucky_block?
\ No newline at end of file diff --git a/farming/description.txt b/farming/description.txt new file mode 100644 index 0000000..58bdc81 --- /dev/null +++ b/farming/description.txt @@ -0,0 +1 @@ +Adds many plants and food to Minetest
\ No newline at end of file diff --git a/farming/donut.lua b/farming/donut.lua new file mode 100644 index 0000000..68aeb8e --- /dev/null +++ b/farming/donut.lua @@ -0,0 +1,48 @@ + +local S = farming.intllib + +-- Donut (thanks to Bockwurst for making the donut images) +minetest.register_craftitem("farming:donut", { + description = S("Donut"), + inventory_image = "farming_donut.png", + on_use = minetest.item_eat(4), +}) + +minetest.register_craft({ + output = "farming:donut 3", + recipe = { + {'', 'farming:wheat', ''}, + {'farming:wheat', '', 'farming:wheat'}, + {'', 'farming:wheat', ''}, + } +}) + +-- Chocolate Donut +minetest.register_craftitem("farming:donut_chocolate", { + description = S("Chocolate Donut"), + inventory_image = "farming_donut_chocolate.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:donut_chocolate", + recipe = { + {'farming:cocoa_beans'}, + {'farming:donut'}, + } +}) + +-- Apple Donut +minetest.register_craftitem("farming:donut_apple", { + description = S("Apple Donut"), + inventory_image = "farming_donut_apple.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:donut_apple", + recipe = { + {'default:apple'}, + {'farming:donut'}, + } +}) diff --git a/farming/grapes.lua b/farming/grapes.lua new file mode 100644 index 0000000..e4381e9 --- /dev/null +++ b/farming/grapes.lua @@ -0,0 +1,203 @@ + +local S = farming.intllib + +-- grapes +minetest.register_craftitem("farming:grapes", { + description = S("Grapes"), + inventory_image = "farming_grapes.png", + on_use = minetest.item_eat(2), + + on_place = function(itemstack, placer, pointed_thing) + + if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then + return + end + + local nodename = minetest.get_node(pointed_thing.under).name + + if nodename == "farming:trellis" then + minetest.set_node(pointed_thing.under, {name = "farming:grapes_1"}) + + minetest.sound_play("default_place_node", {pos = pointed_thing.above, gain = 1.0}) + else + return + end + + if not minetest.setting_getbool("creative_mode") then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:grapes", + placer:get_wield_index() + ) + end + end + + return itemstack + end +}) + +-- grapes can be used for violet dye +minetest.register_craft({ + output = "dye:violet", + recipe = { + {'farming:grapes'}, + } +}) + +-- trellis +minetest.register_node("farming:trellis", { + description = S("Trellis (place on soil before planting grapes)"), + drawtype = "plantlike", + tiles = {"farming_trellis.png"}, + inventory_image = "farming_trellis.png", + visual_scale = 1.9, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = "farming:trellis", + selection_box = farming.select, + groups = {snappy = 3, flammable = 2, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_place = function(itemstack, placer, pointed_thing) + + if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then + return + end + + local nodename = minetest.get_node(pointed_thing.under).name + + if minetest.get_item_group(nodename, "soil") < 2 then + return + end + + local top = { + x = pointed_thing.above.x, + y = pointed_thing.above.y + 1, + z = pointed_thing.above.z + } + + nodename = minetest.get_node(top).name + + if nodename ~= "air" then + return + end + + minetest.set_node(pointed_thing.above, {name = "farming:trellis"}) + + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + + return itemstack + end +}) + +minetest.register_craft({ + output = "farming:trellis", + recipe = { + {'default:stick', 'default:stick', 'default:stick'}, + {'default:stick', 'default:stick', 'default:stick'}, + {'default:stick', 'default:stick', 'default:stick'}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:trellis", + burntime = 15, +}) + +-- grapes definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_grapes_1.png"}, + visual_scale = 1.9, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:trellis'}, rarity = 1}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, not_in_creative_inventory = 1, + attached_node = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:grapes_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_grapes_2.png"} +minetest.register_node("farming:grapes_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_grapes_3.png"} +minetest.register_node("farming:grapes_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_grapes_4.png"} +minetest.register_node("farming:grapes_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_grapes_5.png"} +minetest.register_node("farming:grapes_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_grapes_6.png"} +minetest.register_node("farming:grapes_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_grapes_7.png"} +minetest.register_node("farming:grapes_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_grapes_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:trellis'}, rarity = 1}, + {items = {'farming:grapes 3'}, rarity = 1}, + {items = {'farming:grapes 1'}, rarity = 2}, + {items = {'farming:grapes 1'}, rarity = 3}, + } +} +minetest.register_node("farming:grapes_8", table.copy(crop_def)) + +-- wild grape vine (this is what you find on the map) +minetest.register_node("farming:grapebush", { + drawtype = "plantlike", + tiles = {"farming_grapebush.png"}, + paramtype = "light", + waving = 1, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:grapes 1'}, rarity = 1}, + {items = {'farming:grapes 1'}, rarity = 2}, + {items = {'farming:grapes 1'}, rarity = 3}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory=1 + }, + sounds = default.node_sound_leaves_defaults(), +}) diff --git a/farming/grass.lua b/farming/grass.lua new file mode 100644 index 0000000..aacb220 --- /dev/null +++ b/farming/grass.lua @@ -0,0 +1,42 @@ + +for i = 3, 5 do + + -- Override default grass and have it drop Wheat Seeds + + minetest.override_item("default:grass_" .. i, { + drop = { + max_items = 1, + items = { + {items = {'farming:seed_wheat'}, rarity = 5}, + {items = {'default:grass_1'}}, + } + }, + }) + + -- Override default dry grass and have it drop Barley Seeds + if minetest.registered_nodes["default:dry_grass_1"] then + + minetest.override_item("default:dry_grass_" .. i, { + drop = { + max_items = 1, + items = { + {items = {'farming:seed_barley'}, rarity = 6}, + {items = {'default:dry_grass_1'}}, + } + }, + }) + end + +end + +-- Override default Jungle Grass and have it drop Cotton Seeds + +minetest.override_item("default:junglegrass", { + drop = { + max_items = 1, + items = { + {items = {'farming:seed_cotton'}, rarity = 8}, + {items = {'default:junglegrass'}}, + } + }, +}) diff --git a/farming/hoes.lua b/farming/hoes.lua new file mode 100644 index 0000000..dab2ac9 --- /dev/null +++ b/farming/hoes.lua @@ -0,0 +1,153 @@ + +local S = farming.intllib + +-- Hoe registration function + +farming.register_hoe = function(name, def) + + -- Check for : prefix (register new hoes in your mod's namespace) + if name:sub(1,1) ~= ":" then + name = ":" .. name + end + + -- Check def table + if def.description == nil then + def.description = "Hoe" + end + + if def.inventory_image == nil then + def.inventory_image = "unknown_item.png" + end + + if def.recipe == nil then + def.recipe = { + {"air","air",""}, + {"","group:stick",""}, + {"","group:stick",""} + } + end + + if def.max_uses == nil then + def.max_uses = 30 + end + + -- Register the tool + minetest.register_tool(name, { + description = def.description, + inventory_image = def.inventory_image, + on_use = function(itemstack, user, pointed_thing) + return farming.hoe_on_use(itemstack, user, pointed_thing, def.max_uses) + end + }) + + -- Register its recipe + if def.material == nil then + minetest.register_craft({ + output = name:sub(2), + recipe = def.recipe + }) + else + minetest.register_craft({ + output = name:sub(2), + recipe = { + {def.material, def.material, ""}, + {"", "group:stick", ""}, + {"", "group:stick", ""} + } + }) + end +end + +-- Turns dirt with group soil=1 into soil + +function farming.hoe_on_use(itemstack, user, pointed_thing, uses) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + local upos = pointed_thing.under + + if minetest.is_protected(upos, user:get_player_name()) then + minetest.record_protection_violation(upos, user:get_player_name()) + return + end + + local p = {x = pt.under.x, y = pt.under.y + 1, z = pt.under.z} + local above = minetest.get_node(p) + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] + or not minetest.registered_nodes[above.name] then + return + end + + -- check if the node above the pointed thing is air + if above.name ~= "air" then + return + end + + -- check if pointing at dirt + if minetest.get_item_group(under.name, "soil") ~= 1 then + return + end + + -- turn the node into soil, wear out item and play sound + minetest.set_node(pt.under, {name = "farming:soil"}) + + minetest.sound_play("default_dig_crumbly", {pos = pt.under, gain = 0.5}) + + if not minetest.setting_getbool("creative_mode") then + itemstack:add_wear(65535/(uses-1)) + end + + return itemstack +end + +-- Define Hoes + +farming.register_hoe(":farming:hoe_wood", { + description = S("Wooden Hoe"), + inventory_image = "farming_tool_woodhoe.png", + max_uses = 30, + material = "group:wood" +}) + +farming.register_hoe(":farming:hoe_stone", { + description = S("Stone Hoe"), + inventory_image = "farming_tool_stonehoe.png", + max_uses = 90, + material = "group:stone" +}) + +farming.register_hoe(":farming:hoe_steel", { + description = S("Steel Hoe"), + inventory_image = "farming_tool_steelhoe.png", + max_uses = 200, + material = "default:steel_ingot" +}) + +farming.register_hoe(":farming:hoe_bronze", { + description = S("Bronze Hoe"), + inventory_image = "farming_tool_bronzehoe.png", + max_uses = 220, + material = "default:bronze_ingot" +}) + +farming.register_hoe(":farming:hoe_mese", { + description = S("Mese Hoe"), + inventory_image = "farming_tool_mesehoe.png", + max_uses = 350, + material = "default:mese_crystal" +}) + +farming.register_hoe(":farming:hoe_diamond", { + description = S("Diamond Hoe"), + inventory_image = "farming_tool_diamondhoe.png", + max_uses = 500, + material = "default:diamond" +}) diff --git a/farming/init.lua b/farming/init.lua new file mode 100644 index 0000000..2d64f61 --- /dev/null +++ b/farming/init.lua @@ -0,0 +1,717 @@ +--[[ + Minetest Farming Redo Mod 1.23 (12th November 2016) + by TenPlus1 + NEW growing routine by prestidigitator + auto-refill by crabman77 +]] + +farming = {} +farming.mod = "redo" +farming.path = minetest.get_modpath("farming") +farming.hoe_on_use = default.hoe_on_use +farming.select = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} +} + +farming.DEBUG = false +-- farming.DEBUG = {} -- Uncomment to turn on profiling code/functions + +local DEBUG_abm_runs = 0 +local DEBUG_abm_time = 0 +local DEBUG_timer_runs = 0 +local DEBUG_timer_time = 0 + +if farming.DEBUG then + + function farming.DEBUG.reset_times() + DEBUG_abm_runs = 0 + DEBUG_abm_time = 0 + DEBUG_timer_runs = 0 + DEBUG_timer_time = 0 + end + + function farming.DEBUG.report_times() + + local abm_n = DEBUG_abm_runs + local abm_dt = DEBUG_abm_time + local abm_avg = (abm_n > 0 and abm_dt / abm_n) or 0 + local timer_n = DEBUG_timer_runs + local timer_dt = DEBUG_timer_time + local timer_avg = (timer_n > 0 and timer_dt / timer_n) or 0 + local dt = abm_dt + timer_dt + + print("ABM ran for "..abm_dt.."µs over "..abm_n.." runs: "..abm_avg.."µs/run") + print("Timer ran for "..timer_dt.."µs over "..timer_n.." runs: "..timer_avg.."µs/run") + print("Total farming time: "..dt.."µs") + end +end + +local statistics = dofile(farming.path.."/statistics.lua") + +-- Intllib + +local S +if minetest.get_modpath("intllib") then + S = intllib.Getter() +else + S = function(s) return s end +end +farming.intllib = S + +-- Utility Functions + +local time_speed = tonumber(minetest.setting_get("time_speed")) or 72 +local SECS_PER_CYCLE = (time_speed > 0 and 24 * 60 * 60 / time_speed) or 0 + +local function clamp(x, min, max) + return (x < min and min) or (x > max and max) or x +end + +local function in_range(x, min, max) + return min <= x and x <= max +end + +--- Tests the amount of day or night time between two times. + -- + -- @param t_game + -- The current time, as reported by mintest.get_gametime(). + -- @param t_day + -- The current time, as reported by mintest.get_timeofday(). + -- @param dt + -- The amount of elapsed time. + -- @param count_day + -- If true, count elapsed day time. Otherwise, count elapsed night time. + -- @return + -- The amount of day or night time that has elapsed. + +local function day_or_night_time(t_game, t_day, dt, count_day) + + local t1_day = t_day - dt / SECS_PER_CYCLE + local t1_c, t2_c -- t1_c < t2_c and t2_c always in [0, 1) + + if count_day then + + if t_day < 0.25 then + t1_c = t1_day + 0.75 -- Relative to sunup, yesterday + t2_c = t_day + 0.75 + else + t1_c = t1_day - 0.25 -- Relative to sunup, today + t2_c = t_day - 0.25 + end + else + if t_day < 0.75 then + t1_c = t1_day + 0.25 -- Relative to sundown, yesterday + t2_c = t_day + 0.25 + else + t1_c = t1_day - 0.75 -- Relative to sundown, today + t2_c = t_day - 0.75 + end + end + + local dt_c = clamp(t2_c, 0, 0.5) - clamp(t1_c, 0, 0.5) -- this cycle + + if t1_c < -0.5 then + local nc = math.floor(-t1_c) + t1_c = t1_c + nc + dt_c = dt_c + 0.5 * nc + clamp(-t1_c - 0.5, 0, 0.5) + end + + return dt_c * SECS_PER_CYCLE +end + +--- Tests the amount of elapsed day time. + -- + -- @param dt + -- The amount of elapsed time. + -- @return + -- The amount of day time that has elapsed. + -- +local function day_time(dt) + return day_or_night_time(minetest.get_gametime(), minetest.get_timeofday(), dt, true) +end + +--- Tests the amount of elapsed night time. + -- + -- @param dt + -- The amount of elapsed time. + -- @return + -- The amount of night time that has elapsed. + -- +local function night_time(time_game, time_day, dt, count_day) + return day_or_night_time(minetest.get_gametime(), minetest.get_timeofday(), dt, false) +end + + +-- Growth Logic + +local STAGE_LENGTH_AVG = 160.0 +local STAGE_LENGTH_DEV = STAGE_LENGTH_AVG / 6 +local MIN_LIGHT = 13 +local MAX_LIGHT = 1000 + +--- Determines plant name and stage from node. + -- + -- Separates node name on the last underscore (_). + -- + -- @param node + -- Node or position table, or node name. + -- @return + -- List (plant_name, stage), or nothing (nil) if node isn't loaded + +local function plant_name_stage(node) + + local name + + if type(node) == "table" then + + if node.name then + name = node.name + elseif node.x and node.y and node.z then + node = minetest.get_node_or_nil(node) + name = node and node.name + end + else + name = tostring(node) + end + + if not name or name == "ignore" then + return nil + end + + local sep_pos = name:find("_[^_]+$") + + if sep_pos and sep_pos > 1 then + + local stage = tonumber(name:sub(sep_pos + 1)) + + if stage and stage >= 0 then + return name:sub(1, sep_pos - 1), stage + end + end + + return name, 0 +end + +-- Map from node name to +-- { plant_name = ..., name = ..., stage = n, stages_left = { node_name, ... } } + +local plant_stages = {} + +farming.plant_stages = plant_stages + +--- Registers the stages of growth of a (possible plant) node. + -- + -- @param node + -- Node or position table, or node name. + -- @return + -- The (possibly zero) number of stages of growth the plant will go through + -- before being fully grown, or nil if not a plant. + +local register_plant_node + +-- Recursive helper +local function reg_plant_stages(plant_name, stage, force_last) + + local node_name = plant_name and plant_name .. "_" .. stage + local node_def = node_name and minetest.registered_nodes[node_name] + + if not node_def then + return nil + end + + local stages = plant_stages[node_name] + + if stages then + return stages + end + + if minetest.get_item_group(node_name, "growing") > 0 then + + local ns = reg_plant_stages(plant_name, stage + 1, true) + local stages_left = (ns and { ns.name, unpack(ns.stages_left) }) or {} + + stages = { + plant_name = plant_name, + name = node_name, + stage = stage, + stages_left = stages_left + } + + if #stages_left > 0 then + + local old_constr = node_def.on_construct + local old_destr = node_def.on_destruct + + minetest.override_item(node_name, + { + on_construct = function(pos) + + if old_constr then + old_constr(pos) + end + + farming.handle_growth(pos) + end, + + on_destruct = function(pos) + + minetest.get_node_timer(pos):stop() + + if old_destr then + old_destr(pos) + end + end, + + on_timer = function(pos, elapsed) + return farming.plant_growth_timer(pos, elapsed, node_name) + end, + }) + end + + elseif force_last then + + stages = { + plant_name = plant_name, + name = node_name, + stage = stage, + stages_left = {} + } + else + return nil + end + + plant_stages[node_name] = stages + + return stages +end + +register_plant_node = function(node) + + local plant_name, stage = plant_name_stage(node) + + if plant_name then + + local stages = reg_plant_stages(plant_name, stage, false) + return stages and #stages.stages_left + else + return nil + end +end + +local function set_growing(pos, stages_left) + + if not stages_left then + return + end + + local timer = minetest.get_node_timer(pos) + + if stages_left > 0 then + + if not timer:is_started() then + + local stage_length = statistics.normal(STAGE_LENGTH_AVG, STAGE_LENGTH_DEV) + + stage_length = clamp(stage_length, 0.5 * STAGE_LENGTH_AVG, 3.0 * STAGE_LENGTH_AVG) + + timer:set(stage_length, -0.5 * math.random() * STAGE_LENGTH_AVG) + end + + elseif timer:is_started() then + timer:stop() + end +end + +-- Detects a plant type node at the given position, starting +-- or stopping the plant growth timer as appopriate + +-- @param pos +-- The node's position. +-- @param node +-- The cached node table if available, or nil. + +function farming.handle_growth(pos, node) + + if not pos then + return + end + + local stages_left = register_plant_node(node or pos) + + if stages_left then + set_growing(pos, stages_left) + end +end + +minetest.after(0, function() + + for _, node_def in ipairs(minetest.registered_nodes) do + register_plant_node(node_def) + end +end) + +local abm_func = farming.handle_growth + +if farming.DEBUG then + + local normal_abm_func = abm_func + + abm_func = function(...) + + local t0 = minetest.get_us_time() + local r = { normal_abm_func(...) } + local t1 = minetest.get_us_time() + + DEBUG_abm_runs = DEBUG_abm_runs + 1 + DEBUG_abm_time = DEBUG_abm_time + (t1 - t0) + + return unpack(r) + end +end + +-- Just in case a growing type or added node is missed (also catches existing +-- nodes added to map before timers were incorporated). + +minetest.register_abm({ + nodenames = { "group:growing" }, + interval = 300, + chance = 1, + action = abm_func +}) + +-- Plant timer function. +-- Grows plants under the right conditions. + +function farming.plant_growth_timer(pos, elapsed, node_name) + + local stages = plant_stages[node_name] + + if not stages then + return false + end + + local max_growth = #stages.stages_left + + if max_growth <= 0 then + return false + end + + if stages.plant_name == "farming:cocoa" then + + if not minetest.find_node_near(pos, 1, + {"default:jungletree", "moretrees:jungletree_leaves_green"}) then + + return true + end + else + local under = minetest.get_node({ x = pos.x, y = pos.y - 1, z = pos.z }) + + if minetest.get_item_group(under.name, "soil") < 3 then + return true + end + end + + local growth + local light_pos = {x = pos.x, y = pos.y + 1, z = pos.z} + local lambda = elapsed / STAGE_LENGTH_AVG + + if lambda < 0.1 then + return true + end + + if max_growth == 1 or lambda < 2.0 then + + local light = (minetest.get_node_light(light_pos) or 0) + --print ("light level:", light) + + if not in_range(light, MIN_LIGHT, MAX_LIGHT) then + return true + end + + growth = 1 + else + local night_light = (minetest.get_node_light(light_pos, 0) or 0) + local day_light = (minetest.get_node_light(light_pos, 0.5) or 0) + local night_growth = in_range(night_light, MIN_LIGHT, MAX_LIGHT) + local day_growth = in_range(day_light, MIN_LIGHT, MAX_LIGHT) + + if not night_growth then + + if not day_growth then + return true + end + + lambda = day_time(elapsed) / STAGE_LENGTH_AVG + + elseif not day_growth then + + lambda = night_time(elapsed) / STAGE_LENGTH_AVG + end + + growth = statistics.poisson(lambda, max_growth) + + if growth < 1 then + return true + end + end + + if minetest.registered_nodes[stages.stages_left[growth]] then + minetest.swap_node(pos, {name = stages.stages_left[growth]}) + else + return true + end + + return growth ~= max_growth +end + +if farming.DEBUG then + + local timer_func = farming.plant_growth_timer; + + farming.plant_growth_timer = function(pos, elapsed, node_name) + + local t0 = minetest.get_us_time() + local r = { timer_func(pos, elapsed, node_name) } + local t1 = minetest.get_us_time() + + DEBUG_timer_runs = DEBUG_timer_runs + 1 + DEBUG_timer_time = DEBUG_timer_time + (t1 - t0) + + return unpack(r) + end +end + +-- refill placed plant by crabman (26/08/2015) +local can_refill_plant = { + ["farming:blueberry_1"] = "farming:blueberries", + ["farming:carrot_1"] = "farming:carrot", + ["farming:coffee_1"] = "farming:coffee_beans", + ["farming:corn_1"] = "farming:corn", + ["farming:cotton_1"] = "farming:seed_cotton", + ["farming:cucumber_1"] = "farming:cucumber", + ["farming:melon_1"] = "farming:melon_slice", + ["farming:potato_1"] = "farming:potato", + ["farming:pumpkin_1"] = "farming:pumpkin_slice", + ["farming:raspberry_1"] = "farming:raspberries", + ["farming:rhubarb_1"] = "farming:rhubarb", + ["farming:tomato_1"] = "farming:tomato", + ["farming:wheat_1"] = "farming:seed_wheat", + ["farming:grapes_1"] = "farming:grapes", + ["farming:beans_1"] = "farming:beans", + ["farming:rhubarb_1"] = "farming:rhubarb", + ["farming:cocoa_1"] = "farming:cocoa_beans", + ["farming:barley_1"] = "farming:seed_barley", +} + +function farming.refill_plant(player, plantname, index) + + local inv = player:get_inventory() + local old_stack = inv:get_stack("main", index) + + if old_stack:get_name() ~= "" then + return + end + + for i, stack in ipairs(inv:get_list("main")) do + + if stack:get_name() == plantname and i ~= index then + + inv:set_stack("main", index, stack) + stack:clear() + inv:set_stack("main", i, stack) + --minetest.log("action", "farming: refilled stack("..plantname..") of " .. player:get_player_name() ) + return + end + end +end + +-- Place Seeds on Soil + +function farming.place_seed(itemstack, placer, pointed_thing, plantname) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + local above = minetest.get_node(pt.above) + + -- check if pointing at the top of the node + if pt.above.y ~= pt.under.y + 1 then + return + end + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] + or not minetest.registered_nodes[above.name] then + return + end + + -- can I replace above node, and am I pointing at soil + if not minetest.registered_nodes[above.name].buildable_to + or minetest.get_item_group(under.name, "soil") < 2 + -- avoid multiple seed placement bug + or minetest.get_item_group(above.name, "plant") ~= 0 then + return + end + + -- if not protected then add node and remove 1 item from the itemstack + if not minetest.is_protected(pt.above, placer:get_player_name()) then + + minetest.set_node(pt.above, {name = plantname, param2 = 1}) + + minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}) + + if not minetest.setting_getbool("creative_mode") then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 + and can_refill_plant[plantname] then + + minetest.after(0.10, + farming.refill_plant, + placer, + can_refill_plant[plantname], + placer:get_wield_index() + ) + end + end + + return itemstack + end +end + +-- Function to register plants (for compatibility) + +farming.register_plant = function(name, def) + + local mname = name:split(":")[1] + local pname = name:split(":")[2] + + -- Check def table + if not def.description then + def.description = S("Seed") + end + + if not def.inventory_image then + def.inventory_image = "unknown_item.png" + end + + if not def.steps then + return nil + end + + -- Register seed + minetest.register_node(":" .. mname .. ":seed_" .. pname, { + + description = def.description, + tiles = {def.inventory_image}, + inventory_image = def.inventory_image, + wield_image = def.inventory_image, + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, + pointed_thing, mname .. ":" .. pname .. "_1") + end, + }) + + -- Register harvest + minetest.register_craftitem(":" .. mname .. ":" .. pname, { + description = pname:gsub("^%l", string.upper), + inventory_image = mname .. "_" .. pname .. ".png", + }) + + -- Register growing steps + for i = 1, def.steps do + + local base_rarity = 1 + if def.steps ~= 1 then + base_rarity = 8 - (i - 1) * 7 / (def.steps - 1) + end + local drop = { + items = { + {items = {mname .. ":" .. pname}, rarity = base_rarity}, + {items = {mname .. ":" .. pname}, rarity = base_rarity * 2}, + {items = {mname .. ":seed_" .. pname}, rarity = base_rarity}, + {items = {mname .. ":seed_" .. pname}, rarity = base_rarity * 2}, + } + } + + local g = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1, growing = 1} + + -- Last step doesn't need growing=1 so Abm never has to check these + if i == def.steps then + g.growing = 0 + end + + local node_name = mname .. ":" .. pname .. "_" .. i + + minetest.register_node(node_name, { + drawtype = "plantlike", + waving = 1, + tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, + paramtype = "light", + walkable = false, + buildable_to = true, + drop = drop, + selection_box = farming.select, + groups = g, + sounds = default.node_sound_leaves_defaults(), + }) + +-- register_plant_node(node_name) + end + + -- Return info + local r = {seed = mname .. ":seed_" .. pname, harvest = mname .. ":" .. pname} + return r +end + +-- load crops + +dofile(farming.path.."/soil.lua") +dofile(farming.path.."/hoes.lua") +dofile(farming.path.."/grass.lua") +dofile(farming.path.."/wheat.lua") +dofile(farming.path.."/cotton.lua") +dofile(farming.path.."/carrot.lua") +dofile(farming.path.."/potato.lua") +dofile(farming.path.."/tomato.lua") +dofile(farming.path.."/cucumber.lua") +dofile(farming.path.."/corn.lua") +dofile(farming.path.."/coffee.lua") +dofile(farming.path.."/melon.lua") +dofile(farming.path.."/sugar.lua") +dofile(farming.path.."/pumpkin.lua") +dofile(farming.path.."/cocoa.lua") +dofile(farming.path.."/raspberry.lua") +dofile(farming.path.."/blueberry.lua") +dofile(farming.path.."/rhubarb.lua") +dofile(farming.path.."/beanpole.lua") +dofile(farming.path.."/grapes.lua") +dofile(farming.path.."/barley.lua") +dofile(farming.path.."/donut.lua") +dofile(farming.path.."/mapgen.lua") +dofile(farming.path.."/compatibility.lua") -- Farming Plus compatibility +dofile(farming.path.."/lucky_block.lua") diff --git a/farming/init.lua_orig b/farming/init.lua_orig new file mode 100644 index 0000000..aee9976 --- /dev/null +++ b/farming/init.lua_orig @@ -0,0 +1,192 @@ +--[[ + Minetest Farming Redo Mod 1.14 (11th May 2015) + by TenPlus1 +]] + +farming = {} +farming.mod = "redo" +farming.path = minetest.get_modpath("farming") +farming.hoe_on_use = default.hoe_on_use + +dofile(farming.path.."/soil.lua") +dofile(farming.path.."/hoes.lua") +dofile(farming.path.."/grass.lua") +dofile(farming.path.."/wheat.lua") +dofile(farming.path.."/cotton.lua") +dofile(farming.path.."/carrot.lua") +dofile(farming.path.."/potato.lua") +dofile(farming.path.."/tomato.lua") +dofile(farming.path.."/cucumber.lua") +dofile(farming.path.."/corn.lua") +dofile(farming.path.."/coffee.lua") +dofile(farming.path.."/melon.lua") +dofile(farming.path.."/sugar.lua") +dofile(farming.path.."/pumpkin.lua") +dofile(farming.path.."/cocoa.lua") +dofile(farming.path.."/raspberry.lua") +dofile(farming.path.."/blueberry.lua") +dofile(farming.path.."/rhubarb.lua") +dofile(farming.path.."/beanpole.lua") +dofile(farming.path.."/donut.lua") +dofile(farming.path.."/mapgen.lua") +dofile(farming.path.."/compatibility.lua") -- Farming Plus compatibility + +-- Place Seeds on Soil + +function farming.place_seed(itemstack, placer, pointed_thing, plantname) + local pt = pointed_thing + + -- check if pointing at a node + if not pt and pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + local above = minetest.get_node(pt.above) + + -- check if pointing at the top of the node + if pt.above.y ~= pt.under.y+1 then + return + end + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] + or not minetest.registered_nodes[above.name] then + return + end + + -- can I replace above node, and am I pointing at soil + if not minetest.registered_nodes[above.name].buildable_to + or minetest.get_item_group(under.name, "soil") < 2 + or minetest.get_item_group(above.name, "plant") ~= 0 then -- ADDED this line for multiple seed placement bug + return + end + + -- add the node and remove 1 item from the itemstack + if not minetest.is_protected(pt.above, placer:get_player_name()) then + minetest.add_node(pt.above, {name=plantname}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end +end + +-- Single ABM Handles Growing of All Plants + +minetest.register_abm({ + nodenames = {"group:growing"}, + neighbors = {"farming:soil_wet", "default:jungletree"}, + interval = 80, + chance = 2, + + action = function(pos, node) + + -- split plant name (e.g. farming:wheat_1) + local plant = node.name:split("_")[1].."_" + local numb = node.name:split("_")[2] + + -- fully grown ? + if not minetest.registered_nodes[plant..(numb + 1)] then return end + + -- cocoa pod on jungle tree ? + if plant ~= "farming:cocoa_" then + + -- growing on wet soil ? + if minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name ~= "farming:soil_wet" then return end + end + + -- enough light ? + if minetest.get_node_light(pos) < 13 then return end + + -- grow + minetest.set_node(pos, {name=plant..(numb + 1)}) + + end +}) + +-- Function to register plants (for compatibility) + +farming.register_plant = function(name, def) + local mname = name:split(":")[1] + local pname = name:split(":")[2] + + -- Check def table + if not def.description then + def.description = "Seed" + end + if not def.inventory_image then + def.inventory_image = "unknown_item.png" + end + if not def.steps then + return nil + end + + -- Register seed + minetest.register_node(":" .. mname .. ":seed_" .. pname, { + description = def.description, + tiles = {def.inventory_image}, + inventory_image = def.inventory_image, + wield_image = def.inventory_image, + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":"..pname.."_1") + end + }) + + -- Register harvest + minetest.register_craftitem(":" .. mname .. ":" .. pname, { + description = pname:gsub("^%l", string.upper), + inventory_image = mname .. "_" .. pname .. ".png", + }) + + -- Register growing steps + for i=1,def.steps do + local drop = { + items = { + {items = {mname .. ":" .. pname}, rarity = 9 - i}, + {items = {mname .. ":" .. pname}, rarity= 18 - i * 2}, + {items = {mname .. ":seed_" .. pname}, rarity = 9 - i}, + {items = {mname .. ":seed_" .. pname}, rarity = 18 - i * 2}, + } + } + + local g = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1, growing = 1} + -- Last step doesn't need growing=1 so Abm never has to check these + if i == def.steps then + g = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1} + end + + minetest.register_node(mname .. ":" .. pname .. "_" .. i, { + drawtype = "plantlike", + waving = 1, + tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, + paramtype = "light", + walkable = false, + buildable_to = true, + is_ground_content = true, + drop = drop, + selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, + groups = g, + sounds = default.node_sound_leaves_defaults(), + }) + end + + -- Return info + local r = {seed = mname .. ":seed_" .. pname, harvest = mname .. ":" .. pname} + return r +end + +--[[ Cotton (example, is already registered in cotton.lua) +farming.register_plant("farming:cotton", { + description = "Cotton seed", + inventory_image = "farming_cotton_seed.png", + steps = 8, +}) +--]] diff --git a/farming/license.txt b/farming/license.txt new file mode 100644 index 0000000..fec6f6a --- /dev/null +++ b/farming/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 TenPlus1 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/farming/locale/de.txt b/farming/locale/de.txt new file mode 100644 index 0000000..82cee4f --- /dev/null +++ b/farming/locale/de.txt @@ -0,0 +1,104 @@ +# German Translation for farming mod +# Deutsche Übersetzung der farming Mod +# last update: 2016/March/31 +# Author: Xanthin + +#init.lua +Seed = Saatgut + +#barley.lua +Barley Seed = Gerstenkörner +Barley = Gerste + +#beanpole.lua +Green Beans = Grüne Bohnen +Bean Pole (place on soil before planting beans) = Bohnenstange (vor dem Pflanzen der Bohnen auf den\nAckerboden stellen) + +#blueberry.lua +Blueberries = Blaubeeren +Blueberry Muffin = Blaubeermuffin + +#carrot.lua +Carrot = Möhre +Golden Carrot = Goldene Möhre + +#cocoa.lua +Cocoa Beans = Kakaobohne +Cookie = Keks +Bar of Dark Chocolate = Tafel Zartbitterschokolade + +#coffee.lua +Coffee Beans = Kaffeebohnen +Drinking Cup (empty) = Tasse (leer) +Cold Cup of Coffee = Kalte Tasse Kaffee +Hot Cup of Coffee = Heiße Tasse Kaffee + +#corn.lua +Corn = Mais +Corn on the Cob = Maiskolben +Bottle of Ethanol = Flasche Ethanol + +#cotton.lua +Cotton Seed = Baumwollsamen +Cotton = Baumwolle + +#cucumber.lua +Cucumber = Gurke + +#donut.lua +Donut = Donut +Chocolate Donut = Schokodonut +Apple Donut = Apfeldonut + +#grapes.lua +Grapes = Weintrauben +Trellis (place on soil before planting grapes) = Spalier (vor dem Pflanzen der Weintrauben auf den\nAckerboden stellen) + +#hoes.lua +Hoe = Hacke +Wooden Hoe = Holzhacke +Stone Hoe = Steinhacke +Steel Hoe = Stahlhacke +Bronze Hoe = Bronzehacke +Mese Hoe = Mesehacke +Diamond Hoe = Diamanthacke + +#melon.lua +Melon Slice = Melonenscheibe +Melon = Melone + +#potato.lua +Potato = Kartoffel +Baked Potato = Ofenkartoffel + +#pumpkin.lua +Pumpkin = Kürbis +Pumpkin Slice = Kürbisscheibe +Jack 'O Lantern = Kürbislaterne +Pumpkin Bread = Kürbisbrot +Pumpkin Dough = Kürbisteig + +#rasperry.lua +Raspberries = Himbeeren +Raspberry Smoothie = Himbeersmoothie + +#rhubarb.lua +Rhubarb = Rhabarber +Rhubarb Pie = Rhabarberkuchen + +#soil.lua +Soil = Ackerboden +Wet Soil = Bewässerter Ackerboden + +#sugar.lua +Sugar = Zucker + +#tomato.lua +Tomato = Tomate + +#wheat.lua +Wheat Seed = Weizenkörner +Wheat = Weizen +Straw = Stroh +Flour = Mehl +Bread = Brot
\ No newline at end of file diff --git a/farming/locale/template.txt b/farming/locale/template.txt new file mode 100644 index 0000000..6d067f5 --- /dev/null +++ b/farming/locale/template.txt @@ -0,0 +1,102 @@ +# Template for translations of farming mod +# last update: 2016/March/31 + +#init.lua +Seed = + +#barley.lua +Barley Seed = +Barley = + +#beanpole.lua +Green Beans = +Bean Pole (place on soil before planting beans) = + +#blueberry.lua +Blueberries = +Blueberry Muffin = + +#carrot.lua +Carrot = +Golden Carrot = + +#cocoa.lua +Cocoa Beans = +Cookie = +Bar of Dark Chocolate = + +#coffee.lua +Coffee Beans = +Drinking Cup (empty) = +Cold Cup of Coffee = +Hot Cup of Coffee = + +#corn.lua +Corn = +Corn on the Cob = +Bottle of Ethanol = + +#cotton.lua +Cotton Seed = +Cotton = + +#cucumber.lua +Cucumber = + +#donut.lua +Donut = +Chocolate Donut = +Apple Donut = + +#grapes.lua +Grapes = +Trellis (place on soil before planting grapes) = + +#hoes.lua +Hoe = +Wooden Hoe = +Stone Hoe = +Steel Hoe = +Bronze Hoe = +Mese Hoe = +Diamond Hoe = + +#melon.lua +Melon Slice = +Melon = + +#potato.lua +Potato = +Baked Potato = + +#pumpkin.lua +Pumpkin = +Pumpkin Slice = +Jack 'O Lantern = +Pumpkin Bread = +Pumpkin Dough = + +#rasperry.lua +Raspberries = +Raspberry Smoothie = + +#rhubarb.lua +Rhubarb = +Rhubarb Pie = + +#soil.lua +Soil = +Wet Soil = + +#sugar.lua +Sugar = + +#tomato.lua +Tomato = + +#wheat.lua +Wheat Seed = +Wheat = +Straw = +Flour = +Bread =
\ No newline at end of file diff --git a/farming/lucky_block.lua b/farming/lucky_block.lua new file mode 100644 index 0000000..df5c54f --- /dev/null +++ b/farming/lucky_block.lua @@ -0,0 +1,18 @@ + +-- add lucky blocks + +if minetest.get_modpath("lucky_block") then + + lucky_block:add_blocks({ + {"dro", {"farming:corn"}, 5}, + {"dro", {"farming:coffee_cup_hot"}, 1}, + {"dro", {"farming:bread"}, 5}, + {"nod", "farming:jackolantern", 0}, + {"tro", "farming:jackolantern_on"}, + {"nod", "default:river_water_source", 1}, + {"dro", {"farming:trellis", "farming:grapes"}, 5}, + {"dro", {"farming:bottle_ethanol"}, 1}, + {"nod", "farming:melon", 0}, + {"dro", {"farming:donut", "farming:donut_chocolate", "farming:donut_apple"}, 5}, + }) +end diff --git a/farming/mapgen.lua b/farming/mapgen.lua new file mode 100644 index 0000000..36d4792 --- /dev/null +++ b/farming/mapgen.lua @@ -0,0 +1,65 @@ +-- decoration function +local function register_plant(name, min, max, spawnby, num) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.006, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_min = min, + y_max = max, + decoration = "farming:" .. name, + spawn_by = spawnby, + num_spawn_by = num, + }) +end + +function farming.register_mgv6_decorations() + register_plant("potato_3", 15, 40, "", -1) + register_plant("tomato_7", 5, 20, "", -1) + register_plant("carrot_8", 1, 30, "group:water", 1) + register_plant("cucumber_4", 1, 20, "group:water", 1) + register_plant("corn_7", 12, 22, "", -1) + register_plant("corn_8", 10, 20, "", -1) + register_plant("coffee_5", 20, 45, "", -1) + register_plant("melon_8", 1, 20, "group:water", 1) + register_plant("pumpkin_8", 1, 20, "group:water", 1) + register_plant("raspberry_4", 3, 10, "", -1) + register_plant("rhubarb_3", 3, 15, "", -1) + register_plant("blueberry_4", 3, 10, "", -1) + register_plant("beanbush", 18, 35, "", -1) + register_plant("grapebush", 25, 45, "", -1) +end + +-- v7 maps have a beach so plants growing near water is limited to 6 high +function farming.register_mgv7_decorations() + register_plant("potato_3", 15, 40, "", -1) + register_plant("tomato_7", 5, 20, "", -1) + register_plant("carrot_8", 1, 6, "", -1) + register_plant("cucumber_4", 1, 6, "", -1) + register_plant("corn_7", 12, 22, "", -1) + register_plant("corn_8", 10, 20, "", -1) + register_plant("coffee_5", 20, 45, "", -1) + register_plant("melon_8", 1, 6, "", -1) + register_plant("pumpkin_8", 1, 6, "", -1) + register_plant("raspberry_4", 3, 10, "", -1) + register_plant("rhubarb_3", 3, 15, "", -1) + register_plant("blueberry_4", 3, 10, "", -1) + register_plant("beanbush", 18, 35, "", -1) + register_plant("grapebush", 25, 45, "", -1) +end + +-- detect mapgen +local mg_name = minetest.get_mapgen_params().mgname + +if mg_name == "v6" then + farming.register_mgv6_decorations() +else + farming.register_mgv7_decorations() +end diff --git a/farming/melon.lua b/farming/melon.lua new file mode 100644 index 0000000..e2f6564 --- /dev/null +++ b/farming/melon.lua @@ -0,0 +1,82 @@ + +local S = farming.intllib + +-- melon +minetest.register_craftitem("farming:melon_slice", { + description = S("Melon Slice"), + inventory_image = "farming_melon_slice.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:melon_1") + end, + on_use = minetest.item_eat(2), +}) + +minetest.register_craft({ + output = "farming:melon_8", + recipe = { + {"farming:melon_slice", "farming:melon_slice", "farming:melon_slice"}, + {"farming:melon_slice", "farming:melon_slice", "farming:melon_slice"}, + {"farming:melon_slice", "farming:melon_slice", "farming:melon_slice"}, + } +}) + +minetest.register_craft({ + output = "farming:melon_slice 9", + recipe = { + {"", "farming:melon_8", ""}, + } +}) + +-- melon definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_melon_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:melon_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_melon_2.png"} +minetest.register_node("farming:melon_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_melon_3.png"} +minetest.register_node("farming:melon_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_melon_4.png"} +minetest.register_node("farming:melon_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_melon_5.png"} +minetest.register_node("farming:melon_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_melon_6.png"} +minetest.register_node("farming:melon_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_melon_7.png"} +minetest.register_node("farming:melon_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.drawtype = "nodebox" +crop_def.description = S("Melon") +crop_def.tiles = {"farming_melon_top.png", "farming_melon_top.png", "farming_melon_side.png"} +crop_def.selection_box = {-.5, -.5, -.5, .5, .5, .5} +crop_def.walkable = true +crop_def.groups = {snappy = 1, oddly_breakable_by_hand = 1, flammable = 2, plant = 1} +crop_def.drop = "farming:melon_slice 9" +minetest.register_node("farming:melon_8", table.copy(crop_def)) diff --git a/farming/mod.conf b/farming/mod.conf new file mode 100644 index 0000000..80ab8b0 --- /dev/null +++ b/farming/mod.conf @@ -0,0 +1 @@ +name = farming
\ No newline at end of file diff --git a/farming/potato.lua b/farming/potato.lua new file mode 100644 index 0000000..be36905 --- /dev/null +++ b/farming/potato.lua @@ -0,0 +1,77 @@ + +--[[ + Original textures from DocFarming mod + https://forum.minetest.net/viewtopic.php?id=3948 +]] + +local S = farming.intllib + +-- potato +minetest.register_craftitem("farming:potato", { + description = S("Potato"), + inventory_image = "farming_potato.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:potato_1") + end, + on_use = minetest.item_eat(1), +}) + +-- baked potato +minetest.register_craftitem("farming:baked_potato", { + description = S("Baked Potato"), + inventory_image = "farming_baked_potato.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:baked_potato", + recipe = "farming:potato" +}) + +-- potato definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_potato_1.png"}, + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:potato_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_potato_2.png"} +minetest.register_node("farming:potato_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_potato_3.png"} +crop_def.drop = { + items = { + {items = {'farming:potato'}, rarity = 1}, + {items = {'farming:potato'}, rarity = 3}, + } +} +minetest.register_node("farming:potato_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_potato_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:potato 2'}, rarity = 1}, + {items = {'farming:potato 3'}, rarity = 2}, + } +} +minetest.register_node("farming:potato_4", table.copy(crop_def)) diff --git a/farming/pumpkin.lua b/farming/pumpkin.lua new file mode 100644 index 0000000..4be0bf4 --- /dev/null +++ b/farming/pumpkin.lua @@ -0,0 +1,184 @@ + +--[[ + Big thanks to PainterlyPack.net for allowing me to use these textures +]] + +local S = farming.intllib + +-- pumpkin +minetest.register_node("farming:pumpkin", { + description = S("Pumpkin"), + tiles = { + "farming_pumpkin_top.png", + "farming_pumpkin_top.png", + "farming_pumpkin_side.png" + }, + groups = { + choppy = 1, oddly_breakable_by_hand = 1, + flammable = 2, plant = 1 + }, + drop = { + items = { + {items = {'farming:pumpkin_slice 9'}, rarity = 1}, + } + }, + sounds = default.node_sound_wood_defaults(), +}) + +-- pumpkin slice +minetest.register_craftitem("farming:pumpkin_slice", { + description = S("Pumpkin Slice"), + inventory_image = "farming_pumpkin_slice.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:pumpkin_1") + end, + on_use = minetest.item_eat(2), +}) + +minetest.register_craft({ + output = "farming:pumpkin", + recipe = { + {"farming:pumpkin_slice", "farming:pumpkin_slice", "farming:pumpkin_slice"}, + {"farming:pumpkin_slice", "farming:pumpkin_slice", "farming:pumpkin_slice"}, + {"farming:pumpkin_slice", "farming:pumpkin_slice", "farming:pumpkin_slice"}, + } +}) + +minetest.register_craft({ + output = "farming:pumpkin_slice 9", + recipe = { + {"", "farming:pumpkin", ""}, + } +}) + +-- jack 'o lantern +minetest.register_node("farming:jackolantern", { + description = S("Jack 'O Lantern"), + tiles = { + "farming_pumpkin_top.png", + "farming_pumpkin_top.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_face_off.png" + }, + paramtype2 = "facedir", + groups = {choppy = 1, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos, node, puncher) + node.name = "farming:jackolantern_on" + minetest.swap_node(pos, node) + end, +}) + +minetest.register_node("farming:jackolantern_on", { + tiles = { + "farming_pumpkin_top.png", + "farming_pumpkin_top.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_face_on.png" + }, + light_source = default.LIGHT_MAX - 1, + paramtype2 = "facedir", + groups = { + choppy = 1, oddly_breakable_by_hand = 1, flammable = 2, + not_in_creative_inventory = 1 + }, + sounds = default.node_sound_wood_defaults(), + drop = "farming:jackolantern", + on_punch = function(pos, node, puncher) + node.name = "farming:jackolantern" + minetest.swap_node(pos, node) + end, +}) + +minetest.register_craft({ + output = "farming:jackolantern", + recipe = { + {"", "", ""}, + {"", "default:torch", ""}, + {"", "farming:pumpkin", ""}, + } +}) + +-- pumpkin bread +minetest.register_craftitem("farming:pumpkin_bread", { + description = S("Pumpkin Bread"), + inventory_image = "farming_pumpkin_bread.png", + on_use = minetest.item_eat(8) +}) + +minetest.register_craftitem("farming:pumpkin_dough", { + description = S("Pumpkin Dough"), + inventory_image = "farming_pumpkin_dough.png", +}) + +minetest.register_craft({ + output = "farming:pumpkin_dough", + type = "shapeless", + recipe = {"farming:flour", "farming:pumpkin_slice", "farming:pumpkin_slice"} +}) + +minetest.register_craft({ + type = "cooking", + output = "farming:pumpkin_bread", + recipe = "farming:pumpkin_dough", + cooktime = 10 +}) + +-- pumpkin definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_pumpkin_1.png"}, + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:pumpkin_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_pumpkin_2.png"} +minetest.register_node("farming:pumpkin_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_pumpkin_3.png"} +minetest.register_node("farming:pumpkin_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_pumpkin_4.png"} +minetest.register_node("farming:pumpkin_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_pumpkin_5.png"} +minetest.register_node("farming:pumpkin_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_pumpkin_6.png"} +minetest.register_node("farming:pumpkin_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_pumpkin_7.png"} +minetest.register_node("farming:pumpkin_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_pumpkin_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:pumpkin_slice 9'}, rarity = 1}, + } +} +minetest.register_node("farming:pumpkin_8", table.copy(crop_def)) diff --git a/farming/raspberry.lua b/farming/raspberry.lua new file mode 100644 index 0000000..384eb59 --- /dev/null +++ b/farming/raspberry.lua @@ -0,0 +1,68 @@ + +local S = farming.intllib + +-- raspberries +minetest.register_craftitem("farming:raspberries", { + description = S("Raspberries"), + inventory_image = "farming_raspberries.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:raspberry_1") + end, + on_use = minetest.item_eat(1), +}) + +-- raspberry smoothie +minetest.register_craftitem("farming:smoothie_raspberry", { + description = S("Raspberry Smoothie"), + inventory_image = "farming_raspberry_smoothie.png", + on_use = minetest.item_eat(2, "vessels:drinking_glass"), +}) + +minetest.register_craft({ + output = "farming:smoothie_raspberry", + recipe = { + {"default:snow"}, + {"farming:raspberries"}, + {"vessels:drinking_glass"}, + } +}) + +-- raspberries definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_raspberry_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:raspberry_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_raspberry_2.png"} +minetest.register_node("farming:raspberry_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_raspberry_3.png"} +minetest.register_node("farming:raspberry_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_raspberry_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:raspberries 2'}, rarity = 1}, + {items = {'farming:raspberries'}, rarity = 2}, + {items = {'farming:raspberries'}, rarity = 3}, + } +} +minetest.register_node("farming:raspberry_4", table.copy(crop_def)) diff --git a/farming/rhubarb.lua b/farming/rhubarb.lua new file mode 100644 index 0000000..30e9fba --- /dev/null +++ b/farming/rhubarb.lua @@ -0,0 +1,64 @@ + +local S = farming.intllib + +-- rhubarb +minetest.register_craftitem("farming:rhubarb", { + description = S("Rhubarb"), + inventory_image = "farming_rhubarb.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:rhubarb_1") + end, + on_use = minetest.item_eat(1), +}) + +-- rhubarb pie +minetest.register_craftitem("farming:rhubarb_pie", { + description = S("Rhubarb Pie"), + inventory_image = "farming_rhubarb_pie.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:rhubarb_pie", + recipe = { + {"", "farming:sugar", ""}, + {"farming:rhubarb", "farming:rhubarb", "farming:rhubarb"}, + {"farming:wheat", "farming:wheat", "farming:wheat"}, + } +}) + +-- rhubarb definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_rhubarb_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:rhubarb_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_rhubarb_2.png"} +minetest.register_node("farming:rhubarb_2", table.copy(crop_def)) + +-- stage 3 (final) +crop_def.tiles = {"farming_rhubarb_3.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:rhubarb 2'}, rarity = 1}, + {items = {'farming:rhubarb'}, rarity = 2}, + {items = {'farming:rhubarb'}, rarity = 3}, + } +} +minetest.register_node("farming:rhubarb_3", table.copy(crop_def)) diff --git a/farming/screenshot.png b/farming/screenshot.png Binary files differnew file mode 100644 index 0000000..aba30f0 --- /dev/null +++ b/farming/screenshot.png diff --git a/farming/soil.lua b/farming/soil.lua new file mode 100644 index 0000000..2b8c6b2 --- /dev/null +++ b/farming/soil.lua @@ -0,0 +1,67 @@ + +local S = farming.intllib + +-- normal soil +minetest.register_node("farming:soil", { + description = S("Soil"), + tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, + drop = "default:dirt", + groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 2}, + sounds = default.node_sound_dirt_defaults(), +}) + +-- wet soil +minetest.register_node("farming:soil_wet", { + description = S("Wet Soil"), + tiles = {"default_dirt.png^farming_soil_wet.png", "default_dirt.png^farming_soil_wet_side.png"}, + drop = "default:dirt", + groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 3}, + sounds = default.node_sound_dirt_defaults(), +}) + +-- sand is not soil, change existing sand-soil to use normal soil +minetest.register_alias("farming:desert_sand_soil", "farming:soil") +minetest.register_alias("farming:desert_sand_soil_wet", "farming:soil_wet") + +-- if water near soil then change to wet soil +minetest.register_abm({ + nodenames = {"farming:soil", "farming:soil_wet"}, + interval = 15, + chance = 4, + catch_up = false, + + action = function(pos, node) + + pos.y = pos.y + 1 + local nn = minetest.get_node_or_nil(pos) + pos.y = pos.y - 1 + + if nn then nn = nn.name else return end + + -- what's on top of soil, if solid/not plant change soil to dirt + if minetest.registered_nodes[nn] + and minetest.registered_nodes[nn].walkable + and minetest.get_item_group(nn, "plant") == 0 then + minetest.set_node(pos, {name = "default:dirt"}) + return + end + + -- if map around soil not loaded then skip until loaded + if minetest.find_node_near(pos, 3, {"ignore"}) then + return + end + + -- check if there is water nearby and change soil accordingly + if minetest.find_node_near(pos, 3, {"group:water"}) then + if node.name == "farming:soil" then + minetest.set_node(pos, {name = "farming:soil_wet"}) + end + + elseif node.name == "farming:soil_wet" then + minetest.set_node(pos, {name = "farming:soil"}) + + elseif node.name == "farming:soil" then + minetest.set_node(pos, {name = "default:dirt"}) + end + end, +})
\ No newline at end of file diff --git a/farming/statistics.lua b/farming/statistics.lua new file mode 100644 index 0000000..c8defa2 --- /dev/null +++ b/farming/statistics.lua @@ -0,0 +1,174 @@ +local statistics = {} +local ROOT_2 = math.sqrt(2.0) + +-- Approximations for erf(x) and erfInv(x) from +-- https://en.wikipedia.org/wiki/Error_function + +local erf +local erf_inv + +local A = 8 * (math.pi - 3.0)/(3.0 * math.pi * (4.0 - math.pi)) +local B = 4.0 / math.pi +local C = 2.0/(math.pi * A) +local D = 1.0 / A + +erf = function(x) + + if x == 0 then return 0; end + + local xSq = x * x + local aXSq = A * xSq + local v = math.sqrt(1.0 - math.exp(-xSq * (B + aXSq) / (1.0 + aXSq))) + + return (x > 0 and v) or -v +end + +erf_inv = function(x) + + if x == 0 then return 0; end + + if x <= -1 or x >= 1 then return nil; end + + local y = math.log(1 - x * x) + local u = C + 0.5 * y + local v = math.sqrt(math.sqrt(u * u - D * y) - u) + + return (x > 0 and v) or -v +end + +local function std_normal(u) + return ROOT_2 * erf_inv(2.0 * u - 1.0) +end + +local poisson +local cdf_table = {} + +local function generate_cdf(lambda_index, lambda) + + local max = math.ceil(4 * lambda) + local pdf = math.exp(-lambda) + local cdf = pdf + local t = { [0] = pdf } + + for i = 1, max - 1 do + pdf = pdf * lambda / i + cdf = cdf + pdf + t[i] = cdf + end + + return t +end + +for li = 1, 100 do + cdf_table[li] = generate_cdf(li, 0.25 * li) +end + +poisson = function(lambda, max) + + if max < 2 then + return (math.random() < math.exp(-lambda) and 0) or 1 + elseif lambda >= 2 * max then + return max + end + + local u = math.random() + local lambda_index = math.floor(4 * lambda + 0.5) + local cdfs = cdf_table[lambda_index] + + if cdfs then + + lambda = 0.25 * lambda_index + + if u < cdfs[0] then return 0; end + if max > #cdfs then max = #cdfs + 1 else max = math.floor(max); end + if u >= cdfs[max - 1] then return max; end + + if max > 4 then -- Binary search + + local s = 0 + + while s + 1 < max do + + local m = math.floor(0.5 * (s + max)) + + if u < cdfs[m] then max = m; else s = m; end + end + else + for i = 1, max - 1 do + if u < cdfs[i] then return i; end + end + end + + return max + else + local x = lambda + math.sqrt(lambda) * std_normal(u) + + return (x < 0.5 and 0) or (x >= max - 0.5 and max) or math.floor(x + 0.5) + end +end + +-- Error function. +statistics.erf = erf + +-- Inverse error function. +statistics.erf_inv = erf_inv + +--- Standard normal distribution function (mean 0, standard deviation 1). + -- + -- @return + -- Any real number (actually between -3.0 and 3.0). + +statistics.std_normal = function() + + local u = math.random() + + if u < 0.001 then + return -3.0 + elseif u > 0.999 then + return 3.0 + end + + return std_normal(u) +end + +--- Standard normal distribution function (mean 0, standard deviation 1). + -- + -- @param mu + -- The distribution mean. + -- @param sigma + -- The distribution standard deviation. + -- @return + -- Any real number (actually between -3*sigma and 3*sigma). + +statistics.normal = function(mu, sigma) + + local u = math.random() + + if u < 0.001 then + return mu - 3.0 * sigma + elseif u > 0.999 then + return mu + 3.0 * sigma + end + + return mu + sigma * std_normal(u) +end + +--- Poisson distribution function. + -- + -- @param lambda + -- The distribution mean and variance. + -- @param max + -- The distribution maximum. + -- @return + -- An integer between 0 and max (both inclusive). + +statistics.poisson = function(lambda, max) + + lambda, max = tonumber(lambda), tonumber(max) + + if not lambda or not max or lambda <= 0 or max < 1 then return 0; end + + return poisson(lambda, max) +end + +return statistics diff --git a/farming/sugar.lua b/farming/sugar.lua new file mode 100644 index 0000000..97efc67 --- /dev/null +++ b/farming/sugar.lua @@ -0,0 +1,16 @@ + +local S = farming.intllib + +--= Sugar + +minetest.register_craftitem("farming:sugar", { + description = S("Sugar"), + inventory_image = "farming_sugar.png", +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 3, + output = "farming:sugar 2", + recipe = "default:papyrus", +})
\ No newline at end of file diff --git a/farming/textures/banana_single.png b/farming/textures/banana_single.png Binary files differnew file mode 100644 index 0000000..b15ed2f --- /dev/null +++ b/farming/textures/banana_single.png diff --git a/farming/textures/default_junglegrass.png b/farming/textures/default_junglegrass.png Binary files differnew file mode 100644 index 0000000..5d8cdbc --- /dev/null +++ b/farming/textures/default_junglegrass.png diff --git a/farming/textures/farming_baked_potato.png b/farming/textures/farming_baked_potato.png Binary files differnew file mode 100644 index 0000000..425c4ae --- /dev/null +++ b/farming/textures/farming_baked_potato.png diff --git a/farming/textures/farming_barley.png b/farming/textures/farming_barley.png Binary files differnew file mode 100644 index 0000000..ca929e0 --- /dev/null +++ b/farming/textures/farming_barley.png diff --git a/farming/textures/farming_barley_1.png b/farming/textures/farming_barley_1.png Binary files differnew file mode 100644 index 0000000..4a458b1 --- /dev/null +++ b/farming/textures/farming_barley_1.png diff --git a/farming/textures/farming_barley_2.png b/farming/textures/farming_barley_2.png Binary files differnew file mode 100644 index 0000000..96610c2 --- /dev/null +++ b/farming/textures/farming_barley_2.png diff --git a/farming/textures/farming_barley_3.png b/farming/textures/farming_barley_3.png Binary files differnew file mode 100644 index 0000000..ef14b5b --- /dev/null +++ b/farming/textures/farming_barley_3.png diff --git a/farming/textures/farming_barley_4.png b/farming/textures/farming_barley_4.png Binary files differnew file mode 100644 index 0000000..f7c9054 --- /dev/null +++ b/farming/textures/farming_barley_4.png diff --git a/farming/textures/farming_barley_5.png b/farming/textures/farming_barley_5.png Binary files differnew file mode 100644 index 0000000..68c0d68 --- /dev/null +++ b/farming/textures/farming_barley_5.png diff --git a/farming/textures/farming_barley_6.png b/farming/textures/farming_barley_6.png Binary files differnew file mode 100644 index 0000000..496a218 --- /dev/null +++ b/farming/textures/farming_barley_6.png diff --git a/farming/textures/farming_barley_7.png b/farming/textures/farming_barley_7.png Binary files differnew file mode 100644 index 0000000..1c636af --- /dev/null +++ b/farming/textures/farming_barley_7.png diff --git a/farming/textures/farming_barley_seed.png b/farming/textures/farming_barley_seed.png Binary files differnew file mode 100644 index 0000000..2f00a20 --- /dev/null +++ b/farming/textures/farming_barley_seed.png diff --git a/farming/textures/farming_beanbush.png b/farming/textures/farming_beanbush.png Binary files differnew file mode 100644 index 0000000..637e716 --- /dev/null +++ b/farming/textures/farming_beanbush.png diff --git a/farming/textures/farming_beanpole.png b/farming/textures/farming_beanpole.png Binary files differnew file mode 100644 index 0000000..ed07572 --- /dev/null +++ b/farming/textures/farming_beanpole.png diff --git a/farming/textures/farming_beanpole_1.png b/farming/textures/farming_beanpole_1.png Binary files differnew file mode 100644 index 0000000..ef2bd5a --- /dev/null +++ b/farming/textures/farming_beanpole_1.png diff --git a/farming/textures/farming_beanpole_2.png b/farming/textures/farming_beanpole_2.png Binary files differnew file mode 100644 index 0000000..34143e4 --- /dev/null +++ b/farming/textures/farming_beanpole_2.png diff --git a/farming/textures/farming_beanpole_3.png b/farming/textures/farming_beanpole_3.png Binary files differnew file mode 100644 index 0000000..d693f17 --- /dev/null +++ b/farming/textures/farming_beanpole_3.png diff --git a/farming/textures/farming_beanpole_4.png b/farming/textures/farming_beanpole_4.png Binary files differnew file mode 100644 index 0000000..c779b25 --- /dev/null +++ b/farming/textures/farming_beanpole_4.png diff --git a/farming/textures/farming_beanpole_5.png b/farming/textures/farming_beanpole_5.png Binary files differnew file mode 100644 index 0000000..910f8a0 --- /dev/null +++ b/farming/textures/farming_beanpole_5.png diff --git a/farming/textures/farming_beans.png b/farming/textures/farming_beans.png Binary files differnew file mode 100644 index 0000000..ad5cf85 --- /dev/null +++ b/farming/textures/farming_beans.png diff --git a/farming/textures/farming_blueberries.png b/farming/textures/farming_blueberries.png Binary files differnew file mode 100644 index 0000000..b0c4931 --- /dev/null +++ b/farming/textures/farming_blueberries.png diff --git a/farming/textures/farming_blueberry_1.png b/farming/textures/farming_blueberry_1.png Binary files differnew file mode 100644 index 0000000..83832c8 --- /dev/null +++ b/farming/textures/farming_blueberry_1.png diff --git a/farming/textures/farming_blueberry_2.png b/farming/textures/farming_blueberry_2.png Binary files differnew file mode 100644 index 0000000..308a0ca --- /dev/null +++ b/farming/textures/farming_blueberry_2.png diff --git a/farming/textures/farming_blueberry_3.png b/farming/textures/farming_blueberry_3.png Binary files differnew file mode 100644 index 0000000..43d2ab1 --- /dev/null +++ b/farming/textures/farming_blueberry_3.png diff --git a/farming/textures/farming_blueberry_4.png b/farming/textures/farming_blueberry_4.png Binary files differnew file mode 100644 index 0000000..75fb69a --- /dev/null +++ b/farming/textures/farming_blueberry_4.png diff --git a/farming/textures/farming_blueberry_muffin.png b/farming/textures/farming_blueberry_muffin.png Binary files differnew file mode 100644 index 0000000..b1253d7 --- /dev/null +++ b/farming/textures/farming_blueberry_muffin.png diff --git a/farming/textures/farming_bottle_ethanol.png b/farming/textures/farming_bottle_ethanol.png Binary files differnew file mode 100644 index 0000000..84e6162 --- /dev/null +++ b/farming/textures/farming_bottle_ethanol.png diff --git a/farming/textures/farming_bread.png b/farming/textures/farming_bread.png Binary files differnew file mode 100644 index 0000000..bd00e3e --- /dev/null +++ b/farming/textures/farming_bread.png diff --git a/farming/textures/farming_carrot.png b/farming/textures/farming_carrot.png Binary files differnew file mode 100644 index 0000000..73f2fd4 --- /dev/null +++ b/farming/textures/farming_carrot.png diff --git a/farming/textures/farming_carrot_1.png b/farming/textures/farming_carrot_1.png Binary files differnew file mode 100644 index 0000000..bbeae7e --- /dev/null +++ b/farming/textures/farming_carrot_1.png diff --git a/farming/textures/farming_carrot_2.png b/farming/textures/farming_carrot_2.png Binary files differnew file mode 100644 index 0000000..b24ecc0 --- /dev/null +++ b/farming/textures/farming_carrot_2.png diff --git a/farming/textures/farming_carrot_3.png b/farming/textures/farming_carrot_3.png Binary files differnew file mode 100644 index 0000000..8400505 --- /dev/null +++ b/farming/textures/farming_carrot_3.png diff --git a/farming/textures/farming_carrot_4.png b/farming/textures/farming_carrot_4.png Binary files differnew file mode 100644 index 0000000..32ee262 --- /dev/null +++ b/farming/textures/farming_carrot_4.png diff --git a/farming/textures/farming_carrot_5.png b/farming/textures/farming_carrot_5.png Binary files differnew file mode 100644 index 0000000..0bcd9c1 --- /dev/null +++ b/farming/textures/farming_carrot_5.png diff --git a/farming/textures/farming_carrot_6.png b/farming/textures/farming_carrot_6.png Binary files differnew file mode 100644 index 0000000..a17c6b2 --- /dev/null +++ b/farming/textures/farming_carrot_6.png diff --git a/farming/textures/farming_carrot_7.png b/farming/textures/farming_carrot_7.png Binary files differnew file mode 100644 index 0000000..d26eee7 --- /dev/null +++ b/farming/textures/farming_carrot_7.png diff --git a/farming/textures/farming_carrot_8.png b/farming/textures/farming_carrot_8.png Binary files differnew file mode 100644 index 0000000..00b6d92 --- /dev/null +++ b/farming/textures/farming_carrot_8.png diff --git a/farming/textures/farming_carrot_gold.png b/farming/textures/farming_carrot_gold.png Binary files differnew file mode 100644 index 0000000..b817101 --- /dev/null +++ b/farming/textures/farming_carrot_gold.png diff --git a/farming/textures/farming_chocolate_dark.png b/farming/textures/farming_chocolate_dark.png Binary files differnew file mode 100644 index 0000000..03243b2 --- /dev/null +++ b/farming/textures/farming_chocolate_dark.png diff --git a/farming/textures/farming_cocoa_1.png b/farming/textures/farming_cocoa_1.png Binary files differnew file mode 100644 index 0000000..f887a1f --- /dev/null +++ b/farming/textures/farming_cocoa_1.png diff --git a/farming/textures/farming_cocoa_2.png b/farming/textures/farming_cocoa_2.png Binary files differnew file mode 100644 index 0000000..f0d3935 --- /dev/null +++ b/farming/textures/farming_cocoa_2.png diff --git a/farming/textures/farming_cocoa_3.png b/farming/textures/farming_cocoa_3.png Binary files differnew file mode 100644 index 0000000..8eaf67e --- /dev/null +++ b/farming/textures/farming_cocoa_3.png diff --git a/farming/textures/farming_cocoa_beans.png b/farming/textures/farming_cocoa_beans.png Binary files differnew file mode 100644 index 0000000..4022f8e --- /dev/null +++ b/farming/textures/farming_cocoa_beans.png diff --git a/farming/textures/farming_coffee_1.png b/farming/textures/farming_coffee_1.png Binary files differnew file mode 100644 index 0000000..97c207a --- /dev/null +++ b/farming/textures/farming_coffee_1.png diff --git a/farming/textures/farming_coffee_2.png b/farming/textures/farming_coffee_2.png Binary files differnew file mode 100644 index 0000000..a659f85 --- /dev/null +++ b/farming/textures/farming_coffee_2.png diff --git a/farming/textures/farming_coffee_3.png b/farming/textures/farming_coffee_3.png Binary files differnew file mode 100644 index 0000000..93088c8 --- /dev/null +++ b/farming/textures/farming_coffee_3.png diff --git a/farming/textures/farming_coffee_4.png b/farming/textures/farming_coffee_4.png Binary files differnew file mode 100644 index 0000000..37a609f --- /dev/null +++ b/farming/textures/farming_coffee_4.png diff --git a/farming/textures/farming_coffee_5.png b/farming/textures/farming_coffee_5.png Binary files differnew file mode 100644 index 0000000..e624fbe --- /dev/null +++ b/farming/textures/farming_coffee_5.png diff --git a/farming/textures/farming_coffee_beans.png b/farming/textures/farming_coffee_beans.png Binary files differnew file mode 100644 index 0000000..0786f4e --- /dev/null +++ b/farming/textures/farming_coffee_beans.png diff --git a/farming/textures/farming_coffee_cup.png b/farming/textures/farming_coffee_cup.png Binary files differnew file mode 100644 index 0000000..d3820bc --- /dev/null +++ b/farming/textures/farming_coffee_cup.png diff --git a/farming/textures/farming_coffee_cup_hot.png b/farming/textures/farming_coffee_cup_hot.png Binary files differnew file mode 100644 index 0000000..f4fae90 --- /dev/null +++ b/farming/textures/farming_coffee_cup_hot.png diff --git a/farming/textures/farming_cookie.png b/farming/textures/farming_cookie.png Binary files differnew file mode 100644 index 0000000..e80be35 --- /dev/null +++ b/farming/textures/farming_cookie.png diff --git a/farming/textures/farming_corn.png b/farming/textures/farming_corn.png Binary files differnew file mode 100644 index 0000000..2a2894a --- /dev/null +++ b/farming/textures/farming_corn.png diff --git a/farming/textures/farming_corn_1.png b/farming/textures/farming_corn_1.png Binary files differnew file mode 100644 index 0000000..60e8b99 --- /dev/null +++ b/farming/textures/farming_corn_1.png diff --git a/farming/textures/farming_corn_2.png b/farming/textures/farming_corn_2.png Binary files differnew file mode 100644 index 0000000..6ba6cc9 --- /dev/null +++ b/farming/textures/farming_corn_2.png diff --git a/farming/textures/farming_corn_3.png b/farming/textures/farming_corn_3.png Binary files differnew file mode 100644 index 0000000..c5fa80b --- /dev/null +++ b/farming/textures/farming_corn_3.png diff --git a/farming/textures/farming_corn_4.png b/farming/textures/farming_corn_4.png Binary files differnew file mode 100644 index 0000000..a43632d --- /dev/null +++ b/farming/textures/farming_corn_4.png diff --git a/farming/textures/farming_corn_5.png b/farming/textures/farming_corn_5.png Binary files differnew file mode 100644 index 0000000..7b6fb02 --- /dev/null +++ b/farming/textures/farming_corn_5.png diff --git a/farming/textures/farming_corn_6.png b/farming/textures/farming_corn_6.png Binary files differnew file mode 100644 index 0000000..313697b --- /dev/null +++ b/farming/textures/farming_corn_6.png diff --git a/farming/textures/farming_corn_7.png b/farming/textures/farming_corn_7.png Binary files differnew file mode 100644 index 0000000..6a937e7 --- /dev/null +++ b/farming/textures/farming_corn_7.png diff --git a/farming/textures/farming_corn_8.png b/farming/textures/farming_corn_8.png Binary files differnew file mode 100644 index 0000000..77e442b --- /dev/null +++ b/farming/textures/farming_corn_8.png diff --git a/farming/textures/farming_corn_cob.png b/farming/textures/farming_corn_cob.png Binary files differnew file mode 100644 index 0000000..a2fd9da --- /dev/null +++ b/farming/textures/farming_corn_cob.png diff --git a/farming/textures/farming_cotton.png b/farming/textures/farming_cotton.png Binary files differnew file mode 100644 index 0000000..e2bbfd7 --- /dev/null +++ b/farming/textures/farming_cotton.png diff --git a/farming/textures/farming_cotton_1.png b/farming/textures/farming_cotton_1.png Binary files differnew file mode 100644 index 0000000..5fc2180 --- /dev/null +++ b/farming/textures/farming_cotton_1.png diff --git a/farming/textures/farming_cotton_2.png b/farming/textures/farming_cotton_2.png Binary files differnew file mode 100644 index 0000000..db4f4a3 --- /dev/null +++ b/farming/textures/farming_cotton_2.png diff --git a/farming/textures/farming_cotton_3.png b/farming/textures/farming_cotton_3.png Binary files differnew file mode 100644 index 0000000..df3d7a7 --- /dev/null +++ b/farming/textures/farming_cotton_3.png diff --git a/farming/textures/farming_cotton_4.png b/farming/textures/farming_cotton_4.png Binary files differnew file mode 100644 index 0000000..f314b07 --- /dev/null +++ b/farming/textures/farming_cotton_4.png diff --git a/farming/textures/farming_cotton_5.png b/farming/textures/farming_cotton_5.png Binary files differnew file mode 100644 index 0000000..3e89085 --- /dev/null +++ b/farming/textures/farming_cotton_5.png diff --git a/farming/textures/farming_cotton_6.png b/farming/textures/farming_cotton_6.png Binary files differnew file mode 100644 index 0000000..f4bd4fb --- /dev/null +++ b/farming/textures/farming_cotton_6.png diff --git a/farming/textures/farming_cotton_7.png b/farming/textures/farming_cotton_7.png Binary files differnew file mode 100644 index 0000000..466d40a --- /dev/null +++ b/farming/textures/farming_cotton_7.png diff --git a/farming/textures/farming_cotton_8.png b/farming/textures/farming_cotton_8.png Binary files differnew file mode 100644 index 0000000..f835ba5 --- /dev/null +++ b/farming/textures/farming_cotton_8.png diff --git a/farming/textures/farming_cotton_seed.png b/farming/textures/farming_cotton_seed.png Binary files differnew file mode 100644 index 0000000..f1d5b8a --- /dev/null +++ b/farming/textures/farming_cotton_seed.png diff --git a/farming/textures/farming_cucumber.png b/farming/textures/farming_cucumber.png Binary files differnew file mode 100644 index 0000000..2acb7b2 --- /dev/null +++ b/farming/textures/farming_cucumber.png diff --git a/farming/textures/farming_cucumber_1.png b/farming/textures/farming_cucumber_1.png Binary files differnew file mode 100644 index 0000000..e008fd1 --- /dev/null +++ b/farming/textures/farming_cucumber_1.png diff --git a/farming/textures/farming_cucumber_2.png b/farming/textures/farming_cucumber_2.png Binary files differnew file mode 100644 index 0000000..9c345ff --- /dev/null +++ b/farming/textures/farming_cucumber_2.png diff --git a/farming/textures/farming_cucumber_3.png b/farming/textures/farming_cucumber_3.png Binary files differnew file mode 100644 index 0000000..25f3c54 --- /dev/null +++ b/farming/textures/farming_cucumber_3.png diff --git a/farming/textures/farming_cucumber_4.png b/farming/textures/farming_cucumber_4.png Binary files differnew file mode 100644 index 0000000..fc62f2f --- /dev/null +++ b/farming/textures/farming_cucumber_4.png diff --git a/farming/textures/farming_desert_sand_soil.png b/farming/textures/farming_desert_sand_soil.png Binary files differnew file mode 100644 index 0000000..1450e01 --- /dev/null +++ b/farming/textures/farming_desert_sand_soil.png diff --git a/farming/textures/farming_desert_sand_soil_wet.png b/farming/textures/farming_desert_sand_soil_wet.png Binary files differnew file mode 100644 index 0000000..cffa955 --- /dev/null +++ b/farming/textures/farming_desert_sand_soil_wet.png diff --git a/farming/textures/farming_desert_sand_soil_wet_side.png b/farming/textures/farming_desert_sand_soil_wet_side.png Binary files differnew file mode 100644 index 0000000..fbb2815 --- /dev/null +++ b/farming/textures/farming_desert_sand_soil_wet_side.png diff --git a/farming/textures/farming_donut.png b/farming/textures/farming_donut.png Binary files differnew file mode 100644 index 0000000..8985299 --- /dev/null +++ b/farming/textures/farming_donut.png diff --git a/farming/textures/farming_donut_apple.png b/farming/textures/farming_donut_apple.png Binary files differnew file mode 100644 index 0000000..6dfe63d --- /dev/null +++ b/farming/textures/farming_donut_apple.png diff --git a/farming/textures/farming_donut_chocolate.png b/farming/textures/farming_donut_chocolate.png Binary files differnew file mode 100644 index 0000000..aa4b93f --- /dev/null +++ b/farming/textures/farming_donut_chocolate.png diff --git a/farming/textures/farming_flour.png b/farming/textures/farming_flour.png Binary files differnew file mode 100644 index 0000000..b1a9783 --- /dev/null +++ b/farming/textures/farming_flour.png diff --git a/farming/textures/farming_grapebush.png b/farming/textures/farming_grapebush.png Binary files differnew file mode 100644 index 0000000..c2e6620 --- /dev/null +++ b/farming/textures/farming_grapebush.png diff --git a/farming/textures/farming_grapes.png b/farming/textures/farming_grapes.png Binary files differnew file mode 100644 index 0000000..aa00ed6 --- /dev/null +++ b/farming/textures/farming_grapes.png diff --git a/farming/textures/farming_grapes_1.png b/farming/textures/farming_grapes_1.png Binary files differnew file mode 100644 index 0000000..64a935d --- /dev/null +++ b/farming/textures/farming_grapes_1.png diff --git a/farming/textures/farming_grapes_2.png b/farming/textures/farming_grapes_2.png Binary files differnew file mode 100644 index 0000000..6cc2a33 --- /dev/null +++ b/farming/textures/farming_grapes_2.png diff --git a/farming/textures/farming_grapes_3.png b/farming/textures/farming_grapes_3.png Binary files differnew file mode 100644 index 0000000..66d6310 --- /dev/null +++ b/farming/textures/farming_grapes_3.png diff --git a/farming/textures/farming_grapes_4.png b/farming/textures/farming_grapes_4.png Binary files differnew file mode 100644 index 0000000..57cdc73 --- /dev/null +++ b/farming/textures/farming_grapes_4.png diff --git a/farming/textures/farming_grapes_5.png b/farming/textures/farming_grapes_5.png Binary files differnew file mode 100644 index 0000000..aad41f4 --- /dev/null +++ b/farming/textures/farming_grapes_5.png diff --git a/farming/textures/farming_grapes_6.png b/farming/textures/farming_grapes_6.png Binary files differnew file mode 100644 index 0000000..2e23a3c --- /dev/null +++ b/farming/textures/farming_grapes_6.png diff --git a/farming/textures/farming_grapes_7.png b/farming/textures/farming_grapes_7.png Binary files differnew file mode 100644 index 0000000..9e70b6d --- /dev/null +++ b/farming/textures/farming_grapes_7.png diff --git a/farming/textures/farming_grapes_8.png b/farming/textures/farming_grapes_8.png Binary files differnew file mode 100644 index 0000000..5093a06 --- /dev/null +++ b/farming/textures/farming_grapes_8.png diff --git a/farming/textures/farming_melon_1.png b/farming/textures/farming_melon_1.png Binary files differnew file mode 100644 index 0000000..3c6ea6d --- /dev/null +++ b/farming/textures/farming_melon_1.png diff --git a/farming/textures/farming_melon_2.png b/farming/textures/farming_melon_2.png Binary files differnew file mode 100644 index 0000000..185ed82 --- /dev/null +++ b/farming/textures/farming_melon_2.png diff --git a/farming/textures/farming_melon_3.png b/farming/textures/farming_melon_3.png Binary files differnew file mode 100644 index 0000000..6e661f9 --- /dev/null +++ b/farming/textures/farming_melon_3.png diff --git a/farming/textures/farming_melon_4.png b/farming/textures/farming_melon_4.png Binary files differnew file mode 100644 index 0000000..d9199f3 --- /dev/null +++ b/farming/textures/farming_melon_4.png diff --git a/farming/textures/farming_melon_5.png b/farming/textures/farming_melon_5.png Binary files differnew file mode 100644 index 0000000..755cbd3 --- /dev/null +++ b/farming/textures/farming_melon_5.png diff --git a/farming/textures/farming_melon_6.png b/farming/textures/farming_melon_6.png Binary files differnew file mode 100644 index 0000000..b31a5b4 --- /dev/null +++ b/farming/textures/farming_melon_6.png diff --git a/farming/textures/farming_melon_7.png b/farming/textures/farming_melon_7.png Binary files differnew file mode 100644 index 0000000..3aebfdd --- /dev/null +++ b/farming/textures/farming_melon_7.png diff --git a/farming/textures/farming_melon_side.png b/farming/textures/farming_melon_side.png Binary files differnew file mode 100644 index 0000000..88e40c6 --- /dev/null +++ b/farming/textures/farming_melon_side.png diff --git a/farming/textures/farming_melon_slice.png b/farming/textures/farming_melon_slice.png Binary files differnew file mode 100644 index 0000000..6ee9775 --- /dev/null +++ b/farming/textures/farming_melon_slice.png diff --git a/farming/textures/farming_melon_top.png b/farming/textures/farming_melon_top.png Binary files differnew file mode 100644 index 0000000..f387dbd --- /dev/null +++ b/farming/textures/farming_melon_top.png diff --git a/farming/textures/farming_orange.png b/farming/textures/farming_orange.png Binary files differnew file mode 100644 index 0000000..8b9ec29 --- /dev/null +++ b/farming/textures/farming_orange.png diff --git a/farming/textures/farming_potato.png b/farming/textures/farming_potato.png Binary files differnew file mode 100644 index 0000000..6e91d6a --- /dev/null +++ b/farming/textures/farming_potato.png diff --git a/farming/textures/farming_potato_1.png b/farming/textures/farming_potato_1.png Binary files differnew file mode 100644 index 0000000..a9c0040 --- /dev/null +++ b/farming/textures/farming_potato_1.png diff --git a/farming/textures/farming_potato_2.png b/farming/textures/farming_potato_2.png Binary files differnew file mode 100644 index 0000000..c81830c --- /dev/null +++ b/farming/textures/farming_potato_2.png diff --git a/farming/textures/farming_potato_3.png b/farming/textures/farming_potato_3.png Binary files differnew file mode 100644 index 0000000..a3d7920 --- /dev/null +++ b/farming/textures/farming_potato_3.png diff --git a/farming/textures/farming_potato_4.png b/farming/textures/farming_potato_4.png Binary files differnew file mode 100644 index 0000000..405b7e56 --- /dev/null +++ b/farming/textures/farming_potato_4.png diff --git a/farming/textures/farming_pumpkin_1.png b/farming/textures/farming_pumpkin_1.png Binary files differnew file mode 100644 index 0000000..e5b9a2b --- /dev/null +++ b/farming/textures/farming_pumpkin_1.png diff --git a/farming/textures/farming_pumpkin_2.png b/farming/textures/farming_pumpkin_2.png Binary files differnew file mode 100644 index 0000000..d977e8c --- /dev/null +++ b/farming/textures/farming_pumpkin_2.png diff --git a/farming/textures/farming_pumpkin_3.png b/farming/textures/farming_pumpkin_3.png Binary files differnew file mode 100644 index 0000000..83f8190 --- /dev/null +++ b/farming/textures/farming_pumpkin_3.png diff --git a/farming/textures/farming_pumpkin_4.png b/farming/textures/farming_pumpkin_4.png Binary files differnew file mode 100644 index 0000000..20de004 --- /dev/null +++ b/farming/textures/farming_pumpkin_4.png diff --git a/farming/textures/farming_pumpkin_5.png b/farming/textures/farming_pumpkin_5.png Binary files differnew file mode 100644 index 0000000..59fa78e --- /dev/null +++ b/farming/textures/farming_pumpkin_5.png diff --git a/farming/textures/farming_pumpkin_6.png b/farming/textures/farming_pumpkin_6.png Binary files differnew file mode 100644 index 0000000..6ae543e --- /dev/null +++ b/farming/textures/farming_pumpkin_6.png diff --git a/farming/textures/farming_pumpkin_7.png b/farming/textures/farming_pumpkin_7.png Binary files differnew file mode 100644 index 0000000..79190e0 --- /dev/null +++ b/farming/textures/farming_pumpkin_7.png diff --git a/farming/textures/farming_pumpkin_8.png b/farming/textures/farming_pumpkin_8.png Binary files differnew file mode 100644 index 0000000..b941442 --- /dev/null +++ b/farming/textures/farming_pumpkin_8.png diff --git a/farming/textures/farming_pumpkin_bread.png b/farming/textures/farming_pumpkin_bread.png Binary files differnew file mode 100644 index 0000000..0dfae08 --- /dev/null +++ b/farming/textures/farming_pumpkin_bread.png diff --git a/farming/textures/farming_pumpkin_dough.png b/farming/textures/farming_pumpkin_dough.png Binary files differnew file mode 100644 index 0000000..62ea7a6 --- /dev/null +++ b/farming/textures/farming_pumpkin_dough.png diff --git a/farming/textures/farming_pumpkin_face_off.png b/farming/textures/farming_pumpkin_face_off.png Binary files differnew file mode 100644 index 0000000..df70171 --- /dev/null +++ b/farming/textures/farming_pumpkin_face_off.png diff --git a/farming/textures/farming_pumpkin_face_on.png b/farming/textures/farming_pumpkin_face_on.png Binary files differnew file mode 100644 index 0000000..fa71c9d --- /dev/null +++ b/farming/textures/farming_pumpkin_face_on.png diff --git a/farming/textures/farming_pumpkin_side.png b/farming/textures/farming_pumpkin_side.png Binary files differnew file mode 100644 index 0000000..2d30f20 --- /dev/null +++ b/farming/textures/farming_pumpkin_side.png diff --git a/farming/textures/farming_pumpkin_slice.png b/farming/textures/farming_pumpkin_slice.png Binary files differnew file mode 100644 index 0000000..1fb659e --- /dev/null +++ b/farming/textures/farming_pumpkin_slice.png diff --git a/farming/textures/farming_pumpkin_top.png b/farming/textures/farming_pumpkin_top.png Binary files differnew file mode 100644 index 0000000..7928345 --- /dev/null +++ b/farming/textures/farming_pumpkin_top.png diff --git a/farming/textures/farming_raspberries.png b/farming/textures/farming_raspberries.png Binary files differnew file mode 100644 index 0000000..ab96e1b --- /dev/null +++ b/farming/textures/farming_raspberries.png diff --git a/farming/textures/farming_raspberry_1.png b/farming/textures/farming_raspberry_1.png Binary files differnew file mode 100644 index 0000000..d1a7ffc --- /dev/null +++ b/farming/textures/farming_raspberry_1.png diff --git a/farming/textures/farming_raspberry_2.png b/farming/textures/farming_raspberry_2.png Binary files differnew file mode 100644 index 0000000..308a0ca --- /dev/null +++ b/farming/textures/farming_raspberry_2.png diff --git a/farming/textures/farming_raspberry_3.png b/farming/textures/farming_raspberry_3.png Binary files differnew file mode 100644 index 0000000..43d2ab1 --- /dev/null +++ b/farming/textures/farming_raspberry_3.png diff --git a/farming/textures/farming_raspberry_4.png b/farming/textures/farming_raspberry_4.png Binary files differnew file mode 100644 index 0000000..32da6b9 --- /dev/null +++ b/farming/textures/farming_raspberry_4.png diff --git a/farming/textures/farming_raspberry_smoothie.png b/farming/textures/farming_raspberry_smoothie.png Binary files differnew file mode 100644 index 0000000..fe178d1 --- /dev/null +++ b/farming/textures/farming_raspberry_smoothie.png diff --git a/farming/textures/farming_rhubarb.png b/farming/textures/farming_rhubarb.png Binary files differnew file mode 100644 index 0000000..7d416ab --- /dev/null +++ b/farming/textures/farming_rhubarb.png diff --git a/farming/textures/farming_rhubarb_1.png b/farming/textures/farming_rhubarb_1.png Binary files differnew file mode 100644 index 0000000..01585b1 --- /dev/null +++ b/farming/textures/farming_rhubarb_1.png diff --git a/farming/textures/farming_rhubarb_2.png b/farming/textures/farming_rhubarb_2.png Binary files differnew file mode 100644 index 0000000..71845c7 --- /dev/null +++ b/farming/textures/farming_rhubarb_2.png diff --git a/farming/textures/farming_rhubarb_3.png b/farming/textures/farming_rhubarb_3.png Binary files differnew file mode 100644 index 0000000..b412f7e --- /dev/null +++ b/farming/textures/farming_rhubarb_3.png diff --git a/farming/textures/farming_rhubarb_pie.png b/farming/textures/farming_rhubarb_pie.png Binary files differnew file mode 100644 index 0000000..1f77b53 --- /dev/null +++ b/farming/textures/farming_rhubarb_pie.png diff --git a/farming/textures/farming_soil.png b/farming/textures/farming_soil.png Binary files differnew file mode 100644 index 0000000..5cd3e68 --- /dev/null +++ b/farming/textures/farming_soil.png diff --git a/farming/textures/farming_soil_wet.png b/farming/textures/farming_soil_wet.png Binary files differnew file mode 100644 index 0000000..0b4487d --- /dev/null +++ b/farming/textures/farming_soil_wet.png diff --git a/farming/textures/farming_soil_wet_side.png b/farming/textures/farming_soil_wet_side.png Binary files differnew file mode 100644 index 0000000..f0b1bd4 --- /dev/null +++ b/farming/textures/farming_soil_wet_side.png diff --git a/farming/textures/farming_straw.png b/farming/textures/farming_straw.png Binary files differnew file mode 100644 index 0000000..e427772 --- /dev/null +++ b/farming/textures/farming_straw.png diff --git a/farming/textures/farming_sugar.png b/farming/textures/farming_sugar.png Binary files differnew file mode 100644 index 0000000..5cb7fa0 --- /dev/null +++ b/farming/textures/farming_sugar.png diff --git a/farming/textures/farming_tomato.png b/farming/textures/farming_tomato.png Binary files differnew file mode 100644 index 0000000..586aa56 --- /dev/null +++ b/farming/textures/farming_tomato.png diff --git a/farming/textures/farming_tomato_1.png b/farming/textures/farming_tomato_1.png Binary files differnew file mode 100644 index 0000000..d858e58 --- /dev/null +++ b/farming/textures/farming_tomato_1.png diff --git a/farming/textures/farming_tomato_2.png b/farming/textures/farming_tomato_2.png Binary files differnew file mode 100644 index 0000000..9d9ed6d --- /dev/null +++ b/farming/textures/farming_tomato_2.png diff --git a/farming/textures/farming_tomato_3.png b/farming/textures/farming_tomato_3.png Binary files differnew file mode 100644 index 0000000..fe3dcf0 --- /dev/null +++ b/farming/textures/farming_tomato_3.png diff --git a/farming/textures/farming_tomato_4.png b/farming/textures/farming_tomato_4.png Binary files differnew file mode 100644 index 0000000..27c3282 --- /dev/null +++ b/farming/textures/farming_tomato_4.png diff --git a/farming/textures/farming_tomato_5.png b/farming/textures/farming_tomato_5.png Binary files differnew file mode 100644 index 0000000..f369a68 --- /dev/null +++ b/farming/textures/farming_tomato_5.png diff --git a/farming/textures/farming_tomato_6.png b/farming/textures/farming_tomato_6.png Binary files differnew file mode 100644 index 0000000..0135cb5 --- /dev/null +++ b/farming/textures/farming_tomato_6.png diff --git a/farming/textures/farming_tomato_7.png b/farming/textures/farming_tomato_7.png Binary files differnew file mode 100644 index 0000000..4cd85f5 --- /dev/null +++ b/farming/textures/farming_tomato_7.png diff --git a/farming/textures/farming_tomato_8.png b/farming/textures/farming_tomato_8.png Binary files differnew file mode 100644 index 0000000..0b49025 --- /dev/null +++ b/farming/textures/farming_tomato_8.png diff --git a/farming/textures/farming_tool_bronzehoe.png b/farming/textures/farming_tool_bronzehoe.png Binary files differnew file mode 100644 index 0000000..ef07a80 --- /dev/null +++ b/farming/textures/farming_tool_bronzehoe.png diff --git a/farming/textures/farming_tool_diamondhoe.png b/farming/textures/farming_tool_diamondhoe.png Binary files differnew file mode 100644 index 0000000..093acb8 --- /dev/null +++ b/farming/textures/farming_tool_diamondhoe.png diff --git a/farming/textures/farming_tool_mesehoe.png b/farming/textures/farming_tool_mesehoe.png Binary files differnew file mode 100644 index 0000000..ffd597a --- /dev/null +++ b/farming/textures/farming_tool_mesehoe.png diff --git a/farming/textures/farming_tool_steelhoe.png b/farming/textures/farming_tool_steelhoe.png Binary files differnew file mode 100644 index 0000000..893a695 --- /dev/null +++ b/farming/textures/farming_tool_steelhoe.png diff --git a/farming/textures/farming_tool_stonehoe.png b/farming/textures/farming_tool_stonehoe.png Binary files differnew file mode 100644 index 0000000..4f8dade --- /dev/null +++ b/farming/textures/farming_tool_stonehoe.png diff --git a/farming/textures/farming_tool_woodhoe.png b/farming/textures/farming_tool_woodhoe.png Binary files differnew file mode 100644 index 0000000..8b20d2d --- /dev/null +++ b/farming/textures/farming_tool_woodhoe.png diff --git a/farming/textures/farming_trellis.png b/farming/textures/farming_trellis.png Binary files differnew file mode 100644 index 0000000..855b932 --- /dev/null +++ b/farming/textures/farming_trellis.png diff --git a/farming/textures/farming_wheat.png b/farming/textures/farming_wheat.png Binary files differnew file mode 100644 index 0000000..1e0ad3b --- /dev/null +++ b/farming/textures/farming_wheat.png diff --git a/farming/textures/farming_wheat_1.png b/farming/textures/farming_wheat_1.png Binary files differnew file mode 100644 index 0000000..c16ad94 --- /dev/null +++ b/farming/textures/farming_wheat_1.png diff --git a/farming/textures/farming_wheat_2.png b/farming/textures/farming_wheat_2.png Binary files differnew file mode 100644 index 0000000..baddb4c --- /dev/null +++ b/farming/textures/farming_wheat_2.png diff --git a/farming/textures/farming_wheat_3.png b/farming/textures/farming_wheat_3.png Binary files differnew file mode 100644 index 0000000..36ebb19 --- /dev/null +++ b/farming/textures/farming_wheat_3.png diff --git a/farming/textures/farming_wheat_4.png b/farming/textures/farming_wheat_4.png Binary files differnew file mode 100644 index 0000000..735ed77 --- /dev/null +++ b/farming/textures/farming_wheat_4.png diff --git a/farming/textures/farming_wheat_5.png b/farming/textures/farming_wheat_5.png Binary files differnew file mode 100644 index 0000000..f40b5f0 --- /dev/null +++ b/farming/textures/farming_wheat_5.png diff --git a/farming/textures/farming_wheat_6.png b/farming/textures/farming_wheat_6.png Binary files differnew file mode 100644 index 0000000..e9c78e0 --- /dev/null +++ b/farming/textures/farming_wheat_6.png diff --git a/farming/textures/farming_wheat_7.png b/farming/textures/farming_wheat_7.png Binary files differnew file mode 100644 index 0000000..cc26ca9 --- /dev/null +++ b/farming/textures/farming_wheat_7.png diff --git a/farming/textures/farming_wheat_8.png b/farming/textures/farming_wheat_8.png Binary files differnew file mode 100644 index 0000000..d050093 --- /dev/null +++ b/farming/textures/farming_wheat_8.png diff --git a/farming/textures/farming_wheat_seed.png b/farming/textures/farming_wheat_seed.png Binary files differnew file mode 100644 index 0000000..a9031fb --- /dev/null +++ b/farming/textures/farming_wheat_seed.png diff --git a/farming/textures/strawberry.png b/farming/textures/strawberry.png Binary files differnew file mode 100644 index 0000000..5b43e6b --- /dev/null +++ b/farming/textures/strawberry.png diff --git a/farming/textures/vessels_drinking_cup.png b/farming/textures/vessels_drinking_cup.png Binary files differnew file mode 100644 index 0000000..2eba232 --- /dev/null +++ b/farming/textures/vessels_drinking_cup.png diff --git a/farming/tomato.lua b/farming/tomato.lua new file mode 100644 index 0000000..1ed7870 --- /dev/null +++ b/farming/tomato.lua @@ -0,0 +1,78 @@ + +--[[ + Textures edited from: + http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1288375-food-plus-mod-more-food-than-you-can-imagine-v2-9) +]] + +local S = farming.intllib + +-- tomato +minetest.register_craftitem("farming:tomato", { + description = S("Tomato"), + inventory_image = "farming_tomato.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:tomato_1") + end, + on_use = minetest.item_eat(4), +}) + +-- tomato definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_tomato_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:tomato_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_tomato_2.png"} +minetest.register_node("farming:tomato_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_tomato_3.png"} +minetest.register_node("farming:tomato_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_tomato_4.png"} +minetest.register_node("farming:tomato_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_tomato_5.png"} +minetest.register_node("farming:tomato_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_tomato_6.png"} +minetest.register_node("farming:tomato_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_tomato_7.png"} +crop_def.drop = { + items = { + {items = {'farming:tomato'}, rarity = 1}, + {items = {'farming:tomato'}, rarity = 3}, + } +} +minetest.register_node("farming:tomato_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_tomato_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:tomato 3'}, rarity = 1}, + {items = {'farming:tomato 3'}, rarity = 2}, + } +} +minetest.register_node("farming:tomato_8", table.copy(crop_def)) diff --git a/farming/wheat.lua b/farming/wheat.lua new file mode 100644 index 0000000..65e5ce6 --- /dev/null +++ b/farming/wheat.lua @@ -0,0 +1,154 @@ + +local S = farming.intllib + +-- wheat seeds +minetest.register_node("farming:seed_wheat", { + description = S("Wheat Seed"), + tiles = {"farming_wheat_seed.png"}, + inventory_image = "farming_wheat_seed.png", + wield_image = "farming_wheat_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:wheat_1") + end, +}) + +-- harvested wheat +minetest.register_craftitem("farming:wheat", { + description = S("Wheat"), + inventory_image = "farming_wheat.png", +}) + +-- straw +minetest.register_node("farming:straw", { + description = S("Straw"), + tiles = {"farming_straw.png"}, + is_ground_content = false, + groups = {snappy = 3, flammable = 4}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft({ + output = "farming:straw 3", + recipe = { + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", "farming:wheat", "farming:wheat"}, + } +}) + +minetest.register_craft({ + output = "farming:wheat 3", + recipe = { + {"farming:straw"}, + } +}) + +-- flour +minetest.register_craftitem("farming:flour", { + description = S("Flour"), + inventory_image = "farming_flour.png", +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = {"farming:wheat", "farming:wheat", "farming:wheat", "farming:wheat"} +}) + +-- bread +minetest.register_craftitem("farming:bread", { + description = S("Bread"), + inventory_image = "farming_bread.png", + on_use = minetest.item_eat(5), +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" +}) + +-- wheat definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_wheat_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:wheat_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_wheat_2.png"} +minetest.register_node("farming:wheat_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_wheat_3.png"} +minetest.register_node("farming:wheat_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_wheat_4.png"} +minetest.register_node("farming:wheat_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_wheat_5.png"} +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 2}, + {items = {'farming:seed_wheat'}, rarity = 2}, + } +} +minetest.register_node("farming:wheat_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_wheat_6.png"} +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 2}, + {items = {'farming:seed_wheat'}, rarity = 1}, + } +} +minetest.register_node("farming:wheat_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_wheat_7.png"} +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 1}, + {items = {'farming:wheat'}, rarity = 3}, + {items = {'farming:seed_wheat'}, rarity = 1}, + {items = {'farming:seed_wheat'}, rarity = 3}, + } +} +minetest.register_node("farming:wheat_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_wheat_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 1}, + {items = {'farming:wheat'}, rarity = 3}, + {items = {'farming:seed_wheat'}, rarity = 1}, + {items = {'farming:seed_wheat'}, rarity = 3}, + } +} +minetest.register_node("farming:wheat_8", table.copy(crop_def)) diff --git a/gloopblocks/crafts.lua b/gloopblocks/crafts.lua index 75aef09..bfa1815 100644 --- a/gloopblocks/crafts.lua +++ b/gloopblocks/crafts.lua @@ -299,6 +299,13 @@ minetest.register_craft({ }) minetest.register_craft({ + type = "cooking", + output = "gloopblocks:stonebrick", + recipe = "default:stone_brick_mossy" + cooktime = 6 +}) + +minetest.register_craft({ type = "shapeless", output = "gloopblocks:cobble_road 5", recipe = { diff --git a/maptools/CHANGELOG.md b/maptools/CHANGELOG.md new file mode 100644 index 0000000..e3c422f --- /dev/null +++ b/maptools/CHANGELOG.md @@ -0,0 +1,10 @@ +# Change Log + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +## [1.0.0] - 2017-02-19 + +- Initial versioned release.
\ No newline at end of file diff --git a/maptools/LICENSE.md b/maptools/LICENSE.md index ca48e3a..2188fe4 100644 --- a/maptools/LICENSE.md +++ b/maptools/LICENSE.md @@ -1,7 +1,6 @@ -zlib license -============ +# zlib license -Copyright (c) 2012-2015 Calinou and contributors +Copyright (c) 2012-2017 Hugo Locurcio and contributors **This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.** diff --git a/maptools/README.md b/maptools/README.md index 3a428b7..bd65652 100644 --- a/maptools/README.md +++ b/maptools/README.md @@ -1,7 +1,7 @@ Map Tools ========= -Map Tools for Minetest <http://minetest.net>, a free/libre infinite +Map Tools for [Minetest](http://minetest.net), a free and open source infinite world block sandbox game. To install, just clone this repository into your "mods" directory. diff --git a/maptools/aliases.lua b/maptools/aliases.lua index f1f0cc5..5a0e0bb 100644 --- a/maptools/aliases.lua +++ b/maptools/aliases.lua @@ -1,7 +1,7 @@ --[[ Map Tools: alias definitions -Copyright (c) 2012-2015 Calinou and contributors. +Copyright (c) 2012-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/maptools/config.lua b/maptools/config.lua index 63f1a26..f59be03 100644 --- a/maptools/config.lua +++ b/maptools/config.lua @@ -1,7 +1,7 @@ --[[ Map Tools: configuration handling -Copyright (c) 2012-2015 Calinou and contributors. +Copyright (c) 2012-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/maptools/craftitems.lua b/maptools/craftitems.lua index c311aa9..fca7e13 100644 --- a/maptools/craftitems.lua +++ b/maptools/craftitems.lua @@ -1,7 +1,7 @@ --[[ Map Tools: item definitions -Copyright (c) 2012-2015 Calinou and contributors. +Copyright (c) 2012-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/maptools/default_nodes.lua b/maptools/default_nodes.lua index 0432306..b7a2a98 100644 --- a/maptools/default_nodes.lua +++ b/maptools/default_nodes.lua @@ -1,7 +1,7 @@ --[[ Map Tools: unbreakable default nodes -Copyright (c) 2012-2015 Calinou and contributors. +Copyright (c) 2012-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/maptools/init.lua b/maptools/init.lua index dbff209..7b9afcd 100644 --- a/maptools/init.lua +++ b/maptools/init.lua @@ -3,7 +3,7 @@ ** Map Tools **
By Calinou.
-Copyright (c) 2012-2015 Calinou and contributors.
+Copyright (c) 2012-2017 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
=====================================================================
--]]
diff --git a/maptools/nodes.lua b/maptools/nodes.lua index 51daddc..b97f8d9 100644 --- a/maptools/nodes.lua +++ b/maptools/nodes.lua @@ -1,7 +1,7 @@ --[[ Map Tools: node definitions -Copyright (c) 2012-2015 Calinou and contributors. +Copyright (c) 2012-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/maptools/tools.lua b/maptools/tools.lua index 6ce8b6c..e42d2f5 100644 --- a/maptools/tools.lua +++ b/maptools/tools.lua @@ -1,7 +1,7 @@ --[[ Map Tools: tool definitions -Copyright (c) 2012-2015 Calinou and contributors. +Copyright (c) 2012-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/mesecons_random/init.lua b/mesecons_random/init.lua index 4c1d299..5a6ef24 100644 --- a/mesecons_random/init.lua +++ b/mesecons_random/init.lua @@ -53,6 +53,7 @@ minetest.register_node("mesecons_random:ghoststone_active", { diggable = false, sunlight_propagates = true, paramtype = "light", + drop = "mesecons_random:ghoststone", mesecons = {conductor = { state = mesecon.state.on, rules = { diff --git a/moreblocks/CHANGELOG.md b/moreblocks/CHANGELOG.md new file mode 100644 index 0000000..e3c422f --- /dev/null +++ b/moreblocks/CHANGELOG.md @@ -0,0 +1,10 @@ +# Change Log + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +## [1.0.0] - 2017-02-19 + +- Initial versioned release.
\ No newline at end of file diff --git a/moreblocks/LICENSE.md b/moreblocks/LICENSE.md index 45c5ff5..a3511ad 100644 --- a/moreblocks/LICENSE.md +++ b/moreblocks/LICENSE.md @@ -1,7 +1,6 @@ -zlib license -============ +# zlib license -Copyright (c) 2011-2015 Calinou and contributors +Copyright (c) 2011-2017 Hugo Locurcio and contributors **This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.** diff --git a/moreblocks/README.md b/moreblocks/README.md index e6be474..767cb7c 100644 --- a/moreblocks/README.md +++ b/moreblocks/README.md @@ -1,7 +1,6 @@ -More Blocks -=========== +# More Blocks -More Blocks for Minetest <http://minetest.net>, a free/libre infinite +More Blocks for [Minetest](http://minetest.net), a free and open source infinite world block sandbox game. To install, just clone this repository into your "mods" directory. diff --git a/moreblocks/aliases.lua b/moreblocks/aliases.lua index e1ddc64..b9b2106 100644 --- a/moreblocks/aliases.lua +++ b/moreblocks/aliases.lua @@ -1,7 +1,7 @@ --[[ More Blocks: alias definitions -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/circular_saw.lua b/moreblocks/circular_saw.lua index 61d53a7..36f5fab 100644 --- a/moreblocks/circular_saw.lua +++ b/moreblocks/circular_saw.lua @@ -1,7 +1,7 @@ --[[ More Blocks: circular saw -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/config.lua b/moreblocks/config.lua index d646dac..da5cd6e 100644 --- a/moreblocks/config.lua +++ b/moreblocks/config.lua @@ -1,7 +1,7 @@ --[[ More Blocks: configuration handling -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/crafting.lua b/moreblocks/crafting.lua index 867ac33..88862b7 100644 --- a/moreblocks/crafting.lua +++ b/moreblocks/crafting.lua @@ -1,7 +1,7 @@ --[[ More Blocks: crafting recipes -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/init.lua b/moreblocks/init.lua index 2919a30..5e7fc6b 100644 --- a/moreblocks/init.lua +++ b/moreblocks/init.lua @@ -3,7 +3,7 @@ ** More Blocks ** By Calinou, with the help of ShadowNinja and VanessaE. -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. ===================================================================== --]] diff --git a/moreblocks/nodes.lua b/moreblocks/nodes.lua index 8d90614..28e2ef1 100644 --- a/moreblocks/nodes.lua +++ b/moreblocks/nodes.lua @@ -1,7 +1,7 @@ --[[ More Blocks: node definitions -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/ownership.lua b/moreblocks/ownership.lua index 355d7f1..c569ae7 100644 --- a/moreblocks/ownership.lua +++ b/moreblocks/ownership.lua @@ -1,7 +1,7 @@ --[[ More Blocks: ownership handling -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/redefinitions.lua b/moreblocks/redefinitions.lua index d111389..13b8f0b 100644 --- a/moreblocks/redefinitions.lua +++ b/moreblocks/redefinitions.lua @@ -1,7 +1,7 @@ --[[ More Blocks: redefinitions of default stuff -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/stairsplus/API.md b/moreblocks/stairsplus/API.md index 2db0f2b..1011487 100644 --- a/moreblocks/stairsplus/API.md +++ b/moreblocks/stairsplus/API.md @@ -1,5 +1,4 @@ -API documentation for Stairs+ -============================= +# API documentation for Stairs+ * `stairsplus:register_all(modname, subname, recipeitem, fields)` Registers a stair, slab, panel, microblock, and any other types of diff --git a/moreblocks/stairsplus/aliases.lua b/moreblocks/stairsplus/aliases.lua index c235d34..a4d95f0 100644 --- a/moreblocks/stairsplus/aliases.lua +++ b/moreblocks/stairsplus/aliases.lua @@ -1,7 +1,7 @@ --[[ More Blocks: alias definitions -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/stairsplus/conversion.lua b/moreblocks/stairsplus/conversion.lua index 37f2a25..887f3e3 100644 --- a/moreblocks/stairsplus/conversion.lua +++ b/moreblocks/stairsplus/conversion.lua @@ -1,7 +1,7 @@ --[[ More Blocks: conversion -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/stairsplus/init.lua b/moreblocks/stairsplus/init.lua index 1f2cefe..87a356f 100644 --- a/moreblocks/stairsplus/init.lua +++ b/moreblocks/stairsplus/init.lua @@ -1,7 +1,7 @@ --[[ More Blocks: Stairs+ -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/stairsplus/microblocks.lua b/moreblocks/stairsplus/microblocks.lua index a3b94d3..727278e 100644 --- a/moreblocks/stairsplus/microblocks.lua +++ b/moreblocks/stairsplus/microblocks.lua @@ -1,7 +1,7 @@ --[[ More Blocks: microblock definitions -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/stairsplus/panels.lua b/moreblocks/stairsplus/panels.lua index 66e736d..fb18f05 100644 --- a/moreblocks/stairsplus/panels.lua +++ b/moreblocks/stairsplus/panels.lua @@ -1,7 +1,7 @@ --[[ More Blocks: panel definitions -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/stairsplus/registrations.lua b/moreblocks/stairsplus/registrations.lua index 13a9be7..ccadedc 100644 --- a/moreblocks/stairsplus/registrations.lua +++ b/moreblocks/stairsplus/registrations.lua @@ -1,7 +1,7 @@ --[[ More Blocks: registrations -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/stairsplus/slabs.lua b/moreblocks/stairsplus/slabs.lua index 9fa2494..2a86b0f 100644 --- a/moreblocks/stairsplus/slabs.lua +++ b/moreblocks/stairsplus/slabs.lua @@ -1,7 +1,7 @@ --[[ More Blocks: slab definitions -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/stairsplus/slopes.lua b/moreblocks/stairsplus/slopes.lua index 1868cb3..cd8142f 100644 --- a/moreblocks/stairsplus/slopes.lua +++ b/moreblocks/stairsplus/slopes.lua @@ -1,7 +1,7 @@ --[[ More Blocks: slope definitions -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreblocks/stairsplus/stairs.lua b/moreblocks/stairsplus/stairs.lua index fc47dbd..8dd29a0 100644 --- a/moreblocks/stairsplus/stairs.lua +++ b/moreblocks/stairsplus/stairs.lua @@ -1,7 +1,7 @@ --[[ More Blocks: stair definitions -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/moreores/CHANGELOG.md b/moreores/CHANGELOG.md new file mode 100644 index 0000000..e3c422f --- /dev/null +++ b/moreores/CHANGELOG.md @@ -0,0 +1,10 @@ +# Change Log + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +## [1.0.0] - 2017-02-19 + +- Initial versioned release.
\ No newline at end of file diff --git a/moreores/LICENSE.md b/moreores/LICENSE.md index 45c5ff5..a3511ad 100644 --- a/moreores/LICENSE.md +++ b/moreores/LICENSE.md @@ -1,7 +1,6 @@ -zlib license -============ +# zlib license -Copyright (c) 2011-2015 Calinou and contributors +Copyright (c) 2011-2017 Hugo Locurcio and contributors **This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.** diff --git a/moreores/README.md b/moreores/README.md index f54dda7..bf702fc 100644 --- a/moreores/README.md +++ b/moreores/README.md @@ -1,7 +1,6 @@ -More Ores -========= +# More Ores -More Ores for Minetest <http://minetest.net>, a free/libre infinite +More Ores for [Minetest](http://minetest.net), a free and open source infinite world block sandbox game. To install, just clone this repository into your "mods" directory. diff --git a/moreores/init.lua b/moreores/init.lua index 7af91bc..86f8e0a 100644 --- a/moreores/init.lua +++ b/moreores/init.lua @@ -3,7 +3,7 @@ ** More Ores ** By Calinou, with the help of Nore. -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. ===================================================================== --]] diff --git a/moreores/mg.lua b/moreores/mg.lua index e323b74..8c53456 100644 --- a/moreores/mg.lua +++ b/moreores/mg.lua @@ -1,7 +1,7 @@ --[[ More Ores: `mg` mod support -Copyright (c) 2011-2015 Calinou and contributors. +Copyright (c) 2011-2017 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/vines/.luacheckrc b/vines/.luacheckrc new file mode 100644 index 0000000..bf99780 --- /dev/null +++ b/vines/.luacheckrc @@ -0,0 +1,13 @@ + +unused_args = false + +read_globals = { + "minetest", + "default", + "ItemStack", + "biome_lib", +} + +globals = { + "vines", +} diff --git a/vines/description.txt b/vines/description.txt new file mode 100644 index 0000000..3664f43 --- /dev/null +++ b/vines/description.txt @@ -0,0 +1 @@ +Adds climbable vines that are spawned on trees. diff --git a/vines/mod.conf b/vines/mod.conf new file mode 100644 index 0000000..39ea365 --- /dev/null +++ b/vines/mod.conf @@ -0,0 +1,2 @@ + +name = vines diff --git a/vines/screenshot.png b/vines/screenshot.png Binary files differnew file mode 100644 index 0000000..b386f69 --- /dev/null +++ b/vines/screenshot.png diff --git a/xban2/.luacheckrc b/xban2/.luacheckrc new file mode 100644 index 0000000..8ef1636 --- /dev/null +++ b/xban2/.luacheckrc @@ -0,0 +1,7 @@ + +unused_args = false +allow_defined_top = true + +read_globals = { + "minetest", +} diff --git a/xban2/dbimport.lua b/xban2/dbimport.lua index ec9293d..0d342bf 100644 --- a/xban2/dbimport.lua +++ b/xban2/dbimport.lua @@ -11,13 +11,13 @@ minetest.register_chatcommand("xban_dbi", { privs = { server=true }, func = function(name, params) if params == "--list" then - local names = { } - for name in pairs(xban.importers) do - table.insert(names, name) + local importers = { } + for importer in pairs(xban.importers) do + table.insert(importers, importer) end minetest.chat_send_player(name, ("[xban] Known importers: %s"):format( - table.concat(names, ", "))) + table.concat(importers, ", "))) return elseif not xban.importers[params] then minetest.chat_send_player(name, diff --git a/xban2/importers/v2.lua b/xban2/importers/v2.lua index fd29966..739063f 100644 --- a/xban2/importers/v2.lua +++ b/xban2/importers/v2.lua @@ -8,19 +8,19 @@ function xban.importers.v2() local text = f:read("*a") f:close() local db = minetest.deserialize(text) - for _, e in ipairs(db) do - for name in pairs(e.names) do + for _, ent in ipairs(db) do + for name in pairs(ent.names) do local entry = xban.find_entry(name, true) if entry.source ~= "xban:importer_v2" then for nm in pairs(e.names) do entry.names[nm] = true end - if e.banned then + if ent.banned then entry.banned = true entry.reason = e.banned entry.source = "xban:importer_v2" - entry.time = e.time - entry.expires = e.expires + entry.time = ent.time + entry.expires = ent.expires table.insert(entry.record, { source = entry.source, reason = entry.reason, diff --git a/xban2/init.lua b/xban2/init.lua index b3c42a6..dad13af 100644 --- a/xban2/init.lua +++ b/xban2/init.lua @@ -24,9 +24,7 @@ local function make_logger(level) end local ACTION = make_logger("action") -local INFO = make_logger("info") local WARNING = make_logger("warning") -local ERROR = make_logger("error") local unit_to_secs = { s = 1, m = 60, h = 3600, @@ -299,11 +297,11 @@ minetest.register_chatcommand("xban_wl", { local cmd, plname = params:match("%s*(%S+)%s*(%S+)") if cmd == "add" then xban.add_whitelist(plname, name) - ACTION("%s adds %s to whitelist", source, plname) + ACTION("%s adds %s to whitelist", name, plname) return true, "Added to whitelist: "..plname elseif cmd == "del" then xban.remove_whitelist(plname) - ACTION("%s removes %s to whitelist", source, plname) + ACTION("%s removes %s to whitelist", name, plname) return true, "Removed from whitelist: "..plname elseif cmd == "get" then local e = xban.get_whitelist(plname) @@ -361,10 +359,10 @@ local function load_db() WARNING("Unable to load database: %s", "Read failed") return end - local t, e = minetest.deserialize(cont) + local t, e2 = minetest.deserialize(cont) if not t then WARNING("Unable to load database: %s", - "Deserialization failed: "..(e or "unknown error")) + "Deserialization failed: "..(e2 or "unknown error")) return end db = t |