123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598 |
- --[[
- TODO:
- tension physics on wires
- spots/bugs disease
- check nearby nodes for yellowing decision
- growth and aging of vines
- ]]
- local grape_speed = {
- rand = 60,
- retry = 30,
- cutting = 500,
- sapling = 1000,
- fruit = 800,
- leaf_regrowth = 40,
- wine = 60*60*2,
- }
- --[[
- local grape_speed = {
- retry = 2,
- cutting = 6,
- sapling = 6,
- fruit = 4,
- leaf_regrowth = 4,
- }
- ]]
- local function gr()
- return math.random(grape_speed.rand)
- end
- minetest.register_craftitem("farming_super:grape_leaves", {
- description = "Grape Leaves",
- inventory_image = "farming_super_grapes_leaves_item.png",
- on_use = minetest.item_eat(1),
- groups = {flammable = 1},
- })
- local colors = {"red", "green", "purple", "black"}
- local deco_seeds = {4673, 4674, 4675, 4676, 4677 }
- for gi,color in ipairs(colors) do
- minetest.register_node("farming_super:grape_cutting_"..color, {
- description = "Grape Cutting",
- drawtype = "plantlike",
- -- waving = 1,
- -- visual_scale = 1.69,
- tiles = {"farming_super_grapes_cutting.png"},
- inventory_image = "farming_super_grapes_cutting.png",
- paramtype = "light",
- paramtype2 = "meshoptions",
- sunlight_propagates = true,
- walkable = false,
- buildable_to = false,
- grape_color = color,
- groups = {snappy = 2, oddly_breakable_by_hand = 2, flammable = 1, grape_cutting=1},
- sounds = default.node_sound_leaves_defaults(),
- selection_box = {
- type = "fixed",
- fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16},
- },
- place_param2 = 1,
-
- on_place = function(itemstack, placer, pointed_thing)
-
- minetest.set_node(pointed_thing.above, {name="farming_super:grape_cutting_"..color, param2 = 1})
- local timer = minetest.get_node_timer(pointed_thing.above)
- timer:start(grape_speed.cutting + gr())
-
- itemstack:take_item(1)
- return itemstack
- end,
-
- on_timer = function(pos, elapsed)
- local node = minetest.get_node(pos)
- local def = minetest.registered_nodes[node.name]
- local c = def.grape_color
-
- pos.y = pos.y - 1
- local soil = minetest.get_node(pos)
- if soil.name ~= "farming:desert_sand_soil_wet" then
- pos.y = pos.y + 1
- -- print("wrong soil")
- minetest.get_node_timer(pos):start(grape_speed.retry)
- return
- end
-
- pos.y = pos.y + 1
- minetest.set_node(pos, {name = "farming_super:grape_sapling_"..color, param2 = 1})
-
- minetest.get_node_timer(pos):start(grape_speed.sapling + gr())
- end,
- })
- minetest.register_node("farming_super:grape_sapling_"..color, {
- description = "Grape Sapling",
- drawtype = "plantlike",
- waving = 1,
- -- visual_scale = 1.69,
- tiles = {"farming_super_grapes_sapling.png"},
- inventory_image = "farming_super_grapes_sapling.png",
- paramtype = "light",
- paramtype2 = "meshoptions",
- sunlight_propagates = true,
- walkable = false,
- buildable_to = false,
- grape_color = color,
- groups = {snappy = 2, oddly_breakable_by_hand = 2, flammable = 1, grape_sapling=1},
- sounds = default.node_sound_leaves_defaults(),
- selection_box = {
- type = "fixed",
- fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.5, 5 / 16},
- },
- place_param2 = 1,
-
- on_place = function(itemstack, placer, pointed_thing)
-
- minetest.set_node(pointed_thing.above, {name="farming_super:grape_sapling_"..color, param2 = 1})
- local timer = minetest.get_node_timer(pointed_thing.above)
- timer:start(grape_speed.sapling + gr())
-
- itemstack:take_item(1)
- return itemstack
- end,
-
- on_timer = function(pos, elapsed)
- local node = minetest.get_node(pos)
- local def = minetest.registered_nodes[node.name]
- local c = def.grape_color
-
- pos.y = pos.y - 1
- local soil = minetest.get_node(pos)
- if soil.name ~= "farming:desert_sand_soil_wet" then
- pos.y = pos.y + 1
- -- print("wrong soil")
- minetest.get_node_timer(pos):start(grape_speed.retry)
- return
- end
-
- pos.y = pos.y + 3
- local wire = minetest.get_node(pos)
- if wire.name ~= "farming_super:wire" then
- pos.y = pos.y - 2
- minetest.get_node_timer(pos):start(grape_speed.retry)
- -- print("no wire")
- return
- end
-
- pos.y = pos.y - 1
- minetest.set_node(pos, {name = "farming_super:grape_leaves_"..color, param2 = 3})
- minetest.get_node_timer(pos):start(grape_speed.fruit + gr())
- pos.y = pos.y - 1
- minetest.set_node(pos, {name = "farming_super:grape_stem_"..color, param2 = 1})
- end,
- })
-
- minetest.register_node("farming_super:grape_stem_"..color, {
- description = "Grape Plant",
- drawtype = "plantlike",
- -- waving = 1,
- -- visual_scale = 1.69,
- tiles = {"farming_super_grape_vine_stem.png"},
- wield_image = "farming_super_grape_vine_stem.png",
-
- paramtype = "light",
- paramtype2 = "meshoptions",
- sunlight_propagates = true,
- walkable = false,
- buildable_to = false,
- grape_color = color,
- drop = {
- max_items = 2,
- items = {
- { items = {'farming_super:grape_cutting_'..color..' 2'}, },
- { items = {'farming_super:grape_cutting_'..color}, rarity = 2 },
- }
- },
- groups = {
- snappy = 1, choppy=2, flammable = 1, grape_stem = 1, not_in_creative_inventory=1,
- },
- sounds = default.node_sound_leaves_defaults(),
- selection_box = {
- type = "fixed",
- fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16},
- },
- place_param2 = 1,
-
- after_destruct = function(pos, oldnode)
- pos.y = pos.y + 1
- local leaves = minetest.get_node(pos)
- if minetest.get_item_group(leaves.name, "grape_leaves") > 0 then
- minetest.set_node(pos, {name="air"})
- end
- end,
- })
-
-
- minetest.register_node("farming_super:grape_leaves_"..color, {
- description = "Grape Leaves",
- drawtype = "plantlike",
- waving = 1,
- visual_scale = 1.2,
- tiles = {"default_aspen_leaves.png"},
- paramtype = "light",
- paramtype2 = "meshoptions",
- sunlight_propagates = true,
- -- walkable = false,
- climbable = true,
- groups = {
- snappy=1, flammable=1, grape_leaves=1, grape_leaves_bare=1,
- grape_healthy_leaves=1, not_in_creative_inventory=1, hangs_from_vines=1,
- },
- grape_color = color,
- drop = {
- max_items = 2,
- items = {
- { items = {'farming_super:grape_leaves 1'} },
- { items = {'farming_super:grape_leaves 1'}, rarity = 3 },
- { items = {'farming_super:grape_cutting_'..color}, rarity = 5 },
- }
- },
- sounds = default.node_sound_leaves_defaults(),
- selection_box = {
- type = "fixed",
- fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.5, 5 / 16},
- },
- collision_box = {
- type = "fixed",
- fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.5, 5 / 16},
- },
- place_param2 = 3,
-
- on_timer = function(pos, elapsed)
- local node = minetest.get_node(pos)
- local color = minetest.registered_nodes[node.name].grape_color
- minetest.set_node(pos, {name = "farming_super:grape_leaves_ripe_"..color, param2 = 3})
- minetest.get_node_timer(pos):start(grape_speed.fruit + gr())
- end,
- })
- minetest.register_node("farming_super:grape_yellow_leaves_"..color, {
- description = "Yellow Grape Leaves",
- drawtype = "plantlike",
- waving = 1,
- visual_scale = 1.2,
- tiles = {"default_aspen_leaves.png^[colorize:olive:150"},
- paramtype = "light",
- paramtype2 = "meshoptions",
- sunlight_propagates = true,
- -- walkable = false,
- climbable = true,
- grape_color = color,
- groups = {
- snappy=1, flammable=1, grape_leaves=1, grape_yellow_leaves=1,
- not_in_creative_inventory=1, hangs_from_vines=1
- },
- sounds = default.node_sound_leaves_defaults(),
- selection_box = {
- type = "fixed",
- fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.5, 5 / 16},
- },
- collision_box = {
- type = "fixed",
- fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.5, 5 / 16},
- },
- place_param2 = 3,
- })
- minetest.register_node("farming_super:grape_leaves_ripe_"..color, {
- description = "Grapes, "..color,
- drawtype = "plantlike",
- waving = 1,
- visual_scale = 1.2,
- tiles = {"default_aspen_leaves.png^farming_super_grapes_ripe_"..color..".png"},
- paramtype = "light",
- paramtype2 = "meshoptions",
- sunlight_propagates = true,
- -- walkable = true,
- climbable = true,
- grape_color = color,
- groups = {
- snappy=1, flammable=1, grape_leaves=1, grape_healthy_leaves=1,
- not_in_creative_inventory=1, hangs_from_vines=1
- },
- sounds = default.node_sound_leaves_defaults(),
- drop = {
- max_items = 2,
- items = {
- { items = {'farming_super:grape_cluster_'..color..' 2'} },
- { items = {'farming_super:grape_cluster_'..color..' 1'}, rarity = 2},
- { items = {'farming_super:grape_cluster_'..color..' 2'}, rarity = 6},
- }
- },
- selection_box = {
- type = "fixed",
- fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.5, 5 / 16},
- },
- collision_box = {
- type = "fixed",
- fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.5, 5 / 16},
- },
- place_param2 = 3,
-
- -- after_dig_node = function(pos, oldnode, oldmetadata, digger)
- -- minetest.set_node(pos, {name = "farming_super:grape_leaves_"..color})
- -- end,
-
- on_punch = function(pos, node, puncher)
- local inv = puncher:get_inventory()
-
- local drops = minetest.get_node_drops(node.name)
- for _,d in pairs(drops) do
- inv:add_item("main", d)
- end
-
- minetest.set_node(pos, {name = "farming_super:grape_leaves_"..color, param2 = 3})
- minetest.get_node_timer(pos):start(grape_speed.fruit + gr())
- end,
-
- })
-
-
- minetest.register_craftitem("farming_super:grape_cluster_"..color, {
- description = "Grapes, "..color,
- -- inventory_image = "farming_super_grape_cluster_"..color..".png",
- inventory_image = "farming_super_grapes_ripe_"..color..".png",
- on_use = minetest.item_eat(4),
- groups = {flammable = 1},
- })
-
-
-
- minetest.register_decoration({
- name = "farming_super:grape_sapling_"..color,
- deco_type = "simple",
- place_on = {"default:desert_sand", "default:sand", "default:dry_dirt_with_dry_grass"},
- sidelen = 16,
- noise_params = {
- offset = -0.0003,
- scale = 0.0009,
- spread = {x = 200, y = 200, z = 200},
- seed = deco_seeds[gi],
- octaves = 3,
- persist = 0.6
- },
- biomes = {"desert_ocean", "savanna"},
- y_max = 30,
- y_min = 0,
- decoration = "farming_super:grape_sapling_"..color,
- param2 = 1,
- })
-
-
-
- -- grape products and crafts
- minetest.register_craftitem("farming_super:grape_juice_"..color, {
- description = "Grape Juice, "..color,
- inventory_image = "farming_super_grapes_juice_"..color..".png",
- on_use = minetest.item_eat(7, "vessels:glass_bottle"),
- groups = {flammable = 1},
- })
- local bunch = "farming_super:grape_cluster_"..color
- local juice = "farming_super:grape_juice_"..color
- minetest.register_craft({
- output = "farming_super:grape_juice_"..color,
- recipe = {
- {bunch, bunch, bunch},
- {bunch, "vessels:glass_bottle", bunch},
- {bunch, bunch, bunch},
- },
- })
-
-
- minetest.register_node("farming_super:grape_juice_barrel_"..color, {
- description = "Juice Barrel, "..color,
- tiles = {
- "default_wood.png^farming_super_barrel_bung.png",
- "default_wood.png",
- "default_wood.png^[transformR90^farming_super_barrel_rings.png",
- "default_wood.png^[transformR90^farming_super_barrel_rings.png",
- "default_wood.png^[transformR90^farming_super_barrel_rings.png",
- "default_wood.png^[transformR90^farming_super_barrel_rings.png"
- },
- paramtype2 = "facedir",
- -- inventory_image = "bitumen_oil_drum.png",
- groups = {
- cracky=2,
- choppy=2,
- oddly_breakable_by_hand=2,
- },
- paramtype = "light",
- drawtype = "nodebox",
- grape_color = color,
- node_box = {
- type = "fixed",
- fixed = {
- --11.25
- {-0.49, -0.5, -0.10, 0.49, 0.5, 0.10},
- {-0.10, -0.5, -0.49, 0.10, 0.5, 0.49},
- --22.5
- {-0.46, -0.5, -0.19, 0.46, 0.5, 0.19},
- {-0.19, -0.5, -0.46, 0.19, 0.5, 0.46},
- -- 33.75
- {-0.416, -0.5, -0.28, 0.416, 0.5, 0.28},
- {-0.28, -0.5, -0.416, 0.28, 0.5, 0.416},
- --45
- {-0.35, -0.5, -0.35, 0.35, 0.5, 0.35},
- },
- },
- selection_box = {
- type = "fixed",
- fixed = {
- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
- },
- },
- on_place = function(itemstack, placer, pointed_thing)
- minetest.set_node(pointed_thing.above, {name = "farming_super:grape_juice_barrel_"..color})
-
- local timer = minetest.get_node_timer(pointed_thing.above)
- timer:start(grape_speed.wine)
-
- itemstack:take_item(1)
- return itemstack
- end,
-
- on_timer = function(pos, elapsed)
- local node = minetest.get_node(pos)
- local color = minetest.registered_nodes[node.name].grape_color
- minetest.set_node(pos, {name = "farming_super:wine_barrel_"..color})
- end,
- })
-
- minetest.register_node("farming_super:wine_barrel_"..color, {
- description = "Wine Barrel, "..color,
- tiles = {
- "default_wood.png^farming_super_barrel_bung.png",
- "default_wood.png",
- "default_wood.png^[transformR90^farming_super_barrel_rings.png",
- "default_wood.png^[transformR90^farming_super_barrel_rings.png",
- "default_wood.png^[transformR90^farming_super_barrel_rings.png",
- "default_wood.png^[transformR90^farming_super_barrel_rings.png"
- },
- paramtype2 = "facedir",
- -- inventory_image = "bitumen_oil_drum.png",
- groups = {
- cracky=2,
- choppy=2,
- oddly_breakable_by_hand=2,
- },
- paramtype = "light",
- drawtype = "nodebox",
- grape_color = color,
- node_box = {
- type = "fixed",
- fixed = {
- --11.25
- {-0.49, -0.5, -0.10, 0.49, 0.5, 0.10},
- {-0.10, -0.5, -0.49, 0.10, 0.5, 0.49},
- --22.5
- {-0.46, -0.5, -0.19, 0.46, 0.5, 0.19},
- {-0.19, -0.5, -0.46, 0.19, 0.5, 0.46},
- -- 33.75
- {-0.416, -0.5, -0.28, 0.416, 0.5, 0.28},
- {-0.28, -0.5, -0.416, 0.28, 0.5, 0.416},
- --45
- {-0.35, -0.5, -0.35, 0.35, 0.5, 0.35},
- },
- },
- selection_box = {
- type = "fixed",
- fixed = {
- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
- },
- },
- stack_max = 1,
- })
-
- minetest.register_craft({
- output = "farming_super:grape_juice_barrel_"..color,
- recipe = {
- {juice, juice, juice},
- {juice, "farming_super:barrel", juice},
- {juice, juice, juice},
- },
- })
-
- end
- minetest.register_abm({
- label = "Grape Vine Leaf Regrowth",
- nodenames = {"group:grape_stem"},
- interval = grape_speed.leaf_regrowth,
- chance = 20,
- action = function(pos, node)
- pos.y = pos.y + 1
-
- local n = minetest.get_node(pos)
- if n.name == "air" then
-
- local color = minetest.registered_nodes[node.name].grape_color
- minetest.set_node(pos, {name = "farming_super:grape_leaves_"..color, param2 = 3})
- minetest.get_node_timer(pos):start(grape_speed.fruit + gr())
- end
- end,
- })
- minetest.register_abm({
- label = "Grape Vine Fruit",
- nodenames = {"group:grape_leaves_bare"},
- interval = 10,
- chance = 10,
- action = function(pos, node)
- local timer = minetest.get_node_timer(pos)
- if not timer:is_started() then
- timer:start(grape_speed.fruit + gr())
- end
-
- end,
- })
- minetest.register_abm({
- label = "Grape Vine Fruit",
- nodenames = {"group:grape_stem", "group:grape_cutting", "group:grape_sapling"},
- interval = 30,
- chance = 5,
- action = function(pos, node)
- local timer = minetest.get_node_timer(pos)
- if not timer:is_started() then
- timer:start(grape_speed.fruit + gr())
- end
-
- end,
- })
- minetest.register_abm({
- label = "Grape Leaf Disease Origin",
- nodenames = {"group:grape_healthy_leaves"},
- interval = 440,
- chance = 900,
- action = function(pos)
- local node = minetest.get_node(pos)
- local color = minetest.registered_nodes[node.name].grape_color
- minetest.set_node(pos, {name = "farming_super:grape_yellow_leaves_"..color, param2 = 3})
- minetest.get_node_timer(pos):start(grape_speed.fruit + gr())
- end,
- })
- minetest.register_abm({
- label = "Grape Leaf Disease Spread",
- nodenames = {"group:grape_yellow_leaves"},
- neighbors = {"group:grape_healthy_leaves"},
- interval = 20,
- chance = 30,
- action = function(pos)
- local node = minetest.get_node(pos)
- local color = minetest.registered_nodes[node.name].grape_color
- minetest.set_node(pos, {name = "farming_super:grape_yellow_leaves_"..color, param2 = 3})
- minetest.get_node_timer(pos):start(grape_speed.fruit + gr())
- end,
- })
|