From 2fa93b219eadfcdcf8f1d472aad046fc62d5b99d Mon Sep 17 00:00:00 2001 From: Vanessa Dannenberg Date: Fri, 3 Aug 2018 09:31:05 -0400 Subject: update castles, cottages, digistuff, gloopblocks, locks, maptools, mesecons, pipeworks, technic, unified inventory, unified dyes, and xban2 --- anvil/README.md | 3 + anvil/README.txt | 3 - castle_farming/README.md | 13 + castle_farming/README.txt | 20 - castle_lighting/README.md | 18 + castle_lighting/README.txt | 23 - castle_masonry/README.md | 34 + castle_masonry/README.txt | 43 - castle_shields/README.md | 23 + castle_shields/README.txt | 25 - castle_tapestries/README.md | 9 + castle_tapestries/README.txt | 13 - cottages/depends.txt | 4 +- cottages/init.lua | 5 + cottages/nodes_feldweg.lua | 2 +- cottages/nodes_furniture.lua | 10 +- cottages/nodes_historic.lua | 6 +- cottages/nodes_mining.lua | 2 +- cottages/nodes_roof.lua | 4 +- cottages/nodes_straw.lua | 6 +- cottages/screenshot.jpg | Bin 0 -> 108827 bytes digistuff/init.lua | 86 ++ gloopblocks/crafts.lua | 12 +- locks/init.lua | 1226 ++++++++++++++------------- locks/shared_locked_chest.lua | 275 +++--- maptools/default_nodes.lua | 40 +- maptools/init.lua | 5 + maptools/nodes.lua | 27 + maptools/tools.lua | 4 +- mesecons/oldwires.lua | 2 +- mesecons_button/init.lua | 2 +- mesecons_delayer/init.lua | 1 + mesecons_extrawires/corner.lua | 2 + mesecons_extrawires/crossover.lua | 4 + mesecons_extrawires/tjunction.lua | 2 + mesecons_extrawires/vertical.lua | 9 +- mesecons_hydroturbine/init.lua | 4 +- mesecons_insulated/init.lua | 2 + mesecons_luacontroller/init.lua | 6 +- mesecons_microcontroller/init.lua | 14 +- mesecons_movestones/init.lua | 16 +- mesecons_pistons/init.lua | 2 + mesecons_powerplant/init.lua | 2 +- mesecons_pressureplates/init.lua | 25 +- mesecons_receiver/init.lua | 7 +- mesecons_torch/init.lua | 4 +- mesecons_wires/init.lua | 1 + moreblocks/redefinitions.lua | 5 + moreblocks/stairsplus/registrations.lua | 4 + pipeworks/common.lua | 131 +++ pipeworks/filter-injector.lua | 8 +- pipeworks/item_transport.lua | 30 +- pipeworks/legacy.lua | 2 +- pipeworks/luaentity.lua | 38 +- pipeworks/vacuum_tubes.lua | 2 +- pipeworks/wielder.lua | 91 +- player_textures/textures/player_cheapie.png | Bin 679 -> 4814 bytes ropes/LICENSE.md | 23 +- signs_lib/init.lua | 2 +- technic/doc/api.md | 7 +- technic/helpers.lua | 63 +- technic/machines/LV/cnc.lua | 2 +- technic/machines/LV/solar_panel.lua | 5 +- technic/machines/MV/tool_workshop.lua | 2 +- technic/machines/MV/wind_mill.lua | 3 +- technic/machines/other/constructor.lua | 4 +- technic/machines/other/injector.lua | 2 +- technic/machines/power_monitor.lua | 2 +- technic/machines/register/battery_box.lua | 5 +- technic/machines/register/generator.lua | 2 +- technic/machines/register/machine_base.lua | 2 +- technic/machines/register/solar_array.lua | 5 +- technic/machines/supply_converter.lua | 4 +- technic/machines/switching_station.lua | 6 +- technic_chests/common.lua | 4 +- technic_chests/init.lua | 8 + technic_worldgen/oregen.lua | 17 +- unified_inventory/api.lua | 12 +- unified_inventory/bags.lua | 24 +- unified_inventory/init.lua | 25 +- unified_inventory/internal.lua | 58 +- unified_inventory/intllib.lua | 45 + unified_inventory/locale/de.po | 366 ++++++++ unified_inventory/locale/de.txt | 98 --- unified_inventory/locale/es.po | 366 ++++++++ unified_inventory/locale/es.txt | 72 -- unified_inventory/locale/fr.po | 364 ++++++++ unified_inventory/locale/fr.txt | 69 -- unified_inventory/locale/ms.po | 369 ++++++++ unified_inventory/locale/pl.po | 359 ++++++++ unified_inventory/locale/pl.txt | 68 -- unified_inventory/locale/pt.po | 366 ++++++++ unified_inventory/locale/pt.txt | 107 --- unified_inventory/locale/ru.po | 366 ++++++++ unified_inventory/locale/ru.txt | 73 -- unified_inventory/locale/template.pot | 358 ++++++++ unified_inventory/locale/template.txt | 104 --- unified_inventory/locale/tr.po | 360 ++++++++ unified_inventory/locale/tr.txt | 69 -- unified_inventory/register.lua | 60 +- unified_inventory/waypoints.lua | 30 +- unifieddyes/init.lua | 2 +- xban2/init.lua | 4 +- 103 files changed, 4856 insertions(+), 1863 deletions(-) create mode 100644 anvil/README.md delete mode 100644 anvil/README.txt create mode 100644 castle_farming/README.md delete mode 100644 castle_farming/README.txt create mode 100644 castle_lighting/README.md delete mode 100644 castle_lighting/README.txt create mode 100644 castle_masonry/README.md delete mode 100644 castle_masonry/README.txt create mode 100644 castle_shields/README.md delete mode 100644 castle_shields/README.txt create mode 100644 castle_tapestries/README.md delete mode 100644 castle_tapestries/README.txt create mode 100644 cottages/screenshot.jpg create mode 100644 unified_inventory/intllib.lua create mode 100644 unified_inventory/locale/de.po delete mode 100644 unified_inventory/locale/de.txt create mode 100644 unified_inventory/locale/es.po delete mode 100644 unified_inventory/locale/es.txt create mode 100644 unified_inventory/locale/fr.po delete mode 100644 unified_inventory/locale/fr.txt create mode 100644 unified_inventory/locale/ms.po create mode 100644 unified_inventory/locale/pl.po delete mode 100644 unified_inventory/locale/pl.txt create mode 100644 unified_inventory/locale/pt.po delete mode 100644 unified_inventory/locale/pt.txt create mode 100644 unified_inventory/locale/ru.po delete mode 100644 unified_inventory/locale/ru.txt create mode 100644 unified_inventory/locale/template.pot delete mode 100644 unified_inventory/locale/template.txt create mode 100644 unified_inventory/locale/tr.po delete mode 100644 unified_inventory/locale/tr.txt diff --git a/anvil/README.md b/anvil/README.md new file mode 100644 index 0000000..227321f --- /dev/null +++ b/anvil/README.md @@ -0,0 +1,3 @@ +Anvil mod by Sokomine, originally a part of the Cottages mod but extracted to stand alone. + +This anvil (and its associated hammer) allows a player to repair worn tools. Place the worn tool in the anvil's inventory and strike it with the hammer to improve its condition. \ No newline at end of file diff --git a/anvil/README.txt b/anvil/README.txt deleted file mode 100644 index 227321f..0000000 --- a/anvil/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -Anvil mod by Sokomine, originally a part of the Cottages mod but extracted to stand alone. - -This anvil (and its associated hammer) allows a player to repair worn tools. Place the worn tool in the anvil's inventory and strike it with the hammer to improve its condition. \ No newline at end of file diff --git a/castle_farming/README.md b/castle_farming/README.md new file mode 100644 index 0000000..c67b5de --- /dev/null +++ b/castle_farming/README.md @@ -0,0 +1,13 @@ +## Castle farm products + +B: Philipbenr, DanDuncombe, FaceDeer + +Licence: MIT + +=-=-=-=-=-=-=-=-=-= + +Contains farm products useful for decorating a castle: + +* Hide wall and floor coverings +* Bound straw bale +* Straw training dummy diff --git a/castle_farming/README.txt b/castle_farming/README.txt deleted file mode 100644 index a0334bd..0000000 --- a/castle_farming/README.txt +++ /dev/null @@ -1,20 +0,0 @@ -=-=-=-=-=-=-=-=-=-= - -Castles Mod -by: Philipbenr And DanDuncombe - -=-=-=-=-=-=-=-=-=-= - -Licence: MIT - -see: LICENSE - -=-=-=-=-=-=-=-=-=-= - -Contains farm products useful for decorating a castle: - -* Hide wall and floor coverings -* Bound straw bale -* Straw training dummy - -=-=-=-=-=-=-=-=-=-= diff --git a/castle_lighting/README.md b/castle_lighting/README.md new file mode 100644 index 0000000..85241a9 --- /dev/null +++ b/castle_lighting/README.md @@ -0,0 +1,18 @@ +## Castle Lighting + +By: Philipbenr, DanDuncombe, FaceDeer + +Licence: MIT + +=-=-=-=-=-=-=-=-=-= + +This mod contains medieval lighting sources suitable for a castle. It includes: + +* Small chandelier and hanging chain +* Lantern box +* Steel floor brasier +* Stone pedestal/column brasier. + +If the castle_masonry mod is installed, brasiers will be generated for all enabled material types. + +Brasiers require fuel to generate a flame. \ No newline at end of file diff --git a/castle_lighting/README.txt b/castle_lighting/README.txt deleted file mode 100644 index 90fb450..0000000 --- a/castle_lighting/README.txt +++ /dev/null @@ -1,23 +0,0 @@ -=-=-=-=-=-=-=-=-=-= - -Castles Mod -by: Philipbenr And DanDuncombe - -=-=-=-=-=-=-=-=-=-= - -Licence: MIT - -see: LICENSE - -=-=-=-=-=-=-=-=-=-= - -This mod contains medieval lighting sources suitable for a castle. It includes: - -* Small chandelier and hanging chain -* Lantern box -* Steel floor brasier -* Stone pedestal/column brasier. - -If the castle_masonry mod is installed, brasiers will be generated for all enabled material types. - -Brasiers require fuel to generate a flame. \ No newline at end of file diff --git a/castle_masonry/README.md b/castle_masonry/README.md new file mode 100644 index 0000000..f1c0073 --- /dev/null +++ b/castle_masonry/README.md @@ -0,0 +1,34 @@ +## Castle Masonry + +by: Philipbenr, DanDuncombe, FaceDeer + +Licence: MIT + +This is a mod all about creating castles and castle dungeons. Many of the nodes are used for the outer-walls or dungeons. + +Contains: + +* Walls, Corner-walls, +* Castlestone Stairs, Slabs, and Pillars +* Arrowslits and embrasures +* Rubble (to fill the interior of thick castle walls) +* Murder holes and machicolations +* Pillars and crossbraces +* Roof slate +* Paving stone +* Dungeon stone + +Mod settings can allow for the basic castle masonry forms to be made for the following material types (all optional): + +* Cobble +* Desert stone +* Desert stone brick +* Sandstone +* Sandstone brick +* Stone +* Stone brick +* Castle wall +* Wood +* Snow +* Ice +* Obsidian Brick \ No newline at end of file diff --git a/castle_masonry/README.txt b/castle_masonry/README.txt deleted file mode 100644 index 98b129a..0000000 --- a/castle_masonry/README.txt +++ /dev/null @@ -1,43 +0,0 @@ -=-=-=-=-=-=-=-=-=-= - -Castles Mod -by: Philipbenr And DanDuncombe - -=-=-=-=-=-=-=-=-=-= - -Licence: MIT - -see: LICENSE - -=-=-=-=-=-=-=-=-=-= - -This is a mod all about creating castles and castle dungeons. Many of the nodes are used for the outer-walls or dungeons. - -=-=-=-=-=-=-=-=-=-= - -Contains: - ---Walls, Corner-walls, ---Castlestone Stairs, Slabs, and Pillars ---Arrowslits and embrasures ---Rubble (to fill the interior of thick castle walls) ---Murder holes and machicolations ---Pillars and crossbraces ---Roof slate ---Paving stone ---Dungeon stone - -Mod settings can allow for the basic castle masonry forms to be made for the following material types (all optional): - -Cobble -Desert stone -Desert stone brick -Sandstone -Sandstone brick -Stone -Stone brick -Castle wall -Wood -Snow -Ice -Obsidian Brick \ No newline at end of file diff --git a/castle_shields/README.md b/castle_shields/README.md new file mode 100644 index 0000000..51d7703 --- /dev/null +++ b/castle_shields/README.md @@ -0,0 +1,23 @@ +## Castle Shields + +by: Philipbenr, DanDuncombe and FaceDeer + +Licence: MIT + +=-=-=-=-=-=-=-=-=-= + +This mod adds decorative wall-mounted shields. It comes with three default shields, but it's very easy to mix and match the colours and patterns to generate additional shields for your server; see default_shields.lua for a good place to insert your own, or make use of the castle_shields.register_shield method in your own mods. + +The three default shields were defined thusly: + +* castle_shields.register_shield("shield_1", "Mounted Shield", "red", "blue", "slash") +* castle_shields.register_shield("shield_2", "Mounted Shield", "cyan", "yellow", "chevron") +* castle_shields.register_shield("shield_3", "Mounted Shield", "grey", "green", "cross") + +The following colors are permitted: + +"black", "blue", "brown", "cyan", "dark_green", "dark_grey", "green", "grey", "magenta", "orange", "pink", "red", "violet", "white", "yellow" + +The following patterns are permitted: + +"slash", "chevron", "cross" \ No newline at end of file diff --git a/castle_shields/README.txt b/castle_shields/README.txt deleted file mode 100644 index e2b85ce..0000000 --- a/castle_shields/README.txt +++ /dev/null @@ -1,25 +0,0 @@ -=-=-=-=-=-=-=-=-=-= - -Castles Mod -by: Philipbenr And DanDuncombe - -=-=-=-=-=-=-=-=-=-= - -Licence: MIT - -see: LICENSE - -=-=-=-=-=-=-=-=-=-= - -This mod adds decorative wall-mounted shields. It comes with three default shields, but it's very easy to mix and match the colours and patterns to generate additional shields for your server; see default_shields.lua for a good place to insert your own, or make use of the castle_shields.register_shield method in your own mods. - -The three default shields were defined thusly: - -castle_shields.register_shield("shield_1", "Mounted Shield", "red", "blue", "slash") -castle_shields.register_shield("shield_2", "Mounted Shield", "cyan", "yellow", "chevron") -castle_shields.register_shield("shield_3", "Mounted Shield", "grey", "green", "cross") - -The following colors are permitted: - "black", "blue", "brown", "cyan", "dark_green", "dark_grey", "green", "grey", "magenta", "orange", "pink", "red", "violet", "white", "yellow" -The following patterns are permitted: - "slash", "chevron", "cross" \ No newline at end of file diff --git a/castle_tapestries/README.md b/castle_tapestries/README.md new file mode 100644 index 0000000..ad75089 --- /dev/null +++ b/castle_tapestries/README.md @@ -0,0 +1,9 @@ +## Tapestries Mod + +By: Philipbenr, DanDuncombe, VanessaE, FaceDeer + +=-=-=-=-=-=-=-=-=-= + +Licence: MIT + +This mod contains tapestries of three different lengths, and a wooden crosspiece to hang them from. The tapestries can be dyed any color once hung. \ No newline at end of file diff --git a/castle_tapestries/README.txt b/castle_tapestries/README.txt deleted file mode 100644 index dc5885f..0000000 --- a/castle_tapestries/README.txt +++ /dev/null @@ -1,13 +0,0 @@ -=-=-=-=-=-=-=-=-=-= - -Tapestries Mod -by: Philipbenr And DanDuncombe - -=-=-=-=-=-=-=-=-=-= - -Licence: MIT - -see: LICENSE - - -This mod contains tapestries of three different lengths, and a wooden crosspiece to hang them from. The tapestries can be dyed any color once hung. \ No newline at end of file diff --git a/cottages/depends.txt b/cottages/depends.txt index e72ef00..d0220ae 100644 --- a/cottages/depends.txt +++ b/cottages/depends.txt @@ -1,5 +1,5 @@ -default -farming +default? +farming? stairs? homedecor? intllib? diff --git a/cottages/init.lua b/cottages/init.lua index 8149611..a2a4751 100644 --- a/cottages/init.lua +++ b/cottages/init.lua @@ -29,6 +29,11 @@ else cottages.S = function(s) return s end end +-- MineClone2 needs special treatment; default is only needed for +-- crafting materials and sounds (less important) +if( not( minetest.get_modpath("default"))) then + default = {}; +end --cottages.config_use_mesh_barrel = false; --cottages.config_use_mesh_handmill = true; diff --git a/cottages/nodes_feldweg.lua b/cottages/nodes_feldweg.lua index 39798f9..bb21479 100644 --- a/cottages/nodes_feldweg.lua +++ b/cottages/nodes_feldweg.lua @@ -342,7 +342,7 @@ if( minetest.get_modpath("stairs") and stairs and stairs.register_stair_and_slab {"cottages_feldweg.png","default_dirt.png", "default_grass.png","default_grass.png","cottages_feldweg.png","cottages_feldweg.png"}, S("Dirt Road Stairs"), S("Dirt Road, half height"), - default.node_sound_dirt_defaults()) + default.node_sound_dirt_defaults) end if( cottages_feldweg_mode == "nodebox" or cottages_feldweg_mode == "mesh" ) then diff --git a/cottages/nodes_furniture.lua b/cottages/nodes_furniture.lua index 5534975..056c8d7 100644 --- a/cottages/nodes_furniture.lua +++ b/cottages/nodes_furniture.lua @@ -23,7 +23,7 @@ minetest.register_node("cottages:bed_foot", { paramtype = "light", paramtype2 = "facedir", groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - sounds = default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults, node_box = { type = "fixed", fixed = { @@ -58,7 +58,7 @@ minetest.register_node("cottages:bed_head", { paramtype = "light", paramtype2 = "facedir", groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - sounds = default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults, node_box = { type = "fixed", fixed = { @@ -99,7 +99,7 @@ minetest.register_node("cottages:sleeping_mat", { paramtype2 = "facedir", walkable = false, groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), + sounds = default.node_sound_leaves_defaults, selection_box = { type = "wallmounted", }, @@ -133,7 +133,7 @@ minetest.register_node("cottages:sleeping_mat_head", { paramtype = 'light', paramtype2 = "facedir", groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), + sounds = default.node_sound_leaves_defaults, node_box = { type = "fixed", fixed = { @@ -162,7 +162,7 @@ minetest.register_node("cottages:bench", { paramtype = "light", paramtype2 = "facedir", groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - sounds = default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults, node_box = { type = "fixed", fixed = { diff --git a/cottages/nodes_historic.lua b/cottages/nodes_historic.lua index 1fa5ea4..90e48c4 100644 --- a/cottages/nodes_historic.lua +++ b/cottages/nodes_historic.lua @@ -27,7 +27,7 @@ minetest.register_node("cottages:wagon_wheel", { }, groups = {choppy=2,dig_immediate=2,attached_node=1}, legacy_wallmounted = true, - sounds = default.node_sound_defaults(), + sounds = default.node_sound_defaults, is_ground_content = false, }) @@ -50,7 +50,7 @@ if( minetest.get_modpath("stairs") and stairs and stairs.register_stair_and_slab {"cottages_loam.png"}, S("Loam Stairs"), S("Loam Slab"), - default.node_sound_dirt_defaults()) + default.node_sound_dirt_defaults) if( minetest.registered_nodes["default:clay"]) then stairs.register_stair_and_slab("clay", "default:clay", @@ -58,7 +58,7 @@ if( minetest.get_modpath("stairs") and stairs and stairs.register_stair_and_slab {"cottages_clay.png"}, S("Clay Stairs"), S("Clay Slab"), - default.node_sound_dirt_defaults()) + default.node_sound_dirt_defaults) end end diff --git a/cottages/nodes_mining.lua b/cottages/nodes_mining.lua index 3af4f71..b33ec3d 100644 --- a/cottages/nodes_mining.lua +++ b/cottages/nodes_mining.lua @@ -54,7 +54,7 @@ minetest.register_node("cottages:ladder_with_rope_and_rail", { }, groups = {choppy=2,oddly_breakable_by_hand=3,rail=1,connect_to_raillike=1}, --connect_to_raillike=minetest.raillike_group("rail")}, legacy_wallmounted = true, - sounds = default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults, }) diff --git a/cottages/nodes_roof.lua b/cottages/nodes_roof.lua index 11174d8..9503e86 100644 --- a/cottages/nodes_roof.lua +++ b/cottages/nodes_roof.lua @@ -191,7 +191,7 @@ minetest.register_node("cottages:slate_vertical", { tiles = {"cottages_slate.png",cottages.texture_roof_sides,"cottages_slate.png","cottages_slate.png",cottages.texture_roof_sides,"cottages_slate.png"}, paramtype2 = "facedir", groups = {cracky=2, stone=1}, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_stone_defaults, is_ground_content = false, }) @@ -209,7 +209,7 @@ minetest.register_node("cottages:reet", { description = S("Reet for thatching"), tiles = {"cottages_reet.png"}, groups = {snappy=3,choppy=3,oddly_breakable_by_hand=3,flammable=3}, - sounds = default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults, is_ground_content = false, }) diff --git a/cottages/nodes_straw.lua b/cottages/nodes_straw.lua index a26b728..c19b869 100644 --- a/cottages/nodes_straw.lua +++ b/cottages/nodes_straw.lua @@ -32,7 +32,7 @@ minetest.register_node("cottages:straw_mat", { paramtype2 = "facedir", walkable = false, groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), + sounds = default.node_sound_leaves_defaults, node_box = { type = "fixed", fixed = { @@ -58,7 +58,7 @@ minetest.register_node("cottages:straw_bale", { tiles = {"cottages_darkage_straw_bale.png"}, paramtype = "light", groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - sounds = default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults, -- the bale is slightly smaller than a full node node_box = { type = "fixed", @@ -81,7 +81,7 @@ minetest.register_node("cottages:straw", { description = S("straw"), tiles = {"cottages_darkage_straw.png"}, groups = {snappy=3,choppy=3,oddly_breakable_by_hand=3,flammable=3}, - sounds = default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults, -- the bale is slightly smaller than a full node is_ground_content = false, }) diff --git a/cottages/screenshot.jpg b/cottages/screenshot.jpg new file mode 100644 index 0000000..62916da Binary files /dev/null and b/cottages/screenshot.jpg differ diff --git a/digistuff/init.lua b/digistuff/init.lua index bcb7ce7..b35cb1b 100644 --- a/digistuff/init.lua +++ b/digistuff/init.lua @@ -928,3 +928,89 @@ minetest.register_craft({ {"homedecor:plastic_sheeting","homedecor:plastic_sheeting","homedecor:plastic_sheeting"}, } }) + +if minetest.get_modpath("mesecons_noteblock") then + minetest.register_node("digistuff:noteblock", { + description = "Digilines Noteblock", + groups = {cracky=3}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_destruct = function(pos) + local pos_hash = minetest.hash_node_position(pos) + if digistuff.sounds_playing[pos_hash] then + minetest.sound_stop(digistuff.sounds_playing[pos_hash]) + digistuff.sounds_playing[pos_hash] = nil + end + end, + tiles = { + "mesecons_noteblock.png" + }, + on_receive_fields = function(pos, formname, fields, sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then meta:set_string("channel",fields.channel) end + end, + digiline = + { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + local setchan = meta:get_string("channel") + if channel ~= setchan then return end + local valid_sounds = { + csharp = "mesecons_noteblock_csharp", + d = "mesecons_noteblock_d", + dsharp = "mesecons_noteblock_dsharp", + e = "mesecons_noteblock_e", + f = "mesecons_noteblock_f", + fsharp = "mesecons_noteblock_fsharp", + g = "mesecons_noteblock_g", + gsharp = "mesecons_noteblock_gsharp", + a = "mesecons_noteblock_a", + asharp = "mesecons_noteblock_asharp", + b = "mesecons_noteblock_b", + c = "mesecons_noteblock_c", + csharp2 = "mesecons_noteblock_csharp2", + d2 = "mesecons_noteblock_d2", + dsharp2 = "mesecons_noteblock_dsharp2", + e2 = "mesecons_noteblock_e2", + f2 = "mesecons_noteblock_f2", + fsharp2 = "mesecons_noteblock_fsharp2", + g2 = "mesecons_noteblock_g2", + gsharp2 = "mesecons_noteblock_gsharp2", + a2 = "mesecons_noteblock_a2", + asharp2 = "mesecons_noteblock_asharp2", + b2 = "mesecons_noteblock_b2", + c2 = "mesecons_noteblock_c2", + hihat = "mesecons_noteblock_hihat", + kick = "mesecons_noteblock_kick", + snare = "mesecons_noteblock_snare", + crash = "mesecons_noteblock_crash", + litecrash = "mesecons_noteblock_litecrash", + fire = "fire_large", + explosion = "tnt_explode" + } + if type(msg) == "string" then + local sound = valid_sounds[msg] + if sound then minetest.sound_play(sound,{pos=pos}) end + elseif type(msg) == "table" then + if type(msg.sound) ~= "string" then return end + local sound = valid_sounds[msg.sound] + local volume = 1 + if type(msg.volume) == "number" then + volume = math.max(0,math.min(1,msg.volume)) + end + if sound then minetest.sound_play({name=sound,gain=volume},{pos=pos}) end + end + end + }, + }, + }) +end diff --git a/gloopblocks/crafts.lua b/gloopblocks/crafts.lua index 3906da1..95256bf 100644 --- a/gloopblocks/crafts.lua +++ b/gloopblocks/crafts.lua @@ -4,12 +4,12 @@ minetest.register_craft( { type = "shapeless", output = "gloopblocks:rainbow_block", recipe = { - "group:basecolor_red", - "group:excolor_orange", - "group:basecolor_yellow", - "group:basecolor_green", - "group:basecolor_blue", - "group:excolor_violet", + "group:dye,color_red", + "group:dye,color_orange", + "group:dye,color_yellow", + "group:dye,color_green", + "group:dye,color_blue", + "group:dye,color_violet", "default:stone", "default:mese_crystal", }, diff --git a/locks/init.lua b/locks/init.lua index 2a35b02..0f2ba58 100644 --- a/locks/init.lua +++ b/locks/init.lua @@ -1,611 +1,615 @@ - - - ---[[ - Shared locked objects (Mod for MineTest) - Allows to restrict usage of blocks to a certain player or a group of - players. - Copyright (C) 2013 Sokomine - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . ---]] - --- Version 1.20 - --- Changelog: --- 08.05.2014 * Changed animation of shared locked furnace (removed pipeworks overlay on front, changed to new animation type) --- 10.01.2013 * Added command to toggle for pipeworks output --- * Added pipeworks support for chests and furnace. --- 17.12.2013 * aborting input with ESC is possible again --- 01.09.2013 * fixed bug in input sanitization --- 31.08.2013 * changed receipe for key to avoid crafting conflickt with screwdriver --- 10.07.2013 * removed a potential bug (now uses string:gmatch) --- * added shared locked furnaces - - - -locks = {}; - -minetest.register_privilege("openlocks", { description = "allows to open/use all locked objects", give_to_singleplayer = false}); -minetest.register_privilege("diglocks", { description = "allows to open/use and dig up all locked objects", give_to_singleplayer = false}); - - -locks.pipeworks_enabled = false; - -if( minetest.get_modpath("pipeworks") ~= nil ) then - locks.pipeworks_enabled = true; -end - --- initializes a lock (that is: prepare the metadata so that it can store data) --- default_formspec is the formspec that will be used on right click; the input field for the commands has to exist --- Call this in on_construct in register_node. Excample: --- on_construct = function(pos) --- locks:lock_init( pos, "" ); --- end; - -function locks:lock_init( pos, default_formspec ) - - if( pos == nil ) then - print( "Error: [locks] lock_init: pos is nil"); - return; - end - - local meta = minetest.env:get_meta(pos); - if( meta == nil ) then - print( "Error: [locks] lock_init: unable to get meta data"); - return; - end - - -- this will be changed after the node is placed - meta:set_string("infotext", "Locked object"); - -- prepare the field for the owner - meta:set_string("owner", ""); - -- this is the list of players/groups that may unlock the lock even if they are not the owner - meta:set_string("allowed_users",""); - -- objects can be unlocked by passwords as well (if it is set) - meta:set_string("password",""); - -- the last player who entered the right password (to save space this is not a list) - meta:set_string("pw_user",""); - -- this formspec is presented on right-click for every user - meta:set_string("formspec", default_formspec); - -- by default, do not send output to pipework tubes - meta:set_int( "allow_pipeworks", 0 ); -end - - --- returns the information stored in the metadata strings (like owner etc.) -function locks:get_lockdata( pos ) - if( pos == nil ) then - return; - end - - local meta = minetest.env:get_meta(pos); - if( meta == nil) then - return; - end - - return{ infotext = (meta:get_string( "infotext" ) or ""), - owner = (meta:get_string( "owner" ) or ""), - allowed_users = (meta:get_string( "allowed_users" ) or ""), - password = (meta:get_string( "password" ) or ""), - pw_user = (meta:get_string( "w_user" ) or ""), - formspec = (meta:get_string( "formspec" ) or "") - }; -end - - --- sets all the metadata the look needs (used e.g. in doors) -function locks:set_lockdata( pos, data ) - if( pos == nil ) then - return; - end - - local meta = minetest.env:get_meta(pos); - if( meta == nil) then - return; - end - - meta:set_string("infotext", (data.infotext or "")); - meta:set_string("owner", (data.owner or "")); - meta:set_string("allowed_users",(data.allowed_users or "")); - meta:set_string("password", (data.password or "")); - meta:set_string("pw_user", (data.pw_user or "")); - meta:set_string("formspec", (data.formspec or "")); -end - - - - --- Set the owner of the locked object. --- Call this in after_place_node in register_node. Example: --- after_place_node = function(pos, placer) --- locks:lock_set_owner( pos, placer, "Shared locked object" ); --- end, -function locks:lock_set_owner( pos, player_or_name, description ) - - if( pos == nil or player_or_name == nil ) then - print( "Error: [locks] Missing/wrong parameters to lock_set_owner"); - return false; - end - - local meta = minetest.env:get_meta(pos); - if( meta == nil ) then - print( "Error: [locks] lock_set_owner: unable to get meta data"); - return; - end - - -- accepts a name or a player object - if( type( player_or_name )~="string") then - player_or_name = player_or_name:get_player_name(); - end - - meta:set_string("owner", player_or_name or ""); - -- add the name of the owner to the description - meta:set_string("infotext", ( description or "Shared lockecd object" ).." (owned by "..meta:get_string("owner")..")"); -end - - - --- The locked object can only be digged by the owner OR by people with the diglocks priv --- Call this in can_dig in register_node. Example: --- can_dig = function(pos,player) --- return locks:lock_allow_dig( pos, player ); --- end -function locks:lock_allow_dig( pos, player ) - - if( pos == nil or player == nil ) then - print( "Error: [locks] Missing/wrong parameters to lock_allow_dig"); - return false; - end - - local meta = minetest.env:get_meta(pos); - local lock_owner = meta:get_string("owner"); - - -- locks who lost their owner can be opened/digged by anyone - if( meta == nil or lock_owner == nil or lock_owner == "") then - return true; - end - - -- the owner can dig up his own locked objects - if( player:get_player_name() == meta:get_string("owner")) then - return true; - end - - -- players with diglocks priv can dig up locked objects as well - if( minetest.check_player_privs(player:get_player_name(), {diglocks=true})) then - return true; - end - - return false; -- fallback -end - - --- The locked object can only be used (i.e. opened, stuff taken out, changed, ... - depends on object) if this --- function returns true. Call it wherever appropriate (usually in on_punch in register_node). Example: --- on_punch = function(pos,player) --- if( !locks:lock_allow_use( pos, player ) then --- print( "Sorry, you have no access here."); --- else --- do_what_this_object_is_good_for( pos, puncher ); --- end --- end - -function locks:lock_allow_use( pos, player ) - - if( pos == nil or player == nil ) then - print( "Error: [locks] Missing/wrong parameters to lock_allow_use"); - return false; - end - - local name = player:get_player_name(); - local meta = minetest.env:get_meta(pos); - - -- pipeworks sends a special username - if( name == ':pipeworks' or (player.is_fake_player and player.is_fake_player==":pipeworks")) then - if( meta:get_int( 'allow_pipeworks' ) == 1 ) then - return true; - else - return false; - end - end - - -- the player has to have a key or a keychain to open his own shared locked objects - if( name == meta:get_string("owner")) then - - if( not( player:get_inventory():contains_item("main","locks:keychain 1")) - and not( player:get_inventory():contains_item("main","locks:key 1"))) then - minetest.chat_send_player( name, "You do not have a key or a keychain. Without that you can't use your shared locked objects!"); - return false; - end - - -- the player has to have a keychain to open shared locked objects of other players - else - - if( not( player:get_inventory():contains_item("main","locks:keychain 1"))) then - minetest.chat_send_player(name, "You do not have a keychain. Without that you can't open shared locked objects of other players!"); - return false; - end - end - - -- if the user would even be allowed to dig this node up, using the node is allowed as well - if( locks:lock_allow_dig( pos, player )) then - return true; - end - - - if( meta == nil ) then - minetest.chat_send_player( name, "Error: Could not access metadata of this shared locked object."); - return false; - end - - -- players with openlocks priv can open locked objects - if( minetest.check_player_privs(name, {openlocks=true})) then - return true; - end - - -- the player might be specificly allowed to use this object through allowed_users - local liste = meta:get_string("allowed_users"):split( "," ); - for i in ipairs( liste ) do - - if( liste[i] == name ) then - return true; - end - - -- the player might member of a playergroup that is allowed to use this object - if( liste[i]:sub(1,1) == ":" - and playergroups ~= nil - and playergroups:is_group_member( meta:get_string("owner"), liste[i]:sub(2), name )) then - return true; - end - - end - - - -- the player may have entered the right password - if( name == meta:get_string("pw_user")) then - return true; - end - - -- the lock may have a password set. If this is the case then ask the user for it - if( meta:get_string( "password" ) and meta:get_string( "password" ) ~= "" ) then - minetest.chat_send_player(name, "Access denied. Right-click and enter password first!"); - return false; - end - - return false; -- fallback - -end - - - --- Method for the lock to get password and configuration data --- Call in on_receive_fields in register_node. Example: --- on_receive_fields = function(pos, formname, fields, sender) --- locks:lock_handle_input( pos, formname, fields, sender ); --- end, -function locks:lock_handle_input( pos, formname, fields, player ) - - if( pos == nil or player == nil ) then - print( "Error: [locks] Missing/wrong parameters to lock_handle_input"); - return false; - end - - local meta = minetest.env:get_meta(pos); - if( meta == nil ) then - print( "Error: [locks] lock_handle_input: unable to get meta data"); - return; - end - - -- is this input the lock is supposed to handle? - if( ( not( fields.locks_sent_lock_command ) - or fields.locks_sent_lock_command == "" ) - and (fields.quit and (fields.quit==true or fields.quit=='true'))) then --- or not( fields.locks_sent_input ) - return; - end - - name = player:get_player_name(); - - if( fields.locks_sent_lock_command == "/help" ) then - - if( name == meta:get_string( "owner" )) then - minetest.chat_send_player(name, "The following commands are available to you, the owner of this object, only:\n".. - " /help Shows this help text.\n".. - " /add Player can now unlock this object with any key.\n".. - " /del Player can no longer use this object.\n".. - " /list Shows a list of players who can use this object.\n".. - " /set Sets a password. Everyone who types that in can use the object.\n".. - " /pipeworks Toggles permission for pipeworks to take inventory out of the shared locked object.\n"); - - else if( locks:lock_allow_use( pos, player )) then - minetest.chat_send_player(name, "This locked object is owned by "..tostring( meta:get_string( "owner" ))..".\n".. - "You do have access to it.\n"); - - else if( meta:get_string( "password" ) ~= "" ) then - minetest.chat_send_player(name, "This locked object is owned by "..tostring( meta:get_string( "owner" ))..".\n".. - "Enter the correct password to gain access.\n"); - - else - minetest.chat_send_player(name, "This locked object is owned by "..tostring( meta:get_string( "owner" ))..".\n".. - "There is no password set. You can only gain access if the owner grants it to you."); - - end end end -- lua is not the most intuitive language here.... - return; - end -- of /help - - -- sanitize player input - if( fields.locks_sent_lock_command:match("[^%a%d%s_%- /%:]")) then - minetest.chat_send_player(name, "Input contains unsupported characters. Allowed: a-z, A-Z, 0-9, _, -, :."); - return; - end - - if( #fields.locks_sent_lock_command > 60) then - minetest.chat_send_player(name, "Input too long. Only up to 80 characters supported."); - return; - end - - - -- other players can only try to input the correct password - if( name ~= meta:get_string( "owner" )) then - - -- no need to bother with trying other PWs if none is set... - if( meta:get_string("password")=="" ) then - minetest.chat_send_player(name, "There is no password set. Access denied."); - return; - end - - -- the player may have entered the right password already - if( name == meta:get_string("pw_user")) then - -- nothing to do - the player entered the right pw alredy - minetest.chat_send_player(name, "You have entered the right password already. Access granted."); - return; - end - - if( fields.locks_sent_lock_command ~= meta:get_string("password")) then - minetest.chat_send_player(name, "Wrong password. Access denied."); - return; - end - - -- store the last user (this one) who entered the right pw - meta:set_string( "pw_user", name ); - - minetest.chat_send_player(name, "Password confirmed. Access granted."); - return; - end - - local txt = ""; - - - if( fields.locks_sent_lock_command == "/list" ) then - - if( meta:get_string("allowed_users")=="" ) then - txt = "No other users are allowed to use this object (except those with global privs like moderators/admins)."; - else - txt = "You granted the following users/groups of users access to this object:\n"; - local liste = meta:get_string("allowed_users"):split( "," ); - for i in ipairs( liste ) do - txt = txt.." "..tostring(liste[i]); - end - end - - if( meta:get_string( "password" ) == "" ) then - txt = txt.."\nThere is no password set. That means no one can get access through a password."; - else - txt = txt.."\nThe password for this lock is: \""..tostring( meta:get_string( "password" ).."\""); - end - - if( not( minetest.get_modpath("pipeworks") )) then - txt = txt.."\nThe pipeworks mod is not installed. Install it if you wish support for tubes."; - elseif( meta:get_int( "allow_pipeworks" ) == 1 ) then - txt = txt.."\nTubes from pipeworks may be used to extract items out of/add items to this shared locked object."; - else - txt = txt.."\nInput from tubes is accepted, but output to them is denied (default)."; - end - - minetest.chat_send_player(name, txt ); - return; - end -- of /list - - - -- toggle tube output on/off - if( fields.locks_sent_lock_command == "/pipeworks" ) then - - if( meta:get_int('allow_pipeworks') == 1 ) then - meta:set_int('allow_pipeworks', 0 ); - minetest.chat_send_player( name, 'Output to pipework tubes is now DISABLED (input is still acceped).'); - return; - else - meta:set_int('allow_pipeworks', 1 ); - minetest.chat_send_player( name, 'Output to pipework tubes is now ENABLED. Connected tubes may insert and remove items.'); - return; - end - end - --- -- all other commands take exactly one parameter - local help = fields.locks_sent_lock_command:split( " " ); - - print( tostring( help[1] )); - print( tostring( help[2] )); - - - -- set/change a password - if( help[1]=="/set" ) then - - -- if empty password then delete it - if( help[2]==nil ) then - help[2] = ""; - end - - minetest.chat_send_player(name, "Old password: \""..tostring( meta:get_string( "password" )).. - "\"\n Changed to new password: \""..tostring( help[2]).."\"."); - - - meta:set_string( "password", help[2]); - -- reset the list of users who typed the right password - meta:set_string("pw_users",""); - - if( help[2]=="") then - minetest.chat_send_player(name, "The password is empty and thus will be disabled."); - end - return; - end - - if( help[2]==nil or help[2]=="") then - minetest.chat_send_player(name, "Error: Missing parameter (player name) for command \""..tostring( help[1] ).."\"." ); - return; - end - - -- for add and del: check if the player is already in the list - - local found = false; - local anz = 0; - local liste = meta:get_string("allowed_users"):split( "," ); - for i in ipairs( liste ) do - - anz = anz + 1; -- count players - if( tostring( liste[i] ) == help[2] ) then - found = true; - end - - end - - if( help[1]=="/add" and found==true ) then - minetest.chat_send_player(name, "Player \""..tostring( help[2] ).."\" is already allowed to use this locked object. Nothing to do."); - return; - end - - if( help[1]=="/del" and found==false) then - minetest.chat_send_player(name, "Player \""..tostring( help[2] ).."\" is not amongst the players allowed to use this locked object. Nothing to do."); - return; - end - - - if( help[1]=="/add" ) then - - if( anz >= 6 ) then - minetest.chat_send_player(name, "Sorry, no more players can be added. To save space, only up to 6 players can be added. For more players please use groups!"); - return; - end - - if( name == help[2] ) then - minetest.chat_send_player(name, "You are already owner of this object."); - return; - end - - -- the player might try to add a playergroup - if( help[2]:sub(1,1) == ":" ) then - - if( not( playergroups )) then - minetest.chat_send_player(name, "Sorry, this server does not support playergroups."); - return; - end - - if( #help[2]<2 ) then - minetest.chat_send_player(name, "Please specify the name of the playergroup you want to add!"); - return; - end - - if( not( playergroups:is_playergroup(meta:get_string("owner"), help[2]:sub(2) ))) then - minetest.chat_send_player(name, "You do not have a playergroup named \""..tostring( help[2]:sub(2)).."\"."); - return; - end - - else - - -- check if the player exists - local privs = minetest.get_player_privs( help[2] ); - if( not( privs ) or not( privs.interact )) then - minetest.chat_send_player(name, "Player \""..help[2].."\" not found or has no interact privs."); - return; - end - end - - meta:set_string( "allowed_users", meta:get_string("allowed_users")..","..help[2] ); - - if( help[2]:sub(1,1) == ":" ) then - minetest.chat_send_player(name, "All members of your playergroup "..tostring(help[2]:sub(2)).." may now use/access this locked object."); - else - minetest.chat_send_player(name, help[2].." may now use/access this locked object."); - end - return; - end - - - if( help[1]=="/del" ) then - - userlist = meta:get_string("allowed_users"):split( ","..help[2] ); - meta:set_string( "allowed_users", ( userlist[1] or "" )..(userlist[2] or "" )); - - minetest.chat_send_player(name, "Access for player \""..tostring(help[2]).."\" has been revoked."); - return; - end - - minetest.chat_send_player(name, "Error: Command \""..tostring(help[1]).."\" not understood."); -end - - - --- craftitem; that can be used to craft shared locked objects -minetest.register_craftitem("locks:lock", { - description = "Lock to lock and share objects", - image = "locks_lock16.png", -}); - - -minetest.register_craft({ - output = "locks:lock 2", - recipe = { - {'default:steel_ingot', 'default:steel_ingot','default:steel_ingot'}, - {'default:steel_ingot', '', 'default:steel_ingot'}, - {'', 'default:steel_ingot',''}, - } - }); - - --- a key allowes to open your own shared locked objects -minetest.register_craftitem("locks:key", { - description = "Key to open your own shared locked objects", - image = "locks_key32.png", -}); - -minetest.register_craft({ - output = "locks:key", - recipe = { - {'', 'default:stick', ''}, - {'', 'default:steel_ingot',''}, - } - }); - - - --- in order to open shared locked objects of other players, a keychain is needed (plus the owner has to admit it via /add playername or through /set password) -minetest.register_craftitem("locks:keychain", { - description = "Keychain to open shared locked objects of others", - image = "locks_keychain32.png", -}); - -minetest.register_craft({ - output = "locks:keychain", - recipe = { - {'', 'default:steel_ingot', '' }, - {'locks:key', 'locks:key', 'locks:key'}, - } - }); - -dofile(minetest.get_modpath("locks").."/shared_locked_chest.lua"); -dofile(minetest.get_modpath("locks").."/shared_locked_sign_wall.lua"); -dofile(minetest.get_modpath("locks").."/shared_locked_xdoors2.lua"); -dofile(minetest.get_modpath("locks").."/shared_locked_furnace.lua"); - - +--[[ + Shared locked objects (Mod for MineTest) + Allows to restrict usage of blocks to a certain player or a group of + players. + Copyright (C) 2013 Sokomine + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +--]] + +-- Version 2.00 + +-- Changelog: +-- 30.07.2018 * Front side of chest does not get pipeworks image anymore. +-- 30.07.2018 * Fixed bug with pipeworks. +-- * Repaired password. +-- * Converted back to unix file format. +-- 08.05.2014 * Changed animation of shared locked furnace (removed pipeworks overlay on front, changed to new animation type) +-- 10.01.2013 * Added command to toggle for pipeworks output +-- * Added pipeworks support for chests and furnace. +-- 17.12.2013 * aborting input with ESC is possible again +-- 01.09.2013 * fixed bug in input sanitization +-- 31.08.2013 * changed receipe for key to avoid crafting conflickt with screwdriver +-- 10.07.2013 * removed a potential bug (now uses string:gmatch) +-- * added shared locked furnaces + + + +locks = {}; + +minetest.register_privilege("openlocks", { description = "allows to open/use all locked objects", give_to_singleplayer = false}); +minetest.register_privilege("diglocks", { description = "allows to open/use and dig up all locked objects", give_to_singleplayer = false}); + + +locks.pipeworks_enabled = false; + +if( minetest.get_modpath("pipeworks") ~= nil ) then + locks.pipeworks_enabled = true; +end + +-- initializes a lock (that is: prepare the metadata so that it can store data) +-- default_formspec is the formspec that will be used on right click; the input field for the commands has to exist +-- Call this in on_construct in register_node. Excample: +-- on_construct = function(pos) +-- locks:lock_init( pos, "" ); +-- end; + +function locks:lock_init( pos, default_formspec ) + + if( pos == nil ) then + print( "Error: [locks] lock_init: pos is nil"); + return; + end + + local meta = minetest.env:get_meta(pos); + if( meta == nil ) then + print( "Error: [locks] lock_init: unable to get meta data"); + return; + end + + -- this will be changed after the node is placed + meta:set_string("infotext", "Locked object"); + -- prepare the field for the owner + meta:set_string("owner", ""); + -- this is the list of players/groups that may unlock the lock even if they are not the owner + meta:set_string("allowed_users",""); + -- objects can be unlocked by passwords as well (if it is set) + meta:set_string("password",""); + -- the last player who entered the right password (to save space this is not a list) + meta:set_string("pw_user",""); + -- this formspec is presented on right-click for every user + meta:set_string("formspec", default_formspec); + -- by default, do not send output to pipework tubes + meta:set_int( "allow_pipeworks", 0 ); +end + + +-- returns the information stored in the metadata strings (like owner etc.) +function locks:get_lockdata( pos ) + if( pos == nil ) then + return; + end + + local meta = minetest.env:get_meta(pos); + if( meta == nil) then + return; + end + + return{ infotext = (meta:get_string( "infotext" ) or ""), + owner = (meta:get_string( "owner" ) or ""), + allowed_users = (meta:get_string( "allowed_users" ) or ""), + password = (meta:get_string( "password" ) or ""), + pw_user = (meta:get_string( "w_user" ) or ""), + formspec = (meta:get_string( "formspec" ) or "") + }; +end + + +-- sets all the metadata the look needs (used e.g. in doors) +function locks:set_lockdata( pos, data ) + if( pos == nil ) then + return; + end + + local meta = minetest.env:get_meta(pos); + if( meta == nil) then + return; + end + + meta:set_string("infotext", (data.infotext or "")); + meta:set_string("owner", (data.owner or "")); + meta:set_string("allowed_users",(data.allowed_users or "")); + meta:set_string("password", (data.password or "")); + meta:set_string("pw_user", (data.pw_user or "")); + meta:set_string("formspec", (data.formspec or "")); +end + + + + +-- Set the owner of the locked object. +-- Call this in after_place_node in register_node. Example: +-- after_place_node = function(pos, placer) +-- locks:lock_set_owner( pos, placer, "Shared locked object" ); +-- end, +function locks:lock_set_owner( pos, player_or_name, description ) + + if( pos == nil or player_or_name == nil ) then + print( "Error: [locks] Missing/wrong parameters to lock_set_owner"); + return false; + end + + local meta = minetest.env:get_meta(pos); + if( meta == nil ) then + print( "Error: [locks] lock_set_owner: unable to get meta data"); + return; + end + + -- accepts a name or a player object + if( type( player_or_name )~="string") then + player_or_name = player_or_name:get_player_name(); + end + + meta:set_string("owner", player_or_name or ""); + -- add the name of the owner to the description + meta:set_string("infotext", ( description or "Shared lockecd object" ).." (owned by "..meta:get_string("owner")..")"); +end + + + +-- The locked object can only be digged by the owner OR by people with the diglocks priv +-- Call this in can_dig in register_node. Example: +-- can_dig = function(pos,player) +-- return locks:lock_allow_dig( pos, player ); +-- end +function locks:lock_allow_dig( pos, player ) + + if( pos == nil or player == nil ) then + print( "Error: [locks] Missing/wrong parameters to lock_allow_dig"); + return false; + end + + local meta = minetest.env:get_meta(pos); + local lock_owner = meta:get_string("owner"); + + -- locks who lost their owner can be opened/digged by anyone + if( meta == nil or lock_owner == nil or lock_owner == "") then + return true; + end + + -- the owner can dig up his own locked objects + if( player:get_player_name() == meta:get_string("owner")) then + return true; + end + + -- players with diglocks priv can dig up locked objects as well + if( minetest.check_player_privs(player:get_player_name(), {diglocks=true})) then + return true; + end + + return false; -- fallback +end + + +-- The locked object can only be used (i.e. opened, stuff taken out, changed, ... - depends on object) if this +-- function returns true. Call it wherever appropriate (usually in on_punch in register_node). Example: +-- on_punch = function(pos,player) +-- if( !locks:lock_allow_use( pos, player ) then +-- print( "Sorry, you have no access here."); +-- else +-- do_what_this_object_is_good_for( pos, puncher ); +-- end +-- end + +function locks:lock_allow_use( pos, player ) + + if( pos == nil or player == nil ) then + print( "Error: [locks] Missing/wrong parameters to lock_allow_use"); + return false; + end + + local name = player:get_player_name(); + local meta = minetest.env:get_meta(pos); + + -- pipeworks sends a special username + if( player.is_fake_player) then + if( locks:lock_allow_dig( pos, player ) and meta:get_int( 'allow_pipeworks' ) == 1 ) then + return true; + else + return false; + end + end + + -- the player has to have a key or a keychain to open his own shared locked objects + if( name == meta:get_string("owner")) then + + if( not( player:get_inventory():contains_item("main","locks:keychain 1")) + and not( player:get_inventory():contains_item("main","locks:key 1"))) then + minetest.chat_send_player( name, "You do not have a key or a keychain. Without that you can't use your shared locked objects!"); + return false; + end + + -- the player has to have a keychain to open shared locked objects of other players + else + + if( not( player:get_inventory():contains_item("main","locks:keychain 1"))) then + minetest.chat_send_player(name, "You do not have a keychain. Without that you can't open shared locked objects of other players!"); + return false; + end + end + + -- if the user would even be allowed to dig this node up, using the node is allowed as well + if( locks:lock_allow_dig( pos, player )) then + return true; + end + + + if( meta == nil ) then + minetest.chat_send_player( name, "Error: Could not access metadata of this shared locked object."); + return false; + end + + -- players with openlocks priv can open locked objects + if( minetest.check_player_privs(name, {openlocks=true})) then + return true; + end + + -- the player might be specificly allowed to use this object through allowed_users + local liste = meta:get_string("allowed_users"):split( "," ); + for i in ipairs( liste ) do + + if( liste[i] == name ) then + return true; + end + + -- the player might member of a playergroup that is allowed to use this object + if( liste[i]:sub(1,1) == ":" + and playergroups ~= nil + and playergroups:is_group_member( meta:get_string("owner"), liste[i]:sub(2), name )) then + return true; + end + + end + + + -- the player may have entered the right password + if( name == meta:get_string("pw_user")) then + return true; + end + + -- the lock may have a password set. If this is the case then ask the user for it + if( meta:get_string( "password" ) and meta:get_string( "password" ) ~= "" ) then + minetest.chat_send_player(name, "Access denied. Right-click and enter password first!"); + return false; + end + + return false; -- fallback + +end + + + +-- Method for the lock to get password and configuration data +-- Call in on_receive_fields in register_node. Example: +-- on_receive_fields = function(pos, formname, fields, sender) +-- locks:lock_handle_input( pos, formname, fields, sender ); +-- end, +function locks:lock_handle_input( pos, formname, fields, player ) + + if( pos == nil or player == nil ) then + print( "Error: [locks] Missing/wrong parameters to lock_handle_input"); + return false; + end + + local meta = minetest.env:get_meta(pos); + if( meta == nil ) then + print( "Error: [locks] lock_handle_input: unable to get meta data"); + return; + end + + -- is this input the lock is supposed to handle? + if( ( not( fields.locks_sent_lock_command ) + or fields.locks_sent_lock_command == "" ) + and (fields.quit and (fields.quit==true or fields.quit=='true'))) then +-- or not( fields.locks_sent_input ) + return; + end + + name = player:get_player_name(); + + if( fields.locks_sent_lock_command == "/help" ) then + + if( name == meta:get_string( "owner" )) then + minetest.chat_send_player(name, "The following commands are available to you, the owner of this object, only:\n".. + " /help Shows this help text.\n".. + " /add Player can now unlock this object with any key.\n".. + " /del Player can no longer use this object.\n".. + " /list Shows a list of players who can use this object.\n".. + " /set Sets a password. Everyone who types that in can use the object.\n".. + " /pipeworks Toggles permission for pipeworks to take inventory out of the shared locked object.\n"); + + else if( locks:lock_allow_use( pos, player )) then + minetest.chat_send_player(name, "This locked object is owned by "..tostring( meta:get_string( "owner" ))..".\n".. + "You do have access to it.\n"); + + else if( meta:get_string( "password" ) ~= "" ) then + minetest.chat_send_player(name, "This locked object is owned by "..tostring( meta:get_string( "owner" ))..".\n".. + "Enter the correct password to gain access.\n"); + + else + minetest.chat_send_player(name, "This locked object is owned by "..tostring( meta:get_string( "owner" ))..".\n".. + "There is no password set. You can only gain access if the owner grants it to you."); + + end end end -- lua is not the most intuitive language here.... + return; + end -- of /help + + -- sanitize player input + if( fields.locks_sent_lock_command:match("[^%a%d%s_%- /%:]")) then + minetest.chat_send_player(name, "Input contains unsupported characters. Allowed: a-z, A-Z, 0-9, _, -, :."); + return; + end + + if( #fields.locks_sent_lock_command > 60) then + minetest.chat_send_player(name, "Input too long. Only up to 80 characters supported."); + return; + end + + + local password = meta:get_string("password"); + -- other players can only try to input the correct password + if( name ~= meta:get_string( "owner" ) + or (password and password ~= "" and password==fields.locks_sent_lock_command) + or (name==meta:get_string("pw_user"))) then + + -- no need to bother with trying other PWs if none is set... + if( meta:get_string("password")=="" ) then + minetest.chat_send_player(name, "There is no password set. Access denied."); + return; + end + + -- the player may have entered the right password already + if( name == meta:get_string("pw_user")) then + -- nothing to do - the player entered the right pw alredy + minetest.chat_send_player(name, "You have entered the right password already. Access granted."); + return; + end + + if( fields.locks_sent_lock_command ~= meta:get_string("password")) then + minetest.chat_send_player(name, "Wrong password. Access denied."); + return; + end + + -- store the last user (this one) who entered the right pw + meta:set_string( "pw_user", name ); + + minetest.chat_send_player(name, "Password confirmed. Access granted."); + return; + end + + local txt = ""; + + + if( fields.locks_sent_lock_command == "/list" ) then + + if( meta:get_string("allowed_users")=="" ) then + txt = "No other users are allowed to use this object (except those with global privs like moderators/admins)."; + else + txt = "You granted the following users/groups of users access to this object:\n"; + local liste = meta:get_string("allowed_users"):split( "," ); + for i in ipairs( liste ) do + txt = txt.." "..tostring(liste[i]); + end + end + + if( meta:get_string( "password" ) == "" ) then + txt = txt.."\nThere is no password set. That means no one can get access through a password."; + else + txt = txt.."\nThe password for this lock is: \""..tostring( meta:get_string( "password" ).."\""); + end + + if( not( minetest.get_modpath("pipeworks") )) then + txt = txt.."\nThe pipeworks mod is not installed. Install it if you wish support for tubes."; + elseif( meta:get_int( "allow_pipeworks" ) == 1 ) then + txt = txt.."\nTubes from pipeworks may be used to extract items out of/add items to this shared locked object."; + else + txt = txt.."\nInput from tubes is accepted, but output to them is denied (default)."; + end + + minetest.chat_send_player(name, txt ); + return; + end -- of /list + + + -- toggle tube output on/off + if( fields.locks_sent_lock_command == "/pipeworks" ) then + + if( meta:get_int('allow_pipeworks') == 1 ) then + meta:set_int('allow_pipeworks', 0 ); + minetest.chat_send_player( name, 'Output to pipework tubes is now DISABLED (input is still acceped).'); + return; + else + meta:set_int('allow_pipeworks', 1 ); + minetest.chat_send_player( name, 'Output to pipework tubes is now ENABLED. Connected tubes may insert and remove items.'); + return; + end + end + +-- -- all other commands take exactly one parameter + local help = fields.locks_sent_lock_command:split( " " ); + + print( tostring( help[1] )); + print( tostring( help[2] )); + + + -- set/change a password + if( help[1]=="/set" ) then + + -- if empty password then delete it + if( help[2]==nil ) then + help[2] = ""; + end + + minetest.chat_send_player(name, "Old password: \""..tostring( meta:get_string( "password" )).. + "\"\n Changed to new password: \""..tostring( help[2]).."\"."); + + + meta:set_string( "password", help[2]); + -- reset the list of users who typed the right password + meta:set_string("pw_users",""); + + if( help[2]=="") then + minetest.chat_send_player(name, "The password is empty and thus will be disabled."); + end + return; + end + + if( help[2]==nil or help[2]=="") then + minetest.chat_send_player(name, "Error: Missing parameter (player name) for command \""..tostring( help[1] ).."\"." ); + return; + end + + -- for add and del: check if the player is already in the list + + local found = false; + local anz = 0; + local liste = meta:get_string("allowed_users"):split( "," ); + for i in ipairs( liste ) do + + anz = anz + 1; -- count players + if( tostring( liste[i] ) == help[2] ) then + found = true; + end + + end + + if( help[1]=="/add" and found==true ) then + minetest.chat_send_player(name, "Player \""..tostring( help[2] ).."\" is already allowed to use this locked object. Nothing to do."); + return; + end + + if( help[1]=="/del" and found==false) then + minetest.chat_send_player(name, "Player \""..tostring( help[2] ).."\" is not amongst the players allowed to use this locked object. Nothing to do."); + return; + end + + + if( help[1]=="/add" ) then + + if( anz >= 6 ) then + minetest.chat_send_player(name, "Sorry, no more players can be added. To save space, only up to 6 players can be added. For more players please use groups!"); + return; + end + + if( name == help[2] ) then + minetest.chat_send_player(name, "You are already owner of this object."); + return; + end + + -- the player might try to add a playergroup + if( help[2]:sub(1,1) == ":" ) then + + if( not( playergroups )) then + minetest.chat_send_player(name, "Sorry, this server does not support playergroups."); + return; + end + + if( #help[2]<2 ) then + minetest.chat_send_player(name, "Please specify the name of the playergroup you want to add!"); + return; + end + + if( not( playergroups:is_playergroup(meta:get_string("owner"), help[2]:sub(2) ))) then + minetest.chat_send_player(name, "You do not have a playergroup named \""..tostring( help[2]:sub(2)).."\"."); + return; + end + + else + + -- check if the player exists + local privs = minetest.get_player_privs( help[2] ); + if( not( privs ) or not( privs.interact )) then + minetest.chat_send_player(name, "Player \""..help[2].."\" not found or has no interact privs."); + return; + end + end + + meta:set_string( "allowed_users", meta:get_string("allowed_users")..","..help[2] ); + + if( help[2]:sub(1,1) == ":" ) then + minetest.chat_send_player(name, "All members of your playergroup "..tostring(help[2]:sub(2)).." may now use/access this locked object."); + else + minetest.chat_send_player(name, help[2].." may now use/access this locked object."); + end + return; + end + + + if( help[1]=="/del" ) then + + userlist = meta:get_string("allowed_users"):split( ","..help[2] ); + meta:set_string( "allowed_users", ( userlist[1] or "" )..(userlist[2] or "" )); + + minetest.chat_send_player(name, "Access for player \""..tostring(help[2]).."\" has been revoked."); + return; + end + + minetest.chat_send_player(name, "Error: Command \""..tostring(help[1]).."\" not understood."); +end + + + +-- craftitem; that can be used to craft shared locked objects +minetest.register_craftitem("locks:lock", { + description = "Lock to lock and share objects", + image = "locks_lock16.png", +}); + + +minetest.register_craft({ + output = "locks:lock 2", + recipe = { + {'default:steel_ingot', 'default:steel_ingot','default:steel_ingot'}, + {'default:steel_ingot', '', 'default:steel_ingot'}, + {'', 'default:steel_ingot',''}, + } + }); + + +-- a key allowes to open your own shared locked objects +minetest.register_craftitem("locks:key", { + description = "Key to open your own shared locked objects", + image = "locks_key32.png", +}); + +minetest.register_craft({ + output = "locks:key", + recipe = { + {'', 'default:stick', ''}, + {'', 'default:steel_ingot',''}, + } + }); + + + +-- in order to open shared locked objects of other players, a keychain is needed (plus the owner has to admit it via /add playername or through /set password) +minetest.register_craftitem("locks:keychain", { + description = "Keychain to open shared locked objects of others", + image = "locks_keychain32.png", +}); + +minetest.register_craft({ + output = "locks:keychain", + recipe = { + {'', 'default:steel_ingot', '' }, + {'locks:key', 'locks:key', 'locks:key'}, + } + }); + +dofile(minetest.get_modpath("locks").."/shared_locked_chest.lua"); +dofile(minetest.get_modpath("locks").."/shared_locked_sign_wall.lua"); +dofile(minetest.get_modpath("locks").."/shared_locked_xdoors2.lua"); +dofile(minetest.get_modpath("locks").."/shared_locked_furnace.lua"); + + diff --git a/locks/shared_locked_chest.lua b/locks/shared_locked_chest.lua index 66496b1..f40bde8 100644 --- a/locks/shared_locked_chest.lua +++ b/locks/shared_locked_chest.lua @@ -1,137 +1,138 @@ --- 09.01.13 Added support for pipeworks. - - -locks.chest_add = {}; -locks.chest_add.tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", - "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"}; -locks.chest_add.groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}; -locks.chest_add.tube = {}; - --- additional/changed definitions for pipeworks; --- taken from pipeworks/compat.lua -if( locks.pipeworks_enabled ) then - locks.chest_add.tiles = { - "default_chest_top.png^pipeworks_tube_connection_wooden.png", - "default_chest_top.png^pipeworks_tube_connection_wooden.png", - "default_chest_side.png^pipeworks_tube_connection_wooden.png", - "default_chest_side.png^pipeworks_tube_connection_wooden.png", - "default_chest_side.png^pipeworks_tube_connection_wooden.png"}; - locks.chest_add.groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, - tubedevice = 1, tubedevice_receiver = 1 }; - locks.chest_add.tube = { - insert_object = function(pos, node, stack, direction) - local meta = minetest.env:get_meta(pos) - local inv = meta:get_inventory() - return inv:add_item("main", stack) - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.env:get_meta(pos) - local inv = meta:get_inventory() - return inv:room_for_item("main", stack) - end, - input_inventory = "main", - connect_sides = {left=1, right=1, back=1, front=1, bottom=1, top=1} - }; -end - - -minetest.register_node("locks:shared_locked_chest", { - description = "Shared locked chest", - tiles = locks.chest_add.tiles, - paramtype2 = "facedir", - groups = locks.chest_add.groups, - tube = locks.chest_add.tube, - legacy_facedir_simple = true, - - on_construct = function(pos) - local meta = minetest.env:get_meta(pos) - -- prepare the lock of the chest - locks:lock_init( pos, - "size[8,10]".. --- "field[0.5,0.2;8,1.0;locks_sent_lock_command;Locked chest. Type password, command or /help for help:;]".. --- "button_exit[3,0.8;2,1.0;locks_sent_input;Proceed]".. - "list[current_name;main;0,0;8,4;]".. - "list[current_player;main;0,5;8,4;]".. - "field[0.3,9.6;6,0.7;locks_sent_lock_command;Locked chest. Type /help for help:;]".. - "background[-0.5,-0.65;9,11.2;bg_shared_locked_chest.jpg]".. - "button_exit[6.3,9.2;1.7,0.7;locks_sent_input;Proceed]" ); --- "size[8,9]".. --- "list[current_name;main;0,0;8,4;]".. --- "list[current_player;main;0,5;8,4;]"); - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - end, - - after_place_node = function(pos, placer) - - if( locks.pipeworks_enabled ) then - pipeworks.scan_for_tube_objects( pos ); - end - - locks:lock_set_owner( pos, placer, "Shared locked chest" ); - end, - - - can_dig = function(pos,player) - - if( not(locks:lock_allow_dig( pos, player ))) then - return false; - end - local meta = minetest.env:get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - - on_receive_fields = function(pos, formname, fields, sender) - locks:lock_handle_input( pos, formname, fields, sender ); - end, - - - - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - return count; - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - return stack:get_count() - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in locked shared chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to locked shared chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from locked shared chest at "..minetest.pos_to_string(pos)) - end, - - - after_dig_node = function( pos ) - if( locks.pipeworks_enabled ) then - pipeworks.scan_for_tube_objects(pos) - end - end -}) - -minetest.register_craft({ - output = 'locks:shared_locked_chest', - recipe = { - { 'default:chest', 'locks:lock', '' }, - }, -}) - -print( "[Mod] locks: loading locks:shared_locked_chest"); +-- 09.01.13 Added support for pipeworks. + + +locks.chest_add = {}; +locks.chest_add.tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", + "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"}; +locks.chest_add.groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}; +locks.chest_add.tube = {}; + +-- additional/changed definitions for pipeworks; +-- taken from pipeworks/compat.lua +if( locks.pipeworks_enabled ) then + locks.chest_add.tiles = { + "default_chest_top.png^pipeworks_tube_connection_wooden.png", + "default_chest_top.png^pipeworks_tube_connection_wooden.png", + "default_chest_side.png^pipeworks_tube_connection_wooden.png", + "default_chest_side.png^pipeworks_tube_connection_wooden.png", + "default_chest_side.png^pipeworks_tube_connection_wooden.png", + "default_chest_front.png"}; + locks.chest_add.groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, + tubedevice = 1, tubedevice_receiver = 1 }; + locks.chest_add.tube = { + insert_object = function(pos, node, stack, direction) + local meta = minetest.env:get_meta(pos) + local inv = meta:get_inventory() + return inv:add_item("main", stack) + end, + can_insert = function(pos, node, stack, direction) + local meta = minetest.env:get_meta(pos) + local inv = meta:get_inventory() + return inv:room_for_item("main", stack) + end, + input_inventory = "main", + connect_sides = {left=1, right=1, back=1, front=1, bottom=1, top=1} + }; +end + + +minetest.register_node("locks:shared_locked_chest", { + description = "Shared locked chest", + tiles = locks.chest_add.tiles, + paramtype2 = "facedir", + groups = locks.chest_add.groups, + tube = locks.chest_add.tube, + legacy_facedir_simple = true, + + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + -- prepare the lock of the chest + locks:lock_init( pos, + "size[8,10]".. +-- "field[0.5,0.2;8,1.0;locks_sent_lock_command;Locked chest. Type password, command or /help for help:;]".. +-- "button_exit[3,0.8;2,1.0;locks_sent_input;Proceed]".. + "list[current_name;main;0,0;8,4;]".. + "list[current_player;main;0,5;8,4;]".. + "field[0.3,9.6;6,0.7;locks_sent_lock_command;Locked chest. Type /help for help:;]".. + "background[-0.5,-0.65;9,11.2;bg_shared_locked_chest.jpg]".. + "button_exit[6.3,9.2;1.7,0.7;locks_sent_input;Proceed]" ); +-- "size[8,9]".. +-- "list[current_name;main;0,0;8,4;]".. +-- "list[current_player;main;0,5;8,4;]"); + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end, + + after_place_node = function(pos, placer) + + if( locks.pipeworks_enabled ) then + pipeworks.scan_for_tube_objects( pos ); + end + + locks:lock_set_owner( pos, placer, "Shared locked chest" ); + end, + + + can_dig = function(pos,player) + + if( not(locks:lock_allow_dig( pos, player ))) then + return false; + end + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + + on_receive_fields = function(pos, formname, fields, sender) + locks:lock_handle_input( pos, formname, fields, sender ); + end, + + + + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if( not( locks:lock_allow_use( pos, player ))) then + return 0; + end + return count; + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if( not( locks:lock_allow_use( pos, player ))) then + return 0; + end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if( not( locks:lock_allow_use( pos, player ))) then + return 0; + end + return stack:get_count() + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in locked shared chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to locked shared chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from locked shared chest at "..minetest.pos_to_string(pos)) + end, + + + after_dig_node = function( pos ) + if( locks.pipeworks_enabled ) then + pipeworks.scan_for_tube_objects(pos) + end + end +}) + +minetest.register_craft({ + output = 'locks:shared_locked_chest', + recipe = { + { 'default:chest', 'locks:lock', '' }, + }, +}) + +print( "[Mod] locks: loading locks:shared_locked_chest"); diff --git a/maptools/default_nodes.lua b/maptools/default_nodes.lua index b7a2a98..eb74b4c 100644 --- a/maptools/default_nodes.lua +++ b/maptools/default_nodes.lua @@ -17,6 +17,7 @@ minetest.register_node("maptools:stone", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:stonebrick", { @@ -27,6 +28,7 @@ minetest.register_node("maptools:stonebrick", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:tree", { @@ -37,7 +39,8 @@ minetest.register_node("maptools:tree", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node + on_place = minetest.rotate_node, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:jungletree", { @@ -48,7 +51,8 @@ minetest.register_node("maptools:jungletree", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node + on_place = minetest.rotate_node, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:cactus", { @@ -59,7 +63,8 @@ minetest.register_node("maptools:cactus", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node + on_place = minetest.rotate_node, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:papyrus", { @@ -80,6 +85,7 @@ minetest.register_node("maptools:papyrus", { }, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_leaves_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:dirt", { @@ -90,6 +96,7 @@ minetest.register_node("maptools:dirt", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_dirt_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:wood", { @@ -100,6 +107,7 @@ minetest.register_node("maptools:wood", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_wood_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:junglewood", { @@ -110,6 +118,7 @@ minetest.register_node("maptools:junglewood", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_wood_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:glass", { @@ -123,6 +132,7 @@ minetest.register_node("maptools:glass", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_glass_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:leaves", { @@ -135,6 +145,7 @@ minetest.register_node("maptools:leaves", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_leaves_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:sand", { @@ -145,6 +156,7 @@ minetest.register_node("maptools:sand", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_sand_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:gravel", { @@ -158,6 +170,7 @@ minetest.register_node("maptools:gravel", { footstep = {name="default_gravel_footstep", gain=0.35}, dug = {name="default_gravel_footstep", gain=0.6}, }), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:clay", { @@ -168,6 +181,7 @@ minetest.register_node("maptools:clay", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_dirt_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:desert_sand", { @@ -178,6 +192,7 @@ minetest.register_node("maptools:desert_sand", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_sand_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:sandstone", { @@ -188,6 +203,7 @@ minetest.register_node("maptools:sandstone", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:sandstone_brick", { @@ -198,6 +214,7 @@ minetest.register_node("maptools:sandstone_brick", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:desert_stone", { @@ -208,6 +225,7 @@ minetest.register_node("maptools:desert_stone", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:desert_cobble", { @@ -218,6 +236,7 @@ minetest.register_node("maptools:desert_cobble", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:desert_stonebrick", { @@ -228,6 +247,7 @@ minetest.register_node("maptools:desert_stonebrick", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:grass", { @@ -241,6 +261,7 @@ minetest.register_node("maptools:grass", { sounds = default.node_sound_dirt_defaults({ footstep = {name="default_grass_footstep", gain = 0.4}, }), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:fullgrass", { @@ -253,6 +274,7 @@ minetest.register_node("maptools:fullgrass", { sounds = default.node_sound_dirt_defaults({ footstep = {name="default_grass_footstep", gain=0.4}, }), + on_drop = maptools.drop_msg }) for slab_num = 1,3,1 do @@ -272,6 +294,7 @@ for slab_num = 1,3,1 do drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_dirt_defaults({footstep = {name="default_grass_footstep", gain = 0.4}}), + on_drop = maptools.drop_msg }) end @@ -283,6 +306,7 @@ minetest.register_node("maptools:cobble", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:mossycobble", { @@ -293,6 +317,7 @@ minetest.register_node("maptools:mossycobble", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:brick", { @@ -303,6 +328,7 @@ minetest.register_node("maptools:brick", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:coalblock", { @@ -313,6 +339,7 @@ minetest.register_node("maptools:coalblock", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) @@ -324,6 +351,7 @@ minetest.register_node("maptools:steelblock", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:goldblock", { @@ -334,6 +362,7 @@ minetest.register_node("maptools:goldblock", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:copperblock", { @@ -344,6 +373,7 @@ minetest.register_node("maptools:copperblock", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:bronzeblock", { @@ -354,6 +384,7 @@ minetest.register_node("maptools:bronzeblock", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:diamondblock", { @@ -364,6 +395,7 @@ minetest.register_node("maptools:diamondblock", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) -- Farming: @@ -376,6 +408,7 @@ minetest.register_node("maptools:soil_wet", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, soil = 3, wet = 1, grassland = 1}, sounds = default.node_sound_dirt_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:desert_sand_soil_wet", { @@ -386,4 +419,5 @@ minetest.register_node("maptools:desert_sand_soil_wet", { tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, soil = 3, wet = 1, desert = 1}, sounds = default.node_sound_sand_defaults(), + on_drop = maptools.drop_msg }) diff --git a/maptools/init.lua b/maptools/init.lua index 7b9afcd..17d5e37 100644 --- a/maptools/init.lua +++ b/maptools/init.lua @@ -20,6 +20,11 @@ maptools.intllib = S local modpath = minetest.get_modpath("maptools") +maptools.drop_msg = function(itemstack, player) + local name = player:get_player_name() + minetest.chat_send_player(name, S("[maptools] tools/nodes do not drop!")) +end + dofile(modpath .. "/config.lua") dofile(modpath .. "/aliases.lua") dofile(modpath .. "/craftitems.lua") diff --git a/maptools/nodes.lua b/maptools/nodes.lua index b97f8d9..d8e4212 100644 --- a/maptools/nodes.lua +++ b/maptools/nodes.lua @@ -16,6 +16,7 @@ minetest.register_node(":default:cloud", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_defaults(), + on_drop = maptools.drop_msg }) -- Nodes @@ -30,6 +31,7 @@ minetest.register_node("maptools:black", { post_effect_color = {a=255, r=0, g=0, b=0}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:white", { @@ -41,6 +43,7 @@ minetest.register_node("maptools:white", { post_effect_color = {a=255, r=128, g=128, b=128}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_stone_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:playerclip", { @@ -54,6 +57,7 @@ minetest.register_node("maptools:playerclip", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:fake_walkable", { @@ -74,6 +78,7 @@ minetest.register_node("maptools:fake_walkable", { }, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:fullclip", { @@ -86,6 +91,7 @@ minetest.register_node("maptools:fullclip", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:fake_walkable_pointable", { @@ -105,6 +111,7 @@ minetest.register_node("maptools:fake_walkable_pointable", { }, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:ignore_like", { @@ -117,6 +124,7 @@ minetest.register_node("maptools:ignore_like", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:ignore_like_no_clip", { @@ -130,6 +138,7 @@ minetest.register_node("maptools:ignore_like_no_clip", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) @@ -144,6 +153,7 @@ minetest.register_node("maptools:ignore_like_no_point", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:ignore_like_no_clip_no_point", { @@ -158,6 +168,7 @@ minetest.register_node("maptools:ignore_like_no_clip_no_point", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:fullclip_face", { @@ -176,6 +187,7 @@ minetest.register_node("maptools:fullclip_face", { }, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:playerclip_bottom", { @@ -194,6 +206,7 @@ minetest.register_node("maptools:playerclip_bottom", { }, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:playerclip_top", { @@ -212,6 +225,7 @@ minetest.register_node("maptools:playerclip_top", { }, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100}, + on_drop = maptools.drop_msg }) for pusher_num=1,10,1 do @@ -231,6 +245,7 @@ minetest.register_node("maptools:pusher_" .. pusher_num, { }, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100, bouncy=pusher_num*100}, + on_drop = maptools.drop_msg }) end @@ -247,6 +262,7 @@ minetest.register_node("maptools:lightbulb", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:nobuild", { @@ -261,6 +277,7 @@ minetest.register_node("maptools:nobuild", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:nointeract", { @@ -274,6 +291,7 @@ minetest.register_node("maptools:nointeract", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:climb", { @@ -289,6 +307,7 @@ minetest.register_node("maptools:climb", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) for damage_num=1,5,1 do @@ -305,6 +324,7 @@ minetest.register_node("maptools:damage_" .. damage_num, { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) end @@ -321,6 +341,7 @@ minetest.register_node("maptools:kill", { sunlight_propagates = true, drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:smoke", { @@ -334,6 +355,7 @@ minetest.register_node("maptools:smoke", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, post_effect_color = {a=192, r=96, g=96, b=96}, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:ladder", { @@ -354,6 +376,7 @@ minetest.register_node("maptools:ladder", { drop = "", groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_wood_defaults(), + on_drop = maptools.drop_msg }) minetest.register_node("maptools:permanent_fire", { @@ -373,6 +396,7 @@ minetest.register_node("maptools:permanent_fire", { sunlight_propagates = true, walkable = false, damage_per_second = 4, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:fake_fire", { @@ -391,6 +415,7 @@ minetest.register_node("maptools:fake_fire", { groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sunlight_propagates = true, walkable = false, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:igniter", { @@ -406,6 +431,7 @@ minetest.register_node("maptools:igniter", { sunlight_propagates = true, pointable = false, walkable = false, + on_drop = maptools.drop_msg }) minetest.register_node("maptools:superapple", { @@ -426,4 +452,5 @@ minetest.register_node("maptools:superapple", { groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory = maptools.creative}, on_use = minetest.item_eat(20), sounds = default.node_sound_defaults(), + on_drop = maptools.drop_msg }) diff --git a/maptools/tools.lua b/maptools/tools.lua index e42d2f5..a5c5933 100644 --- a/maptools/tools.lua +++ b/maptools/tools.lua @@ -28,6 +28,7 @@ minetest.register_tool("maptools:pick_admin", { }, damage_groups = {fleshy = 1000}, }, + on_drop = maptools.drop_msg }) minetest.register_tool("maptools:pick_admin_with_drops", { @@ -49,6 +50,7 @@ minetest.register_tool("maptools:pick_admin_with_drops", { }, damage_groups = {fleshy = 1000}, }, + on_drop = maptools.drop_msg }) minetest.register_on_punchnode(function(pos, node, puncher) @@ -56,6 +58,6 @@ minetest.register_on_punchnode(function(pos, node, puncher) and minetest.get_node(pos).name ~= "air" then minetest.log("action", puncher:get_player_name() .. " digs " .. minetest.get_node(pos).name .. " at " .. minetest.pos_to_string(pos) .. " using an Admin Pickaxe.") minetest.remove_node(pos) -- The node is removed directly, which means it even works on non-empty containers and group-less nodes. - nodeupdate(pos) -- Run node update actions like falling nodes. + minetest.check_for_falling(pos) -- Run node update actions like falling nodes. end end) diff --git a/mesecons/oldwires.lua b/mesecons/oldwires.lua index 43bf302..8d6c6b1 100644 --- a/mesecons/oldwires.lua +++ b/mesecons/oldwires.lua @@ -30,7 +30,7 @@ minetest.register_node("mesecons:mesecon_on", { }, groups = {dig_immediate=3, not_in_creaive_inventory=1, mesecon=1}, drop = "mesecons:mesecon_off 1", - light_source = default.LIGHT_MAX-11, + light_source = minetest.LIGHT_MAX-11, mesecons = {conductor={ state = mesecon.state.on, offstate = "mesecons:mesecon_off" diff --git a/mesecons_button/init.lua b/mesecons_button/init.lua index 104fc5b..8764fbc 100644 --- a/mesecons_button/init.lua +++ b/mesecons_button/init.lua @@ -73,7 +73,7 @@ minetest.register_node("mesecons_button:button_on", { legacy_wallmounted = true, walkable = false, on_rotate = false, - light_source = default.LIGHT_MAX-7, + light_source = minetest.LIGHT_MAX-7, sunlight_propagates = true, selection_box = { type = "fixed", diff --git a/mesecons_delayer/init.lua b/mesecons_delayer/init.lua index 0cbfd42..94450db 100644 --- a/mesecons_delayer/init.lua +++ b/mesecons_delayer/init.lua @@ -158,6 +158,7 @@ minetest.register_node("mesecons_delayer:delayer_on_"..tostring(i), { end, delayer_time = delaytime, delayer_offstate = "mesecons_delayer:delayer_off_"..tostring(i), + sounds = default.node_sound_stone_defaults(), mesecons = { receptor = { diff --git a/mesecons_extrawires/corner.lua b/mesecons_extrawires/corner.lua index 8dc9866..d0b01f9 100644 --- a/mesecons_extrawires/corner.lua +++ b/mesecons_extrawires/corner.lua @@ -42,6 +42,7 @@ minetest.register_node("mesecons_extrawires:corner_on", { node_box = corner_nodebox, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons_extrawires:corner_off", + sounds = default.node_sound_defaults(), mesecons = {conductor = { state = mesecon.state.on, @@ -71,6 +72,7 @@ minetest.register_node("mesecons_extrawires:corner_off", { selection_box = corner_selectionbox, node_box = corner_nodebox, groups = {dig_immediate = 3}, + sounds = default.node_sound_defaults(), mesecons = {conductor = { state = mesecon.state.off, diff --git a/mesecons_extrawires/crossover.lua b/mesecons_extrawires/crossover.lua index 4aefbbc..b8d66f7 100644 --- a/mesecons_extrawires/crossover.lua +++ b/mesecons_extrawires/crossover.lua @@ -34,6 +34,7 @@ minetest.register_node("mesecons_extrawires:crossover_off", { stack_max = 99, selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, groups = {dig_immediate=3, mesecon=3}, + sounds = default.node_sound_defaults(), mesecons = { conductor = { states = crossover_states, @@ -60,6 +61,7 @@ minetest.register_node("mesecons_extrawires:crossover_01", { stack_max = 99, selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, + sounds = default.node_sound_defaults(), mesecons = { conductor = { states = crossover_states, @@ -86,6 +88,7 @@ minetest.register_node("mesecons_extrawires:crossover_10", { stack_max = 99, selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, + sounds = default.node_sound_defaults(), mesecons = { conductor = { states = crossover_states, @@ -112,6 +115,7 @@ minetest.register_node("mesecons_extrawires:crossover_on", { stack_max = 99, selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, + sounds = default.node_sound_defaults(), mesecons = { conductor = { states = crossover_states, diff --git a/mesecons_extrawires/tjunction.lua b/mesecons_extrawires/tjunction.lua index 53a69f6..e98b066 100644 --- a/mesecons_extrawires/tjunction.lua +++ b/mesecons_extrawires/tjunction.lua @@ -43,6 +43,7 @@ minetest.register_node("mesecons_extrawires:tjunction_on", { node_box = tjunction_nodebox, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons_extrawires:tjunction_off", + sounds = default.node_sound_defaults(), mesecons = {conductor = { state = mesecon.state.on, @@ -72,6 +73,7 @@ minetest.register_node("mesecons_extrawires:tjunction_off", { selection_box = tjunction_selectionbox, node_box = tjunction_nodebox, groups = {dig_immediate = 3}, + sounds = default.node_sound_defaults(), mesecons = {conductor = { state = mesecon.state.off, diff --git a/mesecons_extrawires/vertical.lua b/mesecons_extrawires/vertical.lua index 1cff013..1543194 100644 --- a/mesecons_extrawires/vertical.lua +++ b/mesecons_extrawires/vertical.lua @@ -88,7 +88,8 @@ mesecon.register_node("mesecons_extrawires:vertical", { is_vertical_conductor = true, drop = "mesecons_extrawires:vertical_off", after_place_node = vertical_update, - after_dig_node = vertical_update + after_dig_node = vertical_update, + sounds = default.node_sound_defaults(), },{ tiles = {"mesecons_wire_off.png"}, groups = {dig_immediate=3}, @@ -121,7 +122,8 @@ mesecon.register_node("mesecons_extrawires:vertical_top", { is_vertical_conductor = true, drop = "mesecons_extrawires:vertical_off", after_place_node = vertical_update, - after_dig_node = vertical_update + after_dig_node = vertical_update, + sounds = default.node_sound_defaults(), },{ tiles = {"mesecons_wire_off.png"}, mesecons = {conductor = { @@ -152,7 +154,8 @@ mesecon.register_node("mesecons_extrawires:vertical_bottom", { is_vertical_conductor = true, drop = "mesecons_extrawires:vertical_off", after_place_node = vertical_update, - after_dig_node = vertical_update + after_dig_node = vertical_update, + sounds = default.node_sound_defaults(), },{ tiles = {"mesecons_wire_off.png"}, mesecons = {conductor = { diff --git a/mesecons_hydroturbine/init.lua b/mesecons_hydroturbine/init.lua index 395b8f6..afa21e9 100644 --- a/mesecons_hydroturbine/init.lua +++ b/mesecons_hydroturbine/init.lua @@ -22,7 +22,7 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", { type = "fixed", fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }, }, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_metal_defaults(), mesecons = {receptor = { state = mesecon.state.off }}, @@ -51,7 +51,7 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", { type = "fixed", fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }, }, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_metal_defaults(), mesecons = {receptor = { state = mesecon.state.on }}, diff --git a/mesecons_insulated/init.lua b/mesecons_insulated/init.lua index 92ff639..b917323 100644 --- a/mesecons_insulated/init.lua +++ b/mesecons_insulated/init.lua @@ -35,6 +35,7 @@ minetest.register_node("mesecons_insulated:insulated_on", { }, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons_insulated:insulated_off", + sounds = default.node_sound_defaults(), mesecons = {conductor = { state = mesecon.state.on, offstate = "mesecons_insulated:insulated_off", @@ -69,6 +70,7 @@ minetest.register_node("mesecons_insulated:insulated_off", { fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 } }, groups = {dig_immediate = 3}, + sounds = default.node_sound_defaults(), mesecons = {conductor = { state = mesecon.state.off, onstate = "mesecons_insulated:insulated_on", diff --git a/mesecons_luacontroller/init.lua b/mesecons_luacontroller/init.lua index 325e16f..0f8adbc 100644 --- a/mesecons_luacontroller/init.lua +++ b/mesecons_luacontroller/init.lua @@ -198,7 +198,11 @@ end ------------------------- local function safe_print(param) + local string_meta = getmetatable("") + local sandbox = string_meta.__index + string_meta.__index = string -- Leave string sandbox temporarily print(dump(param)) + string_meta.__index = sandbox -- Restore string sandbox end local function safe_date() @@ -718,7 +722,7 @@ local function on_receive_fields(pos, form_name, fields, sender) local ok, err = set_program(pos, fields.code) if not ok then -- it's not an error from the server perspective - minetest.log("action", "Lua controller programming error: " .. err) + minetest.log("action", "Lua controller programming error: " .. tostring(err)) end end diff --git a/mesecons_microcontroller/init.lua b/mesecons_microcontroller/init.lua index 46272b9..9b1bf3b 100644 --- a/mesecons_microcontroller/init.lua +++ b/mesecons_microcontroller/init.lua @@ -103,6 +103,12 @@ minetest.register_node(nodename, { meta:set_string("eeprom", r) end, on_receive_fields = function(pos, formanme, fields, sender) + local player_name = sender:get_player_name() + if minetest.is_protected(pos, player_name) and + not minetest.check_player_privs(player_name, {protection_bypass=true}) then + minetest.record_protection_violation(pos, player_name) + return + end local meta = minetest.get_meta(pos) if fields.band then fields.code = "sbi(C, A&B) :A and B are inputs, C is output" @@ -272,7 +278,7 @@ yc.parsecode = function(code, pos) end yc.parse_get_command = function(code, starti) - i = starti + local i = starti local s while s ~= "" do s = string.sub(code, i, i) @@ -298,7 +304,7 @@ yc.parse_get_command = function(code, starti) end yc.parse_get_params = function(code, starti) - i = starti + local i = starti local s local params = {} local is_string = false @@ -321,7 +327,7 @@ yc.parse_get_params = function(code, starti) end yc.parse_get_eeprom_param = function(cond, starti) - i = starti + local i = starti local s local addr while s ~= "" do @@ -488,7 +494,7 @@ end --Condition parsing yc.command_if_getcondition = function(code, starti) - i = starti + local i = starti local s local brackets = 1 --1 Bracket to close while s ~= "" do diff --git a/mesecons_movestones/init.lua b/mesecons_movestones/init.lua index 76fd3cd..7a2f7e8 100644 --- a/mesecons_movestones/init.lua +++ b/mesecons_movestones/init.lua @@ -60,14 +60,16 @@ function mesecon.register_movestone(name, def, is_sticky, is_vertical) minetest.get_node_timer(frontpos):start(timer_interval) -- ### Step 3: If sticky, pull stack behind ### - if not is_sticky then - return - end - local backpos = vector.subtract(pos, direction) - success, stack, oldstack = mesecon.mvps_pull_all(backpos, direction, max_pull) - if success then - mesecon.mvps_move_objects(backpos, vector.multiply(direction, -1), oldstack, -1) + if is_sticky then + local backpos = vector.subtract(pos, direction) + success, stack, oldstack = mesecon.mvps_pull_all(backpos, direction, max_pull) + if success then + mesecon.mvps_move_objects(backpos, vector.multiply(direction, -1), oldstack, -1) + end end + + -- ### Step 4: Let things fall ### + minetest.check_for_falling(vector.add(pos, {x=0, y=1, z=0})) end def.is_ground_content = false diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index e10b604..386cffa 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -326,6 +326,7 @@ minetest.register_node("mesecons_pistons:piston_pusher_normal", { node_box = piston_pusher_box, on_rotate = piston_rotate_pusher, drop = "", + sounds = default.node_sound_wood_defaults(), }) -- Sticky ones @@ -403,6 +404,7 @@ minetest.register_node("mesecons_pistons:piston_pusher_sticky", { node_box = piston_pusher_box, on_rotate = piston_rotate_pusher, drop = "", + sounds = default.node_sound_wood_defaults(), }) diff --git a/mesecons_powerplant/init.lua b/mesecons_powerplant/init.lua index 28cad25..356fb12 100644 --- a/mesecons_powerplant/init.lua +++ b/mesecons_powerplant/init.lua @@ -10,7 +10,7 @@ minetest.register_node("mesecons_powerplant:power_plant", { is_ground_content = false, walkable = false, groups = {dig_immediate=3, mesecon = 2}, - light_source = default.LIGHT_MAX-9, + light_source = minetest.LIGHT_MAX-9, description="Power Plant", selection_box = { type = "fixed", diff --git a/mesecons_pressureplates/init.lua b/mesecons_pressureplates/init.lua index 6337941..1a503e9 100644 --- a/mesecons_pressureplates/init.lua +++ b/mesecons_pressureplates/init.lua @@ -42,8 +42,18 @@ end -- tiles_on: textures of the pressure plate when active -- image: inventory and wield image of the pressure plate -- recipe: crafting recipe of the pressure plate +-- groups: groups +-- sounds: sound table + +function mesecon.register_pressure_plate(basename, description, textures_off, textures_on, image_w, image_i, recipe, groups, sounds) + local groups_off, groups_on + if not groups then + groups = {} + end + local groups_off = table.copy(groups) + local groups_on = table.copy(groups) + groups_on.not_in_creative_inventory = 1 -function mesecon.register_pressure_plate(basename, description, textures_off, textures_on, image_w, image_i, recipe) mesecon.register_node(basename, { drawtype = "nodebox", inventory_image = image_i, @@ -56,17 +66,18 @@ function mesecon.register_pressure_plate(basename, description, textures_off, te on_construct = function(pos) minetest.get_node_timer(pos):start(mesecon.setting("pplate_interval", 0.1)) end, + sounds = sounds, },{ mesecons = {receptor = { state = mesecon.state.off, rules = mesecon.rules.pplate }}, node_box = pp_box_off, selection_box = pp_box_off, - groups = {snappy = 2, oddly_breakable_by_hand = 3}, + groups = groups_off, tiles = textures_off },{ mesecons = {receptor = { state = mesecon.state.on, rules = mesecon.rules.pplate }}, node_box = pp_box_on, selection_box = pp_box_on, - groups = {snappy = 2, oddly_breakable_by_hand = 3, not_in_creative_inventory = 1}, + groups = groups_on, tiles = textures_on }) @@ -83,7 +94,9 @@ mesecon.register_pressure_plate( {"jeija_pressure_plate_wood_on.png","jeija_pressure_plate_wood_on.png","jeija_pressure_plate_wood_on_edges.png"}, "jeija_pressure_plate_wood_wield.png", "jeija_pressure_plate_wood_inv.png", - {{"group:wood", "group:wood"}}) + {{"group:wood", "group:wood"}}, + { choppy = 3, oddly_breakable_by_hand = 3 }, + default.node_sound_wood_defaults()) mesecon.register_pressure_plate( "mesecons_pressureplates:pressure_plate_stone", @@ -92,4 +105,6 @@ mesecon.register_pressure_plate( {"jeija_pressure_plate_stone_on.png","jeija_pressure_plate_stone_on.png","jeija_pressure_plate_stone_on_edges.png"}, "jeija_pressure_plate_stone_wield.png", "jeija_pressure_plate_stone_inv.png", - {{"default:cobble", "default:cobble"}}) + {{"default:cobble", "default:cobble"}}, + { cracky = 3, oddly_breakable_by_hand = 3 }, + default.node_sound_stone_defaults()) diff --git a/mesecons_receiver/init.lua b/mesecons_receiver/init.lua index edf6622..476131d 100644 --- a/mesecons_receiver/init.lua +++ b/mesecons_receiver/init.lua @@ -56,6 +56,7 @@ mesecon.register_node("mesecons_receiver:receiver", { }, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons:wire_00000000_off", + sounds = default.node_sound_defaults(), }, { tiles = { "receiver_top_off.png", @@ -104,6 +105,7 @@ mesecon.register_node("mesecons_receiver:receiver_up", { }, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons:wire_00000000_off", + sounds = default.node_sound_defaults(), }, { tiles = {"mesecons_wire_off.png"}, mesecons = {conductor = { @@ -148,6 +150,7 @@ mesecon.register_node("mesecons_receiver:receiver_down", { }, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons:wire_00000000_off", + sounds = default.node_sound_defaults(), }, { tiles = {"mesecons_wire_off.png"}, mesecons = {conductor = { @@ -206,7 +209,6 @@ function mesecon.receiver_place(rcpt_pos) local param2 = minetest.dir_to_facedir(minetest.facedir_to_dir(node.param2)) if string.find(nn.name, "mesecons:wire_") ~= nil then - minetest.dig_node(pos) minetest.set_node(pos, {name = rcvtype, param2 = param2}) mesecon.on_placenode(pos, nn) end @@ -215,8 +217,7 @@ end function mesecon.receiver_remove(rcpt_pos, dugnode) local pos = mesecon.receiver_get_pos_from_rcpt(rcpt_pos, dugnode.param2) local nn = minetest.get_node(pos) - if string.find(nn.name, "mesecons_receiver:receiver_") ~=nil then - minetest.dig_node(pos) + if string.find(nn.name, "mesecons_receiver:receiver_") ~= nil then local node = {name = "mesecons:wire_00000000_off"} minetest.set_node(pos, node) mesecon.on_placenode(pos, node) diff --git a/mesecons_torch/init.lua b/mesecons_torch/init.lua index 5f1d25a..867c909 100644 --- a/mesecons_torch/init.lua +++ b/mesecons_torch/init.lua @@ -60,6 +60,7 @@ minetest.register_node("mesecons_torch:mesecon_torch_off", { selection_box = torch_selectionbox, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons_torch:mesecon_torch_on", + sounds = default.node_sound_defaults(), mesecons = {receptor = { state = mesecon.state.off, rules = torch_get_output_rules @@ -79,8 +80,9 @@ minetest.register_node("mesecons_torch:mesecon_torch_on", { paramtype2 = "wallmounted", selection_box = torch_selectionbox, groups = {dig_immediate=3}, - light_source = default.LIGHT_MAX-5, + light_source = minetest.LIGHT_MAX-5, description="Mesecon Torch", + sounds = default.node_sound_defaults(), mesecons = {receptor = { state = mesecon.state.on, rules = torch_get_output_rules diff --git a/mesecons_wires/init.lua b/mesecons_wires/init.lua index 1766a99..3ca9cbc 100644 --- a/mesecons_wires/init.lua +++ b/mesecons_wires/init.lua @@ -215,6 +215,7 @@ local function register_wires() walkable = false, drop = "mesecons:wire_00000000_off", mesecon_wire = true, + sounds = default.node_sound_defaults(), on_rotate = false, }, {tiles = tiles_off, mesecons = meseconspec_off, groups = groups_off}, {tiles = tiles_on, mesecons = meseconspec_on, groups = groups_on}) diff --git a/moreblocks/redefinitions.lua b/moreblocks/redefinitions.lua index 13b8f0b..437c2d3 100644 --- a/moreblocks/redefinitions.lua +++ b/moreblocks/redefinitions.lua @@ -25,6 +25,11 @@ minetest.register_craft({ } }) +minetest.clear_craft({ + recipe = { + {"default:papyrus", "default:papyrus", "default:papyrus"} + } +}) minetest.register_craft({ output = "default:paper 4", recipe = { diff --git a/moreblocks/stairsplus/registrations.lua b/moreblocks/stairsplus/registrations.lua index 1e86954..dc89234 100644 --- a/moreblocks/stairsplus/registrations.lua +++ b/moreblocks/stairsplus/registrations.lua @@ -71,6 +71,8 @@ for _, name in pairs(default_nodes) do mod = "moreblocks" stairsplus:register_all(mod, name, nodename, ndef) minetest.register_alias_force("stairs:stair_" .. name, mod .. ":stair_" .. name) + minetest.register_alias_force("stairs:stair_outer_" .. name, mod .. ":stair_" .. name .. "_outer") + minetest.register_alias_force("stairs:stair_inner_" .. name, mod .. ":stair_" .. name .. "_inner") minetest.register_alias_force("stairs:slab_" .. name, mod .. ":slab_" .. name) end @@ -86,6 +88,8 @@ if minetest.get_modpath("farming") then mod = "moreblocks" stairsplus:register_all(mod, name, nodename, ndef) minetest.register_alias_force("stairs:stair_" .. name, mod .. ":stair_" .. name) + minetest.register_alias_force("stairs:stair_outer_" .. name, mod .. ":stair_" .. name .. "_outer") + minetest.register_alias_force("stairs:stair_inner_" .. name, mod .. ":stair_" .. name .. "_inner") minetest.register_alias_force("stairs:slab_" .. name, mod .. ":slab_" .. name) end end diff --git a/pipeworks/common.lua b/pipeworks/common.lua index 5574bb2..0f8c34c 100644 --- a/pipeworks/common.lua +++ b/pipeworks/common.lua @@ -157,3 +157,134 @@ function pipeworks.load_position(pos) local vm = minetest.get_voxel_manip() vm:read_from_map(pos, pos) end + +local function delay(...) + local args = {...} + return (function() return unpack(args) end) +end + +local function get_set_wrap(name, is_dynamic) + return (function(self) + return self["_" .. name] + end), (function(self, value) + if is_dynamic then + self["_" .. name] = type(value) == "table" + and table.copy(value) or value + end + end) +end + +function pipeworks.create_fake_player(def, is_dynamic) + local wielded_item = ItemStack("") + if def.inventory and def.wield_list then + wielded_item = def.inventory:get_stack(def.wield_list, def.wield_index or 1) + end + local p = { + get_player_name = delay(def.name), + is_player = delay(true), + is_fake_player = true, + + _formspec = def.formspec or default.gui_survival_form, + _hp = def.hp or 20, + _breath = 11, + _pos = def.position and table.copy(def.position) or vector.new(), + _properties = def.properties or { eye_height = def.eye_height or 1.47 }, + _inventory = def.inventory, + _wield_index = def.wield_index or 1, + _wielded_item = wielded_item, + + -- Model and view + _eye_offset1 = vector.new(), + _eye_offset3 = vector.new(), + set_eye_offset = function(self, first, third) + self._eye_offset1 = table.copy(first) + self._eye_offset3 = table.copy(third) + end, + get_eye_offset = function(self) + return self._eye_offset1, self._eye_offset3 + end, + get_look_dir = delay(def.look_dir or {x=0, y=0, z=1}), + get_look_pitch = delay(def.look_pitch or 0), + get_look_yaw = delay(def.look_yaw or 0), + get_look_horizontal = delay(def.look_yaw or 0), + get_look_vertical = delay(-(def.look_pitch or 0)), + set_animation = delay(), + + -- Controls + get_player_control = delay({ + jump=false, right=false, left=false, LMB=false, RMB=false, + sneak=def.sneak, aux1=false, down=false, up=false + }), + get_player_control_bits = delay(def.sneak and 64 or 0), + + -- Inventory and ItemStacks + get_inventory = delay(def.inventory), + set_wielded_item = function(self, item) + if self._inventory and def.wield_list then + return self._inventory:set_stack(def.wield_list, + self._wield_index, item) + end + _wielded_item = ItemStack(item) + end, + get_wielded_item = function(self, item) + if self._inventory and def.wield_list then + return self._inventory:get_stack(def.wield_list, + self._wield_index) + end + return ItemStack(self._wielded_item) + end, + get_wield_list = delay(def.wield_list), + + punch = delay(), + remove = delay(), + right_click = delay(), + set_attach = delay(), + set_detach = delay(), + set_bone_position = delay(), + hud_change = delay(), + } + local _trash + -- Getter & setter functions + p.get_inventory_formspec, p.set_inventory_formspec + = get_set_wrap("formspec", is_dynamic) + p.get_breath, p.set_breath = get_set_wrap("breath", is_dynamic) + p.get_hp, p.set_hp = get_set_wrap("hp", is_dynamic) + p.get_pos, p.set_pos = get_set_wrap("pos", is_dynamic) + _trash, p.move_to = get_set_wrap("pos", is_dynamic) + p.get_wield_index, p.set_wield_index = get_set_wrap("wield_index", true) + p.get_properties, p.set_properties = get_set_wrap("properties", false) + + -- Backwards compatibilty + p.getpos = p.get_pos + p.setpos = p.set_pos + p.moveto = p.move_to + + -- TODO "implement" all these + -- set_armor_groups + -- get_armor_groups + -- get_animation + -- get_bone_position + -- get_player_velocity + -- set_look_pitch + -- set_look_yaw + -- set_physics_override + -- get_physics_override + -- hud_add + -- hud_remove + -- hud_get + -- hud_set_flags + -- hud_get_flags + -- hud_set_hotbar_itemcount + -- hud_get_hotbar_itemcount + -- hud_set_hotbar_image + -- hud_get_hotbar_image + -- hud_set_hotbar_selected_image + -- hud_get_hotbar_selected_image + -- hud_replace_builtin + -- set_sky + -- get_sky + -- override_day_night_ratio + -- get_day_night_ratio + -- set_local_animation + return p +end diff --git a/pipeworks/filter-injector.lua b/pipeworks/filter-injector.lua index 0f651fb..a8659ad 100644 --- a/pipeworks/filter-injector.lua +++ b/pipeworks/filter-injector.lua @@ -167,11 +167,9 @@ local function punch_filter(data, filtpos, filtnode, msg) local filtmeta = minetest.get_meta(filtpos) local filtinv = filtmeta:get_inventory() local owner = filtmeta:get_string("owner") - local fakePlayer = { - get_player_name = delay(owner), - is_fake_player = ":pipeworks", - get_wielded_item = delay(ItemStack(nil)) - } -- TODO: use a mechanism as the wielder one + local fakePlayer = pipeworks.create_fake_player({ + name = owner + }) local dir = pipeworks.facedir_to_right_dir(filtnode.param2) local frompos = vector.subtract(filtpos, dir) local fromnode = minetest.get_node(frompos) diff --git a/pipeworks/item_transport.lua b/pipeworks/item_transport.lua index 7219f7e..388e2e7 100644 --- a/pipeworks/item_transport.lua +++ b/pipeworks/item_transport.lua @@ -13,7 +13,7 @@ function pipeworks.tube_inject_item(pos, start_pos, velocity, item, owner) local obj = luaentity.add_entity(pos, "pipeworks:tubed_item") obj:set_item(stack:to_string()) obj.start_pos = vector.new(start_pos) - obj:setvelocity(velocity) + obj:set_velocity(velocity) obj.owner = owner --obj:set_color("red") -- todo: this is test-only code return obj @@ -207,7 +207,7 @@ minetest.register_entity("pipeworks:tubed_item", { textures = {stack:get_name()} }) local def = stack:get_definition() - self.object:setyaw((def and def.type == "node") and 0 or math.pi * 0.25) + self.object:set_yaw((def and def.type == "node") and 0 or math.pi * 0.25) end, get_staticdata = luaentity.get_staticdata, @@ -220,7 +220,7 @@ minetest.register_entity("pipeworks:tubed_item", { return end local item = minetest.deserialize(staticdata) - pipeworks.tube_inject_item(self.object:getpos(), item.start_pos, item.velocity, item.itemstring) + pipeworks.tube_inject_item(self.object:get_pos(), item.start_pos, item.velocity, item.itemstring) self.object:remove() end, }) @@ -293,15 +293,15 @@ luaentity.register_entity("pipeworks:tubed_item", { end, on_step = function(self, dtime) - local pos = self:getpos() + local pos = self:get_pos() if self.start_pos == nil then self.start_pos = vector.round(pos) - self:setpos(pos) + self:set_pos(pos) end local stack = ItemStack(self.itemstring) - local velocity = self:getvelocity() + local velocity = self:get_velocity() local moved = false local speed = math.abs(velocity.x + velocity.y + velocity.z) @@ -331,8 +331,8 @@ luaentity.register_entity("pipeworks:tubed_item", { return end velocity = vector.multiply(velocity, -1) - self:setpos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1))) - self:setvelocity(velocity) + self:set_pos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1))) + self:set_velocity(velocity) self:set_item(leftover:to_string()) return end @@ -350,13 +350,13 @@ luaentity.register_entity("pipeworks:tubed_item", { -- compatible with Minetest 0.4.13. -- Using item_drop here makes Minetest 0.4.13 crash. local dropped_item = minetest.add_item(self.start_pos, stack) - dropped_item:setvelocity(vector.multiply(velocity, 5)) + dropped_item:set_velocity(vector.multiply(velocity, 5)) self:remove() return else velocity = vector.multiply(velocity, -1) - self:setpos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1))) - self:setvelocity(velocity) + self:set_pos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1))) + self:set_velocity(velocity) end elseif is_multimode(multimode) then -- create new stacks according to returned data. @@ -371,8 +371,8 @@ luaentity.register_entity("pipeworks:tubed_item", { if new_velocity and not vector.equals(velocity, new_velocity) then local nvelr = math.abs(new_velocity.x + new_velocity.y + new_velocity.z) - self:setpos(vector.add(self.start_pos, vector.multiply(new_velocity, (moved_by - 1) / nvelr))) - self:setvelocity(new_velocity) + self:set_pos(vector.add(self.start_pos, vector.multiply(new_velocity, (moved_by - 1) / nvelr))) + self:set_velocity(new_velocity) end end end @@ -388,11 +388,11 @@ if minetest.get_modpath("mesecons_mvps") then end for id, entity in pairs(luaentity.entities) do if entity.name == "pipeworks:tubed_item" then - local pos = entity:getpos() + local pos = entity:get_pos() local rpos = vector.round(pos) local dir = moved[minetest.hash_node_position(rpos)] if dir then - entity:setpos(vector.add(pos, dir)) + entity:set_pos(vector.add(pos, dir)) entity.start_pos = vector.add(entity.start_pos, dir) end end diff --git a/pipeworks/legacy.lua b/pipeworks/legacy.lua index b36cded..bb92a8f 100644 --- a/pipeworks/legacy.lua +++ b/pipeworks/legacy.lua @@ -36,7 +36,7 @@ if not minetest.get_modpath("auto_tree_tap") and end, after_place_node = function (pos, placer) pipeworks.scan_for_tube_objects(pos, placer) - local placer_pos = placer:getpos() + local placer_pos = placer:get_pos() --correct for the player's height if placer:is_player() then placer_pos.y = placer_pos.y + 1.5 end diff --git a/pipeworks/luaentity.lua b/pipeworks/luaentity.lua index 34b6665..c11c030 100644 --- a/pipeworks/luaentity.lua +++ b/pipeworks/luaentity.lua @@ -74,7 +74,7 @@ local move_entities_globalstep_part1 = function(dtime) local active_block_range = tonumber(minetest.settings:get("active_block_range")) or 2 local new_active_blocks = {} for _, player in ipairs(minetest.get_connected_players()) do - local blockpos = get_blockpos(player:getpos()) + local blockpos = get_blockpos(player:get_pos()) local minp = vector.subtract(blockpos, active_block_range) local maxp = vector.add(blockpos, active_block_range) @@ -114,9 +114,9 @@ local entitydef_default = { if not def.entity then return end - def.entity:setpos(vector.add(self._pos, def.offset)) - def.entity:setvelocity(self._velocity) - def.entity:setacceleration(self._acceleration) + def.entity:set_pos(vector.add(self._pos, def.offset)) + def.entity:set_velocity(self._velocity) + def.entity:set_acceleration(self._acceleration) end, _attach_all = function(self) local master = self._attached_entities_master @@ -186,43 +186,43 @@ local entitydef_default = { self:_add_attached(id) end end, - getid = function(self) + get_id = function(self) return self._id end, - getpos = function(self) + get_pos = function(self) return vector.new(self._pos) end, - setpos = function(self, pos) + set_pos = function(self, pos) self._pos = vector.new(pos) --for _, entity in pairs(self._attached_entities) do -- if entity.entity then - -- entity.entity:setpos(vector.add(self._pos, entity.offset)) + -- entity.entity:set_pos(vector.add(self._pos, entity.offset)) -- end --end local master = self._attached_entities_master if master then local master_def = self._attached_entities[master] - master_def.entity:setpos(vector.add(self._pos, master_def.offset)) + master_def.entity:set_pos(vector.add(self._pos, master_def.offset)) end end, - getvelocity = function(self) + get_velocity = function(self) return vector.new(self._velocity) end, - setvelocity = function(self, velocity) + set_velocity = function(self, velocity) self._velocity = vector.new(velocity) local master = self._attached_entities_master if master then - self._attached_entities[master].entity:setvelocity(self._velocity) + self._attached_entities[master].entity:set_velocity(self._velocity) end end, - getacceleration = function(self) + get_acceleration = function(self) return vector.new(self._acceleration) end, - setacceleration = function(self, acceleration) + set_acceleration = function(self, acceleration) self._acceleration = vector.new(acceleration) local master = self._attached_entities_master if master then - self._attached_entities[master].entity:setacceleration(self._acceleration) + self._attached_entities[master].entity:set_acceleration(self._acceleration) end end, remove = function(self) @@ -314,7 +314,7 @@ function luaentity.get_objects_inside_radius(pos, radius) local objects = {} local index = 1 for id, entity in pairs(luaentity.entities) do - if vector.distance(pos, entity:getpos()) <= radius then + if vector.distance(pos, entity:get_pos()) <= radius then objects[index] = entity index = index + 1 end @@ -329,11 +329,11 @@ local move_entities_globalstep_part2 = function(dtime) local master = entity._attached_entities_master local master_def = master and entity._attached_entities[master] local master_entity = master_def and master_def.entity - local master_entity_pos = master_entity and master_entity:getpos() + local master_entity_pos = master_entity and master_entity:get_pos() if master_entity_pos then entity._pos = vector.subtract(master_entity_pos, master_def.offset) - entity._velocity = master_entity:getvelocity() - entity._acceleration = master_entity:getacceleration() + entity._velocity = master_entity:get_velocity() + entity._acceleration = master_entity:get_acceleration() else entity._pos = vector.add(vector.add( entity._pos, diff --git a/pipeworks/vacuum_tubes.lua b/pipeworks/vacuum_tubes.lua index 211c3ee..d616835 100644 --- a/pipeworks/vacuum_tubes.lua +++ b/pipeworks/vacuum_tubes.lua @@ -87,7 +87,7 @@ local function vacuum(pos, radius) for _, object in pairs(minetest.get_objects_inside_radius(pos, math.sqrt(3) * radius)) do local lua_entity = object:get_luaentity() if not object:is_player() and lua_entity and lua_entity.name == "__builtin:item" then - local obj_pos = object:getpos() + local obj_pos = object:get_pos() local minpos = vector.subtract(pos, radius) local maxpos = vector.add(pos, radius) if obj_pos.x >= minpos.x and obj_pos.x <= maxpos.x diff --git a/pipeworks/wielder.lua b/pipeworks/wielder.lua index eb7931f..98f1ef0 100644 --- a/pipeworks/wielder.lua +++ b/pipeworks/wielder.lua @@ -53,11 +53,10 @@ local function wielder_on(data, wielder_pos, wielder_node) local wielder_meta = minetest.get_meta(wielder_pos) local inv = wielder_meta:get_inventory() local wield_inv_name = data.wield_inv_name - local wieldindex, wieldstack + local wieldindex for i, stack in ipairs(inv:get_list(wield_inv_name)) do if not stack:is_empty() then wieldindex = i - wieldstack = stack break end end @@ -66,7 +65,6 @@ local function wielder_on(data, wielder_pos, wielder_node) wield_inv_name = data.ghost_inv_name inv:set_stack(wield_inv_name, 1, ItemStack(data.ghost_tool)) wieldindex = 1 - wieldstack = inv:get_stack(wield_inv_name, 1) end local dir = minetest.facedir_to_dir(wielder_node.param2) -- under/above is currently intentionally left switched @@ -98,73 +96,20 @@ local function wielder_on(data, wielder_pos, wielder_node) yaw = 0 pitch = math.pi/2 end - local virtplayer = { - get_inventory_formspec = delay(wielder_meta:get_string("formspec")), - get_look_dir = delay(vector.multiply(dir, -1)), - get_look_pitch = delay(pitch), - get_look_yaw = delay(yaw), - get_look_horizontal = delay(yaw), - get_look_vertical = delay(pitch), - get_player_control = delay({ jump=false, right=false, left=false, LMB=false, RMB=false, sneak=data.sneak, aux1=false, down=false, up=false }), - get_player_control_bits = delay(data.sneak and 64 or 0), - get_player_name = delay(data.masquerade_as_owner and wielder_meta:get_string("owner") or ":pipeworks:"..minetest.pos_to_string(wielder_pos)), - is_player = delay(true), - is_fake_player = true, - set_inventory_formspec = delay(), - getpos = delay(vector.subtract(wielder_pos, assumed_eye_pos)), - get_hp = delay(20), - get_inventory = delay(inv), - get_wielded_item = delay(wieldstack), - get_wield_index = delay(wieldindex), - get_wield_list = delay(wield_inv_name), - moveto = delay(), - punch = delay(), - remove = delay(), - right_click = delay(), - setpos = delay(), - set_hp = delay(), - set_properties = delay(), - set_wielded_item = function(self, item) - wieldstack = item - inv:set_stack(wield_inv_name, wieldindex, item) - end, - set_animation = delay(), - set_attach = delay(), - set_detach = delay(), - set_bone_position = delay(), - hud_change = delay(), - get_breath = delay(11), - -- TODO "implement" all these - -- set_armor_groups - -- get_armor_groups - -- get_animation - -- get_attach - -- get_bone_position - -- get_properties - -- get_player_velocity - -- set_look_pitch - -- set_look_yaw - -- set_breath - -- set_physics_override - -- get_physics_override - -- hud_add - -- hud_remove - -- hud_get - -- hud_set_flags - -- hud_get_flags - -- hud_set_hotbar_itemcount - -- hud_get_hotbar_itemcount - -- hud_set_hotbar_image - -- hud_get_hotbar_image - -- hud_set_hotbar_selected_image - -- hud_get_hotbar_selected_image - -- hud_replace_builtin - -- set_sky - -- get_sky - -- override_day_night_ratio - -- get_day_night_ratio - -- set_local_animation - } + local virtplayer = pipeworks.create_fake_player({ + name = data.masquerade_as_owner and wielder_meta:get_string("owner") + or ":pipeworks:" .. minetest.pos_to_string(wielder_pos), + formspec = wielder_meta:get_string("formspec"), + look_dir = vector.multiply(dir, -1), + look_pitch = pitch, + look_yaw = yaw, + sneak = data.sneak, + position = vector.subtract(wielder_pos, assumed_eye_pos), + inventory = inv, + wield_index = wieldindex, + wield_list = wield_inv_name + }) + local pointed_thing = { type="node", under=under_pos, above=above_pos } data.act(virtplayer, pointed_thing) if data.eject_drops then @@ -258,7 +203,7 @@ local function register_wielder(data) end, after_place_node = function (pos, placer) pipeworks.scan_for_tube_objects(pos) - local placer_pos = placer:getpos() + local placer_pos = placer:get_pos() if placer_pos and placer:is_player() then placer_pos = vector.add(placer_pos, assumed_eye_pos) end if placer_pos then local dir = vector.subtract(pos, placer_pos) @@ -495,7 +440,9 @@ if pipeworks.enable_dispenser then sneak = true, act = function(virtplayer, pointed_thing) local wieldstack = virtplayer:get_wielded_item() - virtplayer:set_wielded_item((minetest.registered_items[wieldstack:get_name()] or {on_drop=minetest.item_drop}).on_drop(wieldstack, virtplayer, virtplayer:getpos()) or wieldstack) + virtplayer:set_wielded_item((minetest.registered_items[wieldstack:get_name()] or + {on_drop=minetest.item_drop}).on_drop(wieldstack, virtplayer, virtplayer:get_pos()) or + wieldstack) end, eject_drops = false, }) diff --git a/player_textures/textures/player_cheapie.png b/player_textures/textures/player_cheapie.png index 19c2eff..7139b65 100644 Binary files a/player_textures/textures/player_cheapie.png and b/player_textures/textures/player_cheapie.png differ diff --git a/ropes/LICENSE.md b/ropes/LICENSE.md index fb67788..368b332 100644 --- a/ropes/LICENSE.md +++ b/ropes/LICENSE.md @@ -1,4 +1,19 @@ -License -======= -- Code WTFPL -- Texture CC +## MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/signs_lib/init.lua b/signs_lib/init.lua index f5b39c7..bd16ecb 100644 --- a/signs_lib/init.lua +++ b/signs_lib/init.lua @@ -950,7 +950,7 @@ signs_text_on_activate = function(self) local meta = minetest.get_meta(pos) local text = meta:get_string("text") local new = (meta:get_int("__signslib_new_format") ~= 0) - if text then + if text and minetest.registered_nodes[minetest.get_node(pos).name] then text = trim_input(text) set_obj_text(self.object, text, new, pos) end diff --git a/technic/doc/api.md b/technic/doc/api.md index 2e5b6d3..178ab0a 100644 --- a/technic/doc/api.md +++ b/technic/doc/api.md @@ -11,9 +11,12 @@ switching station handles the network activity. Helper functions ---------------- +* `technic.EU_string(num)` + * Converts num to a human-readable string (see pretty_num) + and adds the `EU` unit + * Use this function when showing players energy values * `technic.pretty_num(num)` - * Converts the number `num` to a human-readable string. - * Use this function when showing players power values. + * Converts the number `num` to a human-readable string with SI prefixes * `technic.swap_node(pos, nodename)` * Same as `mintest.swap_node` but it only changes the nodename. * It uses `minetest.get_node` before swapping to ensure the new nodename diff --git a/technic/helpers.lua b/technic/helpers.lua index 5780f27..5963b68 100644 --- a/technic/helpers.lua +++ b/technic/helpers.lua @@ -1,23 +1,56 @@ -local digit_sep_esc -do - local sep = technic.config:get("digit_separator") - sep = tonumber(sep) and string.char(sep) or sep or " " - -- Escape for gsub - for magic in ("().%+-*?[^$"):gmatch(".") do - if sep == magic then - sep = "%"..sep +local constant_digit_count = technic.config:get("constant_digit_count") + +-- converts a number to a readable string with SI prefix, e.g. 10000 → "10 k", +-- 15 → "15 ", 0.1501 → "150.1 m" +-- a non-breaking space (U+a0) instead of a usual one is put after number +-- The precision is 4 digits +local prefixes = {[-8] = "y", [-7] = "z", [-6] = "a", [-5] = "f", [-4] = "p", + [-3] = "n", [-2] = "µ", [-1] = "m", [0] = "", [1] = "k", [2] = "M", + [3] = "G", [4] = "T", [5] = "P", [6] = "E", [7] = "Z", [8] = "Y"} +function technic.pretty_num(num) + -- the small number added is due to floating point inaccuracy + local b = math.floor(math.log10(math.abs(num)) +0.000001) + local pref_i + if b ~= 0 then + -- b is decremented by 1 to avoid a single digit with many decimals, + -- e.g. instead of 1.021 MEU, 1021 kEU is shown + pref_i = math.floor((b - 1) / 3) + else + -- as special case, avoid showing e.g. 1100 mEU instead of 1.1 EU + pref_i = 0 + end + if not prefixes[pref_i] then + -- This happens for 0, nan, inf, very big values, etc. + if num == 0 then + -- handle 0 explicilty to avoid showing "-0" + if not constant_digit_count then + return "0 " + end + -- gives 0.000 + return string.format("%.3f ", 0) end + return string.format("%.4g ", num) end - digit_sep_esc = sep + + num = num * 10 ^ (-3 * pref_i) + if constant_digit_count then + local comma_digits_cnt = 3 - (b - 3 * pref_i) + return string.format("%." .. comma_digits_cnt .. "f %s", + num, prefixes[pref_i]) + end + return string.format("%.4g %s", num, prefixes[pref_i]) end +-- some unittests +assert(technic.pretty_num(-0) == "0 ") +assert(technic.pretty_num(0) == "0 ") +assert(technic.pretty_num(1234) == "1234 ") +assert(technic.pretty_num(123456789) == "123.5 M") -function technic.pretty_num(num) - local str, k = tostring(num), nil - repeat - str, k = str:gsub("^(-?%d+)(%d%d%d)", "%1"..digit_sep_esc.."%2") - until k == 0 - return str + +-- used to display power values +function technic.EU_string(num) + return technic.pretty_num(num) .. "EU" end diff --git a/technic/machines/LV/cnc.lua b/technic/machines/LV/cnc.lua index 58ec6ba..fdfec99 100644 --- a/technic/machines/LV/cnc.lua +++ b/technic/machines/LV/cnc.lua @@ -48,7 +48,7 @@ local twosize_products = { } local cnc_formspec = - "invsize[9,11;]".. + "size[9,11;]".. "label[1,0;"..S("Choose Milling Program:").."]".. "image_button[1,0.5;1,1;technic_cnc_slope.png;slope; ]".. "image_button[2,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]".. diff --git a/technic/machines/LV/solar_panel.lua b/technic/machines/LV/solar_panel.lua index a06ddb8..c072b13 100644 --- a/technic/machines/LV/solar_panel.lua +++ b/technic/machines/LV/solar_panel.lua @@ -35,7 +35,8 @@ local run = function(pos, node) local charge_to_give = math.floor((light + pos1.y) * 3) charge_to_give = math.max(charge_to_give, 0) charge_to_give = math.min(charge_to_give, 200) - meta:set_string("infotext", S("@1 Active (@2 EU)", machine_name, technic.pretty_num(charge_to_give))) + meta:set_string("infotext", S("@1 Active (@2)", machine_name, + technic.EU_string(charge_to_give))) meta:set_int("LV_EU_supply", charge_to_give) else meta:set_string("infotext", S("%s Idle"):format(machine_name)) @@ -54,7 +55,7 @@ minetest.register_node("technic:solar_panel", { active = false, drawtype = "nodebox", paramtype = "light", - is_ground_content = true, + is_ground_content = true, node_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, diff --git a/technic/machines/MV/tool_workshop.lua b/technic/machines/MV/tool_workshop.lua index 6679d1d..a220ac0 100644 --- a/technic/machines/MV/tool_workshop.lua +++ b/technic/machines/MV/tool_workshop.lua @@ -19,7 +19,7 @@ minetest.register_craft({ local workshop_demand = {5000, 3500, 2000} local workshop_formspec = - "invsize[8,9;]".. + "size[8,9;]".. "list[current_name;src;3,1;1,1;]".. "label[0,0;"..S("%s Tool Workshop"):format("MV").."]".. "list[current_name;upgrade1;1,3;1,1;]".. diff --git a/technic/machines/MV/wind_mill.lua b/technic/machines/MV/wind_mill.lua index 28a075d..9df12b9 100644 --- a/technic/machines/MV/wind_mill.lua +++ b/technic/machines/MV/wind_mill.lua @@ -60,7 +60,8 @@ local run = function(pos, node) elseif check == true then local power = math.min(pos.y * 100, 5000) meta:set_int("MV_EU_supply", power) - meta:set_string("infotext", S("@1 (@2 EU)", machine_name, technic.pretty_num(power))) + meta:set_string("infotext", S("@1 (@2)", machine_name, + technic.EU_string(power))) end -- check == nil: assume nothing has changed end diff --git a/technic/machines/other/constructor.lua b/technic/machines/other/constructor.lua index 5847fdb..0a62a7c 100644 --- a/technic/machines/other/constructor.lua +++ b/technic/machines/other/constructor.lua @@ -99,7 +99,7 @@ local function make_on(mark, length) if node.name == "technic:constructor_mk"..mark.."_off" then technic.swap_node(pos, "technic:constructor_mk"..mark.."_on") - nodeupdate(pos) + minetest.check_for_falling(pos) for i = 1, length do place_pos = vector.add(place_pos, dir) local place_node = minetest.get_node(place_pos) @@ -113,7 +113,7 @@ local function make_off(mark) return function(pos, node) if node.name == "technic:constructor_mk"..mark.."_on" then technic.swap_node(pos,"technic:constructor_mk"..mark.."_off") - nodeupdate(pos) + minetest.check_for_falling(pos) end end end diff --git a/technic/machines/other/injector.lua b/technic/machines/other/injector.lua index b34dd79..4fe78b2 100644 --- a/technic/machines/other/injector.lua +++ b/technic/machines/other/injector.lua @@ -55,7 +55,7 @@ minetest.register_craft({ local function set_injector_formspec(meta) local is_stack = meta:get_string("mode") == "whole stacks" meta:set_string("formspec", - "invsize[8,9;]".. + "size[8,9;]".. "item_image[0,0;1,1;technic:injector]".. "label[1,0;"..S("Self-Contained Injector").."]".. (is_stack and diff --git a/technic/machines/power_monitor.lua b/technic/machines/power_monitor.lua index 4d722a2..7e8b850 100644 --- a/technic/machines/power_monitor.lua +++ b/technic/machines/power_monitor.lua @@ -55,7 +55,7 @@ minetest.register_abm({ local demand = sw_meta:get_int("demand") meta:set_string("infotext", S("Power Monitor. Supply: @1 Demand: @2", - technic.pretty_num(supply), technic.pretty_num(demand))) + technic.EU_string(supply), technic.EU_string(demand))) else meta:set_string("infotext",S("Power Monitor Has No Network")) end diff --git a/technic/machines/register/battery_box.lua b/technic/machines/register/battery_box.lua index 84e992c..7f25dfd 100644 --- a/technic/machines/register/battery_box.lua +++ b/technic/machines/register/battery_box.lua @@ -255,8 +255,9 @@ function technic.register_battery_box(data) local charge_percent = math.floor(current_charge / max_charge * 100) meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, charge_percent)) - local infotext = S("@1 Battery Box: @2/@3", tier, - technic.pretty_num(current_charge), technic.pretty_num(max_charge)) + local infotext = S("@1 Battery Box: @2 / @3", tier, + technic.EU_string(current_charge), + technic.EU_string(max_charge)) if eu_input == 0 then infotext = S("%s Idle"):format(infotext) end diff --git a/technic/machines/register/generator.lua b/technic/machines/register/generator.lua index 7805bf0..87ef6e7 100644 --- a/technic/machines/register/generator.lua +++ b/technic/machines/register/generator.lua @@ -35,7 +35,7 @@ function technic.register_generator(data) for k, v in pairs(groups) do active_groups[k] = v end local generator_formspec = - "invsize[8,9;]".. + "size[8,9;]".. "label[0,0;"..S("Fuel-Fired %s Generator"):format(tier).."]".. "list[current_name;src;3,1;1,1;]".. "image[4,1;1,1;default_furnace_fire_bg.png]".. diff --git a/technic/machines/register/machine_base.lua b/technic/machines/register/machine_base.lua index 0c6a6b3..14cf998 100644 --- a/technic/machines/register/machine_base.lua +++ b/technic/machines/register/machine_base.lua @@ -44,7 +44,7 @@ function technic.register_base_machine(data) for k, v in pairs(groups) do active_groups[k] = v end local formspec = - "invsize[8,9;]".. + "size[8,9;]".. "list[current_name;src;"..(4-input_size)..",1;"..input_size..",1;]".. "list[current_name;dst;5,1;2,2;]".. "list[current_player;main;0,5;8,4;]".. diff --git a/technic/machines/register/solar_array.lua b/technic/machines/register/solar_array.lua index 422bfcf..03f11d9 100644 --- a/technic/machines/register/solar_array.lua +++ b/technic/machines/register/solar_array.lua @@ -30,14 +30,15 @@ function technic.register_solar_array(data) local charge_to_give = math.floor((light + pos.y) * data.power) charge_to_give = math.max(charge_to_give, 0) charge_to_give = math.min(charge_to_give, data.power * 50) - meta:set_string("infotext", S("@1 Active (@2 EU)", machine_name, technic.pretty_num(charge_to_give))) + meta:set_string("infotext", S("@1 Active (@2)", machine_name, + technic.EU_string(charge_to_give))) meta:set_int(tier.."_EU_supply", charge_to_give) else meta:set_string("infotext", S("%s Idle"):format(machine_name)) meta:set_int(tier.."_EU_supply", 0) end end - + minetest.register_node("technic:solar_array_"..ltier, { tiles = {"technic_"..ltier.."_solar_array_top.png", "technic_"..ltier.."_solar_array_bottom.png", "technic_"..ltier.."_solar_array_side.png", "technic_"..ltier.."_solar_array_side.png", diff --git a/technic/machines/supply_converter.lua b/technic/machines/supply_converter.lua index 8527bcf..9202c4a 100644 --- a/technic/machines/supply_converter.lua +++ b/technic/machines/supply_converter.lua @@ -149,7 +149,9 @@ local run = function(pos, node, run_stage) meta:set_int(from.."_EU_supply", 0) meta:set_int(to.."_EU_demand", 0) meta:set_int(to.."_EU_supply", input * remain) - meta:set_string("infotext", S("@1 (@2 @3 -> @4 @5)", machine_name, technic.pretty_num(input), from, technic.pretty_num(input * remain), to)) + meta:set_string("infotext", S("@1 (@2 @3 -> @4 @5)", machine_name, + technic.EU_string(input), from, + technic.EU_string(input * remain), to)) else meta:set_string("infotext", S("%s Has Bad Cabling"):format(machine_name)) if to then diff --git a/technic/machines/switching_station.lua b/technic/machines/switching_station.lua index 21d394b..d645847 100644 --- a/technic/machines/switching_station.lua +++ b/technic/machines/switching_station.lua @@ -361,9 +361,9 @@ minetest.register_abm({ end --dprint("Total BA demand:"..BA_eu_demand) - meta:set_string("infotext", - S("@1. Supply: @2 Demand: @3", - machine_name, technic.pretty_num(PR_eu_supply), technic.pretty_num(RE_eu_demand))) + meta:set_string("infotext", S("@1. Supply: @2 Demand: @3", + machine_name, technic.EU_string(PR_eu_supply), + technic.EU_string(RE_eu_demand))) -- If mesecon signal and power supply or demand changed then -- send them via digilines. diff --git a/technic_chests/common.lua b/technic_chests/common.lua index 9a5bc7a..6369b7a 100644 --- a/technic_chests/common.lua +++ b/technic_chests/common.lua @@ -28,7 +28,9 @@ technic.chests.can_dig = function(pos, player) end local function inv_change(pos, count, player) - if not default.can_interact_with_node(player, pos) then + -- Skip check for pipeworks (fake player) + if minetest.is_player(player) and + not default.can_interact_with_node(player, pos) then return 0 end return count diff --git a/technic_chests/init.lua b/technic_chests/init.lua index 3565987..6b1a1b2 100644 --- a/technic_chests/init.lua +++ b/technic_chests/init.lua @@ -15,3 +15,11 @@ dofile(modpath.."/silver_chest.lua") dofile(modpath.."/gold_chest.lua") dofile(modpath.."/mithril_chest.lua") +minetest.register_lbm({ + name = "technic_chests:fix_wooden_chests", + nodenames = {"default:chest"}, + action = function(pos, node) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "") + end +}) diff --git a/technic_worldgen/oregen.lua b/technic_worldgen/oregen.lua index 8e7af91..16a3b8d 100644 --- a/technic_worldgen/oregen.lua +++ b/technic_worldgen/oregen.lua @@ -141,17 +141,20 @@ minetest.register_on_generated(function(minp, maxp, seed) for y = minp.y + math.floor(grid_size / 2), maxp.y, grid_size do for z = minp.z + math.floor(grid_size / 2), maxp.z, grid_size do local c = data[a:index(x, y, z)] - if (c == c_lava or c == c_lava_flowing) and sulfur_noise:get3d({x = x, y = z, z = z}) >= 0.4 then - for xx = math.max(minp.x, x - grid_size), math.min(maxp.x, x + grid_size) do - for yy = math.max(minp.y, y - grid_size), math.min(maxp.y, y + grid_size) do - for zz = math.max(minp.z, z - grid_size), math.min(maxp.z, z + grid_size) do - local i = a:index(xx, yy, zz) + if (c == c_lava or c == c_lava_flowing) + and sulfur_noise:get3d({x = x, y = z, z = z}) >= 0.4 then + for i in a:iter( + math.max(minp.x, x - grid_size), + math.max(minp.y, y - grid_size), + math.max(minp.z, z - grid_size), + math.min(maxp.x, x + grid_size), + math.min(maxp.y, y + grid_size), + math.min(maxp.z, z + grid_size) + ) do if data[i] == c_stone and pr:next(1, 10) <= 7 then data[i] = c_sulfur end end - end - end end end end diff --git a/unified_inventory/api.lua b/unified_inventory/api.lua index 2b63922..f6afec5 100644 --- a/unified_inventory/api.lua +++ b/unified_inventory/api.lua @@ -1,5 +1,5 @@ local S = unified_inventory.gettext -local F = unified_inventory.fgettext +local F = minetest.formspec_escape -- Create detached creative inventory after loading all mods minetest.after(0.01, function() @@ -233,7 +233,7 @@ end unified_inventory.register_craft_type("normal", { - description = F("Crafting"), + description = F(S("Crafting")), icon = "ui_craftgrid_icon.png", width = 3, height = 3, @@ -249,7 +249,7 @@ unified_inventory.register_craft_type("normal", { unified_inventory.register_craft_type("shapeless", { - description = F("Mixing"), + description = F(S("Mixing")), icon = "ui_craftgrid_icon.png", width = 3, height = 3, @@ -264,7 +264,7 @@ unified_inventory.register_craft_type("shapeless", { unified_inventory.register_craft_type("cooking", { - description = F("Cooking"), + description = F(S("Cooking")), icon = "default_furnace_front.png", width = 1, height = 1, @@ -272,7 +272,7 @@ unified_inventory.register_craft_type("cooking", { unified_inventory.register_craft_type("digging", { - description = F("Digging"), + description = F(S("Digging")), icon = "default_tool_steelpick.png", width = 1, height = 1, @@ -303,6 +303,6 @@ end function unified_inventory.is_creative(playername) return minetest.check_player_privs(playername, {creative=true}) - or minetest.setting_getbool("creative_mode") + or minetest.settings:get_bool("creative_mode") end diff --git a/unified_inventory/bags.lua b/unified_inventory/bags.lua index e93a317..a946cb0 100644 --- a/unified_inventory/bags.lua +++ b/unified_inventory/bags.lua @@ -4,22 +4,22 @@ -- License: GPLv3 local S = unified_inventory.gettext -local F = unified_inventory.fgettext +local F = minetest.formspec_escape unified_inventory.register_page("bags", { get_formspec = function(player) local player_name = player:get_player_name() local formspec = "background[0.06,0.99;7.92,7.52;ui_bags_main_form.png]" - formspec = formspec.."label[0,0;"..F("Bags").."]" - formspec = formspec.."button[0,2;2,0.5;bag1;"..F("Bag 1").."]" - formspec = formspec.."button[2,2;2,0.5;bag2;"..F("Bag 2").."]" - formspec = formspec.."button[4,2;2,0.5;bag3;"..F("Bag 3").."]" - formspec = formspec.."button[6,2;2,0.5;bag4;"..F("Bag 4").."]" + formspec = formspec.."label[0,0;"..F(S("Bags")).."]" + formspec = formspec.."button[0,2;2,0.5;bag1;"..F(S("Bag @1", 1)).."]" + formspec = formspec.."button[2,2;2,0.5;bag2;"..F(S("Bag @1", 2)).."]" + formspec = formspec.."button[4,2;2,0.5;bag3;"..F(S("Bag @1", 3)).."]" + formspec = formspec.."button[6,2;2,0.5;bag4;"..F(S("Bag @1", 4)).."]" formspec = formspec.."listcolors[#00000000;#00000000]" - formspec = formspec.."list[detached:"..minetest.formspec_escape(player_name).."_bags;bag1;0.5,1;1,1;]" - formspec = formspec.."list[detached:"..minetest.formspec_escape(player_name).."_bags;bag2;2.5,1;1,1;]" - formspec = formspec.."list[detached:"..minetest.formspec_escape(player_name).."_bags;bag3;4.5,1;1,1;]" - formspec = formspec.."list[detached:"..minetest.formspec_escape(player_name).."_bags;bag4;6.5,1;1,1;]" + formspec = formspec.."list[detached:"..F(player_name).."_bags;bag1;0.5,1;1,1;]" + formspec = formspec.."list[detached:"..F(player_name).."_bags;bag2;2.5,1;1,1;]" + formspec = formspec.."list[detached:"..F(player_name).."_bags;bag3;4.5,1;1,1;]" + formspec = formspec.."list[detached:"..F(player_name).."_bags;bag4;6.5,1;1,1;]" return {formspec=formspec} end, }) @@ -45,7 +45,7 @@ for i = 1, 4 do local stack = get_player_bag_stack(player, bi) local image = stack:get_definition().inventory_image local formspec = ("image[7,0;1,1;"..image.."]" - .."label[0,0;"..F("Bag @1", bi).."]" + .."label[0,0;"..F(S("Bag @1", bi)).."]" .."listcolors[#00000000;#00000000]" .."list[current_player;bag"..bi.."contents;0,1;8,3;]" .."listring[current_name;bag"..bi.."contents]" @@ -78,7 +78,7 @@ for i = 1, 4 do end end local img = def.inventory_image - local label = F("Bag @1", i).."\n"..used.."/"..size + local label = F(S("Bag @1", i)).."\n"..used.."/"..size button = "image_button["..(i+1)..",0;1,1;"..img..";bag"..i..";"..label.."]" else button = "" diff --git a/unified_inventory/init.lua b/unified_inventory/init.lua index 6929600..1c73fad 100644 --- a/unified_inventory/init.lua +++ b/unified_inventory/init.lua @@ -1,16 +1,10 @@ --- Unified Inventory for Minetest 0.4.8+ +-- Unified Inventory for Minetest >= 0.4.16 local modpath = minetest.get_modpath(minetest.get_current_modname()) local worldpath = minetest.get_worldpath() -local mygettext -if rawget(_G, "intllib") then - mygettext = intllib.Getter() -else - function mygettext(s, ...) - local t = { ... } - return (s:gsub("@(%d+)", function(n) return t[tonumber(n)] end)) - end -end + +-- Intllib +local S, NS = dofile(modpath .. "/intllib.lua") -- Data tables definitions unified_inventory = { @@ -40,14 +34,13 @@ unified_inventory = { default = "craft", -- intllib - gettext = mygettext, - fgettext = function(...) return minetest.formspec_escape(mygettext(...)) end, + gettext = S, -- "Lite" mode - lite_mode = minetest.setting_getbool("unified_inventory_lite"), - + lite_mode = minetest.settings:get_bool("unified_inventory_lite"), + -- Trash enabled - trash_enabled = (minetest.setting_getbool("unified_inventory_trash") ~= false), + trash_enabled = (minetest.settings:get_bool("unified_inventory_trash") ~= false), pagecols = 8, pagerows = 10, @@ -80,7 +73,7 @@ dofile(modpath.."/internal.lua") dofile(modpath.."/callbacks.lua") dofile(modpath.."/register.lua") -if minetest.setting_getbool("unified_inventory_bags") ~= false then +if minetest.settings:get_bool("unified_inventory_bags") ~= false then dofile(modpath.."/bags.lua") end diff --git a/unified_inventory/internal.lua b/unified_inventory/internal.lua index 4e78a89..06967d2 100644 --- a/unified_inventory/internal.lua +++ b/unified_inventory/internal.lua @@ -1,5 +1,5 @@ local S = unified_inventory.gettext -local F = unified_inventory.fgettext +local F = minetest.formspec_escape -- This pair of encoding functions is used where variable text must go in -- button names, where the text might contain formspec metacharacters. @@ -94,7 +94,7 @@ function unified_inventory.get_formspec(player, page) local filtered_inv_buttons = {} for i, def in pairs(unified_inventory.buttons) do - if not (draw_lite_mode and def.hide_lite) then + if not (draw_lite_mode and def.hide_lite) then table.insert(filtered_inv_buttons, def) end end @@ -111,16 +111,16 @@ function unified_inventory.get_formspec(player, page) formspec[n] = "image_button[" formspec[n+1] = ( ui_peruser.main_button_x + 0.65 * (i - 1) - button_col * 0.65 * 4) formspec[n+2] = ","..(ui_peruser.main_button_y + button_row * 0.7)..";0.8,0.8;" - formspec[n+3] = minetest.formspec_escape(def.image)..";" - formspec[n+4] = minetest.formspec_escape(def.name)..";]" - formspec[n+5] = "tooltip["..minetest.formspec_escape(def.name) + formspec[n+3] = F(def.image)..";" + formspec[n+4] = F(def.name)..";]" + formspec[n+5] = "tooltip["..F(def.name) formspec[n+6] = ";"..(def.tooltip or "").."]" n = n+7 else formspec[n] = "image[" formspec[n+1] = ( ui_peruser.main_button_x + 0.65 * (i - 1) - button_col * 0.65 * 4) formspec[n+2] = ","..(ui_peruser.main_button_y + button_row * 0.7)..";0.8,0.8;" - formspec[n+3] = minetest.formspec_escape(def.image).."^[colorize:#808080:alpha]" + formspec[n+3] = F(def.image).."^[colorize:#808080:alpha]" n = n+4 end @@ -145,39 +145,39 @@ function unified_inventory.get_formspec(player, page) formspec[n] = "image_button[" .. (start_x + 0.6 * 0) .. ",9;.8,.8;ui_skip_backward_icon.png;start_list;]" - .. "tooltip[start_list;" .. F("First page") .. "]" + .. "tooltip[start_list;" .. F(S("First page")) .. "]" .. "image_button[" .. (start_x + 0.6 * 1) .. ",9;.8,.8;ui_doubleleft_icon.png;rewind3;]" - .. "tooltip[rewind3;" .. F("Back three pages") .. "]" + .. "tooltip[rewind3;" .. F(S("Back three pages")) .. "]" .. "image_button[" .. (start_x + 0.6 * 2) .. ",9;.8,.8;ui_left_icon.png;rewind1;]" - .. "tooltip[rewind1;" .. F("Back one page") .. "]" + .. "tooltip[rewind1;" .. F(S("Back one page")) .. "]" .. "image_button[" .. (start_x + 0.6 * 3) .. ",9;.8,.8;ui_right_icon.png;forward1;]" - .. "tooltip[forward1;" .. F("Forward one page") .. "]" + .. "tooltip[forward1;" .. F(S("Forward one page")) .. "]" .. "image_button[" .. (start_x + 0.6 * 4) .. ",9;.8,.8;ui_doubleright_icon.png;forward3;]" - .. "tooltip[forward3;" .. F("Forward three pages") .. "]" + .. "tooltip[forward3;" .. F(S("Forward three pages")) .. "]" .. "image_button[" .. (start_x + 0.6 * 5) .. ",9;.8,.8;ui_skip_forward_icon.png;end_list;]" - .. "tooltip[end_list;" .. F("Last page") .. "]" + .. "tooltip[end_list;" .. F(S("Last page")) .. "]" else formspec[n] = "image_button[" .. (8.2 + 0.65 * 0) .. ",5.8;.8,.8;ui_skip_backward_icon.png;start_list;]" - .. "tooltip[start_list;" .. F("First page") .. "]" + .. "tooltip[start_list;" .. F(S("First page")) .. "]" .. "image_button[" .. (8.2 + 0.65 * 1) .. ",5.8;.8,.8;ui_left_icon.png;rewind1;]" - .. "tooltip[rewind1;" .. F("Back one page") .. "]" + .. "tooltip[rewind1;" .. F(S("Back one page")) .. "]" .. "image_button[" .. (8.2 + 0.65 * 2) .. ",5.8;.8,.8;ui_right_icon.png;forward1;]" - .. "tooltip[forward1;" .. F("Forward one page") .. "]" + .. "tooltip[forward1;" .. F(S("Forward one page")) .. "]" .. "image_button[" .. (8.2 + 0.65 * 3) .. ",5.8;.8,.8;ui_skip_forward_icon.png;end_list;]" - .. "tooltip[end_list;" .. F("Last page") .. "]" + .. "tooltip[end_list;" .. F(S("Last page")) .. "]" end n = n+1 @@ -187,26 +187,26 @@ function unified_inventory.get_formspec(player, page) if not draw_lite_mode then formspec[n] = "field[9.5,8.325;3,1;searchbox;;" - .. minetest.formspec_escape(unified_inventory.current_searchbox[player_name]) .. "]" + .. F(unified_inventory.current_searchbox[player_name]) .. "]" formspec[n+1] = "image_button[12.2,8.1;.8,.8;ui_search_icon.png;searchbutton;]" - .. "tooltip[searchbutton;" ..F("Search") .. "]" + .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" formspec[n+2] = "image_button[12.9,8.1;.8,.8;ui_reset_icon.png;searchresetbutton;]" - .. "tooltip[searchbutton;" ..F("Search") .. "]" - .. "tooltip[searchresetbutton;" ..F("Reset search and display everything") .. "]" + .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" + .. "tooltip[searchresetbutton;" ..F(S("Reset search and display everything")) .. "]" else formspec[n] = "field[8.5,5.225;2.2,1;searchbox;;" - .. minetest.formspec_escape(unified_inventory.current_searchbox[player_name]) .. "]" + .. F(unified_inventory.current_searchbox[player_name]) .. "]" formspec[n+1] = "image_button[10.3,5;.8,.8;ui_search_icon.png;searchbutton;]" - .. "tooltip[searchbutton;" ..F("Search") .. "]" + .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" formspec[n+2] = "image_button[11,5;.8,.8;ui_reset_icon.png;searchresetbutton;]" - .. "tooltip[searchbutton;" ..F("Search") .. "]" - .. "tooltip[searchresetbutton;" ..F("Reset search and display everything") .. "]" + .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" + .. "tooltip[searchresetbutton;" ..F(S("Reset search and display everything")) .. "]" end n = n+3 - local no_matches = "No matching items" + local no_matches = S("No matching items") if draw_lite_mode then - no_matches = "No matches." + no_matches = S("No matches.") end -- Items list @@ -246,14 +246,14 @@ function unified_inventory.get_formspec(player, page) end end end - formspec[n] = "label[8.2,"..ui_peruser.form_header_y..";"..F("Page") .. ": " + formspec[n] = "label[8.2,"..ui_peruser.form_header_y..";"..F(S("Page")) .. ": " .. S("%s of %s"):format(page,pagemax).."]" end n= n+1 if unified_inventory.activefilter[player_name] ~= "" then - formspec[n] = "label[8.2,"..(ui_peruser.form_header_y + 0.4)..";" .. F("Filter") .. ":]" - formspec[n+1] = "label[9.1,"..(ui_peruser.form_header_y + 0.4)..";"..minetest.formspec_escape(unified_inventory.activefilter[player_name]).."]" + formspec[n] = "label[8.2,"..(ui_peruser.form_header_y + 0.4)..";" .. F(S("Filter")) .. ":]" + formspec[n+1] = "label[9.1,"..(ui_peruser.form_header_y + 0.4)..";"..F(unified_inventory.activefilter[player_name]).."]" end return table.concat(formspec, "") end diff --git a/unified_inventory/intllib.lua b/unified_inventory/intllib.lua new file mode 100644 index 0000000..6669d72 --- /dev/null +++ b/unified_inventory/intllib.lua @@ -0,0 +1,45 @@ + +-- Fallback functions for when `intllib` is not installed. +-- Code released under Unlicense . + +-- 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 diff --git a/unified_inventory/locale/de.po b/unified_inventory/locale/de.po new file mode 100644 index 0000000..1231f1a --- /dev/null +++ b/unified_inventory/locale/de.po @@ -0,0 +1,366 @@ +# German translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# Xanthin +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 13:41+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \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" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Fertigung" + +#: api.lua +msgid "Mixing" +msgstr "Mischen" + +#: api.lua +msgid "Cooking" +msgstr "Kochen" + +#: api.lua +msgid "Digging" +msgstr "Graben" + +#: bags.lua +msgid "Bags" +msgstr "Taschen" + +#: bags.lua +msgid "Bag @1" +msgstr "Tasche @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Kleine Tasche" + +#: bags.lua +msgid "Medium Bag" +msgstr "Mittelgroße Tasche" + +#: bags.lua +msgid "Large Bag" +msgstr "Große Tasche" + +#: group.lua +msgid " and " +msgstr " und " + +#: internal.lua +msgid "First page" +msgstr "Erste Seite" + +#: internal.lua +msgid "Back three pages" +msgstr "3 Seiten zurückblättern" + +#: internal.lua +msgid "Back one page" +msgstr "1 Seite zurückblättern" + +#: internal.lua +msgid "Forward one page" +msgstr "1 Seite vorblättern" + +#: internal.lua +msgid "Forward three pages" +msgstr "3 Seiten vorblättern" + +#: internal.lua +msgid "Last page" +msgstr "Letzte Seite" + +#: internal.lua +msgid "Search" +msgstr "Suchen" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "Suche zurücksetzen und alles anzeigen" + +#: internal.lua +msgid "No matching items" +msgstr "Keine passenden Gegenstände" + +#: internal.lua +msgid "No matches." +msgstr "Keine Treffer" + +#: internal.lua +msgid "Page" +msgstr "Seite" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s von %s" + +#: internal.lua +msgid "Filter" +msgstr "Filter" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Kann das Kreativinventar nutzen" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "Fertigungsraster" + +#: register.lua +msgid "Crafting Guide" +msgstr "Fertigungsführer" + +#: register.lua +msgid "Set home position" +msgstr "Heimatposition setzen" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Heimatposition nach: %s gesetzt" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "Du hast das \"home\"-Privileg nicht!" + +#: register.lua +msgid "Go home" +msgstr "Nach Hause gehen" + +#: register.lua +msgid "Set time to day" +msgstr "Zur Tageszeit wechseln" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Tageszeit auf 6 Uhr gesetzt" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "Du hast das \"settime\"-Privileg nicht!" + +#: register.lua +msgid "Set time to night" +msgstr "Zur Nachtzeit wechseln" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Tageszeit auf 21 Uhr gesetzt" + +#: register.lua +msgid "Clear inventory" +msgstr "Inventar leeren" + +#: register.lua +#, fuzzy +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Diese Funktion ist außerhalb des Kreativmodus deaktiviert, um ein " +"versehentliches Löschen des ganzen Inventars zu verhindern.\n" +"Nutze stattdessen das Müllfeld." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Inventar geleert!" + +#: register.lua +msgid "Trash:" +msgstr "Müll:" + +#: register.lua +msgid "Refill:" +msgstr "Nachfüllen:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "Irgendein Gegenstand, der zur Gruppe %s gehört" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "Irgendein Gegenstand, der zu den Gruppen %s gehört" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Rezept %d von %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Verwendung %d von %d" + +#: register.lua +msgid "No recipes" +msgstr "Keine Rezepte" + +#: register.lua +msgid "No usages" +msgstr "Keine Verwendungen" + +#: register.lua +msgid "Result" +msgstr "Ergebnis" + +#: register.lua +msgid "Ingredient" +msgstr "Zutat" + +#: register.lua +msgid "Show next recipe" +msgstr "Nächstes Rezept zeigen" + +#: register.lua +msgid "Show next usage" +msgstr "Nächste Verwendung zeigen" + +#: register.lua +msgid "Show previous recipe" +msgstr "Vorheriges Rezept zeigen" + +#: register.lua +msgid "Show previous usage" +msgstr "Vorherige Verwendung zeigen" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "Gib mir:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" +"Dieses Rezept ist zu\n" +"groß, um angezeigt\n" +"zu werden." + +#: register.lua +msgid "To craft grid:" +msgstr "Ins Fertigungsraster:" + +#: register.lua +msgid "All" +msgstr "Alles" + +#: waypoints.lua +msgid "White" +msgstr "Weiß" + +#: waypoints.lua +msgid "Yellow" +msgstr "Gelb" + +#: waypoints.lua +msgid "Red" +msgstr "Rot" + +#: waypoints.lua +msgid "Green" +msgstr "Grün" + +#: waypoints.lua +msgid "Blue" +msgstr "Blau" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Wegpunkte" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Wegpunkt Nr. %d auswählen" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Wegpunkt Nr. %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Setze Wegpunkt zur derzeitigen Position" + +#: waypoints.lua +msgid "invisible" +msgstr "unsichtbar" + +#: waypoints.lua +msgid "visible" +msgstr "sichtbar" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Wegpunkt @1 machen" + +#: waypoints.lua +msgid "Disable" +msgstr "ausschalten" + +#: waypoints.lua +msgid "Enable" +msgstr "einschalten" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "Anzeige der Wegpunktkoordinaten @1" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Farbe der Darstellung der Wegpunkte ändern" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Name des Wegpunkts ändern" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Wegpunkt aktiv" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Wegpunkt inaktiv" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Bearbeitung abschließen" + +#: waypoints.lua +msgid "World position" +msgstr "Weltposition" + +#: waypoints.lua +msgid "Name" +msgstr "Name" + +#: waypoints.lua +msgid "HUD text color" +msgstr "HUD-Textfarbe" diff --git a/unified_inventory/locale/de.txt b/unified_inventory/locale/de.txt deleted file mode 100644 index ad8009d..0000000 --- a/unified_inventory/locale/de.txt +++ /dev/null @@ -1,98 +0,0 @@ -# Translation mostly by Xanthin - -### api.lua ### -Digging (by chance) = Graben (durch Zufall) - -### bags.lua ### -Bags = Taschen -Bag @1 = Tasche @1 -Small Bag = Kleine Tasche -Medium Bag = Mittelgroße Tasche -Large Bag = Große Tasche - -### inernal.lua ### -First page = Erste Seite -Back three pages = Drei Seiten zurueckblättern -Back one page = Eine Seite zurueckblättern -Forward one page = Eine Seite vorblättern -Forward three pages = Drei Seiten vorblättern -Last page = Letzte Seite -No matching items = Keine passenden Gegenstände -Page = Seite -%s of %s = %s von %s -Filter = Filter -Search = Suchen -Reset search and display everything = Suche zurücksetzen und alles anzeigen - -### register.lua ### -Can use the creative inventory = Kann das Kreativinventar nutzen -Home position set to: %s = Heimatposition nach: %s gesetzt -Time of day set to 6am = Tageszeit auf 6 Uhr geändert -You don't have the settime privilege! = Du hast nicht das „settime“-Privileg! -Time of day set to 9pm = Tageszeit auf 21 Uhr geändert -This button has been disabled outside of creative mode to prevent accidental inventory trashing. Use the trash slot instead. = Diese Funktion ist außerhalb des Kreativmodus deaktiviert, um ein versehentliches Löschen des ganzen Inventars zu verhindern.\nNutze stattdessen das Müllfeld. -Inventory cleared! = Inventar geleert! -Crafting = Fertigung -Digging = Graben -Cooking = Kochen -Mixing = Mischen -Trash: = Müll: -Refill: = Nachfüllen: -Crafting Guide = Fertigungsführer -Method: = Methode: -Result: %s = Ergebnis: %s -crafting = Bauen -shapeless crafting = Formlose Fertigung -cooking = Kochen -alloy cooking = Legierung Kochen -Copy to craft grid: = Ins Fertigungsraster kopieren: -All = Alles -Alternate = Alternative -Crafting Grid = Fertigungsraster -Show next recipe = Nächstes Rezept zeigen -Show next usage = Nächste Verwendung zeigen -Show previous recipe = Vorheriges Rezept zeigen -Show previous usage = Vorherige Verwendung zeigen -This recipe is too\nlarge to be displayed. = Dieses Rezept ist zu\ngroß, um angezeigt\nzu werden. -Any item belonging to the %s group = Irgendein Gegenstand, der zur Gruppe %s gehört -Any item belonging to the groups %s = Irgendein Gegenstand, der zu den Gruppen %s gehört -Recipe %d of %d = Rezept %d von %d -Usage %d of %d = Verwendung %d von %d -No recipes = Keine Rezepte -No usages = Keine Verwendungen -Result = Ergebnis -Ingredient = Zutat -Set time to day = Zur Tageszeit wechseln -Set time to night = Zur Nachtzeit wechseln -Set home position = Heimatposition setzen -Go home = Nach Hause gehen -Clear inventory = Inventar leeren -Give me: = Gib mir: -To craft grid: = Ins Fertigungsraster: - -### group.lua ### -\sand\s=\sund\s - -### waypoints.lua ### -White = Weiß -Yellow = Gelb -Red = Rot -Green = Grün -Blue = Blau -Waypoints = Wegpunkte -Waypoint %d = Wegpunkt Nr. %d -Waypoint active = Wegpunkt aktiv -Waypoint inactive = Wegpunkt inaktiv -World position = Weltposition -Name = Name -HUD text color = HUD-Textfarbe -Edit waypoint name = Name des Wegpunkts ändern -Rename waypoint = Wegpunkt umbenennen -Change color of waypoint display = Farbe der Darstellung der Wegpunkte ändern -Set waypoint to current location = Setze Wegpunkt zur derzeitigen Position -Make waypoint visible = Wegpunkt sichtbar machen -Make waypoint invisible = Wegpunkt verstecken -Disable display of waypoint coordinates = Anzeige der Wegpunktkoordinaten deaktivieren -Enable display of waypoint coordinates = Anzeige der Wegpunktkoordinaten aktivieren -Finish editing = Bearbeitung abschließen -Select Waypoint #%d = Wegpunkt Nr. %d auswählen diff --git a/unified_inventory/locale/es.po b/unified_inventory/locale/es.po new file mode 100644 index 0000000..a49a76d --- /dev/null +++ b/unified_inventory/locale/es.po @@ -0,0 +1,366 @@ +# Spanish translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# Diego Martínez +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 16:15+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Elaboración" + +#: api.lua +msgid "Mixing" +msgstr "" + +#: api.lua +#, fuzzy +msgid "Cooking" +msgstr "hornear" + +#: api.lua +msgid "Digging" +msgstr "" + +#: bags.lua +msgid "Bags" +msgstr "Bolsas" + +#: bags.lua +msgid "Bag @1" +msgstr "Bolsa @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Bolsa Pequeña" + +#: bags.lua +msgid "Medium Bag" +msgstr "Bolsa Mediana" + +#: bags.lua +msgid "Large Bag" +msgstr "Bolsa Grande" + +#: group.lua +msgid " and " +msgstr "" + +#: internal.lua +msgid "First page" +msgstr "" + +#: internal.lua +msgid "Back three pages" +msgstr "" + +#: internal.lua +msgid "Back one page" +msgstr "" + +#: internal.lua +msgid "Forward one page" +msgstr "" + +#: internal.lua +msgid "Forward three pages" +msgstr "" + +#: internal.lua +msgid "Last page" +msgstr "" + +#: internal.lua +msgid "Search" +msgstr "" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "" + +#: internal.lua +msgid "No matching items" +msgstr "" + +#: internal.lua +msgid "No matches." +msgstr "" + +#: internal.lua +msgid "Page" +msgstr "Página" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s de %s" + +#: internal.lua +msgid "Filter" +msgstr "Filtro" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Puede usar el inventario creativo" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "" + +#: register.lua +msgid "Crafting Guide" +msgstr "Guía de Elaboración" + +#: register.lua +#, fuzzy +msgid "Set home position" +msgstr "Posición en el mundo" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Posición de hogar cambiada a: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "¡No tienes el privilegio \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "" + +#: register.lua +msgid "Set time to day" +msgstr "" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Hora del día cambiada a 6AM" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "¡No tienes el privilegio \"settime\"!" + +#: register.lua +msgid "Set time to night" +msgstr "" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Hora del día cambiada a 9PM" + +#: register.lua +msgid "Clear inventory" +msgstr "" + +#: register.lua +#, fuzzy +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Éste botón ha sido deshabilitado para prevenir la destrucción accidental del " +"inventario.\n" +"Usa la ranura para basura en su lugar." + +#: register.lua +msgid "Inventory cleared!" +msgstr "¡Inventario limpio!" + +#: register.lua +msgid "Trash:" +msgstr "Basura:" + +#: register.lua +msgid "Refill:" +msgstr "Rellenar:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Receta %d de %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "" + +#: register.lua +msgid "No recipes" +msgstr "" + +#: register.lua +msgid "No usages" +msgstr "" + +#: register.lua +msgid "Result" +msgstr "Resultado" + +#: register.lua +msgid "Ingredient" +msgstr "" + +#: register.lua +msgid "Show next recipe" +msgstr "" + +#: register.lua +msgid "Show next usage" +msgstr "" + +#: register.lua +msgid "Show previous recipe" +msgstr "" + +#: register.lua +msgid "Show previous usage" +msgstr "" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" + +#: register.lua +#, fuzzy +msgid "To craft grid:" +msgstr "Copiar al cuadro de elaboración" + +#: register.lua +msgid "All" +msgstr "Todos" + +#: waypoints.lua +msgid "White" +msgstr "Blanco" + +#: waypoints.lua +msgid "Yellow" +msgstr "Amarillo" + +#: waypoints.lua +msgid "Red" +msgstr "Rojo" + +#: waypoints.lua +msgid "Green" +msgstr "Verde" + +#: waypoints.lua +msgid "Blue" +msgstr "Azul" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Puntos de paso" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Puntos de paso %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "" + +#: waypoints.lua +msgid "invisible" +msgstr "" + +#: waypoints.lua +msgid "visible" +msgstr "" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Punto de paso activo" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Punto de paso inactivo" + +#: waypoints.lua +msgid "Finish editing" +msgstr "" + +#: waypoints.lua +msgid "World position" +msgstr "Posición en el mundo" + +#: waypoints.lua +msgid "Name" +msgstr "Nombre" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Color del HUD" diff --git a/unified_inventory/locale/es.txt b/unified_inventory/locale/es.txt deleted file mode 100644 index d8c0dd6..0000000 --- a/unified_inventory/locale/es.txt +++ /dev/null @@ -1,72 +0,0 @@ -# Translation by Diego Martínez - -### api.lua ### -Digging (by chance) = Excavado (por azar) - -# Template -### bags.lua ### -Bags = Bolsas -Bag @1 = Bolsa @1 -Small Bag = Bolsa Pequeña -Medium Bag = Bolsa Mediana -Large Bag = Bolsa Grande - -### inernal.lua ### -First page = -Back three pages = -Back one page = -Forward one page = -Forward three pages = -Last page = -No matching items = -Page = Página -%s of %s = %s de %s -Filter = Filtro -Search = - -### register.lua ### -Can use the creative inventory = Puede usar el inventario creativo -Home position set to: %s = Posición de hogar cambiada a: %s -Time of day set to 6am = Hora del día cambiada a 6AM -You don't have the settime priviledge! = ¡No tienes el privilegio `settime'! -Time of day set to 9pm = Hora del día cambiada a 9PM -This button has been disabled outside of creative mode to prevent accidental inventory trashing. Use the trash slot instead. = Éste botón ha sido deshabilitado para prevenir la destrucción accidental del inventario.\nUsa la ranura para basura en su lugar. -Inventory cleared! = ¡Inventario limpio! -Crafting = Elaboración -Trash: = Basura: -Refill: = Rellenar: -Crafting Guide = Guía de Elaboración -Method: = Método: -Result: %s = Resultado: %s -crafting = elaboración -shapeless crafting = elaboración sin forma -cooking = hornear -alloy cooking = horneado de aleación -Copy to craft grid: = Copiar al cuadro de elaboración -All = Todos -Recipe %s of %s = Receta %s de %s -Alternate = Alternar -Crafting Grid = - -### waypoints.lua ### -White = Blanco -Yellow = Amarillo -Red = Rojo -Green = Verde -Blue = Azul -Waypoints = Puntos de paso -Waypoint active = Punto de paso activo -Waypoint inactive = Punto de paso inactivo -World position = Posición en el mundo -Name = Nombre -HUD text color = Color del HUD -Edit waypoint name = -Rename waypoint = -Change color of waypoint display = -Set waypoint to current location = -Make waypoint visible = -Make waypoint invisible = -Disable display of waypoint coordinates = -Enable display of waypoint coordinates = -Finish editing = -Select Waypoint #%d = diff --git a/unified_inventory/locale/fr.po b/unified_inventory/locale/fr.po new file mode 100644 index 0000000..f6af706 --- /dev/null +++ b/unified_inventory/locale/fr.po @@ -0,0 +1,364 @@ +# French translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# kilbith +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 16:15+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Création" + +#: api.lua +msgid "Mixing" +msgstr "" + +#: api.lua +msgid "Cooking" +msgstr "Cuisson" + +#: api.lua +msgid "Digging" +msgstr "Creuser" + +#: bags.lua +msgid "Bags" +msgstr "Sacs" + +#: bags.lua +msgid "Bag @1" +msgstr "Sac @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Petit sac" + +#: bags.lua +msgid "Medium Bag" +msgstr "Sac moyen" + +#: bags.lua +msgid "Large Bag" +msgstr "Grand sac" + +#: group.lua +msgid " and " +msgstr " et " + +#: internal.lua +msgid "First page" +msgstr "1ère page" + +#: internal.lua +msgid "Back three pages" +msgstr "3 pages en arrière" + +#: internal.lua +msgid "Back one page" +msgstr "Page précédente" + +#: internal.lua +msgid "Forward one page" +msgstr "Page suivante" + +#: internal.lua +msgid "Forward three pages" +msgstr "3 pages en avant" + +#: internal.lua +msgid "Last page" +msgstr "Dernière page" + +#: internal.lua +msgid "Search" +msgstr "Rechercher" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "" + +#: internal.lua +msgid "No matching items" +msgstr "Aucun élément correspondant" + +#: internal.lua +msgid "No matches." +msgstr "Aucun match" + +#: internal.lua +msgid "Page" +msgstr "Page" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s de %s" + +#: internal.lua +msgid "Filter" +msgstr "Filtre" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Vous pouvez utiliser l'inventaire créatif" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "Grille de création" + +#: register.lua +msgid "Crafting Guide" +msgstr "Guide de création" + +#: register.lua +#, fuzzy +msgid "Set home position" +msgstr "Position dans le monde" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Position de votre base fixée à: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "Vous n'avez pas le privilège \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "" + +#: register.lua +msgid "Set time to day" +msgstr "" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Heure fixée à 6h" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "Vous n'avez pas le privilège \"settime\"!" + +#: register.lua +msgid "Set time to night" +msgstr "" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Heure fixée à 21h" + +#: register.lua +msgid "Clear inventory" +msgstr "" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Ce bouton a été désactivé en dehors du mode créatif pour éviter des saccages " +"dans l'inventaire.\n" +"Utilisez plutôt la case poubelle." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Inventaire vidé !" + +#: register.lua +msgid "Trash:" +msgstr "Poubelle :" + +#: register.lua +msgid "Refill:" +msgstr "Remplir :" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Recette %d de %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "" + +#: register.lua +msgid "No recipes" +msgstr "" + +#: register.lua +msgid "No usages" +msgstr "" + +#: register.lua +msgid "Result" +msgstr "Résultat" + +#: register.lua +msgid "Ingredient" +msgstr "" + +#: register.lua +msgid "Show next recipe" +msgstr "" + +#: register.lua +msgid "Show next usage" +msgstr "" + +#: register.lua +msgid "Show previous recipe" +msgstr "" + +#: register.lua +msgid "Show previous usage" +msgstr "" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" + +#: register.lua +msgid "To craft grid:" +msgstr "Sur de création:" + +#: register.lua +msgid "All" +msgstr "Tout" + +#: waypoints.lua +msgid "White" +msgstr "Blanc" + +#: waypoints.lua +msgid "Yellow" +msgstr "Jaune" + +#: waypoints.lua +msgid "Red" +msgstr "Rouge" + +#: waypoints.lua +msgid "Green" +msgstr "Vert" + +#: waypoints.lua +msgid "Blue" +msgstr "Bleu" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Point de passage" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Choisir un point de passage #%d" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Point de passage %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Marquer un point de passage à la position actuelle" + +#: waypoints.lua +msgid "invisible" +msgstr "" + +#: waypoints.lua +msgid "visible" +msgstr "" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Rendre @1 le point de passage" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +#, fuzzy +msgid "@1 display of waypoint coordinates" +msgstr "@1 montrer les coordonnées des points de passages" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Changer la couleur du point de passage" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Editer le nom du point de passage" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Point de passage actif" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Point de passage inactif" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Terminer l'édition" + +#: waypoints.lua +msgid "World position" +msgstr "Position dans le monde" + +#: waypoints.lua +msgid "Name" +msgstr "Nom" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Couleur de texte du HUD" diff --git a/unified_inventory/locale/fr.txt b/unified_inventory/locale/fr.txt deleted file mode 100644 index 43c52f0..0000000 --- a/unified_inventory/locale/fr.txt +++ /dev/null @@ -1,69 +0,0 @@ -# Translation by kilbith - -# Template -### bags.lua ### -Bags = Sacs -Bag @1 = Sac @1 -Small Bag = Petit sac -Medium Bag = Sac moyen -Large Bag = Grand sac - -### inernal.lua ### -First page = 1ère page -Back three pages = 3 pages en arrière -Back one page = Page précédente -Forward one page = Page suivante -Forward three pages = 3 pages en avant -Last page = Dernière page -No matching items = Aucun élément correspondant -Page = Page -%s of %s = %s de %s -Filter = Filtre -Search = Rechercher - -### register.lua ### -Can use the creative inventory = Vous pouvez utiliser l'inventaire créatif -Home position set to: %s = Position de votre base fixée à : %s -Time of day set to 6am = Heure fixée à 6h -You don't have the settime priviledge! = Vous n'avez pas le privilège 'settime' ! -Time of day set to 9pm = Heure fixée à 21h -This button has been disabled outside of creative mode to prevent accidental inventory trashing.\nUse the trash slot instead. = Ce bouton a été désactivé en dehors du mode créatif pour éviter des saccages dans l'inventaire.\nUtilisez plutôt la case poubelle. -Inventory cleared! = Inventaire vidé ! -Crafting = Création -Trash: = Poubelle : -Refill: = Remplir : -Crafting Guide = Guide de création -Method: = Méthode : -Result: %s = Résultat : %s -crafting = fabrication -shapeless crafting = fabrication sans forme -cooking = cuisson -alloy cooking = cuisson des métaux -Copy to craft grid: = Copier sur la grille de création -All = Tout -Recipe %s of %s = Recette %s de %d -Alternate = Alternative -Crafting Grid = Grille de création - -### waypoints.lua ### -White = Blanc -Yellow = Jaune -Red = Rouge -Green = Vert -Blue = Bleu -Waypoints = Point de passage -Waypoint active = Point de passage actif -Waypoint inactive = Point de passage inactif -World position = Position dans le monde -Name = Nom -HUD text color = Couleur de texte du HUD -Edit waypoint name = Editer le nom du point de passage -Rename waypoint = Renommer le point de passage -Change color of waypoint display = Changer la couleur du point de passage -Set waypoint to current location = Marquer un point de passage à la position actuelle -Make waypoint visible = Rendre visible le point de passage -Make waypoint invisible = Rendre invisible le point de passage -Disable display of waypoint coordinates = Masquer les coordonnées des points de passages -Enable display of waypoint coordinates = Montrer les coordonnées des points de passages -Finish editing = Terminer l'édition -Select Waypoint #%d = Choisir un point de passage #%d diff --git a/unified_inventory/locale/ms.po b/unified_inventory/locale/ms.po new file mode 100644 index 0000000..518fcb3 --- /dev/null +++ b/unified_inventory/locale/ms.po @@ -0,0 +1,369 @@ +# Malay translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# muhdnurhidayat , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 03:34+0200\n" +"PO-Revision-Date: 2018-07-17 20:14+0800\n" +"Language-Team: muhdnurhidayat \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.9\n" +"Last-Translator: muhdnurhidayat \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ms\n" +"X-Poedit-Flags-xgettext: --add-comments\n" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Pertukangan" + +#: api.lua +msgid "Mixing" +msgstr "Pencampuran" + +#: api.lua +msgid "Cooking" +msgstr "Pemasakan" + +#: api.lua +msgid "Digging" +msgstr "Penggalian" + +#: bags.lua +msgid "Bags" +msgstr "Beg" + +#: bags.lua +msgid "Bag @1" +msgstr "Beg @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Beg Kecil" + +#: bags.lua +msgid "Medium Bag" +msgstr "Beg Sederhana" + +#: bags.lua +msgid "Large Bag" +msgstr "Beg Besar" + +#: group.lua +msgid " and " +msgstr " dan " + +#: internal.lua +msgid "First page" +msgstr "Halaman pertama" + +#: internal.lua +msgid "Back three pages" +msgstr "Tiga halaman sebelumnya" + +#: internal.lua +msgid "Back one page" +msgstr "Halaman sebelumnya" + +#: internal.lua +msgid "Forward one page" +msgstr "Halaman seterusnya" + +#: internal.lua +msgid "Forward three pages" +msgstr "Tiga halaman seterusnya" + +#: internal.lua +msgid "Last page" +msgstr "Halaman terakhir" + +#: internal.lua +msgid "Search" +msgstr "Cari" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "Set semula carian dan tunjukkan semua benda" + +#: internal.lua +msgid "No matching items" +msgstr "Tiada item sepadan" + +#: internal.lua +msgid "No matches." +msgstr "Tiada padanan." + +#: internal.lua +msgid "Page" +msgstr "Halaman" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s drpd %s" + +#: internal.lua +msgid "Filter" +msgstr "Tapis" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Boleh guna inventori kreatif" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" +"Memaksa Unified Inventory untuk dipaparkan dalam mod Full jika mod Lite " +"ditetapkan secara global" + +#: register.lua +msgid "Crafting Grid" +msgstr "Grid Pertukangan" + +#: register.lua +msgid "Crafting Guide" +msgstr "Panduan Pertukangan" + +#: register.lua +msgid "Set home position" +msgstr "Tetapkan kedudukan rumah" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Kedudukan rumah ditetapkan ke: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "Anda tidak ada keistimewaan \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "Balik rumah" + +#: register.lua +msgid "Set time to day" +msgstr "Tetapkan masa jadi siang" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Masa ditetapkan ke 6 pagi" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "Anda tidak ada keistimewaan settime!" + +#: register.lua +msgid "Set time to night" +msgstr "Tetapkan masa jadi malam" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Masa ditetapkan ke 9 malam" + +#: register.lua +msgid "Clear inventory" +msgstr "Kosongkan inventori" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Butang ini dilumpuhkan di luar mod kreatif untuk mengelakkan pengosongan " +"inventori secara tidak sengaja.\n" +"Sebaliknya, gunakan slot tong sampah." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Inventori dikosongkan!" + +#: register.lua +msgid "Trash:" +msgstr "Buang:" + +#: register.lua +msgid "Refill:" +msgstr "Isi balik:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "Sebarang item dari kumpulan %s" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "Sebarang item dari kumpulan %s" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Resipi %d drpd %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Kegunaan %d drpd %d" + +#: register.lua +msgid "No recipes" +msgstr "Tiada resipi" + +#: register.lua +msgid "No usages" +msgstr "Tiada kegunaan" + +#: register.lua +msgid "Result" +msgstr "Hasil" + +#: register.lua +msgid "Ingredient" +msgstr "Bahan" + +#: register.lua +msgid "Show next recipe" +msgstr "Tunjuk resipi seterusnya" + +#: register.lua +msgid "Show next usage" +msgstr "Tunjuk kegunaan seterusnya" + +#: register.lua +msgid "Show previous recipe" +msgstr "Tunjuk resipi sebelumnya" + +#: register.lua +msgid "Show previous usage" +msgstr "Tunjuk kegunaan sebelumnya" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "%s (%s)" + +#: register.lua +msgid "Give me:" +msgstr "Beri saya:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" +"Resipi ini terlalu\n" +"besar untuk paparan." + +#: register.lua +msgid "To craft grid:" +msgstr "Ke grid pertukangan:" + +#: register.lua +msgid "All" +msgstr "" +"SE\n" +"MUA" + +#: waypoints.lua +msgid "White" +msgstr "Putih" + +#: waypoints.lua +msgid "Yellow" +msgstr "Kuning" + +#: waypoints.lua +msgid "Red" +msgstr "Merah" + +#: waypoints.lua +msgid "Green" +msgstr "Hijau" + +#: waypoints.lua +msgid "Blue" +msgstr "Biru" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Titik Arah" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Pilih Titik Arah #%d" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Titik Arah %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Tetapkan titik arah ke lokasi semasa" + +#: waypoints.lua +msgid "invisible" +msgstr "Sembunyikan" + +#: waypoints.lua +msgid "visible" +msgstr "Paparkan" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "@1 titik arah" + +#: waypoints.lua +msgid "Disable" +msgstr "Sembunyikan" + +#: waypoints.lua +msgid "Enable" +msgstr "Paparkan" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "@1 koordinat untuk titik arah" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Tukar warna paparan titik arah" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Edit nama titik arah" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Titik arah aktif" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Titik arah tidak aktif" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Selesai edit" + +#: waypoints.lua +msgid "World position" +msgstr "Kedudukan dunia" + +#: waypoints.lua +msgid "Name" +msgstr "Nama" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Warna tulisan HUD" diff --git a/unified_inventory/locale/pl.po b/unified_inventory/locale/pl.po new file mode 100644 index 0000000..5a3f412 --- /dev/null +++ b/unified_inventory/locale/pl.po @@ -0,0 +1,359 @@ +# Polish translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# RealBadAngel +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 16:30+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \n" +"Language-Team: \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: api.lua register.lua +msgid "Crafting" +msgstr "" + +#: api.lua +msgid "Mixing" +msgstr "" + +#: api.lua +msgid "Cooking" +msgstr "" + +#: api.lua +msgid "Digging" +msgstr "" + +#: bags.lua +msgid "Bags" +msgstr "Plecaki" + +#: bags.lua +msgid "Bag @1" +msgstr "Plecak @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Maly plecak" + +#: bags.lua +msgid "Medium Bag" +msgstr "Sredni plecak" + +#: bags.lua +msgid "Large Bag" +msgstr "Duzy plecak" + +#: group.lua +msgid " and " +msgstr " i " + +#: internal.lua +msgid "First page" +msgstr "Pierwsza strona" + +#: internal.lua +msgid "Back three pages" +msgstr "3 strony w tyl" + +#: internal.lua +msgid "Back one page" +msgstr "1 strona w tyl" + +#: internal.lua +msgid "Forward one page" +msgstr "1 strona do przodu" + +#: internal.lua +msgid "Forward three pages" +msgstr "3 strony do przodu" + +#: internal.lua +msgid "Last page" +msgstr "Ostatnia strona" + +#: internal.lua +msgid "Search" +msgstr "Szukaj" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "" + +#: internal.lua +msgid "No matching items" +msgstr "Brak pasujacych przedmiotow" + +#: internal.lua +msgid "No matches." +msgstr "Brak wyników" + +#: internal.lua +msgid "Page" +msgstr "Strona" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s z %s" + +#: internal.lua +msgid "Filter" +msgstr "Filtr" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "" + +#: register.lua +msgid "Crafting Guide" +msgstr "" + +#: register.lua +msgid "Set home position" +msgstr "Ustaw pozycję wyjściową" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Pozycja domowa ustawiona na: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "Nie masz uprawnien do zmiany czasu \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "Idź do domu" + +#: register.lua +msgid "Set time to day" +msgstr "Ustaw czas na dzień" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Czas ustawiony na 6:00" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "Nie masz uprawnien do zmiany czasu \"settime\"!" + +#: register.lua +msgid "Set time to night" +msgstr "Ustaw czas na noc" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Czas ustawiony na 21:00" + +#: register.lua +msgid "Clear inventory" +msgstr "Wyczyść zapasy" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" + +#: register.lua +msgid "Inventory cleared!" +msgstr "Zapasy zostały wyczyszczone!" + +#: register.lua +msgid "Trash:" +msgstr "Smietnik:" + +#: register.lua +msgid "Refill:" +msgstr "Uzupelnianie:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Recepta %d z %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Użycie %d z %d" + +#: register.lua +msgid "No recipes" +msgstr "Brak recepty" + +#: register.lua +msgid "No usages" +msgstr "Bez użycia" + +#: register.lua +msgid "Result" +msgstr "Wynik" + +#: register.lua +msgid "Ingredient" +msgstr "Składnik" + +#: register.lua +msgid "Show next recipe" +msgstr "" + +#: register.lua +msgid "Show next usage" +msgstr "" + +#: register.lua +msgid "Show previous recipe" +msgstr "" + +#: register.lua +msgid "Show previous usage" +msgstr "" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "Daj mi:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" + +#: register.lua +msgid "To craft grid:" +msgstr "" + +#: register.lua +msgid "All" +msgstr "Wszystko" + +#: waypoints.lua +msgid "White" +msgstr "Bialy" + +#: waypoints.lua +msgid "Yellow" +msgstr "Zolty" + +#: waypoints.lua +msgid "Red" +msgstr "Czerwony" + +#: waypoints.lua +msgid "Green" +msgstr "Zielony" + +#: waypoints.lua +msgid "Blue" +msgstr "Niebieski" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Punkty orientacyjne" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Wybierz punkt #%d" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Punkty orientacyjne %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Ustaw punkt orientacyjny na biezacej pozycji" + +#: waypoints.lua +msgid "invisible" +msgstr "niewidzialny" + +#: waypoints.lua +msgid "visible" +msgstr "widomy" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Robić punkt @1" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "@1 koordynatow punktu" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Zmien kolor punktu" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Edytuj nazwe punktu" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Punkt wlaczony" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Punkt wylaczony" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Zakoncz edycje" + +#: waypoints.lua +msgid "World position" +msgstr "Pozycja" + +#: waypoints.lua +msgid "Name" +msgstr "Nazwa" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Kolor tekstu HUD" diff --git a/unified_inventory/locale/pl.txt b/unified_inventory/locale/pl.txt deleted file mode 100644 index ef3e821..0000000 --- a/unified_inventory/locale/pl.txt +++ /dev/null @@ -1,68 +0,0 @@ -# Translation by RealBadAngel - -### bags.lua ### -Bags = Plecaki -Bag @1 = Plecak @1 -Small Bag = Maly plecak -Medium Bag = Sredni plecak -Large Bag = Duzy plecak - -### inernal.lua ### -First page = Pierwsza strona -Back three pages = 3 strony w tyl -Back one page = 1 strona w tyl -Forward one page = 1 strona do przodu -Forward three pages = 3 strony do przodu -Last page = Ostatnia strona -No matching items = Brak pasujacych przedmiotow -Page = Strona -%s of %s = %s z %s -Filter = Filtr -Search = Szukaj - -### register.lua ### -Can use the creative inventory = -Home position set to: %s = Pozycja domowa ustawiona na: %s -Time of day set to 6am = Czas ustawiony na 6:00 -You don't have the settime priviledge! = Nie masz uprawnien do zmiany czasu (settime)! -Time of day set to 9pm = Czas ustawiony na 21:00 -This button has been disabled outside of creative mode to prevent accidental inventory trashing.\nUse the trash slot instead. = -Inventory cleared! = -Crafting = -Trash: = Smietnik: -Refill: = Uzupelnianie: -Crafting Guide = -Method: = Metoda: -Result: %s = Wynik: %s -crafting = -shapeless crafting = -cooking = -alloy cooking = -Copy to craft grid: = -All = Wszystko -Recipe %s of %s = Recepta %s z %s -Alternate = Alternatywa -Crafting Grid = - -### waypoints.lua ### -White = Bialy -Yellow = Zolty -Red = Czerwony -Green = Zielony -Blue = Niebieski -Waypoints = Punkty orientacyjne -Waypoint active = Punkt wlaczony -Waypoint inactive = Punkt wylaczony -World position = Pozycja -Name = Nazwa -HUD text color = Kolor tekstu HUD -Edit waypoint name = Edytuj nazwe punktu -Rename waypoint = Zmien nazwe punktu -Change color of waypoint display = Zmien kolor punktu -Set waypoint to current location = Ustaw punkt orientacyjny na biezacej pozycji -Make waypoint visible = Pokaz punkt -Make waypoint invisible = Nie pokazuj punktu -Disable display of waypoint coordinates = Pokazuj koordynaty punktu -Enable display of waypoint coordinates = Nie pokazuj koordynatow punktu -Finish editing = Zakoncz edycje -Select Waypoint #%d = Wybierz punkt #%d diff --git a/unified_inventory/locale/pt.po b/unified_inventory/locale/pt.po new file mode 100644 index 0000000..ff9cc3a --- /dev/null +++ b/unified_inventory/locale/pt.po @@ -0,0 +1,366 @@ +# Portuguese translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# Lunovox +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 16:48+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \n" +"Language-Team: \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Artesanato" + +#: api.lua +msgid "Mixing" +msgstr "Muistura" + +#: api.lua +msgid "Cooking" +msgstr "Cozimento" + +#: api.lua +msgid "Digging" +msgstr "Escavação" + +#: bags.lua +msgid "Bags" +msgstr "Bolsas" + +#: bags.lua +msgid "Bag @1" +msgstr "Bolsa @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Bolsa Pequena" + +#: bags.lua +msgid "Medium Bag" +msgstr "Bolsa Média" + +#: bags.lua +msgid "Large Bag" +msgstr "Bolsa Grande" + +#: group.lua +msgid " and " +msgstr " e " + +#: internal.lua +msgid "First page" +msgstr "Primeira Página" + +#: internal.lua +msgid "Back three pages" +msgstr "Voltar 3 Páginas" + +#: internal.lua +msgid "Back one page" +msgstr "Voltar 1 Página" + +#: internal.lua +msgid "Forward one page" +msgstr "Avançar 1 Página" + +#: internal.lua +msgid "Forward three pages" +msgstr "Avançar 3 Páginas" + +#: internal.lua +msgid "Last page" +msgstr "Ultima Página" + +#: internal.lua +msgid "Search" +msgstr "Pesquisar" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "Redefinir pesquisa e exibir tudo" + +#: internal.lua +msgid "No matching items" +msgstr "Nenhum item correspondente" + +#: internal.lua +msgid "No matches." +msgstr "Sem correspondências" + +#: internal.lua +msgid "Page" +msgstr "Página" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s de %s" + +#: internal.lua +msgid "Filter" +msgstr "Filtro" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Pode usar o inventário do criativo" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" +"Força o Unified Inventory a ser exibido no modo Full se o modo Lite estiver " +"configurado globalmente" + +#: register.lua +msgid "Crafting Grid" +msgstr "Grade de Artesanato" + +#: register.lua +msgid "Crafting Guide" +msgstr "Guia de Artesanato" + +#: register.lua +msgid "Set home position" +msgstr "Definir posição de casa" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Posição inicial definida para: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "Você não tem o privilégio de \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "Transportar para Casa" + +#: register.lua +msgid "Set time to day" +msgstr "Definir turno para dia" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Hora do dia definida para 06h" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "Você não tem o privilégio de \"settime\"!" + +#: register.lua +msgid "Set time to night" +msgstr "Definir turno para noite" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Hora do dia ajustada para 21h" + +#: register.lua +msgid "Clear inventory" +msgstr "Limpar Inventário" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Este botão foi desativado fora do modo de criativo para evitar o descarte " +"acidental de inventário. \n" +"Use o slot de lixo em vez disso." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Inventário Apagado!" + +#: register.lua +msgid "Trash:" +msgstr "Lixo:" + +#: register.lua +msgid "Refill:" +msgstr "Recarga:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "Qualquer item pertencente ao grupo '%s'." + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "Qualquer item pertencente aos grupos '%s'." + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Receita %d de %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Utilização %d de %d" + +#: register.lua +msgid "No recipes" +msgstr "Sem Receita" + +#: register.lua +msgid "No usages" +msgstr "Sem Utilização" + +#: register.lua +msgid "Result" +msgstr "Resultado" + +#: register.lua +msgid "Ingredient" +msgstr "Ingrediente" + +#: register.lua +msgid "Show next recipe" +msgstr "Exibir Próxima Receita" + +#: register.lua +msgid "Show next usage" +msgstr "Mostrar Próxima Utilização" + +#: register.lua +msgid "Show previous recipe" +msgstr "Exibir Receita Anterior" + +#: register.lua +msgid "Show previous usage" +msgstr "Exibir Utilização Anterior" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "Gerado:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" +"Esta receita é grande \n" +"demais para ser apresentada." + +#: register.lua +msgid "To craft grid:" +msgstr "Para Grade de Artesanato" + +#: register.lua +msgid "All" +msgstr "MAX" + +#: waypoints.lua +msgid "White" +msgstr "Branco" + +#: waypoints.lua +msgid "Yellow" +msgstr "Amarelo" + +#: waypoints.lua +msgid "Red" +msgstr "Vermelho" + +#: waypoints.lua +msgid "Green" +msgstr "Verde" + +#: waypoints.lua +msgid "Blue" +msgstr "Azul" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Apontador de Direção" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Seleção de Apontador de Direção #%02d" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Apontador de Direção %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Configurar localização atual do Apontador de Direção" + +#: waypoints.lua +msgid "invisible" +msgstr "invisível" + +#: waypoints.lua +msgid "visible" +msgstr "visível" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Fazer Apontador de Direção @1" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "@1 exibição de coordenadas de Fazer Apontador de Direção" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Mudar cor exibida do Apontador de Direção" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Editar Nome de Apontador de Direção" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Apontador de Direção Ativo" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Apontador de Direção Inativo" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Edição Finalizada" + +#: waypoints.lua +msgid "World position" +msgstr "Posição Mundial" + +#: waypoints.lua +msgid "Name" +msgstr "Nome" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Cor de HUD" diff --git a/unified_inventory/locale/pt.txt b/unified_inventory/locale/pt.txt deleted file mode 100644 index 28ff76d..0000000 --- a/unified_inventory/locale/pt.txt +++ /dev/null @@ -1,107 +0,0 @@ -# Translation by Lunovox - -### api.lua ### -Digging (by chance) = Cavando (por acaso) - -# Template -### bags.lua ### -Bags = Bolsas -Bag @1 = Bolsa @1 -Small Bag = Bolsa Pequena -Medium Bag = Bolsa Média -Large Bag = Bolsa Grande - -### inernal.lua ### -First page = Primeira Página -Back three pages = Voltar 3 Páginas -Back one page = Voltar 1 Página -Forward one page = Avançar 1 Página -Forward three pages = Avançar 3 Páginas -Last page = Ultima Página -No matching items = Nenhum item correspondente -Page = Página -%s of %s = %s de %s -Filter = Filtro -Search = Pesquisar -Reset search and display everything = Redefinir pesquisa e exibir tudo - -### register.lua ### -Can use the creative inventory = Pode usar o inventário do criativo -Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally = Força o Unified Inventory a ser exibido no modo Full se o modo Lite estiver configurado globalmente -Home position set to: %s = Posição inicial definida para: %s -Time of day set to 6am = Hora do dia definida para 06h -You don't have the settime priviledge! = Você não tem o privilégio de 'settime'! -Time of day set to 9pm = Hora do dia ajustada para 21h -This button has been disabled outside of creative mode to prevent accidental inventory trashing.\nUse the trash slot instead. = Este botão foi desativado fora do modo de criativo para evitar o descarte acidental de inventário. \nUse o slot de lixo em vez disso. -Inventory cleared! = Inventário Apagado! -Crafting = Artesanato -Digging = Escavação -Cooking = Cozimento -Mixing = Muistura -Trash: = Lixo: -Refill: = Recarga: -Crafting Guide = Guia de Artesanato -Method: = Método: -Result: %s = Resultado: %s -crafting = artesanato -shapeless crafting = artesanato sem formato -cooking = cozinhar -alloy cooking = Cozinhar em liga -Copy to craft grid: = Copiar para grade de artesanato: -All = MAX -Alternate = Alternar -Crafting Grid = Grade de Artesanato -Show next recipe = Exibir Próxima Receita -Show next usage = Mostrar Próxima Utilização -Show previous recipe = Exibir Receita Anterior -Show previous usage = Exibir Utilização Anterior - -# Shown for huge crafting recipes; try to keep the line length short and use multiple line breaks as needed -This recipe is too\nlarge to be displayed. = Esta receita é grande \ndemais para ser apresentada. - -# %s = group name (e.g. wool) -Any item belonging to the %s group = Qualquer item pertencente ao grupo '%s'. - -# %s = List of “and”-concatenated group names -Any item belonging to the groups %s = Qualquer item pertencente aos grupos '%s'. -Recipe %d of %d = Receita %s de %s -Usage %d of %d = Utilização %s de %s -No recipes = Sem Receita -No usages = Sem Utilização -Result = Resultado -Ingredient = Ingrediente -Set time to day = Definir turno para dia -Set time to night = Definir turno para noite -Set home position = Definir posição de casa -Go home = Transportar para Casa -Clear inventory = Limpar Inventário -Give me: = Gerado: -To craft grid: = Para Grade de Artesanato - -### group.lua ### -# Logical connective, example: “Any item belonging to the groups foo and bar” -\sand\s = - -### waypoints.lua ### -White = Branco -Yellow = Amarelo -Red = Vermelho -Green = Verde -Blue = Azul -Waypoints = Apontador de Direção -Waypoint %d = Apontador de Direção %002 -Waypoint active = Apontador de Direção Ativo -Waypoint inactive = Apontador de Direção Inativo -World position = Posição Mundial -Name = Nome -HUD text color = Cor de HUD -Edit waypoint name = Editar Nome de Apontador de Direção -Rename waypoint = Renomear Apontador de Direção -Change color of waypoint display = Mudar cor exibida do Apontador de Direção -Set waypoint to current location = Configurar localização atual do Apontador de Direção -Make waypoint visible = Fazer Apontador de Direção Visível -Make waypoint invisible = Fazer Apontador de Direção Invisível -Disable display of waypoint coordinates = Desativar exibição de coordenadas de Fazer Apontador de Direção -Enable display of waypoint coordinates = Ativar exibição de coordenadas de Fazer Apontador de Direção -Finish editing = Edição Finalizada -Select Waypoint #%d = Seleção de Apontador de Direção #%02d diff --git a/unified_inventory/locale/ru.po b/unified_inventory/locale/ru.po new file mode 100644 index 0000000..7cf6144 --- /dev/null +++ b/unified_inventory/locale/ru.po @@ -0,0 +1,366 @@ +# Russian translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# eternal_sorrow +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 03:34+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \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" + +#: api.lua register.lua +#, fuzzy +msgid "Crafting" +msgstr "Крафт" + +#: api.lua +msgid "Mixing" +msgstr "Мешать" + +#: api.lua +msgid "Cooking" +msgstr "Варить" + +#: api.lua +msgid "Digging" +msgstr "Копать" + +#: bags.lua +msgid "Bags" +msgstr "Сумки" + +#: bags.lua +msgid "Bag @1" +msgstr "Сумка @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Малая сумка" + +#: bags.lua +msgid "Medium Bag" +msgstr "Средняя сумка" + +#: bags.lua +msgid "Large Bag" +msgstr "Большая сумка" + +#: group.lua +msgid " and " +msgstr " и " + +#: internal.lua +msgid "First page" +msgstr "Первая страница" + +#: internal.lua +msgid "Back three pages" +msgstr "3 страницы назад" + +#: internal.lua +msgid "Back one page" +msgstr "1 страницу назад" + +#: internal.lua +msgid "Forward one page" +msgstr "1 страницу вперёд" + +#: internal.lua +msgid "Forward three pages" +msgstr "3 страницы вперёд" + +#: internal.lua +msgid "Last page" +msgstr "Последняя страница" + +#: internal.lua +msgid "Search" +msgstr "Поиск" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "Сброс поиска, показать всё" + +#: internal.lua +msgid "No matching items" +msgstr "Нет подходящих элементов" + +#: internal.lua +msgid "No matches." +msgstr "Ничего не найдено" + +#: internal.lua +msgid "Page" +msgstr "Страница" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s из %s" + +#: internal.lua +msgid "Filter" +msgstr "Фильтр" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Можно использовать инвентарь творческого режима" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "Решетка крафта" + +#: register.lua +msgid "Crafting Guide" +msgstr "Книга рецептов" + +#: register.lua +msgid "Set home position" +msgstr "Установить позицию дома" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Дом теперь расположен по коодинатам: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "У вас нет привилегии \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "Отправиться домой" + +#: register.lua +msgid "Set time to day" +msgstr "День" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Установлено время 6 утра" + +#: register.lua +#, fuzzy +msgid "You don't have the settime privilege!" +msgstr "Вам не разрешено устанавливать время! (нет привилегии \"settime\")" + +#: register.lua +msgid "Set time to night" +msgstr "Ночь" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Установлено время 9 вечера" + +#: register.lua +msgid "Clear inventory" +msgstr "Очистить инвентарь" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Эта кнопка отключена вне творческого режима, чтобы предотвратить случайное " +"уничтожение предметов.\n" +"Используйте слот корзины вместо нее." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Инвентарь очищен!" + +#: register.lua +msgid "Trash:" +msgstr "Мусор:" + +#: register.lua +msgid "Refill:" +msgstr "Наполнить:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "Любой элемент из группы: %s" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "Любой элемент из группы: %s" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Рецепт %s из %s" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Вариант %d of %d" + +#: register.lua +msgid "No recipes" +msgstr "Рецептов нет" + +#: register.lua +msgid "No usages" +msgstr "Не используется" + +#: register.lua +msgid "Result" +msgstr "Результат" + +#: register.lua +msgid "Ingredient" +msgstr "Состав" + +#: register.lua +msgid "Show next recipe" +msgstr "Следующий рецепт" + +#: register.lua +msgid "Show next usage" +msgstr "Следующее использование" + +#: register.lua +msgid "Show previous recipe" +msgstr "Прошлый рецепт" + +#: register.lua +msgid "Show previous usage" +msgstr "Прошлая страница" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "Дай мне:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" +"Этот рецепт не\n" +"помещается в решетку." + +#: register.lua +msgid "To craft grid:" +msgstr "На решeтку крафта:" + +#: register.lua +msgid "All" +msgstr "Все" + +#: waypoints.lua +msgid "White" +msgstr "Белый" + +#: waypoints.lua +msgid "Yellow" +msgstr "Желтый" + +#: waypoints.lua +msgid "Red" +msgstr "Красный" + +#: waypoints.lua +msgid "Green" +msgstr "Зелёный" + +#: waypoints.lua +msgid "Blue" +msgstr "Синий" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Путевые точки" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Выбрать путевую точку №%d" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Путевая точка %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Установить путевую точку по текущей позиции" + +#: waypoints.lua +msgid "invisible" +msgstr "невидимой" + +#: waypoints.lua +msgid "visible" +msgstr "видимой" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Сделать путевую точку @1" + +#: waypoints.lua +msgid "Disable" +msgstr "Выключить" + +#: waypoints.lua +msgid "Enable" +msgstr "Включить" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "@1 показ координат путевых точек" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Поменять цвет путевой точки" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Переименовать путевую точку" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Путевая точка включена" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Путевая точка выключена" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Закончить редакцию" + +#: waypoints.lua +msgid "World position" +msgstr "Позиция мира" + +#: waypoints.lua +msgid "Name" +msgstr "Имя" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Цвет текста HUDа" diff --git a/unified_inventory/locale/ru.txt b/unified_inventory/locale/ru.txt deleted file mode 100644 index a7bbe54..0000000 --- a/unified_inventory/locale/ru.txt +++ /dev/null @@ -1,73 +0,0 @@ -# Translation by eternal_sorrow - -# Template -### bags.lua ### -Bags = Сумки -Bag @1 = Сумка @1 -Small Bag = Малая сумка -Medium Bag = Средняя сумка -Large Bag = Большая сумка - -### inernal.lua ### -First page = Первая страница -Back three pages = Назад на три страницы -Back one page = Назад на одну страницу -Forward one page = Вперед на одну страницу -Forward three pages = Вперед на три страницы -Last page = Последняя страница -No matching items = Совпадений нет -Page = Страница -%s of %s = %s из %s -Filter = Фильтр -Search = Поиск - -### register.lua ### -Can use the creative inventory = Можно использовать инвентарь творческого режима -Home position set to: %s = Дом теперь расположен по коодинатам: %s -Time of day set to 6am = Установлено время 6 утра -You don't have the settime priviledge! = Вам не разрешено устанавливать время! -Time of day set to 9pm = Установлено время 9 вечера -This button has been disabled outside of creative mode to prevent accidental inventory trashing.\nUse the trash slot instead. = Эта кнопка отключена вне творческого режима, чтобы предотвратить случайное уничтожение предметов.\nИспользуйте слот корзины вместо нее. -Inventory cleared! = Инвентарь очищен! -Crafting = Крафт -Trash: = Корзина: -Refill: = Размножить: -Crafting Guide = Книга рецептов -Method: = Способ: -Result: %s = Результат: %s -crafting = крафт -shapeless crafting = бесформенный крафт -cooking = жарка -alloy cooking = приготовление сплавов -Copy to craft grid: = В решетку крафта: -All = Все -Recipe %s of %s = Рецепт %s из %s -Alternate = Следующий -Crafting Grid = Решетка крафта -Go home = Отправиться домой -Set time to day = День -Set time to night = Ночь -Clear inventory = Очистить инвентарь - -### waypoints.lua ### -White = Белый -Yellow = Желтый -Red = Красный -Green = Зелёный -Blue = Синий -Waypoints = Путевые точки -Waypoint active = Путевая точка активна -Waypoint inactive = Путевая точка неактивна -World position = Позиция -Name = Имя -HUD text color = Цвет текста -Edit waypoint name = Редактировать имя путевой точки -Rename waypoint = Переименовать путевую точку -Change color of waypoint display = Изменить цвет путевой точки -Set waypoint to current location = Установить путевую точку в текущем местоположении -Make waypoint visible = Сделать путевую точку видимой -Make waypoint invisible = Сделать путевую точку невидимой -Disable display of waypoint coordinates = Отключить отображение координат путевой точки -Enable display of waypoint coordinates = Включить отображение координат путевой точки -Finish editing = Завершить редактирование -Select Waypoint #%d = Выбрать путевую точку №%d diff --git a/unified_inventory/locale/template.pot b/unified_inventory/locale/template.pot new file mode 100644 index 0000000..105fd64 --- /dev/null +++ b/unified_inventory/locale/template.pot @@ -0,0 +1,358 @@ +# LANGUAGE translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 03:34+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: api.lua register.lua +msgid "Crafting" +msgstr "" + +#: api.lua +msgid "Mixing" +msgstr "" + +#: api.lua +msgid "Cooking" +msgstr "" + +#: api.lua +msgid "Digging" +msgstr "" + +#: bags.lua +msgid "Bags" +msgstr "" + +#: bags.lua +msgid "Bag @1" +msgstr "" + +#: bags.lua +msgid "Small Bag" +msgstr "" + +#: bags.lua +msgid "Medium Bag" +msgstr "" + +#: bags.lua +msgid "Large Bag" +msgstr "" + +#: group.lua +msgid " and " +msgstr "" + +#: internal.lua +msgid "First page" +msgstr "" + +#: internal.lua +msgid "Back three pages" +msgstr "" + +#: internal.lua +msgid "Back one page" +msgstr "" + +#: internal.lua +msgid "Forward one page" +msgstr "" + +#: internal.lua +msgid "Forward three pages" +msgstr "" + +#: internal.lua +msgid "Last page" +msgstr "" + +#: internal.lua +msgid "Search" +msgstr "" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "" + +#: internal.lua +msgid "No matching items" +msgstr "" + +#: internal.lua +msgid "No matches." +msgstr "" + +#: internal.lua +msgid "Page" +msgstr "" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "" + +#: internal.lua +msgid "Filter" +msgstr "" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "" + +#: register.lua +msgid "Crafting Guide" +msgstr "" + +#: register.lua +msgid "Set home position" +msgstr "" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "" + +#: register.lua +msgid "Go home" +msgstr "" + +#: register.lua +msgid "Set time to day" +msgstr "" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "" + +#: register.lua +msgid "Set time to night" +msgstr "" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "" + +#: register.lua +msgid "Clear inventory" +msgstr "" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" + +#: register.lua +msgid "Inventory cleared!" +msgstr "" + +#: register.lua +msgid "Trash:" +msgstr "" + +#: register.lua +msgid "Refill:" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "" + +#: register.lua +msgid "No recipes" +msgstr "" + +#: register.lua +msgid "No usages" +msgstr "" + +#: register.lua +msgid "Result" +msgstr "" + +#: register.lua +msgid "Ingredient" +msgstr "" + +#: register.lua +msgid "Show next recipe" +msgstr "" + +#: register.lua +msgid "Show next usage" +msgstr "" + +#: register.lua +msgid "Show previous recipe" +msgstr "" + +#: register.lua +msgid "Show previous usage" +msgstr "" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" + +#: register.lua +msgid "To craft grid:" +msgstr "" + +#: register.lua +msgid "All" +msgstr "" + +#: waypoints.lua +msgid "White" +msgstr "" + +#: waypoints.lua +msgid "Yellow" +msgstr "" + +#: waypoints.lua +msgid "Red" +msgstr "" + +#: waypoints.lua +msgid "Green" +msgstr "" + +#: waypoints.lua +msgid "Blue" +msgstr "" + +#: waypoints.lua +msgid "Waypoints" +msgstr "" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "" + +#: waypoints.lua +msgid "invisible" +msgstr "" + +#: waypoints.lua +msgid "visible" +msgstr "" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "" + +#: waypoints.lua +msgid "Finish editing" +msgstr "" + +#: waypoints.lua +msgid "World position" +msgstr "" + +#: waypoints.lua +msgid "Name" +msgstr "" + +#: waypoints.lua +msgid "HUD text color" +msgstr "" diff --git a/unified_inventory/locale/template.txt b/unified_inventory/locale/template.txt deleted file mode 100644 index 0ea805b..0000000 --- a/unified_inventory/locale/template.txt +++ /dev/null @@ -1,104 +0,0 @@ -# Translation by - -### api.lua ### -Digging (by chance) = - -# Template -### bags.lua ### -Bags = -Bag @1 = -Small Bag = -Medium Bag = -Large Bag = - -### inernal.lua ### -First page = -Back three pages = -Back one page = -Forward one page = -Forward three pages = -Last page = -No matching items = -Page = -%s of %s = -Filter = -Search = -Reset search and display everything = - -### register.lua ### -Can use the creative inventory = -Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally = -Home position set to: %s = -Time of day set to 6am = -You don't have the settime priviledge! = -Time of day set to 9pm = -This button has been disabled outside of creative mode to prevent accidental inventory trashing.\nUse the trash slot instead. = -Inventory cleared! = -Crafting = -Digging = -Cooking = -Mixing = -Trash: = -Refill: = -Crafting Guide = -Method: = -Result: %s = -crafting = -shapeless crafting = -cooking = -alloy cooking = -Copy to craft grid: = -All = -Alternate = -Crafting Grid = -Show next recipe = -Show next usage = -Show previous recipe = -Show previous usage = -# Shown for huge crafting recipes; try to keep the line length short and use multiple line breaks as needed -This recipe is too\nlarge to be displayed. = -# %s = group name (e.g. wool) -Any item belonging to the %s group = -# %s = List of “and”-concatenated group names -Any item belonging to the groups %s = -Recipe %d of %d = -Usage %d of %d = -No recipes = -No usages = -Result = -Ingredient = -Set time to day = -Set time to night = -Set home position = -Go home = -Clear inventory = -Give me: = -To craft grid: = - -### group.lua ### -# Logical connective, example: “Any item belonging to the groups foo and bar” -\sand\s = - -### waypoints.lua ### -White = -Yellow = -Red = -Green = -Blue = -Waypoints = -Waypoint %d = -Waypoint active = -Waypoint inactive = -World position = -Name = -HUD text color = -Edit waypoint name = -Rename waypoint = -Change color of waypoint display = -Set waypoint to current location = -Make waypoint visible = -Make waypoint invisible = -Disable display of waypoint coordinates = -Enable display of waypoint coordinates = -Finish editing = -Select Waypoint #%d = diff --git a/unified_inventory/locale/tr.po b/unified_inventory/locale/tr.po new file mode 100644 index 0000000..2b6211f --- /dev/null +++ b/unified_inventory/locale/tr.po @@ -0,0 +1,360 @@ +# Turkish translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# Mahmutelmas06@hotmail.com +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 13:41+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \n" +"Language-Team: \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Üretim" + +#: api.lua +msgid "Mixing" +msgstr "Karıştırma" + +#: api.lua +msgid "Cooking" +msgstr "Pişirme" + +#: api.lua +msgid "Digging" +msgstr "Kazma" + +#: bags.lua +msgid "Bags" +msgstr "Çantalarım" + +#: bags.lua +msgid "Bag @1" +msgstr "@1. Çanta" + +#: bags.lua +msgid "Small Bag" +msgstr "Küçük Çanta" + +#: bags.lua +msgid "Medium Bag" +msgstr "Çanta" + +#: bags.lua +msgid "Large Bag" +msgstr "Büyük Çanta" + +#: group.lua +msgid " and " +msgstr " ve " + +#: internal.lua +msgid "First page" +msgstr "İlk Sayfa" + +#: internal.lua +msgid "Back three pages" +msgstr "3 Sayfa Gerile" + +#: internal.lua +msgid "Back one page" +msgstr "Geri" + +#: internal.lua +msgid "Forward one page" +msgstr "İleri" + +#: internal.lua +msgid "Forward three pages" +msgstr "3 Sayfa İlerile" + +#: internal.lua +msgid "Last page" +msgstr "Son Sayfa" + +#: internal.lua +msgid "Search" +msgstr "Ara" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "" + +#: internal.lua +msgid "No matching items" +msgstr "Eşleşme yok" + +#: internal.lua +msgid "No matches." +msgstr "Eşleşme yok" + +#: internal.lua +msgid "Page" +msgstr "Sayfa" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s dan %s" + +#: internal.lua +msgid "Filter" +msgstr "Süzgeç" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Yaratıcı envanteri kullanabilir" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "Üretim tablosu" + +#: register.lua +msgid "Crafting Guide" +msgstr "Kılavuz" + +#: register.lua +msgid "Set home position" +msgstr "Set ev pozisyon" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Yeni eviniz: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "\"home\" yetkiniz yok!" + +#: register.lua +msgid "Go home" +msgstr "Eve git" + +#: register.lua +msgid "Set time to day" +msgstr "Güne zaman ayarla" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Saat 06:00 olarak ayarlandı" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "\"settime\" yetkiniz yok!" + +#: register.lua +msgid "Set time to night" +msgstr "Geceye zaman ayarla" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Saat 19:00 olarak ayarlandı" + +#: register.lua +msgid "Clear inventory" +msgstr "" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "Yaratıcı modu dışında iken bu tuş kullanılamaz." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Envanter temizlendi!" + +#: register.lua +msgid "Trash:" +msgstr "Çöp" + +#: register.lua +msgid "Refill:" +msgstr "Doldur" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "%d dan %d tarifi" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Kullanım %d/%d" + +#: register.lua +msgid "No recipes" +msgstr "Tarifi yok" + +#: register.lua +msgid "No usages" +msgstr "Kullanım yok" + +#: register.lua +msgid "Result" +msgstr "Çıktı" + +#: register.lua +msgid "Ingredient" +msgstr "Bileşen" + +#: register.lua +msgid "Show next recipe" +msgstr "" + +#: register.lua +msgid "Show next usage" +msgstr "" + +#: register.lua +msgid "Show previous recipe" +msgstr "" + +#: register.lua +msgid "Show previous usage" +msgstr "" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "Ver bana:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" + +#: register.lua +#, fuzzy +msgid "To craft grid:" +msgstr "Üretim tablosuna kopyala" + +#: register.lua +msgid "All" +msgstr "Tümü" + +#: waypoints.lua +msgid "White" +msgstr "Beyaz" + +#: waypoints.lua +msgid "Yellow" +msgstr "Sarı" + +#: waypoints.lua +msgid "Red" +msgstr "Kırmızı" + +#: waypoints.lua +msgid "Green" +msgstr "Yeşil" + +#: waypoints.lua +msgid "Blue" +msgstr "Mavi" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Konum Noktaları" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "#%d konum noktası seç" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "%d Konum Noktaları" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Bulunduğun noktayı işaretle" + +#: waypoints.lua +msgid "invisible" +msgstr "görünmez" + +#: waypoints.lua +msgid "visible" +msgstr "görünür" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Yol noktası @1" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "Yol noktası koordinatlarının görüntülenmesini @1" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Konum Gösterge Rengi" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Konum Noktasını Düzenle" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Konum Etkin" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Konum Devredışı" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Düzenleme bitti" + +#: waypoints.lua +msgid "World position" +msgstr "Dünya konumu" + +#: waypoints.lua +msgid "Name" +msgstr "İsim" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Metin rengi" diff --git a/unified_inventory/locale/tr.txt b/unified_inventory/locale/tr.txt deleted file mode 100644 index e171fd6..0000000 --- a/unified_inventory/locale/tr.txt +++ /dev/null @@ -1,69 +0,0 @@ -# Translation by Mahmutelmas06@hotmail.com - -# Template -### bags.lua ### -Bags = Çantalarım -Bag @1 = @1. Çanta -Small Bag = Küçük Çanta -Medium Bag = Çanta -Large Bag = Büyük Çanta - -### inernal.lua ### -First page = İlk Sayfa -Back three pages = 3 Sayfa Gerile -Back one page = Geri -Forward one page = İleri -Forward three pages = 3 Sayfa İlerile -Last page = Son Sayfa -No matching items = Eşleşme yok -Page = Sayfa -%s of %s = %s dan %s -Filter = Süzgeç -Search = Ara - -### register.lua ### -Can use the creative inventory = Yaratıcı envanteri kullanabilir -Home position set to: %s = Yeni eviniz: %s -Time of day set to 6am = Saat 06:00 olarak ayarlandı -You don't have the settime priviledge = Saati düzenleme yetkiniz yok! -Time of day set to 9pm = Saat 19:00 olarak ayarlandı -This button has been disabled outside of creative mode to prevent accidental inventory trashing.\nUse the trash slot instead. = Yaratıcı modu dışında iken bu tuş kullanılamaz. -Inventory cleared! = Envanter temizlendi! -Crafting = Üretim -Trash: = Çöp -Refill: = Doldur -Crafting Guide = Kılavuz -Method: = Yöntem -Result: %s = Çıktı: %s -crafting = üretim -shapeless crafting = şekilsiz üretim -cooking = pişirme -alloy cooking = karıştırma -Copy to craft grid: = Üretim tablosuna kopyala -All = Tümü -Recipe %s of %s = %s dan %s tarifi -Alternate = Altarnatif -Crafting Grid = Üretim tablosu - -### waypoints.lua ### -White = Beyaz -Yellow = Sarı -Red = Kırmızı -Green = Yeşil -Blue = Mavi -Waypoints = Konum Noktaları -Waypoint active = Konum Etkin -Waypoint inactive = Konum Devredışı -World position = Dünya konumu -Name = İsim -HUD text color = Metin rengi -Edit waypoint name = Konum Noktasını Düzenle -Rename waypoint = Konum Noktasını Adlandır -Change color of waypoint display = Konum Gösterge Rengi -Set waypoint to current location = Bulunduğun noktayı işaretle -Make waypoint visible = Konumlar görünür -Make waypoint invisible = Konumlar gözükmez -Disable display of waypoint coordinates = Koordinatları gizle -Enable display of waypoint coordinates = Koordinatları göster -Finish editing = Düzenleme bitti -Select Waypoint #%d = #%d konum noktası seç diff --git a/unified_inventory/register.lua b/unified_inventory/register.lua index bd6a13b..dd2b3cc 100644 --- a/unified_inventory/register.lua +++ b/unified_inventory/register.lua @@ -1,5 +1,5 @@ local S = unified_inventory.gettext -local F = unified_inventory.fgettext +local F = minetest.formspec_escape minetest.register_privilege("creative", { description = S("Can use the creative inventory"), @@ -171,20 +171,20 @@ unified_inventory.register_page("craft", { local player_name = player:get_player_name() local formspec = "background[2,"..formspecy..";6,3;ui_crafting_form.png]" formspec = formspec.."background[0,"..(formspecy + 3.5)..";8,4;ui_main_inventory.png]" - formspec = formspec.."label[0,"..formheadery..";" ..F("Crafting").."]" + formspec = formspec.."label[0,"..formheadery..";" ..F(S("Crafting")).."]" formspec = formspec.."listcolors[#00000000;#00000000]" formspec = formspec.."list[current_player;craftpreview;6,"..formspecy..";1,1;]" formspec = formspec.."list[current_player;craft;2,"..formspecy..";3,3;]" if unified_inventory.trash_enabled or unified_inventory.is_creative(player_name) or minetest.get_player_privs(player_name).give then - formspec = formspec.."label[7,"..(formspecy + 1.5)..";" .. F("Trash:") .. "]" + formspec = formspec.."label[7,"..(formspecy + 1.5)..";" .. F(S("Trash:")) .. "]" formspec = formspec.."background[7,"..(formspecy + 2)..";1,1;ui_single_slot.png]" formspec = formspec.."list[detached:trash;main;7,"..(formspecy + 2)..";1,1;]" end formspec = formspec.."listring[current_name;craft]" formspec = formspec.."listring[current_player;main]" if unified_inventory.is_creative(player_name) then - formspec = formspec.."label[0,"..(formspecy + 1.5)..";" .. F("Refill:") .. "]" - formspec = formspec.."list[detached:"..minetest.formspec_escape(player_name).."refill;main;0,"..(formspecy +2)..";1,1;]" + formspec = formspec.."label[0,"..(formspecy + 1.5)..";" .. F(S("Refill:")) .. "]" + formspec = formspec.."list[detached:"..F(player_name).."refill;main;0,"..(formspecy +2)..";1,1;]" end return {formspec=formspec} end, @@ -211,10 +211,10 @@ local function stack_image_button(x, y, w, h, buttonname_prefix, item) selectitem = group_item.sole and displayitem or name end local label = show_is_group and "G" or "" - local buttonname = minetest.formspec_escape(buttonname_prefix..unified_inventory.mangle_for_formspec(selectitem)) + local buttonname = F(buttonname_prefix..unified_inventory.mangle_for_formspec(selectitem)) local button = string.format("item_image_button[%f,%f;%f,%f;%s;%s;%s]", x, y, w, h, - minetest.formspec_escape(displayitem), buttonname, label) + F(displayitem), buttonname, label) if show_is_group then local groupstring, andcount = unified_inventory.extract_groupnames(name) local grouptip @@ -223,7 +223,7 @@ local function stack_image_button(x, y, w, h, buttonname_prefix, item) elseif andcount > 1 then grouptip = string.format(S("Any item belonging to the groups %s"), groupstring) end - grouptip = minetest.formspec_escape(grouptip) + grouptip = F(grouptip) if andcount >= 1 then button = button .. string.format("tooltip[%s;%s]", buttonname, grouptip) end @@ -232,24 +232,24 @@ local function stack_image_button(x, y, w, h, buttonname_prefix, item) end local recipe_text = { - recipe = "Recipe %d of %d", - usage = "Usage %d of %d", + recipe = S("Recipe %d of %d"), + usage = S("Usage %d of %d"), } local no_recipe_text = { - recipe = "No recipes", - usage = "No usages", + recipe = S("No recipes"), + usage = S("No usages"), } local role_text = { - recipe = "Result", - usage = "Ingredient", + recipe = S("Result"), + usage = S("Ingredient"), } local next_alt_text = { - recipe = "Show next recipe", - usage = "Show next usage", + recipe = S("Show next recipe"), + usage = S("Show next usage"), } local prev_alt_text = { - recipe = "Show previous recipe", - usage = "Show previous usage", + recipe = S("Show previous recipe"), + usage = S("Show previous usage"), } local other_dir = { recipe = "usage", @@ -268,7 +268,7 @@ unified_inventory.register_page("craftguide", { local player_privs = minetest.get_player_privs(player_name) local formspec = "" formspec = formspec.."background[0,"..(formspecy + 3.5)..";8,4;ui_main_inventory.png]" - formspec = formspec.."label[0,"..formheadery..";" .. F("Crafting Guide") .. "]" + formspec = formspec.."label[0,"..formheadery..";" .. F(S("Crafting Guide")) .. "]" formspec = formspec.."listcolors[#00000000;#00000000]" local item_name = unified_inventory.current_item[player_name] if not item_name then return {formspec=formspec} end @@ -290,23 +290,25 @@ unified_inventory.register_page("craftguide", { alternates = #crafts craft = crafts[alternate] end + local has_creative = player_privs.give or player_privs.creative or + minetest.settings:get_bool("creative_mode") formspec = formspec.."background[0.5,"..(formspecy + 0.2)..";8,3;ui_craftguide_form.png]" formspec = formspec.."textarea["..craftresultx..","..craftresulty - ..";10,1;;"..minetest.formspec_escape(F(role_text[dir])..": "..item_name_shown)..";]" + ..";10,1;;"..F(role_text[dir])..": "..item_name_shown..";]" formspec = formspec..stack_image_button(0, formspecy, 1.1, 1.1, "item_button_" .. rdir .. "_", ItemStack(item_name)) if not craft then formspec = formspec.."label[5.5,"..(formspecy + 2.35)..";" - ..minetest.formspec_escape(F(no_recipe_text[dir])).."]" + ..F(no_recipe_text[dir]).."]" local no_pos = dir == "recipe" and 4.5 or 6.5 local item_pos = dir == "recipe" and 6.5 or 4.5 formspec = formspec.."image["..no_pos..","..formspecy..";1.1,1.1;ui_no.png]" formspec = formspec..stack_image_button(item_pos, formspecy, 1.1, 1.1, "item_button_" ..other_dir[dir].."_", ItemStack(item_name)) - if player_privs.give == true or player_privs.creative == true or minetest.setting_getbool("creative_mode") == true then - formspec = formspec.."label[0,"..(formspecy + 2.10)..";" .. F("Give me:") .. "]" + if has_creative then + formspec = formspec.."label[0,"..(formspecy + 2.10)..";" .. F(S("Give me:")) .. "]" .."button[0, "..(formspecy + 2.7)..";0.6,0.5;craftguide_giveme_1;1]" .."button[0.6,"..(formspecy + 2.7)..";0.7,0.5;craftguide_giveme_10;10]" .."button[1.3,"..(formspecy + 2.7)..";0.8,0.5;craftguide_giveme_99;99]" @@ -319,7 +321,7 @@ unified_inventory.register_page("craftguide", { if craft_type.icon then formspec = formspec..string.format(" image[%f,%f;%f,%f;%s]",5.7,(formspecy + 0.05),0.5,0.5,craft_type.icon) end - formspec = formspec.."label[5.5,"..(formspecy + 1)..";" .. minetest.formspec_escape(craft_type.description).."]" + formspec = formspec.."label[5.5,"..(formspecy + 1)..";" .. F(craft_type.description).."]" formspec = formspec..stack_image_button(6.5, formspecy, 1.1, 1.1, "item_button_usage_", ItemStack(craft.output)) local display_size = craft_type.dynamic_display_size and craft_type.dynamic_display_size(craft) or { width = craft_type.width, height = craft_type.height } local craft_width = craft_type.get_shaped_craft_width and craft_type.get_shaped_craft_width(craft) or display_size.width @@ -373,17 +375,17 @@ unified_inventory.register_page("craftguide", { -- Error formspec = formspec.."label[" ..tostring(2)..","..tostring(formspecy) - ..";"..minetest.formspec_escape(S("This recipe is too\nlarge to be displayed.")).."]" + ..";"..F(S("This recipe is too\nlarge to be displayed.")).."]" end if craft_type.uses_crafting_grid and display_size.width <= 3 then - formspec = formspec.."label[0,"..(formspecy + 0.9)..";" .. F("To craft grid:") .. "]" + formspec = formspec.."label[0,"..(formspecy + 0.9)..";" .. F(S("To craft grid:")) .. "]" .."button[0, "..(formspecy + 1.5)..";0.6,0.5;craftguide_craft_1;1]" .."button[0.6,"..(formspecy + 1.5)..";0.7,0.5;craftguide_craft_10;10]" - .."button[1.3,"..(formspecy + 1.5)..";0.8,0.5;craftguide_craft_max;" .. F("All") .. "]" + .."button[1.3,"..(formspecy + 1.5)..";0.8,0.5;craftguide_craft_max;" .. F(S("All")) .. "]" end - if player_privs.give == true or player_privs.creative == true or minetest.setting_getbool("creative_mode") == true then - formspec = formspec.."label[0,"..(formspecy + 2.1)..";" .. F("Give me:") .. "]" + if has_creative then + formspec = formspec.."label[0,"..(formspecy + 2.1)..";" .. F(S("Give me:")) .. "]" .."button[0, "..(formspecy + 2.7)..";0.6,0.5;craftguide_giveme_1;1]" .."button[0.6,"..(formspecy + 2.7)..";0.7,0.5;craftguide_giveme_10;10]" .."button[1.3,"..(formspecy + 2.7)..";0.8,0.5;craftguide_giveme_99;99]" diff --git a/unified_inventory/waypoints.lua b/unified_inventory/waypoints.lua index 3ab7eb7..3f9ee58 100644 --- a/unified_inventory/waypoints.lua +++ b/unified_inventory/waypoints.lua @@ -1,5 +1,5 @@ local S = unified_inventory.gettext -local F = unified_inventory.fgettext +local F = minetest.formspec_escape local hud_colors = { {"#FFFFFF", 0xFFFFFF, S("White")}, @@ -25,7 +25,7 @@ unified_inventory.register_page("waypoints", { local waypoints = datastorage.get(player_name, "waypoints") local formspec = "background[0,4.5;8,4;ui_main_inventory.png]" .. "image[0,0;1,1;ui_waypoints_icon.png]" .. - "label[1,0;" .. F("Waypoints") .. "]" + "label[1,0;" .. F(S("Waypoints")) .. "]" -- Tabs buttons: for i = 1, 5, 1 do @@ -49,43 +49,43 @@ unified_inventory.register_page("waypoints", { "ui_waypoint_set_icon.png;".. "set_waypoint"..i..";]".. "tooltip[set_waypoint" .. i .. ";" - .. F("Set waypoint to current location").."]" + .. F(S("Set waypoint to current location")).."]" formspec = formspec .. "image_button[5.2,3.7;.8,.8;".. (waypoint.active and "ui_on_icon.png" or "ui_off_icon.png")..";".. "toggle_waypoint"..i..";]".. "tooltip[toggle_waypoint" .. i .. ";" - .. F("Make waypoint " - ..(waypoint.active and "invisible" or "visible")).."]" + .. F(S("Make waypoint @1", + waypoint.active and S("invisible") or S("visible"))).."]" formspec = formspec .. "image_button[5.9,3.7;.8,.8;".. (waypoint.display_pos and "ui_green_icon_background.png" or "ui_red_icon_background.png").."^ui_xyz_icon.png;".. "toggle_display_pos" .. i .. ";]".. "tooltip[toggle_display_pos" .. i .. ";" - .. F((waypoint.display_pos and "Disable" or "Enable") - .." display of waypoint coordinates").."]" + .. F(S("@1 display of waypoint coordinates", + waypoint.display_pos and S("Disable") or S("Enable"))) .."]" formspec = formspec .. "image_button[6.6,3.7;.8,.8;".. "ui_circular_arrows_icon.png;".. "toggle_color"..i..";]".. "tooltip[toggle_color" .. i .. ";" - .. F("Change color of waypoint display").."]" + .. F(S("Change color of waypoint display")).."]" formspec = formspec .. "image_button[7.3,3.7;.8,.8;".. "ui_pencil_icon.png;".. "rename_waypoint"..i..";]".. "tooltip[rename_waypoint" .. i .. ";" - .. F("Edit waypoint name").."]" + .. F(S("Edit waypoint name")).."]" -- Waypoint's info: if waypoint.active then - formspec = formspec .. "label[1,0.8;"..F("Waypoint active").."]" + formspec = formspec .. "label[1,0.8;"..F(S("Waypoint active")).."]" else - formspec = formspec .. "label[1,0.8;"..F("Waypoint inactive").."]" + formspec = formspec .. "label[1,0.8;"..F(S("Waypoint inactive")).."]" end if temp.edit then @@ -96,13 +96,13 @@ unified_inventory.register_page("waypoints", { "ui_ok_icon.png;".. "confirm_rename"..i.. ";]".. "tooltip[confirm_rename" .. i .. ";" - .. F("Finish editing").."]" + .. F(S("Finish editing")).."]" end - formspec = formspec .. "label[1,1.3;"..F("World position")..": " .. + formspec = formspec .. "label[1,1.3;"..F(S("World position"))..": " .. minetest.pos_to_string(waypoint.world_pos or vector.new()) .. "]" .. - "label[1,1.8;"..F("Name")..": ".. (waypoint.name or default_name) .. "]" .. - "label[1,2.3;"..F("HUD text color")..": " .. + "label[1,1.8;"..F(S("Name"))..": ".. (waypoint.name or default_name) .. "]" .. + "label[1,2.3;"..F(S("HUD text color"))..": " .. hud_colors[waypoint.color or 1][3] .. "]" return {formspec=formspec} diff --git a/unifieddyes/init.lua b/unifieddyes/init.lua index 51cc671..2cf465b 100644 --- a/unifieddyes/init.lua +++ b/unifieddyes/init.lua @@ -564,7 +564,7 @@ function unifieddyes.on_use(itemstack, player, pointed_thing) local stackname = itemstack:get_name() local playername = player:get_player_name() - if pointed_thing and pointed_thing.type == "node" then + if pointed_thing and pointed_thing.type == "node" and unifieddyes.select_node(pointed_thing) then if minetest.is_protected(unifieddyes.select_node(pointed_thing), playername) and not minetest.check_player_privs(playername, "protection_bypass") then minetest.chat_send_player(playername, "Sorry, someone else owns that spot.") diff --git a/xban2/init.lua b/xban2/init.lua index dad13af..6f15f14 100644 --- a/xban2/init.lua +++ b/xban2/init.lua @@ -9,9 +9,9 @@ local tempbans = { } local DEF_SAVE_INTERVAL = 300 -- 5 minutes local DEF_DB_FILENAME = minetest.get_worldpath().."/xban.db" -local DB_FILENAME = minetest.setting_get("xban.db_filename") +local DB_FILENAME = minetest.settings:get("xban.db_filename") local SAVE_INTERVAL = tonumber( - minetest.setting_get("xban.db_save_interval")) or DEF_SAVE_INTERVAL + minetest.settings:get("xban.db_save_interval")) or DEF_SAVE_INTERVAL if (not DB_FILENAME) or (DB_FILENAME == "") then DB_FILENAME = DEF_DB_FILENAME -- cgit v1.2.3