sunflowers

master
runs 2022-04-09 13:50:11 +02:00
parent 022feb9b77
commit 5d6eb801be
60 changed files with 600 additions and 163 deletions

View File

@ -5,19 +5,24 @@ max_line_length = false
globals = {
"eat",
"bedz",
"door",
"farmz",
"flowers",
"furn",
"helper",
"items",
"minetest",
"modname",
"nodez",
"playerz",
"playerphysics",
"S",
"samz",
"sfinv",
"sound",
"stairs",
"svrz",
"tools",
"treez",
"wield3d",
"mapgen",

View File

@ -25,7 +25,12 @@
- License: This work is licensed under the Creative Commons 0 License.
- Site: https://freesound.org/people/amholma/sounds/344360/
## door_close.ogg
## door_close.ogg and door_blocked.ogg
- Author: BergsteinProd
- License: This work is licensed under the Attribution License.
- Site: https://freesound.org/people/BergsteinProd/sounds/577009/
## ouch.ogg
- Author: Under7dude
- License: This work is licensed under the Creative Commons 0 License.
- Site: https://freesound.org/people/Under7dude/sounds/163441/

View File

@ -203,7 +203,7 @@ local function sleep(pos, player)
await = true
end
end
minetest.show_formspec(player_name , "bedz:form", compose_formspec(player_name, await))
minetest.show_formspec(player_name, "bedz:form", compose_formspec(player_name, await))
end
local function use_bed(pos, player)
@ -264,7 +264,9 @@ local function place_bed(bed_name, placer, pointed_thing)
end
function bedz.register_bed(name, def)
local bed_name = modname..":"..name
minetest.register_node(bed_name, {
description = def.description,
inventory_image = def.inventory_image or "",
@ -310,6 +312,15 @@ function bedz.register_bed(name, def)
end
end
})
if def.recipe then
minetest.register_craft({
output = bed_name,
type = "shaped",
recipe = def.recipe
})
end
end
minetest.register_on_player_receive_fields(function(player, formname, fields)

View File

@ -10,11 +10,6 @@ bedz.register_bed("simple_bed", {
{-0.5, -0.5, -0.5, 0.5, 0.125, 1.5},
},
inventory_image = "bedz_simple_bed_inv.png",
})
minetest.register_craft({
output = "bedz:simple_bed",
type = "shaped",
recipe = {
{"group:wood", "",
"treez:stick"},{"treez:stick", "", ""},

View File

@ -10,7 +10,7 @@ minetest.register_node("door:invisible_top", {
},
},
tiles = {"blank.png"},
use_texture_alpha = true,
use_texture_alpha = "clip",
is_ground_content = false,
groups = {not_in_creative_inventory = 1},
})
@ -21,7 +21,7 @@ local function destroy_inv_top(pos)
end
local function is_door_on_right(pos, door_dir)
local up_vector = vector.new(0, 1, 0)
local up_vector = vector.new(0, 1, 0) --vertical y vector
local right_vector = vector.cross(up_vector, door_dir)
--local left_vector = - right_vector
local right_pos = vector.add(pos, right_vector)
@ -90,7 +90,12 @@ local function open_door(pos, node, clicker, door_name)
meta:set_int("door:facedir", node.param2)
meta:set_string("door:dir", open_dir_str)
meta:set_string("door:rotation", rotation)
return true
else
return false
end
else
return false
end
end
@ -118,6 +123,7 @@ function door.register_door(name, def)
wield_image = def.wield_image or def.inventory_image or "",
drawtype = "mesh",
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
mesh = "door.b3d",
selection_box = {
@ -133,7 +139,7 @@ function door.register_door(name, def)
},
},
tiles = def.tiles,
use_texture_alpha = true,
use_texture_alpha = "clip",
is_ground_content = false,
groups = {choppy = 2, door = 1},
stack_max = 1,
@ -152,7 +158,13 @@ function door.register_door(name, def)
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
open_door(pos, node, clicker, door_name)
if not open_door(pos, node, clicker, door_name) then
if clicker and minetest.is_player(clicker) then
local player_name = clicker:get_player_name()
sound.play("pos", pos, "door_blocked")
minetest.chat_send_player(player_name, S("Obstructed door!"))
end
end
end,
})
@ -189,7 +201,7 @@ function door.register_door(name, def)
drop = door_name,
tiles = def.tiles,
walkable = true,
use_texture_alpha = true,
use_texture_alpha = "clip",
is_ground_content = false,
groups = {choppy = 2, door = 1, not_in_creative_inventory = 1},
stack_max = 1,
@ -206,4 +218,12 @@ function door.register_door(name, def)
})
end
if def.recipe then
minetest.register_craft({
output = door_name,
type = "shaped",
recipe = def.recipe
})
end
end

View File

@ -1,5 +1,10 @@
door.register_door("apple_tree", {
description = "Apple Tree",
tiles = {"door_apple_tree.png"},
tiles = {"door_apple_tree.png", backface_culling = true},
inventory_image = "door_apple_tree_inv.png",
recipe = {
{"", "treez:apple_tree_wood",
""},{"treez:apple_tree_wood", "", ""},
{"", "", ""},
}
})

View File

@ -1,3 +1,4 @@
# textdomain: door
@1 Door=Puerta de @1
Apple Tree=manzano
Obstructed door!=¡Puerta obstruida!

3
mods/door/mod.conf Normal file
View File

@ -0,0 +1,3 @@
name = door
description = Doors!
depends = treez, helper

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 726 B

After

Width:  |  Height:  |  Size: 737 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 710 B

After

Width:  |  Height:  |  Size: 752 B

View File

@ -1,4 +1,4 @@
local S, modname = ...
local S = ...
-- Grow Timer
@ -81,7 +81,7 @@ farmz.hoe_use = function(itemstack, user, pointed_thing)
end
function farmz.register_hoe(name, def)
local hoe_name = modname..":"..name
local hoe_name = def.modname..":"..name
minetest.register_tool(hoe_name, {
description = def.description,
inventory_image = def.inventory_image,
@ -94,24 +94,94 @@ function farmz.register_hoe(name, def)
})
end
function farmz.register_plant(name, def)
local product_name = modname..":"..name
function farmz.register_seed(modname, name, description, product_name, seed_name, grow_time, sprout)
minetest.register_craftitem(product_name , {
description = S(def.description),
inventory_image = modname.."_"..name..".png",
groups = {fleshy = 3, flammable = 2, wheat = 1},
local seed_name = product_name.."_seed"
local seed_name_soil = seed_name.."_soil"
local seed_texture = modname.."_"..name.."_seed.png"
minetest.register_craftitem(seed_name, {
description = S("@1 Seed", S(description)),
inventory_image = seed_texture,
groups = {seed = 1},
on_use = function(itemstack, user, pointed_thing)
-- check if pointing at a node
if not(pointed_thing) or (pointed_thing.type ~= "node") then
return
end
local pos = pointed_thing.under
local node = minetest.get_node(pos)
-- return if any of the nodes is not registered
if not(minetest.registered_nodes[node.name]) then
return
end
if node.name == "farmz:plow" then
minetest.set_node(pos, {name = seed_name_soil})
itemstack:take_item(1)
start_grow(pos, grow_time)
end
return itemstack
end
})
minetest.register_node(seed_name_soil, {
description = S(description).." ".."("..S("Seed Soil")..")",
drawtype = "nodebox",
paramtype = "light",
walkable = false,
node_box = helper.nodebox.flat,
tiles = {"farmz_plow.png^"..seed_texture},
buildable_to = true,
groups = {crumbly = 3, dirt = 1, plow = 1, not_in_creative_inventory = 1},
sounds = sound.dirt(),
after_place_node = function(pos, placer, itemstack, pointed_thing)
start_grow(pos, def.grow_time)
end,
on_timer = function(pos)
local node_name = product_name
if sprout then
node_name = node_name .. "_sprout"
end
minetest.set_node(pos, {name = node_name})
start_grow(pos, grow_time)
return false
end,
after_destruct = function(pos, oldnode)
--destroy the soil under
local node = minetest.get_node_or_nil(pos)
if node and node.name == "air" then
remove_soil({x=pos.x, y=pos.y-1, z=pos.z})
end
end
})
return seed_name
end
function farmz.register_plant(name, def)
local product_name = def.modname..":"..name
for i = 1,2 do
local register
local description
local _plant_name
local texture
local drop
if i == 1 then
if not def.only_register_sprout then
minetest.register_craftitem(product_name , {
description = S(def.description),
inventory_image = def.modname.."_"..name..".png",
groups = def.groups,
})
_plant_name = product_name.."_plant"
texture = modname.."_"..name.."_plant.png"
texture = def.modname.."_"..name.."_plant.png"
description = S("@1 Plant", S(def.description))
if not def.drop then
local drop_number = def.drop_number or 1
@ -119,13 +189,19 @@ function farmz.register_plant(name, def)
else
drop = def.drop
end
register = true
else
register = false
end
else
_plant_name = product_name.."_sprout"
texture = modname.."_"..name.."_sprout.png"
texture = def.modname.."_"..name.."_sprout.png"
description = S("@1 Plant", S(def.description)).." ".."("..S("Sprout")..")"
drop = ""
register = true
end
if register then
minetest.register_node(_plant_name, {
description = description,
inventory_image = def.inventory_image or texture,
@ -155,7 +231,11 @@ function farmz.register_plant(name, def)
end,
on_timer = function(pos)
minetest.set_node(pos, {name = product_name.."_plant"})
local plant_name = product_name
if not def.only_register_sprout then
plant_name = plant_name .. "_plant"
end
minetest.set_node(pos, {name = plant_name})
return false
end,
@ -168,71 +248,17 @@ function farmz.register_plant(name, def)
end
})
end
local seed_name = product_name.."_seed"
local seed_name_soil = seed_name.."_soil"
local seed_texture = modname.."_"..name.."_seed.png"
minetest.register_craftitem(seed_name, {
description = S("@1 Seed", S(def.description)),
inventory_image = seed_texture,
groups = {seed = 1},
on_use = function(itemstack, user, pointed_thing)
-- check if pointing at a node
if not(pointed_thing) or (pointed_thing.type ~= "node") then
return
end
local pos = pointed_thing.under
local node = minetest.get_node(pos)
-- return if any of the nodes is not registered
if not(minetest.registered_nodes[node.name]) then
return
end
if node.name == "farmz:plow" then
minetest.set_node(pos, {name = seed_name_soil})
itemstack:take_item(1)
start_grow(pos, def.grow_time)
end
return itemstack
end
})
minetest.register_node(seed_name_soil, {
description = S(def.description).." ".."("..S("Seed Soil")..")",
drawtype = "nodebox",
paramtype = "light",
walkable = false,
node_box = helper.nodebox.flat,
tiles = {"farmz_plow.png^"..seed_texture},
buildable_to = true,
groups = {crumbly = 3, dirt = 1, plow = 1, not_in_creative_inventory = 1},
sounds = sound.dirt(),
after_place_node = function(pos, placer, itemstack, pointed_thing)
start_grow(pos, def.grow_time)
end,
on_timer = function(pos)
minetest.set_node(pos, {name = product_name.."_sprout"})
start_grow(pos, def.grow_time)
return false
end,
after_destruct = function(pos, oldnode)
--destroy the soil under
local node = minetest.get_node_or_nil(pos)
if node and node.name == "air" then
remove_soil({x=pos.x, y=pos.y-1, z=pos.z})
end
end
})
local seed_name = farmz.register_seed(def.modname, name, def.description, product_name, seed_name, def.grow_time,
true)
if def.craft then
local craft_name = modname..":"..def.craft.name
local craft_name = def.modname..":"..def.craft.name
minetest.register_craftitem(craft_name, {
description = S(def.craft.description),
inventory_image = modname.."_"..def.craft.name..".png",
inventory_image = def.modname.."_"..def.craft.name..".png",
groups = {flour = 1},
})
@ -241,9 +267,22 @@ function farmz.register_plant(name, def)
recipe[#recipe+1] = product_name
end
minetest.register_craft({
output = craft_name,
output = craft_name.." "..tostring((def.craft.output_amount or 1)),
type = "shapeless",
recipe = recipe,
})
end
if def.craft_seed then
local recipe = {}
for i = 1, (def.craft_seed.input_amount or 1) do
recipe[#recipe+1] = product_name
end
minetest.register_craft({
output = seed_name.." "..tostring((def.craft_seed.output_amount or 1)),
type = "shapeless",
recipe = recipe,
})
end
end

View File

@ -18,7 +18,7 @@ minetest.register_node("farmz:grass", {
sounds = sound:leaves(),
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16, 6 / 16},
fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, -5 / 16, 5 / 16},
},
drop = {
max_items = 1,

View File

@ -1,6 +1,7 @@
local S = ...
farmz.register_hoe("steel_Hoe" ,{
modname = "farmz",
description = S("Steel Hoe"),
inventory_image = "farmz_hoe_steel.png"
})

View File

@ -4,7 +4,7 @@ local S = minetest.get_translator(modname)
farmz = {}
assert(loadfile(modpath .. "/api.lua"))(S,modname)
assert(loadfile(modpath .. "/api.lua"))(S)
assert(loadfile(modpath .. "/food.lua"))(S)
assert(loadfile(modpath .. "/hoes.lua"))(S)
assert(loadfile(modpath .. "/grasses.lua"))(S)

View File

@ -7,5 +7,6 @@ Plowed Soil=Tierra arada
Seed Soil=Cultivo con semillas
Sprout=brote
Steel Hoe=Azada de hierro
Sunflower=girasol
Wheat=Trigo

View File

@ -1,14 +1,18 @@
local S = ...
farmz.register_plant("wheat", {
modname = "farmz",
description = "Wheat",
box = {-4/16, -0.5, -4/16, 4/16, 4/16, 4/16},
grow_time = 5,
drop_number = 2,
groups = {fleshy = 3, flammable = 2, wheat = 1},
craft = {
name = "flour",
description = "Flour",
input_amount = 4,
ouput_amount = 1,
}
output_amount = 1,
},
only_register_sprout = false,
})

View File

@ -1,15 +1,21 @@
S, modname = ...
-- Flower registration
local function register_flower_deco(name, deco)
if not(deco.noise_params) then
deco.noise_params = {
scale = 0.04
}
end
local flower_name = modname..":"..name
minetest.register_decoration({
name = "flowers:"..name,
decoration = "flowers:"..name,
deco_type = "simple",
name = flower_name,
decoration = flower_name,
deco_type = deco.type or "simple",
place_on = deco.place_on,
sidelen = 16,
noise_params = {
@ -23,6 +29,9 @@ local function register_flower_deco(name, deco)
biomes = deco.biomes,
y_max = deco.height.y_max,
y_min = deco.height.y_min,
schematic = deco.schematic,
flags = deco.flags or "",
place_offset_y = deco.place_offset_y or 0
})
end
@ -33,13 +42,13 @@ function flowers.register_flower(name, def)
def.groups.flora = 1
def.groups.attached_node = 1
local inventory_image = "flowers_" .. name
local inventory_image = modname.."_" .. name
if def.inv_img then
inventory_image = inventory_image .. "_inv"
end
minetest.register_node("flowers:" .. name, {
description = def.desc,
minetest.register_node(modname..":" .. name, {
description = S(def.desc),
drawtype = "plantlike",
waving = 1,
tiles = {"flowers_" .. name .. ".png"},
@ -61,3 +70,104 @@ function flowers.register_flower(name, def)
register_flower_deco(name, def.deco)
end
end
function flowers.register_tall_flower(name, def)
local flower_name = modname .. ":" .. name
local flower_name_top = flower_name .. "_top"
-- Common flowers' groups
def.groups.snappy = 3
def.groups.flower = 1
def.groups.flora = 1
def.groups.attached_node = 1
local groups_top = helper.table_shallowcopy(def.groups)
groups_top.not_in_creative_inventory = 1
minetest.register_node(flower_name_top, {
description = S(def.desc),
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {"flowers_"..name.."_top.png"},
inventory_image = "flowers_"..name.."_top_inv.png",
paramtype = "light",
walkable = true,
waving = 1,
groups = groups_top,
sounds = sound.leaves(),
drop = flower_name,
selection_box = {
type = "fixed",
fixed = def.box
},
after_destruct = function(pos, oldnode)
pos.y = pos.y - 1
local node = minetest.get_node_or_nil(pos)
if node and node.name == flower_name then
minetest.remove_node(pos)
end
end
})
minetest.register_node(flower_name, {
description = S(def.desc),
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {"flowers_"..name.."_bottom.png"},
inventory_image = "flowers_"..name.."_top.png",
wield_image = "flowers_"..name.."_top.png",
paramtype = "light",
walkable = true,
waving = 1,
groups = {snappy = 3, flammable = 3, flower =1, flora=1, attached_node = 1},
sounds = sound.leaves(),
selection_box = {
type = "fixed",
fixed = def.box
},
on_place = function(itemstack, placer, pointed_thing)
if not(pointed_thing.type) == "node" then
return
end
local pos_above = minetest.get_pointed_thing_position(pointed_thing, true)
local pos_sunflower_top = pos_above
pos_sunflower_top.y = pos_sunflower_top.y + 1
local node = minetest.get_node_or_nil(pos_sunflower_top)
if node and node.name == "air" then
pos_above.y = pos_above.y - 1
minetest.set_node(pos_above, {name = flower_name})
local player_name = placer and placer:get_player_name() or ""
if not (creative and creative.is_enabled_for
and creative.is_enabled_for(player_name)) then
itemstack:take_item()
end
return itemstack
end
end,
on_construct = function(pos)
pos.y = pos.y + 1
minetest.place_node(pos, {name = flower_name_top})
end,
after_destruct = function(pos, oldnode)
pos.y = pos.y + 1
local node = minetest.get_node_or_nil(pos)
if node and node.name == flower_name_top then
minetest.remove_node(pos)
end
end
})
if def.deco then
def.deco.schematic = {
size = {x = 1, y = 2, z = 1},
data = {
{name = flower_name}, {name = flower_name_top},
}
}
register_flower_deco(name, def.deco)
end
end

View File

@ -1,14 +1,13 @@
local S = ...
flowers.list = {
{
name = "rose_bush",
def = {
desc = S("Rose Bush"),
desc = "Rose Bush",
box = {-2/16, -0.5, -2/16, 2/16, 5/16, 2/16},
groups = {color_red = 1, flammable = 1},
inv_img = false,
deco = {
type = "simple",
place_on = "nodez:dirt_with_grass",
seed = 345,
biomes = {"forest"},
@ -22,11 +21,12 @@ flowers.list = {
{
name = "rose",
def = {
desc = S("Rose"),
desc = "Rose",
box = {-2/16, -0.5, -2/16, 2/16, 4/16, 2/16},
groups = {color_red = 1, flammable = 1},
inv_img = false,
deco = {
type = "simple",
place_on = "nodez:dirt_with_grass",
seed = 345,
biomes = {"forest"},
@ -40,11 +40,12 @@ flowers.list = {
{
name = "daisy",
def = {
desc = S("Daisy"),
desc = "Daisy",
box = {-2/16, -0.5, -2/16, 2/16, 5/16, 2/16},
groups = {color_white = 1, flammable = 1},
inv_img = false,
deco = {
type = "simple",
place_on = "nodez:dirt_with_grass",
seed = 1528,
biomes = {"forest"},
@ -55,11 +56,12 @@ flowers.list = {
{
name = "tulip",
def = {
desc = S("Tulip"),
desc = "Tulip",
box = {-2/16, -0.5, -2/16, 2/16, 2/16, 2/16},
groups = {color_yellow = 1, flammable = 1},
inv_img = false,
deco = {
type = "simple",
place_on = "nodez:dirt_with_grass",
seed = 7898,
biomes = {"forest"},
@ -70,11 +72,12 @@ flowers.list = {
{
name = "pansy",
def = {
desc = S("Pansy"),
desc = "Pansy",
box = {-2/16, -0.5, -2/16, 2/16, 2/16, 2/16},
groups = {color_pink = 1, flammable = 1},
inv_img = false,
deco = {
type = "simple",
place_on = "nodez:dirt_with_grass",
seed = 734,
biomes = {"forest"},
@ -85,11 +88,12 @@ flowers.list = {
{
name = "gerbera",
def = {
desc = S("Gerbera Daisy"),
desc = "Gerbera Daisy",
box = {-4/16, -8/16, -4/16, 4/16, -3/16, 4/16},
groups = {color_orange = 1, flammable = 1},
inv_img = false,
deco = {
type = "simple",
place_on = "nodez:dirt_with_grass",
seed = 5770,
biomes = {"forest"},
@ -100,11 +104,12 @@ flowers.list = {
{
name = "lavender",
def = {
desc = S("Lavender"),
desc = "Lavender",
box = {-4/16, -8/16, -4/16, 4/16, -3/16, 4/16},
groups = {color_violet = 1, flammable = 1},
inv_img = false,
deco = {
type = "simple",
place_on = "nodez:dirt_with_grass",
seed = 230,
biomes = {"forest"},
@ -115,11 +120,12 @@ flowers.list = {
{
name = "dandellion",
def = {
desc = S("Dandellion"),
desc = "Dandellion",
box = {-4/16, -8/16, -4/16, 4/16, -3/16, 4/16},
groups = {color_yellow = 1, flammable = 1},
inv_img = false,
deco = {
type = "simple",
place_on = "nodez:dirt_with_grass",
seed = 3946,
biomes = {"forest"},
@ -130,11 +136,12 @@ flowers.list = {
{
name = "dahlia",
def = {
desc = S("Dahlia"),
box = {-2/16, -8/16, -2/16, 2/16, 3/16, 2/16},
desc = "Dahlia",
box = {-2/16, -8/16, -2/16, 2/16, -0/16, 2/16},
groups = {color_red = 1, flammable = 1},
inv_img = false,
deco = {
type = "simple",
place_on = "nodez:dirt_with_grass",
seed = 356,
biomes = {"forest"},
@ -148,11 +155,12 @@ flowers.list = {
{
name = "zinnia",
def = {
desc = S("Zinnia"),
desc = "Zinnia",
box = {-4/16, -8/16, -4/16, 4/16, -2/16, 4/16},
groups = {color_red = 1, flammable = 1},
inv_img = false,
deco = {
type = "simple",
place_on = "nodez:dirt_with_grass",
seed = 993,
biomes = {"forest"},
@ -166,3 +174,36 @@ for _, item in pairs(flowers.list) do
flowers.register_flower(item.name, item.def)
end
--Sunflower
flowers.register_tall_flower("sunflower", {
desc = "Sunflower",
box = {-0.25, -0.5, -0.25, 0.1875, 0.375, 0.1875},
groups = {color_yellow = 1, flammable = 1},
inv_img = false,
deco = {
type = "schematic",
place_on = "nodez:dirt_with_grass",
seed = 521,
noise_params = {
scale = 0.03,
},
biomes = {"forest"},
height = {y_max = 128, y_min = 1},
flags = "place_center_x, place_center_z, force_placement",
place_offset_y = 1
}
})
farmz.register_plant("sunflower", {
modname = "flowers",
description = "Sunflower",
box = {-4/16, -0.5, -4/16, 4/16, 4/16, 4/16},
grow_time = 5,
drop_number = 1,
only_register_sprout = true,
craft_seed = {
input_amount = 1,
output_amount = 4,
},
})

View File

@ -4,5 +4,5 @@ local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)
local S = minetest.get_translator(modname)
assert(loadfile(modpath .. "/api.lua"))()
assert(loadfile(modpath .. "/flowers.lua"))(S)
assert(loadfile(modpath .. "/api.lua"))(S, modname)
assert(loadfile(modpath .. "/flowers.lua"))()

View File

@ -5,5 +5,6 @@ Daisy Gerbera=Margarita Gerbera
Lavender=Lavanda
Rose=Rosa
Rose Bush=Rosal
Sunflower=Girasol
Tulip=Tulipán
Zinnia=Zinnia

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -1,6 +1,7 @@
helper = {}
helper.vector = {}
helper.nodebox = {}
helper.table = {}
function helper.in_group(pos, group)
local node = minetest.get_node_or_nil(pos)
@ -56,6 +57,21 @@ function helper.node_is_air(pos, offset)
end
end
function helper.node_is_water(pos, offset)
if offset then
if offset == "above" then
pos = vector.new(pos.x, pos.y+1, pos.z)
end
end
local node = minetest.get_node_or_nil(pos)
if node and minetest.registered_nodes[node.name]["liquidtype"] == "source" or
minetest.registered_nodes[node.name]["liquidtype"] == "flowing" then
return true
else
return false
end
end
--Direction
function helper.dir_to_compass(dir)
@ -94,3 +110,29 @@ helper.nodebox.plant = {
{0, -0.5, -0.5, 0, 0.5, 0.5},
}
}
--Tables
function helper.table_shallowcopy(original)
local copy = {}
for key, value in pairs(original) do
copy[key] = value
end
return copy
end
function helper.table_deepcopy(t) -- deep-copy a table
if type(t) ~= "table" then return t end
local meta = getmetatable(t)
local target = {}
for k, v in pairs(t) do
if type(v) == "table" then
target[k] = helper.table_deepcopy(v)
else
target[k] = v
end
end
setmetatable(target, meta)
return target
end

7
mods/items/init.lua Normal file
View File

@ -0,0 +1,7 @@
items = {}
local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)
local S = minetest.get_translator(modname)
assert(loadfile(modpath .. "/vessels.lua"))(S, modname)

View File

@ -0,0 +1,3 @@
# textdomain: items
Empty Flask=Frasco vacío
Flask with water=Frasco de agua

2
mods/items/mod.conf Normal file
View File

@ -0,0 +1,2 @@
name = items
description = Some misc items

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

85
mods/items/vessels.lua Normal file
View File

@ -0,0 +1,85 @@
S, modname = ...
function items.register_vessel(name, def)
vessel_name = modname..":"..name
minetest.register_node(vessel_name, {
description = S(def.description),
drawtype = "plantlike",
tiles = def.tiles,
paramtype = "light",
paramtype2 = "glasslikeliquidlevel",
param2 = 50,
sunlight_propagates = true,
use_texture_alpha = "blend",
inventory_image = def.inventory_image,
wield_image = def.wield_image or def.inventory_image or "",
is_ground_content = false,
walkable = true,
selection_box = {
type = "fixed",
fixed = def.selection_box
},
stack_max = 10,
groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
drop = def.drop,
sounds = sound.glass(),
on_use = function(itemstack, user, pointed_thing)
if def.replace_item then
local pos = pointed_thing.above
if helper.node_is_water(pos) then
local inv = user:get_inventory()
if inv:room_for_item("main", def.replace_item) then
itemstack:take_item(1)
inv:add_item("main", def.replace_item)
end
end
return itemstack
end
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if not clicker:is_player() then
return
end
local inv = clicker:get_inventory()
if inv:room_for_item("main", vessel_name) then
if itemstack:get_name() == vessel_name or itemstack:get_name() == "" then
itemstack:add_item(vessel_name)
else
inv:add_item("main", vessel_name)
end
minetest.remove_node(pos)
end
return itemstack
end
})
if def.craft then
minetest.register_craft( {
output = def.craft.output,
recipe = def.craft.recipe,
})
end
end
--Empty Flask
items.register_vessel("empty_flask", {
description = "Empty Flask",
tiles= {"items_empty_flask.png"},
inventory_image = "items_empty_flask_inv.png",
selection_box = {-3/16, -8/16, -3/16, 3/16, 5/16, 3/16},
drop = "",
replace_item = "items:flask_with_water"
})
items.register_vessel("flask_with_water", {
description = "Flask with water",
tiles= {"items_flask_with_water.png"},
inventory_image = "items_flask_with_water_inv.png",
selection_box = {-3/16, -8/16, -3/16, 3/16, 5/16, 3/16},
drop = ""
})

View File

@ -118,3 +118,21 @@ minetest.register_craft({
"nodez:clay_brick", "nodez:clay_brick",
}
})
--Adobe
minetest.register_node("nodez:adobe", {
description = S("Adobe"),
tiles ={"nodez_adobe.png"},
groups = {crumbly=2},
sounds = sound.dirt(),
})
minetest.register_craft({
output = "nodez:adobe",
type = "shapeless",
recipe = {
"nodez:clay", "nodez:sand",
"farmz:wheat"
}
})

View File

@ -1,4 +1,5 @@
# textdomain: nodez
Adobe=Adobe
Clay=Arcilla
Clay Brick=Ladrillo
Clay Bricks=Bloque de ladrillos

Binary file not shown.

Before

Width:  |  Height:  |  Size: 543 B

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 655 B

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 B

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -1,6 +1,6 @@
local S = ...
local WATER_ALPHA = "^[opacity:" .. 210
local WATER_ALPHA = "^[opacity:" .. 230
local WATER_VISC = 1
minetest.register_node("nodez:water_source", {
@ -37,10 +37,26 @@ minetest.register_node("nodez:water_flowing", {
waving = 3,
tiles = {"nodez_water_flowing.png"},
special_tiles = {
{name = "nodez_water_flowing.png"..WATER_ALPHA,
backface_culling = false},
{name = "nodez_water_flowing.png"..WATER_ALPHA,
backface_culling = false},
{
name = "nodez_water_flowing.png"..WATER_ALPHA,
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.5,
},
},
{
name = "nodez_water_flowing.png"..WATER_ALPHA,
backface_culling = true,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.5,
},
},
},
use_texture_alpha = "blend",
paramtype = "light",
@ -121,6 +137,8 @@ minetest.register_node("nodez:river_water_flowing", {
sounds = sound.water(),
})
--Ice
minetest.register_node("nodez:ice", {
description = S("Ice"),
tiles = {"nodez_ice.png"},

View File

@ -71,6 +71,22 @@ function playerz.get_gender(player)
return player:get_meta():get_string("gender")
end
function playerz.is_male(player)
if playerz.get_gender(player) == "male" then
return true
else
return false
end
end
function playerz.is_female(player)
if playerz.get_gender(player) == "female" then
return true
else
return false
end
end
function playerz.get_gender_model(gender)
local model = "character.b3d"
return model

12
mods/playerz/damage.lua Normal file
View File

@ -0,0 +1,12 @@
minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
if playerz.is_dead(player) then
return true --do nothing
end
playerz.change_hp(player, -damage, "punch")
local ouch = "ouch"
if playerz.is_female(player) then
ouch = "ouch".."_female"
end
sound.play("player", player, ouch)
return true
end)

View File

@ -5,6 +5,7 @@ local modpath = minetest.get_modpath(modname)
dofile(modpath .. "/api.lua")
dofile(modpath .. "/base_texture.lua")
dofile(modpath .. "/damage.lua")
dofile(modpath .. "/cloths.lua")
dofile(modpath .. "/freeze.lua")
dofile(modpath .. "/hunger.lua")
@ -26,7 +27,7 @@ playerz.register_model("character.b3d", {
swin_and_mine = {x = 306, y = 330},
swin_stand = {x = 232, y = 232},
},
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
collisionbox = {-0.28125, 0.0, -0.28125, 0.28125, 1.5, 0.28125},
stepheight = 0.6,
eye_height = 1.47,
})
@ -65,4 +66,7 @@ minetest.register_on_joinplayer(function(player)
player:hud_set_hotbar_image("playerz_hotbar.png")
player:hud_set_hotbar_selected_image("playerz_hotbar_selected.png")
playerz.count = playerz.count + 1
--Set Sky
player:set_sky({sky_color={day_sky="#6ac4c4", day_horizon="#84d1d1"}})
end)

Binary file not shown.

Binary file not shown.

View File

@ -368,8 +368,8 @@ minetest.register_node("signs:sign", {
node_box = {
type = "fixed",
fixed = {
{-0.375, -0.125, -0.063, 0.375, 0.5, 0.063},
{-0.063, -0.5, -0.063, 0.063, -0.125, 0.063}
{-6/16, -2/16, -1/16, 6/16, 8/16, 1/16},
{-1/16, -8/16, -1/16, 1/16, -2/16, 1/16}
}
},
groups = {oddly_breakable_by_hand = 1, choppy = 3, attached_node = 1},
@ -381,13 +381,13 @@ minetest.register_node("signs:sign", {
})
minetest.register_node("signs:wall_sign", {
tiles = {"signs_wood.png"},
tiles = {"signs_wood_wall.png"},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "wallmounted",
node_box = {
type = "wallmounted",
wall_side = {-0.5, -0.313, -0.438, -0.438, 0.313, 0.438}
wall_side = {-8/16, -5/16, -7/16, -7/16, 5/16, 7/16}
},
drop = "signs:sign",
walkable = false,

View File

@ -1,4 +1,4 @@
# textdomain: signs
Sign=Cartel
Enter your text=Introduce tu texto
Enter your text:=Introduce tu texto:
Save=Guardar

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

View File

@ -3,6 +3,8 @@ Apple Wood Stair=Escalera de manzano
Apple Wood Slab=Losa de manzano
Cherry Wood Stair=Escalera de cerezo
Cherry Wood Slab=Losa de cerezo
Cherry Wood Stair=Escalera de castaño
Cherry Wood Slab=Losa de castaño
Cobblestone Stair=Escalera de empedrado
Cobblestone Slab=Losa de empedrado
Sandstone Stair=Escalera de arenisca

View File

@ -41,3 +41,11 @@ stairs.register_stair_and_slab("cherry_tree", {
desc_stair = S("Cherry Wood Stair"),
desc_slab = S("Cherry Wood Slab")
})
stairs.register_stair_and_slab("chestnut_tree", {
recipeitem = "treez:chestnut_tree_wood",
groups = {choppy = 2},
images = {"treez_chestnut_tree_wood.png"},
desc_stair = S("Chestnut Wood Stair"),
desc_slab = S("Chestnut Wood Slab")
})

View File

@ -12,6 +12,7 @@ minetest.register_tool("tools:axe_stone", {
groupcaps={
choppy={times={[2]=1.00, [3]=0.60}, uses=60, maxlevel=0},
},
damage_groups = {fleshy=3},
},
})
@ -23,5 +24,6 @@ minetest.register_tool("tools:axe_steel", {
groupcaps={
choppy={times={[1]=2.00, [2]=0.80, [3]=0.40}, uses=90, maxlevel=0},
},
damage_groups = {fleshy=5},
},
})

View File

@ -4,8 +4,7 @@ if minetest.settings:get_bool("creative_mode") then
local digtime = 42
local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 256}
minetest.register_item(":", {
type = "none",
minetest.register_tool(":", {
wield_image = "wieldhand.png",
wield_scale = {x = 1, y = 1, z = 2.5},
range = 10,
@ -26,8 +25,7 @@ if minetest.settings:get_bool("creative_mode") then
}
})
else
minetest.register_item(":", {
type = "none",
minetest.register_tool(":", {
wield_image = "wieldhand.png",
wield_scale = {x = 1, y = 1, z = 2.5},
tool_capabilities = {

View File

@ -14,7 +14,7 @@ minetest.register_tool("tools:pick_mese", {
choppy={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255},
dig_immediate={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255},
},
damage_groups = {fleshy=100},
damage_groups = {fleshy=3},
},
})
@ -30,5 +30,6 @@ minetest.register_tool("tools:pick_steel", {
groupcaps={
cracky={times={[1]=4.00, [2]=1.60, [3]=1.00}, uses=90, maxlevel=0}
},
damage_groups = {fleshy=2},
},
})

BIN
mods/tools/textures/wieldhand.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 619 B

After

Width:  |  Height:  |  Size: 608 B

View File

@ -7,30 +7,6 @@ local rx = -90
local rz = 90
wield3d.location = {
["default:torch"] = {bone, pos, {x=rx, y=180, z=rz}, scale},
["default:sapling"] = {bone, pos, {x=rx, y=180, z=rz}, scale},
["flowers:dandelion_white"] = {bone, pos, {x=rx, y=180, z=rz}, scale},
["flowers:dandelion_yellow"] = {bone, pos, {x=rx, y=180, z=rz}, scale},
["flowers:geranium"] = {bone, pos, {x=rx, y=180, z=rz}, scale},
["flowers:rose"] = {bone, pos, {x=rx, y=180, z=rz}, scale},
["flowers:tulip"] = {bone, pos, {x=rx, y=180, z=rz}, scale},
["flowers:viola"] = {bone, pos, {x=rx, y=180, z=rz}, scale},
["default:shovel_wood"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["default:shovel_stone"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["default:shovel_steel"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["default:shovel_bronze"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["default:shovel_mese"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["default:shovel_diamond"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["bucket:bucket_empty"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["bucket:bucket_water"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["bucket:bucket_lava"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["screwdriver:screwdriver"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["screwdriver:screwdriver1"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["screwdriver:screwdriver2"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["screwdriver:screwdriver3"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["screwdriver:screwdriver4"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["vessels:glass_bottle"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["vessels:drinking_glass"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
["vessels:steel_bottle"] = {bone, pos, {x=rx, y=135, z=rz}, scale},
--["default:torch"] = {bone, pos, {x=rx, y=180, z=rz}, scale},
}