Added letters and mailbox

master
bas080 2013-08-27 00:35:36 +02:00
parent ecabcfe8cf
commit 74065dbbf3
14 changed files with 207 additions and 0 deletions

1
mods/inbox/depends.txt Normal file
View File

@ -0,0 +1 @@
default

92
mods/inbox/init.lua Normal file
View File

@ -0,0 +1,92 @@
local inbox = {}
minetest.register_node("inbox:empty", {
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-4/12, -6/12, -6/12, 4/12, 0/12, 6/12},
{-3/12, 0/12, -6/12, 3/12, 2/12, 6/12},
{3/12, 0/12, -4/12, 4/12, 5/12, -2/12},
{3/12, 3/12, -2/12, 4/12, 5/12, 0/12}
}
},
description = "Mailbox",
tiles = {"inbox_top.png", "inbox_bottom.png", "inbox_east.png",
"inbox_west.png", "inbox_back.png", "inbox_front.png"},
paramtype2 = "facedir",
groups = {choppy=2,oddly_breakable_by_hand=2},
sounds = default.node_sound_wood_defaults(),
after_place_node = function(pos, placer, itemstack)
local meta = minetest.get_meta(pos)
local owner = placer:get_player_name()
meta:set_string("owner", owner)
meta:set_string("infotext", owner.."'s Mailbox")
local inv = meta:get_inventory()
inv:set_size("main", 8*4)
inv:set_size("drop", 1)
end,
on_rightclick = function(pos, node, clicker, itemstack)
local meta = minetest.get_meta(pos)
local player = clicker:get_player_name()
local owner = meta:get_string("owner")
local meta = minetest.get_meta(pos)
if owner == player then
minetest.show_formspec(
clicker:get_player_name(),
"default:chest_locked",
inbox.get_inbox_formspec(pos))
else
minetest.show_formspec(
clicker:get_player_name(),
"default:chest_locked",
inbox.get_inbox_insert_formspec(pos))
end
end,
can_dig = function(pos,player)
local meta = minetest.get_meta(pos);
local owner = meta:get_string("owner")
local inv = meta:get_inventory()
return player:get_player_name() == owner and inv:is_empty("main")
end,
on_metadata_inventory_put = function(pos, listname, index, stack, player)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if listname == "drop" and inv:room_for_item("main", stack) then
inv:remove_item("drop", stack)
inv:add_item("main", stack)
end
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
if listname == "main" then
return 0
end
if listname == "drop" then
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if inv:room_for_item("main", stack) then
return -1
else
return 0
end
end
end,
})
function inbox.get_inbox_formspec(pos)
local spos = pos.x .. "," .. pos.y .. "," ..pos.z
local formspec =
"size[8,9]"..
"list[nodemeta:".. spos .. ";main;0,0;8,4;]"..
"list[current_player;main;0,5;8,4;]"
return formspec
end
function inbox.get_inbox_insert_formspec(pos)
local spos = pos.x .. "," .. pos.y .. "," ..pos.z
local formspec =
"size[8,9]"..
"list[nodemeta:".. spos .. ";drop;3.5,2;1,1;]"..
"list[current_player;main;0,5;8,4;]"
return formspec
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

View File

@ -0,0 +1 @@
default

113
mods/memorandum/init.lua Normal file
View File

@ -0,0 +1,113 @@
-----------------------------------------------------------------------------------------------
local title = "Memorandum"
local version = "0.0.3"
local mname = "memorandum"
-----------------------------------------------------------------------------------------------
minetest.register_craftitem(":default:paper", {
description = "Paper",
inventory_image = "default_paper.png",
on_place = function(itemstack, placer, pointed_thing)
local pt = pointed_thing
local direction = minetest.dir_to_facedir(placer:get_look_dir())
minetest.add_node({x=pt.under.x, y=pt.under.y+1, z=pt.under.z}, {name="memorandum:letter_empty", param2=direction})
itemstack:take_item()
return itemstack
end,
})
minetest.register_node("memorandum:letter_empty", {
drawtype = "nodebox",
tiles = {"memorandum_letter_empty.png"},
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
walkable = false,
node_box = {
type = "fixed",
fixed = {
-- { left , bottom , front , right , top , back }
{ -1/2 , -1/2 , -1/2 , 1/2 , -7/16 , 1/2 },
}
},
selection_box = {
type = "fixed",
fixed = {
{ -1/2 , -1/2 , -1/2 , 1/2 , -7/16 , 1/2 },
}
},
groups = {snappy=3,dig_immediate=2,attached_node=1,not_in_creative_inventory=1},
sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "field[text;;${text}]")
meta:set_string("infotext", "On this piece of paper is written: \"\"")
end,
on_receive_fields = function(pos, formname, fields, sender)
local meta = minetest.get_meta(pos)
fields.text = fields.text or ""
--print((sender:get_player_name() or "").." wrote \""..fields.text..
--"\" to paper at "..minetest.pos_to_string(pos))
meta:set_string("text", fields.text)
local direction = minetest.env:get_node(pos).param2
minetest.env:add_node(pos, {name="memorandum:letter_written", param2=direction})
meta:set_string("infotext", 'On this piece of paper is written: "'..fields.text..'"')
end,
})
minetest.register_craftitem("memorandum:letter", {
description = "Letter",
inventory_image = "default_paper.png^memorandum_letters.png",
stack_max = 1,
on_use = function(itemstack, user, pointed_thing)
local player = user:get_player_name()
local text = itemstack:get_metadata()
minetest.chat_send_player(player, text, false)
end,
on_place = function(itemstack, placer, pointed_thing)
local pt = pointed_thing
local direction = minetest.dir_to_facedir(placer:get_look_dir())
local meta1 = minetest.env:get_meta({x=pt.under.x, y=pt.under.y+1, z=pt.under.z})
local text = itemstack:get_metadata()
minetest.add_node({x=pt.under.x, y=pt.under.y+1, z=pt.under.z}, {name="memorandum:letter_written", param2=direction})
meta1:set_string("infotext", text)
itemstack:take_item()
return itemstack
end,
})
minetest.register_node("memorandum:letter_written", {
drawtype = "nodebox",
tiles = {"memorandum_letter_empty.png^memorandum_letter_text.png"},
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
walkable = false,
node_box = {
type = "fixed",
fixed = {
-- { left , bottom , front , right , top , back }
{ -1/2 , -1/2 , -1/2 , 1/2 , -7/16 , 1/2 },
}
},
selection_box = {
type = "fixed",
fixed = {
{ -1/2 , -1/2 , -1/2 , 1/2 , -7/16 , 1/2 },
}
},
groups = {snappy=3,dig_immediate=2,attached_node=1,not_in_creative_inventory=1},
sounds = default.node_sound_leaves_defaults(),
on_dig = function(pos, node, digger)
if digger:is_player() and digger:get_inventory() then
local meta = minetest.env:get_meta(pos)
local text = meta:get_string("infotext")
digger:get_inventory():add_item("main", {name="memorandum:letter", count=1, wear=0, metadata=text})
end
minetest.remove_node(pos)
end,
})
-----------------------------------------------------------------------------------------------
print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
-----------------------------------------------------------------------------------------------

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B