update blox, castles, cottages, technic, farming_redo, gloopblocks,

homedecor, led_marquee, locks, maptools, mesecons, plantlife, moreblocks,
nixie_tubes, replacer, travelnet, and unified inventory
This commit is contained in:
Vanessa Dannenberg 2019-04-01 19:38:47 -04:00
parent b548167fde
commit 8555f75acc
58 changed files with 4454 additions and 2294 deletions

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,8 @@ minetest.register_node("castle_storage:crate", {
default.gui_bg_img ..
default.gui_slots ..
"list[current_name;main;0,0;8,5;]"..
"list[current_player;main;0,5;8,4;]")
"list[current_player;main;0,5;8,4;]"..
"listring[]")
meta:set_string("infotext", S("Crate"))
local inv = meta:get_inventory()
inv:set_size("main", 8*4)
@ -56,4 +57,4 @@ if minetest.get_modpath("hopper") and hopper ~= nil and hopper.add_container ~=
{"side", "castle_storage:crate", "main"},
{"bottom", "castle_storage:crate", "main"},
})
end
end

View File

@ -12,7 +12,8 @@ local get_ironbound_chest_formspec = function(pos)
default.gui_bg_img ..
default.gui_slots ..
"list[nodemeta:".. spos .. ";main;,0;8,4;]"..
"list[current_player;main;,5;8,4;]"
"list[current_player;main;,5;8,4;]"..
"listring[]"
return formspec
end
@ -140,4 +141,4 @@ if minetest.get_modpath("hopper") and hopper ~= nil and hopper.add_container ~=
{"side", "castle_storage:ironbound_chest", "main"},
{"bottom", "castle_storage:ironbound_chest", "main"},
})
end
end

10
concrete/locale/pl.txt Normal file
View File

@ -0,0 +1,10 @@
# Polish Translation for technic_concrete
# Polskie tłumaczenie technic_concrete
# by mat9117
Rebar = Pręt zbrojeniowy
Concrete Block = Blok betonu
Blast-resistant Concrete Block = Przeciwwybuchowy blok betonu
Concrete Post Platform = Betonowa platforma
Concrete Post = Betonowy słup

View File

@ -4,6 +4,8 @@
-- License: GPLv3
--
-- Modified:
-- 11.03.19 Adjustments for MT 5.x
-- cottages_feldweg_mode is now a setting in minetest.conf
-- 27.07.15 Moved into its own repository.
-- Made sure textures and craft receipe indigrents are available or can be replaced.
-- Took care of "unregistered globals" warnings.

View File

@ -15,8 +15,14 @@ local S = cottages.S
-- * flat: each node is a full node; junction, t-junction and corner are included
-- * nodebox: like flat - except that each node has a nodebox that fits to that road node
-- * mesh: like nodebox - except that it uses a nice roundish model
if( not( cottages_feldweg_mode )) then
local cottages_feldweg_mode = minetest.settings:get("cottages_feldweg_mode")
if( cottages_feldweg_mode ~= "mesh"
and cottages_feldweg_mode ~= "flat"
and cottages_feldweg_mode ~= "nodebox"
and cottages_feldweg_mode ~= "flat") then
cottages_feldweg_mode = "mesh";
-- add the setting to the minetest.conf so that the player can set it there
minetest.settings:set("cottages_feldweg_mode", "mesh")
end
local function register_recipes(include_end)

View File

@ -393,7 +393,7 @@ cottages.sit_on_bench = function( pos, node, clicker, itemstack, pointed_thing )
if( animation and animation.animation=="sit") then
default.player_attached[pname] = false
clicker:setpos({x=pos.x,y=pos.y-0.5,z=pos.z})
clicker:set_pos({x=pos.x,y=pos.y-0.5,z=pos.z})
clicker:set_eye_offset({x=0,y=0,z=0}, {x=0,y=0,z=0})
clicker:set_physics_override(1, 1, 1)
default.player_set_animation(clicker, "stand", 30)
@ -411,7 +411,7 @@ cottages.sit_on_bench = function( pos, node, clicker, itemstack, pointed_thing )
end
clicker:set_eye_offset({x=0,y=-7,z=2}, {x=0,y=0,z=0})
clicker:setpos( p2 )
clicker:set_pos( p2 )
default.player_set_animation(clicker, "sit", 30)
clicker:set_physics_override(0, 0, 0)
default.player_attached[pname] = true
@ -441,7 +441,7 @@ cottages.sleep_in_bed = function( pos, node, clicker, itemstack, pointed_thing )
-- let players get back up
if( animation and animation.animation=="lay" ) then
default.player_attached[pname] = false
clicker:setpos({x=pos.x,y=pos.y-0.5,z=pos.z})
clicker:set_pos({x=pos.x,y=pos.y-0.5,z=pos.z})
clicker:set_eye_offset({x=0,y=0,z=0}, {x=0,y=0,z=0})
clicker:set_physics_override(1, 1, 1)
default.player_set_animation(clicker, "stand", 30)
@ -542,7 +542,7 @@ cottages.sleep_in_bed = function( pos, node, clicker, itemstack, pointed_thing )
-- no sleeping on this place
else
default.player_attached[pname] = false
clicker:setpos({x=pos.x,y=pos.y-0.5,z=pos.z})
clicker:set_pos({x=pos.x,y=pos.y-0.5,z=pos.z})
clicker:set_eye_offset({x=0,y=0,z=0}, {x=0,y=0,z=0})
clicker:set_physics_override(1, 1, 1)
default.player_set_animation(clicker, "stand", 30)
@ -553,7 +553,7 @@ cottages.sleep_in_bed = function( pos, node, clicker, itemstack, pointed_thing )
clicker:set_eye_offset({x=0,y=-7,z=2}, {x=0,y=0,z=0})
clicker:setpos( p );
clicker:set_pos( p );
default.player_set_animation(clicker, new_animation, 30)
clicker:set_physics_override(0, 0, 0)
default.player_attached[pname] = true

View File

@ -30,9 +30,9 @@ minetest.register_tool("cottages:pitchfork", {
full_punch_interval = 1.0,
max_drop_level=1,
groupcaps={
fleshy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1, uses=40},
snappy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1, uses=40},
hay ={times={[2]=0.10, [3]=0.10}, maxwear=0.05, maxlevel=1, uses=40},
fleshy={times={[2]=0.80, [3]=0.40}, maxlevel=1, uses=1/0.002 },
snappy={times={[2]=0.80, [3]=0.40}, maxlevel=1, uses=1/0.002 },
hay ={times={[2]=0.10, [3]=0.10}, maxlevel=1, uses=1/0.002 },
},
damage_groups = {fleshy=5}, -- slightly stronger than a stone sword
},
@ -73,7 +73,7 @@ minetest.register_node("cottages:pitchfork_placed", {
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
groups = {snappy = 2, dig_immediate = 3, falling_node = 1, attached_node = 1},
groups = {snappy = 2, dig_immediate = 3, falling_node = 1, attached_node = 1, not_in_creative_inventory=1},
sounds = cottages.sounds.wood,
node_box = {
type = "fixed",

View File

@ -202,7 +202,8 @@ minetest.register_node("cottages:water_gen", {
return stack:get_count()
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
if not(cottages.player_can_use(meta:get_string(pos), player)) then
local meta = minetest.get_meta(pos)
if not(cottages.player_can_use(meta, player)) then
return 0
end
return stack:get_count()

9
extranodes/locale/pl.txt Normal file
View File

@ -0,0 +1,9 @@
# Polish Translation for technic_extranodes
# Polskie tłumaczenie technic_extranodes
# by mat9117
Marble = Marmur
Marble Bricks = Marmurowe cegły
Granite = Granit
Concrete = Beton

View File

@ -14,7 +14,16 @@ minetest.register_craftitem("farming:potato", {
on_place = function(itemstack, placer, pointed_thing)
return farming.place_seed(itemstack, placer, pointed_thing, "farming:potato_1")
end,
on_use = minetest.item_eat(1),
-- on_use = minetest.item_eat(1),
on_use = function(itemstack, user, pointed_thing)
if user then
if math.random(1, 3) == 1 then
return minetest.do_item_eat(-1, nil, itemstack, user, pointed_thing)
else
return minetest.do_item_eat(1, nil, itemstack, user, pointed_thing)
end
end
end,
})
-- baked potato

View File

@ -433,7 +433,7 @@ minetest.register_tool("farming:scythe_mithril", {
-- Run script hook
for _, callback in pairs(core.registered_on_dignodes) do
callback(pos, node)
callback(pos, node, placer)
end
-- play sound

File diff suppressed because it is too large Load Diff

View File

@ -81,11 +81,22 @@ homedecor.register("toilet_paper", {
--Sink
local sink_cbox = {
local sink_sbox = {
type = "fixed",
fixed = { -5/16, -8/16, 1/16, 5/16, 8/16, 8/16 }
}
local sink_cbox = {
type = "fixed",
fixed = {
{ -5/16, 5/16, 1/16, -4/16, 8/16, 8/16 },
{ 5/16, 5/16, 1/16, 4/16, 8/16, 8/16 },
{ -5/16, 5/16, 1/16, 5/16, 8/16, 2/16 },
{ -5/16, 5/16, 6/16, 5/16, 8/16, 8/16 },
{ -4/16, -8/16, 1/16, 4/16, 5/16, 6/16 }
}
}
homedecor.register("sink", {
description = S("Bathroom Sink"),
mesh = "homedecor_bathroom_sink.obj",
@ -95,19 +106,10 @@ homedecor.register("sink", {
"default_water.png"
},
inventory_image="homedecor_bathroom_sink_inv.png",
selection_box = sink_cbox,
selection_box = sink_sbox,
collision_box = sink_cbox,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
node_box = {
type = "fixed",
fixed = {
{ -5/16, 5/16, 1/16, -4/16, 8/16, 8/16 },
{ 5/16, 5/16, 1/16, 4/16, 8/16, 8/16 },
{ -5/16, 5/16, 1/16, 5/16, 8/16, 2/16 },
{ -5/16, 5/16, 6/16, 5/16, 8/16, 8/16 },
{ -4/16, -8/16, 1/16, 4/16, 5/16, 6/16 }
}
},
on_destruct = function(pos)
homedecor.stop_particle_spawner({x=pos.x, y=pos.y+1, z=pos.z})
end
@ -127,7 +129,8 @@ local function taps_on_rightclick(pos, node, clicker, itemstack, pointed_thing)
velocity_x = { min = -0.1, max = 0.1 },
velocity_y = -0.3,
velocity_z = { min = -0.1, max = 0 },
spread = 0
spread = 0,
die_on_collision = true,
}
homedecor.start_particle_spawner(pos, node, particledef, "homedecor_faucet")
end

View File

@ -71,6 +71,7 @@ function homedecor.start_particle_spawner(pos, node, particledef, soundname)
amount = 60,
time = 0,
collisiondetection = true,
collision_removal = particledef.die_on_collision,
minpos = {x=pos.x - minx, y=pos.y + outlety, z=pos.z - minz},
maxpos = {x=pos.x - maxx, y=pos.y + outlety, z=pos.z - maxz},
minvel = {x = minvelx, y = velocityy, z = minvelz},

View File

@ -412,6 +412,11 @@ for i = 31, 255 do
reset_meta(pos)
end,
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
if (fields.channel) then
minetest.get_meta(pos):set_string("channel", fields.channel)
end

View File

@ -155,7 +155,7 @@ minetest.register_node("locks:door", {
end
local fdir = 0
local placer_pos = placer:getpos()
local placer_pos = placer:get_pos()
if placer_pos then
dir = {
x = above.x - placer_pos.x,

View File

@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased]
## [1.1.0] - 2019-03-23
### Changed
- Increased the range of the Admin Pickaxe from 12 to 20 nodes.
@ -16,4 +18,5 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Initial versioned release.
[Unreleased]: https://github.com/minetest-mods/maptools/compare/v1.0.0...HEAD
[Unreleased]: https://github.com/minetest-mods/maptools/compare/v1.1.0...HEAD
[1.1.0]: https://github.com/minetest-mods/maptools/compare/v1.0.0...v1.1.0

View File

@ -1,26 +0,0 @@
# Item names for spawning the items using /give or /giveme
## Items
- `admin_pick`: magenta pickaxe, infinite durability, mines everything including unbreakable blocks instantly. No drops. Don't put this pickaxe in the hands of a griefer, of course.
- `admin_pick_with_drops`: same as admin pickaxe, but drops stuff.
- `infinite_fuel`: fuel lasting for a (near)-infinite time. Don't worry about the "near" * it lasts for about 50 in-real-life years.
- `super_apple`: a yellow apple which heals 20 HP.
- `copper_coin`,
- `silver_coin`,
- `gold_coin`: these have nothing to do with the More Ores mod; they can be used as a currency for trading, or as an universal currency for mods that add shops.
## Blocks
**[!]** denotes an unpointable, unbreakable block; be very careful with them, they cannot be removed by hand (they can only be removed with WorldEdit or similar).
- `(block)_u` : unbreakable, non-flammable, non-falling, non-decaying blocks, most common blocks have their unbreakable form (examples: maptools:stone or maptools:wood for unbreakable stone/wood). Examples: `stone_u`, `wood_u`, `glass_u`, …
- `full_grass`: unbreakable block with the grass texture on all sides.
- `player_clip`: **[!]** invisible block, not pointable.
- `full_clip`: invisible block, pointable. Also available as a thin face: full_clip_face.
- `smoke_block`: some smoke (does not harm players or entities).
- `no_build`: **[!]** very basic building prevention.
- `no_interact`: prevents interacting through the block (opening chests, furnaces, attacking entities, …).
- `damage_(1…5)`: **[!]** damaging blocks. The damage is in half hearts and ranges from 1 to 5 (0.5 to 2.5 hearts damage every second).
- `kill`: **[!]** instant kill (deals 10 heart damage) blocks.
- `light_block`: **[!]** invisible non-solid block, prevents light from passing through.
- `light_bulb`: **[!]** invisible non-solid block, emitting a good amount of light.

39
maptools/NODES_ITEMS.md Normal file
View File

@ -0,0 +1,39 @@
# List of nodes/items
To use an item, make sure you have the `give` privilege, then use
`/give <player> <item code> [amount]` or `/giveme <item code> [amount]`.
**Tip:** To give yourself a large amount of items quickly (65535 as of writing),
use `-1` as the amount.
## Nodes
:warning: denotes an unpointable, unbreakable block; be very careful with them,
as they cannot be removed by hand (they can only be removed with WorldEdit or
similar).
| Item code | Description |
| ----------------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `maptools:{block}_u` | Unbreakable, non-flammable, non-falling, non-decaying blocks. Most common default blocks have an unbreakable form available (`maptools:stone_u`, `maptools:wood_u`, …) |
| `maptools:full_grass` | Unbreakable block with the grass texture on all sides. |
| `maptools:player_clip` | :warning: Invisible, non-pointable block that blocks players and entities. |
| `maptools:full_clip` | Invisible, pointable block that blocks players and entities. Also available as a thin face (`maptools:full_clip_face`). |
| `maptools:smoke_block` | Some smoke (doesn't damage players or entities). |
| `maptools:no_build` | :warning: Very basic building prevention. |
| `maptools:no_interact` | Prevents interacting through the block (opening chests, furnaces, attacking entities, …), but can still be walked through. |
| `maptools:damage_{1…5}` | :warning: Damaging blocks which damage players by 1 to 5 HP per second. |
| `maptools:kill` | :warning: Instant kill blocks (damages players by 20 HP per second). |
| `maptools:light_block` | :warning: Invisible non-solid block, prevents light from passing through. |
| `maptools:light_bulb` | :warning: Invisible non-solid block, emitting the maximum amount of light. |
## Items
| Item code | Description |
| -------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `maptools:admin_pick` | A bright magenta pickaxe with infinite durability, digs everything including unbreakable blocks instantly. No drops are given when digging nodes. |
| `maptools:admin_pick_with_drops` | Same as the admin pickaxe, but drops are given when digging nodes. |
| `maptools:infinite_fuel` | Fuel lasting for a near-infinite time (about 50 real-life years). |
| `maptools:super_apple` | A yellow apple which heals the player by 20 HP when used. |
| `maptools:copper_coin` | Decorative item (can be used in mini-games). |
| `maptools:silver_coin` | Decorative item (can be used in mini-games). |
| `maptools:gold_coin` | Decorative item (can be used in mini-games). |

View File

@ -3,7 +3,10 @@
Map Tools for [Minetest](https://www.minetest.net/), a free and open source infinite
world block sandbox game.
[**Forum topic**](https://forum.minetest.net/viewtopic.php?f=11&t=1882)
## Resources
- [Forum topic](https://forum.minetest.net/viewtopic.php?f=11&t=1882)
- [List of nodes and items available](NODES_ITEMS.md)
## Installation
@ -60,13 +63,13 @@ on that line.
## Version compatibility
Map Tools is currently primarily tested with Minetest 0.4.16.
Map Tools is currently primarily tested with Minetest 0.4.17.
It may or may not work with newer or older versions. Issues arising in older
versions than 0.4.16 will generally not be fixed.
versions than 0.4.17 will generally not be fixed.
## License
Copyright © 2012-2017 Hugo Locurcio and contributors
Copyright © 2012-2019 Hugo Locurcio and contributors
- Map Tools code is licensed under the zlib license, see
[`LICENSE.md`](LICENSE.md) for details.

View File

@ -1 +1,2 @@
default
intllib?

View File

@ -217,7 +217,7 @@ function mesecon.mvps_move_objects(pos, dir, nodestack, movefactor)
movefactor = movefactor or 1
dir = vector.multiply(dir, movefactor)
for id, obj in pairs(minetest.object_refs) do
local obj_pos = obj:getpos()
local obj_pos = obj:get_pos()
local cbox = obj:get_properties().collisionbox
local min_pos = vector.add(obj_pos, vector.new(cbox[1], cbox[2], cbox[3]))
local max_pos = vector.add(obj_pos, vector.new(cbox[4], cbox[5], cbox[6]))

View File

@ -2,5 +2,5 @@
Molehills_Max_Count = 320 -- absolute maximum number in an area of 80x80x80 nodes
Molehills_Rarity = 87 -- larger values make molehills more rare (100 means chance of 0 %)
Molehills_Rarity = 95 -- larger values make molehills more rare (100 means chance of 0 %)

View File

@ -7,8 +7,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased]
## [1.3.0] - 2019-03-23
### Changed
- Stairs+ are now displayed in the creative inventory by default.
- Localization files now use the gettext `.po` format.
- Updated intllib support to avoid using deprecated functions.
### Fixed
@ -68,6 +72,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Initial versioned release.
[Unreleased]: https://github.com/minetest-mods/moreblocks/compare/v1.2.0...HEAD
[Unreleased]: https://github.com/minetest-mods/moreblocks/compare/v1.3.0...HEAD
[1.3.0]: https://github.com/minetest-mods/moreblocks/compare/v1.2.0...v1.3.0
[1.2.0]: https://github.com/minetest-mods/moreblocks/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/minetest-mods/moreblocks/compare/v1.0.0...v1.1.0

View File

@ -60,9 +60,9 @@ on that line.
## Version compatibility
More Blocks is currently primarily tested with Minetest 0.4.16.
More Blocks is currently primarily tested with Minetest 0.4.17.
It may or may not work with newer or older versions. Issues arising in older
versions than 0.4.16 will generally not be fixed.
versions than 0.4.17 will generally not be fixed.
## License

View File

@ -6,6 +6,7 @@ Licensed under the zlib license. See LICENSE.md for more information.
--]]
local S = moreblocks.S
local F = minetest.formspec_escape
circular_saw = {}
@ -126,15 +127,20 @@ end
function circular_saw:reset(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local owned_by = meta:get_string("owner")
if owned_by and owned_by ~= "" then
owned_by = (" (%s)"):format(S("owned by @1", meta:get_string("owner")))
else
owned_by = ""
end
inv:set_list("input", {})
inv:set_list("micro", {})
inv:set_list("output", {})
meta:set_int("anz", 0)
meta:set_string("infotext",
S("Circular Saw is empty (owned by %s)")
:format(meta:get_string("owner") or ""))
meta:set_int("anz", 0)
meta:set_string("infotext", S("Circular Saw is empty") .. owned_by)
end
@ -164,9 +170,17 @@ function circular_saw:update_inventory(pos, amount)
end
local node_name = stack:get_name() or ""
local node_def = stack:get_definition()
local name_parts = circular_saw.known_nodes[node_name] or ""
local modname = name_parts[1] or ""
local material = name_parts[2] or ""
local owned_by = meta:get_string("owner")
if owned_by and owned_by ~= "" then
owned_by = (" (%s)"):format(S("owned by @1", meta:get_string("owner")))
else
owned_by = ""
end
inv:set_list("input", { -- Display as many full blocks as possible:
node_name.. " " .. math.floor(amount / 8)
@ -191,8 +205,10 @@ function circular_saw:update_inventory(pos, amount)
meta:set_int("anz", amount)
meta:set_string("infotext",
S("Circular Saw is working on %s (owned by %s)")
:format(material, meta:get_string("owner") or ""))
S("Circular Saw is working on @1",
node_def and node_def.description or material
) .. owned_by
)
end
@ -351,14 +367,14 @@ function circular_saw.on_construct(pos)
local fancy_inv = default.gui_bg..default.gui_bg_img..default.gui_slots
meta:set_string(
"formspec", "size[11,10]"..fancy_inv..
"label[0,0;" ..S("Input\nmaterial").. "]" ..
"label[0,0;" ..F(S("Input\nmaterial")).. "]" ..
"list[current_name;input;1.5,0;1,1;]" ..
"label[0,1;" ..S("Left-over").. "]" ..
"label[0,1;" ..F(S("Left-over")).. "]" ..
"list[current_name;micro;1.5,1;1,1;]" ..
"label[0,2;" ..S("Recycle\noutput").. "]" ..
"label[0,2;" ..F(S("Recycle\noutput")).. "]" ..
"list[current_name;recycle;1.5,2;1,1;]" ..
"field[0.3,3.5;1,1;max_offered;" ..S("Max").. ":;${max_offered}]" ..
"button[1,3.2;1,1;Set;" ..S("Set").. "]" ..
"field[0.3,3.5;1,1;max_offered;" ..F(S("Max")).. ":;${max_offered}]" ..
"button[1,3.2;1,1;Set;" ..F(S("Set")).. "]" ..
"list[current_name;output;2.8,0;8,6;]" ..
"list[current_player;main;1.5,6.25;8,4;]" ..
"listring[current_name;output]" ..
@ -427,10 +443,14 @@ minetest.register_node("moreblocks:circular_saw", {
after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
local owner = placer and placer:get_player_name() or ""
local owned_by = owner
if owner ~= "" then
owned_by = (" (%s)"):format(S("owned by @1", owner))
end
meta:set_string("owner", owner)
meta:set_string("infotext",
S("Circular Saw is empty (owned by %s)")
:format(owner))
meta:set_string("infotext", S("Circular Saw is empty") .. owned_by)
end,
-- The amount of items offered per shape can be configured:

View File

@ -26,4 +26,4 @@ local function setting(settingtype, name, default)
end
-- Show stairs/slabs/panels/microblocks in creative inventory (true or false):
setting("bool", "stairsplus_in_creative_inventory", false)
setting("bool", "stairsplus_in_creative_inventory", true)

286
moreblocks/locale/de.po Normal file
View File

@ -0,0 +1,286 @@
# German translation for More Blocks.
# Copyright © 2011-2019 Hugo Locurcio and contributors
# This file is distributed under the same license as the More Blocks package.
# Xanthin, 2014.
# CodeXP <codexp@gmx.net>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: More Blocks\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 12:37+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: circular_saw.lua
msgid "Circular Saw"
msgstr "Kreissäge"
#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""
"Ausgangs-\n"
"material"
#: circular_saw.lua
msgid "Left-over"
msgstr "Rest"
#: circular_saw.lua
msgid "Max"
msgstr "Anzahl"
#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""
"Wiederver-\n"
"werten"
#: circular_saw.lua
msgid "Set"
msgstr "Ok"
#: circular_saw.lua
msgid "owned by @1"
msgstr "gehört @1"
#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr "Kreissäge ist leer"
#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr "Kreissäge arbeitet mit @1"
#: init.lua
msgid "[moreblocks] loaded."
msgstr "[moreblocks] geladen."
#: nodes.lua
msgid "Deprecated"
msgstr "veraltet"
#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr "allseitiger Akazienbaumstamm"
#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr "allseitiger Espenbaumstamm"
#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr "allseitiger Tropenbaumstamm"
#: nodes.lua
msgid "All-faces Pine Tree"
msgstr "allseitiger Kieferbaumstamm"
#: nodes.lua
msgid "All-faces Tree"
msgstr "allseitiger Baumstamm"
#: nodes.lua
msgid "Cactus Brick"
msgstr "Kaktusziegel"
#: nodes.lua
msgid "Cactus Checker"
msgstr "Kaktus-Mosaik"
#: nodes.lua
msgid "Centered Wooden Tile"
msgstr "Holzfliese mittig"
#: nodes.lua
msgid "Checker Stone Tile"
msgstr "Stein-Mosaik"
#: nodes.lua
msgid "Circle Stone Bricks"
msgstr "Kreissteinziegel"
#: nodes.lua
msgid "Clean Glass"
msgstr "Klares Glas"
#: nodes.lua
msgid "Coal Checker"
msgstr "Kohlen-Mosaik"
#: nodes.lua
msgid "Coal Glass"
msgstr "Kohleglas"
#: nodes.lua
msgid "Coal Stone"
msgstr "Kohlestein"
#: nodes.lua
msgid "Coal Stone Bricks"
msgstr "Kohlesteinziegel"
#: nodes.lua
msgid "Compressed Cobblestone"
msgstr "Gepresster Kopfsteinpflaster"
#: nodes.lua
msgid "Compressed Dirt"
msgstr "Gepresste Erde"
#: nodes.lua
msgid "Copper Patina Block"
msgstr "Kupfer Edelrostblock"
#: nodes.lua
msgid "Empty Shelf"
msgstr "Leeres Regal"
#: nodes.lua
msgid "Full Wooden Tile"
msgstr "Vollholzfliese"
#: nodes.lua
msgid "Glow Glass"
msgstr "Leuchtglas"
#: nodes.lua
msgid "Iron Checker"
msgstr "Metall-Mosaik"
#: nodes.lua
msgid "Iron Glass"
msgstr "metallisiertes Glas"
#: nodes.lua
msgid "Iron Stone"
msgstr "Eisenstein"
#: nodes.lua
msgid "Iron Stone Bricks"
msgstr "Eisensteinziegel"
#: nodes.lua
msgid "Plankstone"
msgstr "Brettstein"
#: nodes.lua
msgid "Rope"
msgstr "Seil"
#: nodes.lua
msgid "Split Stone Tile"
msgstr "Geteilte Steinfliese"
#: nodes.lua
msgid "Stone Bricks"
msgstr "Steinziegel"
#: nodes.lua
msgid "Stone Tile"
msgstr "Steinfliese"
#: nodes.lua
msgid "Super Glow Glass"
msgstr "Superleuchtglas"
#: nodes.lua
msgid "Sweeper"
msgstr "Besen"
#: nodes.lua
msgid "Tar"
msgstr "Teer"
#: nodes.lua
msgid "Trap Desert Stone"
msgstr "Wüstensteinfalle"
#: nodes.lua
msgid "Trap Glass"
msgstr "Glasfalle"
#: nodes.lua
msgid "Trap Glow Glass"
msgstr "Leuchtglasfalle"
#: nodes.lua
msgid "Trap Obsidian"
msgstr "Obsidianfalle"
#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr "Obsidianglasfalle"
#: nodes.lua
msgid "Trap Sandstone"
msgstr "Sandsteinfalle"
#: nodes.lua
msgid "Trap Stone"
msgstr "Steinfalle"
#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr "Superleuchtglasfalle"
#: nodes.lua
msgid "Wooden Tile"
msgstr "Holzfliese"
#: nodes.lua
msgid "Offset Wooden Tile"
msgstr "Holzfliese versetzt"
#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr "Holzfliese unten"
#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr "Holzfliese links"
#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr "Holzfliese rechts"
#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr "Tut mir leid, dieser Bereich gehört @1."
#: ownership.lua
msgid "someone"
msgstr "jemand"
#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr "%smikroblock"
#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr "%splatte"
#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr "%sneigung"
#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr "%spaneel"
#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr "%streppe"

View File

@ -1,66 +0,0 @@
# Translation by Xanthin
###init.lua###
[moreblocks] loaded. = [moreblocks] geladen.
###nodes.lua###
Jungle Wood Fence = Tropenholzzaun
Empty Bookshelf = Leeres Buecherregal
Clean Glass = Klares Glas
Plankstone = Brettstein
Wooden Tile = Holzfliese
Full Wooden Tile = Vollholzfliese
Centered Wooden Tile = Holzfliese mittig
Up Wooden Tile = Holzfliese oben
Down Wooden Tile = Holzfliese unten
Left Wooden Tile = Holzfliese links
Right Wooden Tile = Holzfliese rechts
Circle Stone Bricks = Kreissteinziegel
Stone Tile = Steinfliese
Split Stone Tile = Geteilte Steinfliese
Glow Glass = Leuchtglas
Super Glow Glass = Superleuchtglas
Coal Glass = Kohleglas
Iron Glass = Eisenglas
Coal Checker = Karierte Kohle
Iron Checker = Kariertes Eisen
Trap Stone = Steinfalle
Trap Glass = Glasfalle
Trap Glow Glass = Leuchtglasfalle
Trap Super Glow Glass = Superleuchtglasfalle
Coal Stone = Kohlestein
Iron Stone = Eisenstein
Coal Stone Bricks = Kohlesteinziegel
Iron Stone Bricks = Eisensteinziegel
Cactus Checker = Karierter Kaktus
Cactus Brick = Kaktusziegel
Sweeper = Besen
Jungle Stick = Tropenholzstock
Rope = Seil
All-faces Tree = Baumscheibenstamm
###circular_saw.lua###
Circular Saw = Kreissaege
Circular saw, empty (owned by %s) = Kreissaege, leer (gehoert %s)
Circular saw, working with %s (owned by %s) = Kreissaege, arbeitet mit %s (gehoert %s)
Circular saw, empty = Kreissaege, leer
Circular saw is empty (owned by %s) = Kreissaege ist leer (gehoert %s)
Input\nmaterial = Ausgangs-\nmaterial
Left-over = Rest
Max = Anzahl
Set = Ok
Recycle\noutput = Wiederver-\nwerten
###./stairsplus/*###
%s Stairs = %streppe
%s Slab = %sstufe
%s Panel = %spaneel
%s Microblock = %smikroblock
%s Pane = %sscheibe
%s Fence = %szaun
###ownership.lua###
someone = jemand
Sorry, %s owns that spot. = Tut mir leid, %s gehoert diese Stelle.

282
moreblocks/locale/es.po Normal file
View File

@ -0,0 +1,282 @@
# Spanish translation for More Blocks.
# Copyright © 2011-2019 Hugo Locurcio and contributors
# This file is distributed under the same license as the More Blocks package.
# kaeza, 2013.
# CodeXP <codexp@gmx.net>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: More Blocks\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 12:37+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\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"
#: circular_saw.lua
msgid "Circular Saw"
msgstr ""
#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""
#: circular_saw.lua
msgid "Left-over"
msgstr ""
#: circular_saw.lua
msgid "Max"
msgstr ""
#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""
#: circular_saw.lua
msgid "Set"
msgstr ""
#: circular_saw.lua
msgid "owned by @1"
msgstr ""
#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr ""
#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr ""
#: init.lua
msgid "[moreblocks] loaded."
msgstr "[moreblocks] cargado."
#: nodes.lua
msgid "Deprecated"
msgstr ""
#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Pine Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Tree"
msgstr "Tronco de Árbol"
#: nodes.lua
msgid "Cactus Brick"
msgstr "Ladrillos de Cactus"
#: nodes.lua
msgid "Cactus Checker"
msgstr "Cuadros de Cactus"
#: nodes.lua
msgid "Centered Wooden Tile"
msgstr "Parquet Centrado"
#: nodes.lua
msgid "Checker Stone Tile"
msgstr ""
#: nodes.lua
msgid "Circle Stone Bricks"
msgstr "Bloques de Piedra Circulares"
#: nodes.lua
msgid "Clean Glass"
msgstr "Cristal Limpio"
#: nodes.lua
msgid "Coal Checker"
msgstr "Cuadros de Carbón"
#: nodes.lua
msgid "Coal Glass"
msgstr "Cristal con Carbón"
#: nodes.lua
msgid "Coal Stone"
msgstr "Carbón y Piedra"
#: nodes.lua
msgid "Coal Stone Bricks"
msgstr ""
#: nodes.lua
msgid "Compressed Cobblestone"
msgstr ""
#: nodes.lua
msgid "Compressed Dirt"
msgstr ""
#: nodes.lua
msgid "Copper Patina Block"
msgstr ""
#: nodes.lua
msgid "Empty Shelf"
msgstr ""
#: nodes.lua
msgid "Full Wooden Tile"
msgstr "Parquet Completo"
#: nodes.lua
msgid "Glow Glass"
msgstr "Cristal Brillante"
#: nodes.lua
msgid "Iron Checker"
msgstr "Cuadros de Hierro"
#: nodes.lua
msgid "Iron Glass"
msgstr "Cristal con Hierro"
#: nodes.lua
msgid "Iron Stone"
msgstr "Hierro y Piedra"
#: nodes.lua
msgid "Iron Stone Bricks"
msgstr ""
#: nodes.lua
msgid "Plankstone"
msgstr "Tablones de piedra"
#: nodes.lua
msgid "Rope"
msgstr "Soga"
#: nodes.lua
msgid "Split Stone Tile"
msgstr "Baldosas de Piedra Partida"
#: nodes.lua
msgid "Stone Bricks"
msgstr ""
#: nodes.lua
msgid "Stone Tile"
msgstr "Baldosa de Piedra"
#: nodes.lua
msgid "Super Glow Glass"
msgstr "Cristal Súper Brillante"
#: nodes.lua
msgid "Sweeper"
msgstr "Limpiador"
#: nodes.lua
msgid "Tar"
msgstr ""
#: nodes.lua
msgid "Trap Desert Stone"
msgstr ""
#: nodes.lua
msgid "Trap Glass"
msgstr "Cristal Trampa"
#: nodes.lua
msgid "Trap Glow Glass"
msgstr ""
#: nodes.lua
msgid "Trap Obsidian"
msgstr ""
#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr ""
#: nodes.lua
msgid "Trap Sandstone"
msgstr ""
#: nodes.lua
msgid "Trap Stone"
msgstr "Piedra Trampa"
#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr ""
#: nodes.lua
msgid "Wooden Tile"
msgstr "Parquet"
#: nodes.lua
msgid "Offset Wooden Tile"
msgstr ""
#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr ""
#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr ""
#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr ""
#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr ""
#: ownership.lua
msgid "someone"
msgstr ""
#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr "Microbloque de %s"
#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr "Losa de %s"
#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr ""
#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr "Panel de %s"
#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr "Escalera de %s"

View File

@ -1,65 +0,0 @@
###init.lua###
[moreblocks] loaded. = [moreblocks] cargado.
###nodes.lua###
Jungle Wood Fence = Valla de madera tropical
Empty Bookshelf = Librería vacía
Clean Glass = Cristal límpido
Plankstone = Piedra en planchas
Wooden Tile = Caldosa de madera
Full Wooden Tile = Parquet completo
Centered Wooden Tile = Parquet centrado
Up Wooden Tile = Parquet superior
Down Wooden Tile = Parquet inferior
Left Wooden Tile = Parquet izquierdo
Right Wooden Tile = Parquet derecho
Circle Stone Bricks = Ladrillo de piedra circulares
Stone Tile = Baldosa de piedra
Split Stone Tile = Baldosa de piedra partida
Glow Glass = Cristal brillante
Super Glow Glass = Cristal súper brillante
Coal Glass = Cristal armado de carbón
Iron Glass = Cristal armado de hierro
Coal Checker = Mosaico de carbón
Iron Checker = Mosaico de hierro
Trap Stone = Trampa de piedra
Trap Glass = Trampa de cristal
Trap Glow Glass = Trampa de cristal brillante
Trap Super Glow Glass = Trampa de cristal súper brillante
Coal Stone = Piedra con carbón
Iron Stone = Piedra con hierro
Coal Stone Bricks = Ladrillos de piedra con carbón
Iron Stone Bricks = Ladrillos de piedra con hierro
Cactus Checker = Mosaico de cactus
Cactus Brick = Ladrillo de cactus
Sweeper = Limpiador
Jungle Stick = Palo de madera tropical
Rope = Cuerda
All-faces Tree = madera
###circular_saw.lua###
Circular Saw = Sierra circular
Circular saw, empty (owned by %s) = Sierra circular, vacía (propiedad de %s)
Circular saw, working with %s (owned by %s) = Sierra circular, trabajando con %s (propiedad de %s)
Circular saw, empty = Sierra circular, vacía
Circular saw is empty (owned by %s) = La sierra circular está vacía (propiedad de %s)
Input\nmaterial = Entrada de\nmaterial:
Left-over = Remanente:
Max = Máx.
Set = Guardar
Recycle\noutput = Salida de\nreciclaje:
###ownership.lua###
someone = alguien
Sorry, %s owns that spot. = Lo siento, esto pertenece a %s.
###./stairsplus/*###
%s Stairs = Escaleras de %s
%s Slab = Losa de %s
%s Panel = Panel de %s
%s Microblock = Microbloque de %s
%s Slope = Biselado de %s
%s Pane = Panel de %s
%s Fence = Valla de %s

287
moreblocks/locale/fr.po Normal file
View File

@ -0,0 +1,287 @@
# French translation for More Blocks.
# Copyright © 2011-2019 Hugo Locurcio and contributors
# This file is distributed under the same license as the More Blocks package.
# Hugo Locurcio <hugo.locurcio@hugo.pro>, 2013-2019.
# Jat15, 2013.
# CodeXP <codexp@gmx.net>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: More Blocks\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 12:37+0200\n"
"PO-Revision-Date: 2019-03-20 21:10+0100\n"
"Last-Translator: Hugo Locurcio <hugo.locurcio@hugo.pro>\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"
#: circular_saw.lua
msgid "Circular Saw"
msgstr "Scie circulaire"
#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""
"Matériau\n"
"d'entrée"
#: circular_saw.lua
msgid "Left-over"
msgstr "Reste"
#: circular_saw.lua
msgid "Max"
msgstr "Max"
#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""
"Sortie à\n"
"recycler"
#: circular_saw.lua
msgid "Set"
msgstr "Définir"
#: circular_saw.lua
msgid "owned by @1"
msgstr "propriété de @1"
#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr "Scie circulaire vide"
#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr "Scie circulaire manipulant @1"
#: init.lua
msgid "[moreblocks] loaded."
msgstr "[moreblocks] a été chargé."
#: nodes.lua
msgid "Deprecated"
msgstr "déprécié"
#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr "Tronc d'arbre d'acacia (toutes faces)"
#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr "Tronc d'arbre de peuplier (toutes faces)"
#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr "Tronc d'arbre de jungle (toutes faces)"
#: nodes.lua
msgid "All-faces Pine Tree"
msgstr "Tronc d'arbre de pin (toutes faces)"
#: nodes.lua
msgid "All-faces Tree"
msgstr "Tronc d'arbre (toutes faces)"
#: nodes.lua
msgid "Cactus Brick"
msgstr "Briques de cactus"
#: nodes.lua
msgid "Cactus Checker"
msgstr "Damier en cactus"
#: nodes.lua
msgid "Centered Wooden Tile"
msgstr "Dalle en bois centrée"
#: nodes.lua
msgid "Checker Stone Tile"
msgstr "Damier de dalle en pierre"
#: nodes.lua
msgid "Circle Stone Bricks"
msgstr "Briques en pierre circulaires"
#: nodes.lua
msgid "Clean Glass"
msgstr "Verre propre"
#: nodes.lua
msgid "Coal Checker"
msgstr "Damier en charbon"
#: nodes.lua
msgid "Coal Glass"
msgstr "Verre de charbon"
#: nodes.lua
msgid "Coal Stone"
msgstr "Pierre de charbon"
#: nodes.lua
msgid "Coal Stone Bricks"
msgstr "Briques en pierre de charbon"
#: nodes.lua
msgid "Compressed Cobblestone"
msgstr "Pierre taillée compressée"
#: nodes.lua
msgid "Compressed Dirt"
msgstr "Terre compressée"
#: nodes.lua
msgid "Copper Patina Block"
msgstr "Bloc de patine de cuivre"
#: nodes.lua
msgid "Empty Shelf"
msgstr "Étagère vide"
#: nodes.lua
msgid "Full Wooden Tile"
msgstr "Dalle en bois complète"
#: nodes.lua
msgid "Glow Glass"
msgstr "Verre brillant"
#: nodes.lua
msgid "Iron Checker"
msgstr "Damier de fer"
#: nodes.lua
msgid "Iron Glass"
msgstr "Verre de fer"
#: nodes.lua
msgid "Iron Stone"
msgstr "Pierre de fer"
#: nodes.lua
msgid "Iron Stone Bricks"
msgstr "Briques en pierre de fer"
#: nodes.lua
msgid "Plankstone"
msgstr "Pierre-bois"
#: nodes.lua
msgid "Rope"
msgstr "Corde"
#: nodes.lua
msgid "Split Stone Tile"
msgstr "Dalle en pierre découpée"
#: nodes.lua
msgid "Stone Bricks"
msgstr "Briques en pierre"
#: nodes.lua
msgid "Stone Tile"
msgstr "Dalle en pierre"
#: nodes.lua
msgid "Super Glow Glass"
msgstr "Verre très brillant"
#: nodes.lua
msgid "Sweeper"
msgstr "Balai"
#: nodes.lua
msgid "Tar"
msgstr "Bitume"
#: nodes.lua
msgid "Trap Desert Stone"
msgstr "Pierre du désert traversable"
#: nodes.lua
msgid "Trap Glass"
msgstr "Verre traversable"
#: nodes.lua
msgid "Trap Glow Glass"
msgstr "Verre brillant traversable"
#: nodes.lua
msgid "Trap Obsidian"
msgstr "Obsidienne traversable"
#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr "Verre d'obsidienne traversable"
#: nodes.lua
msgid "Trap Sandstone"
msgstr "Grès traversable"
#: nodes.lua
msgid "Trap Stone"
msgstr "Pierre traversable"
#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr "Verre très brillant traversable"
#: nodes.lua
msgid "Wooden Tile"
msgstr "Dalle en bois"
#: nodes.lua
msgid "Offset Wooden Tile"
msgstr "Dalle en bois décalée"
#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr "Dalle en bois vers le bas"
#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr "Dalle en bois vers la gauche"
#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr "Dalle en bois vers la droite"
#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr "Désolé, @1 possède cet endroit."
#: ownership.lua
msgid "someone"
msgstr "quelqu'un"
#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr "Microbloc en %s"
#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr "Demi-dalle en %s"
#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr "Pente en %s"
#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr "Barre en %s"
#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr "Escaliers en %s"

View File

@ -1,72 +0,0 @@
# Translation by Calinou
###init.lua###
[moreblocks] loaded. = [moreblocks] a été chargé.
Jungle Wooden Planks = Planches de bois de jungle
Empty Bookshelf = Ètagère vide
Clean Glass = Verre propre
Plankstone = Pierre-bois
Wooden Tile = Dalle en bois
Full Wooden Tile = Dalle en bois complète
Centered Wooden Tile = Dalle en bois centrée
Up Wooden Tile = Dalle en bois vers le haut
Down Wooden Tile = Dalle en bois vers le bas
Left Wooden Tile = Dalle en bois vers la gauche
Right Wooden Tile = Dalle en bois vers la droite
Circle Stone Bricks = Briques en pierre circulaires
Stone Tile = Dalle en pierre
Split Stone Tile = Dalle en pierre découpée
Glow Glass = Verre brillant
Super Glow Glass = Verre très brillant
Coal Glass = Verre de charbon
Iron Glass = Verre de fer
Coal Checker = Damier en charbon
Iron Checker = Damier en fer
Trap Stone = Pierre traversable
Trap Glass = Verre traversable
Trap Glow Glass = Verre brillant traversable
Trap Super Glow Glass = Verre très brillant traversable
Coal Stone = Pierre de charbon
Iron Stone = Pierre de fer
Coal Stone Bricks = Briques en pierre de charbon
Iron Stone Bricks = Briques en pierre de fer
Cactus Checker = Damier en cactus
Cactus Brick = Briques de cactus
Sweeper = Balai
Jungle Stick = Bâton en bois de jungle
Horizontal Tree = Tronc d'arbre horizontal
Horizontal Jungle Tree = Tronc d'arbre de jungle horizontal
Rope = Corde
All-faces Tree = Tronc d'arbre
###redefinition.lua###
Wooden = bois
Papyrus = Papyrus
Dry Shrub = Buisson mort
Sapling = Pousse d'arbre
Wooden Planks = Planches de bois
Ladder = Échelle
Glass = Verre
###circular_saw.lua###
Circular Saw = Scie circulaire
Circular saw, empty (owned by %s) = Scie circulaire, vide (propriété de %s)
Circular saw, working with %s (owned by %s) = Scie circulaire, manipule %s (propriété de %s)
Circular saw, empty = Scie circulaire, vide
Circular saw is empty (owned by %s) = Scie circulaire est vide (propriété de %s)
Input material = Entrée du matériel
Rest/microblocks = Reste/microbloc
Max: = Max:
Set = Fixer
Recycle output = Recyclage
###./stairsplus/*###
%s Stairs = Escaliers en %s
%s Slab = Demi-dalle en %s
%s Panel = Barre en %s
%s Microblock = Microbloc en %s
%s Pane = Panneau en %s
%s Fence = Barrière en %s

286
moreblocks/locale/it.po Normal file
View File

@ -0,0 +1,286 @@
# Italian translation for More Blocks.
# Copyright © 2011-2019 Hugo Locurcio and contributors
# This file is distributed under the same license as the More Blocks package.
# Emon, 2016.
# CodeXP <codexp@gmx.net>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: More Blocks\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 12:37+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: circular_saw.lua
msgid "Circular Saw"
msgstr "Sega circolare"
#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""
"Materiale\n"
"iniziale"
#: circular_saw.lua
msgid "Left-over"
msgstr "Scarto"
#: circular_saw.lua
msgid "Max"
msgstr "Max."
#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""
"Ricicla\n"
"finale"
#: circular_saw.lua
msgid "Set"
msgstr "Imp."
#: circular_saw.lua
msgid "owned by @1"
msgstr ""
#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr "Sega circolare, vuota"
#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr "Sega circolare, in funzione su @1"
#: init.lua
msgid "[moreblocks] loaded."
msgstr "[moreblocks] caricato."
#: nodes.lua
msgid "Deprecated"
msgstr ""
#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Pine Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Tree"
msgstr "Albero su ogni lato"
#: nodes.lua
msgid "Cactus Brick"
msgstr "Mattoni di cactus"
#: nodes.lua
msgid "Cactus Checker"
msgstr "Scacchiera in cactus"
#: nodes.lua
msgid "Centered Wooden Tile"
msgstr "Mattonella in legno centrata"
#: nodes.lua
msgid "Checker Stone Tile"
msgstr ""
#: nodes.lua
msgid "Circle Stone Bricks"
msgstr "Mattoni concentrici in pietra"
#: nodes.lua
msgid "Clean Glass"
msgstr "Vetro pulito"
#: nodes.lua
msgid "Coal Checker"
msgstr "Scacchiera in carbone"
#: nodes.lua
msgid "Coal Glass"
msgstr "Vetro e carbone"
#: nodes.lua
msgid "Coal Stone"
msgstr "Pietra in carbone"
#: nodes.lua
msgid "Coal Stone Bricks"
msgstr "Mattoni di pietra in carbone"
#: nodes.lua
msgid "Compressed Cobblestone"
msgstr ""
#: nodes.lua
msgid "Compressed Dirt"
msgstr ""
#: nodes.lua
msgid "Copper Patina Block"
msgstr ""
#: nodes.lua
msgid "Empty Shelf"
msgstr "Scaffale Vuoto"
#: nodes.lua
msgid "Full Wooden Tile"
msgstr "Mattonella in legno pieno"
#: nodes.lua
msgid "Glow Glass"
msgstr "Vetro luminoso"
#: nodes.lua
msgid "Iron Checker"
msgstr "Scacchiera in ferro"
#: nodes.lua
msgid "Iron Glass"
msgstr "Vetro e ferro"
#: nodes.lua
msgid "Iron Stone"
msgstr "Pietra in ferro"
#: nodes.lua
msgid "Iron Stone Bricks"
msgstr "Mattoni di pietra in ferro"
#: nodes.lua
msgid "Plankstone"
msgstr "Pietra e legno"
#: nodes.lua
msgid "Rope"
msgstr "Corda"
#: nodes.lua
msgid "Split Stone Tile"
msgstr "Mattonella in pietra divisa"
#: nodes.lua
msgid "Stone Bricks"
msgstr ""
#: nodes.lua
msgid "Stone Tile"
msgstr "Mattonella in pietra"
#: nodes.lua
msgid "Super Glow Glass"
msgstr "Super vetro luminoso"
#: nodes.lua
msgid "Sweeper"
msgstr "Spazzola"
#: nodes.lua
msgid "Tar"
msgstr ""
#: nodes.lua
msgid "Trap Desert Stone"
msgstr ""
#: nodes.lua
msgid "Trap Glass"
msgstr "Vetro trappola"
#: nodes.lua
msgid "Trap Glow Glass"
msgstr "Vetro luminoso trappola"
#: nodes.lua
msgid "Trap Obsidian"
msgstr ""
#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr ""
#: nodes.lua
msgid "Trap Sandstone"
msgstr ""
#: nodes.lua
msgid "Trap Stone"
msgstr "Pietra trappola"
#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr "Super vetro luminoso trappola"
#: nodes.lua
msgid "Wooden Tile"
msgstr "Mattonella in legno"
#: nodes.lua
msgid "Offset Wooden Tile"
msgstr ""
#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr ""
#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr ""
#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr ""
#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr "Spiacente, quel punto è di proprietà di @1"
#: ownership.lua
msgid "someone"
msgstr "qualcuno"
#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr "Microblocco %s"
#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr "Lastra - %s"
#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr ""
#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr "Pannello - %s"
#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr "Scale - %s"

View File

@ -1,70 +0,0 @@
#
# Italian translation
# Translator: Emon
#
###init.lua###
[moreblocks] loaded. = [moreblocks] caricato.
###nodes.lua###
Jungle Wood Fence = Recinzione in legno della giungla
Empty Bookshelf = Libreria vuota
Clean Glass = Vetro pulito
Plankstone = Pietra e legno
Wooden Tile = Mattonella in legno
Full Wooden Tile = Mattonella in legno pieno
Centered Wooden Tile = Mattonella in legno centrata
Up Wooden Tile = Mattonella in legno verso l'alto
Down Wooden Tile = Mattonella in legno verso il basso
Left Wooden Tile = Mattonella in legno verso sinistra
Right Wooden Tile = Mattonella in legno verso destra
Circle Stone Bricks = Mattoni concentrici in pietra
Stone Tile = Mattonella in pietra
Split Stone Tile = Mattonella in pietra divisa
Glow Glass = Vetro luminoso
Super Glow Glass = Super vetro luminoso
Coal Glass = Vetro e carbone
Iron Glass = Vetro e ferro
Coal Checker = Scacchiera in carbone
Iron Checker = Scacchiera in ferro
Trap Stone = Pietra trappola
Trap Glass = Vetro trappola
Trap Glow Glass = Vetro luminoso trappola
Trap Super Glow Glass = Super vetro luminoso trappola
Coal Stone = Pietra in carbone
Iron Stone = Pietra in ferro
Coal Stone Bricks = Mattoni di pietra in carbone
Iron Stone Bricks = Mattoni di pietra in ferro
Cactus Checker = Scacchiera in cactus
Cactus Brick = Mattoni di cactus
Sweeper = Spazzola
Jungle Stick = Bastone in legno della giungla
Rope = Corda
All-faces Tree = Albero su ogni lato
###circular_saw.lua###
Circular Saw = Sega circolare
Circular saw, empty (owned by %s) = Sega circolare, vuota (di proprietà di %s)
Circular saw, working with %s (owned by %s) = Sega circolare, in funzione su %s (di proprietà di %s)
Circular saw, empty = Sega circolare, vuota
Circular saw is empty (owned by %s) = La sega circolare è vuota (di proprietà di %s)
Input\nmaterial = Materiale\niniziale
Left-over = Scarto
Max = Max.
Set = Imp.
Recycle\noutput = Ricicla\nfinale
###ownership.lua###
someone = qualcuno
Sorry, %s owns that spot. = Spiacente, quel punto è di proprietà di %s
###./stairsplus/*###
%s Stairs = Scale - %s
%s Slab = Lastra - %s
%s Panel = Pannello - %s
%s Microblock = Microblocco %s
%s Pane = Pannello - %s
%s Fence = Recinzione - %s

290
moreblocks/locale/ru.po Normal file
View File

@ -0,0 +1,290 @@
# Russian translation for MOREBLOCKS minetest mod.
# Copyright (C) 2018 Hugo Locurcio and contributors
# This file is distributed under the same license as the MOREBLOCKS package.
# CodeXP <codexp@gmx.net>, 2018.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: MOREBLOCKS MOD\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 23:30+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: circular_saw.lua
msgid "Circular Saw"
msgstr "циркулярная пила"
#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""
"Входной\n"
"материал"
#: circular_saw.lua
msgid "Left-over"
msgstr "Остатки"
#: circular_saw.lua
msgid "Max"
msgstr "Кол."
#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""
"Пере-\n"
"обработка"
#: circular_saw.lua
msgid "Set"
msgstr "ОК"
#: circular_saw.lua
msgid "owned by @1"
msgstr "принадлежит @1"
#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr "циркулярная пила пустая"
#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr "циркулярная пила, @1 в обработке"
#: init.lua
msgid "[MOD] moreblocks loaded."
msgstr "[MOD] moreblocks загружен."
#: nodes.lua
msgid "Deprecated"
msgstr "устаревший"
#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr "всестороннее бревно акации"
#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr "всестороннее бревно осины"
#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr "всестороннее бревно дерева джунглей"
#: nodes.lua
msgid "All-faces Pine Tree"
msgstr "всестороннее бревно сосновое"
#: nodes.lua
msgid "All-faces Tree"
msgstr "всестороннее бревно дерева"
#: nodes.lua
msgid "Cactus Brick"
msgstr "кирпич из кактуса"
#: nodes.lua
msgid "Cactus Checker"
msgstr "мозаика из кактуса"
#: nodes.lua
msgid "Centered Wooden Tile"
msgstr "деревянная мозаика (центр)"
#: nodes.lua
msgid "Checker Stone Tile"
msgstr "каменная мозаика"
#: nodes.lua
msgid "Circle Stone Bricks"
msgstr "кольцевой камень"
#: nodes.lua
msgid "Clean Glass"
msgstr "чистое стекло"
#: nodes.lua
msgid "Coal Checker"
msgstr "угольная мозаика"
#: nodes.lua
msgid "Coal Glass"
msgstr "угольное стекло"
#: nodes.lua
msgid "Coal Stone"
msgstr "угольный камень"
#: nodes.lua
msgid "Coal Stone Bricks"
msgstr "угольно-каменный кирпич"
#: nodes.lua
msgid "Compressed Cobblestone"
msgstr "прессованный булыжник"
#: nodes.lua
msgid "Compressed Dirt"
msgstr "прессованная земля"
#: nodes.lua
msgid "Copper Patina Block"
msgstr "медный патинированный блок"
#: nodes.lua
msgid "Empty Shelf"
msgstr "пустые полки"
#: nodes.lua
msgid "Full Wooden Tile"
msgstr "деревянная мозаика"
#: nodes.lua
msgid "Glow Glass"
msgstr "светящееся стекло"
#: nodes.lua
msgid "Iron Checker"
msgstr "стальная мозаика"
#: nodes.lua
msgid "Iron Glass"
msgstr "металлизированное стекло"
#: nodes.lua
msgid "Iron Stone"
msgstr "железный камень"
#: nodes.lua
msgid "Iron Stone Bricks"
msgstr "железно-каменный кирпич"
#: nodes.lua
msgid "Plankstone"
msgstr "дерево-каменная мозаика"
#: nodes.lua
msgid "Rope"
msgstr "верёвка"
#: nodes.lua
msgid "Split Stone Tile"
msgstr "каменная мозаика"
#: nodes.lua
msgid "Stone Bricks"
msgstr "каменный кирпич"
#: nodes.lua
msgid "Stone Tile"
msgstr "каменная плитка"
#: nodes.lua
msgid "Super Glow Glass"
msgstr "супер светящееся стекло"
#: nodes.lua
msgid "Sweeper"
msgstr "метёлка"
#: nodes.lua
msgid "Tar"
msgstr "смола"
#: nodes.lua
msgid "Trap Desert Stone"
msgstr "мнимый пустынный камень"
#: nodes.lua
msgid "Trap Glass"
msgstr "мнимое стекло"
#: nodes.lua
msgid "Trap Glow Glass"
msgstr "мнимое светящееся стекло"
#: nodes.lua
msgid "Trap Obsidian"
msgstr "мнимый обсидиан"
#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr "мнимое обсидиановое стекло"
#: nodes.lua
msgid "Trap Sandstone"
msgstr "мнимый песчаник"
#: nodes.lua
msgid "Trap Stone"
msgstr "мнимый камень"
#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr "мнимое супер светящееся стекло"
#: nodes.lua
msgid "Wooden Tile"
msgstr "деревянная мозаика"
#: nodes.lua
msgid "Offset Wooden Tile"
msgstr "деревянная мозаика (сверху)"
# @deprecated
#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr "деревянная мозаика (снизу)"
# @deprecated
#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr "деревянная мозаика (слева)"
# @deprecated
#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr "деревянная мозаика (справа)"
#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr "Извините, это принадлежит @1."
#: ownership.lua
msgid "someone"
msgstr "кому-то"
#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr "%s (микроблок)"
#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr "%s (плита)"
#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr "%s (наклон)"
#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr "%s (панель)"
#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr "%s (лестница)"

View File

@ -0,0 +1,284 @@
# Template translation for More Blocks.
# Copyright © 2011-2019 Hugo Locurcio and contributors
# This file is distributed under the same license as the More Blocks package.
# CodeXP <codexp@gmx.net>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: More Blocks\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 12:37+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: circular_saw.lua
msgid "Circular Saw"
msgstr ""
#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""
#: circular_saw.lua
msgid "Left-over"
msgstr ""
#: circular_saw.lua
msgid "Max"
msgstr ""
#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""
#: circular_saw.lua
msgid "Set"
msgstr ""
#: circular_saw.lua
msgid "owned by @1"
msgstr ""
#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr ""
#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr ""
#: init.lua
msgid "[moreblocks] loaded."
msgstr ""
#: nodes.lua
msgid "Deprecated"
msgstr ""
#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Pine Tree"
msgstr ""
#: nodes.lua
msgid "All-faces Tree"
msgstr ""
#: nodes.lua
msgid "Cactus Brick"
msgstr ""
#: nodes.lua
msgid "Cactus Checker"
msgstr ""
#: nodes.lua
msgid "Centered Wooden Tile"
msgstr ""
#: nodes.lua
msgid "Checker Stone Tile"
msgstr ""
#: nodes.lua
msgid "Circle Stone Bricks"
msgstr ""
#: nodes.lua
msgid "Clean Glass"
msgstr ""
#: nodes.lua
msgid "Coal Checker"
msgstr ""
#: nodes.lua
msgid "Coal Glass"
msgstr ""
#: nodes.lua
msgid "Coal Stone"
msgstr ""
#: nodes.lua
msgid "Coal Stone Bricks"
msgstr ""
#: nodes.lua
msgid "Compressed Cobblestone"
msgstr ""
#: nodes.lua
msgid "Compressed Dirt"
msgstr ""
#: nodes.lua
msgid "Copper Patina Block"
msgstr ""
#: nodes.lua
msgid "Empty Shelf"
msgstr ""
#: nodes.lua
msgid "Full Wooden Tile"
msgstr ""
#: nodes.lua
msgid "Glow Glass"
msgstr ""
#: nodes.lua
msgid "Iron Checker"
msgstr ""
#: nodes.lua
msgid "Iron Glass"
msgstr ""
#: nodes.lua
msgid "Iron Stone"
msgstr ""
#: nodes.lua
msgid "Iron Stone Bricks"
msgstr ""
#: nodes.lua
msgid "Plankstone"
msgstr ""
#: nodes.lua
msgid "Rope"
msgstr ""
#: nodes.lua
msgid "Split Stone Tile"
msgstr ""
#: nodes.lua
msgid "Stone Bricks"
msgstr ""
#: nodes.lua
msgid "Stone Tile"
msgstr ""
#: nodes.lua
msgid "Super Glow Glass"
msgstr ""
#: nodes.lua
msgid "Sweeper"
msgstr ""
#: nodes.lua
msgid "Tar"
msgstr ""
#: nodes.lua
msgid "Trap Desert Stone"
msgstr ""
#: nodes.lua
msgid "Trap Glass"
msgstr ""
#: nodes.lua
msgid "Trap Glow Glass"
msgstr ""
#: nodes.lua
msgid "Trap Obsidian"
msgstr ""
#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr ""
#: nodes.lua
msgid "Trap Sandstone"
msgstr ""
#: nodes.lua
msgid "Trap Stone"
msgstr ""
#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr ""
#: nodes.lua
msgid "Wooden Tile"
msgstr ""
#: nodes.lua
msgid "Offset Wooden Tile"
msgstr ""
# @deprecated
#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr ""
# @deprecated
#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr ""
# @deprecated
#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr ""
#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr ""
#: ownership.lua
msgid "someone"
msgstr ""
#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr ""
#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr ""
#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr ""
#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr ""
#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr ""

View File

@ -1,64 +0,0 @@
###init.lua###
[moreblocks] loaded. =
###nodes.lua###
Jungle Wood Fence =
Empty Bookshelf =
Clean Glass =
Plankstone =
Wooden Tile =
Full Wooden Tile =
Centered Wooden Tile =
Up Wooden Tile =
Down Wooden Tile =
Left Wooden Tile =
Right Wooden Tile =
Circle Stone Bricks =
Stone Tile =
Split Stone Tile =
Glow Glass =
Super Glow Glass =
Coal Glass =
Iron Glass =
Coal Checker =
Iron Checker =
Trap Stone =
Trap Glass =
Trap Glow Glass =
Trap Super Glow Glass =
Coal Stone =
Iron Stone =
Coal Stone Bricks =
Iron Stone Bricks =
Cactus Checker =
Cactus Brick =
Sweeper =
Jungle Stick =
Rope =
All-faces Tree =
###circular_saw.lua###
Circular Saw =
Circular saw, empty (owned by %s) =
Circular saw, working with %s (owned by %s) =
Circular saw, empty =
Circular saw is empty (owned by %s) =
Input\nmaterial =
Left-over =
Max =
Set =
Recycle\noutput =
###ownership.lua###
someone =
Sorry, %s owns that spot. =
###./stairsplus/*###
%s Stairs =
%s Slab =
%s Panel =
%s Microblock =
%s Pane =
%s Fence =

View File

@ -36,6 +36,7 @@ local function wood_tile_replace(itemstack, placer, pointed_thing)
return itemstack
end
local deprecated = (" (%s)"):format(S('Deprecated'))
local nodes = {
["wood_tile"] = {
description = S("Wooden Tile"),
@ -52,7 +53,7 @@ local nodes = {
sounds = sound_wood,
},
["wood_tile_flipped"] = {
description = S("Wooden Tile (Deprecated)"),
description = S("Wooden Tile") .. deprecated,
tiles = {"default_wood.png^moreblocks_wood_tile.png^[transformR90",
"default_wood.png^moreblocks_wood_tile.png^[transformR90",
"default_wood.png^moreblocks_wood_tile.png^[transformR90",
@ -87,19 +88,19 @@ local nodes = {
no_stairs = true,
},
["wood_tile_down"] = {
description = S("Downwards Wooden Tile (Deprecated)"),
description = S("Downwards Wooden Tile") .. deprecated,
tiles = {"default_wood.png^[transformR180^moreblocks_wood_tile_offset.png^[transformR180"},
no_stairs = true,
on_place = wood_tile_replace
},
["wood_tile_left"] = {
description = S("Leftwards Wooden Tile (Deprecated)"),
description = S("Leftwards Wooden Tile") .. deprecated,
tiles = {"default_wood.png^[transformR270^moreblocks_wood_tile_offset.png^[transformR270"},
no_stairs = true,
on_place = wood_tile_replace
},
["wood_tile_right"] = {
description = S("Rightwards Wooden Tile (Deprecated)"),
description = S("Rightwards Wooden Tile") .. deprecated,
tiles = {"default_wood.png^[transformR90^moreblocks_wood_tile_offset.png^[transformR90"},
no_stairs = true,
on_place = wood_tile_replace

View File

@ -33,7 +33,7 @@ function moreblocks.node_is_owned(pos, placer)
end
if ownername ~= false then
minetest.chat_send_player( placer:get_player_name(), S("Sorry, %s owns that spot."):format(ownername) )
minetest.chat_send_player( placer:get_player_name(), S("Sorry, @1 owns that spot.", ownername) )
return true
else
return false

View File

@ -7,27 +7,28 @@ Licensed under the zlib license. See LICENSE.md for more information.
local S = moreblocks.S
local descriptions = {
["micro"] = S("%s Microblock"),
["slab"] = S("%s Slab"),
["slope"] = S("%s Slope"),
["panel"] = S("%s Panel"),
["stair"] = S("%s Stairs"),
}
stairsplus.register_single = function(category, alternate, info, modname, subname, recipeitem, fields)
local descriptions = {
["micro"] = S("Microblock"),
["slab"] = S("Slab"),
["slope"] = S("Slope"),
["panel"] = S("Panel"),
["stair"] = S("Stairs"),
}
local desc_base = descriptions[category]:format(fields.description)
local def = {}
if category ~= "slab" then
def = table.copy(info)
end
-- copy fields to def
for k, v in pairs(fields) do
def[k] = v
end
def.drawtype = "nodebox"
if category == "slope" then
def.drawtype = "mesh"
end
def.paramtype = "light"
def.paramtype2 = def.paramtype2 or "facedir"
@ -35,10 +36,9 @@ stairsplus.register_single = function(category, alternate, info, modname, subnam
def.place_param2 = nil
def.on_place = minetest.rotate_node
if category ~= "slab" then
def.description = S("%s " .. descriptions[category]):format(fields.description)
else
local desc_base = S("%s " .. descriptions[category]):format(fields.description)
def.groups = stairsplus:prepare_groups(fields.groups)
if category == "slab" then
if type(info) ~= "table" then
def.node_box = {
type = "fixed",
@ -52,14 +52,19 @@ stairsplus.register_single = function(category, alternate, info, modname, subnam
}
def.description = desc_base .. alternate:gsub("_", " "):gsub("(%a)(%S*)", function(a, b) return a:upper() .. b end)
end
else
def.description = desc_base
if category == "slope" then
def.drawtype = "mesh"
elseif category == "stair" and alternate == "" then
def.groups.stair = 1
end
end
def.groups = stairsplus:prepare_groups(fields.groups)
if category == "stair" and alternate == "" then
def.groups.stair = 1
end
if fields.drop and not (type(fields.drop) == "table") then
def.drop = modname.. ":" .. category .. "_" .. fields.drop .. alternate
end
minetest.register_node(":" ..modname.. ":" .. category .. "_" .. subname .. alternate, def)
stairsplus.register_recipes(category, alternate, modname, subname, recipeitem)
end

View File

@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased]
## [1.1.0] - 2019-03-23
### Added
- Brazilian and Dutch translations.
@ -34,4 +36,5 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Initial versioned release.
[Unreleased]: https://github.com/minetest-mods/moreblocks/compare/v1.0.0...HEAD
[Unreleased]: https://github.com/minetest-mods/moreores/compare/v1.1.0...HEAD
[1.1.0]: https://github.com/minetest-mods/moreores/compare/v1.0.0...v1.1.0

View File

@ -60,13 +60,13 @@ on that line.
## Version compatibility
More Ores is currently primarily tested with Minetest 0.4.16.
More Ores is currently primarily tested with Minetest 0.4.17.
It may or may not work with newer or older versions. Issues arising in older
versions than 0.4.16 will generally not be fixed.
versions than 0.4.17 will generally not be fixed.
## License
Copyright © 2011-2017 Hugo Locurcio and contributors
Copyright © 2011-2019 Hugo Locurcio and contributors
- More Ores code is licensed under the zlib license, see
[`LICENSE.md`](LICENSE.md) for details.

View File

@ -1,3 +1,4 @@
default
mg?
farming?
intllib?
mg?

View File

@ -92,6 +92,7 @@ for _,tube in ipairs(nixie_types) do
local light2 = LIGHT_MAX-5
local description = S("Nixie Tube ("..tube..")")
local description2 = S("Decatron ("..tube..")")
local description3 = S("Numitron Tube")
local cathode = "nixie_tube_cathode_off.png^nixie_tube_cathode_"..tube..".png"
local cathode2 = "decatron_cathode_"..tube..".png"
local cathode3 = "numitron_filaments.png^numitron_"..tube..".png"
@ -102,7 +103,6 @@ for _,tube in ipairs(nixie_types) do
light2 = nil
description = S("Nixie Tube")
description2 = S("Decatron")
description3 = S("Numitron Tube")
cathode = "nixie_tube_cathode_off.png"
cathode2 = "nixie_tube_blank.png"
cathode3 = "numitron_filaments.png"

View File

@ -200,7 +200,7 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
-- in survival mode, the player has to provide the node he wants to place
if( not(minetest.setting_getbool("creative_mode") )
if( not(minetest.settings:get_bool("creative_mode") )
and not( minetest.check_player_privs( name, {creative=true}))) then
-- players usually don't carry dirt_with_grass around; it's safe to assume normal dirt here

176
technic/locale/pl.txt Normal file
View File

@ -0,0 +1,176 @@
# Polish Translation for Technic mod
# Polskie tłumaczenie Technic mod
# by mat9117
## Misc
[Technic] Loaded in %f seconds = [Technic] Wczytany w %f sekund
## Items
Silicon Wafer = Płytka krzemowa
Doped Silicon Wafer = Domieszkowana płytka krzemowa
Enriched Uranium = Wzbogacony uran
Uranium Fuel = Paliwo uranowe
Diamond Drill Head = Diamentowa głowica wiertła
Blue Energy Crystal = Niebieski kryształ energii
Green Energy Crystal = Zielony kryształ energii
Red Energy Crystal = Czerwony kryształ energii
Fine Copper Wire = Cienki miedziany drut
Copper Coil = Miedziana cewka
Electric Motor = Silnik elektryczny
Low Voltage Transformer = Transformator niskiego napięcia
Medium Voltage Transformer = Transformator średniego napięcia
High Voltage Transformer = Transformator wysokiego napięcia
Control Logic Unit = Jednostka sterująca
Mixed Metal Ingot = Sztabka zmieszanych metali
Composite Plate = Płytka kompozytowa
Copper Plate = Płytka miedziana
Carbon Plate = Płytka węglowa
Graphite = Grafit
Carbon Cloth = Włókno węglowe
Raw Latex = Lateks naturalny
Rubber Fiber = Włókno gumowe
%.1f%%-Fissile Uranium Ingot = %.1f%% Sztabka uranu
%.1f%%-Fissile Uranium Block = %.1f%% Blok uranu
## Machine misc
Machine cannot be removed because it is not empty = Nie można usunąć maszyny, ponieważ nie jest pusta
Inventory move disallowed due to protection = Przenoszenie rzeczy z ekwipunku niemożliwe z powodu ochrony
# $1: Machine name (Includes tier)
@1 Active (@2 EU) = @1 Aktywny (@2 EU)
%s Active = %s Aktywny
%s Disabled = %s Wyłączony
%s Enabled = %s Włączony
%s Idle = %s Bezczynny
%s Improperly Placed = %s Ustawiony nieprawidłowo
%s is empty = %s jest pusty
%s Unpowered = %s brak zasilania
%s Out Of Fuel = %s brak paliwa
%s Has Bad Cabling = %s Źle podłączono kable
%s (Slave) =
%s Has No Network = %s Nie podłączony do sieci
%s Finished = %s Ukończony
Enable/Disable = Włącz/Wyłącz
Range = Zasięg
Upgrade Slots = Miejsca na ulepszenia
In: = Wejście
Out: = Wyjście
Slot %d = Otwór %d
Itemwise = Jeden przedmiot
Stackwise = Cały stack
Ignoring Mesecon Signal = Ignoruj sygnał Mesecon
Controlled by Mesecon Signal = Sterowany sygnałem Mesecon
Owner: = Właściciel:
Unlocked = Odblokowany
Locked = Zablokowany
Radius: = Promień:
Enabled = Włączony
Disabled = Wyłączony
## Machine names
# $1: Tier
%s Alloy Furnace = %s Piec stopowy
%s Battery Box = %s Skrzynka baterii
%s Cable = %s Kabel
%s Centrifuge = %s Centryfuga
%s Compressor = %s Kompresor
%s Extractor = %s Ekstraktor
%s Forcefield Emitter = %s Emiter pola siłowego
%s Furnace = %s Piec
%s Grinder = %s Młynek
%s Music Player = %s Odtwarzacz muzyki
%s Quarry = %s Kamieniołom
%s Tool Workshop = %s Warsztat narzędzi
Arrayed Solar %s Generator = %s Szeregowy generator słoneczny
Fuel-Fired %s Generator = %s Generator zasilany paliwem
Geothermal %s Generator = %s Generator geotermalny
Hydro %s Generator = %s Hydrogenerator
Nuclear %s Generator Core = %s Reaktor atomowy
Small Solar %s Generator = %s Mały generator słoneczny
Wind %s Generator = %s Generator wiatrowy
Self-Contained Injector = Samowystarczalny wtryskiwacz
Constructor Mk%d = Konstruktor Mk%d
Frame = Klatka
Frame Motor = Silnik klatkowy
Template = Szablon
Template (replacing) = Szablon (zastępczy)
Template Motor =Szablon silnika
Template Tool = Szablon narzędzia
Battery Box = Skrzynka baterii
Supply Converter = Konwerter zasilania
Switching Station = Rozdzielnia
Fuel-Fired Alloy Furnace = Piec stopowy zasilany paliwem
Fuel-Fired Furnace = Piec zasilany paliwem
Wind Mill Frame = Klatka wiatraka
Forcefield = Pole siłowe
Nuclear Reactor Rod Compartment = Komora rdzenia reaktora atomowego
Administrative World Anchor = Administracyjna kotwica świata
## Machine-specific
# $1: Pruduced EU
Charge = Ładuj
Discharge = Rozładuj
Power level = Poziom zasilania
# $1: Tier $2: current_charge $3: max_charge
@1 Battery Box: @2/@3 = @1 Skrzynka baterii: @2/@3
# $1: Machine name $2: Supply $3: Demand
@1. Supply: @2 Demand: @3 = @1. Zapas: @2 Pobór: @3
Production at %d%% = Produkowanie w %d%%
Choose Milling Program: = Wybierz program mielenia:
Slim Elements half / normal height: = Małe elementy połowa / normalna wysokość:
Current track %s =
Stopped = Zatrzymany
Keeping %d/%d map blocks loaded = Ciągle ładuję %d/%d bloki mapy
Digging not started = Nie rozpoczęto kopania
Digging finished = Kopanie skończone
Digging %d m above machine = Kopię %d m nad maszyną
Digging %d m below machine = Kopię %d m pod maszyną
@1 (@2 @3 -> @4 @5) = @1 (@2 @3 -> @4 @5)
## Grinder Recipes
# $1: Name
%s Dust = %s Pył
Akalin = Akalin
Alatro = Alatro
Arol = Arol
Brass = Mosiądz
Bronze = Brąz
Carbon Steel = Stal węglowa
Cast Iron = Żeliwo
Chromium = Chrom
Coal = Węgiel
Copper = Miedź
Gold = Złoto
Mithril = Mithril
Silver = Srebro
Stainless Steel = Stal nierdzewna
Talinite = Talinit
Tin = Cyna
Wrought Iron = Kute żelazo
Zinc = Cynk
%.1f%%-Fissile Uranium = %.1f%% Uran
## Tools
RE Battery = Bateria ładowalna
Water Can = Kanister wody
Lava Can = Kanister lawy
Chainsaw = Piła łańcuchowa
Flashlight = Latarka
3 nodes deep. = Głęboki na 3 bloki.
3 nodes tall. = Wysoki na 3 bloki.
3 nodes wide. = Szeroki na 3 bloki.
3x3 nodes. = 3x3 bloki.
Use while sneaking to change Mining Drill Mk%d modes. = Użyj podczas skradania, aby zmienić tryby wiertła górniczego Mk%d
Mining Drill Mk%d Mode %d = Tryb wiertła górniczego Mk%d
Mining Drill Mk%d = Wiertła górniczego Mk%d
Mining Laser Mk%d = Laser górniczegy Mk%d
Single node. = Pojedynczy blok.
Sonic Screwdriver = Dźwiękowy śrubokręt
Tree Tap = Nacinak drzewny
## Craft descriptions
Alloy cooking = Stapianie
Grinding = Mielenie
Compressing = Kompresowanie
Extracting = Ekstrakcja
Separating = Oddzielanie

View File

@ -0,0 +1,41 @@
# Polish Translation for technic_chests
# Polskie tłumaczenie technic_chests
# by mat9117
%s Chest = %s Skrzynia
%s Locked Chest = %s Zamknięta skrzynia
%s Locked Chest (owned by %s) = %s Zamknięta skrzynia (należy do %s)
Color Filter: %s = Filtr kolorów: %s
Edit chest description: = Edytuj opis skrzyni
# Colors
Black = Czarny
Blue = Niebieski
Brown = Brązowy
Cyan = Cyan
Dark Green = Ciemnozielony
Dark Grey = Ciemnoszary
Green = Zielony
Grey = Szary
Magenta = Magenta
Orange = Pomarańczowy
Pink = Różowy
Red = Czerwony
Violet = Fioletowy
White = Biały
Yellow = Żółty
None = Żaden
# Materials
Copper = Miedziana
Gold = Złota
Iron = Żelazna
Mithril = Mithrilowa
Silver = Srebrna
Wooden = Drewniana
# Sorting
Sort = Sortuj
Auto-sort is %s = Autosortowanie jest %s
Off = Wyłaczone
On = Włączone

36
technic_cnc/locale/pl.txt Normal file
View File

@ -0,0 +1,36 @@
## CNC
CNC Machine = Obrabiarka CNC
%s CNC Machine = %s Obrabiarka CNC
Cylinder = Walec
Element Cross = Część krzyżowa
Element Cross Double = Podwójna część krzyżowa
Element Edge = Krawędź części
Element Edge Double = Podwójna krawędź części
Element End = Końcowa część
Element End Double = Podwójna końcowa część
Element Straight = Prosta część
Element Straight Double = Podwójna prosta część
Element T = Część T
Element T Double = Podwójna część T
Horizontal Cylinder = Poziomy walec
One Curved Edge Block = Blok z zagiętą krawędzią
Pyramid = Ostrosłup
Slope = Spad
Slope Edge = Krawędź spadu
Slope Inner Edge = Wewnętrzna krawędź spadu
Slope Lying = Leżący spad
Slope Upside Down = Odwrócony spad
Slope Upside Down Edge = Krawędź odwróconego spadu
Slope Upside Down Inner Edge = Wewnętrzna krawędz odwróconego spadu
Sphere = Kula
Spike = Kolec
Stick = Patyk
Two Curved Edge Block = Blok z dwoma zagiętymi krawędziami
Brick = Cegła
Cobble = Bruk
Dirt = Ziemia
Leaves = Liście
Sandstone = Piaskowiec
Stone = Kamień
Tree = Drzewo
Wooden = Drewniany

View File

@ -0,0 +1,38 @@
# Polish Translation for technic_worldgen
# Polskie tłumaczenie technic_worldgen
# by mat9117
###crafts.lua
Uranium Lump = Bryłka uranu
Uranium Ingot = Sztabka uranu
Chromium Lump = Bryłka chromu
Chromium Ingot = Sztabka chromu
Zinc Lump = Bryłka cynku
Zinc Ingot = Sztabka cynku
Brass Ingot = Sztabka mosiądzu
Wrought Iron Ingot = Sztabka kutego żelaza
Cast Iron Ingot = Sztabka żelaziwa
Carbon Steel Ingot = Sztabka stali węglowej
Stainless Steel Ingot = Sztabka nierdzewnej stali
Iron = Żelazo
###nodes.lua
Uranium Ore = Ruda uranu
Chromium Ore = Ruda chromu
Zinc Ore = Ruda cynku
Granite = Granit
Marble = Marmur
Marble Bricks = Marmurowe cegły
Uranium Block = Blok uranu
Chromium Block = Blok chromu
Zinc Block = Blok cynku
Wrought Iron Block = Blok kutego żelaza
Cast Iron Block = Blok żelaziwa
Carbon Steel Block = Blok stali węglowej
Stainless Steel Block = Blok stali nierdzewnej
Brass Block = Blok mosiądzu
Wrought Iron = Kute żelazo
###rubber.lua
Rubber Tree Sapling = Sadzonka kauczukowca
Rubber Tree = Kauczukowiec

View File

@ -841,7 +841,7 @@ travelnet.on_receive_fields = function(pos, formname, fields, player)
-- transport the player to the target location
local target_pos = travelnet.targets[ owner_name ][ station_network ][ fields.target ].pos;
player:moveto( target_pos, false);
player:move_to( target_pos, false);
if( travelnet.travelnet_effect_enabled ) then
minetest.add_entity( {x=target_pos.x,y=target_pos.y+0.5,z=target_pos.z}, "travelnet:effect"); -- it self-destructs after 20 turns
@ -859,7 +859,7 @@ travelnet.on_receive_fields = function(pos, formname, fields, player)
travelnet.remove_box( target_pos, nil, oldmetadata, player );
-- send the player back as there's no receiving travelnet
player:moveto( pos, false );
player:move_to( pos, false );
else
travelnet.rotate_player( target_pos, player, 0 )
@ -1015,7 +1015,7 @@ if( travelnet.travelnet_effect_enabled ) then
on_step = function( self, dtime )
-- this is supposed to be more flickering than smooth animation
self.object:setyaw( self.object:getyaw()+1);
self.object:set_yaw( self.object:get_yaw()+1);
self.anz_rotations = self.anz_rotations + 1;
-- eventually self-destruct
if( self.anz_rotations > 15 ) then

401
travelnet/locale/es.po Normal file
View File

@ -0,0 +1,401 @@
# Spanish translation for the travelnet mod.
# Copyright (C) 2018 Sokomine
# This file is distributed under the same license as the travelnet package.
#
msgid ""
msgstr ""
"Project-Id-Version: travelnet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-05 14:34+0200\n"
"PO-Revision-Date: 2018-04-05 14:34+0200\n"
"Last-Translator: Diego Martínez <lkaezadl3@yahoo.com>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: doors.lua
msgid "elevator door (open)"
msgstr "puerta de elevador (abierta)"
#: doors.lua
msgid "elevator door (closed)"
msgstr "puerta de elevador (cerrada)"
#: elevator.lua
msgid ""
"Congratulations! This is your first elevator.You can build an elevator "
"network by placing further elevators somewhere above or below this one. Just "
"make sure that the x and z coordinate are the same."
msgstr ""
"¡Felicidades! Éste es tu primer elevador. Puedes construir una red de "
"elevadores colocando más elevadores en algún lugar arriba o abajo de éste. "
"asegúrate de que las coordenadas X y Z sean las mismas."
#: elevator.lua
msgid ""
"This elevator will automaticly connect to the other elevators you have "
"placed at diffrent heights. Just enter a station name and click on \"store\" "
"to set it up. Or just punch it to set the height as station name."
msgstr ""
"Éste elevador se conectará automáticamente a otros elevadores que hayas "
"colocado a diferentes alturas. Simplemente ingresa un nombre para la "
"estación y haz clic en \"Guardar\" para configurarlo, o golpéalo para usar "
"la altura como nombre."
#: elevator.lua
msgid "Your nearest elevator network is located"
msgstr "La red de elevadores más cercana se ubica"
#: elevator.lua
msgid "m behind this elevator and"
msgstr "m detrás de éste elevador y"
#: elevator.lua
msgid "m in front of this elevator and"
msgstr "m delante de éste elevador y"
#: elevator.lua
msgid " ERROR"
msgstr " ERROR"
#: elevator.lua
msgid "m to the left"
msgstr "m a la izquierda"
#: elevator.lua
msgid "m to the right"
msgstr "m a la derecha"
#: elevator.lua
msgid ", located at x"
msgstr ", ubicado en x"
#: elevator.lua
msgid "This elevator here will start a new shaft/network."
msgstr "Éste elevador comenzará una nueva red."
#: elevator.lua
msgid ""
"This is your first elevator. It differs from travelnet networks by only "
"allowing movement in vertical direction (up or down). All further elevators "
"which you will place at the same x,z coordinates at differnt heights will be "
"able to connect to this elevator."
msgstr ""
"Éste es tu primer elevador. Se diferencia de las cabinas de viaje en que "
"solamente permite movimiento vertical (arriba o abajo). Los elevadores que "
"coloque en las mismas coordenadas X,Z se conectarán a éste elevador."
#: elevator.lua
msgid "Elevator"
msgstr "Elevador"
#: elevator.lua
msgid "Elevator (unconfigured)"
msgstr "Elevador (sin configurar)"
#: elevator.lua init.lua
msgid "Name of this station:"
msgstr "Nombre de ésta estación:"
#: elevator.lua
msgid "Store"
msgstr "Guardar"
#: elevator.lua travelnet.lua
msgid "Not enough vertical space to place the travelnet box!"
msgstr ""
"¡No hay espacio vertical suficiente para colocar la cabina de viaje!"
#: init.lua
msgid "allows to attach travelnet boxes to travelnets of other players"
msgstr "permite adjuntar cajas de viaje a redes de otros jugadores"
#: init.lua
msgid "allows to dig travelnet boxes which belog to nets of other players"
msgstr ""
"permite cavar cabinas de viaje pertenecientes a redes de otros jugadores"
#: init.lua
#, lua-format
msgid "[Mod travelnet] Error: Savefile '%s' could not be written."
msgstr "[Mod travelnet] Error: No se pudo escribir '%s'."
#: init.lua
#, lua-format
msgid "[Mod travelnet] Error: Savefile '%s' not found."
msgstr "[Mod travelnet] Error: No se pudo encontrar '%s'."
#: init.lua
msgid "Back"
msgstr "Atras"
#: init.lua
msgid "Exit"
msgstr "Salir"
#: init.lua
msgid "Travelnet-box (unconfigured)"
msgstr "Cabina de viaje (sin configurar)"
#: init.lua
msgid "Configure this travelnet station"
msgstr "Configurar ésta estación"
#: init.lua
msgid "Name of this station"
msgstr "Nombre de ésta estación"
#: init.lua
msgid ""
"How do you call this place here? Example: \"my first house\", \"mine\", "
"\"shop\"..."
msgstr ""
"¿Cómo llamaras a éste lugar? Por ejemplo: \"mi casa\", \"mina\", "
"\"tienda\"..."
#: init.lua
msgid "Assign to Network:"
msgstr "Asignar a la red:"
#: init.lua
#, lua-format
msgid "You can have more than one network. If unsure, use \"%s\""
msgstr ""
"Puedes tener más de una red. Si no estás seguro, usa \"%s\""
#: init.lua
msgid "Owned by:"
msgstr "Propiedad de:"
#: init.lua
msgid "Unless you know what you are doing, leave this empty."
msgstr "Deja éste campo vacío a menos que sepas lo que haces."
#: init.lua
msgid "Help"
msgstr "Ayuda"
#: init.lua
msgid "Save"
msgstr "Guardar"
#: init.lua
msgid "Update failed! Resetting this box on the travelnet."
msgstr "¡Actualización fallida! Reiniciando ésta cabina de viaje."
#: init.lua
#, lua-format
msgid "Station '%s'"
msgstr "Estación '%s'"
#: init.lua
#, lua-format
msgid " has been reattached to the network '%s'."
msgstr " ha sido reacoplado a la red '%s'."
#: init.lua
msgid "Locked travelnet. Type /help for help:"
msgstr "Cabins de viaje bloqueada. Escriba /help para ver la ayuda:"
#: init.lua travelnet.lua
msgid "Travelnet-Box"
msgstr "Cabina de viaje"
#: init.lua
msgid "Punch box to update target list."
msgstr "Golpea la cabina para actualizar la lista de destinos."
#: init.lua
msgid "Assigned to Network:"
msgstr "Asignado a la red:"
#: init.lua
msgid "Click on target to travel there:"
msgstr "Has clic en un destino para viajar allí:"
#: init.lua
msgid "G"
msgstr "G"
#: init.lua
msgid "This station is already the first one on the list."
msgstr "Ésta estación ya es la primera en la lista."
#: init.lua
msgid "This station is already the last one on the list."
msgstr "Ésta estación ya es la última en la lista."
#: init.lua
msgid "Position in list:"
msgstr "Posición en la lista:"
#: init.lua
msgid "move up"
msgstr "subir"
#: init.lua
msgid "move down"
msgstr "bajar"
#: init.lua
#, lua-format
msgid "on travelnet '%s'"
msgstr "en la red '%s'"
#: init.lua
#, lua-format
msgid "(owned by %s)"
msgstr "(pertenece a %s)"
#: init.lua
msgid "ready for usage. Right-click to travel, punch to update."
msgstr ""
"listo para usar. Haz clic derecho para viajar, golpea para actualizar."
#: init.lua
#, lua-format
msgid "at %s m"
msgstr "a %s m"
#: init.lua
msgid "Error"
msgstr "Error"
#: init.lua
msgid "Please provide a name for this station."
msgstr ""
#: init.lua
msgid ""
"Please provide the name of the network this station ought to be connected to."
msgstr ""
"Por favor especifique el nombre de la red a la cual conectarse."
#: init.lua
#, lua-format
msgid "There is no player with interact privilege named '%s'. Aborting."
msgstr ""
"No hay un jugador llamado '%s' con privilegios de interacción. Abortando."
#: init.lua
msgid ""
"You do not have the travelnet_attach priv which is required to attach your "
"box to the network of someone else. Aborting."
msgstr ""
"No tienes el privilegio 'travelnet_attach' requerido para acoplar tu "
"cabina a la red de otros. Abortando."
#: init.lua
#, lua-format
msgid ""
"A station named '%s' already exists on this network. Please choose a "
"diffrent name!"
msgstr ""
"Yes existe una estación llamada '%s' en ésta red. Por favor, ¡elige un "
"nombre diferente!"
#: init.lua
#, lua-format
msgid "Network '%s',"
msgstr "La red '%s',"
#: init.lua
#, lua-format
msgid ""
"already contains the maximum number (=%s) of allowed stations per network. "
"Please choose a diffrent/new network name."
msgstr ""
"ya contiene la cantidad máxima (%s) de estaciones permitidas. Por favor "
"elige un nombre de red diferente/nuevo."
#: init.lua
#, lua-format
msgid "has been added to the network '%s'"
msgstr "ha sido añadida a la red '%s'"
#: init.lua
#, lua-format
msgid ", which now consists of %s station(s)."
msgstr ", la cual consta de %s estación(es)."
#: init.lua
msgid "Station:"
msgstr "Estación:"
#: init.lua
msgid "Network:"
msgstr "Red:"
#: init.lua
msgid "No help available yet."
msgstr "No hay ayuda disponible aún."
#: init.lua
msgid "Please click on the target you want to travel to."
msgstr "Por favor haz clic en el destino al cual quieres viajar."
#: init.lua
msgid "There is something wrong with the configuration of this station."
msgstr "Excuse algún error en la configuración de ésta estación."
#: init.lua
msgid "This travelnet is lacking data and/or improperly configured."
msgstr ""
"A ésta red le faltan datos y/o no ha sido configurada apropiadamente."
#: init.lua
msgid "does not exist (anymore?) on this network."
msgstr "ya no existe (mas?) en ésta red."
#: init.lua
#, lua-format
msgid "Initiating transfer to station '%s'."
msgstr "Iniciando transferencia a la estación '%s'."
#: init.lua
msgid "Could not find information about the station that is to be removed."
msgstr "No se encontró información acerca de la estación a quitar."
#: init.lua
msgid "Could not find the station that is to be removed."
msgstr "No se encontró la estación a quitar."
#: init.lua
#, lua-format
msgid "has been REMOVED from the network '%s'."
msgstr "ha sido QUITADA de la red '%s'."
#: init.lua
#, lua-format
msgid ""
"This %s has not been configured yet. Please set it up first to claim it. "
"Afterwards you can remove it because you are then the owner."
msgstr ""
"Éste %s aún no ha sido configurado. Por favor configurarlo para "
"reclamarlo. Luego de hacerlo serás el dueño y podrás quitarlo."
#: init.lua
#, lua-format
msgid "This %s belongs to %s. You can't remove it."
msgstr "Éste %s pertenece a %s. No lo puedes quitar."
#: init.lua
#, lua-format
msgid "Remove station"
msgstr "Quitar estación"
#: init.lua
#, lua-format
msgid "You do not have enough room in your inventory."
msgstr "No tienes suficiente espacio en el inventario."
#: init.lua
#, lua-format
msgid ""
"[Mod travelnet] Error: Savefile '%s' is damaged. Saved the backup as '%s'."
msgstr ""
"[Mod travelnet] Error: El fichero '%s' está dañado. Guardando copia de "
"respaldo en '%s'."

View File

@ -9,18 +9,19 @@ 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(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:"..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}
return { formspec = table.concat({
"background[0.06,0.99;7.92,7.52;ui_bags_main_form.png]",
"label[0,0;" .. F(S("Bags")) .. "]",
"button[0,2;2,0.5;bag1;" .. F(S("Bag @1", 1)) .. "]",
"button[2,2;2,0.5;bag2;" .. F(S("Bag @1", 2)) .. "]",
"button[4,2;2,0.5;bag3;" .. F(S("Bag @1", 3)) .. "]",
"button[6,2;2,0.5;bag4;" .. F(S("Bag @1", 4)) .. "]",
"listcolors[#00000000;#00000000]",
"list[detached:" .. F(player_name) .. "_bags;bag1;0.5,1;1,1;]",
"list[detached:" .. F(player_name) .. "_bags;bag2;2.5,1;1,1;]",
"list[detached:" .. F(player_name) .. "_bags;bag3;4.5,1;1,1;]",
"list[detached:" .. F(player_name) .. "_bags;bag4;6.5,1;1,1;]"
}) }
end,
})
@ -38,37 +39,39 @@ local function get_player_bag_stack(player, i)
}):get_stack("bag" .. i, 1)
end
for i = 1, 4 do
local bi = i
unified_inventory.register_page("bag"..bi, {
for bag_i = 1, 4 do
unified_inventory.register_page("bag" .. bag_i, {
get_formspec = function(player)
local stack = get_player_bag_stack(player, bi)
local stack = get_player_bag_stack(player, bag_i)
local image = stack:get_definition().inventory_image
local formspec = ("image[7,0;1,1;"..image.."]"
.."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]"
.."listring[current_player;main]")
local fs = {
"image[7,0;1,1;" .. image .. "]",
"label[0,0;" .. F(S("Bag @1", bag_i)) .. "]",
"listcolors[#00000000;#00000000]",
"list[current_player;bag" .. bag_i .. "contents;0,1;8,3;]",
"listring[current_name;bag" .. bag_i .. "contents]",
"listring[current_player;main]"
}
local slots = stack:get_definition().groups.bagslots
if slots == 8 then
formspec = formspec.."background[0.06,0.99;7.92,7.52;ui_bags_sm_form.png]"
fs[#fs + 1] = "background[0.06,0.99;7.92,7.52;ui_bags_sm_form.png]"
elseif slots == 16 then
formspec = formspec.."background[0.06,0.99;7.92,7.52;ui_bags_med_form.png]"
fs[#fs + 1] = "background[0.06,0.99;7.92,7.52;ui_bags_med_form.png]"
elseif slots == 24 then
formspec = formspec.."background[0.06,0.99;7.92,7.52;ui_bags_lg_form.png]"
fs[#fs + 1] = "background[0.06,0.99;7.92,7.52;ui_bags_lg_form.png]"
end
local player_name = player:get_player_name() -- For if statement.
if unified_inventory.trash_enabled or unified_inventory.is_creative(player_name) or minetest.get_player_privs(player_name).give then
formspec = (formspec.."background[6.06,0;0.92,0.92;ui_bags_trash.png]"
.."list[detached:trash;main;6,0.1;1,1;]")
if unified_inventory.trash_enabled
or unified_inventory.is_creative(player_name)
or minetest.get_player_privs(player_name).give then
fs[#fs + 1] = "background[6.06,0;0.92,0.92;ui_bags_trash.png]"
.. "list[detached:trash;main;6,0.1;1,1;]"
end
local inv = player:get_inventory()
for i = 1, 4 do
local def = get_player_bag_stack(player, i):get_definition()
local button
if def.groups.bagslots then
local list_name = "bag"..i.."contents"
local list_name = "bag" .. i .. "contents"
local size = inv:get_size(list_name)
local used = 0
for si = 1, size do
@ -78,14 +81,12 @@ for i = 1, 4 do
end
end
local img = def.inventory_image
local label = F(S("Bag @1", i)).."\n"..used.."/"..size
button = "image_button["..(i+1)..",0;1,1;"..img..";bag"..i..";"..label.."]"
else
button = ""
local label = F(S("Bag @1", i)) .. "\n" .. used .. "/" .. size
fs[#fs + 1] = string.format("image_button[%i,0;1,1;%s;bag%i;%s]",
i + 1, img, i, label)
end
formspec = formspec..button
end
return {formspec=formspec}
return { formspec = table.concat(fs) }
end,
})
end
@ -95,12 +96,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
return
end
for i = 1, 4 do
if fields["bag"..i] then
if fields["bag" .. i] then
local stack = get_player_bag_stack(player, i)
if not stack:get_definition().groups.bagslots then
return
end
unified_inventory.set_inventory_formspec(player, "bag"..i)
unified_inventory.set_inventory_formspec(player, "bag" .. i)
return
end
end
@ -110,7 +111,7 @@ local function save_bags_metadata(player, bags_inv)
local is_empty = true
local bags = {}
for i = 1, 4 do
local bag = "bag"..i
local bag = "bag" .. i
if not bags_inv:is_empty(bag) then
-- Stack limit is 1, otherwise use stack:to_string()
bags[i] = bags_inv:get_stack(bag, 1):get_name()
@ -133,7 +134,7 @@ local function load_bags_metadata(player, bags_inv)
if not bags_meta then
-- Backwards compatiblity
for i = 1, 4 do
local bag = "bag"..i
local bag = "bag" .. i
if not player_inv:is_empty(bag) then
-- Stack limit is 1, otherwise use stack:to_string()
bags[i] = player_inv:get_stack(bag, 1):get_name()
@ -143,7 +144,7 @@ local function load_bags_metadata(player, bags_inv)
end
-- Fill detached slots
for i = 1, 4 do
local bag = "bag"..i
local bag = "bag" .. i
bags_inv:set_size(bag, 1)
bags_inv:set_stack(bag, 1, bags[i] or "")
end
@ -155,7 +156,7 @@ local function load_bags_metadata(player, bags_inv)
-- Clean up deprecated garbage after saving
for i = 1, 4 do
local bag = "bag"..i
local bag = "bag" .. i
player_inv:set_size(bag, 0)
end
end
@ -163,9 +164,9 @@ end
minetest.register_on_joinplayer(function(player)
local player_inv = player:get_inventory()
local player_name = player:get_player_name()
local bags_inv = minetest.create_detached_inventory(player_name.."_bags",{
local bags_inv = minetest.create_detached_inventory(player_name .. "_bags",{
on_put = function(inv, listname, index, stack, player)
player:get_inventory():set_size(listname.."contents",
player:get_inventory():set_size(listname .. "contents",
stack:get_definition().groups.bagslots)
save_bags_metadata(player, inv)
end,
@ -175,14 +176,14 @@ minetest.register_on_joinplayer(function(player)
return 0
end
local player_inv = player:get_inventory()
local old_slots = player_inv:get_size(listname.."contents")
local old_slots = player_inv:get_size(listname .. "contents")
if new_slots >= old_slots then
return 1
end
-- using a smaller bag, make sure it fits
local old_list = player_inv:get_list(listname.."contents")
local old_list = player_inv:get_list(listname .. "contents")
local new_list = {}
local slots_used = 0
local use_new_list = false
@ -196,7 +197,7 @@ minetest.register_on_joinplayer(function(player)
end
if new_slots >= slots_used then
if use_new_list then
player_inv:set_list(listname.."contents", new_list)
player_inv:set_list(listname .. "contents", new_list)
end
return 1
end
@ -204,13 +205,13 @@ minetest.register_on_joinplayer(function(player)
return 0
end,
allow_take = function(inv, listname, index, stack, player)
if player:get_inventory():is_empty(listname.."contents") then
if player:get_inventory():is_empty(listname .. "contents") then
return stack:get_count()
end
return 0
end,
on_take = function(inv, listname, index, stack, player)
player:get_inventory():set_size(listname.."contents", 0)
player:get_inventory():set_size(listname .. "contents", 0)
save_bags_metadata(player, inv)
end,
allow_move = function()

View File

@ -0,0 +1,95 @@
unified_inventory API
=====================
This file provides information about the API of unified_inventory.
Misc functions
--------------
Grouped by use-case, afterwards sorted alphabetically.
* `unified_inventory.is_creative(name)`
* Checks whether creative is enabled or the player has `creative`
Pages
-----
Register a new page: The callback inside this function is called on user input.
unified_inventory.register_page("pagename", {
get_formspec = function(player)
-- ^ `player` is an `ObjectRef`
-- Compute the formspec string here
return {
formspec = "button[2,2;2,1;mybutton;Press me]",
-- ^ Final form of the formspec to display
draw_inventory = false, -- default `true`
-- ^ Optional. Hides the player's `main` inventory list
draw_item_list = false, -- default `true`
-- ^ Optional. Hides the item list on the right side
formspec_prepend = false, -- default `false`
-- ^ Optional. When `false`: Disables the formspec prepend
}
end,
})
Buttons
-------
Register a new button for the bottom row:
unified_inventory.register_button("skins", {
type = "image",
image = "skins_skin_button.png",
tooltip = "Skins",
hide_lite = true
-- ^ Button is hidden when following two conditions are met:
-- Configuration line `unified_inventory_lite = true`
-- Player does not have the privilege `ui_full`
})
Crafting
--------
The code blocks below document each possible parameter using exemplary values.
Provide information to display custom craft types:
unified_inventory.register_craft_type("mytype", {
-- ^ Unique identifier for `register_craft`
description = "Sample Craft",
-- ^ Text shown below the crafting arrow
icon = "dummy.png",
-- ^ Image shown above the crafting arrow
width = 3,
height = 3,
-- ^ Maximal input dimensions of the recipes
dynamic_display_size = function(craft)
-- ^ `craft` is the definition from `register_craft`
return {
width = 2,
height = 3
}
end,
-- ^ Optional callback to change the displayed recipe size
uses_crafting_grid = true,
})
Register a non-standard craft recipe:
unified_inventory.register_craft({
output = "default:foobar",
type = "mytype",
-- ^ Standard craft type or custom (see `register_craft_type`)
items = {
{ "default:foo" },
{ "default:bar" }
},
width = 3,
-- ^ Same as `minetest.register_recipe`
})

View File

@ -2,19 +2,21 @@ local S = unified_inventory.gettext
function unified_inventory.canonical_item_spec_matcher(spec)
local specname = ItemStack(spec):get_name()
if specname:sub(1, 6) == "group:" then
local group_names = specname:sub(7):split(",")
if specname:sub(1, 6) ~= "group:" then
return function (itemname)
local itemdef = minetest.registered_items[itemname]
for _, group_name in ipairs(group_names) do
if (itemdef.groups[group_name] or 0) == 0 then
return false
end
end
return true
return itemname == specname
end
else
return function (itemname) return itemname == specname end
end
local group_names = specname:sub(7):split(",")
return function (itemname)
local itemdef = minetest.registered_items[itemname]
for _, group_name in ipairs(group_names) do
if (itemdef.groups[group_name] or 0) == 0 then
return false
end
end
return true
end
end
@ -25,23 +27,11 @@ end
function unified_inventory.extract_groupnames(groupname)
local specname = ItemStack(groupname):get_name()
if specname:sub(1, 6) == "group:" then
local group_names = specname:sub(7):split(",")
if #group_names == 1 then
return group_names[1], 1
end
local s = ""
for g=1,#group_names do
if g > 1 then
-- List connector
s = s .. S(" and ")
end
s = s .. group_names[g]
end
return s, #group_names
else
if specname:sub(1, 6) ~= "group:" then
return nil, 0
end
local group_names = specname:sub(7):split(",")
return table.concat(group_names, S(" and ")), #group_names
end
unified_inventory.registered_group_items = {

View File

@ -58,15 +58,20 @@ function unified_inventory.get_formspec(player, page)
unified_inventory.current_page[player_name] = page
local pagedef = unified_inventory.pages[page]
if not pagedef then
return "" -- Invalid page name
end
local formspec = {
"size[14,10]",
pagedef.formspec_prepend and "" or "no_prepend[]",
"background[-0.19,-0.25;14.4,10.75;ui_form_bg.png]" -- Background
}
local n = 3
local n = 4
if draw_lite_mode then
formspec[1] = "size[11,7.7]"
formspec[2] = "background[-0.19,-0.2;11.4,8.4;ui_form_bg.png]"
formspec[3] = "background[-0.19,-0.2;11.4,8.4;ui_form_bg.png]"
end
if unified_inventory.is_creative(player_name)
@ -75,11 +80,6 @@ function unified_inventory.get_formspec(player, page)
n = n+1
end
-- Current page
if not unified_inventory.pages[page] then
return "" -- Invalid page name
end
local perplayer_formspec = unified_inventory.get_per_player_formspec(player_name)
local fsdata = pagedef.get_formspec(player, perplayer_formspec)

View File

@ -266,64 +266,77 @@ unified_inventory.register_page("craftguide", {
local player_name = player:get_player_name()
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(S("Crafting Guide")) .. "]"
formspec = formspec.."listcolors[#00000000;#00000000]"
local fs = {
"background[0,"..(formspecy + 3.5)..";8,4;ui_main_inventory.png]",
"label[0,"..formheadery..";" .. F(S("Crafting Guide")) .. "]",
"listcolors[#00000000;#00000000]"
}
local item_name = unified_inventory.current_item[player_name]
if not item_name then return {formspec=formspec} end
if not item_name then
return { formspec = table.concat(fs) }
end
local item_name_shown
if minetest.registered_items[item_name] and minetest.registered_items[item_name].description then
item_name_shown = string.format(S("%s (%s)"), minetest.registered_items[item_name].description, item_name)
if minetest.registered_items[item_name]
and minetest.registered_items[item_name].description then
item_name_shown = string.format(S("%s (%s)"),
minetest.registered_items[item_name].description, item_name)
else
item_name_shown = item_name
end
local dir = unified_inventory.current_craft_direction[player_name]
local rdir
if dir == "recipe" then rdir = "usage" end
if dir == "usage" then rdir = "recipe" end
local rdir = dir == "recipe" and "usage" or "recipe"
local crafts = unified_inventory.crafts_for[dir][item_name]
local alternate = unified_inventory.alternate[player_name]
local alternates, craft
if crafts ~= nil and #crafts > 0 then
if crafts and #crafts > 0 then
alternates = #crafts
craft = crafts[alternate]
end
local has_give = player_privs.give or unified_inventory.is_creative(player_name)
formspec = formspec.."background[0.5,"..(formspecy + 0.2)..";8,3;ui_craftguide_form.png]"
formspec = formspec.."textarea["..craftresultx..","..craftresulty
..";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))
fs[#fs + 1] = "background[0.5,"..(formspecy + 0.2)..";8,3;ui_craftguide_form.png]"
fs[#fs + 1] = string.format("textarea[%f,%f;10,1;;%s: %s;]",
craftresultx, craftresulty, F(role_text[dir]), item_name_shown)
fs[#fs + 1] = 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)..";"
..F(no_recipe_text[dir]).."]"
-- No craft recipes available for this item.
fs[#fs + 1] = "label[5.5,"..(formspecy + 2.35)..";"
.. 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))
fs[#fs + 1] = "image["..no_pos..","..formspecy..";1.1,1.1;ui_no.png]"
fs[#fs + 1] = stack_image_button(item_pos, formspecy, 1.1, 1.1,
"item_button_" .. other_dir[dir] .. "_", ItemStack(item_name))
if has_give 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]"
fs[#fs + 1] = "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]"
end
return {formspec = formspec}
return { formspec = table.concat(fs) }
end
local craft_type = unified_inventory.registered_craft_types[craft.type] or
unified_inventory.craft_type_defaults(craft.type, {})
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)
fs[#fs + 1] = 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)..";" .. 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
fs[#fs + 1] = "label[5.5,"..(formspecy + 1)..";" .. F(craft_type.description).."]"
fs[#fs + 1] = 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
-- This keeps recipes aligned to the right,
-- so that they're close to the arrow.
@ -358,47 +371,45 @@ unified_inventory.register_page("craftguide", {
local xof = (fx-1) * of + of
local yof = (y-1) * of + 1
if item then
formspec = formspec..stack_image_button(
fs[#fs + 1] = stack_image_button(
xoffset - xof, formspecy - 1 + yof, bsize_w, bsize_h,
"item_button_recipe_",
ItemStack(item))
else
-- Fake buttons just to make grid
formspec = formspec.."image_button["
..tostring(xoffset - xof)..","..tostring(formspecy - 1 + yof)
..";"..bsize_w..","..bsize_h..";ui_blank_image.png;;]"
fs[#fs + 1] = string.format("image_button[%f,%f;%f,%f;ui_blank_image.png;;]",
xoffset - xof, formspecy - 1 + yof, bsize_w, bsize_h)
end
end
end
else
-- Error
formspec = formspec.."label["
..tostring(2)..","..tostring(formspecy)
..";"..F(S("This recipe is too\nlarge to be displayed.")).."]"
fs[#fs + 1] = string.format("label[2,%f;%s]",
formspecy, 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(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(S("All")) .. "]"
fs[#fs + 1] = "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(S("All")) .. "]"
end
if has_give 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]"
fs[#fs + 1] = "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]"
end
if alternates and alternates > 1 then
formspec = formspec.."label[5.5,"..(formspecy + 1.6)..";"
..string.format(F(recipe_text[dir]), alternate, alternates).."]"
.."image_button[5.5,"..(formspecy + 2)..";1,1;ui_left_icon.png;alternate_prev;]"
.."image_button[6.5,"..(formspecy + 2)..";1,1;ui_right_icon.png;alternate;]"
.."tooltip[alternate_prev;"..F(prev_alt_text[dir]).."]"
.."tooltip[alternate;"..F(next_alt_text[dir]).."]"
fs[#fs + 1] = "label[5.5," .. (formspecy + 1.6) .. ";"
.. string.format(F(recipe_text[dir]), alternate, alternates) .. "]"
.. "image_button[5.5," .. (formspecy + 2) .. ";1,1;ui_left_icon.png;alternate_prev;]"
.. "image_button[6.5," .. (formspecy + 2) .. ";1,1;ui_right_icon.png;alternate;]"
.. "tooltip[alternate_prev;" .. F(prev_alt_text[dir]) .. "]"
.. "tooltip[alternate;" .. F(next_alt_text[dir]) .. "]"
end
return {formspec = formspec}
return { formspec = table.concat(fs) }
end,
})
@ -429,78 +440,63 @@ local function craftguide_giveme(player, formname, fields)
player_inv:add_item("main", {name = output, count = amount})
end
-- tells if an item can be moved and returns an index if so
local function item_fits(player_inv, craft_item, needed_item)
local need_group = string.sub(needed_item, 1, 6) == "group:"
if need_group then
need_group = string.sub(needed_item, 7)
-- Takes any stack from "main" where the `amount` of `needed_item` may fit
-- into the given crafting stack (`craft_item`)
local function craftguide_move_stacks(inv, craft_item, needed_item, amount)
if craft_item:get_count() >= amount then
return
end
if craft_item
and not craft_item:is_empty() then
local ciname = craft_item:get_name()
-- abort if the item there isn't usable
if ciname ~= needed_item
and not need_group then
return
end
-- abort if no item fits onto it
if craft_item:get_count() >= craft_item:get_definition().stack_max then
return
end
-- use the item there if it's in the right group and a group item is needed
if need_group then
if minetest.get_item_group(ciname, need_group) == 0 then
local get_item_group = minetest.get_item_group
local group = needed_item:match("^group:(.+)")
if group then
if not craft_item:is_empty() then
-- Source item must be the same to fill
if get_item_group(craft_item:get_name(), group) ~= 0 then
needed_item = craft_item:get_name()
else
-- TODO: Maybe swap unmatching "craft" items
-- !! Would conflict with recursive function call
return
end
needed_item = ciname
need_group = false
end
end
if need_group then
-- search an item of the specific group
for i,item in pairs(player_inv:get_list("main")) do
if not item:is_empty()
and minetest.get_item_group(item:get_name(), need_group) > 0 then
return i
else
-- Take matching group from the inventory (biggest stack)
local main = inv:get_list("main")
local max_found = 0
for i, stack in ipairs(main) do
if stack:get_count() > max_found and
get_item_group(stack:get_name(), group) ~= 0 then
needed_item = stack:get_name()
max_found = stack:get_count()
if max_found >= amount then
break
end
end
end
end
-- no index found
return
end
-- search an item with a the name needed_item
for i,item in pairs(player_inv:get_list("main")) do
if not item:is_empty()
and item:get_name() == needed_item then
return i
else
if not craft_item:is_empty() and
craft_item:get_name() ~= needed_item then
return -- Item must be identical
end
end
-- no index found
end
-- modifies the player inventory and returns the changed craft_item if possible
local function move_item(player_inv, craft_item, needed_item)
local stackid = item_fits(player_inv, craft_item, needed_item)
if not stackid then
return
needed_item = ItemStack(needed_item)
local to_take = math.min(amount, needed_item:get_stack_max())
to_take = to_take - craft_item:get_count()
if to_take <= 0 then
return -- Nothing to do
end
local wanted_stack = player_inv:get_stack("main", stackid)
local taken_item = wanted_stack:take_item()
player_inv:set_stack("main", stackid, wanted_stack)
needed_item:set_count(to_take)
if not craft_item
or craft_item:is_empty() then
return taken_item
local taken = inv:remove_item("main", needed_item)
local leftover = taken:add_item(craft_item)
if not leftover:is_empty() then
-- Somehow failed to add the existing "craft" item. Undo the action.
inv:add_item("main", leftover)
return taken
end
craft_item:add_item(taken_item)
return craft_item
return taken
end
local function craftguide_craft(player, formname, fields)
@ -510,15 +506,21 @@ local function craftguide_craft(player, formname, fields)
if amount then break end
end
if not amount then return end
amount = tonumber(amount) or 99 -- fallback for "all"
if amount <= 0 or amount > 99 then return end
local player_name = player:get_player_name()
local output = unified_inventory.current_item[player_name]
if (not output) or (output == "") then return end
local output = unified_inventory.current_item[player_name] or ""
if output == "" then return end
local player_inv = player:get_inventory()
local craft_list = player_inv:get_list("craft")
local crafts = unified_inventory.crafts_for[unified_inventory.current_craft_direction[player_name]][output]
if (not crafts) or (#crafts == 0) then return end
local crafts = unified_inventory.crafts_for[
unified_inventory.current_craft_direction[player_name]][output] or {}
if #crafts == 0 then return end
local alternate = unified_inventory.alternate[player_name]
@ -526,24 +528,17 @@ local function craftguide_craft(player, formname, fields)
if craft.width > 3 then return end
local needed = craft.items
local craft_list = player_inv:get_list("craft")
local width = craft.width
if width == 0 then
-- Shapeless recipe
width = 3
end
amount = tonumber(amount) or 99
--[[
if amount == "max" then
amount = 99 -- Arbitrary; need better way to do this.
else
amount = tonumber(amount)
end--]]
for iter = 1, amount do
-- To spread the items evenly
local STEPSIZE = math.ceil(math.sqrt(amount) / 5) * 5
local current_count = 0
repeat
current_count = math.min(current_count + STEPSIZE, amount)
local index = 1
for y = 1, 3 do
for x = 1, width do
@ -551,7 +546,9 @@ local function craftguide_craft(player, formname, fields)
if needed_item then
local craft_index = ((y - 1) * 3) + x
local craft_item = craft_list[craft_index]
local newitem = move_item(player_inv, craft_item, needed_item)
local newitem = craftguide_move_stacks(player_inv,
craft_item, needed_item, current_count)
if newitem then
craft_list[craft_index] = newitem
end
@ -559,7 +556,7 @@ local function craftguide_craft(player, formname, fields)
index = index + 1
end
end
end
until current_count == amount
player_inv:set_list("craft", craft_list)