master
root 2022-04-04 23:52:51 +02:00
parent dfb4dbd496
commit 022feb9b77
38 changed files with 378 additions and 13 deletions

View File

@ -19,3 +19,13 @@
- Author: InspectorJ
- License: This work is licensed under the Attribution License.
- Site: https://freesound.org/people/InspectorJ/sounds/412068/
## door_open.ogg
- Author: amholma
- License: This work is licensed under the Creative Commons 0 License.
- Site: https://freesound.org/people/amholma/sounds/344360/
## door_close.ogg
- Author: BergsteinProd
- License: This work is licensed under the Attribution License.
- Site: https://freesound.org/people/BergsteinProd/sounds/577009/

View File

@ -250,16 +250,16 @@ end
local function place_bed(bed_name, placer, pointed_thing)
local above_pos = pointed_thing.above
local placer_dir = vector.round(placer:get_look_dir())
local bed_dir = helper.dir_to_compass(placer:get_look_dir())
--minetest.chat_send_all("placer dir: "..minetest.pos_to_string(placer_dir))
if (placer_dir.x == 0) and (placer_dir.z == 0) then
return
end
local behind_pos = vector.offset(above_pos, placer_dir.x, 0.0, placer_dir.z)
local behind_pos = vector.offset(above_pos, bed_dir.x, bed_dir.y, bed_dir.z)
local node_behind = minetest.get_node_or_nil(behind_pos)
if node_behind and helper.get_nodedef_field(node_behind.name, "drawtype") == "airlike" then
local dir = minetest.dir_to_facedir(placer:get_look_dir()) or 0
minetest.set_node(above_pos, {name = bed_name, param2 = dir})
return true
else
return false
end
end
@ -284,7 +284,9 @@ function bedz.register_bed(name, def)
fixed = def.selectionbox,
},
on_place = function(itemstack, placer, pointed_thing)
place_bed(bed_name, placer, pointed_thing)
if place_bed(bed_name, placer, pointed_thing) then
itemstack:take_item()
end
return itemstack
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)

View File

@ -82,7 +82,9 @@ minetest.register_on_mods_loaded(function()
local items = {}
for itemstring,_ in pairs(minetest.registered_items) do
if itemstring ~= "" and itemstring ~= "unknown" and itemstring ~= "ignore" then
table.insert(items, itemstring)
if minetest.get_item_group(itemstring, "not_in_creative_inventory") == 0 then
table.insert(items, itemstring)
end
end
end
--[[ Sort items in this order:

209
mods/door/api.lua Normal file
View File

@ -0,0 +1,209 @@
S, modname = ...
minetest.register_node("door:invisible_top", {
drawtype = "nodebox",
paramtype2 = "facedir",
node_box = {
type = "fixed",
fixed = {
{0.4375, -0.5, 0, 0.5, -0.5, 0.0625},
},
},
tiles = {"blank.png"},
use_texture_alpha = true,
is_ground_content = false,
groups = {not_in_creative_inventory = 1},
})
local function destroy_inv_top(pos)
local above_pos = vector.new(pos.x, pos.y+1, pos.z)
minetest.set_node(above_pos, {name = "air"})
end
local function is_door_on_right(pos, door_dir)
local up_vector = vector.new(0, 1, 0)
local right_vector = vector.cross(up_vector, door_dir)
--local left_vector = - right_vector
local right_pos = vector.add(pos, right_vector)
if helper.in_group(right_pos, "door") then
return true
else
return false
end
end
local function place_door(door_name, placer, pointed_thing)
local pos = pointed_thing.above
local door_dir = helper.dir_to_compass(placer:get_look_dir())
--minetest.chat_send_all(tostring(door_dir))
if helper.node_is_air(pos) then
local above_pos = vector.new(pos.x, pos.y+1, pos.z)
if helper.node_is_air(above_pos) then
local dir = placer:get_look_dir()
local rotation
if is_door_on_right(pos, door_dir) then
dir = -dir
rotation = "left"
else
rotation = "right"
end
local facedir = minetest.dir_to_facedir(dir) or 0
minetest.set_node(pos, {name = door_name, param2 = facedir})
minetest.set_node(above_pos, {name = "door:invisible_top", param2 = facedir})
local meta = minetest.get_meta(pos)
meta:set_string("door:dir", vector.to_string(door_dir))
meta:set_string("door:rotation", rotation)
return true
else
return false
end
else
return false
end
end
local function open_door(pos, node, clicker, door_name)
local meta = minetest.get_meta(pos)
local open_dir_str = meta:get_string("door:dir")
local open_dir = minetest.string_to_pos(open_dir_str)
if not open_dir then
open_dir = vector.round(clicker:get_look_dir())
end
local node_open_pos = vector.add(pos, open_dir)
local node_open = minetest.get_node_or_nil(node_open_pos)
if node_open and (
helper.get_nodedef_field(node_open.name, "buildable_to") or
helper.node_is_air(node_open_pos)
) then
if helper.node_is_air(node_open_pos, "above") then
local facedir = minetest.dir_to_facedir(open_dir)
local door_name_opened = door_name.."_opened"
local rotation = meta:get_string("door:rotation")
if rotation == "left" then
door_name_opened = door_name_opened.."_left"
end
minetest.set_node(pos, {name = door_name_opened, param2 = facedir})
sound.play("pos", pos, "door_open")
local above_pos = vector.new(pos.x, pos.y+1, pos.z)
minetest.set_node(above_pos, {name = "door:invisible_top", param2 = facedir})
meta = minetest.get_meta(pos)
meta:set_int("door:facedir", node.param2)
meta:set_string("door:dir", open_dir_str)
meta:set_string("door:rotation", rotation)
end
end
end
local function close_door(pos, door_name)
local meta = minetest.get_meta(pos)
local facedir = meta:get_int("door:facedir")
local dir = meta:get_string("door:dir")
local rotation = meta:get_string("door:rotation")
minetest.set_node(pos, {name = door_name, param2 = facedir})
sound.play("pos", pos, "door_close")
local above_pos = vector.new(pos.x, pos.y+1, pos.z)
minetest.set_node(above_pos, {name = "door:invisible_top", param2 = facedir})
meta = minetest.get_meta(pos)
meta:set_string("door:dir", dir)
meta:set_string("door:rotation", rotation)
end
function door.register_door(name, def)
local door_name = modname..":"..name
minetest.register_node(door_name, {
description = S("@1 Door", S(def.description)),
inventory_image = def.inventory_image or "",
wield_image = def.wield_image or def.inventory_image or "",
drawtype = "mesh",
paramtype = "light",
paramtype2 = "facedir",
mesh = "door.b3d",
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625},
},
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625},
},
},
tiles = def.tiles,
use_texture_alpha = true,
is_ground_content = false,
groups = {choppy = 2, door = 1},
stack_max = 1,
buildable_to = false,
sounds = sound.wood(),
on_place = function(itemstack, placer, pointed_thing)
if place_door(door_name, placer, pointed_thing) then
itemstack:take_item()
end
return itemstack
end,
on_destruct = function(pos)
destroy_inv_top(pos)
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
open_door(pos, node, clicker, door_name)
end,
})
for i=0,1 do
local mesh, fixed, door_name_opened
if i == 0 then
mesh = "door_opened.b3d"
fixed = {0.375, -0.5, 0, 0.5, 1.5, 1.0}
door_name_opened = door_name.."_opened"
else
mesh = "door_opened_left.b3d"
fixed = {-0.5, -0.5, 0, -0.375, 1.5, 1.0}
door_name_opened = door_name.."_opened_left"
end
minetest.register_node(door_name_opened, {
description = def.description,
drawtype = "mesh",
paramtype = "light",
paramtype2 = "facedir",
mesh = mesh,
selection_box = {
type = "fixed",
fixed = {
fixed,
},
},
collision_box = {
type = "fixed",
fixed = {
fixed,
},
},
drop = door_name,
tiles = def.tiles,
walkable = true,
use_texture_alpha = true,
is_ground_content = false,
groups = {choppy = 2, door = 1, not_in_creative_inventory = 1},
stack_max = 1,
buildable_to = false,
sounds = sound.wood(),
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
close_door(pos, door_name)
end,
on_destruct = function(pos)
destroy_inv_top(pos)
end
})
end
end

5
mods/door/doors.lua Normal file
View File

@ -0,0 +1,5 @@
door.register_door("apple_tree", {
description = "Apple Tree",
tiles = {"door_apple_tree.png"},
inventory_image = "door_apple_tree_inv.png",
})

8
mods/door/init.lua Normal file
View File

@ -0,0 +1,8 @@
door = {}
local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)
local S = minetest.get_translator(modname)
assert(loadfile(modpath .. "/api.lua"))(S, modname)
assert(loadfile(modpath .. "/doors.lua"))()

View File

@ -0,0 +1,3 @@
# textdomain: door
@1 Door=Puerta de @1
Apple Tree=manzano

BIN
mods/door/models/door.b3d Normal file

Binary file not shown.

BIN
mods/door/models/door.blend Normal file

Binary file not shown.

Binary file not shown.

19
mods/door/models/door.obj Normal file
View File

@ -0,0 +1,19 @@
mtllib door.mtl
o converted_out
v 0.5 -0.5 -0.0625
v 0.5 -0.5 0.0625
v 0.5 1.5 0.0625
v 0.5 1.5 -0.0625
v -0.5 -0.5 -0.0625
v -0.5 -0.5 0.0625
v -0.5 1.5 0.0625
v -0.5 1.5 -0.0625
usemtl none
s off
g nodebox3
f 1 2 3 4
f 5 6 7 8
f 1 4 8 5
f 2 3 7 6
f 1 2 6 5
f 4 3 7 8

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,19 @@
mtllib door_opened.mtl
o converted_out
v -0.375 -0.5 0
v -0.375 -0.5 1
v -0.375 1.5 1
v -0.375 1.5 0
v -0.5 -0.5 0
v -0.5 -0.5 1
v -0.5 1.5 1
v -0.5 1.5 0
usemtl none
s off
g nodebox3
f 1 2 3 4
f 5 6 7 8
f 1 4 8 5
f 2 3 7 6
f 1 2 6 5
f 4 3 7 8

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 B

View File

@ -112,7 +112,7 @@ function farmz.register_plant(name, def)
if i == 1 then
_plant_name = product_name.."_plant"
texture = modname.."_"..name.."_plant.png"
description = def.description.." "..S("Plant")
description = S("@1 Plant", S(def.description))
if not def.drop then
local drop_number = def.drop_number or 1
drop = product_name.." "..drop_number
@ -122,7 +122,7 @@ function farmz.register_plant(name, def)
else
_plant_name = product_name.."_sprout"
texture = modname.."_"..name.."_sprout.png"
description = def.description.." "..S("Plant").." ".."("..S("Sprout")..")"
description = S("@1 Plant", S(def.description)).." ".."("..S("Sprout")..")"
drop = ""
end
@ -174,7 +174,7 @@ function farmz.register_plant(name, def)
local seed_texture = modname.."_"..name.."_seed.png"
minetest.register_craftitem(seed_name, {
description = def.description.." ".."("..S("Seed")..")",
description = S("@1 Seed", S(def.description)),
inventory_image = seed_texture,
groups = {seed = 1},
on_use = function(itemstack, user, pointed_thing)
@ -198,7 +198,7 @@ function farmz.register_plant(name, def)
})
minetest.register_node(seed_name_soil, {
description = def.description.." ".."("..S("Seed Soil")..")",
description = S(def.description).." ".."("..S("Seed Soil")..")",
drawtype = "nodebox",
paramtype = "light",
walkable = false,

View File

@ -1,9 +1,9 @@
# textdomain: farmz
Bread=Pan
Flour=Harina
Plant=Planta
@1 Plant=Planta de @1
Plowed Soil=Tierra arada
Seed=Semilla
@1 Seed=Semilla de @1
Seed Soil=Cultivo con semillas
Sprout=brote
Steel Hoe=Azada de hierro

View File

@ -40,6 +40,43 @@ function helper.what_hour(timeofday)
end
end
--Air
function helper.node_is_air(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 helper.get_nodedef_field(node.name, "drawtype") == "airlike" then
return true
else
return false
end
end
--Direction
function helper.dir_to_compass(dir)
local angle = math.round(math.deg(math.atan2(dir.z, dir.x)))
local compass_vector, compass_dir
if angle >= -45 and angle <= 45 then --East
compass_vector = vector.new(1, 0, 0)
compass_dir = "east"
elseif angle > 45 and angle <= 135 then -- North
compass_vector = vector.new(0, 0, 1)
compass_dir = "north"
elseif angle < -45 and angle >= -135 then -- South
compass_vector = vector.new(0, 0, -1)
compass_dir = "south"
else --West
compass_vector = vector.new(-1, 0, 0)
compass_dir = "west"
end
return compass_vector, compass_dir
end
-- Nodeboxes
helper.nodebox.flat = {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -20,6 +20,7 @@ assert(loadfile(modpath .. "/metals.lua"))(S)
assert(loadfile(modpath .. "/mese.lua"))(S)
assert(loadfile(modpath .. "/lava.lua"))(S)
assert(loadfile(modpath .. "/ore.lua"))(S)
assert(loadfile(modpath .. "/roofs.lua"))(S, modname)
assert(loadfile(modpath .. "/sand.lua"))(S)
assert(loadfile(modpath .. "/stone.lua"))(S)
assert(loadfile(modpath .. "/water.lua"))(S)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

50
mods/nodez/roofs.lua Normal file
View File

@ -0,0 +1,50 @@
local S, modname = ...
function nodez.register_roof(name, def)
minetest.register_node(modname..":"..name.."_slope", {
description = def.description.." ".."Slope",
drawtype= "mesh",
mesh = "nodez_roof_slope.b3d",
tiles = def.tiles,
use_texture_alpha = true,
is_ground_content = false,
paramtype2 = "facedir",
groups = {cracky = 3, stone = 1},
sounds = sound.stone(),
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.5, 0, 0, 0.5, 0.5, 0.5},
}
}
})
minetest.register_node(modname..":"..name.."_corner", {
description = def.description.." ".."Corner",
drawtype= "mesh",
mesh = "nodez_roof_corner.b3d",
tiles = def.tiles,
use_texture_alpha = true,
paramtype2 = "facedir",
is_ground_content = false,
groups = {cracky = 3, stone = 1},
sounds = sound.stone(),
})
minetest.register_node(modname..":"..name.."_flat", {
description = def.description.." ".."Flat",
tiles = def.flat_tiles,
is_ground_content = false,
paramtype2 = "facedir",
groups = {cracky = 3, stone = 1},
sounds = sound.stone(),
})
end
nodez.register_roof("red_roof", {
description = "Red Roof",
tiles = {"nodez_roman_roof.png"},
flat_tiles = {"nodez_red_gables.png", "nodez_adobe.png"}
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 B