From 0816951ffe654127b89c181804e321dd3b247946 Mon Sep 17 00:00:00 2001 From: LeMagnesium Date: Sat, 27 Jun 2015 18:50:21 +0200 Subject: [PATCH] Updated MinetestForFun Game - Merged listring, not handled by server yet! --- minetestforfun_game/mods/creative/init.lua | 4 + minetestforfun_game/mods/default/furnace.lua | 4 + minetestforfun_game/mods/default/nodes.lua | 1 + .../sounds/default_place_node_hard.1.ogg | Bin 8588 -> 6578 bytes minetestforfun_game/mods/farming/API.txt | 28 ++ minetestforfun_game/mods/farming/api.lua | 303 ++++++++++++++++++ minetestforfun_game/mods/farming/nodes.lua | 156 +++++++++ minetestforfun_game/mods/vessels/init.lua | 2 + 8 files changed, 498 insertions(+) create mode 100755 minetestforfun_game/mods/farming/API.txt create mode 100755 minetestforfun_game/mods/farming/api.lua create mode 100755 minetestforfun_game/mods/farming/nodes.lua diff --git a/minetestforfun_game/mods/creative/init.lua b/minetestforfun_game/mods/creative/init.lua index 014694fa..8747d3dd 100755 --- a/minetestforfun_game/mods/creative/init.lua +++ b/minetestforfun_game/mods/creative/init.lua @@ -87,6 +87,10 @@ creative_inventory.set_creative_formspec = function(player, start_i, pagenum) "label[2.0,6.55;"..tostring(pagenum).."/"..tostring(pagemax).."]".. "button[0.3,6.5;1.6,1;creative_prev;<<]".. "button[2.7,6.5;1.6,1;creative_next;>>]".. + "listring[current_player;main]".. + "listring[current_player;craft]".. + "listring[current_player;main]".. + "listring[detached:creative;main]".. "label[5,1.5;Trash:]".. "list[detached:creative_trash;main;5,2;1,1;]".. default.get_hotbar_bg(5,3.5) diff --git a/minetestforfun_game/mods/default/furnace.lua b/minetestforfun_game/mods/default/furnace.lua index 6a5105e8..0a41b0a7 100755 --- a/minetestforfun_game/mods/default/furnace.lua +++ b/minetestforfun_game/mods/default/furnace.lua @@ -18,6 +18,10 @@ local function active_formspec(fuel_percent, item_percent) "list[current_name;dst;4.75,0.96;2,2;]".. "list[current_player;main;0,4.25;8,1;]".. "list[current_player;main;0,5.5;8,3;8]".. + "listring[current_name;dst]".. + "listring[current_player;main]".. + "listring[current_name;src]".. + "listring[current_player;main]".. default.get_hotbar_bg(0, 4.25) return formspec end diff --git a/minetestforfun_game/mods/default/nodes.lua b/minetestforfun_game/mods/default/nodes.lua index e824753a..0cbb5e96 100755 --- a/minetestforfun_game/mods/default/nodes.lua +++ b/minetestforfun_game/mods/default/nodes.lua @@ -1824,6 +1824,7 @@ minetest.register_node("default:chest_locked", { on_blast = function() end, }) + default.bookshelf_formspec = "size[8,7;]" .. default.gui_slots .. diff --git a/minetestforfun_game/mods/default/sounds/default_place_node_hard.1.ogg b/minetestforfun_game/mods/default/sounds/default_place_node_hard.1.ogg index 76eecf97699beb91e01e06c890befce64dd5d81a..9f97facad5abc48e4f2852b952fea91a8931cd32 100755 GIT binary patch delta 5139 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 SiogH*QVWl_uE5V-!2bdF#t$_B literal 8588 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 LtT=s+ipGBdL&i=# diff --git a/minetestforfun_game/mods/farming/API.txt b/minetestforfun_game/mods/farming/API.txt new file mode 100755 index 00000000..171c3c38 --- /dev/null +++ b/minetestforfun_game/mods/farming/API.txt @@ -0,0 +1,28 @@ +farming.register_hoe(name, hoe definition) + -> Register a new hoe, see [hoe definition] + +farming.register_plant(name, Plant definition) + -> Register a new growing plant, see [Plant definition] + +Hoe Definition +{ + description = "", -- Description for tooltip + inventory_image = "unknown_item.png", -- Image to be used as wield- and inventory image + max_uses = 30, -- Uses until destroyed + material = "", -- Material for recipes + recipe = { -- Craft recipe, if material isn't used + {"air", "air", "air"}, + {"", "group:stick"}, + {"", "group:stick"}, + } +} + +Plant definition +{ + description = "", -- Description of seed item + inventory_image = "unknown_item.png", -- Image to be used as seed's wield- and inventory image + steps = 8, -- How many steps the plant has to grow, until it can be harvested + ^ Always provide a plant texture for each step, format: modname_plantname_i.png (i = stepnumber) + minlight = 13, -- Minimum light to grow + maxlight = default.LIGHT_MAX -- Maximum light to grow +} \ No newline at end of file diff --git a/minetestforfun_game/mods/farming/api.lua b/minetestforfun_game/mods/farming/api.lua new file mode 100755 index 00000000..932732db --- /dev/null +++ b/minetestforfun_game/mods/farming/api.lua @@ -0,0 +1,303 @@ +-- Wear out hoes, place soil +-- TODO Ignore group:flower +farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return + end + if pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + 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] then + return + end + if not minetest.registered_nodes[above.name] then + return + end + + -- check if the node above the pointed thing is air + if above.name ~= "air" then + return + end + + -- check if pointing at soil + if minetest.get_item_group(under.name, "soil") ~= 1 then + return + end + + -- check if (wet) soil defined + local regN = minetest.registered_nodes + if regN[under.name].soil == nil or regN[under.name].soil.wet == nil or regN[under.name].soil.dry == nil then + return + end + + -- turn the node into soil, wear out item and play sound + minetest.set_node(pt.under, {name = regN[under.name].soil.dry}) + 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 + +-- Register new hoes +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", ""} + } + }) + -- Reverse Recipe + minetest.register_craft({ + output = name:sub(2), + recipe = { + {"", def.material, def.material}, + {"", "group:stick", ""}, + {"", "group:stick", ""} + } + }) + end +end + +-- Seed placement +farming.place_seed = function(itemstack, placer, pointed_thing, plantname) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return + end + if pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + local above = minetest.get_node(pt.above) + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return + end + if not minetest.registered_nodes[above.name] then + return + end + + -- check if pointing at the top of the node + if pt.above.y ~= pt.under.y+1 then + return + end + + -- check if you can replace the node above the pointed node + if not minetest.registered_nodes[above.name].buildable_to then + return + end + + -- check if pointing at soil + if minetest.get_item_group(under.name, "soil") < 2 then + return + end + + -- add the node and remove 1 item from the itemstack + minetest.add_node(pt.above, {name = plantname, param2 = 1}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack +end + +-- Register plants +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 + if not def.minlight then + def.minlight = 1 + end + if not def.maxlight then + def.maxlight = 14 + end + if not def.fertility then + def.fertility = {} + end + + -- Register seed + local g = {seed = 1, snappy = 3, attached_node = 1} + for k, v in pairs(def.fertility) do + g[v] = 1 + end + 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 = g, + 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}, + }, + fertility = def.fertility, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":seed_" .. pname) + 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 nodegroups = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1} + nodegroups[pname] = i + minetest.register_node(mname .. ":" .. pname .. "_" .. i, { + drawtype = "plantlike", + waving = 1, + tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, + paramtype = "light", + walkable = false, + buildable_to = true, + drop = drop, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = nodegroups, + sounds = default.node_sound_leaves_defaults(), + }) + end + + -- Growing ABM + minetest.register_abm({ + nodenames = {"group:" .. pname, "group:seed"}, + neighbors = {"group:soil"}, + interval = 90, + chance = 2, + action = function(pos, node) + local plant_height = minetest.get_item_group(node.name, pname) + + -- return if already full grown + if plant_height == def.steps then + return + end + + local node_def = minetest.registered_items[node.name] or nil + + -- grow seed + if minetest.get_item_group(node.name, "seed") and node_def.fertility then + local can_grow = false + local soil_node = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) + if not soil_node then + return + end + for _, v in pairs(node_def.fertility) do + if minetest.get_item_group(soil_node.name, v) ~= 0 then + can_grow = true + end + end + if can_grow then + minetest.set_node(pos, {name = node.name:gsub("seed_", "") .. "_1"}) + end + return + end + + -- check if on wet soil + pos.y = pos.y - 1 + local n = minetest.get_node(pos) + if minetest.get_item_group(n.name, "soil") < 3 then + return + end + pos.y = pos.y + 1 + + -- check light + local ll = minetest.get_node_light(pos) + + if not ll or ll < def.minlight or ll > def.maxlight then + return + end + + -- grow + minetest.set_node(pos, {name = mname .. ":" .. pname .. "_" .. plant_height + 1}) + end + }) + + -- Return + local r = { + seed = mname .. ":seed_" .. pname, + harvest = mname .. ":" .. pname + } + return r +end diff --git a/minetestforfun_game/mods/farming/nodes.lua b/minetestforfun_game/mods/farming/nodes.lua new file mode 100755 index 00000000..f7b7cbf6 --- /dev/null +++ b/minetestforfun_game/mods/farming/nodes.lua @@ -0,0 +1,156 @@ +minetest.override_item("default:dirt", { + groups = {crumbly=3,soil=1}, + soil = { + base = "default:dirt", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:dirt_with_grass", { + groups = {crumbly=3,soil=1}, + soil = { + base = "default:dirt_with_grass", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.register_node("farming:soil", { + description = "Soil", + tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, + drop = "default:dirt", + groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1}, + sounds = default.node_sound_dirt_defaults(), + soil = { + base = "default:dirt", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.register_node("farming:soil_wet", { + description = "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, wet = 1, grassland = 1, field = 1}, + sounds = default.node_sound_dirt_defaults(), + soil = { + base = "default:dirt", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:desert_sand", { + groups = {crumbly=3, falling_node=1, sand=1, soil = 1}, + soil = { + base = "default:desert_sand", + dry = "farming:desert_sand_soil", + wet = "farming:desert_sand_soil_wet" + } +}) +minetest.register_node("farming:desert_sand_soil", { + description = "Desert Sand Soil", + drop = "default:desert_sand", + tiles = {"farming_desert_sand_soil.png", "default_desert_sand.png"}, + groups = {crumbly=3, not_in_creative_inventory = 1, falling_node=1, sand=1, soil = 2, desert = 1, field = 1}, + sounds = default.node_sound_sand_defaults(), + soil = { + base = "default:desert_sand", + dry = "farming:desert_sand_soil", + wet = "farming:desert_sand_soil_wet" + } +}) + +minetest.register_node("farming:desert_sand_soil_wet", { + description = "Wet Desert Sand Soil", + drop = "default:desert_sand", + tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"}, + groups = {crumbly=3, falling_node=1, sand=1, not_in_creative_inventory=1, soil=3, wet = 1, desert = 1, field = 1}, + sounds = default.node_sound_sand_defaults(), + soil = { + base = "default:desert_sand", + dry = "farming:desert_sand_soil", + wet = "farming:desert_sand_soil_wet" + } +}) + +minetest.register_node("farming:straw", { + description = "Straw", + tiles = {"farming_straw.png"}, + is_ground_content = false, + groups = {snappy=3, flammable=4}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_abm({ + nodenames = {"group:field"}, + interval = 15, + chance = 4, + action = function(pos, node) + local n_def = minetest.registered_nodes[node.name] or nil + local wet = n_def.soil.wet or nil + local base = n_def.soil.base or nil + local dry = n_def.soil.dry or nil + if not n_def or not n_def.soil or not wet or not base or not dry then + return + end + + pos.y = pos.y + 1 + local nn = minetest.get_node_or_nil(pos) + if not nn or not nn.name then + return + end + local nn_def = minetest.registered_nodes[nn.name] or nil + pos.y = pos.y - 1 + + if nn_def and nn_def.walkable and minetest.get_item_group(nn.name, "plant") == 0 then + minetest.set_node(pos, {name = base}) + return + end + -- check if there is water nearby + local wet_lvl = minetest.get_item_group(node.name, "wet") + if minetest.find_node_near(pos, 3, {"group:water"}) then + -- if it is dry soil and not base node, turn it into wet soil + if wet_lvl == 0 then + minetest.set_node(pos, {name = wet}) + end + else + -- only turn back if there are no unloaded blocks (and therefore + -- possible water sources) nearby + if not minetest.find_node_near(pos, 3, {"ignore"}) then + -- turn it back into base if it is already dry + if wet_lvl == 0 then + -- only turn it back if there is no plant/seed on top of it + if minetest.get_item_group(nn.name, "plant") == 0 and minetest.get_item_group(nn.name, "seed") == 0 then + minetest.set_node(pos, {name = base}) + end + + -- if its wet turn it back into dry soil + elseif wet_lvl == 1 then + minetest.set_node(pos, {name = dry}) + end + end + end + end, +}) + + +for i = 1, 5 do + minetest.override_item("default:grass_"..i, {drop = { + max_items = 1, + items = { + {items = {'farming:seed_wheat'},rarity = 5}, + {items = {'default:grass_1'}}, + } + }}) +end + +minetest.override_item("default:junglegrass", {drop = { + max_items = 1, + items = { + {items = {'farming:seed_cotton'},rarity = 8}, + {items = {'default:junglegrass'}}, + } +}}) diff --git a/minetestforfun_game/mods/vessels/init.lua b/minetestforfun_game/mods/vessels/init.lua index 4b7ccf04..b5dabc1b 100755 --- a/minetestforfun_game/mods/vessels/init.lua +++ b/minetestforfun_game/mods/vessels/init.lua @@ -9,6 +9,8 @@ local vessels_shelf_formspec = "list[context;vessels;0,0.3;8,2;]".. "list[current_player;main;0,2.85;8,1;]".. "list[current_player;main;0,4.08;8,3;8]".. + "listring[context;vessels]".. + "listring[current_player;main]".. default.get_hotbar_bg(0,2.85) minetest.register_node("vessels:shelf", {