Compare commits

..

23 Commits

Author SHA1 Message Date
1d98c6a5cc Add Ukrainian localization (#36) 2025-03-14 20:54:09 -04:00
87d65439a1 Convert CR(LF)s to LFs (#32) 2024-09-06 19:04:15 -04:00
4309b3575a Fix placing certain signs (#29)
* Fix placing certain signs

This fixes https://github.com/mt-mods/signs_lib/issues/1 by removing node extensions before placing, just incase player got a hold of certain sign nodes they shouldnt have.

* fix typo

fix typo
2024-06-03 18:10:42 -04:00
bb13ba6d7c Add support for Ukrainian-specific Cyrillic letters (#30) 2024-05-29 18:21:33 -04:00
3d5ba32fa0 Fix out-of-bounds textures in [combine (#28) 2024-04-22 21:50:06 +10:00
0847176bdb Revert "Fix out-of-bounds textures in [combine (#27)"
This reverts commit 4fb53b67e8.
2024-04-19 17:52:33 +10:00
4fb53b67e8 Fix out-of-bounds textures in [combine (#27) 2024-04-19 13:44:16 +10:00
e5f73438ce make signs non ground content (#26) 2024-02-29 18:48:31 -05: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
8aafe6608c update API.md 2022-07-21 11:47:07 +02:00
e66863d115 Merge pull request #11 from Niklp09/master
use MT5 translator
2022-06-19 17:18:57 +02:00
4018128e84 use signs_lib.S 2022-06-19 08:33:39 +02:00
a9858c76af use MT5 translator 2022-06-18 20:15:43 +02:00
60d67afab3 force all signs into the sign group 2022-05-11 20:41:09 +02:00
4dbfbec96e remove sign entity if sign is gone (due to voxelmanip or such) (#9) 2022-05-10 19:47:15 -04:00
14efa6eeb7 hotfix fake player action 2022-03-09 01:10:54 +01:00
49 changed files with 224 additions and 666 deletions

1
.gitattributes vendored Normal file
View File

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

View File

@ -12,6 +12,5 @@ read_globals = {
"ItemStack", "vector", "default", "ItemStack", "vector", "default",
-- Mod deps -- Mod deps
"intllib",
"screwdriver", "screwdriver",
} }

4
API.md
View File

@ -236,7 +236,7 @@ signs_lib.register_sign("basic_signs:sign_wall_glass", {
allow_onpole = true, allow_onpole = true,
allow_onpole_horizontal = true, allow_onpole_horizontal = true,
allow_yard = true, allow_yard = true,
use_texture_alpha = true, use_texture_alpha = "blend",
}) })
``` ```
@ -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)

149
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.gettext 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,16 +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.sign = 1
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.sign = 1
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}
@ -162,12 +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)
local node = minetest.get_node(self.object:get_pos())
if minetest.get_item_group(node.name, "sign") == 0 then
self.object:remove()
end
end,
on_blast = function(self, damage)
return false, false, {}
end,
}) })
function signs_lib.delete_objects(pos) function signs_lib.delete_objects(pos)
@ -455,8 +470,8 @@ local math_max = math.max
local function fill_line(x, y, w, c, font_size, colorbgw) local function fill_line(x, y, w, c, font_size, colorbgw)
c = c or "0" c = c or "0"
local tex = { } local tex = { }
for xx = 0, math.max(0, w), colorbgw do for xx = x, w, colorbgw do
table.insert(tex, (":%d,%d=signs_lib_color_"..font_size.."px_%s.png"):format(x + xx, y, c)) table.insert(tex, (":%d,%d=signs_lib_color_"..font_size.."px_%s.png"):format(xx, y, c))
end end
return table.concat(tex) return table.concat(tex)
end end
@ -568,8 +583,8 @@ 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 then
width = 0 width = 0
else else
maxw = math_max(width, maxw) maxw = math_max(width, maxw)
@ -592,6 +607,7 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi
off = ch_offs, off = ch_offs,
tex = tex, tex = tex,
col = ("%X"):format(cur_color), col = ("%X"):format(cur_color),
w = w,
}) })
end end
ch_offs = ch_offs + w ch_offs = ch_offs + w
@ -600,8 +616,8 @@ 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 then
width = 0 width = 0
else else
maxw = math_max(width, maxw) maxw = math_max(width, maxw)
@ -611,6 +627,7 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi
off = ch_offs, off = ch_offs,
tex = char_tex(font_name, c), tex = char_tex(font_name, c),
col = ("%X"):format(cur_color), col = ("%X"):format(cur_color),
w = w,
}) })
end end
ch_offs = ch_offs + w ch_offs = ch_offs + w
@ -618,7 +635,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
@ -627,7 +644,8 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi
local texture = { } local texture = { }
local start_xpos = math.floor((line_width - maxw) / 2) + def.x_offset local start_xpos = math.max(0, math.floor((line_width - maxw) / 2)) + def.x_offset
local end_xpos = math.min(start_xpos + maxw, line_width)
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
@ -636,31 +654,33 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi
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) > end_xpos) then
table.insert(texture, fill_line(xpos, ypos, maxw, "n", font_size, colorbgw)) table.insert(texture, fill_line(xpos, ypos, end_xpos, "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)) table.insert(texture, fill_line(xpos, ypos, end_xpos, 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 xpos + ch.off + ch.w > end_xpos then
table.insert(texture, fill_line(xpos + ch.off, ypos, end_xpos, "n", font_size, colorbgw))
break
end
if ch.col ~= cur_color then if ch.col ~= cur_color then
cur_color = ch.col cur_color = ch.col
table.insert(texture, fill_line(xpos + ch.off, ypos, maxw, cur_color, font_size, colorbgw)) table.insert(texture, fill_line(xpos + ch.off, ypos, end_xpos, cur_color, font_size, colorbgw))
end end
table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, ch.tex)) table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, ch.tex))
end end
table.insert( xpos = xpos + word.w
texture, if xpos < end_xpos then
(":%d,%d="):format(xpos + word.w, ypos) .. char_tex(font_name, " ") table.insert(texture, (":%d,%d="):format(xpos, ypos) .. char_tex(font_name, " "))
) xpos = xpos + cwidth_tab[" "]
xpos = xpos + word.w + cwidth_tab[" "] 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(xpos, ypos, end_xpos, "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
@ -722,6 +742,7 @@ end
function signs_lib.rightclick_sign(pos, node, player, itemstack, pointed_thing) function signs_lib.rightclick_sign(pos, node, player, itemstack, pointed_thing)
if not player or not signs_lib.can_modify(pos, player) then return end if not player or not signs_lib.can_modify(pos, player) then return end
if not player.get_meta then return end
player:get_meta():set_string("signslib:pos", minetest.pos_to_string(pos)) player:get_meta():set_string("signslib:pos", minetest.pos_to_string(pos))
minetest.show_formspec(player:get_player_name(), "signs_lib:sign", get_sign_formspec(pos, node.name)) minetest.show_formspec(player:get_player_name(), "signs_lib:sign", get_sign_formspec(pos, node.name))
@ -737,6 +758,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 {}
@ -788,6 +818,9 @@ function signs_lib.update_sign(pos, fields)
local ownstr = "" local ownstr = ""
if owner ~= "" then ownstr = S("Locked sign, owned by @1\n", owner) end if owner ~= "" then ownstr = S("Locked sign, owned by @1\n", owner) end
-- Fix pasting from Windows: CR instead of LF
text = string.gsub(text, "\r\n?", "\n")
meta:set_string("text", text) meta:set_string("text", text)
meta:set_string("infotext", ownstr..make_infotext(text).." ") meta:set_string("infotext", ownstr..make_infotext(text).." ")
@ -798,7 +831,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)
@ -807,7 +849,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
@ -904,7 +946,13 @@ function signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, locke
local controls = placer:get_player_control() local controls = placer:get_player_control()
local signname = itemstack:get_name() local signname = itemstack:get_name()
-- in case player has sign nodes they shouldn't, remove extensions for normal sign
local no_wall_name = string.gsub(signname, "_wall", "") local no_wall_name = string.gsub(signname, "_wall", "")
no_wall_name = string.gsub(no_wall_name, "_yard", "")
no_wall_name = string.gsub(no_wall_name, "_hanging", "")
no_wall_name = string.gsub(no_wall_name, "_onpole_horiz", "")
no_wall_name = string.gsub(no_wall_name, "_onpole", "")
local def = minetest.registered_items[signname] local def = minetest.registered_items[signname]
@ -946,7 +994,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)
@ -968,6 +1016,7 @@ end
function signs_lib.register_sign(name, raw_def) function signs_lib.register_sign(name, raw_def)
local def = table.copy(raw_def) local def = table.copy(raw_def)
def.is_ground_content = false
if raw_def.entity_info == "standard" then if raw_def.entity_info == "standard" then
def.entity_info = { def.entity_info = {
@ -979,6 +1028,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
@ -1022,6 +1072,9 @@ function signs_lib.register_sign(name, raw_def)
def.groups = signs_lib.standard_wood_groups def.groups = signs_lib.standard_wood_groups
end end
-- force all signs into the sign group
def.groups.sign = def.groups.sign or 1
local cbox = signs_lib.make_selection_boxes(35, 25) local cbox = signs_lib.make_selection_boxes(35, 25)
def.selection_box = raw_def.selection_box or cbox def.selection_box = raw_def.selection_box or cbox
@ -1243,7 +1296,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
@ -1262,13 +1315,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
@ -1280,11 +1333,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_privilege("signslib_edit", {}) minetest.register_on_mods_loaded(function()
if not minetest.registered_privileges[signs_lib.edit_priv] then
minetest.register_privilege("signslib_edit", {})
end
end)
@ -1304,14 +1361,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
@ -1329,11 +1386,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)
@ -1357,20 +1414,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

@ -231,6 +231,7 @@ signs_lib.unicode_install({38,"26"})
dofile(signs_lib.path.."/nonascii-de.lua") dofile(signs_lib.path.."/nonascii-de.lua")
dofile(signs_lib.path.."/nonascii-fr.lua") dofile(signs_lib.path.."/nonascii-fr.lua")
dofile(signs_lib.path.."/nonascii-pl.lua") dofile(signs_lib.path.."/nonascii-pl.lua")
dofile(signs_lib.path.."/nonascii-ua.lua")
local nmdc = { local nmdc = {
[36] = "$", [36] = "$",

View File

@ -7,8 +7,9 @@ signs_lib = {}
signs_lib.path = minetest.get_modpath(minetest.get_current_modname()) signs_lib.path = minetest.get_modpath(minetest.get_current_modname())
local S = dofile(signs_lib.path .. "/intllib.lua") signs_lib.S = minetest.get_translator(minetest.get_current_modname())
signs_lib.gettext = S
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")

View File

@ -1,45 +0,0 @@
-- Fallback functions for when `intllib` is not installed.
-- Code released under Unlicense <http://unlicense.org>.
-- Get the latest version of this file at:
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
local function format(str, ...)
local args = { ... }
local function repl(escape, open, num, close)
if escape == "" then
local replacement = tostring(args[tonumber(num)])
if open == "" then
replacement = replacement..close
end
return replacement
else
return "@"..open..num..close
end
end
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
end
local gettext, ngettext
if minetest.get_modpath("intllib") then
if intllib.make_gettext_pair then
-- New method using gettext.
gettext, ngettext = intllib.make_gettext_pair()
else
-- Old method using text files.
gettext = intllib.Getter()
end
end
-- Fill in missing functions.
gettext = gettext or function(msgid, ...)
return format(msgid, ...)
end
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
return format(n==1 and msgid or msgid_plural, ...)
end
return gettext, ngettext

View File

@ -1,97 +0,0 @@
# German Translation for the signs_lib mod.
# Copyright (C) 2018 Vanessa Ezekowitz
# This file is distributed under the same license as the signs_lib package.
# Xanthin, 2017.
# CodeXP <codexp@gmx.net>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 18:31+0200\n"
"PO-Revision-Date: 2018-03-24 22:00+0100\n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: init.lua
msgid "Write"
msgstr "schreiben"
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr "gesperrter Schild, gehört @1\n"
#: init.lua
msgid "locked "
msgstr "gesperrt "
#: init.lua
#, fuzzy
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr "@1 schrieb \"@2\" auf das @3Schild bei @4"
#: init.lua
msgid "Sign"
msgstr "Schild"
#: init.lua
msgid "Can edit all locked signs"
msgstr "Kann alle gesperrte Schilder bearbeiten"
#: init.lua
msgid "Locked Sign"
msgstr "gesperrter Schild"
#: init.lua
msgid "green"
msgstr "grün"
#: init.lua
msgid "yellow"
msgstr "gelb"
#: init.lua
msgid "red"
msgstr "rot"
#: init.lua
msgid "white_red"
msgstr "weißrot"
#: init.lua
msgid "white_black"
msgstr "schwarzweiß"
#: init.lua
msgid "orange"
msgstr "orange"
#: init.lua
msgid "blue"
msgstr "blau"
#: init.lua
msgid "brown"
msgstr "braun"
#: init.lua
msgid "Sign (@1, metal)"
msgstr "Schild (@1, Metall)"
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr "Versuch ein unbekanntes Element als Zaun zu registrieren"
#: init.lua
msgid "Registered @1 and @2"
msgstr "Registrierte @1 und @2"
#: init.lua
msgid "[MOD] signs loaded"
msgstr "[MOD] Schilder-Mod geladen"

View File

@ -1,95 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 18:22+0200\n"
"PO-Revision-Date: 2017-07-31 18:30+0200\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Last-Translator: Carlos Barraza\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: es\n"
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr ""
#: init.lua
msgid "locked "
msgstr "bloqueada "
#: init.lua
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr "@1 escribio \"@2\" en el cartel @3en @4"
#: init.lua
msgid "Sign"
msgstr "Letrero"
#: init.lua
msgid "Can edit all locked signs"
msgstr ""
#: init.lua
#, fuzzy
msgid "Locked Sign"
msgstr "Letrero bloqueada"
#: init.lua
msgid "green"
msgstr "verde"
#: init.lua
msgid "yellow"
msgstr "amarillo"
#: init.lua
msgid "red"
msgstr "rojo"
#: init.lua
#, fuzzy
msgid "white_red"
msgstr "rojo y blanco"
#: init.lua
#, fuzzy
msgid "white_black"
msgstr "negro y blanco"
#: init.lua
msgid "orange"
msgstr "naranja"
#: init.lua
msgid "blue"
msgstr "azul"
#: init.lua
msgid "brown"
msgstr "marrón"
#: init.lua
#, fuzzy
msgid "Sign (@1, metal)"
msgstr "Letrero (@1, metal)"
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr ""
#: init.lua
msgid "Registered @1 and @2"
msgstr "Registrado @1 y @2"
#: init.lua
msgid "[MOD] signs loaded"
msgstr "[MOD] signs cargados"

View File

@ -1,91 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 18:13+0200\n"
"PO-Revision-Date: 2017-07-31 18:22+0200\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Last-Translator: fat115 <fat115@framasoft.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: fr\n"
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr "Panneau verrouillé, appartient à @1\n"
#: init.lua
msgid "locked "
msgstr "verrouillé "
#: init.lua
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr "@1 a écrit \"@2\" sur le panneau @3en @4"
#: init.lua
msgid "Sign"
msgstr "Panneau"
#: init.lua
msgid "Can edit all locked signs"
msgstr "Peut modifier les panneaux verrouillés"
#: init.lua
msgid "Locked Sign"
msgstr "Panneau (verrouillé)"
#: init.lua
msgid "green"
msgstr "vert"
#: init.lua
msgid "yellow"
msgstr "jaune"
#: init.lua
msgid "red"
msgstr "rouge"
#: init.lua
msgid "white_red"
msgstr "rouge et blanc"
#: init.lua
msgid "white_black"
msgstr "noir et blanc"
#: init.lua
msgid "orange"
msgstr "orange"
#: init.lua
msgid "blue"
msgstr "bleu"
#: init.lua
msgid "brown"
msgstr "marron"
#: init.lua
msgid "Sign (@1, metal)"
msgstr "Panneau (@1, métal)"
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr "Tentative d'enregistrer un nœud inconnu comme barrière"
#: init.lua
msgid "Registered @1 and @2"
msgstr "Enregistrement de @1 et @"
#: init.lua
msgid "[MOD] signs loaded"
msgstr "[MOD] signs chargé"

View File

@ -1,91 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 18:00+0200\n"
"PO-Revision-Date: 2017-11-17 02:38+0800\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.4\n"
"Last-Translator: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Language: ms\n"
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr "Papan tanda berkunci, milik @1\n"
#: init.lua
msgid "locked "
msgstr "berkunci "
#: init.lua
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr "@1 menulis \"@2\" atas papan tanda @3dekat @4"
#: init.lua
msgid "Sign"
msgstr "Papan Tanda"
#: init.lua
msgid "Can edit all locked signs"
msgstr "Boleh sunting semua papan tanda berkunci"
#: init.lua
msgid "Locked Sign"
msgstr "Papan Tanda Berkunci"
#: init.lua
msgid "green"
msgstr "hijau"
#: init.lua
msgid "yellow"
msgstr "kuning"
#: init.lua
msgid "red"
msgstr "merah"
#: init.lua
msgid "white_red"
msgstr "putih_merah"
#: init.lua
msgid "white_black"
msgstr "putih_hitam"
#: init.lua
msgid "orange"
msgstr "jingga"
#: init.lua
msgid "blue"
msgstr "biru"
#: init.lua
msgid "brown"
msgstr "perang"
#: init.lua
msgid "Sign (@1, metal)"
msgstr "Papan Tanda (@1, logam)"
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr "Cuba untuk mendaftar nod tidak diketahui sebagai pagar"
#: init.lua
msgid "Registered @1 and @2"
msgstr "Telah daftar @1 dan @2"
#: init.lua
msgid "[MOD] signs loaded"
msgstr "[MODS] signs telah dimuatkan"

View File

@ -1,94 +0,0 @@
# Russian Translation for the signs_lib mod.
# Copyright (C) 2018 Vanessa Ezekowitz
# This file is distributed under the same license as the signs_lib package.
# CodeXP <codexp@gmx.net>, 2018.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: signs_lib\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-24 22:23+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: init.lua
msgid "Write"
msgstr "записать"
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr "защищенная табличка, пренадлежит @1\n"
#: init.lua
msgid "locked "
msgstr "защищенный "
#: init.lua
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr "@1 записал \"@2\" в @3sign на @4"
#: init.lua
msgid "Sign"
msgstr "табличка"
#: init.lua
msgid "Can edit all locked signs"
msgstr "Может редактировать все защищенные таблички"
#: init.lua
msgid "Locked Sign"
msgstr "защищенная табличка"
#: init.lua
msgid "green"
msgstr "зеленая"
#: init.lua
msgid "yellow"
msgstr "желтая"
#: init.lua
msgid "red"
msgstr "красная"
#: init.lua
msgid "white_red"
msgstr "краснобелая"
#: init.lua
msgid "white_black"
msgstr "чернобелая"
#: init.lua
msgid "orange"
msgstr "оранжевая"
#: init.lua
msgid "blue"
msgstr "синея"
#: init.lua
msgid "brown"
msgstr "коричневая"
#: init.lua
msgid "Sign (@1, metal)"
msgstr "Табличка (@1, металл)"
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr "Попытка зарегистрировать неизвестный узел как забор"
#: init.lua
msgid "Registered @1 and @2"
msgstr "Зарегистрировано @1 для @2"
#: init.lua
msgid "[MOD] signs loaded"
msgstr "[MOD] мод табличек загружен"

12
locale/signs_lib.de.tr Normal file
View File

@ -0,0 +1,12 @@
# textdomain: signs_lib
Locked sign, owned by @1@n=Abgeschlossenes Schild, gehört @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.=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.
There are no signs in the currently-loaded terrain.=Im derzeit geladenen Gelände befinden sich keine Schilder.
Found a total of @1 sign nodes across @2 blocks.=Insgesamt wurden @1 Schild-Nodes über @2 Kartenblöcke gefunden.
Regenerating sign entities ...=Schild-Entities werden neu erzeugt ...
Finished.=Fertig.
Write=Schreiben
Unicode font=Unicode-Schrift
Wide font=Weite Schrift
Wooden Wall Sign=Holzwandschild
Steel Wall Sign=Stahlwandschild

12
locale/signs_lib.es.tr Normal file
View File

@ -0,0 +1,12 @@
# textdomain: signs_lib
Locked sign, owned by @1@n=Cartel bloqueado, propiedad de @1
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.
There are no signs in the currently-loaded terrain.=No hay carteles en el terreno actual cargado.
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).
Regenerating sign entities ...=Regenerando entidades de los carteles...
Finished.=Terminado
Write=Escribir
Unicode font=Fuente unicode
Wide font=Fuente ancha
Wooden Wall Sign=Cartel de Madera
Steel Wall Sign=Cartel de Acero

12
locale/signs_lib.fr.tr Normal file
View File

@ -0,0 +1,12 @@
# textdomain: signs_lib
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=
Unicode font=
Wide font=
Wooden Wall Sign=
Steel Wall Sign=

12
locale/signs_lib.ms.tr Normal file
View File

@ -0,0 +1,12 @@
# textdomain: signs_lib
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=
Unicode font=
Wide font=
Wooden Wall Sign=
Steel Wall Sign=

12
locale/signs_lib.ru.tr Normal file
View File

@ -0,0 +1,12 @@
# textdomain: signs_lib
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=записать
Unicode font=
Wide font=
Wooden Wall Sign=
Steel Wall Sign=

14
locale/signs_lib.uk.tr Normal file
View File

@ -0,0 +1,14 @@
# textdomain: signs_lib
Signs Lib=Таблички Lib
Adds signs with readable text.=Додає таблички з читабельним текстом.
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.=Загалом знайдено @1 табличок в @2 блоках.
Regenerating sign entities ...=Регенерація сутностей табличок...
Finished.=Завершено.
Write=Записати
Unicode font=Юнікод
Wide font=Широкий
Wooden Wall Sign=Дерев'яна табличка
Steel Wall Sign=Сталева табличка

View File

@ -1,94 +0,0 @@
# LANGUAGE Translation for the signs_lib mod.
# Copyright (C) 2018 Vanessa Ezekowitz
# This file is distributed under the same license as the signs_lib package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: signs_lib\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-24 22:23+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: init.lua
msgid "Write"
msgstr ""
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr ""
#: init.lua
msgid "locked "
msgstr ""
#: init.lua
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr ""
#: init.lua
msgid "Sign"
msgstr ""
#: init.lua
msgid "Can edit all locked signs"
msgstr ""
#: init.lua
msgid "Locked Sign"
msgstr ""
#: init.lua
msgid "green"
msgstr ""
#: init.lua
msgid "yellow"
msgstr ""
#: init.lua
msgid "red"
msgstr ""
#: init.lua
msgid "white_red"
msgstr ""
#: init.lua
msgid "white_black"
msgstr ""
#: init.lua
msgid "orange"
msgstr ""
#: init.lua
msgid "blue"
msgstr ""
#: init.lua
msgid "brown"
msgstr ""
#: init.lua
msgid "Sign (@1, metal)"
msgstr ""
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr ""
#: init.lua
msgid "Registered @1 and @2"
msgstr ""
#: init.lua
msgid "[MOD] signs loaded"
msgstr ""

12
locale/template.txt Normal file
View File

@ -0,0 +1,12 @@
# textdomain: signs_lib
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=
Unicode font=
Wide font=
Wooden Wall Sign=
Steel Wall Sign=

View File

@ -1,5 +1,5 @@
name = signs_lib name = signs_lib
author = VanessaE author = VanessaE
optional_depends = intllib, screwdriver, streetspoles, streetlamps, cottages, prefab_redo, default optional_depends = screwdriver, streetspoles, streetlamps, cottages, prefab_redo, default
description = Adds signs with readable text. description = Adds signs with readable text.
min_minetest_version = 5.4.0 min_minetest_version = 5.4.0

8
nonascii-ua.lua Normal file
View File

@ -0,0 +1,8 @@
signs_lib.unicode_install({208,132,"0404"})
signs_lib.unicode_install({208,134,"0406"})
signs_lib.unicode_install({208,135,"0407"})
signs_lib.unicode_install({209,148,"0454"})
signs_lib.unicode_install({209,150,"0456"})
signs_lib.unicode_install({209,151,"0457"})
signs_lib.unicode_install({210,144,"0490"})
signs_lib.unicode_install({210,145,"0491"})

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.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

8
util/nonascii-ua Normal file
View File

@ -0,0 +1,8 @@
ґ
і
ї
є
Ґ
І
Ї
Є