Compare commits

...

11 Commits

Author SHA1 Message Date
3e6328ac43 Update by TenPlus1 2024-04-08 21:14:29 +02:00
64902b845d Compress textures (thx TenPlus1) 2024-03-15 14:30:41 +01:00
1fdff47dc8 Fix out-of-bounds in 'combine' texture modifier
Co-authored-by: tenplus1 <tenplus1@users.noreply.github.com>
2024-02-26 16:15:32 +01:00
e387808065 Fix warnings (mt 5.8+) due to disallowed filenames (#23)
* Fix warnings (mt 5.8+) due to disallowed filenames

* Don't ship blend files to cdb users
2023-10-15 12:34:26 -04:00
1c881d6f22 add initial_properties (#22)
* add initial_properties

Adds initial_properties update so that 5.7dev doesn't throw an error when entering text on signs.

* Remove newline

---------

Co-authored-by: Niklp <89982526+Niklp09@users.noreply.github.com>
2023-09-25 13:50:55 +02:00
cd6bf1eabe Complete Spanish translation (#21) 2023-07-09 20:08:59 -04:00
1dd01e3bc6 Make missing strings translatable, update locale files and German (#19)
* Make a bunch of strings translatable

* Update locale files

* Update German translation
2023-07-04 13:03:49 -04:00
ed3a679bca don't emit translation strings to the log (#17)
* don't emit translation strings to the log

* fix luacheck

* don't double-log signs_lib prefix
2022-12-10 14:36:58 -05:00
5ae111e1fa fix unconditional access to default global (#16)
Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2022-11-25 21:33:34 +01:00
aff005e745 handle interactions w/ explosions (#14)
* prevent signs entities from being destroyed

* handle tnt destroying a sign

* remove redundant destructor call
2022-10-26 20:01:27 -04:00
3d0e8d47e6 add setting for custom edit priv (#15)
* add setting for custom edit priv

* fix indent

* hmm maybe now?
2022-10-26 20:00:43 -04:00
686 changed files with 170 additions and 186 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
util/blender export-ignore

2
API.md
View File

@ -250,7 +250,7 @@ signs_lib.register_sign("basic_signs:sign_wall_glass", {
* `signs_lib.rightclick_sign(pos, node, player, itemstack, pointed_thing)` * `signs_lib.rightclick_sign(pos, node, player, itemstack, pointed_thing)`
Open the default sign formspec, if the player has the `signslib_edit` privilege. Open the default sign formspec, if the player has the `signslib_edit` privilege. (privilege can be set by `signs_lib.edit_priv` setting)
* `signs_lib.destruct_sign(pos)` * `signs_lib.destruct_sign(pos)`

View File

@ -67,3 +67,4 @@ The list of loaded, sign-bearing blocks is created/populated by an LBM (and trim
* `signslib_edit` * `signslib_edit`
Allows to rotate signs and to open (and consequently edit) any default sign formspec. Allows to rotate signs and to open (and consequently edit) any default sign formspec.
(privilege can be set by `signs_lib.edit_priv` setting)

134
api.lua
View File

@ -1,6 +1,12 @@
-- signs_lib api, backported from street_signs -- signs_lib api, backported from street_signs
local S = signs_lib.S local S = signs_lib.S
local FS = function(...) return minetest.formspec_escape(S(...)) end
local has_default_mod = minetest.get_modpath("default")
local function log(level, messagefmt, ...)
minetest.log(level, "[signs_lib] " .. messagefmt:format(...))
end
local function get_sign_formspec() end local function get_sign_formspec() end
@ -21,14 +27,14 @@ signs_lib.standard_xoffs = 4
signs_lib.standard_yoffs = 0 signs_lib.standard_yoffs = 0
signs_lib.standard_cpl = 35 signs_lib.standard_cpl = 35
signs_lib.standard_wood_groups = table.copy(default and minetest.registered_items["default:sign_wall_wood"].groups or {}) signs_lib.standard_wood_groups = table.copy(has_default_mod and minetest.registered_items["default:sign_wall_wood"].groups or {})
signs_lib.standard_wood_groups.attached_node = nil signs_lib.standard_wood_groups.attached_node = nil
signs_lib.standard_steel_groups = table.copy(default and minetest.registered_items["default:sign_wall_steel"].groups or {}) signs_lib.standard_steel_groups = table.copy(has_default_mod and minetest.registered_items["default:sign_wall_steel"].groups or {})
signs_lib.standard_steel_groups.attached_node = nil signs_lib.standard_steel_groups.attached_node = nil
signs_lib.standard_wood_sign_sounds = table.copy(default and minetest.registered_items["default:sign_wall_wood"].sounds or {}) signs_lib.standard_wood_sign_sounds = table.copy(has_default_mod and minetest.registered_items["default:sign_wall_wood"].sounds or {})
signs_lib.standard_steel_sign_sounds = table.copy(default and minetest.registered_items["default:sign_wall_steel"].sounds or {}) signs_lib.standard_steel_sign_sounds = table.copy(has_default_mod and minetest.registered_items["default:sign_wall_steel"].sounds or {})
signs_lib.default_text_scale = {x=10, y=10} signs_lib.default_text_scale = {x=10, y=10}
@ -160,18 +166,23 @@ local ctexcache_wide = {}
-- entity handling -- entity handling
minetest.register_entity("signs_lib:text", { minetest.register_entity("signs_lib:text", {
initial_properties = {
collisionbox = { 0, 0, 0, 0, 0, 0 }, collisionbox = { 0, 0, 0, 0, 0, 0 },
visual = "mesh", visual = "mesh",
mesh = "signs_lib_standard_sign_entity_wall.obj", mesh = "signs_lib_standard_sign_entity_wall.obj",
textures = {}, textures = {},
static_save = true, static_save = true,
backface_culling = false, backface_culling = false,
},
on_activate = function(self) on_activate = function(self)
local node = minetest.get_node(self.object:get_pos()) local node = minetest.get_node(self.object:get_pos())
if minetest.get_item_group(node.name, "sign") == 0 then if minetest.get_item_group(node.name, "sign") == 0 then
self.object:remove() self.object:remove()
end end
end, end,
on_blast = function(self, damage)
return false, false, {}
end,
}) })
function signs_lib.delete_objects(pos) function signs_lib.delete_objects(pos)
@ -456,15 +467,6 @@ signs_lib.charwidth_wide32 = build_char_db(32)
local math_max = math.max local math_max = math.max
local function fill_line(x, y, w, c, font_size, colorbgw)
c = c or "0"
local tex = { }
for xx = 0, math.max(0, w), colorbgw do
table.insert(tex, (":%d,%d=signs_lib_color_"..font_size.."px_%s.png"):format(x + xx, y, c))
end
return table.concat(tex)
end
-- make char texture file name -- make char texture file name
-- if texture file does not exist use fallback texture instead -- if texture file does not exist use fallback texture instead
local function char_tex(font_name, ch) local function char_tex(font_name, ch)
@ -500,6 +502,26 @@ local function char_tex_wide(font_name, ch)
end end
end end
-- sign colour table
local colgrid = {
["0"] = "000000", -- black
["1"] = "000080", -- blue
["2"] = "008000", -- dark green
["3"] = "008080", -- dark cyan
["4"] = "800000", -- red
["5"] = "800080", -- purple
["6"] = "804000", -- brown
["7"] = "808080", -- light grey
["8"] = "404040", -- dark grey
["9"] = "8080ff", -- light blue
["A"] = "80ff80", -- green
["B"] = "80ffff", -- cyan
["C"] = "ff8080", -- skin pink
["D"] = "ff80ff", -- pink
["E"] = "ffff00", -- yellow
["F"] = "ffffff" -- white
}
local function make_line_texture(line, lineno, pos, line_width, line_height, cwidth_tab, font_size, colorbgw, cwidth_tab_wide, force_unicode_font) local function make_line_texture(line, lineno, pos, line_width, line_height, cwidth_tab, font_size, colorbgw, cwidth_tab_wide, force_unicode_font)
local width = 0 local width = 0
local maxw = 0 local maxw = 0
@ -572,7 +594,7 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi
end end
end end
if w then if w then
width = width + w + 1 width = width + w
if width >= (line_width - cwidth_tab[" "]) then if width >= (line_width - cwidth_tab[" "]) then
width = 0 width = 0
else else
@ -604,7 +626,7 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi
else else
local w = cwidth_tab[c] local w = cwidth_tab[c]
if w then if w then
width = width + w + 1 width = width + w
if width >= (line_width - cwidth_tab[" "]) then if width >= (line_width - cwidth_tab[" "]) then
width = 0 width = 0
else else
@ -622,7 +644,7 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi
end end
i = i + 1 i = i + 1
end end
width = width + cwidth_tab[" "] + 1 width = width + cwidth_tab[" "]
maxw = math_max(width, maxw) maxw = math_max(width, maxw)
table.insert(words, { chars=chars, w=ch_offs }) table.insert(words, { chars=chars, w=ch_offs })
end end
@ -636,36 +658,25 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi
local xpos = start_xpos local xpos = start_xpos
local ypos = (line_height + def.line_spacing)* lineno + def.y_offset local ypos = (line_height + def.line_spacing)* lineno + def.y_offset
cur_color = nil
for word_i, word in ipairs(words) do for word_i, word in ipairs(words) do
local xoffs = (xpos - start_xpos) local xoffs = (xpos - start_xpos)
if (xoffs > 0) and ((xoffs + word.w) > maxw) then if (xoffs > 0) and ((xoffs + word.w) > maxw) then
table.insert(texture, fill_line(xpos, ypos, maxw, "n", font_size, colorbgw))
xpos = start_xpos xpos = start_xpos
ypos = ypos + line_height + def.line_spacing ypos = ypos + line_height + def.line_spacing
lineno = lineno + 1 lineno = lineno + 1
if lineno >= def.number_of_lines then break end if lineno >= def.number_of_lines then break end
table.insert(texture, fill_line(xpos, ypos, maxw, cur_color, font_size, colorbgw))
end end
for ch_i, ch in ipairs(word.chars) do for ch_i, ch in ipairs(word.chars) do
if ch.col ~= cur_color then
cur_color = ch.col -- colorize character texture
table.insert(texture, fill_line(xpos + ch.off, ypos, maxw, cur_color, font_size, colorbgw)) local newtex = ch.tex .. '\\^[colorize\\:#' .. colgrid[ch.col]
table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, newtex))
end end
table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, ch.tex))
end
table.insert(
texture,
(":%d,%d="):format(xpos + word.w, ypos) .. char_tex(font_name, " ")
)
xpos = xpos + word.w + cwidth_tab[" "] xpos = xpos + word.w + cwidth_tab[" "]
if xpos >= (line_width + cwidth_tab[" "]) then break end if xpos >= (line_width + cwidth_tab[" "]) then break end
end end
table.insert(texture, fill_line(xpos, ypos, maxw, "n", font_size, colorbgw))
table.insert(texture, fill_line(start_xpos, ypos + line_height, maxw, "n", font_size, colorbgw))
return table.concat(texture), lineno return table.concat(texture), lineno
end end
@ -710,7 +721,7 @@ function signs_lib.make_sign_texture(lines, pos)
table.insert(texture, linetex) table.insert(texture, linetex)
lineno = ln + 1 lineno = ln + 1
end end
table.insert(texture, "^[makealpha:0,0,0")
return table.concat(texture, "") return table.concat(texture, "")
end end
@ -742,6 +753,15 @@ function signs_lib.destruct_sign(pos)
signs_lib.delete_objects(pos) signs_lib.delete_objects(pos)
end end
function signs_lib.blast_sign(pos, intensity)
if signs_lib.can_modify(pos, "") then
local node = minetest.get_node(pos)
local drops = minetest.get_node_drops(node, "tnt:blast")
minetest.remove_node(pos)
return drops
end
end
local function make_infotext(text) local function make_infotext(text)
text = trim_input(text) text = trim_input(text)
local lines = signs_lib.split_lines_and_words(text) or {} local lines = signs_lib.split_lines_and_words(text) or {}
@ -803,7 +823,16 @@ end
function signs_lib.can_modify(pos, player) function signs_lib.can_modify(pos, player)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner") local owner = meta:get_string("owner")
local playername = player:get_player_name() local playername
if type(player) == "userdata" then
playername = player:get_player_name()
elseif type(player) == "string" then
playername = player
else
playername = ""
end
if minetest.is_protected(pos, playername) then if minetest.is_protected(pos, playername) then
minetest.record_protection_violation(pos, playername) minetest.record_protection_violation(pos, playername)
@ -812,7 +841,7 @@ function signs_lib.can_modify(pos, player)
if owner == "" if owner == ""
or playername == owner or playername == owner
or (minetest.check_player_privs(playername, {signslib_edit=true})) or minetest.get_player_privs(playername)[signs_lib.edit_priv]
or (playername == minetest.settings:get("name")) then or (playername == minetest.settings:get("name")) then
return true return true
end end
@ -951,7 +980,7 @@ function signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, locke
end end
function signs_lib.register_fence_with_sign() function signs_lib.register_fence_with_sign()
minetest.log("warning", "[signs_lib] ".."Attempt to call no longer used function signs_lib.register_fence_with_sign()") log("warning", "Attempt to call no longer used function signs_lib.register_fence_with_sign()")
end end
local use_glow = function(pos, node, puncher, pointed_thing) local use_glow = function(pos, node, puncher, pointed_thing)
@ -984,6 +1013,7 @@ function signs_lib.register_sign(name, raw_def)
end end
def.after_place_node = raw_def.after_place_node or signs_lib.after_place_node def.after_place_node = raw_def.after_place_node or signs_lib.after_place_node
def.on_blast = raw_def.on_blast or signs_lib.blast_sign
if raw_def.entity_info then if raw_def.entity_info then
@ -1251,7 +1281,7 @@ minetest.register_lbm({
minetest.register_chatcommand("regen_signs", { minetest.register_chatcommand("regen_signs", {
params = "", params = "",
privs = {server = true}, privs = {server = true},
description = "Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.", description = S("Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any."),
func = function(player_name, params) func = function(player_name, params)
local allsigns = {} local allsigns = {}
local totalsigns = 0 local totalsigns = 0
@ -1270,13 +1300,13 @@ minetest.register_chatcommand("regen_signs", {
end end
if signs_lib.totalblocks < 0 then signs_lib.totalblocks = 0 end if signs_lib.totalblocks < 0 then signs_lib.totalblocks = 0 end
if totalsigns == 0 then if totalsigns == 0 then
minetest.chat_send_player(player_name, "There are no signs in the currently-loaded terrain.") minetest.chat_send_player(player_name, S("There are no signs in the currently-loaded terrain."))
signs_lib.block_list = {} signs_lib.block_list = {}
return return
end end
minetest.chat_send_player(player_name, "Found a total of "..totalsigns.." sign nodes across "..signs_lib.totalblocks.." blocks.") minetest.chat_send_player(player_name, S("Found a total of @1 sign nodes across @2 blocks.", totalsigns, signs_lib.totalblocks))
minetest.chat_send_player(player_name, "Regenerating sign entities...") minetest.chat_send_player(player_name, S("Regenerating sign entities ..."))
for _, b in pairs(allsigns) do for _, b in pairs(allsigns) do
for _, pos in ipairs(b) do for _, pos in ipairs(b) do
@ -1288,11 +1318,15 @@ minetest.register_chatcommand("regen_signs", {
end end
end end
end end
minetest.chat_send_player(player_name, "Finished.") minetest.chat_send_player(player_name, S("Finished."))
end end
}) })
minetest.register_on_mods_loaded(function()
if not minetest.registered_privileges[signs_lib.edit_priv] then
minetest.register_privilege("signslib_edit", {}) minetest.register_privilege("signslib_edit", {})
end
end)
@ -1312,14 +1346,14 @@ function get_sign_formspec(pos, nodename)
"image[0.1,2.4;7,1;signs_lib_sign_color_palette.png]", "image[0.1,2.4;7,1;signs_lib_sign_color_palette.png]",
"textarea[0.15,-0.2;6.3,2.8;text;;" .. minetest.formspec_escape(txt) .. "]", "textarea[0.15,-0.2;6.3,2.8;text;;" .. minetest.formspec_escape(txt) .. "]",
"button_exit[3.7,3.4;2,1;ok;" .. S("Write") .. "]", "button_exit[3.7,3.4;2,1;ok;" .. S("Write") .. "]",
"label[0.3,3.4;Unicode font]", "label[0.3,3.4;"..FS("Unicode font").."]",
"image_button[0.6,3.7;1,0.6;signs_lib_switch_" .. state .. ".png;uni_" "image_button[0.6,3.7;1,0.6;signs_lib_switch_" .. state .. ".png;uni_"
.. state .. ";;;false;signs_lib_switch_interm.png]", .. state .. ";;;false;signs_lib_switch_interm.png]",
} }
if minetest.registered_nodes[nodename].allow_widefont then if minetest.registered_nodes[nodename].allow_widefont then
state = meta:get_int("widefont") == 1 and "on" or "off" state = meta:get_int("widefont") == 1 and "on" or "off"
formspec[#formspec+1] = "label[2.1,3.4;Wide font]" formspec[#formspec+1] = "label[2.1,3.4;"..FS("Wide font").."]"
formspec[#formspec+1] = "image_button[2.3,3.7;1,0.6;signs_lib_switch_" .. state .. ".png;wide_" formspec[#formspec+1] = "image_button[2.3,3.7;1,0.6;signs_lib_switch_" .. state .. ".png;wide_"
.. state .. ";;;false;signs_lib_switch_interm.png]" .. state .. ";;;false;signs_lib_switch_interm.png]"
end end
@ -1337,11 +1371,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local playername = player:get_player_name() local playername = player:get_player_name()
if fields.text and fields.ok then if fields.text and fields.ok then
minetest.log("action", S("@1 wrote \"@2\" to sign at @3", log("action", "%s wrote %q to sign at %s",
(playername or ""), (playername or ""),
fields.text:gsub('\\', '\\\\'):gsub("\n", "\\n"), fields.text:gsub("\n", "\\n"),
pos_string pos_string
)) )
signs_lib.update_sign(pos, fields) signs_lib.update_sign(pos, fields)
elseif fields.wide_on or fields.wide_off or fields.uni_on or fields.uni_off then elseif fields.wide_on or fields.wide_off or fields.uni_on or fields.uni_off then
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
@ -1365,20 +1399,20 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end end
if change_wide then if change_wide then
minetest.log("action", S("@1 flipped the wide-font switch to \"@2\" at @3", log("action", "%s flipped the wide-font switch to %q at %s",
(playername or ""), (playername or ""),
(fields.wide_on and "off" or "on"), (fields.wide_on and "off" or "on"),
minetest.pos_to_string(pos) minetest.pos_to_string(pos)
)) )
signs_lib.update_sign(pos, fields) signs_lib.update_sign(pos, fields)
minetest.show_formspec(playername, "signs_lib:sign", get_sign_formspec(pos, node.name)) minetest.show_formspec(playername, "signs_lib:sign", get_sign_formspec(pos, node.name))
end end
if change_uni then if change_uni then
minetest.log("action", S("@1 flipped the unicode-font switch to \"@2\" at @3", log("action", "%s flipped the unicode-font switch to %q at %s",
(playername or ""), (playername or ""),
(fields.uni_on and "off" or "on"), (fields.uni_on and "off" or "on"),
minetest.pos_to_string(pos) minetest.pos_to_string(pos)
)) )
signs_lib.update_sign(pos, fields) signs_lib.update_sign(pos, fields)
minetest.show_formspec(playername, "signs_lib:sign", get_sign_formspec(pos, node.name)) minetest.show_formspec(playername, "signs_lib:sign", get_sign_formspec(pos, node.name))
end end

View File

@ -9,6 +9,8 @@ signs_lib.path = minetest.get_modpath(minetest.get_current_modname())
signs_lib.S = minetest.get_translator(minetest.get_current_modname()) signs_lib.S = minetest.get_translator(minetest.get_current_modname())
signs_lib.edit_priv = minetest.settings:get("signs_lib.edit_priv") or "signslib_edit"
dofile(signs_lib.path.."/encoding.lua") dofile(signs_lib.path.."/encoding.lua")
dofile(signs_lib.path.."/api.lua") dofile(signs_lib.path.."/api.lua")
dofile(signs_lib.path.."/standard_signs.lua") dofile(signs_lib.path.."/standard_signs.lua")

View File

@ -1,27 +1,12 @@
# textdomain: signs_lib # textdomain: signs_lib
Locked sign, owned by @1@n=gesperrter Schild, gehört @1@n Locked sign, owned by @1@n=Abgeschlossenes Schild, gehört @1@n
Write=schreiben Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.=Iteriert durch alle derzeit geladenen Kartenblöcke, die Schilder enthalten, löscht alle Entities innerhalb des Node-Raums eines jeden Schildes und erzeugt ihre Text-Entities, falls vorhanden, neu.
@1 wrote "@2" to sign at @3= There are no signs in the currently-loaded terrain.=Im derzeit geladenen Gelände befinden sich keine Schilder.
@1 flipped the wide-font switch to "@2" at @3= Found a total of @1 sign nodes across @2 blocks.=Insgesamt wurden @1 Schild-Nodes über @2 Kartenblöcke gefunden.
@1 flipped the unicode-font switch to "@2" at @3= Regenerating sign entities ...=Schild-Entities werden neu erzeugt ...
Finished.=Fertig.
Write=Schreiben
##### not used anymore ##### Unicode font=Unicode-Schrift
Wide font=Weite Schrift
locked =gesperrt Wooden Wall Sign=Holzwandschild
@1 wrote "@2" to @3sign at @4=@1 schrieb "@2" auf das @3Schild bei @4 Steel Wall Sign=Stahlwandschild
Sign=Schild
Can edit all locked signs=Kann alle gesperrte Schilder bearbeiten
Locked Sign=gesperrter Schild
green=grün
yellow=gelb
red=rot
white_red=weißrot
white_black=schwarzweiß
orange=orange
blue=blau
brown=braun
Sign (@1, metal)=Schild (@1, Metall)
Attempt to register unknown node as fence=Versuch ein unbekanntes Element als Zaun zu registrieren
Registered @1 and @2=Registrierte @1 und @2
[MOD] signs loaded=[MOD] Schilder-Mod geladen

View File

@ -1,25 +1,12 @@
# textdomain: signs_lib # textdomain: signs_lib
Locked sign, owned by @1@n= Locked sign, owned by @1@n=Cartel bloqueado, propiedad de @1
Write= Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.=Examina todos los bloques de mapas que contienen letreros cargados actualmente, elimina cualquier entidad dentro del espacio de nodo de cada cartel y regenera sus entidades de texto, si las hay.
@1 wrote "@2" to sign at @3= There are no signs in the currently-loaded terrain.=No hay carteles en el terreno actual cargado.
@1 flipped the wide-font switch to "@2" at @3= Found a total of @1 sign nodes across @2 blocks.=Se han encontrado un total de @1 cartel(es) a traves de @2 bloque(s).
@1 flipped the unicode-font switch to "@2" at @3= Regenerating sign entities ...=Regenerando entidades de los carteles...
Finished.=Terminado
Write=Escribir
##### not used anymore ##### Unicode font=Fuente unicode
Wide font=Fuente ancha
locked =bloqueada Wooden Wall Sign=Cartel de Madera
@1 wrote "@2" to @3sign at @4=@1 escribio "@2" en el cartel @3en @4 Steel Wall Sign=Cartel de Acero
Sign=Letrero
Locked Sign=Letrero bloqueada
green=verde
yellow=amarillo
red=rojo
white_red=rojo y blanco
white_black=negro y blanco
orange=naranja
blue=azul
brown=marrón
Sign (@1, metal)=Letrero (@1, metal)
Registered @1 and @2=Registrado @1 y @2
[MOD] signs loaded=[MOD] signs cargados

View File

@ -1,27 +1,12 @@
# textdomain: signs_lib # textdomain: signs_lib
Locked sign, owned by @1@n=Panneau verrouillé, appartient à @1@n Locked sign, owned by @1@n=Panneau verrouillé, appartient à @1@n
Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.=
There are no signs in the currently-loaded terrain.=
Found a total of @1 sign nodes across @2 blocks.=
Regenerating sign entities ...=
Finished.=
Write= Write=
@1 wrote "@2" to sign at @3= Unicode font=
@1 flipped the wide-font switch to "@2" at @3= Wide font=
@1 flipped the unicode-font switch to "@2" at @3= Wooden Wall Sign=
Steel Wall Sign=
##### not used anymore #####
locked =verrouillé
@1 wrote "@2" to @3sign at @4=@1 a écrit "@2" sur le panneau @3en @4
Sign=Panneau
Can edit all locked signs=Peut modifier les panneaux verrouillés
Locked Sign=Panneau (verrouillé)
green=vert
yellow=jaune
red=rouge
white_red=rouge et blanc
white_black=noir et blanc
orange=orange
blue=bleu
brown=marron
Sign (@1, metal)=Panneau (@1, métal)
Attempt to register unknown node as fence=Tentative d'enregistrer un nœud inconnu comme barrière
Registered @1 and @2=Enregistrement de @1 et @
[MOD] signs loaded=[MOD] signs chargé

View File

@ -1,27 +1,12 @@
# textdomain: signs_lib # textdomain: signs_lib
Locked sign, owned by @1@n=Papan tanda berkunci, milik @1@n Locked sign, owned by @1@n=Papan tanda berkunci, milik @1@n
Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.=
There are no signs in the currently-loaded terrain.=
Found a total of @1 sign nodes across @2 blocks.=
Regenerating sign entities ...=
Finished.=
Write= Write=
@1 wrote "@2" to sign at @3= Unicode font=
@1 flipped the wide-font switch to "@2" at @3= Wide font=
@1 flipped the unicode-font switch to "@2" at @3= Wooden Wall Sign=
Steel Wall Sign=
##### not used anymore #####
locked =berkunci
@1 wrote "@2" to @3sign at @4=@1 menulis "@2" atas papan tanda @3dekat @4
Sign=Papan Tanda
Can edit all locked signs=Boleh sunting semua papan tanda berkunci
Locked Sign=Papan Tanda Berkunci
green=hijau
yellow=kuning
red=merah
white_red=putih_merah
white_black=putih_hitam
orange=jingga
blue=biru
brown=perang
Sign (@1, metal)=Papan Tanda (@1, logam)
Attempt to register unknown node as fence=Cuba untuk mendaftar nod tidak diketahui sebagai pagar
Registered @1 and @2=Telah daftar @1 dan @2
[MOD] signs loaded=[MODS] signs telah dimuatkan

View File

@ -1,27 +1,12 @@
# textdomain: signs_lib # textdomain: signs_lib
Locked sign, owned by @1@n=защищенная табличка, пренадлежит @1@n Locked sign, owned by @1@n=защищенная табличка, пренадлежит @1@n
Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.=
There are no signs in the currently-loaded terrain.=
Found a total of @1 sign nodes across @2 blocks.=
Regenerating sign entities ...=
Finished.=
Write=записать Write=записать
@1 wrote "@2" to sign at @3= Unicode font=
@1 flipped the wide-font switch to "@2" at @3= Wide font=
@1 flipped the unicode-font switch to "@2" at @3= Wooden Wall Sign=
Steel Wall Sign=
##### not used anymore #####
locked =защищенный
@1 wrote "@2" to @3sign at @4=@1 записал "@2" в @3sign на @4
Sign=табличка
Can edit all locked signs=Может редактировать все защищенные таблички
Locked Sign=защищенная табличка
green=зеленая
yellow=желтая
red=красная
white_red=краснобелая
white_black=чернобелая
orange=оранжевая
blue=синея
brown=коричневая
Sign (@1, metal)=Табличка (@1, металл)
Attempt to register unknown node as fence=Попытка зарегистрировать неизвестный узел как забор
Registered @1 and @2=Зарегистрировано @1 для @2
[MOD] signs loaded=[MOD] мод табличек загружен

View File

@ -1,6 +1,12 @@
# textdomain: signs_lib # textdomain: signs_lib
Locked sign, owned by @1@n= Locked sign, owned by @1@n=
Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.=
There are no signs in the currently-loaded terrain.=
Found a total of @1 sign nodes across @2 blocks.=
Regenerating sign entities ...=
Finished.=
Write= Write=
@1 wrote "@2" to sign at @3= Unicode font=
@1 flipped the wide-font switch to "@2" at @3= Wide font=
@1 flipped the unicode-font switch to "@2" at @3= Wooden Wall Sign=
Steel Wall Sign=

1
settingstypes.txt Normal file
View File

@ -0,0 +1 @@
signs_lib.edit_priv (Allows to rotate signs and to open (and consequently edit) any default sign formspec) string signslib_edit

View File

@ -1,8 +1,10 @@
-- Definitions for standard minetest_game wooden and steel wall signs -- Definitions for standard minetest_game wooden and steel wall signs
local S = signs_lib.S
if minetest.get_modpath("default") then if minetest.get_modpath("default") then
signs_lib.register_sign("default:sign_wall_wood", { signs_lib.register_sign("default:sign_wall_wood", {
description = "Wooden wall sign", description = S("Wooden Wall Sign"),
inventory_image = "signs_lib_sign_wall_wooden_inv.png", inventory_image = "signs_lib_sign_wall_wooden_inv.png",
tiles = { tiles = {
"signs_lib_sign_wall_wooden.png", "signs_lib_sign_wall_wooden.png",
@ -20,7 +22,7 @@ if minetest.get_modpath("default") then
}) })
signs_lib.register_sign("default:sign_wall_steel", { signs_lib.register_sign("default:sign_wall_steel", {
description = "Steel wall sign", description = S("Steel Wall Sign"),
inventory_image = "signs_lib_sign_wall_steel_inv.png", inventory_image = "signs_lib_sign_wall_steel_inv.png",
tiles = { tiles = {
"signs_lib_sign_wall_steel.png", "signs_lib_sign_wall_steel.png",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 B

After

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 B

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 B

After

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 B

After

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 B

After

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 B

After

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 B

After

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 B

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 B

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 B

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 B

After

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 B

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 B

After

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 B

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 B

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 B

After

Width:  |  Height:  |  Size: 128 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 B

After

Width:  |  Height:  |  Size: 128 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 B

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 B

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 B

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 B

After

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 B

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 B

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 B

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 B

After

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 B

After

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 B

After

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 B

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 B

After

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 B

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 B

After

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 B

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 B

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 B

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 B

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

After

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 74 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 B

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 B

After

Width:  |  Height:  |  Size: 92 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 B

After

Width:  |  Height:  |  Size: 115 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 B

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 B

After

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 B

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 B

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 B

After

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 B

After

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 B

After

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 B

After

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 B

After

Width:  |  Height:  |  Size: 96 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 B

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 B

After

Width:  |  Height:  |  Size: 87 B

Some files were not shown because too many files have changed in this diff Show More