init
Some checks failed
pre-commit / build (push) Has been cancelled

This commit is contained in:
Rainer 2026-02-12 12:51:00 +01:00
commit 2dd6e44c3c
11 changed files with 281 additions and 0 deletions

148
init.lua Normal file
View file

@ -0,0 +1,148 @@
if minetest.get_translator then
S = minetest.get_translator(minetest.get_current_modname())
else
-- Fallback for older Minetest versions
S = function(str) return str end
end
local f = string.format
local has_canonical_name = minetest.get_modpath("canonical_name")
minetest.register_craftitem("envelopes:envelope_blank", {
description = S("Blank Envelope"),
inventory_image = "envelopes_envelope_blank.png",
on_use = function(itemstack, user, pointed_thing)
minetest.show_formspec(user:get_player_name(), "envelopes:input",
"size[5.5,5.5]" ..
"field[2,0.5;3.5,1;addressee;"..S("Addressee")..";]" ..
"label[0,0;"..S("Write a letter").."]" ..
"textarea[0.5,1.5;5,3;text;"..S("Text")..";]" ..
"field[3,4.8;2.5,1;attn;"..S("Attn. (Optional)")..";]" ..
"button_exit[0.25,4.5;2,1;exit;"..S("Seal").."]")
return itemstack
end
})
minetest.register_craftitem("envelopes:envelope_sealed", {
description = S("Sealed Envelope"),
inventory_image = "envelopes_envelope_sealed.png",
stack_max = 1,
groups = {not_in_creative_inventory = 1},
on_use = function(itemstack, user, pointed_thing)
local user_name = user:get_player_name()
local meta = itemstack:get_meta()
local addressee = meta:get_string("receiver")
if has_canonical_name then
addressee = canonical_name.get(addressee)
end
if user_name == addressee then
local open_env = ItemStack("envelopes:envelope_opened")
local open_meta = open_env:get_meta()
open_meta:set_string("sender", meta:get_string("sender"))
open_meta:set_string("receiver", meta:get_string("receiver"))
open_meta:set_string("text", meta:get_string("text"))
local desc = S("Opened Envelope") .. "\n" .. S("To: @1", meta:get_string("receiver")) .. "\n" .. S("From: @1", meta:get_string("sender"))
open_meta:set_string("description", desc)
if meta:get_string("attn") ~= "" then
open_meta:set_string("attn", meta:get_string("attn"))
desc = desc .. "\n" .. S("Attn: @1", meta:get_string("attn"))
open_meta:set_string("description", desc)
end
return open_env
else
minetest.chat_send_player(user_name, S("The seal can only be opened by @1!", addressee))
return itemstack
end
end
})
minetest.register_craftitem("envelopes:envelope_opened", {
description = S("Opened Envelope"),
inventory_image = "envelopes_envelope_opened.png",
stack_max = 1,
groups = {not_in_creative_inventory = 1},
on_use = function(itemstack, user, pointed_thing)
local meta = itemstack:get_meta()
local sender = meta:get_string("sender")
local receiver = meta:get_string("receiver")
local text = meta:get_string("text")
local attn = meta:get_string("attn") or ""
local form =
"size[5,5]" ..
"label[0,0;" .. S("A letter from @1 to @2", sender, receiver)
if attn ~= "" then
form = form .. "\n" .. S("Attn: @1", attn)
end
form = form .. "\n" .. text .. "]" .. "button_exit[0,4;2,1;exit;"..S("Close").."]"
minetest.show_formspec(user:get_player_name(), "envelope:display", form)
end
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "envelopes:input" or not minetest.is_player(player) then
return false
end
local sender_name = player:get_player_name()
local addressee = (fields.addressee or ""):trim()
local text = (fields.text or ""):trim()
local attn = (fields.attn or ""):trim()
if addressee == "" or text == "" then
minetest.chat_send_player(sender_name, S("Please fill out all required fields."))
return true
end
if has_canonical_name then
addressee = canonical_name.get(addressee) or addressee
end
if not minetest.player_exists(addressee) then
minetest.chat_send_player(sender_name, S("Unknown addressee: @1", addressee))
return true
end
local inv = player:get_inventory()
local letter = ItemStack("envelopes:envelope_sealed")
local blank = ItemStack("envelopes:envelope_blank")
local meta = letter:get_meta()
meta:set_string("sender", sender_name)
meta:set_string("receiver", addressee)
meta:set_string("text", text)
local desc = S("Sealed Envelope") .. "\n" .. S("To: @1", addressee) .. "\n" .. S("From: @1", sender_name)
if attn ~= "" then
meta:set_string("attn", attn)
desc = desc .. "\n" .. S("Attn: @1", attn)
end
meta:set_string("description", desc)
if inv:room_for_item("main", letter) and inv:contains_item("main", blank) then
inv:add_item("main", letter)
inv:remove_item("main", blank)
else
minetest.chat_send_player(sender_name, S("Unable to create letter! Check your inventory space."))
end
return true
end)
if minetest.get_modpath("default") then
minetest.register_craft({
type = "shaped",
output = "envelopes:envelope_blank 1",
recipe = {
{"", "", ""},
{"default:paper", "default:paper", "default:paper"},
{"default:paper", "default:paper", "default:paper"}
}
})
end