Merge branch 'master' into sponge-API

This commit is contained in:
AFCMS 2021-06-04 19:11:51 +02:00
commit 6cb54ceeea
365 changed files with 6209 additions and 2424 deletions

View File

@ -82,10 +82,10 @@ Please report all bugs and missing Minecraft features here:
<https://git.minetest.land/MineClone2/MineClone2/issues> <https://git.minetest.land/MineClone2/MineClone2/issues>
## Chating with the community ## Chatting with the community
Join our discord server at: Join our discord server at:
<https://discord.gg/84GKcxczG3> <https://discord.gg/xE4z8EEpDC>
## Project description ## Project description
The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software. The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software.

View File

@ -83,7 +83,7 @@ local function get_hardness_values_for_groups()
for _, ndef in pairs(minetest.registered_nodes) do for _, ndef in pairs(minetest.registered_nodes) do
for g, _ in pairs(mcl_autogroup.registered_diggroups) do for g, _ in pairs(mcl_autogroup.registered_diggroups) do
if ndef.groups[g] ~= nil then if ndef.groups[g] then
maps[g][ndef._mcl_hardness or 0] = true maps[g][ndef._mcl_hardness or 0] = true
end end
end end

View File

@ -1,6 +1,8 @@
local get_connected_players = minetest.get_connected_players local get_connected_players = minetest.get_connected_players
local clock = os.clock local clock = os.clock
local pairs = pairs
controls = {} controls = {}
controls.players = {} controls.players = {}
@ -20,15 +22,15 @@ function controls.register_on_hold(func)
end end
local known_controls = { local known_controls = {
jump=true, jump = true,
right=true, right = true,
left=true, left = true,
LMB=true, LMB = true,
RMB=true, RMB = true,
sneak=true, sneak = true,
aux1=true, aux1 = true,
down=true, down = true,
up=true, up = true,
} }
minetest.register_on_joinplayer(function(player) minetest.register_on_joinplayer(function(player)
@ -52,17 +54,17 @@ minetest.register_globalstep(function(dtime)
for cname, cbool in pairs(player_controls) do for cname, cbool in pairs(player_controls) do
if known_controls[cname] == true then if known_controls[cname] == true then
--Press a key --Press a key
if cbool==true and controls.players[player_name][cname][1]==false then if cbool == true and controls.players[player_name][cname][1] == false then
for _, func in pairs(controls.registered_on_press) do for _, func in pairs(controls.registered_on_press) do
func(player, cname) func(player, cname)
end end
controls.players[player_name][cname] = {true, clock()} controls.players[player_name][cname] = {true, clock()}
elseif cbool==true and controls.players[player_name][cname][1]==true then elseif cbool == true and controls.players[player_name][cname][1] == true then
for _, func in pairs(controls.registered_on_hold) do for _, func in pairs(controls.registered_on_hold) do
func(player, cname, clock()-controls.players[player_name][cname][2]) func(player, cname, clock()-controls.players[player_name][cname][2])
end end
--Release a key --Release a key
elseif cbool==false and controls.players[player_name][cname][1]==true then elseif cbool == false and controls.players[player_name][cname][1] == true then
for _, func in pairs(controls.registered_on_release) do for _, func in pairs(controls.registered_on_release) do
func(player, cname, clock()-controls.players[player_name][cname][2]) func(player, cname, clock()-controls.players[player_name][cname][2])
end end

View File

@ -12,9 +12,13 @@ under the LGPLv2.1 license.
mcl_explosions = {} mcl_explosions = {}
local mod_fire = minetest.get_modpath("mcl_fire") ~= nil local mod_fire = minetest.get_modpath("mcl_fire")
--local CONTENT_FIRE = minetest.get_content_id("mcl_fire:fire") --local CONTENT_FIRE = minetest.get_content_id("mcl_fire:fire")
local math = math
local vector = vector
local table = table
local hash_node_position = minetest.hash_node_position local hash_node_position = minetest.hash_node_position
local get_objects_inside_radius = minetest.get_objects_inside_radius local get_objects_inside_radius = minetest.get_objects_inside_radius
local get_position_from_hash = minetest.get_position_from_hash local get_position_from_hash = minetest.get_position_from_hash
@ -24,6 +28,7 @@ local get_voxel_manip = minetest.get_voxel_manip
local bulk_set_node = minetest.bulk_set_node local bulk_set_node = minetest.bulk_set_node
local check_for_falling = minetest.check_for_falling local check_for_falling = minetest.check_for_falling
local add_item = minetest.add_item local add_item = minetest.add_item
local pos_to_string = minetest.pos_to_string
-- Saved sphere explosion shapes for various radiuses -- Saved sphere explosion shapes for various radiuses
local sphere_shapes = {} local sphere_shapes = {}
@ -240,7 +245,7 @@ local function trace_explode(pos, strength, raydirs, radius, info, direct, sourc
local ent = obj:get_luaentity() local ent = obj:get_luaentity()
-- Ignore items to lower lag -- Ignore items to lower lag
if (obj:is_player() or (ent and ent.name ~= '__builtin.item')) and obj:get_hp() > 0 then if (obj:is_player() or (ent and ent.name ~= "__builtin.item")) and obj:get_hp() > 0 then
local opos = obj:get_pos() local opos = obj:get_pos()
local collisionbox = nil local collisionbox = nil
@ -356,9 +361,9 @@ local function trace_explode(pos, strength, raydirs, radius, info, direct, sourc
local on_blast = node_on_blast[data[idx]] local on_blast = node_on_blast[data[idx]]
local remove = true local remove = true
if do_drop or on_blast ~= nil then if do_drop or on_blast then
local npos = get_position_from_hash(hash) local npos = get_position_from_hash(hash)
if on_blast ~= nil then if on_blast then
on_blast(npos, 1.0, do_drop) on_blast(npos, 1.0, do_drop)
remove = false remove = false
else else
@ -400,8 +405,7 @@ local function trace_explode(pos, strength, raydirs, radius, info, direct, sourc
end end
-- Log explosion -- Log explosion
minetest.log('action', 'Explosion at ' .. minetest.pos_to_string(pos) .. minetest.log("action", "Explosion at "..pos_to_string(pos).." with strength "..strength.." and radius "..radius)
' with strength ' .. strength .. ' and radius ' .. radius)
end end
-- Create an explosion with strength at pos. -- Create an explosion with strength at pos.

View File

@ -0,0 +1,2 @@
# textdomain:mcl_explosions
@1 was caught in an explosion.=@1 została wysadzona.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,5 +1,7 @@
mcl_worlds = {} mcl_worlds = {}
local get_connected_players = minetest.get_connected_players
-- For a given position, returns a 2-tuple: -- For a given position, returns a 2-tuple:
-- 1st return value: true if pos is in void -- 1st return value: true if pos is in void
-- 2nd return value: true if it is in the deadly part of the void -- 2nd return value: true if it is in the deadly part of the void
@ -44,12 +46,16 @@ function mcl_worlds.y_to_layer(y)
end end
end end
local y_to_layer = mcl_worlds.y_to_layer
-- Takes a pos and returns the dimension it belongs to (same as above) -- Takes a pos and returns the dimension it belongs to (same as above)
function mcl_worlds.pos_to_dimension(pos) function mcl_worlds.pos_to_dimension(pos)
local _, dim = mcl_worlds.y_to_layer(pos.y) local _, dim = y_to_layer(pos.y)
return dim return dim
end end
local pos_to_dimension = mcl_worlds.pos_to_dimension
-- Takes a Minecraft layer and a “dimension” name -- Takes a Minecraft layer and a “dimension” name
-- and returns the corresponding Y coordinate for -- and returns the corresponding Y coordinate for
-- MineClone 2. -- MineClone 2.
@ -119,6 +125,8 @@ function mcl_worlds.dimension_change(player, dimension)
last_dimension[playername] = dimension last_dimension[playername] = dimension
end end
local dimension_change = mcl_worlds.dimension_change
----------------------- INTERNAL STUFF ---------------------- ----------------------- INTERNAL STUFF ----------------------
-- Update the dimension callbacks every DIM_UPDATE seconds -- Update the dimension callbacks every DIM_UPDATE seconds
@ -126,19 +134,19 @@ local DIM_UPDATE = 1
local dimtimer = 0 local dimtimer = 0
minetest.register_on_joinplayer(function(player) minetest.register_on_joinplayer(function(player)
last_dimension[player:get_player_name()] = mcl_worlds.pos_to_dimension(player:get_pos()) last_dimension[player:get_player_name()] = pos_to_dimension(player:get_pos())
end) end)
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
-- regular updates based on iterval -- regular updates based on iterval
dimtimer = dimtimer + dtime; dimtimer = dimtimer + dtime;
if dimtimer >= DIM_UPDATE then if dimtimer >= DIM_UPDATE then
local players = minetest.get_connected_players() local players = get_connected_players()
for p=1, #players do for p = 1, #players do
local dim = mcl_worlds.pos_to_dimension(players[p]:get_pos()) local dim = pos_to_dimension(players[p]:get_pos())
local name = players[p]:get_player_name() local name = players[p]:get_player_name()
if dim ~= last_dimension[name] then if dim ~= last_dimension[name] then
mcl_worlds.dimension_change(players[p], dim) dimension_change(players[p], dim)
end end
end end
dimtimer = 0 dimtimer = 0

View File

@ -4,6 +4,7 @@ local get_connected_players = minetest.get_connected_players
local get_node = minetest.get_node local get_node = minetest.get_node
local vector_add = vector.add local vector_add = vector.add
local ceil = math.ceil local ceil = math.ceil
local pairs = pairs
walkover = {} walkover = {}
walkover.registered_globals = {} walkover.registered_globals = {}
@ -34,9 +35,9 @@ minetest.register_globalstep(function(dtime)
local pp = player:get_pos() local pp = player:get_pos()
pp.y = ceil(pp.y) pp.y = ceil(pp.y)
local loc = vector_add(pp, {x=0,y=-1,z=0}) local loc = vector_add(pp, {x=0,y=-1,z=0})
if loc ~= nil then if loc then
local nodeiamon = get_node(loc) local nodeiamon = get_node(loc)
if nodeiamon ~= nil then if nodeiamon then
if on_walk[nodeiamon.name] then if on_walk[nodeiamon.name] then
on_walk[nodeiamon.name](loc, nodeiamon, player) on_walk[nodeiamon.name](loc, nodeiamon, player)
end end

View File

@ -1,4 +1,4 @@
local S = minetest.get_translator("mcl_boats") local S = minetest.get_translator(minetest.get_current_modname())
local boat_visual_size = {x = 1, y = 1, z = 1} local boat_visual_size = {x = 1, y = 1, z = 1}
local paddling_speed = 22 local paddling_speed = 22
@ -470,6 +470,6 @@ minetest.register_craft({
burntime = 20, burntime = 20,
}) })
if minetest.get_modpath("doc_identifier") ~= nil then if minetest.get_modpath("doc_identifier") then
doc.sub.identifier.register_object("mcl_boats:boat", "craftitems", "mcl_boats:boat") doc.sub.identifier.register_object("mcl_boats:boat", "craftitems", "mcl_boats:boat")
end end

View File

@ -0,0 +1,12 @@
# textdomain: mcl_boats
Acacia Boat=Akacjowa łódź
Birch Boat=Brzozowa łódź
Boat=Łódź
Boats are used to travel on the surface of water.=Łodzie są wykorzystywane do podróżowania po powierzchni wody.
Dark Oak Boat=Ciemno-dębowa łódź
Jungle Boat=Tropikalna łódź
Oak Boat=Dębowa łódź
Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.=Kliknij prawym przyciskiem myszy na źródło wody by postawić łódź. Kliknij prawym przyciskiem myszy by w nią wsiąść. Użyj przycisków [Lewy] oraz [Prawy] by sterować, [Naprzód] by przyspieszyć i [W tył] by zwolnić lub się cofać. Kliknij [Skradanie] by z niej wyjść, uderz ją by wziąć ją jako przedmiot.
Spruce Boat=Świerkowa łódź
Water vehicle=Pojazd wodny
Sneak to dismount=Skradaj się by opuścić łódź

View File

@ -1,5 +1,10 @@
local modpath = minetest.get_modpath(minetest.get_current_modname()) local modpath = minetest.get_modpath(minetest.get_current_modname())
local pairs = pairs
local get_connected_players = minetest.get_connected_players
local get_item_group = minetest.get_item_group
mcl_burning = { mcl_burning = {
storage = {}, storage = {},
animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8 animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8
@ -8,7 +13,7 @@ mcl_burning = {
dofile(modpath .. "/api.lua") dofile(modpath .. "/api.lua")
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
for _, player in pairs(minetest.get_connected_players()) do for _, player in pairs(get_connected_players()) do
local storage = mcl_burning.storage[player] local storage = mcl_burning.storage[player]
if not mcl_burning.tick(player, dtime, storage) and not mcl_burning.is_affected_by_rain(player) then if not mcl_burning.tick(player, dtime, storage) and not mcl_burning.is_affected_by_rain(player) then
local nodes = mcl_burning.get_touching_nodes(player, {"group:puts_out_fire", "group:set_on_fire"}, storage) local nodes = mcl_burning.get_touching_nodes(player, {"group:puts_out_fire", "group:set_on_fire"}, storage)
@ -16,12 +21,12 @@ minetest.register_globalstep(function(dtime)
for _, pos in pairs(nodes) do for _, pos in pairs(nodes) do
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
if minetest.get_item_group(node.name, "puts_out_fire") > 0 then if get_item_group(node.name, "puts_out_fire") > 0 then
burn_time = 0 burn_time = 0
break break
end end
local value = minetest.get_item_group(node.name, "set_on_fire") local value = get_item_group(node.name, "set_on_fire")
if value > burn_time then if value > burn_time then
burn_time = value burn_time = value
end end

View File

@ -0,0 +1,3 @@
# textdomain: mcl_falling_nodes
@1 was smashed by a falling anvil.=@1 została zmiażdżona przez spadające kowadło.
@1 was smashed by a falling block.=@1 została zmiażdżona przez spadający blok.

View File

@ -1,5 +1,5 @@
--these are lua locals, used for higher performance --these are lua locals, used for higher performance
local minetest, math, vector, ipairs = minetest, math, vector, ipairs local minetest, math, vector, ipairs, pairs = minetest, math, vector, ipairs, pairs
--this is used for the player pool in the sound buffer --this is used for the player pool in the sound buffer
local pool = {} local pool = {}
@ -233,7 +233,7 @@ function minetest.handle_node_drops(pos, drops, digger)
local dug_node = minetest.get_node(pos) local dug_node = minetest.get_node(pos)
local tooldef local tooldef
local tool local tool
if digger ~= nil then if digger then
tool = digger:get_wielded_item() tool = digger:get_wielded_item()
tooldef = minetest.registered_tools[tool:get_name()] tooldef = minetest.registered_tools[tool:get_name()]
@ -314,7 +314,7 @@ function minetest.handle_node_drops(pos, drops, digger)
end end
-- Spawn item and apply random speed -- Spawn item and apply random speed
local obj = minetest.add_item(dpos, drop_item) local obj = minetest.add_item(dpos, drop_item)
if obj ~= nil then if obj then
local x = math.random(1, 5) local x = math.random(1, 5)
if math.random(1,2) == 1 then if math.random(1,2) == 1 then
x = -x x = -x
@ -363,6 +363,17 @@ if not time_to_live then
time_to_live = 300 time_to_live = 300
end end
local function cxcz(o, cw, one, zero)
if cw < 0 then
table.insert(o, { [one]=1, y=0, [zero]=0 })
table.insert(o, { [one]=-1, y=0, [zero]=0 })
else
table.insert(o, { [one]=-1, y=0, [zero]=0 })
table.insert(o, { [one]=1, y=0, [zero]=0 })
end
return o
end
minetest.register_entity(":__builtin:item", { minetest.register_entity(":__builtin:item", {
initial_properties = { initial_properties = {
hp_max = 1, hp_max = 1,
@ -383,7 +394,7 @@ minetest.register_entity(":__builtin:item", {
-- The itemstring MUST be set immediately to a non-empty string after creating the entity. -- The itemstring MUST be set immediately to a non-empty string after creating the entity.
-- The hand is NOT permitted as dropped item. ;-) -- The hand is NOT permitted as dropped item. ;-)
-- Item entities will be deleted if they still have an empty itemstring on their first on_step tick. -- Item entities will be deleted if they still have an empty itemstring on their first on_step tick.
itemstring = '', itemstring = "",
-- If true, item will fall -- If true, item will fall
physical_state = true, physical_state = true,
@ -574,7 +585,7 @@ minetest.register_entity(":__builtin:item", {
return return
end end
self.age = self.age + dtime self.age = self.age + dtime
if self._collector_timer ~= nil then if self._collector_timer then
self._collector_timer = self._collector_timer + dtime self._collector_timer = self._collector_timer + dtime
end end
if time_to_live > 0 and self.age > time_to_live then if time_to_live > 0 and self.age > time_to_live then
@ -642,16 +653,6 @@ minetest.register_entity(":__builtin:item", {
-- 1st: closest -- 1st: closest
-- 2nd: other direction -- 2nd: other direction
-- 3rd and 4th: other axis -- 3rd and 4th: other axis
local cxcz = function(o, cw, one, zero)
if cw < 0 then
table.insert(o, { [one]=1, y=0, [zero]=0 })
table.insert(o, { [one]=-1, y=0, [zero]=0 })
else
table.insert(o, { [one]=-1, y=0, [zero]=0 })
table.insert(o, { [one]=1, y=0, [zero]=0 })
end
return o
end
if math.abs(cx) < math.abs(cz) then if math.abs(cx) < math.abs(cz) then
order = cxcz(order, cx, "x", "z") order = cxcz(order, cx, "x", "z")
order = cxcz(order, cz, "z", "x") order = cxcz(order, cz, "z", "x")

View File

@ -1,9 +1,10 @@
local S = minetest.get_translator("mcl_minecarts") local modname = minetest.get_current_modname()
local S = minetest.get_translator(modname)
local has_mcl_wip = minetest.get_modpath("mcl_wip") local has_mcl_wip = minetest.get_modpath("mcl_wip")
mcl_minecarts = {} mcl_minecarts = {}
mcl_minecarts.modpath = minetest.get_modpath("mcl_minecarts") mcl_minecarts.modpath = minetest.get_modpath(modname)
mcl_minecarts.speed_max = 10 mcl_minecarts.speed_max = 10
mcl_minecarts.check_float_time = 15 mcl_minecarts.check_float_time = 15
@ -204,7 +205,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
rou_pos = vector.round(pos) rou_pos = vector.round(pos)
node = minetest.get_node(rou_pos) node = minetest.get_node(rou_pos)
local g = minetest.get_item_group(node.name, "connect_to_raillike") local g = minetest.get_item_group(node.name, "connect_to_raillike")
if g ~= self._railtype and self._railtype ~= nil then if g ~= self._railtype and self._railtype then
-- Detach driver -- Detach driver
if player then if player then
if self._old_pos then if self._old_pos then
@ -523,7 +524,7 @@ function mcl_minecarts.place_minecart(itemstack, pointed_thing, placer)
local cart = minetest.add_entity(railpos, entity_id) local cart = minetest.add_entity(railpos, entity_id)
local railtype = minetest.get_item_group(node.name, "connect_to_raillike") local railtype = minetest.get_item_group(node.name, "connect_to_raillike")
local le = cart:get_luaentity() local le = cart:get_luaentity()
if le ~= nil then if le then
le._railtype = railtype le._railtype = railtype
end end
local cart_dir = mcl_minecarts:get_rail_direction(railpos, {x=1, y=0, z=0}, nil, nil, railtype) local cart_dir = mcl_minecarts:get_rail_direction(railpos, {x=1, y=0, z=0}, nil, nil, railtype)
@ -606,7 +607,7 @@ Register a minecart
local function register_minecart(itemstring, entity_id, description, tt_help, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative) local function register_minecart(itemstring, entity_id, description, tt_help, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative)
register_entity(entity_id, mesh, textures, drop, on_rightclick, on_activate_by_rail) register_entity(entity_id, mesh, textures, drop, on_rightclick, on_activate_by_rail)
register_craftitem(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative) register_craftitem(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative)
if minetest.get_modpath("doc_identifier") ~= nil then if minetest.get_modpath("doc_identifier") then
doc.sub.identifier.register_object(entity_id, "craftitems", itemstring) doc.sub.identifier.register_object(entity_id, "craftitems", itemstring)
end end
end end

View File

@ -0,0 +1,36 @@
# textdomain: mcl_minecarts
Minecart=Wagonik
Minecarts can be used for a quick transportion on rails.=Wagoniki mogą być użyte do szybkiego transportu po torach.
Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.=Wagoniki mogą jeździć tylko po torach i zawsze podążają za wytyczoną ścieżką. W przypadku skrzyżowań typu T, gdzie nie ma prostej ścieżki, skręcają w lew. Ich szybkość zależy od typu torów.
You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Możesz postawić wagonik na torach. Kliknij prawym przyciskiem myszy aby do niego wejść. Uderz go by zaczął się poruszać.
To obtain the minecart, punch it while holding down the sneak key.=Aby odzyskać wagonik uderz go podczas skradania.
A minecart with TNT is an explosive vehicle that travels on rail.=Wagonik z TNT jest wybuchowym pojazdem podróżującym po torach.
Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.=Postaw go na torach. Uderz by zaczął się poruszać. TNT zapala się krzesiwem lub gdy wagonik jest na zasilonych torach aktywacyjnych.
To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.=Aby odzyskać wagonik z TNT uderz go podczas skradania. Nie możesz tego zrobić gdy TNT jest zapalone.
A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.=Wagonik z piecem jest pojazdem podróżującym na torach. Napędza on samego siebie za pomocą paliwa.
Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.=Postaw go na torach. Jeśli dasz mu nieco węgla piec zacznie palić przez długi czas, a wagonik będzie się sam poruszał. Uderz go by zaczął się poruszać.
To obtain the minecart and furnace, punch them while holding down the sneak key.=Aby odzyskać wagonik z piecem uderz go podczas skradania.
Minecart with Chest=Wagonik ze skrzynią
Minecart with Furnace=Wagonik z piecem
Minecart with Command Block=Wagonik z blokiem poleceń
Minecart with Hopper=Wagonik z lejem
Minecart with TNT=Wagonik z TNT
Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.=Postaw je na ziemi by zbudować ścieżkę z torów. Tory automatycznie połączą się ze sobą i zamienią się w zakręty, skrzyżowania typu T, skrzyżowania i równie w zależności od potrzeb.
Rail=Tor
Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Zwyczajne tory nieco spowalniają wagoniki ze względu na tarcie.
Powered Rail=Zasilane tory
Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Zasilane tory mogą przyspieszać lub spowalniać wagoniki.
Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Bez zasilania czerwienitem tory będą spowalniać wagoniki. Aby sprawić by je przyspieszały zasil je czerwienitem.
Activator Rail=Tory aktywacyjne
Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Tory aktywacyjne są wykorzystywane do aktywacji specjalnych wagoników.
To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Aby ten tor aktywował wagonik, zasil go czerwienitem i spraw by wagonik po nim przejechał.
Detector Rail=Tory z czujnikiem
Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Tory z czujnikiem są w stanie wykryć kiedy wagonik po nich przejeżdża i wysłać sygnał do czerwienitowych mechanizmów.
To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=Aby wykryć wagonik i dostarczyć zasilanie czerwienitem podłącz go czerwienitem to mechanizmu i spraw by wagonik po nim przejechał.
Track for minecarts=Tor dla wagoników
Speed up when powered, slow down when not powered=Przyspiesza gdy zasilane, spowalnia gdy nie
Activates minecarts when powered=Aktywuje wagoniki gdy zasilane
Emits redstone power when a minecart is detected=Emituje zasilanie czerwienitem gdy wagonik jest wykryty
Vehicle for fast travel on rails=Pojazd do szybkiej podróży na torach
Can be ignited by tools or powered activator rail=Może być zapalony przez narzędzia, lub zasilane tor aktywacyjne
Sneak to dismount=Zacznij się skradać by zejść

View File

@ -1,4 +1,4 @@
local S = minetest.get_translator("mcl_minecarts") local S = minetest.get_translator(minetest.get_current_modname())
-- Template rail function -- Template rail function
local function register_rail(itemstring, tiles, def_extras, creative) local function register_rail(itemstring, tiles, def_extras, creative)
@ -206,11 +206,11 @@ register_rail("mcl_minecarts:detector_rail_on",
-- Crafting -- Crafting
minetest.register_craft({ minetest.register_craft({
output = 'mcl_minecarts:rail 16', output = "mcl_minecarts:rail 16",
recipe = { recipe = {
{'mcl_core:iron_ingot', '', 'mcl_core:iron_ingot'}, {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"},
{'mcl_core:iron_ingot', 'mcl_core:stick', 'mcl_core:iron_ingot'}, {"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"},
{'mcl_core:iron_ingot', '', 'mcl_core:iron_ingot'}, {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"},
} }
}) })

View File

@ -96,7 +96,7 @@ local mod_mobspawners = minetest_get_modpath("mcl_mobspawners")
--local height_switcher = false --local height_switcher = false
-- Get translator -- Get translator
local S = minetest.get_translator("mcl_mobs") local S = minetest.get_translator(minetest.get_current_modname())
-- CMI support check -- CMI support check
--local use_cmi = minetest.global_exists("cmi") --local use_cmi = minetest.global_exists("cmi")
@ -429,7 +429,7 @@ function mobs:register_mob(name, def)
--harmed_by_heal = def.harmed_by_heal, --harmed_by_heal = def.harmed_by_heal,
}) })
if minetest_get_modpath("doc_identifier") ~= nil then if minetest_get_modpath("doc_identifier") then
doc.sub.identifier.register_object(name, "basics", "mobs") doc.sub.identifier.register_object(name, "basics", "mobs")
end end

View File

@ -990,7 +990,7 @@ function mobs.mob_step(self, dtime)
if self.memory <= 0 then if self.memory <= 0 then
--reset states when coming out of hostile state --reset states when coming out of hostile state
if self.attacking ~= nil then if self.attacking then
self.state_timer = -1 self.state_timer = -1
end end

View File

@ -41,7 +41,7 @@ mobs.explode_attack_walk = function(self,dtime)
--make mob walk up to player within 2 nodes distance then start exploding --make mob walk up to player within 2 nodes distance then start exploding
if distance_from_attacking >= self.reach and if distance_from_attacking >= self.reach and
--don't allow explosion to cancel unless out of the reach boundary --don't allow explosion to cancel unless out of the reach boundary
not (self.explosion_animation ~= nil and self.explosion_animation > 0 and distance_from_attacking <= self.defuse_reach) then not (self.explosion_animation and self.explosion_animation > 0 and distance_from_attacking <= self.defuse_reach) then
mobs.set_velocity(self, self.run_velocity) mobs.set_velocity(self, self.run_velocity)
mobs.set_mob_animation(self,"run") mobs.set_mob_animation(self,"run")
@ -85,9 +85,8 @@ end
--this is a small helper function to make working with explosion animations easier --this is a small helper function to make working with explosion animations easier
mobs.reverse_explosion_animation = function(self,dtime) mobs.reverse_explosion_animation = function(self,dtime)
--if explosion animation was greater than 0 then reverse it --if explosion animation was greater than 0 then reverse it
if self.explosion_animation ~= nil and self.explosion_animation > 0 then if self.explosion_animation and self.explosion_animation > 0 then
self.explosion_animation = self.explosion_animation - dtime self.explosion_animation = self.explosion_animation - dtime
if self.explosion_animation < 0 then if self.explosion_animation < 0 then
self.explosion_animation = 0 self.explosion_animation = 0

View File

@ -36,9 +36,8 @@ mobs.shoot_projectile_handling = function(arrow_item, pos, dir, yaw, shooter, po
le._collectable = collectable le._collectable = collectable
--play custom shoot sound --play custom shoot sound
if shooter ~= nil and shooter.shoot_sound then if shooter and shooter.shoot_sound then
minetest.sound_play(shooter.shoot_sound, {pos=pos, max_hear_distance=16}, true) minetest.sound_play(shooter.shoot_sound, {pos=pos, max_hear_distance=16}, true)
end end
return obj return obj
end end

View File

@ -5,6 +5,7 @@ local get_node_light = minetest.get_node_light
local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air
local get_biome_name = minetest.get_biome_name local get_biome_name = minetest.get_biome_name
local get_objects_inside_radius = minetest.get_objects_inside_radius local get_objects_inside_radius = minetest.get_objects_inside_radius
local get_connected_players = minetest.get_connected_players
local math_random = math.random local math_random = math.random
@ -18,6 +19,7 @@ local vector_floor = vector.floor
local table_copy = table.copy local table_copy = table.copy
local table_remove = table.remove local table_remove = table.remove
local pairs = pairs
-- range for mob count -- range for mob count
local aoc_range = 48 local aoc_range = 48
@ -279,7 +281,7 @@ function mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_ligh
end end
-- if toggle set to nil then ignore day/night check -- if toggle set to nil then ignore day/night check
if day_toggle ~= nil then if day_toggle then
local tod = (minetest.get_timeofday() or 0) * 24000 local tod = (minetest.get_timeofday() or 0) * 24000
@ -369,7 +371,7 @@ function mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_ligh
if minetest.registered_nodes[node_ok(pos2).name].walkable == true then if minetest.registered_nodes[node_ok(pos2).name].walkable == true then
-- inside block -- inside block
minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too little space!") minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too little space!")
if ent.spawn_small_alternative ~= nil and (not minetest.registered_nodes[node_ok(pos).name].walkable) then if ent.spawn_small_alternative and (not minetest.registered_nodes[node_ok(pos).name].walkable) then
minetest.log("info", "Trying to spawn smaller alternative mob: "..ent.spawn_small_alternative) minetest.log("info", "Trying to spawn smaller alternative mob: "..ent.spawn_small_alternative)
spawn_action(orig_pos, node, active_object_count, active_object_count_wider, ent.spawn_small_alternative) spawn_action(orig_pos, node, active_object_count, active_object_count_wider, ent.spawn_small_alternative)
end end
@ -540,7 +542,7 @@ if mobs_spawn then
timer = timer + dtime timer = timer + dtime
if timer >= 10 then if timer >= 10 then
timer = 0 timer = 0
for _,player in pairs(minetest.get_connected_players()) do for _,player in pairs(get_connected_players()) do
-- after this line each "break" means "continue" -- after this line each "break" means "continue"
local do_mob_spawning = true local do_mob_spawning = true
repeat repeat
@ -548,15 +550,15 @@ if mobs_spawn then
--they happen in a single server step --they happen in a single server step
local player_pos = player:get_pos() local player_pos = player:get_pos()
local _,dimension = mcl_worlds.y_to_layer(player_pos.y) local dimension = mcl_worlds.pos_to_dimension(player_pos)
if dimension == "void" or dimension == "default" then if dimension == "void" or dimension == "default" then
break -- ignore void and unloaded area break -- ignore void and unloaded area
end end
local min,max = decypher_limits(player_pos.y) local min, max = decypher_limits(player_pos.y)
for i = 1,math_random(1,4) do for i = 1, math_random(1,4) do
-- after this line each "break" means "continue" -- after this line each "break" means "continue"
local do_mob_algorithm = true local do_mob_algorithm = true
repeat repeat

View File

@ -1,5 +1,5 @@
local S = minetest.get_translator("mcl_mobs") local S = minetest.get_translator(minetest.get_current_modname())
-- name tag -- name tag
minetest.register_craftitem("mcl_mobs:nametag", { minetest.register_craftitem("mcl_mobs:nametag", {

View File

@ -0,0 +1,11 @@
# textdomain: mcl_mobs
Peaceful mode active! No monsters will spawn.=Tryb pokojowy aktywowany! Potwory nie będą się pojawiać.
This allows you to place a single mob.=To pozwala na przywołanie jednego moba.
Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=Postaw to w miejscu w którym chcesz aby pojawił się mob. Zwierzęta pojawią się jako oswojone chyba, że będziesz się skradał podczas stawiania. Jeśli postawisz to na spawnerze to zmienisz którego moba przywołuje.
You need the “maphack” privilege to change the mob spawner.=Potrzebujesz przywileju "maphack", aby zmienić spawner.
Name Tag=Znacznik
A name tag is an item to name a mob.=Znacznik jest przedmiotem pozwalającym nazwać moba.
Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=Zanim użyjesz znacznika musisz wybrać imię przy kowadle. Następnie możesz użyć znacznika by nazwać moba. To zużywa znacznik.
Only peaceful mobs allowed!=Tylko pokojowe moby są dozwolone!
Give names to mobs=Nazwij moby
Set name at anvil=Wybierz imię przy kowadle

View File

@ -1,8 +1,9 @@
mcl_paintings = {} mcl_paintings = {}
dofile(minetest.get_modpath(minetest.get_current_modname()).."/paintings.lua") local modname = minetest.get_current_modname()
dofile(minetest.get_modpath(modname).."/paintings.lua")
local S = minetest.get_translator("mcl_paintings") local S = minetest.get_translator(modname)
local math = math local math = math

View File

@ -0,0 +1,2 @@
# textdomain:mcl_paintings
Painting=Obraz

View File

@ -8,7 +8,7 @@
-- NOTE: Most strings intentionally not marked for translation, other mods already have these items. -- NOTE: Most strings intentionally not marked for translation, other mods already have these items.
-- TODO: Remove this file eventually, most items are already outsourced in other mods. -- TODO: Remove this file eventually, most items are already outsourced in other mods.
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
local c = mobs_mc.is_item_variable_overridden local c = mobs_mc.is_item_variable_overridden
@ -234,8 +234,8 @@ end
if c("ender_eye") and c("blaze_powder") and c("blaze_rod") then if c("ender_eye") and c("blaze_powder") and c("blaze_rod") then
minetest.register_craft({ minetest.register_craft({
type = "shapeless", type = "shapeless",
output = 'mobs_mc:ender_eye', output = "mobs_mc:ender_eye",
recipe = { 'mobs_mc:blaze_powder', 'mobs_mc:blaze_rod'}, recipe = { "mobs_mc:blaze_powder", "mobs_mc:blaze_rod"},
}) })
end end

View File

@ -6,7 +6,7 @@
-- NOTE: Strings intentionally not marked for translation, other mods already have these items. -- NOTE: Strings intentionally not marked for translation, other mods already have these items.
-- TODO: Remove this file eventually, all items here are already outsourced in other mods. -- TODO: Remove this file eventually, all items here are already outsourced in other mods.
--local S = minetest.get_translator("mobs_mc") --local S = minetest.get_translator(minetest.get_current_modname())
--maikerumines throwing code --maikerumines throwing code
--arrow (weapon) --arrow (weapon)
@ -83,7 +83,7 @@ THROWING_ARROW_ENTITY.on_step = function(self, dtime)
if self.timer>0.2 then if self.timer>0.2 then
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1.5) local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1.5)
for k, obj in pairs(objs) do for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then if obj:get_luaentity() then
if obj:get_luaentity().name ~= "mobs_mc:arrow_entity" and obj:get_luaentity().name ~= "__builtin:item" then if obj:get_luaentity().name ~= "mobs_mc:arrow_entity" and obj:get_luaentity().name ~= "__builtin:item" then
local damage = 3 local damage = 3
minetest.sound_play("damage", {pos = pos}, true) minetest.sound_play("damage", {pos = pos}, true)
@ -108,7 +108,7 @@ THROWING_ARROW_ENTITY.on_step = function(self, dtime)
if self.lastpos.x~=nil then if self.lastpos.x~=nil then
if node.name ~= "air" then if node.name ~= "air" then
minetest.sound_play("bowhit1", {pos = pos}, true) minetest.sound_play("bowhit1", {pos = pos}, true)
minetest.add_item(self.lastpos, 'mobs_mc:arrow') minetest.add_item(self.lastpos, "mobs_mc:arrow")
self.object:remove() self.object:remove()
end end
end end
@ -155,7 +155,7 @@ end
if c("arrow") and c("flint") and c("feather") and c("stick") then if c("arrow") and c("flint") and c("feather") and c("stick") then
minetest.register_craft({ minetest.register_craft({
output = 'mobs_mc:arrow 4', output = "mobs_mc:arrow 4",
recipe = { recipe = {
{mobs_mc.items.flint}, {mobs_mc.items.flint},
{mobs_mc.items.stick}, {mobs_mc.items.stick},
@ -181,11 +181,11 @@ if c("bow") then
}) })
minetest.register_craft({ minetest.register_craft({
output = 'mobs_mc:bow_wood', output = "mobs_mc:bow_wood",
recipe = { recipe = {
{mobs_mc.items.string, mobs_mc.items.stick, ''}, {mobs_mc.items.string, mobs_mc.items.stick, ""},
{mobs_mc.items.string, '', mobs_mc.items.stick}, {mobs_mc.items.string, "", mobs_mc.items.stick},
{mobs_mc.items.string, mobs_mc.items.stick, ''}, {mobs_mc.items.string, mobs_mc.items.stick, ""},
} }
}) })
end end
@ -259,7 +259,7 @@ if c("egg") then
}) })
-- shoot egg -- shoot egg
local mobs_shoot_egg = function (item, player, pointed_thing) local function mobs_shoot_egg(item, player, pointed_thing)
local playerpos = player:get_pos() local playerpos = player:get_pos()
@ -349,7 +349,7 @@ mobs:register_arrow("mobs_mc:snowball_entity", {
if c("snowball") then if c("snowball") then
-- shoot snowball -- shoot snowball
local mobs_shoot_snowball = function (item, player, pointed_thing) local function mobs_shoot_snowball(item, player, pointed_thing)
local playerpos = player:get_pos() local playerpos = player:get_pos()

View File

@ -5,7 +5,7 @@
-- TODO: Remove this file eventually, all items here are already outsourced in other mods. -- TODO: Remove this file eventually, all items here are already outsourced in other mods.
-- TODO: Add translation. -- TODO: Add translation.
--local S = minetest.get_translator("mobs_mc") --local S = local S = minetest.get_translator(minetest.get_current_modname())
-- Heads system -- Heads system

View File

@ -2,7 +2,7 @@
--################### AGENT - seemingly unused --################### AGENT - seemingly unused
--################### --###################
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
mobs:register_mob("mobs_mc:agent", { mobs:register_mob("mobs_mc:agent", {
type = "npc", type = "npc",

View File

@ -1,6 +1,6 @@
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
mobs:register_mob("mobs_mc:bat", { mobs:register_mob("mobs_mc:bat", {
description = S("Bat"), description = S("Bat"),

View File

@ -3,7 +3,7 @@
-- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models -hi 22i ~jordan4ibanez -- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models -hi 22i ~jordan4ibanez
-- blaze.lua partial copy of mobs_mc/ghast.lua -- blaze.lua partial copy of mobs_mc/ghast.lua
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### BLAZE --################### BLAZE

View File

@ -1,6 +1,6 @@
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### CHICKEN --################### CHICKEN

View File

@ -1,6 +1,6 @@
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
local cow_def = { local cow_def = {
description = S("Cow"), description = S("Cow"),

View File

@ -1,6 +1,6 @@
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### CREEPER --################### CREEPER
@ -72,7 +72,7 @@ mobs:register_mob("mobs_mc:creeper", {
-- TODO: Make creeper flash after doing this as well. -- TODO: Make creeper flash after doing this as well.
-- TODO: Test and debug this code. -- TODO: Test and debug this code.
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
if self._forced_explosion_countdown_timer ~= nil then if self._forced_explosion_countdown_timer then
return return
end end
local item = clicker:get_wielded_item() local item = clicker:get_wielded_item()
@ -92,7 +92,7 @@ mobs:register_mob("mobs_mc:creeper", {
end end
end, end,
do_custom = function(self, dtime) do_custom = function(self, dtime)
if self._forced_explosion_countdown_timer ~= nil then if self._forced_explosion_countdown_timer then
self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime
if self._forced_explosion_countdown_timer <= 0 then if self._forced_explosion_countdown_timer <= 0 then
mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength) mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength)
@ -196,7 +196,7 @@ mobs:register_mob("mobs_mc:creeper_charged", {
-- TODO: Make creeper flash after doing this as well. -- TODO: Make creeper flash after doing this as well.
-- TODO: Test and debug this code. -- TODO: Test and debug this code.
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
if self._forced_explosion_countdown_timer ~= nil then if self._forced_explosion_countdown_timer then
return return
end end
local item = clicker:get_wielded_item() local item = clicker:get_wielded_item()
@ -216,7 +216,7 @@ mobs:register_mob("mobs_mc:creeper_charged", {
end end
end, end,
do_custom = function(self, dtime) do_custom = function(self, dtime)
if self._forced_explosion_countdown_timer ~= nil then if self._forced_explosion_countdown_timer then
self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime
if self._forced_explosion_countdown_timer <= 0 then if self._forced_explosion_countdown_timer <= 0 then
mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength) mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength)

View File

@ -2,7 +2,7 @@
--################### ENDERDRAGON --################### ENDERDRAGON
--################### --###################
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
mobs:register_mob("mobs_mc:enderdragon", { mobs:register_mob("mobs_mc:enderdragon", {
description = S("Ender Dragon"), description = S("Ender Dragon"),

View File

@ -24,9 +24,11 @@
-- added rain damage. -- added rain damage.
-- fixed the grass_with_dirt issue. -- fixed the grass_with_dirt issue.
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
local telesound = function(pos, is_source) local vector = vector
local function telesound(pos, is_source)
local snd local snd
if is_source then if is_source then
snd = "mobs_mc_enderman_teleport_src" snd = "mobs_mc_enderman_teleport_src"
@ -302,7 +304,7 @@ mobs:register_mob("mobs_mc:enderman", {
if self.attacking then if self.attacking then
local target = self.attacking local target = self.attacking
local pos = target:get_pos() local pos = target:get_pos()
if pos ~= nil then if pos then
if vector.distance(self.object:get_pos(), target:get_pos()) > 10 then if vector.distance(self.object:get_pos(), target:get_pos()) > 10 then
self:teleport(target) self:teleport(target)
end end
@ -341,8 +343,8 @@ mobs:register_mob("mobs_mc:enderman", {
-- self:teleport(nil) -- self:teleport(nil)
-- self.state = "" -- self.state = ""
--else --else
if self.attack ~= nil and not minetest.settings:get_bool("creative_mode") then if self.attack and not minetest.settings:get_bool("creative_mode") then
self.state = 'attack' self.state = "attack"
end end
--end --end
end end
@ -459,7 +461,7 @@ mobs:register_mob("mobs_mc:enderman", {
end end
end end
end end
elseif self._taken_node ~= nil and self._taken_node ~= "" and self._take_place_timer >= self._next_take_place_time then elseif self._taken_node and self._taken_node ~= "" and self._take_place_timer >= self._next_take_place_time then
-- Place taken node -- Place taken node
self._take_place_timer = 0 self._take_place_timer = 0
self._next_take_place_time = math.random(take_frequency_min, take_frequency_max) self._next_take_place_time = math.random(take_frequency_min, take_frequency_max)
@ -485,12 +487,12 @@ mobs:register_mob("mobs_mc:enderman", {
end end
end, end,
do_teleport = function(self, target) do_teleport = function(self, target)
if target ~= nil then if target then
local target_pos = target:get_pos() local target_pos = target:get_pos()
-- Find all solid nodes below air in a 10×10×10 cuboid centered on the target -- Find all solid nodes below air in a 10×10×10 cuboid centered on the target
local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(target_pos, 5), vector.add(target_pos, 5), {"group:solid", "group:cracky", "group:crumbly"}) local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(target_pos, 5), vector.add(target_pos, 5), {"group:solid", "group:cracky", "group:crumbly"})
local telepos local telepos
if nodes ~= nil then if nodes then
if #nodes > 0 then if #nodes > 0 then
-- Up to 64 attempts to teleport -- Up to 64 attempts to teleport
for n=1, math.min(64, #nodes) do for n=1, math.min(64, #nodes) do
@ -525,7 +527,7 @@ mobs:register_mob("mobs_mc:enderman", {
-- We need to add (or subtract) different random numbers to each vector component, so it couldn't be done with a nice single vector.add() or .subtract(): -- We need to add (or subtract) different random numbers to each vector component, so it couldn't be done with a nice single vector.add() or .subtract():
local randomCube = vector.new( pos.x + 8*(pr:next(0,16)-8), pos.y + 8*(pr:next(0,16)-8), pos.z + 8*(pr:next(0,16)-8) ) local randomCube = vector.new( pos.x + 8*(pr:next(0,16)-8), pos.y + 8*(pr:next(0,16)-8), pos.z + 8*(pr:next(0,16)-8) )
local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(randomCube, 4), vector.add(randomCube, 4), {"group:solid", "group:cracky", "group:crumbly"}) local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(randomCube, 4), vector.add(randomCube, 4), {"group:solid", "group:cracky", "group:crumbly"})
if nodes ~= nil then if nodes then
if #nodes > 0 then if #nodes > 0 then
-- Up to 8 low-level (in total up to 8*8 = 64) attempts to teleport -- Up to 8 low-level (in total up to 8*8 = 64) attempts to teleport
for n=1, math.min(8, #nodes) do for n=1, math.min(8, #nodes) do
@ -557,13 +559,13 @@ mobs:register_mob("mobs_mc:enderman", {
end, end,
on_die = function(self, pos) on_die = function(self, pos)
-- Drop carried node on death -- Drop carried node on death
if self._taken_node ~= nil and self._taken_node ~= "" then if self._taken_node and self._taken_node ~= "" then
minetest.add_item(pos, self._taken_node) minetest.add_item(pos, self._taken_node)
end end
end, end,
do_punch = function(self, hitter, tflp, tool_caps, dir) do_punch = function(self, hitter, tflp, tool_caps, dir)
-- damage from rain caused by itself so we don't want it to attack itself. -- damage from rain caused by itself so we don't want it to attack itself.
if hitter ~= self.object and hitter ~= nil then if hitter ~= self.object and hitter then
--if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then --if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then
-- self:teleport(nil) -- self:teleport(nil)
--else --else

View File

@ -2,7 +2,7 @@
--################### ENDERMITE --################### ENDERMITE
--################### --###################
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
mobs:register_mob("mobs_mc:endermite", { mobs:register_mob("mobs_mc:endermite", {
description = S("Endermite"), description = S("Endermite"),

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### GHAST --################### GHAST

View File

@ -2,7 +2,7 @@
--################### GUARDIAN --################### GUARDIAN
--################### --###################
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
mobs:register_mob("mobs_mc:guardian", { mobs:register_mob("mobs_mc:guardian", {
description = S("Guardian"), description = S("Guardian"),

View File

@ -4,7 +4,7 @@
--################### GUARDIAN --################### GUARDIAN
--################### --###################
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
mobs:register_mob("mobs_mc:guardian_elder", { mobs:register_mob("mobs_mc:guardian_elder", {
description = S("Elder Guardian"), description = S("Elder Guardian"),

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### HORSE --################### HORSE

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local path = minetest.get_modpath("mobs_mc") local path = minetest.get_modpath(minetest.get_current_modname())
if not minetest.get_modpath("mobs_mc_gameconfig") then if not minetest.get_modpath("mobs_mc_gameconfig") then
mobs_mc = {} mobs_mc = {}

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### IRON GOLEM --################### IRON GOLEM

View File

@ -1,4 +1,4 @@
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### LLAMA --################### LLAMA

View File

@ -0,0 +1,75 @@
# textdomain: mobs_mc
Totem of Undying=Token nieśmiertelności
A totem of undying is a rare artifact which may safe you from certain death.=Totem nieśmiertelności to rzadki artefakt, który może uchronić cię przed pewną śmiercią.
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Totem działa tylko kiedy trzymasz go w dłoni. Jeśli otrzymasz obrażenia od upadku zostaniesz oszczędzony i pozostanie ci 1 HP, jednak totem zostanie wtedy zniszczony.
Agent=Agent
Bat=Nietoperz
Blaze=Płomyk
Chicken=Kurczak
Cow=Krowa
Mooshroom=Muuuchomor
Creeper=Creeper
Ender Dragon=Smok kresu
Enderman=Enderman
Endermite=Endermit
Ghast=Ghast
Elder Guardian=Prastrażnik
Guardian=Strażnik
Horse=Koń
Skeleton Horse=Koń szkielet
Zombie Horse=Koń zombie
Donkey=Osioł
Mule=Muł
Iron Golem=Żelazny golem
Llama=Lama
Ocelot=Ocelot
Parrot=Papuga
Pig=Świnia
Polar Bear=Niedźwiedź polarny
Rabbit=Królik
Killer Bunny=Królik zabójca
Sheep=Owca
Shulker=Shulker
Silverfish=Rybik cukrowy
Skeleton=Szkielet
Stray=Tułacz
Wither Skeleton=Witherowy szkielet
Magma Cube=Kostka magmy
Slime=Szlam
Snow Golem=Śnieżny golem
Spider=Pająk
Cave Spider=Pająk jaskiniowy
Squid=Kałamarnica
Vex=Dręczyciel
Evoker=Przywoływacz
Illusioner=Iluzjonista
Villager=Osadnik
Vindicator=Obrońca
Zombie Villager=Osadnik zombie
Witch=Wiedźma
Wither=Wither
Wolf=Wilk
Husk=Posuch
Zombie=Zombie
Zombie Pigman=Świniak zombie
Iron Horse Armor=Żelazna zbroja dla konia
Iron horse armor can be worn by horses to increase their protection from harm a bit.=Żelazna zbroja dla konia może być noszona przez konie aby nieco zwiększyć ich odporność na obrażenia.
Golden Horse Armor=Złota zbroja dla konia
Golden horse armor can be worn by horses to increase their protection from harm.=Złota zbroja dla konia może być noszona przez konie aby zwiększyć ich odporność na obrażenia.
Diamond Horse Armor=Diamentowa zbroja dla konia
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Diamentowa zbroja dla konia może być noszona przez konie aby istotnie zwiększyć ich odporność na obrażenia.
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Połóż ją na koniu aby założyć zbroję dla konia. Osły i muły nie mogą nosić zbroi dla konia.
Farmer=Rolnik
Fisherman=Rybak
Fletcher=Łuczarz
Shepherd=Pasterz
Librarian=Bibliotekarz
Cartographer=Kartograf
Armorer=Płatnerz
Leatherworker=Rymarz
Butcher=Rzeźnik
Weapon Smith=Zbrojmistrz
Tool Smith=Narzędziarz
Cleric=Kapłan
Nitwit=Głupiec
Protects you from death while wielding it=Chroni przed śmiercią gdy go trzymasz

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### OCELOT AND CAT --################### OCELOT AND CAT

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### PARROT --################### PARROT

View File

@ -1,6 +1,6 @@
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
mobs:register_mob("mobs_mc:pig", { mobs:register_mob("mobs_mc:pig", {
description = S("Pig"), description = S("Pig"),

View File

@ -1,6 +1,6 @@
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### POLARBEAR --################### POLARBEAR

View File

@ -1,6 +1,6 @@
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
local rabbit = { local rabbit = {
description = S("Rabbit"), description = S("Rabbit"),

View File

@ -1,6 +1,6 @@
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### SHEEP --################### SHEEP
@ -38,7 +38,7 @@ local rainbow_colors = {
"unicolor_red_violet" "unicolor_red_violet"
} }
if minetest.get_modpath("mcl_wool") ~= nil then if minetest.get_modpath("mcl_wool") then
colors["unicolor_light_blue"] = { mobs_mc.items.wool_light_blue, "#5050FFD0" } colors["unicolor_light_blue"] = { mobs_mc.items.wool_light_blue, "#5050FFD0" }
end end

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### SHULKER --################### SHULKER

View File

@ -2,7 +2,7 @@
--################### SILVERFISH --################### SILVERFISH
--################### --###################
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
mobs:register_mob("mobs_mc:silverfish", { mobs:register_mob("mobs_mc:silverfish", {
description = S("Silverfish"), description = S("Silverfish"),
@ -61,7 +61,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then
description = "Stone Monster Egg", description = "Stone Monster Egg",
tiles = {"default_stone.png"}, tiles = {"default_stone.png"},
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
drop = '', drop = "",
is_ground_content = true, is_ground_content = true,
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
after_dig_node = spawn_silverfish, after_dig_node = spawn_silverfish,
@ -72,7 +72,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then
tiles = {"default_cobble.png"}, tiles = {"default_cobble.png"},
is_ground_content = false, is_ground_content = false,
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
drop = '', drop = "",
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
after_dig_node = spawn_silverfish, after_dig_node = spawn_silverfish,
}) })
@ -82,7 +82,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then
tiles = {"default_mossycobble.png"}, tiles = {"default_mossycobble.png"},
is_ground_content = false, is_ground_content = false,
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
drop = '', drop = "",
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
after_dig_node = spawn_silverfish, after_dig_node = spawn_silverfish,
}) })
@ -94,7 +94,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then
tiles = {"default_stone_brick.png"}, tiles = {"default_stone_brick.png"},
is_ground_content = false, is_ground_content = false,
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
drop = '', drop = "",
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
after_dig_node = spawn_silverfish, after_dig_node = spawn_silverfish,
}) })
@ -104,7 +104,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then
tiles = {"default_stone_block.png"}, tiles = {"default_stone_block.png"},
is_ground_content = false, is_ground_content = false,
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
drop = '', drop = "",
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
after_dig_node = spawn_silverfish, after_dig_node = spawn_silverfish,
}) })

View File

@ -3,8 +3,8 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
local mod_bows = minetest.get_modpath("mcl_bows") ~= nil local mod_bows = minetest.get_modpath("mcl_bows")
--################### --###################
--################### SKELETON --################### SKELETON

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### WITHER SKELETON --################### WITHER SKELETON

View File

@ -1,6 +1,6 @@
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
-- Returns a function that spawns children in a circle around pos. -- Returns a function that spawns children in a circle around pos.
-- To be used as on_die callback. -- To be used as on_die callback.
@ -41,10 +41,10 @@ local spawn_children_on_die = function(child_mob, children_count, spawn_distance
-- If mother was murdered, children attack the killer after 1 second -- If mother was murdered, children attack the killer after 1 second
if self.state == "attack" then if self.state == "attack" then
minetest.after(1.0, function(children, enemy) minetest.after(1.0, function(children, enemy)
for c=1, #children do for c = 1, #children do
local child = children[c] local child = children[c]
local le = child:get_luaentity() local le = child:get_luaentity()
if le ~= nil then if le then
le.state = "attack" le.state = "attack"
le.attack = enemy le.attack = enemy
end end

View File

@ -3,12 +3,12 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
local snow_trail_frequency = 0.5 -- Time in seconds for checking to add a new snow trail local snow_trail_frequency = 0.5 -- Time in seconds for checking to add a new snow trail
local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
local mod_throwing = minetest.get_modpath("mcl_throwing") ~= nil local mod_throwing = minetest.get_modpath("mcl_throwing")
local gotten_texture = { local gotten_texture = {
"mobs_mc_snowman.png", "mobs_mc_snowman.png",

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### SPIDER --################### SPIDER

View File

@ -4,7 +4,7 @@
--################### SQUID --################### SQUID
--################### --###################
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
mobs:register_mob("mobs_mc:squid", { mobs:register_mob("mobs_mc:squid", {
description = S("Squid"), description = S("Squid"),

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### VEX --################### VEX

View File

@ -19,7 +19,7 @@
-- TODO: Internal inventory, pick up items, trade with other villagers -- TODO: Internal inventory, pick up items, trade with other villagers
-- TODO: Farm stuff -- TODO: Farm stuff
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
local N = function(s) return s end local N = function(s) return s end
local F = minetest.formspec_escape local F = minetest.formspec_escape

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### EVOKER --################### EVOKER

View File

@ -3,8 +3,8 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
local mod_bows = minetest.get_modpath("mcl_bows") ~= nil local mod_bows = minetest.get_modpath("mcl_bows")
mobs:register_mob("mobs_mc:illusioner", { mobs:register_mob("mobs_mc:illusioner", {
description = S("Illusioner"), description = S("Illusioner"),

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### VINDICATOR --################### VINDICATOR

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### ZOMBIE VILLAGER --################### ZOMBIE VILLAGER

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### WITCH --################### WITCH

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### WITHER --################### WITHER

View File

@ -1,6 +1,6 @@
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
local default_walk_chance = 50 local default_walk_chance = 50

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### ZOMBIE --################### ZOMBIE

View File

@ -3,7 +3,7 @@
--made for MC like Survival game --made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes --License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc") local S = minetest.get_translator(minetest.get_current_modname())
--################### --###################
--################### ZOMBIE PIGMAN --################### ZOMBIE PIGMAN

View File

@ -1,6 +1,7 @@
--[[ --[[
Copyright (C) 2016 - Auke Kok <sofar@foo-projects.org> Copyright (C) 2016 - Auke Kok <sofar@foo-projects.org>
Adapted by MineClone2 contributors
"lightning" is free software; you can redistribute it and/or modify "lightning" is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as it under the terms of the GNU Lesser General Public License as
@ -9,7 +10,7 @@ of the license, or (at your option) any later version.
--]] --]]
local S = minetest.get_translator("lightning") local S = minetest.get_translator(minetest.get_current_modname())
local get_connected_players = minetest.get_connected_players local get_connected_players = minetest.get_connected_players
local line_of_sight = minetest.line_of_sight local line_of_sight = minetest.line_of_sight
@ -22,22 +23,22 @@ local add_entity = minetest.add_entity
local get_objects_inside_radius = minetest.get_objects_inside_radius local get_objects_inside_radius = minetest.get_objects_inside_radius
local get_item_group = minetest.get_item_group local get_item_group = minetest.get_item_group
lightning = {} lightning = {
interval_low = 17,
lightning.interval_low = 17 interval_high = 503,
lightning.interval_high = 503 range_h = 100,
lightning.range_h = 100 range_v = 50,
lightning.range_v = 50 size = 100,
lightning.size = 100 -- disable this to stop lightning mod from striking
-- disable this to stop lightning mod from striking auto = true,
lightning.auto = true }
local rng = PcgRandom(32321123312123) local rng = PcgRandom(32321123312123)
local ps = {} local ps = {}
local ttl = -1 local ttl = -1
local revertsky = function(dtime) local function revertsky(dtime)
if ttl == 0 then if ttl == 0 then
return return
end end
@ -96,7 +97,7 @@ end
-- lightning strike API -- lightning strike API
-- * pos: optional, if not given a random pos will be chosen -- * pos: optional, if not given a random pos will be chosen
-- * returns: bool - success if a strike happened -- * returns: bool - success if a strike happened
lightning.strike = function(pos) function lightning.strike(pos)
if lightning.auto then if lightning.auto then
after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike) after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike)
end end

View File

@ -0,0 +1,4 @@
# textdomain: lightning
@1 was struck by lightning.=@1 została trafiona przez piorun.
Let lightning strike at the specified position or yourself=Pozwala by piorun uderzył we wskazaną pozycję lub ciebie
No position specified and unknown player=Nie wskazano pozycji i nieznany gracz

View File

@ -1,4 +1,4 @@
local S = minetest.get_translator("mcl_void_damage") local S = minetest.get_translator(minetest.get_current_modname())
--local enable_damage = minetest.settings:get_bool("enable_damage") --local enable_damage = minetest.settings:get_bool("enable_damage")
local pos_to_dim = mcl_worlds.pos_to_dimension local pos_to_dim = mcl_worlds.pos_to_dimension

View File

@ -0,0 +1,3 @@
# textdomain: mcl_void_damage
The void is off-limits to you!=Otchłań jest poza twoim zasięgiem!
@1 fell into the endless void.=@1 spadła w bezkresną otchłań.

View File

@ -1,4 +1,4 @@
local modpath = minetest.get_modpath("mcl_weather") local modpath = minetest.get_modpath(minetest.get_current_modname())
mcl_weather = {} mcl_weather = {}
@ -12,6 +12,6 @@ dofile(modpath.."/snow.lua")
dofile(modpath.."/rain.lua") dofile(modpath.."/rain.lua")
dofile(modpath.."/nether_dust.lua") dofile(modpath.."/nether_dust.lua")
if minetest.get_modpath("lightning") ~= nil then if minetest.get_modpath("lightning") then
dofile(modpath.."/thunder.lua") dofile(modpath.."/thunder.lua")
end end

View File

@ -0,0 +1,8 @@
# textdomain: mcl_weather
Gives ability to control weather=Daje możliwość kontrolowania pogody
Changes the weather to the specified parameter.=Zmienia pogodę na wskazany parametr
Error: No weather specified.=Błąd: nie wskazano pogody.
Error: Invalid parameters.=Błąd: nieprawidłowy parametr.
Error: Duration can't be less than 1 second.=Błąd: Czas trwania nie może być mniejszy niż 1 sekunda.
Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Błąd: wskazano nieprawidłową pogodę. Użyj "clear", "rain", "snow" lub "thunder".
Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Zmienia pomiędzy czystą pogodą i pogodą z opadami (losowo deszcz, burza lub śnieg)

View File

@ -2,7 +2,7 @@ mcl_weather.nether_dust = {}
mcl_weather.nether_dust.particles_count = 99 mcl_weather.nether_dust.particles_count = 99
-- calculates coordinates and draw particles for Nether dust -- calculates coordinates and draw particles for Nether dust
mcl_weather.nether_dust.add_dust_particles = function(player) function mcl_weather.nether_dust.add_dust_particles(player)
for i=mcl_weather.nether_dust.particles_count, 1,-1 do for i=mcl_weather.nether_dust.particles_count, 1,-1 do
local rpx, rpy, rpz = mcl_weather.get_random_pos_by_player_look_dir(player) local rpx, rpy, rpz = mcl_weather.get_random_pos_by_player_look_dir(player)
minetest.add_particle({ minetest.add_particle({

View File

@ -96,7 +96,7 @@ end
-- be sure to remove sound before removing player otherwise soundhandler reference will be lost. -- be sure to remove sound before removing player otherwise soundhandler reference will be lost.
function mcl_weather.rain.remove_player(player) function mcl_weather.rain.remove_player(player)
local player_meta = mcl_weather.players[player:get_player_name()] local player_meta = mcl_weather.players[player:get_player_name()]
if player_meta ~= nil and player_meta.origin_sky ~= nil then if player_meta and player_meta.origin_sky then
player:set_clouds({color="#FFF0F0E5"}) player:set_clouds({color="#FFF0F0E5"})
mcl_weather.players[player:get_player_name()] = nil mcl_weather.players[player:get_player_name()] = nil
end end
@ -120,12 +120,12 @@ end)
-- when player stay on 'edge' where sound should play and stop depending from random raindrop appearance. -- when player stay on 'edge' where sound should play and stop depending from random raindrop appearance.
function mcl_weather.rain.update_sound(player) function mcl_weather.rain.update_sound(player)
local player_meta = mcl_weather.players[player:get_player_name()] local player_meta = mcl_weather.players[player:get_player_name()]
if player_meta ~= nil then if player_meta then
if player_meta.sound_updated ~= nil and player_meta.sound_updated + 5 > minetest.get_gametime() then if player_meta.sound_updated and player_meta.sound_updated + 5 > minetest.get_gametime() then
return false return false
end end
if player_meta.sound_handler ~= nil then if player_meta.sound_handler then
if mcl_weather.rain.last_rp_count == 0 then if mcl_weather.rain.last_rp_count == 0 then
minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0) minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0)
player_meta.sound_handler = nil player_meta.sound_handler = nil
@ -141,7 +141,7 @@ end
-- rain sound removed from player. -- rain sound removed from player.
function mcl_weather.rain.remove_sound(player) function mcl_weather.rain.remove_sound(player)
local player_meta = mcl_weather.players[player:get_player_name()] local player_meta = mcl_weather.players[player:get_player_name()]
if player_meta ~= nil and player_meta.sound_handler ~= nil then if player_meta and player_meta.sound_handler then
minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0) minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0)
player_meta.sound_handler = nil player_meta.sound_handler = nil
player_meta.sound_updated = nil player_meta.sound_updated = nil

View File

@ -235,7 +235,7 @@ minetest.register_globalstep(function(dtime)
end) end)
local initsky = function(player) local function initsky(player)
if (mcl_weather.skycolor.active) then if (mcl_weather.skycolor.active) then
mcl_weather.skycolor.force_update = true mcl_weather.skycolor.force_update = true
end end

View File

@ -6,7 +6,7 @@ mcl_weather.snow.particles_count = 15
mcl_weather.snow.init_done = false mcl_weather.snow.init_done = false
-- calculates coordinates and draw particles for snow weather -- calculates coordinates and draw particles for snow weather
mcl_weather.snow.add_snow_particles = function(player) function mcl_weather.snow.add_snow_particles(player)
mcl_weather.rain.last_rp_count = 0 mcl_weather.rain.last_rp_count = 0
for i=mcl_weather.snow.particles_count, 1,-1 do for i=mcl_weather.snow.particles_count, 1,-1 do
local random_pos_x, _, random_pos_z = mcl_weather.get_random_pos_by_player_look_dir(player) local random_pos_x, _, random_pos_z = mcl_weather.get_random_pos_by_player_look_dir(player)
@ -30,7 +30,7 @@ mcl_weather.snow.add_snow_particles = function(player)
end end
end end
mcl_weather.snow.set_sky_box = function() function mcl_weather.snow.set_sky_box()
mcl_weather.skycolor.add_layer( mcl_weather.skycolor.add_layer(
"weather-pack-snow-sky", "weather-pack-snow-sky",
{{r=0, g=0, b=0}, {{r=0, g=0, b=0},

View File

@ -1,4 +1,4 @@
local S = minetest.get_translator("mcl_weather") local S = minetest.get_translator(minetest.get_current_modname())
local math = math local math = math
@ -39,7 +39,7 @@ mcl_weather.reg_weathers["none"] = {
local storage = minetest.get_mod_storage() local storage = minetest.get_mod_storage()
-- Save weather into mod storage, so it can be loaded after restarting the server -- Save weather into mod storage, so it can be loaded after restarting the server
local save_weather = function() local function save_weather()
if not mcl_weather.end_time then return end if not mcl_weather.end_time then return end
storage:set_string("mcl_weather_state", mcl_weather.state) storage:set_string("mcl_weather_state", mcl_weather.state)
storage:set_int("mcl_weather_end_time", mcl_weather.end_time) storage:set_int("mcl_weather_end_time", mcl_weather.end_time)
@ -47,9 +47,9 @@ local save_weather = function()
end end
minetest.register_on_shutdown(save_weather) minetest.register_on_shutdown(save_weather)
mcl_weather.get_rand_end_time = function(min_duration, max_duration) function mcl_weather.get_rand_end_time(min_duration, max_duration)
local r local r
if min_duration ~= nil and max_duration ~= nil then if min_duration and max_duration then
r = math.random(min_duration, max_duration) r = math.random(min_duration, max_duration)
else else
r = math.random(mcl_weather.min_duration, mcl_weather.max_duration) r = math.random(mcl_weather.min_duration, mcl_weather.max_duration)
@ -57,7 +57,7 @@ mcl_weather.get_rand_end_time = function(min_duration, max_duration)
return minetest.get_gametime() + r return minetest.get_gametime() + r
end end
mcl_weather.get_current_light_factor = function() function mcl_weather.get_current_light_factor()
if mcl_weather.state == "none" then if mcl_weather.state == "none" then
return nil return nil
else else
@ -68,7 +68,7 @@ end
-- Returns true if pos is outdoor. -- Returns true if pos is outdoor.
-- Outdoor is defined as any node in the Overworld under open sky. -- Outdoor is defined as any node in the Overworld under open sky.
-- FIXME: Nodes below glass also count as “outdoor”, this should not be the case. -- FIXME: Nodes below glass also count as “outdoor”, this should not be the case.
mcl_weather.is_outdoor = function(pos) function mcl_weather.is_outdoor(pos)
local cpos = {x=pos.x, y=pos.y+1, z=pos.z} local cpos = {x=pos.x, y=pos.y+1, z=pos.z}
local dim = mcl_worlds.pos_to_dimension(cpos) local dim = mcl_worlds.pos_to_dimension(cpos)
if minetest.get_node_light(cpos, 0.5) == 15 and dim == "overworld" then if minetest.get_node_light(cpos, 0.5) == 15 and dim == "overworld" then
@ -79,7 +79,7 @@ end
-- checks if player is undewater. This is needed in order to -- checks if player is undewater. This is needed in order to
-- turn off weather particles generation. -- turn off weather particles generation.
mcl_weather.is_underwater = function(player) function mcl_weather.is_underwater(player)
local ppos = player:get_pos() local ppos = player:get_pos()
local offset = player:get_eye_offset() local offset = player:get_eye_offset()
local player_eye_pos = {x = ppos.x + offset.x, local player_eye_pos = {x = ppos.x + offset.x,
@ -94,7 +94,7 @@ end
-- trying to locate position for particles by player look direction for performance reason. -- trying to locate position for particles by player look direction for performance reason.
-- it is costly to generate many particles around player so goal is focus mainly on front view. -- it is costly to generate many particles around player so goal is focus mainly on front view.
mcl_weather.get_random_pos_by_player_look_dir = function(player) function mcl_weather.get_random_pos_by_player_look_dir(player)
local look_dir = player:get_look_dir() local look_dir = player:get_look_dir()
local player_pos = player:get_pos() local player_pos = player:get_pos()
@ -123,6 +123,7 @@ mcl_weather.get_random_pos_by_player_look_dir = function(player)
end end
local t, wci = 0, mcl_weather.check_interval local t, wci = 0, mcl_weather.check_interval
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
t = t + dtime t = t + dtime
if t < wci then return end if t < wci then return end
@ -146,7 +147,7 @@ minetest.register_globalstep(function(dtime)
end) end)
-- Sets random weather (which could be 'none' (no weather)). -- Sets random weather (which could be 'none' (no weather)).
mcl_weather.set_random_weather = function(weather_name, weather_meta) function mcl_weather.set_random_weather(weather_name, weather_meta)
if weather_meta == nil then return end if weather_meta == nil then return end
local transitions = weather_meta.transitions local transitions = weather_meta.transitions
local random_roll = math.random(0,100) local random_roll = math.random(0,100)
@ -166,11 +167,11 @@ end
-- * explicit_end_time is OPTIONAL. If specified, explicitly set the -- * explicit_end_time is OPTIONAL. If specified, explicitly set the
-- gametime (minetest.get_gametime) in which the weather ends. -- gametime (minetest.get_gametime) in which the weather ends.
-- * changer is OPTIONAL, for logging purposes. -- * changer is OPTIONAL, for logging purposes.
mcl_weather.change_weather = function(new_weather, explicit_end_time, changer_name) function mcl_weather.change_weather(new_weather, explicit_end_time, changer_name)
local changer_name = changer_name or debug.getinfo(2).name.."()" local changer_name = changer_name or debug.getinfo(2).name.."()"
if (mcl_weather.reg_weathers ~= nil and mcl_weather.reg_weathers[new_weather] ~= nil) then if (mcl_weather.reg_weathers and mcl_weather.reg_weathers[new_weather]) then
if (mcl_weather.state ~= nil and mcl_weather.reg_weathers[mcl_weather.state] ~= nil) then if (mcl_weather.state and mcl_weather.reg_weathers[mcl_weather.state]) then
mcl_weather.reg_weathers[mcl_weather.state].clear() mcl_weather.reg_weathers[mcl_weather.state].clear()
end end
@ -199,7 +200,7 @@ mcl_weather.change_weather = function(new_weather, explicit_end_time, changer_na
return false return false
end end
mcl_weather.get_weather = function() function mcl_weather.get_weather()
return mcl_weather.state return mcl_weather.state
end end
@ -268,12 +269,12 @@ minetest.register_chatcommand("toggledownfall", {
-- Configuration setting which allows user to disable ABM for weathers (if they use it). -- Configuration setting which allows user to disable ABM for weathers (if they use it).
-- Weather mods expected to be use this flag before registering ABM. -- Weather mods expected to be use this flag before registering ABM.
local weather_allow_abm = minetest.settings:get_bool("weather_allow_abm") local weather_allow_abm = minetest.settings:get_bool("weather_allow_abm")
if weather_allow_abm ~= nil and weather_allow_abm == false then if weather_allow_abm == false then
mcl_weather.allow_abm = false mcl_weather.allow_abm = false
end end
local load_weather = function() local function load_weather()
local weather = storage:get_string("mcl_weather_state") local weather = storage:get_string("mcl_weather_state")
if weather and weather ~= "" then if weather and weather ~= "" then
mcl_weather.state = weather mcl_weather.state = weather

View File

@ -1,6 +1,10 @@
local S = minetest.get_translator("doc") local S = minetest.get_translator(minetest.get_current_modname())
local F = function(f) return minetest.formspec_escape(S(f)) end local F = function(f) return minetest.formspec_escape(S(f)) end
local mod_central_messages = minetest.get_modpath("central_message")
local mod_inventory_plus = minetest.get_modpath("inventory_plus")
local math = math
local colorize = minetest.colorize local colorize = minetest.colorize
doc = {} doc = {}
@ -63,7 +67,7 @@ local set_category_order_was_called = false
local function get_entry(category_id, entry_id) local function get_entry(category_id, entry_id)
local category = doc.data.categories[category_id] local category = doc.data.categories[category_id]
local entry local entry
if category ~= nil then if category then
entry = category.entries[entry_id] entry = category.entries[entry_id]
end end
if category == nil or entry == nil then if category == nil or entry == nil then
@ -93,7 +97,7 @@ end
-- Add a new category -- Add a new category
function doc.add_category(id, def) function doc.add_category(id, def)
if doc.data.categories[id] == nil and id ~= nil then if doc.data.categories[id] == nil and id then
doc.data.categories[id] = {} doc.data.categories[id] = {}
doc.data.categories[id].entries = {} doc.data.categories[id].entries = {}
doc.data.categories[id].entry_count = 0 doc.data.categories[id].entry_count = 0
@ -123,7 +127,7 @@ end
-- Add a new entry -- Add a new entry
function doc.add_entry(category_id, entry_id, def) function doc.add_entry(category_id, entry_id, def)
local cat = doc.data.categories[category_id] local cat = doc.data.categories[category_id]
if cat ~= nil then if cat then
local hidden = def.hidden or (def.hidden == nil and cat.def.hide_entries_by_default) local hidden = def.hidden or (def.hidden == nil and cat.def.hide_entries_by_default)
if hidden then if hidden then
cat.hidden_count = cat.hidden_count + 1 cat.hidden_count = cat.hidden_count + 1
@ -177,7 +181,7 @@ function doc.mark_entry_as_revealed(playername, category_id, entry_id)
doc.data.players[playername].entry_textlist_needs_updating = true doc.data.players[playername].entry_textlist_needs_updating = true
-- Notify player of entry revelation -- Notify player of entry revelation
if doc.data.players[playername].stored_data.notify_on_reveal == true then if doc.data.players[playername].stored_data.notify_on_reveal == true then
if minetest.get_modpath("central_message") ~= nil then if mod_central_messages then
local cat = doc.data.categories[category_id] local cat = doc.data.categories[category_id]
cmsg.push_message_player(minetest.get_player_by_name(playername), S("New help entry unlocked: @1 > @2", cat.def.name, entry.name)) cmsg.push_message_player(minetest.get_player_by_name(playername), S("New help entry unlocked: @1 > @2", cat.def.name, entry.name))
end end
@ -224,7 +228,7 @@ function doc.mark_all_entries_as_revealed(playername)
msg = S("All help entries are already revealed.") msg = S("All help entries are already revealed.")
end end
-- Notify -- Notify
if minetest.get_modpath("central_message") ~= nil then if mod_central_messages then
cmsg.push_message_player(minetest.get_player_by_name(playername), msg) cmsg.push_message_player(minetest.get_player_by_name(playername), msg)
else else
minetest.chat_send_player(playername, msg) minetest.chat_send_player(playername, msg)
@ -427,7 +431,7 @@ end
-- Returns the currently viewed entry and/or category of the player -- Returns the currently viewed entry and/or category of the player
function doc.get_selection(playername) function doc.get_selection(playername)
local playerdata = doc.data.players[playername] local playerdata = doc.data.players[playername]
if playerdata ~= nil then if playerdata then
local cat = playerdata.category local cat = playerdata.category
if cat then if cat then
local entry = playerdata.entry local entry = playerdata.entry
@ -448,18 +452,18 @@ end
doc.entry_builders = {} doc.entry_builders = {}
-- Scrollable freeform text -- Scrollable freeform text
doc.entry_builders.text = function(data) function doc.entry_builders.text(data)
local formstring = doc.widgets.text(data, doc.FORMSPEC.ENTRY_START_X, doc.FORMSPEC.ENTRY_START_Y, doc.FORMSPEC.ENTRY_WIDTH - 0.4, doc.FORMSPEC.ENTRY_HEIGHT) local formstring = doc.widgets.text(data, doc.FORMSPEC.ENTRY_START_X, doc.FORMSPEC.ENTRY_START_Y, doc.FORMSPEC.ENTRY_WIDTH - 0.4, doc.FORMSPEC.ENTRY_HEIGHT)
return formstring return formstring
end end
-- Scrollable freeform text with an optional standard gallery (3 rows, 3:2 aspect ratio) -- Scrollable freeform text with an optional standard gallery (3 rows, 3:2 aspect ratio)
doc.entry_builders.text_and_gallery = function(data, playername) function doc.entry_builders.text_and_gallery(data, playername)
-- How much height the image gallery “steals” from the text widget -- How much height the image gallery “steals” from the text widget
local stolen_height = 0 local stolen_height = 0
local formstring = "" local formstring = ""
-- Only add the gallery if images are in the data, otherwise, the text widget gets all of the space -- Only add the gallery if images are in the data, otherwise, the text widget gets all of the space
if data.images ~= nil then if data.images then
local gallery local gallery
gallery, stolen_height = doc.widgets.gallery(data.images, playername, nil, doc.FORMSPEC.ENTRY_END_Y + 0.2, nil, nil, nil, nil, false) gallery, stolen_height = doc.widgets.gallery(data.images, playername, nil, doc.FORMSPEC.ENTRY_END_Y + 0.2, nil, nil, nil, nil, false)
formstring = formstring .. gallery formstring = formstring .. gallery
@ -476,7 +480,7 @@ end
doc.widgets = {} doc.widgets = {}
-- Scrollable freeform text -- Scrollable freeform text
doc.widgets.text = function(data, x, y, width, height) function doc.widgets.text(data, x, y, width, height)
if x == nil then if x == nil then
x = doc.FORMSPEC.ENTRY_START_X x = doc.FORMSPEC.ENTRY_START_X
end end
@ -502,7 +506,7 @@ end
-- Image gallery -- Image gallery
-- Currently, only one gallery per entry is supported. TODO: Add support for multiple galleries in an entry (low priority) -- Currently, only one gallery per entry is supported. TODO: Add support for multiple galleries in an entry (low priority)
doc.widgets.gallery = function(imagedata, playername, x, y, aspect_ratio, width, rows, align_left, align_top) function doc.widgets.gallery(imagedata, playername, x, y, aspect_ratio, width, rows, align_left, align_top)
if playername == nil then return nil end -- emergency exit if playername == nil then return nil end -- emergency exit
local formstring = "" local formstring = ""
@ -591,7 +595,7 @@ doc.widgets.gallery = function(imagedata, playername, x, y, aspect_ratio, width,
end end
-- Direct formspec -- Direct formspec
doc.entry_builders.formspec = function(data) function doc.entry_builders.formspec(data)
return data return data
end end
@ -605,7 +609,7 @@ do
minetest.log("action", "[doc] doc.mt opened.") minetest.log("action", "[doc] doc.mt opened.")
local string = file:read() local string = file:read()
io.close(file) io.close(file)
if(string ~= nil) then if string then
local savetable = minetest.deserialize(string) local savetable = minetest.deserialize(string)
for name, players_stored_data in pairs(savetable.players_stored_data) do for name, players_stored_data in pairs(savetable.players_stored_data) do
doc.data.players[name] = {} doc.data.players[name] = {}
@ -672,12 +676,12 @@ function doc.formspec_main(playername)
local data = doc.data.categories[id] local data = doc.data.categories[id]
local bw = doc.FORMSPEC.WIDTH / math.floor(((doc.data.category_count-1) / CATEGORYFIELDSIZE.HEIGHT)+1) local bw = doc.FORMSPEC.WIDTH / math.floor(((doc.data.category_count-1) / CATEGORYFIELDSIZE.HEIGHT)+1)
-- Skip categories which do not exist -- Skip categories which do not exist
if data ~= nil then if data then
-- Category buton -- Category buton
local button = "button["..((x-1)*bw)..","..y..";"..bw..",1;doc_button_category_"..id..";"..minetest.formspec_escape(data.def.name).."]" local button = "button["..((x-1)*bw)..","..y..";"..bw..",1;doc_button_category_"..id..";"..minetest.formspec_escape(data.def.name).."]"
local tooltip = "" local tooltip = ""
-- Optional description -- Optional description
if data.def.description ~= nil then if data.def.description then
tooltip = "tooltip[doc_button_category_"..id..";"..minetest.formspec_escape(data.def.description).."]" tooltip = "tooltip[doc_button_category_"..id..";"..minetest.formspec_escape(data.def.description).."]"
end end
formstring = formstring .. button .. tooltip formstring = formstring .. button .. tooltip
@ -701,7 +705,7 @@ function doc.formspec_main(playername)
end end
end end
local sel = doc.data.categories[doc.data.players[playername].category] local sel = doc.data.categories[doc.data.players[playername].category]
if sel ~= nil then if sel then
formstring = formstring .. ";" formstring = formstring .. ";"
formstring = formstring .. doc.data.categories[doc.data.players[playername].category].order_position formstring = formstring .. doc.data.categories[doc.data.players[playername].category].order_position
end end
@ -711,7 +715,7 @@ function doc.formspec_main(playername)
notify_checkbox_y = doc.FORMSPEC.HEIGHT-1 notify_checkbox_y = doc.FORMSPEC.HEIGHT-1
end end
local text local text
if minetest.get_modpath("central_message") then if mod_central_messages then
text = F("Notify me when new help is available") text = F("Notify me when new help is available")
else else
text = F("Play notification sound when new help is available") text = F("Play notification sound when new help is available")
@ -802,7 +806,7 @@ function doc.get_sorted_entry_names(cid)
local cat = doc.data.categories[cid] local cat = doc.data.categories[cid]
local used_eids = {} local used_eids = {}
-- Helper function to extract the entry ID out of the output table -- Helper function to extract the entry ID out of the output table
local extract = function(entry_table) local function extract(entry_table)
local eids = {} local eids = {}
for k,v in pairs(entry_table) do for k,v in pairs(entry_table) do
local eid = v.eid local eid = v.eid
@ -944,7 +948,7 @@ function doc.process_form(player,formname,fields)
local playername = player:get_player_name() local playername = player:get_player_name()
--[[ process clicks on the tab header ]] --[[ process clicks on the tab header ]]
if(formname == "doc:main" or formname == "doc:category" or formname == "doc:entry") then if(formname == "doc:main" or formname == "doc:category" or formname == "doc:entry") then
if fields.doc_header ~= nil then if fields.doc_header then
local tab = tonumber(fields.doc_header) local tab = tonumber(fields.doc_header)
local formspec, subformname, contents local formspec, subformname, contents
local cid, eid local cid, eid
@ -959,7 +963,7 @@ function doc.process_form(player,formname,fields)
elseif(tab==3) then elseif(tab==3) then
doc.data.players[playername].galidx = 1 doc.data.players[playername].galidx = 1
contents = doc.formspec_entry(cid, eid, playername) contents = doc.formspec_entry(cid, eid, playername)
if cid ~= nil and eid ~= nil then if cid and eid then
doc.mark_entry_as_viewed(playername, cid, eid) doc.mark_entry_as_viewed(playername, cid, eid)
end end
subformname = "entry" subformname = "entry"
@ -984,7 +988,7 @@ function doc.process_form(player,formname,fields)
if fields["doc_mainlist"] then if fields["doc_mainlist"] then
local event = minetest.explode_textlist_event(fields["doc_mainlist"]) local event = minetest.explode_textlist_event(fields["doc_mainlist"])
local cid = doc.data.category_order[event.index] local cid = doc.data.category_order[event.index]
if cid ~= nil then if cid then
if event.type == "CHG" then if event.type == "CHG" then
doc.data.players[playername].catsel = nil doc.data.players[playername].catsel = nil
doc.data.players[playername].category = cid doc.data.players[playername].category = cid
@ -1014,10 +1018,10 @@ function doc.process_form(player,formname,fields)
elseif(formname == "doc:category") then elseif(formname == "doc:category") then
if fields["doc_button_goto_entry"] then if fields["doc_button_goto_entry"] then
local cid = doc.data.players[playername].category local cid = doc.data.players[playername].category
if cid ~= nil then if cid then
local eid = nil local eid = nil
local eids, catsel = doc.data.players[playername].entry_ids, doc.data.players[playername].catsel local eids, catsel = doc.data.players[playername].entry_ids, doc.data.players[playername].catsel
if eids ~= nil and catsel ~= nil then if eids and catsel then
eid = eids[catsel] eid = eids[catsel]
end end
doc.data.players[playername].galidx = 1 doc.data.players[playername].galidx = 1
@ -1040,7 +1044,7 @@ function doc.process_form(player,formname,fields)
local cid = doc.data.players[playername].category local cid = doc.data.players[playername].category
local eid = nil local eid = nil
local eids, catsel = doc.data.players[playername].entry_ids, event.index local eids, catsel = doc.data.players[playername].entry_ids, event.index
if eids ~= nil and catsel ~= nil then if eids and catsel then
eid = eids[catsel] eid = eids[catsel]
end end
doc.mark_entry_as_viewed(playername, cid, eid) doc.mark_entry_as_viewed(playername, cid, eid)
@ -1101,7 +1105,7 @@ function doc.process_form(player,formname,fields)
minetest.show_formspec(playername, "doc:entry", formspec) minetest.show_formspec(playername, "doc:entry", formspec)
end end
else else
if fields["doc_inventory_plus"] and minetest.get_modpath("inventory_plus") then if fields["doc_inventory_plus"] and mod_inventory_plus then
doc.show_doc(playername) doc.show_doc(playername)
return return
end end
@ -1169,18 +1173,18 @@ minetest.register_on_joinplayer(function(player)
end end
-- Add button for Inventory++ -- Add button for Inventory++
if minetest.get_modpath("inventory_plus") ~= nil then if mod_inventory_plus then
inventory_plus.register_button(player, "doc_inventory_plus", S("Help")) inventory_plus.register_button(player, "doc_inventory_plus", S("Help"))
end end
end) end)
---[[ Add buttons for inventory mods ]] ---[[ Add buttons for inventory mods ]]
local button_action = function(player) local function button_action(player)
doc.show_doc(player:get_player_name()) doc.show_doc(player:get_player_name())
end end
-- Unified Inventory -- Unified Inventory
if minetest.get_modpath("unified_inventory") ~= nil then if minetest.get_modpath("unified_inventory") then
unified_inventory.register_button("doc", { unified_inventory.register_button("doc", {
type = "image", type = "image",
image = "doc_button_icon_hires.png", image = "doc_button_icon_hires.png",
@ -1190,7 +1194,7 @@ if minetest.get_modpath("unified_inventory") ~= nil then
end end
-- sfinv_buttons -- sfinv_buttons
if minetest.get_modpath("sfinv_buttons") ~= nil then if minetest.get_modpath("sfinv_buttons") then
sfinv_buttons.register_button("doc", { sfinv_buttons.register_button("doc", {
image = "doc_button_icon_lores.png", image = "doc_button_icon_lores.png",
tooltip = S("Collection of help texts"), tooltip = S("Collection of help texts"),

View File

@ -0,0 +1,52 @@
# textdomain:doc
<=<
>=>
Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.=Brak dostępu do zażądanego wpisu; ten wpis jest tajemnicą. Możesz odblokować do niego dostęp przez robienie postępów w grze. Wymyśl jak go odblokować.
All entries read.=Wszystkie wpisy przeczytane.
All help entries revealed!=Wszystkie wpisy pomocnicze odkryte!
All help entries are already revealed.=Wszystkie wpisy pomocnicze są już odkryte.
Allows you to reveal all hidden help entries with /help_reveal=Pozwala odkryć wszystkie wpisy pomocnicze przy użyciu /help_reveal
Category list=Lista kategorii
Currently all entries in this category are hidden from you.=Aktualnie wszystkie wpisy w tej kategorii są przed tobą ukryte.
Unlock new entries by progressing in the game.=Odblokuj nowe wpisy przez robienie postępów w grze.
Help=Pomoc
Entry=Wpis
Entry list=Lista wpisów
Error: Access denied.=Błąd: Odmowa dostępu.
Error: No help available.=Błąd: Brak dostępnej pomocy.
Go to category list=Idź do listy kategorii
Go to entry list=Idź do listy wpisów
Help > @1=Pomoc > @1
Help > @1 > @2=Pomoc > @1 > @2
Help > @1 > (No Entry)=Pomoc > @1 > (Brak wpisu)
Help > (No Category)=Pomoc > (Brak kategorii)
Hidden entries: @1=Ukryte wpisy: @1
Nameless entry (@1)=Nienazwany wpis (@1)
New entries: @1=Nowe wpisy: @1
New help entry unlocked: @1 > @2=Nowy wpis pomocniczy odblokowany: @1 > @2
No categories have been registered, but they are required to provide help.=Nie zarejestrowano żadnych kategorii, ale są one wymagane do uzyskania pomocy.
The Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.=System dokumentacji [doc] nie ma sam z siebie żadnej zawartości, potrzebuje dodatkowych modów, które dodadzą zawartość.
Number of entries: @1=Liczba wpisów: @1
OK=OK
Open a window providing help entries about Minetest and more=Otwórz okno aby zobaczyć wpisy pomocnicze na temat Minetest i innych rzeczy
Please select a category you wish to learn more about:=Wybierz kategorię o której chciałbyś się więcej dowiedzieć:
Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.=Rekomendowane mody: doc_basics, doc_items, doc_identifier, doc_encyclopedia.
Reveal all hidden help entries to you=Odkryj wszystkie ukryte wpisy pomocnicze
Show entry=Pokaż wpis
Show category=Pokaż kategorię
Show next entry=Pokaż następny wpis
Show previous entry=Pokaż poprzedni wpis
This category does not have any entries.=W tej kategorii nie ma żadnych wpisów.
This category has the following entries:=W tej kategorii są następujące wpisy:
This category is empty.=Ta kategoria jest pusta.
This is the help.=To jest pomoc.
You haven't chosen a category yet. Please choose one in the category list first.=Nie wybrano żadnej kategorii. Proszę wybrać jedną z listy kategorii.
You haven't chosen an entry yet. Please choose one in the entry list first.=Nie wybrano wpisu. Proszę wybrać jeden z listy wpisów.
Collection of help texts=Kolekcja tekstów pomocniczych.
Notify me when new help is available=Powiadom mnie gdy nowa pomoc jest dostępna.
Play notification sound when new help is available=Odegraj dźwięk powiadomienia gdy nowa pomoc jest dostępna
Show previous image=Pokaż poprzedni obrazek
Show previous gallery page=Pokaż poprzednią stronę galerii
Show next image=Pokaż następny obrazek
Show next gallery page=Pokaż następną stronę galerii

View File

@ -1,4 +1,6 @@
local S = minetest.get_translator("doc_identifier") local S = minetest.get_translator(minetest.get_current_modname())
local mod_doc_basics = minetest.get_modpath("doc_basics")
local doc_identifier = {} local doc_identifier = {}
@ -6,15 +8,16 @@ doc_identifier.registered_objects = {}
-- API -- API
doc.sub.identifier = {} doc.sub.identifier = {}
doc.sub.identifier.register_object = function(object_name, category_id, entry_id)
function doc.sub.identifier.register_object(object_name, category_id, entry_id)
doc_identifier.registered_objects[object_name] = { category = category_id, entry = entry_id } doc_identifier.registered_objects[object_name] = { category = category_id, entry = entry_id }
end end
-- END OF API -- END OF API
doc_identifier.identify = function(itemstack, user, pointed_thing) function doc_identifier.identify(itemstack, user, pointed_thing)
local username = user:get_player_name() local username = user:get_player_name()
local show_message = function(username, itype, param) local function show_message(username, itype, param)
local vsize = 2 local vsize = 2
local message local message
if itype == "error_item" then if itype == "error_item" then
@ -24,9 +27,9 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
elseif itype == "error_unknown" then elseif itype == "error_unknown" then
vsize = vsize + 2 vsize = vsize + 2
local mod local mod
if param ~= nil then if param then
local colon = string.find(param, ":") local colon = string.find(param, ":")
if colon ~= nil and colon > 1 then if colon and colon > 1 then
mod = string.sub(param,1,colon-1) mod = string.sub(param,1,colon-1)
end end
end end
@ -36,8 +39,8 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
S("• The author of the game or a mod has made a mistake") S("• The author of the game or a mod has made a mistake")
message = message .. "\n\n" message = message .. "\n\n"
if mod ~= nil then if mod then
if minetest.get_modpath(mod) ~= nil then if minetest.get_modpath(mod) then
message = message .. S("It appears to originate from the mod “@1”, which is enabled.", mod) message = message .. S("It appears to originate from the mod “@1”, which is enabled.", mod)
message = message .. "\n" message = message .. "\n"
else else
@ -45,7 +48,7 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
message = message .. "\n" message = message .. "\n"
end end
end end
if param ~= nil then if param then
message = message .. S("Its identifier is “@1”.", param) message = message .. S("Its identifier is “@1”.", param)
end end
elseif itype == "error_ignore" then elseif itype == "error_ignore" then
@ -66,7 +69,7 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
if pointed_thing.type == "node" then if pointed_thing.type == "node" then
local pos = pointed_thing.under local pos = pointed_thing.under
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
if minetest.registered_nodes[node.name] ~= nil then if minetest.registered_nodes[node.name] then
--local nodedef = minetest.registered_nodes[node.name] --local nodedef = minetest.registered_nodes[node.name]
if(node.name == "ignore") then if(node.name == "ignore") then
show_message(username, "error_ignore") show_message(username, "error_ignore")
@ -82,14 +85,14 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
local object = pointed_thing.ref local object = pointed_thing.ref
local le = object:get_luaentity() local le = object:get_luaentity()
if object:is_player() then if object:is_player() then
if minetest.get_modpath("doc_basics") ~= nil and doc.entry_exists("basics", "players") then if mod_doc_basics and doc.entry_exists("basics", "players") then
doc.show_entry(username, "basics", "players", true) doc.show_entry(username, "basics", "players", true)
else else
-- Fallback message -- Fallback message
show_message(username, "player") show_message(username, "player")
end end
-- luaentity exists -- luaentity exists
elseif le ~= nil then elseif le then
local ro = doc_identifier.registered_objects[le.name] local ro = doc_identifier.registered_objects[le.name]
-- Dropped items -- Dropped items
if le.name == "__builtin:item" then if le.name == "__builtin:item" then
@ -112,7 +115,7 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
doc.show_entry(username, "nodes", itemstring, true) doc.show_entry(username, "nodes", itemstring, true)
end end
-- A known registered object -- A known registered object
elseif ro ~= nil then elseif ro then
doc.show_entry(username, ro.category, ro.entry, true) doc.show_entry(username, ro.category, ro.entry, true)
-- Undefined object (error) -- Undefined object (error)
elseif minetest.registered_entities[le.name] == nil then elseif minetest.registered_entities[le.name] == nil then
@ -195,7 +198,7 @@ minetest.register_craft({
{"group:stick", ""} } {"group:stick", ""} }
}) })
if minetest.get_modpath("mcl_core") ~= nil then if minetest.get_modpath("mcl_core") then
minetest.register_craft({ minetest.register_craft({
output = "doc_identifier:identifier_solid", output = "doc_identifier:identifier_solid",
recipe = { { "mcl_core:glass" }, recipe = { { "mcl_core:glass" },

View File

@ -0,0 +1,18 @@
# textdomain:doc_identifier
Error: This node, item or object is undefined. This is always an error.=Błąd: Ten węzeł, przedmiot lub obiekt nie jest zdefiniowany. To zawsze jest błąd.
This can happen for the following reasons:=To może się zdarzyć z następujących powodów:
• The mod which is required for it is not enabled=• Mod który jest do tego potrzebny nie jest włączony
• The author of the game or a mod has made a mistake=• Autor gry lub moda popełnił błąd
It appears to originate from the mod “@1”, which is enabled.=Wygląda na to, że powodem jest mod "@1", który jest włączony.
It appears to originate from the mod “@1”, which is not enabled!=Wygląda na to, że powodem jest mod "@1", który nie jest włączony!
Its identifier is “@1”.=Identyfikator to "@1".
Lookup Tool=Narzędzie rozpoznające
No help entry for this block could be found.=Nie znaleziono wpisu pomocniczego dla tego bloku.
No help entry for this item could be found.=Nie znaleziono wpisu pomocniczego dla tego przedmiotu.
No help entry for this object could be found.=Nie znaleziono wpisu pomocniczego dla tego obiektu.
OK=OK
Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.=Uderz dowolny blok, przedmiot lub inną rzecz aby dowiedzieć się o niej czegoś. To otworzy odpowiedni wpis pomocniczy. Narzędzie jest dostępne w dwóch trybach które można zmienić przez kliknięcie Użyj. W trybie płynów narzędzie to wskazuje również na płyny, podczas gdy w trybie stałym tak nie jest.
This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=Ten blok nie może być zidentyfikowany, ponieważ świat jeszcze się nie zmaterializował. Spróbuj ponownie za kilka sekund.
This is a player.=To jest gracz.
This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=To jest małe pomocnicze narzędzie, które może być użyte by szybko dowiedzieć się więcej na temat bliskiego otoczenia. Identyfikuje ono oraz analizuje bloki, przedmioty i inne rzeczy oraz pokazuje dokładne informacje na temat tego na czym zostanie użyte.
Show help for pointed thing=Pokaż pomoc dla wskazywanej rzeczy

View File

@ -1,6 +1,12 @@
local S = minetest.get_translator("doc_items") local S = minetest.get_translator(minetest.get_current_modname())
local N = function(s) return s end local N = function(s) return s end
local math = math
local string = string
local tostring = tostring
local pairs = pairs
doc.sub.items = {} doc.sub.items = {}
-- Template texts -- Template texts
@ -34,13 +40,17 @@ local suppressed = {
local forbidden_core_factoids = {} local forbidden_core_factoids = {}
-- Helper functions -- Helper functions
local yesno = function(bool) local function yesno(bool)
if bool==true then return S("Yes") if bool == true then
elseif bool==false then return S("No") return S("Yes")
else return "N/A" end elseif bool == false then
return S("No")
else
return "N/A"
end
end end
local groups_to_string = function(grouptable, filter) local function groups_to_string(grouptable, filter)
local gstring = "" local gstring = ""
local groups_count = 0 local groups_count = 0
for id, value in pairs(grouptable) do for id, value in pairs(grouptable) do
@ -50,7 +60,7 @@ local groups_to_string = function(grouptable, filter)
-- List seperator -- List seperator
gstring = gstring .. S(", ") gstring = gstring .. S(", ")
end end
if groupdefs[id] ~= nil and doc.sub.items.settings.friendly_group_names == true then if groupdefs[id] and doc.sub.items.settings.friendly_group_names == true then
gstring = gstring .. groupdefs[id] gstring = gstring .. groupdefs[id]
else else
gstring = gstring .. id gstring = gstring .. id
@ -66,7 +76,7 @@ local groups_to_string = function(grouptable, filter)
end end
-- Removes all text after the first newline (including the newline) -- Removes all text after the first newline (including the newline)
local scrub_newlines = function(text) local function scrub_newlines(text)
local spl = string.split(text, "\n") local spl = string.split(text, "\n")
if spl and #spl > 0 then if spl and #spl > 0 then
return spl[1] return spl[1]
@ -76,7 +86,7 @@ local scrub_newlines = function(text)
end end
--[[ Append a newline to text, unless it already ends with a newline. ]] --[[ Append a newline to text, unless it already ends with a newline. ]]
local newline = function(text) local function newline(text)
if string.sub(text, #text, #text) == "\n" or text == "" then if string.sub(text, #text, #text) == "\n" or text == "" then
return text return text
else else
@ -85,7 +95,7 @@ local newline = function(text)
end end
--[[ Make sure the text ends with two newlines by appending any missing newlines at the end, if neccessary. ]] --[[ Make sure the text ends with two newlines by appending any missing newlines at the end, if neccessary. ]]
local newline2 = function(text) local function newline2(text)
if string.sub(text, #text-1, #text) == "\n\n" or text == "" then if string.sub(text, #text-1, #text) == "\n\n" or text == "" then
return text return text
elseif string.sub(text, #text, #text) == "\n" then elseif string.sub(text, #text, #text) == "\n" then
@ -97,7 +107,7 @@ end
-- Extract suitable item description for formspec -- Extract suitable item description for formspec
local description_for_formspec = function(itemstring) local function description_for_formspec(itemstring)
if minetest.registered_items[itemstring] == nil then if minetest.registered_items[itemstring] == nil then
-- Huh? The item doesn't exist for some reason. Better give a dummy string -- Huh? The item doesn't exist for some reason. Better give a dummy string
minetest.log("warning", "[doc] Unknown item detected: "..tostring(itemstring)) minetest.log("warning", "[doc] Unknown item detected: "..tostring(itemstring))
@ -111,26 +121,26 @@ local description_for_formspec = function(itemstring)
end end
end end
local get_entry_name = function(itemstring) local function get_entry_name(itemstring)
local def = minetest.registered_items[itemstring] local def = minetest.registered_items[itemstring]
if def._doc_items_entry_name ~= nil then if def._doc_items_entry_name then
return def._doc_items_entry_name return def._doc_items_entry_name
elseif item_name_overrides[itemstring] ~= nil then elseif item_name_overrides[itemstring] then
return item_name_overrides[itemstring] return item_name_overrides[itemstring]
else else
return def.description return def.description
end end
end end
doc.sub.items.get_group_name = function(groupname) function doc.sub.items.get_group_name(groupname)
if groupdefs[groupname] ~= nil and doc.sub.items.settings.friendly_group_names == true then if groupdefs[groupname] and doc.sub.items.settings.friendly_group_names == true then
return groupdefs[groupname] return groupdefs[groupname]
else else
return groupname return groupname
end end
end end
local burntime_to_text = function(burntime) local function burntime_to_text(burntime)
if burntime == nil then if burntime == nil then
return S("unknown") return S("unknown")
elseif burntime == 1 then elseif burntime == 1 then
@ -146,16 +156,16 @@ end
* Full punch interval * Full punch interval
* Damage groups * Damage groups
]] ]]
local factoid_toolcaps = function(tool_capabilities, check_uses) local function factoid_toolcaps(tool_capabilities, check_uses)
if forbidden_core_factoids.tool_capabilities then if forbidden_core_factoids.tool_capabilities then
return "" return ""
end end
local formstring = "" local formstring = ""
if check_uses == nil then check_uses = false end if check_uses == nil then check_uses = false end
if tool_capabilities ~= nil and tool_capabilities ~= {} then if tool_capabilities and tool_capabilities ~= {} then
local groupcaps = tool_capabilities.groupcaps local groupcaps = tool_capabilities.groupcaps
if groupcaps ~= nil then if groupcaps then
local miningcapstr = "" local miningcapstr = ""
local miningtimesstr = "" local miningtimesstr = ""
local miningusesstr = "" local miningusesstr = ""
@ -188,7 +198,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses)
caplines = caplines + 1 caplines = caplines + 1
for rating=3, 1, -1 do for rating=3, 1, -1 do
if v.times ~= nil and v.times[rating] ~= nil then if v.times and v.times[rating] then
local maxtime = v.times[rating] local maxtime = v.times[rating]
local mintime local mintime
local mintimestr, maxtimestr local mintimestr, maxtimestr
@ -255,7 +265,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses)
-- Weapon data -- Weapon data
local damage_groups = tool_capabilities.damage_groups local damage_groups = tool_capabilities.damage_groups
if damage_groups ~= nil then if damage_groups then
formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n" formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n"
-- Damage groups -- Damage groups
formstring = formstring .. S("Maximum damage per hit:") .. "\n" formstring = formstring .. S("Maximum damage per hit:") .. "\n"
@ -266,7 +276,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses)
-- Full punch interval -- Full punch interval
local punch = 1.0 local punch = 1.0
if tool_capabilities.full_punch_interval ~= nil then if tool_capabilities.full_punch_interval then
punch = tool_capabilities.full_punch_interval punch = tool_capabilities.full_punch_interval
end end
formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch)) formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch))
@ -282,7 +292,7 @@ end
- Digging times/groups - Digging times/groups
- level group - level group
]] ]]
local factoid_mining_node = function(data) local function factoid_mining_node(data)
if forbidden_core_factoids.node_mining then if forbidden_core_factoids.node_mining then
return "" return ""
end end
@ -292,7 +302,7 @@ local factoid_mining_node = function(data)
-- Check if there are no mining groups at all -- Check if there are no mining groups at all
local nogroups = true local nogroups = true
for groupname,_ in pairs(mininggroups) do for groupname,_ in pairs(mininggroups) do
if data.def.groups[groupname] ~= nil or groupname == "dig_immediate" then if data.def.groups[groupname] or groupname == "dig_immediate" then
nogroups = false nogroups = false
break break
end end
@ -324,7 +334,7 @@ local factoid_mining_node = function(data)
local minegroupcount = 0 local minegroupcount = 0
for group,_ in pairs(mininggroups) do for group,_ in pairs(mininggroups) do
local rating = data.def.groups[group] local rating = data.def.groups[group]
if rating ~= nil then if rating then
mstring = mstring .. S("• @1: @2", doc.sub.items.get_group_name(group), rating).."\n" mstring = mstring .. S("• @1: @2", doc.sub.items.get_group_name(group), rating).."\n"
minegroupcount = minegroupcount + 1 minegroupcount = minegroupcount + 1
end end
@ -344,18 +354,18 @@ local factoid_mining_node = function(data)
end end
-- Pointing range of itmes -- Pointing range of itmes
local range_factoid = function(itemstring, def) local function range_factoid(itemstring, def)
local handrange = minetest.registered_items[""].range local handrange = minetest.registered_items[""].range
local itemrange = def.range local itemrange = def.range
if itemstring == "" then if itemstring == "" then
if handrange ~= nil then if handrange then
return S("Range: @1", itemrange) return S("Range: @1", itemrange)
else else
return S("Range: 4") return S("Range: 4")
end end
else else
if handrange == nil then handrange = 4 end if handrange == nil then handrange = 4 end
if itemrange ~= nil then if itemrange then
return S("Range: @1", itemrange) return S("Range: @1", itemrange)
else else
return S("Range: @1 (@2)", get_entry_name(""), handrange) return S("Range: @1 (@2)", get_entry_name(""), handrange)
@ -364,14 +374,14 @@ local range_factoid = function(itemstring, def)
end end
-- Smelting fuel factoid -- Smelting fuel factoid
local factoid_fuel = function(itemstring, ctype) local function factoid_fuel(itemstring, ctype)
if forbidden_core_factoids.fuel then if forbidden_core_factoids.fuel then
return "" return ""
end end
local formstring = "" local formstring = ""
local result, decremented = minetest.get_craft_result({method = "fuel", items = {itemstring}}) local result, decremented = minetest.get_craft_result({method = "fuel", items = {itemstring}})
if result ~= nil and result.time > 0 then if result and result.time > 0 then
local base local base
local burntext = burntime_to_text(result.time) local burntext = burntime_to_text(result.time)
if ctype == "tools" then if ctype == "tools" then
@ -392,7 +402,7 @@ local factoid_fuel = function(itemstring, ctype)
end end
-- Shows the itemstring of an item -- Shows the itemstring of an item
local factoid_itemstring = function(itemstring, playername) local function factoid_itemstring(itemstring, playername)
if forbidden_core_factoids.itemstring then if forbidden_core_factoids.itemstring then
return "" return ""
end end
@ -405,7 +415,7 @@ local factoid_itemstring = function(itemstring, playername)
end end
end end
local entry_image = function(data) local function entry_image(data)
local formstring = "" local formstring = ""
-- No image for air -- No image for air
if data.itemstring ~= "air" then if data.itemstring ~= "air" then
@ -414,7 +424,7 @@ local entry_image = function(data)
formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;".. formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..
minetest.registered_items[""].wield_image.."]" minetest.registered_items[""].wield_image.."]"
-- Other items -- Other items
elseif data.image ~= nil then elseif data.image then
formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.image.."]" formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.image.."]"
else else
formstring = formstring .. "item_image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.itemstring.."]" formstring = formstring .. "item_image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.itemstring.."]"
@ -434,7 +444,7 @@ factoid_generators.craftitems = {}
* factoid_type: If set, oly returns factoid with a matching factoid_type. * factoid_type: If set, oly returns factoid with a matching factoid_type.
If nil, all factoids for this category will be generated If nil, all factoids for this category will be generated
* data: Entry data to parse ]] * data: Entry data to parse ]]
local factoid_custom = function(category_id, factoid_type, data) local function factoid_custom(category_id, factoid_type, data)
local ftable = factoid_generators[category_id] local ftable = factoid_generators[category_id]
local datastring = "" local datastring = ""
-- Custom factoids are inserted here -- Custom factoids are inserted here
@ -450,17 +460,17 @@ local factoid_custom = function(category_id, factoid_type, data)
end end
-- Shows core information shared by all items, to be inserted at the top -- Shows core information shared by all items, to be inserted at the top
local factoids_header = function(data, ctype) local function factoids_header(data, ctype)
local datastring = "" local datastring = ""
if not forbidden_core_factoids.basics then if not forbidden_core_factoids.basics then
local longdesc = data.longdesc local longdesc = data.longdesc
local usagehelp = data.usagehelp local usagehelp = data.usagehelp
if longdesc ~= nil then if longdesc then
datastring = datastring .. S("Description: @1", longdesc) datastring = datastring .. S("Description: @1", longdesc)
datastring = newline2(datastring) datastring = newline2(datastring)
end end
if usagehelp ~= nil then if usagehelp then
datastring = datastring .. S("Usage help: @1", usagehelp) datastring = datastring .. S("Usage help: @1", usagehelp)
datastring = newline2(datastring) datastring = newline2(datastring)
end end
@ -484,7 +494,7 @@ local factoids_header = function(data, ctype)
datastring = datastring .. S("This item points to liquids.").."\n" datastring = datastring .. S("This item points to liquids.").."\n"
end end
end end
if data.def.on_use ~= nil then if data.def.on_use then
if ctype == "nodes" then if ctype == "nodes" then
datastring = datastring .. S("Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.").."\n" datastring = datastring .. S("Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.").."\n"
elseif ctype == "tools" then elseif ctype == "tools" then
@ -510,7 +520,7 @@ local factoids_header = function(data, ctype)
end end
-- Shows less important information shared by all items, to be inserted at the bottom -- Shows less important information shared by all items, to be inserted at the bottom
local factoids_footer = function(data, playername, ctype) local function factoids_footer(data, playername, ctype)
local datastring = "" local datastring = ""
datastring = datastring .. factoid_custom(ctype, "groups", data) datastring = datastring .. factoid_custom(ctype, "groups", data)
datastring = newline2(datastring) datastring = newline2(datastring)
@ -518,7 +528,7 @@ local factoids_footer = function(data, playername, ctype)
-- Show other “exposable” groups -- Show other “exposable” groups
if not forbidden_core_factoids.groups then if not forbidden_core_factoids.groups then
local gstring, gcount = groups_to_string(data.def.groups, miscgroups) local gstring, gcount = groups_to_string(data.def.groups, miscgroups)
if gstring ~= nil then if gstring then
if gcount == 1 then if gcount == 1 then
if ctype == "nodes" then if ctype == "nodes" then
datastring = datastring .. S("This block belongs to the @1 group.", gstring) .. "\n" datastring = datastring .. S("This block belongs to the @1 group.", gstring) .. "\n"
@ -597,7 +607,7 @@ doc.add_category("nodes", {
datastring = datastring .. S("This block is a liquid with these properties:") .. "\n" datastring = datastring .. S("This block is a liquid with these properties:") .. "\n"
local range, renew, viscos local range, renew, viscos
if data.def.liquid_range then range = data.def.liquid_range else range = 8 end if data.def.liquid_range then range = data.def.liquid_range else range = 8 end
if data.def.liquid_renewable ~= nil then renew = data.def.liquid_renewable else renew = true end if data.def.liquid_renewable then renew = data.def.liquid_renewable else renew = true end
if data.def.liquid_viscosity then viscos = data.def.liquid_viscosity else viscos = 0 end if data.def.liquid_viscosity then viscos = data.def.liquid_viscosity else viscos = 0 end
if renew then if renew then
datastring = datastring .. S("• Renewable") .. "\n" datastring = datastring .. S("• Renewable") .. "\n"
@ -617,7 +627,7 @@ doc.add_category("nodes", {
--- Direct interaction with the player --- Direct interaction with the player
---- Damage (very important) ---- Damage (very important)
if not forbidden_core_factoids.node_damage then if not forbidden_core_factoids.node_damage then
if data.def.damage_per_second ~= nil and data.def.damage_per_second > 1 then if data.def.damage_per_second and data.def.damage_per_second > 1 then
datastring = datastring .. S("This block causes a damage of @1 hit points per second.", data.def.damage_per_second) .. "\n" datastring = datastring .. S("This block causes a damage of @1 hit points per second.", data.def.damage_per_second) .. "\n"
elseif data.def.damage_per_second == 1 then elseif data.def.damage_per_second == 1 then
datastring = datastring .. S("This block causes a damage of @1 hit point per second.", data.def.damage_per_second) .. "\n" datastring = datastring .. S("This block causes a damage of @1 hit point per second.", data.def.damage_per_second) .. "\n"
@ -630,7 +640,7 @@ doc.add_category("nodes", {
end end
end end
local fdap = data.def.groups.fall_damage_add_percent local fdap = data.def.groups.fall_damage_add_percent
if fdap ~= nil and fdap ~= 0 then if fdap and fdap ~= 0 then
if fdap > 0 then if fdap > 0 then
datastring = datastring .. S("The fall damage on this block is increased by @1%.", fdap) .. "\n" datastring = datastring .. S("The fall damage on this block is increased by @1%.", fdap) .. "\n"
elseif fdap <= -100 then elseif fdap <= -100 then
@ -652,11 +662,11 @@ doc.add_category("nodes", {
datastring = datastring .. S("This block can be climbed.").."\n" datastring = datastring .. S("This block can be climbed.").."\n"
end end
local bouncy = data.def.groups.bouncy local bouncy = data.def.groups.bouncy
if bouncy ~= nil and bouncy ~= 0 then if bouncy and bouncy ~= 0 then
datastring = datastring .. S("This block will make you bounce off with an elasticity of @1%.", bouncy).."\n" datastring = datastring .. S("This block will make you bounce off with an elasticity of @1%.", bouncy).."\n"
end end
local slippery = data.def.groups.slippery local slippery = data.def.groups.slippery
if slippery ~= nil and slippery ~= 0 then if slippery and slippery ~= 0 then
datastring = datastring .. S("This block is slippery.") .. "\n" datastring = datastring .. S("This block is slippery.") .. "\n"
end end
datastring = datastring .. factoid_custom("nodes", "movement", data) datastring = datastring .. factoid_custom("nodes", "movement", data)
@ -756,7 +766,7 @@ doc.add_category("nodes", {
datastring = newline2(datastring) datastring = newline2(datastring)
--- List nodes/groups to which this node connects to --- List nodes/groups to which this node connects to
if not forbidden_core_factoids.connects_to and data.def.connects_to ~= nil then if not forbidden_core_factoids.connects_to and data.def.connects_to then
local nodes = {} local nodes = {}
local groups = {} local groups = {}
for c=1,#data.def.connects_to do for c=1,#data.def.connects_to do
@ -771,7 +781,7 @@ doc.add_category("nodes", {
local nstring = "" local nstring = ""
for n=1,#nodes do for n=1,#nodes do
local name local name
if item_name_overrides[nodes[n]] ~= nil then if item_name_overrides[nodes[n]] then
name = item_name_overrides[nodes[n]] name = item_name_overrides[nodes[n]]
else else
name = description_for_formspec(nodes[n]) name = description_for_formspec(nodes[n])
@ -779,7 +789,7 @@ doc.add_category("nodes", {
if n > 1 then if n > 1 then
nstring = nstring .. S(", ") nstring = nstring .. S(", ")
end end
if name ~= nil then if name then
nstring = nstring .. name nstring = nstring .. name
else else
nstring = nstring .. S("Unknown Node") nstring = nstring .. S("Unknown Node")
@ -810,9 +820,9 @@ doc.add_category("nodes", {
datastring = newline2(datastring) datastring = newline2(datastring)
-- Non-default drops -- Non-default drops
if not forbidden_core_factoids.drops and data.def.drop ~= nil and data.def.drop ~= data.itemstring and data.itemstring ~= "air" then if not forbidden_core_factoids.drops and data.def.drop and data.def.drop ~= data.itemstring and data.itemstring ~= "air" then
-- TODO: Calculate drop probabilities of max > 1 like for max == 1 -- TODO: Calculate drop probabilities of max > 1 like for max == 1
local get_desc = function(stack) local function get_desc(stack)
return description_for_formspec(stack:get_name()) return description_for_formspec(stack:get_name())
end end
if data.def.drop == "" then if data.def.drop == "" then
@ -828,7 +838,7 @@ doc.add_category("nodes", {
datastring = datastring .. S("This block will drop the following when mined: @1.", desc).."\n" datastring = datastring .. S("This block will drop the following when mined: @1.", desc).."\n"
end end
end end
elseif type(data.def.drop) == "table" and data.def.drop.items ~= nil then elseif type(data.def.drop) == "table" and data.def.drop.items then
local max = data.def.drop.max_items local max = data.def.drop.max_items
local dropstring = "" local dropstring = ""
local dropstring_base local dropstring_base
@ -882,7 +892,7 @@ doc.add_category("nodes", {
if chance > 0 then if chance > 0 then
probtable = {} probtable = {}
probtable.items = {} probtable.items = {}
for j=1,#data.def.drop.items[i].items do for j = 1, #data.def.drop.items[i].items do
local dropstack = ItemStack(data.def.drop.items[i].items[j]) local dropstack = ItemStack(data.def.drop.items[i].items[j])
local itemstring = dropstack:get_name() local itemstring = dropstack:get_name()
local desc = get_desc(dropstack) local desc = get_desc(dropstack)
@ -904,7 +914,7 @@ doc.add_category("nodes", {
-- Do some cleanup of the probability table -- Do some cleanup of the probability table
if max == 1 or max == nil then if max == 1 or max == nil then
-- Sort by rarity -- Sort by rarity
local comp = function(p1, p2) local function comp(p1, p2)
return p1.rarity < p2.rarity return p1.rarity < p2.rarity
end end
table.sort(probtables, comp) table.sort(probtables, comp)
@ -953,7 +963,7 @@ doc.add_category("nodes", {
dropstring = dropstring .. dropstring_this dropstring = dropstring .. dropstring_this
pcount = pcount + 1 pcount = pcount + 1
end end
if max ~= nil and max > 1 then if max and max > 1 then
datastring = datastring .. S(dropstring_base, max, dropstring) datastring = datastring .. S(dropstring_base, max, dropstring)
else else
datastring = datastring .. S(dropstring_base, dropstring) datastring = datastring .. S(dropstring_base, dropstring)
@ -988,15 +998,15 @@ doc.add_category("tools", {
if entries[2].eid == "" then return false end if entries[2].eid == "" then return false end
local comp = {} local comp = {}
for e=1, 2 do for e = 1, 2 do
comp[e] = {} comp[e] = {}
end end
-- No tool capabilities: Instant loser -- No tool capabilities: Instant loser
if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities ~= nil then return false end if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities then return false end
if entries[2].data.def.tool_capabilities == nil and entries[1].data.def.tool_capabilities ~= nil then return true end if entries[2].data.def.tool_capabilities == nil and entries[1].data.def.tool_capabilities then return true end
-- No tool capabilities for both: Compare by uses -- No tool capabilities for both: Compare by uses
if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities == nil then if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities == nil then
for e=1, 2 do for e = 1, 2 do
if type(entries[e].data.def._doc_items_durability) == "number" then if type(entries[e].data.def._doc_items_durability) == "number" then
comp[e].uses = entries[e].data.def._doc_items_durability comp[e].uses = entries[e].data.def._doc_items_durability
else else
@ -1051,7 +1061,7 @@ doc.add_category("tools", {
comp[e].count = groupcount comp[e].count = groupcount
comp[e].group = group comp[e].group = group
comp[e].mintime = mintime comp[e].mintime = mintime
if realuses ~= nil then if realuses then
comp[e].uses = realuses comp[e].uses = realuses
elseif type(entries[e].data.def._doc_items_durability) == "number" then elseif type(entries[e].data.def._doc_items_durability) == "number" then
comp[e].uses = entries[e].data.def._doc_items_durability comp[e].uses = entries[e].data.def._doc_items_durability
@ -1156,9 +1166,9 @@ local function gather_descs()
-- 1st pass: Gather groups of interest -- 1st pass: Gather groups of interest
for id, def in pairs(minetest.registered_items) do for id, def in pairs(minetest.registered_items) do
-- Gather all groups used for mining -- Gather all groups used for mining
if def.tool_capabilities ~= nil then if def.tool_capabilities then
local groupcaps = def.tool_capabilities.groupcaps local groupcaps = def.tool_capabilities.groupcaps
if groupcaps ~= nil then if groupcaps then
for k,v in pairs(groupcaps) do for k,v in pairs(groupcaps) do
if mininggroups[k] ~= true then if mininggroups[k] ~= true then
mininggroups[k] = true mininggroups[k] = true
@ -1169,7 +1179,7 @@ local function gather_descs()
-- ... and gather all groups which appear in crafting recipes -- ... and gather all groups which appear in crafting recipes
local crafts = minetest.get_all_craft_recipes(id) local crafts = minetest.get_all_craft_recipes(id)
if crafts ~= nil then if crafts then
for c=1,#crafts do for c=1,#crafts do
for k,v in pairs(crafts[c].items) do for k,v in pairs(crafts[c].items) do
if string.sub(v,1,6) == "group:" then if string.sub(v,1,6) == "group:" then
@ -1184,7 +1194,7 @@ local function gather_descs()
end end
-- ... and gather all groups used in connects_to -- ... and gather all groups used in connects_to
if def.connects_to ~= nil then if def.connects_to then
for c=1, #def.connects_to do for c=1, #def.connects_to do
if string.sub(def.connects_to[c],1,6) == "group:" then if string.sub(def.connects_to[c],1,6) == "group:" then
local group = string.sub(def.connects_to[c],7,-1) local group = string.sub(def.connects_to[c],7,-1)
@ -1203,7 +1213,7 @@ local function gather_descs()
else else
help.longdesc["air"] = S("A transparent block, basically empty space. It is usually left behind after digging something.") help.longdesc["air"] = S("A transparent block, basically empty space. It is usually left behind after digging something.")
end end
if minetest.registered_items["ignore"]._doc_items_create_entry ~= nil then if minetest.registered_items["ignore"]._doc_items_create_entry then
suppressed["ignore"] = minetest.registered_items["ignore"]._doc_items_create_entry == true suppressed["ignore"] = minetest.registered_items["ignore"]._doc_items_create_entry == true
end end
@ -1232,23 +1242,23 @@ local function gather_descs()
}) })
end end
local add_entries = function(deftable, category_id) local function add_entries(deftable, category_id)
for id, def in pairs(deftable) do for id, def in pairs(deftable) do
local name, ld, uh, im local name, ld, uh, im
local forced = false local forced = false
if def._doc_items_create_entry == true and def ~= nil then forced = true end if def._doc_items_create_entry == true and def then forced = true end
name = get_entry_name(id) name = get_entry_name(id)
if not (((def.description == nil or def.description == "") and def._doc_items_entry_name == nil) or (def._doc_items_create_entry == false) or (suppressed[id] == true)) or forced then if not (((def.description == nil or def.description == "") and def._doc_items_entry_name == nil) or (def._doc_items_create_entry == false) or (suppressed[id] == true)) or forced then
if def._doc_items_longdesc then if def._doc_items_longdesc then
ld = def._doc_items_longdesc ld = def._doc_items_longdesc
end end
if help.longdesc[id] ~= nil then if help.longdesc[id] then
ld = help.longdesc[id] ld = help.longdesc[id]
end end
if def._doc_items_usagehelp then if def._doc_items_usagehelp then
uh = def._doc_items_usagehelp uh = def._doc_items_usagehelp
end end
if help.usagehelp[id] ~= nil then if help.usagehelp[id] then
uh = help.usagehelp[id] uh = help.usagehelp[id]
end end
if def._doc_items_image then if def._doc_items_image then
@ -1297,13 +1307,13 @@ local function reveal_item(playername, itemstring)
if itemstring == nil or itemstring == "" or playername == nil or playername == "" then if itemstring == nil or itemstring == "" or playername == nil or playername == "" then
return false return false
end end
if minetest.registered_nodes[itemstring] ~= nil then if minetest.registered_nodes[itemstring] then
category_id = "nodes" category_id = "nodes"
elseif minetest.registered_tools[itemstring] ~= nil then elseif minetest.registered_tools[itemstring] then
category_id = "tools" category_id = "tools"
elseif minetest.registered_craftitems[itemstring] ~= nil then elseif minetest.registered_craftitems[itemstring] then
category_id = "craftitems" category_id = "craftitems"
elseif minetest.registered_items[itemstring] ~= nil then elseif minetest.registered_items[itemstring] then
category_id = "craftitems" category_id = "craftitems"
else else
return false return false
@ -1323,7 +1333,7 @@ end
minetest.register_on_dignode(function(pos, oldnode, digger) minetest.register_on_dignode(function(pos, oldnode, digger)
if digger == nil then return end if digger == nil then return end
local playername = digger:get_player_name() local playername = digger:get_player_name()
if playername ~= nil and playername ~= "" and oldnode ~= nil then if playername and playername ~= "" and oldnode then
reveal_item(playername, oldnode.name) reveal_item(playername, oldnode.name)
reveal_items_in_inventory(digger) reveal_items_in_inventory(digger)
end end
@ -1332,7 +1342,7 @@ end)
minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
if puncher == nil then return end if puncher == nil then return end
local playername = puncher:get_player_name() local playername = puncher:get_player_name()
if playername ~= nil and playername ~= "" and node ~= nil then if playername and playername ~= "" and node then
reveal_item(playername, node.name) reveal_item(playername, node.name)
end end
end) end)
@ -1340,7 +1350,7 @@ end)
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing) minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing)
if placer == nil then return end if placer == nil then return end
local playername = placer:get_player_name() local playername = placer:get_player_name()
if playername ~= nil and playername ~= "" and itemstack ~= nil and not itemstack:is_empty() then if playername and playername ~= "" and itemstack and not itemstack:is_empty() then
reveal_item(playername, itemstack:get_name()) reveal_item(playername, itemstack:get_name())
end end
end) end)
@ -1348,7 +1358,7 @@ end)
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
if player == nil then return end if player == nil then return end
local playername = player:get_player_name() local playername = player:get_player_name()
if playername ~= nil and playername ~= "" and itemstack ~= nil and not itemstack:is_empty() then if playername and playername ~= "" and itemstack and not itemstack:is_empty() then
reveal_item(playername, itemstack:get_name()) reveal_item(playername, itemstack:get_name())
end end
end) end)
@ -1360,7 +1370,7 @@ minetest.register_on_player_inventory_action(function(player, action, inventory,
if action == "take" or action == "put" then if action == "take" or action == "put" then
itemstack = inventory_info.stack itemstack = inventory_info.stack
end end
if itemstack ~= nil and playername ~= nil and playername ~= "" and (not itemstack:is_empty()) then if itemstack and playername and playername ~= "" and (not itemstack:is_empty()) then
reveal_item(playername, itemstack:get_name()) reveal_item(playername, itemstack:get_name())
end end
end) end)
@ -1368,9 +1378,9 @@ end)
minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing) minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing)
if user == nil then return end if user == nil then return end
local playername = user:get_player_name() local playername = user:get_player_name()
if playername ~= nil and playername ~= "" and itemstack ~= nil and not itemstack:is_empty() then if playername and playername ~= "" and itemstack and not itemstack:is_empty() then
reveal_item(playername, itemstack:get_name()) reveal_item(playername, itemstack:get_name())
if replace_with_item ~= nil then if replace_with_item then
reveal_item(playername, replace_with_item) reveal_item(playername, replace_with_item)
end end
end end
@ -1380,10 +1390,12 @@ minetest.register_on_joinplayer(function(player)
reveal_items_in_inventory(player) reveal_items_in_inventory(player)
end) end)
--[[ Periodically check all items in player inventory and reveal them all. --[[
Periodically check all items in player inventory and reveal them all.
TODO: Check whether there's a serious performance impact on servers with many players. TODO: Check whether there's a serious performance impact on servers with many players.
TODO: If possible, try to replace this functionality by updating the revealed items as TODO: If possible, try to replace this functionality by updating the revealed items as soon the player obtained a new item (probably needs new Minetest callbacks).
soon the player obtained a new item (probably needs new Minetest callbacks). ]] ]]
local checktime = 8 local checktime = 8
local timer = 0 local timer = 0
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)

View File

@ -0,0 +1,144 @@
# textdomain:doc_items
Using it as fuel turns it into: @1.=Używanie tego jako paliwa zamienia to w: @1.
@1 seconds=@1 sekund(y)
# Item count times item name
@1×@2=@1×@2
# Itemname (25%)
@1 (@2%)=@1 (@2%)
# Itemname (<0.5%)
@1 (<0.5%)=@1 (<0.5%)
# Itemname (ca. 25%)
@1 (ca. @2%)=@1 (ca. @2%)
# List separator (e.g. “one, two, three”)
, =,
# Final list separator (e.g. “One, two and three”)
and = oraz
1 second=1 sekunda
A transparent block, basically empty space. It is usually left behind after digging something.=Przezroczysty blok, praktycznie puste miejsce. Jest zwykle pozostawiany po wykopaniu czegoś.
Air=Powietrze
Blocks=Bloki
Building another block at this block will place it inside and replace it.=Postawienie innego bloku w tym bloku postawi ich wewnątrz i zastąpi go.
Building this block is completely silent.=Budowanie tego bloku jest bezgłośne.
Collidable: @1=Zderzalne: @1
Description: @1=Opis: @1
Falling blocks can go through this block; they destroy it when doing so.=Spadające bloki mogą przelecieć przez ten blok; niszczą go gdy tak robią.
Full punch interval: @1 s=Pełny okres uderzenia: @1 s
Hand=Ręka
Hold it in your hand, then leftclick to eat it.=Weź to do ręki, następnie kliknij lewy przycisk by je zjeść.
Hold it in your hand, then leftclick to eat it. But why would you want to do this?=Weź to do ręki, następnie kliknij lewy przycisk by je zjeść. Ale dlaczego chciałabyś to zrobić?
Item reference of all wieldable tools and weapons=Informacje na temat wszystkich narzędzi i broni możliwych do trzymania.
Item reference of blocks and other things which are capable of occupying space=Informacje na temat wszystkich bloków i innych obiektów, które są w stanie zajmować miejsce
Item reference of items which are neither blocks, tools or weapons (esp. crafting items)=Informacje na temat wszystkich rzeczy, które nie są blokami, narzędziami i broniami (głównie materiały do wytwarzania)
Liquids can flow into this block and destroy it.=Płyny mogą wpłynąć na ten blok i go zniszczyć.
Maximum stack size: @1=Maksymalny rozmiar grupy: @1
Mining level: @1=Poziom kopania: @1
Mining ratings:=Klasyfikacja kopania
• @1, rating @2: @3 s - @4 s=• @1, klasyfikacja @2: @3 s - @4 s
• @1, rating @2: @3 s=• @1, klasyfikacja @2: @3 s
Mining times:=Czas wykopania:
Mining this block is completely silent.=Wykopanie tego bloku jet bezgłośne.
Miscellaneous items=Różne rzeczy
No=Nie
Pointable: No=Wskazywalne: Nie
Pointable: Only by special items=Wskazywalne: Tylko przez specjalne przedmioty
Pointable: Yes=Wskazywalne: Tak
Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym blokiem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej.
Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym przedmiotem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej.
Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym narzędziem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej.
Range: @1=Zasięg: @1
# Range: <Hand> (<Range>)
Range: @1 (@2)=Zasięg @1 (@2)
Range: 4=Zasięg: 4
# Rating used for digging times
Rating @1=Klasyfikacja @1
# @1 is minimal rating, @2 is maximum rating
Rating @1-@2=Klasyfikacja od @1 do @2
The fall damage on this block is increased by @1%.=Obrażenia od upadku na tym bloku są zwiększone o @1%.
The fall damage on this block is reduced by @1%.=Obrażenia od upadku na tym bloku są zmniejszone o @1%.
This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.=Ten blok przepuszcza światło z niewielką stratą jasności, a światło słoneczne przepuszcza bezstratnie.
This block allows light to propagate with a small loss of brightness.=Ten blok przepuszcza światło z niewielką stratą jasności.
This block allows sunlight to propagate without loss in brightness.=Ten blok przepuszcza światło słoneczne bez straty jasności.
This block belongs to the @1 group.=Ten blok należy do grupy @1.
This block belongs to these groups: @1.=Ten blok należy do tych grup: @1.
This block can be climbed.=Na ten blok można się wspiąć.
This block can be destroyed by any mining tool immediately.=Ten blok może być zniszczony przez dowolne narzędzie do kopania natychmiastowo.
This block can be destroyed by any mining tool in half a second.=Ten blok może być zniszczony przez dowolne narzędzie do kopania w pół sekundy.
This block can be mined by any mining tool immediately.=Ten blok może być wykopany przez dowolne narzędzie do kopania natychmiastowo.
This block can be mined by any mining tool in half a second.=Ten blok może być wykopany przez dowolne narzędzie do kopania w pół sekundy.
This block can be mined by mining tools which match any of the following mining ratings and its toughness level.=Ten blok może zostać wykopany przez narzędzia do kopania, które pasują do którychkolwiek klasyfikacji kopania i poziomu twardości.
This block can not be destroyed by ordinary mining tools.=Ten blok nie może być zniszczony przez typowe narzędzia do kopania.
This block can not be mined by ordinary mining tools.=Ten blok nie może być wykopany przez typowe narzędzia do kopania.
This block can serve as a smelting fuel with a burning time of @1.=Ten blok może być wykorzystany jako paliwo do przetapiania z czasem palenia @1.
This block causes a damage of @1 hit point per second.=Ten blok zadaje @1 obrażenie na sekundę.
This block causes a damage of @1 hit points per second.=Ten blok zadaje @1 obrażeń na sekundę.
This block connects to blocks of the @1 group.=Ten blok łączy się do bloków z grupy @1.
This block connects to blocks of the following groups: @1.=Ten blok łączy się z blokami z następujących grup: @1.
This block connects to these blocks: @1.=Ten blok łączy się z tymi blokami: @1.
This block connects to this block: @1.=Ten blok łączy się z tym blokiem: @1.
This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Ten blok zmniejsza twój tlen i zadaje @1 obrażenie co 2 sekundy.
This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Ten blok zmniejsza twój tlen i zadaje @1 obrażeń co 2 sekundy.
This block is a light source with a light level of @1.=Ten blok jest źródłem światła z poziomem oświetlenia @1.
This block glows faintly with a light level of @1.=Ten blok ma poświatę o poziomie oświetlenia @1.
This block is a building block for creating various buildings.=Ten blok jest blokiem budowlanym do tworzenia różnych budowli.
This block is a liquid with these properties:=Ten blok jest płynem z tymi własnościami:
This block is affected by gravity and can fall.=Na ten blok wpływa grawitacja i może upaść.
This block is completely silent when mined or built.=Ten blok jest bezgłośny przy kopaniu i budowaniu.
This block is completely silent when walked on, mined or built.=Ten blok jest bezgłośny gdy się po nim chodzi, kopie lub buduje.
This block is destroyed when a falling block ends up inside it.=Ten blok jest zniszczony gdy upadający blok upadnie w niego.
This block negates all fall damage.=Ten blok neguje wszystkie obrażenia od upadku.
This block points to liquids.=Ten blok wskazuje na płyny.
This block will drop as an item when a falling block ends up inside it.=Ten blok wypadnie jako przedmiot gdy blok upadnie na niego.
This block will drop as an item when it is not attached to a surrounding block.=Ten blok wypadnie jako przedmiot gdy nie jest połączony z sąsiadującym blokiem.
This block will drop as an item when no collidable block is below it.=Ten blok wypadnie jako przedmiot gdy nie będzie pod nim zderzalnego bloku.
This block will drop the following items when mined: @1.=Z tego bloku wypadną następujące przedmioty po wykopaniu: @1.
This block will drop the following when mined: @1×@2.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1×@2.
This block will drop the following when mined: @1.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1.
This block will drop the following when mined: @1.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1.
This block will make you bounce off with an elasticity of @1%.=Od tego bloku odbijesz się z elastycznością @1%.
This block will randomly drop one of the following when mined: @1.=Z tego bloku wypadnie losowo jedna z następujących rzeczy po wykopaniu: @1.
This block will randomly drop up to @1 drops of the following possible drops when mined: @2.=Z tego bloku losowo wypadnie maksymalnie @1 rzeczy spośród tego zbioru: @2.
This block won't drop anything when mined.=Z tego bloku nic nie wypadnie po wykopaniu.
This is a decorational block.=Ten blok jest dekoracyjny.
This is a melee weapon which deals damage by punching.=To jest broń do walki wręcz, która zadaje obrażenia przy uderzaniu.
Maximum damage per hit:=Maksymalne obrażenia przy uderzeniu:
This item belongs to the @1 group.=Ten przedmiot należy do grupy @1.
This item belongs to these groups: @1.=Ten przedmiot należy do tych grup: @1.
This item can serve as a smelting fuel with a burning time of @1.=Ten przedmiot może być wykorzystany jako paliwo do przetapiania z czasem palenia @1.
This item is primarily used for crafting other items.=Ten przedmiot jest głównie wykorzystywany do wytwarzania innych przedmiotów.
This item points to liquids.=Ten przedmiot wskazuje na płyny.
This tool belongs to the @1 group.=To narzędzie należy do grupy @1.
This tool belongs to these groups: @1.=To narzędzie należy do tych grup: @1.
This tool can serve as a smelting fuel with a burning time of @1.=To narzędzie może być wykorzystany jako paliwo do przetapiania z czasem palenia @1.
This tool is capable of mining.=Tym narzędziem można kopać.
Maximum toughness levels:=Maksymalna poziom twardości:
This tool points to liquids.=To narzędzie wskazuje na płyny.
Tools and weapons=Narzędzia i bronie
Unknown Node=Nieznany węzeł
Usage help: @1=Sposób użycia: @1
Walking on this block is completely silent.=Chodzenie po tym bloku jest bezgłośne.
Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.=Gdy nie trzymasz żadnego przedmiotu używasz swojej ręki która działa jak narzędzie ze swoimi własnościami. Gdy trzymasz przedmiot, który nie jest narzędziem do kopania lub bronią, będzie się ono zachowywało jakby było ręką.
Yes=Tak
You can not jump while standing on this block.=Nie możesz skakać gdy stoisz na tym bloku.
any level=dowolny poziom
level 0=poziom 0
level 0-@1=poziom 0-@1
unknown=nieznane
Unknown item (@1)=Nieznany przedmiot (@1)
• @1: @2=• @1: @2
• @1: @2 HP=• @1: @2 HP
• @1: @2, @3=• @1: @2, @3
• Flowing range: @1=• Zasięg płynięcia: @1
• No flowing=• Brak płynięcia
• Not renewable=• Nieodnawialne
• Renewable=• Odnawialne
• Viscosity: @1=• Lepkość: @1
Itemstring: "@1"=Id przedmiotu: "@1"
Durability: @1 uses=Wytrzymałość: @1 użyć
Durability: @1=Wytrzymałość: @1
Mining durability:=Wytrzymałość kopania:
• @1, level @2: @3 uses=• @1, poziom @2: @3 użyć
• @1, level @2: Unlimited=• @1, poziom @2: Nielimitowane
This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.=Na rotację tego bloku wpływa sposób postawienia: Postaw go na podłodze lub suficie aby uzyskać pionową orientację; postaw go na boku by uzyskać poziomą orientację. Skradanie się podczas postawiania sprawia, że zostanie postawiony prostopadle.
Toughness level: @1=Poziom twardości: @1
This block is slippery.=Ten blok jest śliski.

View File

@ -726,7 +726,7 @@ local function make_formspec(name)
return concat(fs) return concat(fs)
end end
local show_fs = function(player, name) local function show_fs(player, name)
if sfinv_only then if sfinv_only then
sfinv.set_player_inventory_formspec(player) sfinv.set_player_inventory_formspec(player)
else else

View File

@ -0,0 +1,38 @@
# textdomain: mcl_craftguide
Any shulker box=Dowolna skrzynia shulkerowa
Any wool=Dowolna wełna
Any wood planks=Dowolne deski
Any wood=Dowolne drewno
Any sand=Dowolny piasek
Any normal sandstone=Dowolny zwykły piaskowiec
Any red sandstone=Dowolny czerwony piaskowiec
Any carpet=Dowolny dywan
Any dye=Dowolna farba
Any water bucket=Dowolne wiadro wody
Any flower=Dowolny kwiat
Any mushroom=Dowolny grzyb
Any wooden slab=Dowolny drewniana płyta
Any wooden stairs=Dowolne drewniane schody
Any coal=Dowolny węgiel
Any kind of quartz block=Dowolny typ bloku kwarcu
Any kind of purpur block=Dowolny typ bloku purpury
Any stone bricks=Dowolne kamienne cegły
Any stick=Dowolny patyk
Any item belonging to the @1 group=Dowolny przedmiot z grupy @1
Any item belonging to the groups: @1=Dowolny przedmiot należący do grup: @1
Search=Wyszukaj
Reset=Zresetuj
Previous page=Poprzednia strona
Next page=Następna strona
Usage @1 of @2=Użycie @1 z @2
Recipe @1 of @2=Receptura @1 z @2
Burning time: @1=Czas wypalenia: @1
Cooking time: @1=Czas pieczenia: @1
Recipe is too big to be displayed (@1×@2)=Receptura jest zbyt długa do wyświetlenia (@1×@2)
Shapeless=Bezkształtne
Cooking=Pieczenie
Increase window size=Zwiększ rozmiar okna
Decrease window size=Zmniejsz rozmiar okna
No item to show=Brak przedmiotów do pokazania
Collect items to reveal more recipes=Zbierz przedmioty by odkryć więcej receptur

View File

@ -1,4 +1,4 @@
local S = minetest.get_translator("mcl_doc") local S = minetest.get_translator(minetest.get_current_modname())
-- Disable built-in factoids; it is planned to add custom ones as replacements -- Disable built-in factoids; it is planned to add custom ones as replacements
doc.sub.items.disable_core_factoid("node_mining") doc.sub.items.disable_core_factoid("node_mining")
@ -50,8 +50,8 @@ end)
doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def)
local formstring = "" local formstring = ""
if def.groups.leafdecay ~= nil then if def.groups.leafdecay then
if def.drop ~= "" and def.drop ~= nil and def.drop ~= itemstring then if def.drop ~= "" and def.drop and def.drop ~= itemstring then
formstring = S("This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.", def.groups.leafdecay) formstring = S("This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.", def.groups.leafdecay)
else else
formstring = S("This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.", def.groups.leafdecay) formstring = S("This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.", def.groups.leafdecay)
@ -399,7 +399,7 @@ doc.sub.items.register_factoid("tools", "misc", function(itemstring, def)
local formstring = "" local formstring = ""
-- Weapon data -- Weapon data
local damage_groups = tool_capabilities.damage_groups local damage_groups = tool_capabilities.damage_groups
if damage_groups ~= nil and damage_groups.fleshy ~= nil then if damage_groups and damage_groups.fleshy then
formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n" formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n"
-- Damage groups -- Damage groups
@ -408,7 +408,7 @@ doc.sub.items.register_factoid("tools", "misc", function(itemstring, def)
-- Full punch interval -- Full punch interval
local punch = 1.0 local punch = 1.0
if tool_capabilities.full_punch_interval ~= nil then if tool_capabilities.full_punch_interval then
punch = tool_capabilities.full_punch_interval punch = tool_capabilities.full_punch_interval
end end
formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch)) formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch))

View File

@ -0,0 +1,80 @@
# textdomain: mcl_doc
Water can flow into this block and cause it to drop as an item.=Woda może wpłynąć na ten blok i sprawić, że on wypadnie.
This block can be turned into dirt with a hoe.=Ten blok może być zamieniony w ziemię za pomocą motyki.
This block can be turned into farmland with a hoe.=Ten blok może być zamieniony w ziemię uprawną za pomocą motyki.
This block acts as a soil for all saplings.=Ten blok może być glebą dla wszystkich sadzonek.
This block acts as a soil for some saplings.=Ten blok może być glebą dla niektórych sadzonek.
Sugar canes will grow on this block.=Trzcina cukrowa będzie rosnąć na tym bloku.
Nether wart will grow on this block.=Netherowa brodawka będzie rosnąć na tym bloku.
This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.=Ten blok szybko zanika gdy w odległości @1 nie ma żadnego bloku drewna dowolnego rodzaju. Gdy zanika może wyrzucić z siebie jeden z przedmiotów typowo wyrzucanych.
This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.=Ten blok szybko zanika gdy w odległości @1 nie ma żadnego bloku drewna dowolnego rodzaju. Ten blok nie zanika gdy został postawiony przez gracza.
This plant can only grow on grass blocks and dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Ta roślina może rosnąć tylko na blokach trawy i ziemi. Aby przetrwać musi mieć nieblokowany dostęp do nieba powyżej lub być oświetlana światłem o poziomie 8 lub wyższym.
This plant can grow on grass blocks, podzol, dirt and coarse dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Ta roślina może rosnąć na blokach trawy, bielicy, ziemi i twardej ziemi. Aby przetrwać musi mieć nieblokowany dostęp do nieba powyżej lub być oświetlana światłem o poziomie 8 lub wyższym.
This block is flammable.=Ten blok jest łatwopalny.
This block destroys any item it touches.=Ten blok niszczy się gdy dowolny przedmiot go dotyka.
To eat it, wield it, then rightclick.=Aby to zjeść, weź to, następnie kliknij prawy przycisk myszy.
You can eat this even when your hunger bar is full.=Możesz to zjeść nawet gdy twój pasek nasycenia jest pełny.
You cannot eat this when your hunger bar is full.=Nie możesz tego jeść gdy twój pasek nasycenia jest pełny.
To drink it, wield it, then rightclick.=Aby to wypić, weź to, następnie kliknij prawy przycisk myszy.
You cannot drink this when your hunger bar is full.=Nie możesz tego pić gdy twój pasek nasycenia jest pełny.
To consume it, wield it, then rightclick.=Aby to skonsumować, weź to, następnie kliknij prawy przycisk myszy.
You cannot consume this when your hunger bar is full.=Nie możesz tego skonsumować gdy twój pasek nasycenia jest pełny.
You have to wait for about 2 seconds before you can eat or drink again.=Musisz poczekać przez 2 sekundy zanim znów będziesz mogła jeść lub pić.
Hunger points restored: @1=Przywrócone punkty głodu: @1
Saturation points restored: @1%.1f=Przywrócone punkty nasycenia: @1%.1f
This item can be repaired at an anvil with: @1.=Ten przedmiot może być naprawiony przy kowadle przy użyciu: @1.
This item can be repaired at an anvil with any wooden planks.=Ten przedmiot może być naprawiony przy kowadle przy użyciu desek.
This item can be repaired at an anvil with any item in the “@1” group.=Ten przedmiot może być naprawiony przy kowadle przy użyciu dowolnego przedmiotu z grupy "@1".
This item cannot be renamed at an anvil.=Ten przedmiot nie może być przemianowany przy kowadle.
This block crushes any block it falls into.=Ten blok rozbija dowolny blok na który spadnie.
When this block falls deeper than 1 block, it causes damage to any player it hits. The damage dealt is B×22 hit points with B @= number of blocks fallen. The damage can never be more than 40 HP.=Gdy ten blok spada więcej niż o 1 blok, zadaje on obrażenia dowolnemu graczowi którego uderzy. Zadaje on B×22 punktów obrażeń, gdzie B @= liczba bloków o który spadł.
Diamond Pickaxe=Diamentowy kilof
Iron Pickaxe=Żelazny kilof
Stone Pickaxe=Kamienny kilof
Golden Pickaxe=Złoty kilof
Wooden Pickaxe=Drewniany kilof
Diamond Axe=Diamentowa siekiera
Iron Axe=Żelazna siekiera
Stone Axe=Kamienna siekiera
Golden Axe=Złota siekiera
Wooden Axe=Drewniana siekiera
Diamond Shovel=Diamentowa łopata
Iron Shovel=Żelazna łopata
Stone Shovel=Kamienna łopata
Golden Shovel=Złota łopata
Wooden Shovel=Drewniana łopata
This block can be mined by any tool instantly.=Ten blok może zostać wykopany dowolnym narzędziem natychmiastowo.
This block can be mined by:=Ten blok może być wykopany przy użyciu:
Hardness: ∞=Twardość: ∞
Hardness: @1=Twardość: @1
This block will not be destroyed by TNT explosions.=Ten blok nie będzie zniszczony przez eksplozję trotylu.
This block drops itself when mined by shears.=Ten blok wyrzuca siebie gdy wykopany nożycami.
@1×@2=@1×@2
This blocks drops the following when mined by shears: @1=Ten blok wyrzuca siebie gdy wykopany nożycami.
, =,
• Shears=• Nożyce
• Sword=• Miecz
• Hand=• Ręka
This is a melee weapon which deals damage by punching.=To jest broń ręczna która zadaje obrażenia przy uderzenia.
Maximum damage: @1 HP=Maksymalne obrażenia: @1 HP
Full punch interval: @1 s=Pełny okres uderzenia: @1 s
This tool is capable of mining.=To narzędzie jest w stanie kopać.
Mining speed: @1=Szybkość kopania: @1
Painfully slow=Boleśnie powolne
Very slow=Bardzo wolne
Slow=Wolne
Fast=Szybkie
Very fast=Bardzo szybkie
Extremely fast=Ekstremalnie szybkie
Instantaneous=Natychmiastowe
@1 uses=@1 użyć
Unlimited uses=Nielimitowane użycia
Block breaking strength: @1=Siła niszczenia bloku: @1
Mining durability: @1=Wytrzymałość kopania: @1
Armor points: @1=Punkty zbroi: @1
Armor durability: @1=Wytrzymałość zbroi: @1
It can be worn on the head.=Może być noszony na głowie.
It can be worn on the torso.=Może być noszone na piersi.
It can be worn on the legs.=Może być noszony na nogach.
It can be worn on the feet.=Może być noszony na stopach.

View File

@ -2,7 +2,7 @@
Basic help for MCL2. Fork of doc_basics Basic help for MCL2. Fork of doc_basics
]] ]]
local S = minetest.get_translator("mcl_doc_basics") local S = minetest.get_translator(minetest.get_current_modname())
doc.add_category("basics", doc.add_category("basics",
{ {

View File

@ -0,0 +1,512 @@
# textdomain: mcl_doc_basics
Basics=Podstawy
Everything you need to know to get started with playing=Wszystko co musisz wiedzieć by zacząć grać
Advanced usage=Zaawansowane użycie
Advanced information which may be nice to know, but is not crucial to gameplay=Zaawansowane informacje które mogą być przydatne, ale nie są niezbędne podczas grania
Quick start=Szybki start
This is a very brief introduction to the basic gameplay:=Jest to bardzo krótki wstęp do podstawowej rozgrywki:
Basic controls:=Podstawowe sterowanie:
• Move mouse to look=• Porusz myszą by się rozglądać
• [W], [A], [S] and [D] to move=• Użyj [W], [A], [S] i [D] aby się poruszać
• [E] to sprint=• Użyj [E] aby biegać
• [Space] to jump or move upwards=• Użyj [Spacja] aby skakać lub poruszać się w górę
• [Shift] to sneak or move downwards=• Użyj [Shift] aby się skradać lub poruszać w dół
• Mouse wheel or [1]-[9] to select item=• Użyj kółka myszy lub klawiszy [1]-[9] aby wybrać przedmiot
• Left-click to mine blocks or attack=• Kliknij lewym przyciskiem by kopać bloki lub atakować
• Recover from swings to deal full damage=• Poczekaj aż ochłoniesz po zamachu, aby zadać pełne obrażenia
• Right-click to build blocks and use things=• Kliknij prawym przyciskiem aby kłaść bloki lub używać rzeczy
• [I] for the inventory=• Użyj [I] aby otworzyć ekwipunek
• First items in inventory appear in hotbar below=• Pierwsze przedmioty w ekwipunku pojawią się w pasku szybkiego dostępu
• Lowest row in inventory appears in hotbar below=• Najniższy wiersz ekwipunku pojawi się w pasku szybkiego dostępu
• [Esc] to close this window=• Użyj [Esc] aby zamknąć okno
How to play:=Jak grać:
• Punch a tree trunk until it breaks and collect wood=• Uderzaj pień drzewa aż się zniszczy i zbierz drewno
• Place the wood into the 2×2 grid (your “crafting grid”) in your inventory menu and craft 4 wood planks=• Umieść drewno w siatce 2×2 (twojej "siatce do wytwarzania") w twoim ekwipunku i wytwórz 4 deski
• Place them in a 2×2 shape in the crafting grid to craft a crafting table=• Umieść je w kształt 2×2 w twojej siatce do wytwarzania i wytwórz stół rzemieślniczy
• Place the crafting table on the ground=• Umieść stół rzemieślniczy na ziemi
• Rightclick it for a 3×3 crafting grid=• Kliknij go prawym przyciskiem aby zyskać dostęp do siatki 3×3
• Use the crafting guide (book icon) to learn all the possible crafting recipes=• Użyj przewodnika do wytwarzania (ikona książki) aby poznać wszystkie możliwe receptury do wytwarzania
• Craft a wooden pickaxe so you can dig stone=• Wytwórz drewniany kilof aby wykopać kamień
• Different tools break different kinds of blocks. Try them out!=• Różne narzędzia są w stanie zniszczyć różne typy bloków. Wypróbuj je!
• Read entries in this help to learn the rest=• Przeczytaj inne wpisy aby dowiedzieć się resztę
• Continue playing as you wish. There's no goal. Have fun!=• Graj tak jak chcesz. Nie ma żadnego celu. Miłej zabawy!
Minetest=Minetest
Minetest is a free software game engine for games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”).=Minetest jest wolnym oprogramowaniem i silnikiem do gier opartych o rozgrywkę na voxelach, inspirowanym przez InfiniMinera, Minecrafta i podobnym. Minetest był oryginalnie stworzony przez Perttu Ahola (alias “celeron55”).
The player is thrown into a huge world made out of cubes or blocks. These cubes usually make the landscape they blocks can be removed and placed almost entirely freely. Using the collected items, new tools and other items can be crafted. Games in Minetest can, however, be much more complex than this.=Gracz jest wrzucony do ogromnego świata stworzonego z sześcianów lub bloków. Te sześciany zwykle tworzą widoczny krajobraz i mogą być usuwane oraz stawiane niemal całkowicie dowolnie. Korzystając z zebranych przedmiotów nowe narzędzia i inne rzeczy mogą zostać utworzone. Gry w Minetest mogą jednak być dużo bardziej skomplikowane niż to.
A core feature of Minetest is the built-in modding capability. Mods modify existing gameplay. They can be as simple as adding a few decorational blocks or be very complex by e.g. introducing completely new gameplay concepts, generating a completely different kind of world, and many other things.=Główną cechą Minetesta jest wbudowana możliwość budowania. Mody modyfikują istniejącą rozgrywkę. Mogą być tak proste jak dodanie kilku bloków dekoracyjnych, lub bardzo skomplikowane np. wprowadzając zupełnie nowe sposoby rozgrywki, generując zupełnie inny rodzaj świata i wiele innych rzeczy.
Minetest can be played alone or online together with multiple players. Online play will work out of the box with any mods, with no need for additional software as they are entirely provided by the server.=W Minetest można grać samotnie lub online z kilkoma graczami. Gra online będzie działać od razu z modami, bez potrzeby dodatkowych programów jako, że są one całkowicie dostarczane przez serwer.
Minetest is usually bundled with a simple default game, named “Minetest Game” (shown in images 1 and 2). You probably already have it. Other games for Minetest can be downloaded from the official Minetest forums <https://forum.minetest.net/viewforum.php?f@=48>.=Minetest jest zwykle dystrybuowany wraz z prostą domyślną grą, nazwaną "Gra Minetest" (pokazana na obrazka 1 i 2). Prawdopodobnie już ją masz. Inne gry dla Minetesta mogą być pobrane z oficjalnych forum Minetesta <https://forum.minetest.net/viewforum.php?f@=48>.
Minetest as well as Minetest Game are both unfinished at the moment, so please forgive us when not everything works out perfectly.=Zarówno Minetest jak i Gra Minetest są aktualnie niedokończone, więc prosimy o wybaczenie jeśli nie wszystkie rzeczy działają idealnie.
Sneaking=Skradanie
Sneaking makes you walk slower and prevents you from falling off the edge of a block.=Skradanie sprawia, że chodzisz wolniej i zapobiega spadaniu z bloków.
To sneak, hold down the sneak key (default: [Shift]). When you release it, you stop sneaking. Careful: When you release the sneak key at a ledge, you might fall!=Aby się skradać przytrzymaj przycisk skradania (domyślnie: [Shift]). Gdy go puścisz, przestaniesz się skradać. Ostrożnie: Jeśli puścisz przycisk skradania na krawędzi możesz spaść!
• Sneak: [Shift]=• Skradanie: [Shift]
Sneaking only works when you stand on solid ground, are not in a liquid and don't climb.=Skradanie działa tylko gdy stoisz na stałym gruncie, nie w wodzie oraz nie podczas wspinania.
If you jump while holding the sneak key, you also jump slightly higher than usual.=Jeśli skoczysz podczas skradania, skoczysz nieco wyżej niż zwykle.
Sneaking might be disabled by mods. In this case, you still walk slower by sneaking, but you will no longer be stopped at ledges.=Skradanie może być wyłączone przez mody. W takim przypadku wciąż będziesz chodziła wolniej przy skradaniu, ale wciąż będziesz mogła spaść z bloków.
Controls=Sterowanie
These are the default controls:=To jest domyślne sterowanie:
Basic movement:=Podstawy poruszania:
• Moving the mouse around: Look around=• Poruszanie myszką: Rozglądnij się
• W: Move forwards=• W: Idź naprzód
• A: Move to the left=• A: Idź w lewo
• D: Move to the right=• D: Idź w prawo
• S: Move backwards=• S: Idź w tył
• E: Sprint=• E: Biegnij
While standing on solid ground:=Podczas stania na stałym gruncie:
• Space: Jump=• Spacja: Skok
• Shift: Sneak=• Shift: Skradanie
While on a ladder, swimming in a liquid or fly mode is active=Podczas wspinania, pływania w płynie lub aktywnego trybu latania:
• Space: Move up=• Spacja: W górę
• Shift: Move down=• Shift: W dół
Extended movement (requires privileges):=Rozszerzone poruszanie:
• J: Toggle fast mode, makes you run or fly fast (requires “fast” privilege)=• J: Przełącz tryb szybki, co umożliwia szybkie bieganie i latanie (wymaga przywileju "fast")
• K: Toggle fly mode, makes you move freely in all directions (requires “fly” privilege)=• K: Przełącz tryb latania, co umożliwia swobodne poruszanie w dowolnym kierunku (wymaga przywileju "fly")
• H: Toggle noclip mode, makes you go through walls in fly mode (requires “noclip” privilege)=• H: Przełącz tryb noclip, co umożliwia przechodzenie przez ściany w trybie latania (wymaga przywileju "noclip")
• E: Move even faster when in fast mode=• E: Poruszaj się jeszcze szybciej w trybie szybkim
• E: Walk fast in fast mode=• Poruszaj się szybciej w trybie szybkim
World interaction:=Interakcja ze światem:
• Left mouse button: Punch / mine blocks / take items=• Lewy przycisk myszy: Uderz / kop bloki / weź przedmiot
• Left mouse button: Punch / mine blocks=• Lewy przycisk myszy: Uderz / kop bloki
• Right mouse button: Build or use pointed block=• Prawy przycisk myszy: Zbuduj lub użyj wskazywany blok
• Shift+Right mouse button: Build=• Shift+Prawy przycisk myszy: Zbuduj
• Roll mouse wheel: Select next/previous item in hotbar=• Kręć kółkiem myszy: Wybierz następny/poprzedni przedmiot w pasku szybkiego dostępu
• Roll mouse wheel / B / N: Select next/previous item in hotbar=• Kręć kółkiem myszy / B / N: Wybierz następny/poprzedni przedmiot w pasku szybkiego dostępu
• 1-9: Select item in hotbar directly=• 1-9: Wybierz przedmiot z pasku szybkiego dostępu
• Q: Drop item stack=• Q: Wyrzuć grupę przedmiotów
• Shift+Q: Drop 1 item=• Shift+Q: Wyrzuć jeden przedmiot
• I: Show/hide inventory menu=• I: Pokaż/schowaj menu ekwipunku
Inventory interaction:=Interakcja z ekwipunkiem:
See the entry “Basics > Inventory”.=Zobacz wpis "Podstawy > Ekwipunek".
Camera:=Kamera:
• Z: Zoom=• Z: Przybliż
• F7: Toggle camera mode=• F7: Zmień tryb kamery
• F8: Toggle cinematic mode=• F8: Zmień na tryb kinowy
Interface:=Interfejs:
• Esc: Open menu window (pauses in single-player mode) or close window=• Esc: Otwórz okno menu (zatrzymuje grę w trybie pojedynczego gracza) lub zamknij okno
• F1: Show/hide HUD=• F1: Pokaż/ukryj interfejs
• F2: Show/hide chat=• F2: Pokaż/ukryj czat
• F9: Toggle minimap=• F9: Przełącz minimapę
• Shift+F9: Toggle minimap rotation mode=• Shift+F9: Przełącz tryb rotacji minimapy
• F10: Open/close console/chat log=• F10: Otwórz/zamknij konsolę/okno czatu
• F12: Take a screenshot=• F12: Zrób zrzut ekranu
Server interaction:=Interakcja z serwerem:
• T: Open chat window (chat requires the “shout” privilege)=• T: Otwórz okno czatu (chat wymaga przywileju "shout")
• /: Start issuing a server command=• /: Rozpocznij wpisywanie komendy serwera
Technical:=Techniczne:
• R: Toggle far view (disables all fog and allows viewing far away, can make game very slow)=• R: Przełącz tryb dalekiego widzenia (wyłącza mgłę i pozwala widzieć odległe obiekty, może znacząco spowolnić grę)
• +: Increase minimal viewing distance=• +: Zwiększ minimalny zasięg widzenia
• -: Decrease minimal viewing distance=• -: Zmniejsz minimalny zasięg widzenia
• F3: Enable/disable fog=• F3: Włącz/wyłącz mgłę
• F5: Enable/disable debug screen which also shows your coordinates=• F5: Włącz/wyłącz ekran debug'u, który pokazuje również twoje położenie
• F6: Only useful for developers. Enables/disables profiler=• F6: Przydatne tylko dla deweloperów. Włącza/wyłącza profiler
• P: Only useful for developers. Writes current stack traces=• P: Przydatne tylko dla deweloperów. Zapisuje aktualny zrzut stosu
Players=Gracze
Players (actually: “player characters”) are the characters which users control.=Gracze (właściwie "postacie graczy") są postaciami kontrolowanymi przez użytkowników.
Players are living beings. They start with a number of health points (HP) and a number of breath points (BP).=Gracze są żywymi stworzeniami. Zaczynają z pewną liczbą punktów życia (HP) oraz punktów oddechu (BP).
Players are capable of walking, sneaking, jumping, climbing, swimming, diving, mining, building, fighting and using tools and blocks.=Gracze są w stanie chodzić, skradać się, skakać, wspinać, pływać, nurkować, kopać, budować walczyć oraz korzystać z narzędzi i bloków.
Players can take damage for a variety of reasons, here are some:=Gracze mogą otrzymać obrażenia z wielu powodów, oto niektóre:
• Taking fall damage=• Obrażenia od upadku
• Touching a block which causes direct damage=• Dotknięcie bloku który zadaje obrażenia
• Drowning=• Tonięcie
• Being attacked by another player=• Zaatakowanie przez innego gracza
• Being attacked by a computer enemy=• Zaatakowanie przez przeciwnika sterowanego przez komputer
At a health of 0, the player dies. The player can just respawn in the world.=Gdy zdrowie osiągnie poziom 0, gracz umiera. Gracz może wtedy odrodzić się w świecie.
Other consequences of death depend on the game. The player could lose all items, or lose the round in a competitive game.=Inne konsekwencje śmierci zależą od gry. Gracz może stracić wszystkie przedmioty, lub stracić punkty w grze konkurencyjnej.
Some blocks reduce breath. While being with the head in a block which causes drowning, the breath points are reduced by 1 for every 2 seconds. When all breath is gone, the player starts to suffer drowning damage. Breath is quickly restored in any other block.=Niektóre bloki zmniejszają oddech. Podczas przebywania w bloku powodującym topienie się, punkty oddechu są zmniejszane o 1 co 2 sekundy. Gdy punkty oddechu się skończą, gracz zacznie otrzymywać obrażenia od tonięcia. Oddech szybko odnawia się w dowolnym innym bloku.
Damage can be disabled on any world. Without damage, players are immortal and health and breath are unimportant.=Obrażenia mogą zostać wyłączone w dowolnym świecie. Bez obrażeń gracze są nieśmiertelni, a ich życie i oddech są nieistotne.
In multi-player mode, the name of other players is written above their head.=W trybie wieloosobowym imię innych graczy jest napisane powyżej ich głów.
Items=Przedmioty
Items are things you can carry along and store in inventories. They can be used for crafting, smelting, building, mining, and more. Types of items include blocks, tools, weapons and items only used for crafting.=Przedmioty są rzeczami które możesz przenosić i przechowywać w ekwipunku. Mogą być wykorzystane do wytwarzania, przetapiania, budowania, kopania i w innych celach. Typy przedmiotów to m.in. bloki, narzędzia bronie oraz przedmioty użyteczne tylko w wytwarzaniu.
An item stack is a collection of items of the same type which fits into a single item slot. Item stacks can be dropped on the ground. Items which drop into the same coordinates will form an item stack.=Grupa przedmiotów jest zbiorem przedmiotów tego samego typu, która mieści się w jednym miejscu na przedmiot. Grupy przedmiotów mogą zostać upuszczone na ziemię. Przedmioty, które zostaną upuszczone na te same współrzędne utworzą grupę przedmiotów.
Dropped item stacks will be collected automatically when you stand close to them.=Upuszczone grupy przedmiotów zostaną podniesione automatycznie gdy staniesz w ich pobliżu.
Items have several properties, including the following:=Przedmioty mają wiele właściwości, między innymi:
• Maximum stack size: Number of items which fit on 1 item stack=• Maksymalny rozmiar grupy: Liczba przedmiotów które mieszczą się w jednej grupie
• Pointing range: How close things must be to be pointed while wielding this item=• Zasięg wskazywania: Jak blisko muszą być przedmioty aby można na nie wskazać za pomocą tego przedmiotu
• Group memberships: See “Basics > Groups”=• Przynależność do grupy: Zobacz "Podstawy > Grupy"
• May be used for crafting or cooking=• Mogą być używane do wytwarzania lub pieczenia
Tools=Narzędzia
Some items may serve as a tool when wielded. Any item which has some special use which can be directly used by its wielder is considered a tool.=Niektóre przedmioty służą jako narzędzia gdy trzyma się je w rękach. Dowolny przedmiot, który ma specjalne użycia które mogą być bezpośrednio użyte przez jego posiadacza jest uznawany za narzędzie.
A common subset of tools is mining tools. These are important to break all kinds of blocks. Weapons are a kind of tool. There are of course many other possible tools. Special actions of tools are usually done by left-click or right-click.=Częstym podzbiorem narzędzi są narzędzia do kopania. Są one istotne przy niszczeniu różnych typów bloków. Bronie są innym rodzajem narzędzia. Jest oczywiście wiele innych możliwych narzędzi. Specjalne akcje narzędzi są zwykle aktywowane przy użyciu lewego lub prawego przycisku myszy.
When nothing is wielded, players use their hand which may act as tool and weapon.=Gdy nic nie jest trzymane, gracze używają swojej ręki, która może służyć jako narzędzie i broń.
Mining tools are important to break all kinds of blocks. Weapons are another kind of tool. There are some other more specialized tools. Special actions of tools are usually done by right-click.=Narzędzia do kopania są istotne do niszczenia różnych bloków. Innym rodzajem narzędzi są bronie. Istnieją również inne, bardzie wyspecjalizowane narzędzia. Specjalne akcje narzędzi są zwykle wykonywane przy użyciu lewego oraz prawego przycisku myszy.
When nothing is wielded, players use their hand which may act as tool and weapon. The hand is capable of punching and deals minimum damage.=Gdy nic nie jest trzymane gracze używają swojej dłoni, która może służyć za narzędzie i za broń. Ręką można uderzać co zadaje minimalne obrażenia.
Many tools will wear off when using them and may eventually get destroyed. The damage is displayed in a damage bar below the tool icon. If no damage bar is shown, the tool is in mint condition. Tools may be repairable by crafting, see “Basics > Crafting”.=Wiele narzędzi będzie się zużywać podczas używania, co w końcu sprawi, że zostaną zniszczone. Zużycie jest wyświetlane jako pasek poniżej ikony narzędzia. Jeśli pasek nie jest pokazywany, narzędzie jest w idealnym stanie. Narzędzia mogą być naprawiane przez wytwarzania, zobacz "Podstawy > Wytwarzanie".
Weapons=Bronie
Some items are usable as a melee weapon when wielded. Weapons share most of the properties of tools.=Niektóre przedmioty są przydatne jako bronie wręcz gdy trzymane. Bronie mają wiele podobnych własności co narzędzia.
Melee weapons deal damage by punching players and other animate objects. There are two ways to attack:=Bronie wręcz zadają obrażenia przy uderzaniu graczy i innych obiektów.
• Single punch: Left-click once to deal a single punch=• Pojedyncze uderzenie: Kliknij lewy przycisk myszy aby wykonać jedno uderzenie
• Quick punching: Hold down the left mouse button to deal quick repeated punches=• Szybkie uderzenia: Przytrzymaj lewy przycisk myszy aby zadać szybkie, powtarzające się uderzenia
There are two core attributes of melee weapons:=Dwie istotne cechy każdej broni wręcz:
• Maximum damage: Damage which is dealt after a hit when the weapon was fully recovered=• Maksymalne obrażenia: Obrażenia zadawane gdy broń przy uderzeniu gdy broń jest całkowicie ochłonięta
• Full punch interval: Time it takes for fully recovering from a punch=• Pełny okres uderzenia: Czas który jest potrzebny do ochłonięcia broni po uderzeniu
A weapon only deals full damage when it has fully recovered from a previous punch. Otherwise, the weapon will deal only reduced damage. This means, quick punching is very fast, but also deals rather low damage. Note the full punch interval does not limit how fast you can attack.=Broń zadaje pełne obrażenia tylko gdy jest w pełni ochłonięta z poprzedniego uderzenia. W przeciwnym wypadku zadane obrażenia będą zmniejszone. To oznacza, że szybkie uderzanie jest bardzo szybkie, ale zadaje niskie obrażenia. Zauważ, że pełny okres uderzenia nie jest limitem na to jak szybko możesz atakować.
There is a rule which sometimes makes attacks impossible: Players, animate objects and weapons belong to damage groups. A weapon only deals damage to those who share at least one damage group with it. So if you're using the wrong weapon, you might not deal any damage at all.=Istnieje reguła która sprawia, że ataki są czasem niemożliwe: Gracze, ruchome obiekty i bronie należą do grup obrażeń. Broń zadaje obrażenia tylko tym, którzy należą do przynajmniej jednej z jej grup obrażeń.
Pointing=Wskazywanie
“Pointing” means looking at something in range with the crosshair. Pointing is needed for interaction, like mining, punching, using, etc. Pointable things include blocks, players, computer enemies and objects.="Wskazywanie" oznacza patrzenia na coś w zasięgu celownikiem. Wskazywanie jest wymagane podczas interakcji takich jak kopanie, uderzanie, używanie itp. Wskazywalne obiekty to między innymi bloki, gracze, przeciwnicy komputerowi i obiekty.
To point something, it must be in the pointing range (also just called “range”) of your wielded item. There's a default range when you are not wielding anything. A pointed thing will be outlined or highlighted (depending on your settings). Pointing is not possible with the 3rd person front camera.=Aby na coś wskazać musi być to w zasięgu wskazywania (zwykle nazywanym po prostu "zasięgiem") trzymanego przez ciebie przedmiotu. Gdy nic nie jest trzymane jest to zasięg domyślny. Wskazywany przedmiot będzie obrysowany lub podświetlony (w zależności od twoich ustawień). Wskazywanie nie jest możliwe gdy włączona jest przednia kamera trzecioosobowa.
A few things can not be pointed. Most blocks are pointable. A few blocks, like air, can never be pointed. Other blocks, like liquids can only be pointed by special items.=Na niektóre rzeczy nie można wskazywać. Większość bloków jest wskazywalna. Na niektóre bloki, np. powietrze, nie można wskazać. Inne bloki, takie jak płyny, mogą być wskazane tylko przy użyciu specjalnych przedmiotów.
Camera=Kamera
There are 3 different views which determine the way you see the world. The modes are:=Istnieją 3 różne widoki, które definiują w jaki sposób będziesz obserwował świat. Te widoki to:
• 1: First-person view (default)=• 1: Widok pierwszoosobowy (domyślny)
• 2: Third-person view from behind=• 2: Widok trzecioosobowy od tyłu
• 3: Third-person view from the front=• 3: Widok trzecioosobowy od przodu
You can change the camera mode by pressing [F7].=Możesz zmienić widok kamery naciskając [F7].
You might be able to zoom with [Z] to zoom the view at the crosshair. This allows you to look further.=Możesz być w stanie przybliżać widok naciskając [Z]. To pozawala spojrzeć dalej w kierunku celownika.
Zooming is a gameplay feature that might be enabled or disabled by the game. By default, zooming is enabled when in Creative Mode but disabled otherwise.=Przybliżanie jako cecha rozgrywki może być włączone lub wyłączone przez grę. Domyślnie przybliżanie jest włączone w trybie Kreatywny i wyłączone w przeciwnym przypadku.
There is also Cinematic Mode which can be toggled with [F8]. With Cinematic Mode enabled, the camera movements become more smooth. Some players don't like it, it is a matter of taste.=Istnieje również tryb kinowy, który może być włączony naciskając [F8]. Gdy jest on włączony ruchy kamery są bardziej wygładzone. Niektórzy gracze go nie lubią, jest to kwestia gustu.
By holding down [Z], you can zoom the view at your crosshair. You need the “zoom” privilege to do this.=Przytrzymując [Z] możesz przybliżyć widok na swoim celowniku. Potrzebujesz przywileju "zoom" aby to zrobić.
• Switch camera mode: [F7]=• Zmień widok kamery: [F7]
• Toggle Cinematic Mode: [F8]=• Przełącz tryb kinowy: [F8]
• Zoom: [Z]=• Przybliż: [Z]
Blocks=Bloki
The world of MineClone 2 is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Świat MineClone 2 jest w całości złożony z bloków (a bardziej precyzyjnie voxeli). Bloki mogą być dodawane lub usuwane przy użyciu odpowiednich narzędzi.
The world is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Świat jest w całości złożony z bloków (a bardziej precyzyjnie voxeli). Bloki mogą być dodawane lub usuwane przy użyciu odpowiednich narzędzi.
Blocks can have a wide range of different properties which determine mining times, behavior, looks, shape, and much more. Their properties include:=Bloki mogą mieć wiele różnych właściwości określających czas kopania, zachowanie, wygląd, kształt i wiele więcej. Te własności to między innymi:
• Collidable: Collidable blocks can not be passed through; players can walk on them. Non-collidable blocks can be passed through freely=• Zderzalne: Przez bloki z tą własnością nie można przechodzić; gracze mogą po nich chodzić. Przez nie-zderzalne bloki można swobodnie przechodzić.
• Pointable: Pointable blocks show a wireframe or a halo box when pointed. But you will just point through non-pointable blocks. Liquids are usually non-pointable but they can be pointed at by some special tools=• Wskazywalne: Te bloki pokażą obwód lub poświatę gdy zostaną wskazane. Ale przez niewskazywalne bloki będziesz wskazywała bloki znajdujące się za nimi. Płyny są zwykła niewskazywalne, ale można na nie wskazać przy użyciu specjalnych narzędzi.
• Mining properties: By which tools it can be mined, how fast and how much it wears off tools=• Własności kopania: Przez jakie narzędzia mogą być wykopane, jak szybko oraz jak bardzo zużyje to narzędzie
• Climbable: While you are at a climbable block, you won't fall and you can move up and down with the jump and sneak keys=• Wspinaczkowe: Gdy jesteś obok bloków wspinaczkowych nie spadniesz, oraz możesz poruszać się w górę i w dół korzystając z przycisków do skakania i skradania.
• Drowning damage: See the entry “Basics > Player”=• Obrażenia tonięcia: Zobacz wpis "Podstawy > Gracz"
• Liquids: See the entry “Basics > Liquids”=• Płyny: Zobacz wpis "Podstawy > Płyny"
• Group memberships: Group memberships are used to determine mining properties, crafting, interactions between blocks and more=• Przynależność do grup: Przynależności do grup definiują własności kopania, wytwarzania, interakcje między blokami i wiele więcej
Mining=Kopanie
Mining (or digging) is the process of breaking blocks to remove them. To mine a block, point it and hold down the left mouse button until it breaks.=Kopanie (lub wydobywanie) jest procesem niszczenia i usuwania bloków. Aby wykopać blok, wskaż na niego i przytrzymaj lewy przycisk myszy aż się zniszczy.
Blocks require a mining tool to be mined. Different blocks are mined by different mining tools, and some blocks can not be mined by any tool. Blocks vary in hardness and tools vary in strength. Mining tools will wear off over time. The mining time and the tool wear depend on the block and the mining tool. The fastest way to find out how efficient your mining tools are is by just trying them out on various blocks. Any items you gather by mining will drop on the ground, ready to be collected.=Bloki wymagają narzędzi do kopania aby je wykopać. Różne bloki są wykopywane przez różne narzędzia, a niektóre nie mogą być wykopane przez żadne narzędzie. Najszybszym sposobem testowania jak efektowne są twoje narzędzia do kopania jest po prostu wypróbowanie ich na różnych blokach. Wszystkie przedmioty które wykopiesz zostaną upuszczone na ziemię, gotowe do podniesienia.
After mining, a block may leave a “drop” behind. This is a number of items you get after mining. Most commonly, you will get the block itself. There are other possibilities for a drop which depends on the block type. The following drops are possible:=Po wykopaniu, blok może upuścić "zrzut". Jest to kilka przedmiotów zdobytych przez kopanie. Najczęściej będzie to wykopany blok. Możliwe są inne zrzuty zależne od typu bloku. Następujące zrzuty są możliwe:
• Always drops itself (the usual case)=• Zawsze wyrzuca siebie (typowy przypadek)
• Always drops the same items=• Zawsze wyrzuca te same przedmioty
• Drops items based on probability=• Wyrzuca przedmioty z pewnym prawdopodobieństwem
• Drops nothing=• Nie wyrzuca niczego
Building=Budowanie
Almost all blocks can be built (or placed). Building is very simple and has no delay.=Prawie wszystkie bloki mogą być zbudowane (lub postawione). Stawianie jest bardzo proste i natychmiastowe.
To build your wielded block, point at a block in the world and right-click. If this is not possible because the pointed block has a special right-click action, hold down the sneak key before right-clicking.=Aby postawić trzymany blok, wskaż na blok w świecie i kliknij prawy przycisk. Jeśli jest to niemożliwe, ponieważ wskazany blok ma specjalną akcję aktywowaną prawym przyciskiem myszy, przytrzymaj przycisk skradania przed kliknięciem prawego przycisku.
Blocks can almost always be built at pointable blocks. One exception are blocks attached to the floor; these can only be built on the floor.=Bloki prawie zawsze mogą być zbudowane na wskazywalnych blokach. Jednym z wyjątków są bloki przyczepione do podłogi; takie mogą być zbudowane tylko na podłodze.
Normally, blocks are built in front of the pointed side of the pointed block. A few blocks are different: When you try to build at them, they are replaced.=Zwykle, bloki są zbudowane przed wskazaną stroną wskazanego bloki. Niektóre bloki są inne: Gdy próbujesz na nich coś postawić są one tym zastępowane.
Liquids=Płyny
Liquids are special dynamic blocks. Liquids like to spread and flow to their surrounding blocks. Players can swim and drown in them.=Płyny są specjalnymi dynamicznymi blokami. Płyny lubią się rozprzestrzeniać i wpływać na otaczające bloki. Gracze mogą w nich pływać i tonąć.
Liquids usually come in two forms: In source form (S) and in flowing form (F).=Płyny zwykle pojawiają się w dwóch formach: W formie źródła (S) oraz w formie bieżącej (F).
Liquid sources have the shape of a full cube. A liquid source will generate flowing liquids around it from time to time, and, if the liquid is renewable, it also generates liquid sources. A liquid source can sustain itself. As long it is left alone, a liquid source will normally keep its place and does not drain out.=Źródła płynów są w kształcie pełnej kostki. Źródło płynu od czasu do czasu wygeneruje bieżący formę płynu w swoim otoczeniu oraz jeśli płyn jest odnawialny, utworzy również źródła płynu. Źródło płynu podtrzymuje siebie. Tak długo jak nie jest ruszane, źródło wody zostanie w miejscu i nie kończy się.
Flowing liquids take a sloped form. Flowing liquids spread around the world until they drain. A flowing liquid can not sustain itself and always comes from a liquid source, either directly or indirectly. Without a liquid source, a flowing liquid will eventually drain out and disappear.=Bieżące płyny przyjmują formę ściętą. Rozprzestrzeniają się one po świecie dopóki się nie wyczerpią. Bieżący płyn nie podtrzymuje sam siebie i zawsze powstaje ze źródła płynu, bezpośrednio lub pośrednio. Bez źródła płynu, płyn bieżący prędzej czy później wyczerpie się i zniknie.
All liquids share the following properties:=Wszystkie płyny mają następujące własności:
• All properties of blocks (including drowning damage)=• Wszystkie własności bloków (włączając w to obrażenia od tonięcia)
• Renewability: Renewable liquids can create new sources=• Odnawialność: Odnawialne płyny mogą tworzyć nowe źródła
• Flowing range: How many flowing liquids are created at maximum per liquid source, it determines how far the liquid will spread. Possible are ranges from 0 to 8. At 0, no flowing liquids will be created. Image 5 shows a liquid of flowing range 2=• Zasięg płynięcia: Ile maksymalnie płynów bieżących jest utworzonych przez źródło płynu. Definiuje to jak daleko płyn może się rozprzestrzenić. Możliwe wartości są od 0 do 8. Przy 0, żadne płyny bieżące nie będą utworzone. Obrazek 5 pokazuje płyn z zasięgiem płynięcia 2
• Viscosity: How slow players move through it and how slow the liquid spreads=• Lepkość: Jak wolno gracze poruszają się przez niego i jak wolno płyn się rozprzestrzenia
Renewable liquids create new liquid sources at open spaces (image 2). A new liquid source is created when:=Odnawialne płyny mogą tworzyć nowe źródła płynów w wolnej przestrzeni (obrazek 2). Nowe źródło płynu jest tworzone gdy:
• Two renewable liquid blocks of the same type touch each other diagonally=• Dwa odnawialne źródła płynów tego samego typu stykają się po przekątnej
• These blocks are also on the same height=• Bloki te są na tej samej wysokości
• One of the two “corners” is open space which allows liquids to flow in=• Jeden z dwóch "rogów" jest wolną przestrzenią gdzie może wpłynąć płyn
When those criteria are met, the open space is filled with a new liquid source of the same type (image 3).=Gdy te kryteria są spełnione, wolna przestrzeń jest zapełniona źródłem płynu tego samego typu (obrazek 3).
Swimming in a liquid is fairly straightforward: The usual direction keys for basic movement, the jump key for rising and the sneak key for sinking.=Pływanie w płynie jest całkiem proste: Klawisze chodzenia powodują ruch w danym kierunku, przycisk skakania powoduje wznoszenia, a skradania opadanie.
The physics for swimming and diving in a liquid are:=Fizyka pływania i nurkowania w płynach jest następująca:
• The higher the viscosity, the slower you move=• Im wyższa lepkość, tym wolniej się poruszasz
• If you rest, you'll slowly sink=• Jeśli się nie ruszasz, będziesz powoli opadała
• There is no fall damage for falling into a liquid as such=• Nie ma obrażeń od upadku gdy wpadniesz do płynu
• If you fall into a liquid, you will be slowed down on impact (but don't stop instantly). Your impact depth is determined by your speed and the liquid viscosity. For a safe high drop into a liquid, make sure there is enough liquid above the ground, otherwise you might hit the ground and take fall damage=• Gdy wpadasz do płynu będziesz spowolniona przy zetknięciu (ale nie natychmiast). Zanurzenie po upadku jest ustalane na podstawie twojej szybkości oraz lepkości płynu. Żeby bezpiecznie skoczyć do płynu, upewnij się, że jest go wystarczająco dużo nad ziemię. W przeciwnym wypadku możesz uderzyć w ziemię i otrzymać obrażenia od upadku.
Liquids are often not pointable. But some special items are able to point all liquids.=Płyny są zwykle niewskazywalne, ale niektóre specjalne przedmioty mogą wskazywać na płyny.
Crafting=Wytwarzanie
Crafting is the task of combining several items to form a new item.=Wytwarzanie jest procesem łączenia i przetwarzania przedmiotów aby utworzyć nowy przedmiot.
To craft something, you need one or more items, a crafting grid (C) and a crafting recipe. A crafting grid is like a normal inventory which can also be used for crafting. Items need to be put in a certain pattern into the crafting grid. Next to the crafting grid is an output slot (O). Here the result will appear when you placed items correctly. This is just a preview, not the actual item. Crafting grids can come in different sizes which limits the possible recipes you can craft.=Aby coś wytworzyć potrzebujesz jednego lub więcej przedmiotów, siatki do wytwarzania oraz receptury. Siatka do wytwarzania jest jak zwykły ekwipunek, który może być użyty do wytwarzania. Przedmioty muszą być ułożone w konkretny wzór w siatce do wytwarzania. Obok siatki wytwarzania jest miejsce wyjściowe (O). Tutaj pojawi się rezultat gdy poprawnie umieścisz przedmioty. Jest to tylko podgląd, a nie faktyczny przedmiot. Siatki do wytwarzania mogą mieć różne rozmiary, co ogranicza liczbę receptur które możesz wytworzyć.
To complete the craft, take the result item from the output slot, which will consume items from the crafting grid and creates a new item. It is not possible to place items into the output slot.=Aby zakończyć wytwarzanie zabierze wynikowy przedmiot z miejsca wyjściowego. Skonsumuje to przedmioty z siatki do wytwarzania i utworzy nowy przedmiot. Nie da się umieszczać przedmiotów w miejscu wyjściowym.
A description on how to craft an item is called a “crafting recipe”. You need this knowledge to craft. There are multiple ways to learn crafting recipes. One way is by using a crafting guide, which contains a list of available crafting recipes. Some games provide crafting guides. There are also some mods which you can download online for installing a crafting guide. Another way is by reading the online manual of the game (if one is available).=Opis w jaki sposób uzyskać dany przedmiot nazywa się "recepturą wytwarzania". Potrzebujesz tej wiedzy do wytwarzania. Jest kilka sposobów by je poznać. Jednym z nich jest korzystanie z przewodnika do wytwarzania, który zawiera listę dostępnych receptur do wytwarzania. Niektóre gry dostarczają takie przewodniki. Istnieją także mody, które możesz pobrać z internetu dodające przewodniki. Innym sposobem jest przeczytanie instrukcji gry w internecie (jeśli taka jest dostępna).
Crafting recipes consist of at least one input item and exactly one stack of output items. When performing a single craft, it will consume exactly one item from each stack of the crafting grid, unless the crafting recipe defines replacements.=Receptury do wytwarzania składają się z przynajmniej jednego przedmiotu na wejściu i dokładnie jednej grupy przedmiotów wyjściowych. Podczas dokonywania pojedynczego wytwarzania skonsumowany zostanie dokładnie jeden przedmiot z każdej grupy w siatce wytwarzania, chyba, że receptura definiuje zamienniki.
There are multiple types of crafting recipes:=Istnieje kilka typów receptur:
• Shaped (image 2): Items need to be placed in a particular shape=• Kształtne (obrazek 2): Przedmioty muszą być ułożone w konkretny kształt
• Shapeless (images 3 and 4): Items need to be placed somewhere in input (both images show the same recipe)=• Bezkształtne (obrazki 3 i 4): Przedmioty muszą być ułożone gdzieś w wejściu (oba obrazki pokazują tę samą recepturę)
• Cooking: Explained in “Basics > Cooking”=• Pieczenie: Wyjaśnione w "Podstawy > Pieczenie"
• Repairing (image 5): Place two damaged tools into the crafting grid anywhere to get a tool which is repaired by 5%=• Naprawianie (obrazek 5): Postaw dwa uszkodzone narzędzia w siatce do wytwarzania w dowolnym miejscu aby uzyskać narzędzie naprawione o 5%
In some crafting recipes, some input items do not need to be a concrete item, instead they need to be a member of a group (see “Basics > Groups”). These recipes offer a bit more freedom in the input items. Images 6-8 show the same group-based recipe. Here, 8 items of the “stone” group are required, which is true for all of the shown items.=W niektórych recepturach, niektóre przedmioty wejściowe nie muszą być konkretnymi przedmiotami, tylko przynależeć do pewnej grupy (zobacz "Podstawy > Grupy"). Te receptury są nieco mniej restrykcyjne jeśli chodzi o wejściowe przedmioty. Obrazki 6-8 pokazują tę samą recepturę opartą o grupy. W tym przypadku 8 przedmiotów z grupy "kamień" są potrzebne, a wszystkie pokazane przedmioty do niej należą.
Rarely, crafting recipes have replacements. This means, whenever you perform a craft, some items in the crafting grid will not be consumed, but instead will be replaced by another item.=Czasami, receptury mają zamienniki. To oznacza, że po wykonaniu przetwarzania, niektóre przedmioty w siatce nie będą skonsumowane, a jedynie zamienione w inny przedmiot.
Cooking=Pieczenie
Cooking (or smelting) is a form of crafting which does not involve a crafting grid. Cooking is done with a special block (like a furnace), an cookable item, a fuel item and time in order to yield a new item.=Pieczenie (lub przetapianie) jest formą wytwarzania, która nie wymaga siatki do wytwarzania. Pieczenie jest wykonywane przy użyciu specjalnego bloku (np. pieca), przedmiotu który można upiec, paliwa oraz czasu potrzebnego na uzyskanie nowego przedmiotu.
Each fuel item has a burning time. This is the time a single item of the fuel keeps a furnace burning.=Każdy przedmiot będący paliwem ma czas wypalania. Jest to czas przez jaki pojedynczy przedmiot tego paliwa utrzymuje piec zapalony.
Each cookable item requires time to be cooked. This time is specific to the item type and the item must be “on fire” for the whole cooking time to actually yield the result.=Każdy przedmiot możliwy do upieczenia potrzebuje czasu by zostać upieczony. Czas ten jest przypisany do typu przedmiotu i każdy przedmiot musi być "na ogniu" przez cały ten czas by uzyskać przedmiot wynikowy.
Hotbar=Pasek szybkiego dostępu
At the bottom of the screen you see some squares. This is called the “hotbar”. The hotbar allows you to quickly access the first items from your player inventory.=Na dole swojego ekwipunku możesz zobaczyć kwadraty. To nazywa się "pasek szybkiego dostępu". Pozwala on na szybki dostęp do pierwszych przedmiotów z twojego ekwipunku.
You can change the selected item with the mouse wheel or the keyboard.=Możesz zmieniać wybrany przedmiot przy użyciu kółka myszy lub klawiatury.
• Select previous item in hotbar: [Mouse wheel up] or [B]=• Wybierz poprzedni przedmiot w pasku: [Kółko myszy w górę] lub [B]
• Select next item in hotbar: [Mouse wheel down] or [N]=• Wybierz następny przedmiot w pasku: [Kółko myszy w dół] lub [N]
• Select item in hotbar directly: [1]-[9]=• Wybierz bezpośrednio przedmiot w pasku: [1]-[9]
The selected item is also your wielded item.=Wybrany przedmiot jest również przedmiotem, który trzymasz.
Minimap=Minimapa
If you have a map item in any of your hotbar slots, you can use the minimap.=Jeśli masz przedmiot mapy w którymś z twoich miejsc na pasku szybkiego dostępu, możesz korzystać z minimapy.
Press [F9] to make a minimap appear on the top right. The minimap helps you to find your way around the world. Press it again to select different minimap modes and zoom levels. The minimap also shows the positions of other players.=Naciśnij [F9] aby minimapa pojawiła się w prawym górnym rogu. Minimapa pomoże ci odnaleźć się w świecie. Naciśnij [F9] ponownie aby wybrać inny tryb minimapy i stopień przybliżenia. Minimapa pokazuje również pozycję innych graczy.
There are 2 minimap modes and 3 zoom levels.=Są 2 tryby minimapy oraz 3 stopnie przybliżenia.
Surface mode (image 1) is a top-down view of the world, roughly resembling the colors of the blocks this world is made of. It only shows the topmost blocks, everything below is hidden, like a satellite photo. Surface mode is useful if you got lost.=Tryb powierzchni (obrazek 1) jest widokiem z lotu ptaka na świat, mniej więcej odzwierciedlającym kolory bloków z których stworzony jest świat. Pokazuje tylko najwyżej położone bloki, wszystko poniżej jest ukryte, podobnie jak zdjęcie satelitarne. Tryb ten jest przydatny gdy się zgubisz.
Radar mode (image 2) is more complicated. It displays the “denseness” of the area around you and changes with your height. Roughly, the more green an area is, the less “dense” it is. Black areas have many blocks. Use the radar to find caverns, hidden areas, walls and more. The rectangular shapes in image 2 clearly expose the position of a dungeon.=Tryb radaru (obrazek 2) jest bardziej skomplikowany. Pokazuje "gęstość" obszaru wokół ciebie i zmienia się z wysokością. Z grubsza, im bardziej zielony jest obszar, ty mniej "gęsty" jest. Czarne obszary mają wiele bloków. Użyj tego trybu by znaleźć jaskinie, ukryte obszary, ściany i więcej. Prostokątne kształty w obrazku 2 wyraźnie ujawniają pozycję lochów.
There are also two different rotation modes. In “square mode”, the rotation of the minimap is fixed. If you press [Shift]+[F9] to switch to “circle mode”, the minimap will instead rotate with your looking direction, so “up” is always your looking direction.=Istnieją również dwa różne tryby rotacji. W "trybie kwadratowym" rotacja minimapy jest ustalona. Jeśli naciśniesz [Shift]+[F9] aby zmienić na "tryb okręgu", minimapy będzie natomiast obracać się wraz z twoim kierunkiem patrzenia.
In some games, the minimap may be disabled.=W niektórych grach minimapa może być wyłączona.
• Toggle minimap mode: [F9]=• Przełącz tryb minimapy: [F9]
• Toggle minimap rotation mode: [Shift]+[F9]=• Przełącz tryb rotacji minimapy: [Shift]+[F9]
Inventory=Ekwipunek
Inventories are used to store item stacks. There are other uses, such as crafting. An inventory consists of a rectangular grid of item slots. Each item slot can either be empty or hold one item stack. Item stacks can be moved freely between most slots.=Ekwipunki są wykorzystywane do przechowywania grup przedmiotów. Mogą być również wykorzystywane w innych celach, np. wytwarzanie. Ekwipunek składa się z prostokątnej siatki miejsc na przedmioty. Każde miejsce na przedmioty może być puste lub zapełnione jedną grupą przedmiotów. Grupy przedmiotów można dowolnie przenosić pomiędzy miejscami.
You have your own inventory which is called your “player inventory”, you can open it with the inventory key (default: [I]). The first inventory slots are also used as slots in your hotbar.=Posiadasz swój własny ekwipunek nazywany "ekwipunkiem gracza", możesz go otworzyć klikając przycisk inwentarza (domyślnie: [I]). Pierwsze miejsca ekwipunku są również wykorzystywane jako miejsca na pasku szybkiego dostępu.
Blocks can also have their own inventory, e.g. chests and furnaces.=Bloki mogą mieć swój własny ekwipunek, np. skrzynie lub piece.
Inventory controls:=Sterowanie w ekwipunku
Taking: You can take items from an occupied slot if the cursor holds nothing.=Zabieranie: Możesz zabierać przedmioty z zajętego miejsca jeśli na kursorze niczego nie ma.
• Left click: take entire item stack=• Lewy przycisk: weź całą grupę przedmiotów
• Right click: take half from the item stack (rounded up)=• Prawy przycisk: weź połowę przedmiotów z grupy (zaokrąglone w górę)
• Middle click: take 10 items from the item stack=• Środkowy przycisk: weź 10 przedmiotów z grupy
• Mouse wheel down: take 1 item from the item stack=• Kółko myszy w dół: Weź 1 przedmiot z grupy
Putting: You can put items onto a slot if the cursor holds 1 or more items and the slot is either empty or contains an item stack of the same item type.=Wstawianie: Możesz wstawić przedmioty w miejsce jeśli na kursorze jest przynajmniej 1 przedmiot, a wskazane miejsce jest puste lub zawiera grupę przedmiotów tego samego typu.
• Left click: put entire item stack=• Lewy przycisk: Wstaw całą grupę przedmiotów
• Right click: put 1 item of the item stack=• Prawy przycisk: Wstaw 1 przedmiot z grupy
• Right click or mouse wheel up: put 1 item of the item stack=• Prawy przycisk lub kółko myszy w górę: Wstaw 1 przedmiot z grupy
• Middle click: put 10 items of the item stack=• Środkowy przycisk: wstaw 10 przedmiotów z grupy
Exchanging: You can exchange items if the cursor holds 1 or more items and the destination slot is occupied by a different item type.=Wymienianie: Możesz wymieniać przedmioty jeśli na kursorze jest przynajmniej jeden przedmiot, a we wskazanym miejscu znajduje się grupa innych przedmiotów.
• Click: exchange item stacks=• Kliknij: wymień grupy przedmiotów
Throwing away: If you hold an item stack and click with it somewhere outside the menu, the item stack gets thrown away into the environment.=Wyrzucanie: Jeśli trzymasz grupę przedmiotów i klikniesz poza menu ekwipunku, grupa przedmiotów zostanie wyrzucona w świat.
Quick transfer: You can quickly transfer an item stack to/from the player inventory to/from another item's inventory slot like a furnace, chest, or any other item with an inventory slot when that item's inventory is accessed. The target inventory is generally the most relevant inventory in this context.=Szybki transfer: Możesz szybko przemieszczać grupę przedmiotów z/do ekwipunku gracza do/z ekwipunku innego przedmiotu, takich jak piec, skrzynia czy innego z ekwipunkiem, gdy jego ekwipunek jest otworzony. Docelowy ekwipunek jest najczęściej najbardziej istotnym ekwipunkiem w takim kontekście.
• Sneak+Left click: Automatically transfer item stack=• Skradanie+Lewy przycisk: Automatycznie przenieś grupę przedmiotów
Online help=Pomoc online
You may want to check out these online resources related to MineClone 2.=Możesz chcieć zobaczyć na te zasoby online powiązane z MineClone 2.
MineClone 2 download and forum discussion: <https://forum.minetest.net/viewtopic.php?f@=50&t@=16407>=MineClone 2 pobieranie oraz dyskusja na forum: <https://forum.minetest.net/viewtopic.php?f@=50&t@=16407>
Here you find the most recent version of MineClone 2 and can discuss it.=Tutaj możesz znaleźć najnowszą wersję MineClone 2 i porozmawiać o niej
Bug tracker: <https://github.com/Wuzzy2/MineClone2-Bugs>=Śledzenie błędów: <https://github.com/Wuzzy2/MineClone2-Bugs>
Report bugs here.=Zgłaszaj tu zauważone błędy.
Minetest links:=Linki dotyczące Minetest:
You may want to check out these online resources related to Minetest:=Możesz chcieć zobaczyć te zasoby online dotyczące Minetest
Official homepage of Minetest: <https://minetest.net/>=Oficjalna strona Minetest: <https://minetest.net/>
The main place to find the most recent version of Minetest, the engine used by MineClone 2.=Miejsce gdzie można znaleźć najnowszą wersję Minetesta, silnika wykorzystywanego przez MineClone 2.
The main place to find the most recent version of Minetest.=Miejsce gdzie można znaleźć najnowszą wersję Minetesta.
Community wiki: <https://wiki.minetest.net/>=Wiki społeczności: <https://wiki.minetest.net/>
A community-based documentation website for Minetest. Anyone with an account can edit it! It also features a documentation of Minetest Game.=Utrzymywana przez społeczność dokumentacja na temat Minetest. Każdy z kontem może ją edytować! Znajduje się na niej również dokumentacja Gry Minetest.
Minetest forums: <https://forums.minetest.net/>=Forum Minetest: <https://forums.minetest.net/>
A web-based discussion platform where you can discuss everything related to Minetest. This is also a place where player-made mods and games are published and discussed. The discussions are mainly in English, but there is also space for discussion in other languages.=Platforma dyskusyjna, gdzie możesz porozmawiać na wszystkie tematy związane z Minetestem. Jest to również miejsce gdzie stworzone przez graczy mody i gry są publikowane i omawiane. Rozmowy są prowadzone głównie po angielsku ale jest również miejsce na rozmowy w innych językach.
Chat: <irc://irc.freenode.net#minetest>=Czat: <irc://irc.freenode.net#minetest>
A generic Internet Relay Chat channel for everything related to Minetest where people can meet to discuss in real-time. If you do not understand IRC, see the Community Wiki for help.=Ogólne kanał IRC na dowolny temat związany z Minetest, gdzie ludzie mogą się spotkać i rozmawiać w czasie rzeczywistym. Jeśli nie rozumiesz IRC, zobacz na Wiki społeczności by znaleźć pomoc.
Groups=Grupy
Items, players and objects (animate and inanimate) can be members of any number of groups. Groups serve multiple purposes:=Przedmioty, gracze i obiekty (ruchome i nieruchome) mogą przynależeć do dowolnej liczby grup. Grupy pełnią kilka funkcji:
• Crafting recipes: Slots in a crafting recipe may not require a specific item, but instead an item which is a member of a particular group, or multiple groups=• Receptury wytwarzania: Miejsca w recepturze mogą nie wymagać konkretnego przedmiotu, lecz przedmiotu, który przynależy do konkretnej grupy, lub kilku grup
• Digging times: Diggable blocks belong to groups which are used to determine digging times. Mining tools are capable of digging blocks belonging to certain groups=• Czas kopania: Bloki które można wykopać należą do grupy, które definiują czas ich kopania. Narzędzia do kopania są w stanie kopać przedmioty należące do pewnych grup
• Block behavior: Blocks may show a special behaviour and interact with other blocks when they belong to a particular group=• Zachowanie bloku: Bloki mogą wykazywać się pewnym zachowaniem i wchodzić w interakcję z innymi blokami gdy należą do pewnych grup
• Damage and armor: Objects and players have armor groups, weapons have damage groups. These groups determine damage. See also: “Basics > Weapons”=• Obrażenia i zbroja: Obiekty i gracze mają grupy zbroi, bronie mają grupy obrażeń. Te grupy definiują obrażenia. Zobacz również: "Podstawy > Bronie"
• Other uses=• Inne użycia
In the item help, many important groups are usually mentioned and explained.=We wpisach o przedmiotach wiele istotnych grup jest zwykle wymienionych i opisanych.
Glossary=Słowniczek
This is a list of commonly used terms:=Jest to lita często używanych terminów:
Controls:=Sterowanie:
• Wielding: Holding an item in hand=• Trzymanie: Posiadanie przedmiotu w ręce
• Pointing: Looking with the crosshair at something in range=• Wskazywanie: Patrzenie na coś w zasięgu celownikiem
• Dropping: Throwing an item or item stack to the ground=• Upuszczanie: Wyrzucenie przedmiotu lub grupy przedmiotów na ziemię
• Punching: Attacking with left-click, is also used on blocks=• Uderzanie: Atakowanie lewym przyciskiem myszy, używane również na blokach
• Sneaking: Walking slowly while (usually) avoiding to fall over edges=• Skradanie: Powolne chodzenie i (zwykle) unikanie spadania z bloków
• Climbing: Moving up or down a climbable block=• Wspinanie: Wchodzenie w górę lub schodzenie w dół po wspinaczkowych blokach
Blocks:=Bloki:
• Block: Cubes that the worlds are made of=• Blok: Kostki z którego stworzony jest świat
• Mining/digging: Using a mining tool to break a block=• Kopanie/Wydobywanie: Używanie przedmiotów do kopania do niszczenia bloków
• Building/placing: Putting a block somewhere=• Budowanie/Umieszczanie: Wstawianie gdzieś bloku
• Drop: Items you get after mining a block=• Zrzut: Przedmioty uzyskane po wykopaniu bloku
• Using a block: Right-clicking a block to access its special function=• Używanie bloku: Kliknięcie prawym przyciskiem na blok aby uruchomić jego specjalną funkcję
Items:=Przedmioty:
• Item: A single thing that players can possess=• Przedmiot: Pojedyncza rzecz, którą gracz może posiadać
• Item stack: A collection of items of the same kind=• Grupa przedmiotów: Zbiór przedmiotów tego samego typu
• Maximum stack size: Maximum amount of items in an item stack=• Maksymalny rozmiar grupy: Maksymalna liczba przedmiotów w grupie przedmiotów
• Slot / inventory slot: Can hold one item stack=• Miejsce / miejsce w ekwipunku: Może przechowywać jedną grupę przedmiotów
• Inventory: Provides several inventory slots for storage=• Ekwipunek: Dostarcza kilka miejsc w ekwipunku do przechowywania
• Player inventory: The main inventory of a player=• Ekwipunek gracza: Główny ekwipunek gracza
• Tool: An item which you can use to do special things with when wielding=• Narzędzie: Przedmiot, który można wykorzystać w specjalny sposób podczas trzymania
• Range: How far away things can be to be pointed by an item=• Zasięg: Jak dalekie rzeczy mogą być wskazane przedmiotem
• Mining tool: A tool which allows to break blocks=• Narzędzie do kopania: Narzędzie pozwalające niszczyć bloki
• Craftitem: An item which is (primarily or only) used for crafting=• Przedmiot do wytwarzania: Przedmiot który jest (głównie lub tylko) wykorzystywany do wytwarzania.
Gameplay:=Rozgrywka
• “heart”: A single health symbol, indicates 2 HP=• "serce": Pojedynczy symbol zdrowia, reprezentujący 2 HP
• “bubble”: A single breath symbol, indicates 1 BP=• "bąbel": Pojedynczy symbol oddechu, reprezentujący 1 BP
• HP: Hit point (equals half 1 “heart”)=• HP: Punkt zdrowia (równy połowie serca)
• BP: Breath point, indicates breath when diving=• BP: Punkt oddechu reprezentujący ilość powietrza podczas nurkowania
• Mob: Computer-controlled enemy=• Mob: Przeciwnik sterowany przez komputer
• Crafting: Combining multiple items to create new ones=• Wytwarzanie: Łączenie kilku przedmiotów w celu uzyskania innych
• Crafting guide: A helper which shows available crafting recipes=• Przewodnik wytwarzania: Pomocniczy spis dostępnych receptur wytwarzania
• Spawning: Appearing in the world=• Spawnowanie: Pojawienie się w świecie
• Respawning: Appearing again in the world after death=• Odradzanie: Ponownie pojawienie się w świecie po śmierci
• Group: Puts similar things together, often affects gameplay=• Grupa: Łączy podobne rzeczy razem, często wpływa na rozgrywkę
• noclip: Allows to fly through walls=• noclip: Pozwala przelatywać przez ściany
Interface=Interfejs:
• Hotbar: Inventory slots at the bottom=• Pasek szybkiego dostępu: Miejsca ekwipunku na dole ekranu
• Statbar: Indicator made out of half-symbols, used for health and breath=• Pasek statusu: Wskaźniki składające się z symboli używane dla oznaczania życia oraz oddechu
• Minimap: The map or radar at the top right=• Minimapa: Mapa lub radar w prawym górnym rogu ekranu
• Crosshair: Seen in the middle, used to point at things=• Celownik: Widoczny na środku ekranu, używany do wskazywania na rzeczy
Online multiplayer:=Gra wieloosobowa w internecie:
• PvP: Player vs Player. If active, players can deal damage to each other=• PvP: Gracz kontra Gracz. Jeśli ten tryb jest aktywny, gracze mogą zadawać sobie obrażenia
• Griefing: Destroying the buildings of other players against their will=• Griefowanie: Celowe niszczenie budynków innych graczy wbrew ich woli
• Protection: Mechanism to own areas of the world, which only allows the owners to modify blocks inside=• Ochrona: Mechanizm pozwalający wejść w posiadanie pewnych części świata, co pozwala tylko właścicielom modyfikować bloki wewnątrz
Technical terms:=Techniczne terminy:
• Minetest: This game engine=• Minetest: Ten silnik gier
• MineClone 2: What you play right now=• MineClone 2: To w co teraz grasz
• Minetest Game: A game for Minetest by the Minetest developers=• Gra Minetest: Gra w Minetest napisana przez jego twórców
• Game: A complete playing experience to be used in Minetest; such as a game or sandbox or similar=• Gra: Kompletny doświadczenie do wykorzystania w Minetest; takie jak gry, piaskownice i podobne
• Mod: A single subsystem which adds or modifies functionality; is the basic building block of games and can be used to further enhance or modify them=• Mod: Pojedynczy system, który dodaje, lub modyfikuje funkcjonalność; jest podstawowym blokiem budowalnym gier i może być wykorzystywany do dalszego urozmaicania i modyfikowania ich
• Privilege: Allows a player to do something=• Przywilej: Pozwala graczowi coś zrobić
• Node: Other word for “block”=• Węzeł: Inna nazwa na "blok"
Settings=Ustawienia
There is a large variety of settings to configure Minetest. Pretty much every aspect can be changed that way.=Jest wiele różnych ustawień pozwalających zmodyfikować działanie Minetesta. Niemal każdy aspekt może być w ten sposób zmieniony.
These are a few of the most important gameplay settings:=Oto kilka najważniejszych ustawień dotyczących rozgrywki:
• Damage enabled (enable_damage): Enables the health and breath attributes for all players. If disabled, players are immortal=• Włączone obrażenia (enable_damage): Włącza paski zdrowia i oddechu. Jeśli wyłączone, gracze są nieśmiertelni
• Creative Mode (creative_mode): Enables sandbox-style gameplay focusing on creativity rather than a challenging gameplay. The meaning depends on the game; usual changes are: Reduced dig times, easy access to almost all items, tools never wear off, etc.=• Tryb kreatywny (creative_mode): Włącza rozgrywkę w stylu piaskownicy, skupiająca się na kreatywności a nie wyzwaniach. Dokładne znaczenie zależy od gry; najczęstsze zmiany to: Zmniejszony czas kopania, łatwy dostęp do niemal wszystkich przedmiotów, narzędzie się nie wykorzystują itp.
• PvP (enable_pvp): Short for “Player vs Player”. If enabled, players can deal damage to each other=• PvP (enable_pvp): Skrót od "Player vs Player" (gracz kontra gracz). Jeśli włączone, gracze mogą zadawać sobie obrażenia
For a full list of all available settings, use the “All Settings” dialog in the main menu.=Aby zobaczyć pełną listę dostępnych ustawień, użyj przycisku "Wszystkie ustawienia" w menu głównym.
Movement modes=Tryby poruszania
You can enable some special movement modes that change how you move.=Możesz uruchomić specjalne tryby poruszania, które zmieniają sposób w jaki się przemieszczasz.
Pitch movement mode:=Alternatywny tryb poruszania bez-ważkiego:
• Description: If this mode is activated, the movement keys will move you relative to your current view pitch (vertical look angle) when you're in a liquid or in fly mode.=• Opis: Jeśli ten tryb jest włączony, klawisze ruchu będą poruszać cię prostopadle do kierunku patrzenia, gdy jesteś w płynach lub w trybie latania.
• Default key: [L]=• Domyślny przycisk: [L]
• No privilege required=• Nie potrzeba żadnego przywileju
Fast mode:=Tryb szybki:
• Description: Allows you to move much faster. Hold down the the “Use” key [E] to move faster. In the client configuration, you can further customize fast mode.=• Opis: Pozwala poruszać się znacznie szybciej. Przytrzymaj swój przycisk "Używania" [E] aby poruszać się szybciej. W konfiguracji klienta możesz dokładniej skonfigurować tryb szybki.
• Default key: [J]=• Domyślny przycisk: [J]
• Required privilege: fast=• Potrzebny przywilej: fast
Fly mode:=Tryb latania:
• Description: Gravity doesn't affect you and you can move freely in all directions. Use the jump key to rise and the sneak key to sink.=• Opis: Grawitacja przestaje na ciebie wpływać i możesz swobodnie poruszać się w dowolnym kierunku. Użyj przycisku skoku aby się wznosić, a przycisku skradania aby opadać.
• Default key: [K]=• Domyślny przycisk: [K]
• Required privilege: fly=• Potrzebny przywilej: fly
Noclip mode:=Tryb noclip:
• Description: Allows you to move through walls. Only works when fly mode is enabled, too.=• Opis: Pozwala przechodzić przez ściany. Działa tylko gdy uruchomiony jest tryb latania.
• Default key: [H]=• Domyślny przycisk: [H]
• Required privilege: noclip=• Potrzebny przywilej: noclip
Console=Konsola
With [F10] you can open and close the console. The main use of the console is to show the chat log and enter chat messages or server commands.=Naciskając [F10] możesz otworzyć i zamknąć konsolę. Głównym zastosowaniem konsoli jest wyświetlenie czatu oraz wysyłanie wiadomości lub wpisywanie komend serwera.
Using the chat or server command key also opens the console, but it is smaller and will be closed after you sent a message.=Korzystanie z przycisku czatu lub komand serwera również otwiera konsolę, będzie ona jednak mniejsza i zostanie zamknięta po wysłaniu wiadomości.
Use the chat to communicate with other players. This requires you to have the “shout” privilege.=Użyj czatu by komunikować się z innymi graczami. Wymaga to przywileju "shout".
Just type in the message and hit [Enter]. Public chat messages can not begin with “/”.=Aby to zrobić wpisz wiadomość i naciśnij [Enter]. Publiczne wiadomości nie mogą rozpoczynać się od znaku "/".
You can send private messages: Say “/msg <player> <message>” in chat to send “<message>” which can only be seen by <player>.=Możesz wysyłać prywatne wiadomości: Napisz "/msg <gracz> <wiadomość>" w czacie aby wysłać "<wiadomość>" widoczną tylko przez <gracza>.
There are some special controls for the console:=W konsoli obowiązuje kilka specjalnych metod sterowania:
• [F10] Open/close console=• [F10] Otwórz/zamknij konsolę
• [Enter]: Send message or command=• [Enter]: Wyślij wiadomość lub komendę
• [Tab]: Try to auto-complete a partially-entered player name=• [Tab]: Spróbuj dokończyć częściowo wprowadzone imię gracza
• [Ctrl]+[Left]: Move cursor to the beginning of the previous word=• [Ctrl]+[Lewo]: Przenieś kursor na początek poprzedniego słowa
• [Ctrl]+[Right]: Move cursor to the beginning of the next word=• [Ctrl]+[Prawo]: Przenieś kursor na początek następnego słowa
• [Ctrl]+[Backspace]: Delete previous word=• [Ctrl]+[Backspace]: Usuń poprzednie słowo
• [Ctrl]+[Delete]: Delete next word=• [Ctrl]+[Delete]: Usuń następne słowo
• [Ctrl]+[U]: Delete all text before the cursor=• [Ctrl]+[U]: Usuń cały tekst przed kursorem
• [Ctrl]+[K]: Delete all text after the cursor=• [Ctrl]+[K]: Usuń cały tekst po kursorze
• [Page up]: Scroll up=• [Page up]: Przewiń do góry
• [Page down]: Scroll down=• [Page down]: Przewiń w dół
There is also an input history. Minetest saves your previous console inputs which you can quickly access later:=Istnieje również historia wprowadzania. Minetest zapisuje wprowadzone komendy, do szybkiego dostępu później:
• [Up]: Go to previous entry in history=• [Góra]: Idź do poprzedniej komendy w historii
• [Down]: Go to next entry in history=• [Dół]: Idź do następnej komendy w historii
Server commands=Komendy serwera
Server commands (also called “chat commands”) are little helpers for advanced users. You don't need to use these commands when playing. But they might come in handy to perform some more technical tasks. Server commands work both in multi-player and single-player mode.=Komendy serwera (zwane również "komendy czatu") są drobnymi pomocnymi komendami dla zaawansowanych użytkowników. Nie musisz korzystać z tych komend podczas grania, ale mogą okazać się przydatne przy wykonywaniu technicznych zadań. Działają one zarówno w grze wieloosobowej i jednoosobowej.
Server commands can be entered by players using the chat to perform a special server action. There are a few commands which can be issued by everyone, but some commands only work if you have certain privileges granted on the server. There is a small set of basic commands which are always available, other commands can be added by mods.=Komendy serwera mogą być wprowadzane przy użyciu czatu, aby wykonać akcje na serwerze. Niektóre komendy mogą być wywołane przez każdego, ale niektóre działają tylko jeśli masz przyznane przywileje na serwerze. Mały zbiór podstawowych komend dostępny jest zawsze, inne komendy mogą być dodane przez mody.
To issue a command, simply type it like a chat message or press Minetest's command key (default: [/]). All commands have to begin with “/”, for example “/mods”. The Minetest command key does the same as the chat key, except that the slash is already entered.=Aby wywołać komendę, po prostu wpisze ją jako wiadomość czatu lub kliknij przycisk komend Minetesta (domyślnie: [/]). Wszystkie komendy muszą zaczynać się od "/', np. "/mods". Przycisk komend Minetesta robi dokładnie to samo co przycisk czatu, ale "/" jest od razu wpisany.
Commands may or may not give a response in the chat log, but errors will generally be shown in the chat. Try it for yourselves: Close this window and type in the “/mods” command. This will give you the list of available mods on this server.=Komendy mogą, ale nie muszą wypisać odpowiedź w czacie, ale błędy będą zwykle pokazane w czacie. Sama spróbuj: Zamknij to okno i wpisz komendę "/mods". Ta komenda wypiszę listę dostępnych modów na tym serwerze.
“/help all” is a very important command: You get a list of all available commands on the server, a short explanation and the allowed parameters. This command is also important because the available commands often differ per server.="/help all" jest bardzo ważną komendą: Zostanie ci pokazana lista wszystkich dostępnych komend na serwerze, krótkie wyjaśnienie oraz dozwolone parametry. Ta komenda jest również ważna, ponieważ dostępne komendy będą inne w zależności od serwera.
Commands are followed by zero or more parameters.=Po komendach mogą wystąpić parametry.
In the command reference, you see some placeholders which you need to replace with an actual value. Here's an explanation:=W opisie komend możesz zobaczyć tekst zastępczy, który musisz zamienić na faktyczną wartość. Oto krótkie wyjaśnienie:
• Text in greater-than and lower-than signs (e.g. “<param>”): Placeholder for a parameter=• Teks pomiędzy symbolami większe niż oraz mniejsze niż (np. "<parametr>"): Tekst zastępczy dla parametru
• Anything in square brackets (e.g. “[text]”) is optional and can be omitted=• Cokolwiek w nawiasach kwadratowych (np. "[tekst]") jest opcjonalne i może być pominięte
• Pipe or slash (e.g. “text1 | text2 | text3”): Alternation. One of multiple texts must be used (e.g. “text2”)=• Pionowa kreska lub slesz (np. "tekst1 | tekst2 | tekst3"): Alternatywa. Jeden z wymienionych tekstów musi być użyty (np. "tekst2")
• Parenthesis: (e.g. “(word1 word2) | word3”): Groups multiple words together, used for alternations=• Nawiasy (np. "((słowo1 słowo2) | słowo3)"): Grupuje wiele słów razem, używane przy alternatywach
• Everything else is to be read as literal text=• Wszystko inne powinno być czytane jako dosłowny tekst
Here are some examples to illustrate the command syntax:=Oto kilka przykładów ilustrujących składnię komend:
• /mods: No parameters. Just enter “/mods”=• /mods: Brak parametrów. Po prostu wpisz "/mods"
• /me <action>: 1 parameter. You have to enter “/me ” followed by any text, e.g. “/me orders pizza”=• /ja <akcja>: 1 parametr. Musisz wpisać "/ja ", a następnie dowolny tekst, np. "/ja zamawiam pizzę"
• /give <name> <ItemString>: Two parameters. Example: “/give Player default:apple”=• /give <imię> <nazwa przedmiotu>: Dwa parametry. Przykładowo: "/give gracz default:apple"
• /help [all|privs|<cmd>]: Valid inputs are “/help”, “/help all”, “/help privs”, or “/help ” followed by a command name, like “/help time”=• /help [all|privs|<komenda>]: Poprawne użycia tej komendy to "/help", "/help all", "/help privs" lub "/help ", po którym następują nazwa komendy, np. "/help mods"
• /spawnentity <EntityName> [<X>,<Y>,<Z>]: Valid inputs include “/spawnentity boats:boat” and “/spawnentity boats:boat 0,0,0”=• /spawnentity <nazwa obiektu> [<X>,<Y>,<Z>]: Poprawne użycia tej komendy to np. "/spawnentity boats:boat" oraz "/spawnentity boats:boat 0,0,0"
Some final remarks:=Kilka uwag na koniec:
• For /give and /giveme, you need an itemstring. This is an internally used unique item identifier which you may find in the item help if you have the “give” or “debug” privilege=• Aby użyć komend /give oraz /giveme, potrzebujesz nazwy przedmiotu. Jest to używany wewnętrznie unikalny identyfikator, który możesz znaleźć w pomocy jeśli masz przywileje "give" lub "debug"
• For /spawnentity you need an entity name, which is another identifier=• Aby użyć /spawnentity musisz znać nazwę obiektu, która podobnie jest identyfikatorem
Privileges=Przywileje
Each player has a set of privileges, which differs from server to server. Your privileges determine what you can and can't do. Privileges can be granted and revoked from other players by any player who has the privilege called “privs”.=Każdy gracz ma zbiór przywilejów, które są różne w zależności od serwera. Twoje przywileje definiują co możesz, a czego nie możesz robić. Przywileje mogą być nadane i odebrane przez dowolnego gracza, który ma przywilej "privs".
On a multiplayer server with the default configuration, new players start with the privileges called “interact” and “shout”. The “interact” privilege is required for the most basic gameplay actions such as building, mining, using, etc. The “shout” privilege allows to chat.=Na serwerze z domyślną konfiguracją nowi gracze zaczynają z przywilejami "interact" oraz "shout". Przywilej "interact" pozwala na podstawowe akcje gry takie jak budowanie, kopanie, używanie itp. Przywilej "shout" pozwala na używanie czatu.
There is a small set of core privileges which you'll find on every server, other privileges might be added by mods.=Mały zbiór bazowych przywilejów znajdziesz na każdym serwerze, inne przywileje mogą zostać dodane przez mody.
To view your own privileges, issue the server command “/privs”.=Aby zobaczyć swoje przywileje, użyj komendy serwera "/privs".
Here are a few basic privilege-related commands:=Oto kilka podstawowych komend związanych z przywilejami:
• /privs: Lists your privileges=• /privs: Pokazuje twoje przywileje
• /privs <player>: Lists the privileges of <player>=• /privs <gracz>: Pokazuje przywileje <gracza>
• /help privs: Shows a list and description about all privileges=• /help privs: Pokazuje listę i opis wszystkich przywilejów
Players with the “privs” privilege can modify privileges at will:=Gracze z przywilejem "privs" mogą zmieniać przywileje jak chcą:
• /grant <player> <privilege>: Grant <privilege> to <player>=• /grant <gracz> <przywilej>: Nadal <przywilej> <graczowi>
• /revoke <player> <privilege>: Revoke <privilege> from <player>=• /revoke <gracz> <przywilej>: Odbierz <przywilej> <graczowi>
In single-player mode, you can use “/grantme all” to unlock all abilities.=W trybie jednoosobowym możesz użyć "/grantme all" aby odblokować wszystkie umiejętności.
Light=Światło
As the world is entirely block-based, so is the light in the world. Each block has its own brightness. The brightness of a block is expressed in a “light level” which ranges from 0 (total darkness) to 15 (as bright as the sun).=Jako, że świat jest całkowicie oparty na blokach, jest tak również w przypadku światła. Każdy blok ma swoją własną jasność. Jasność bloku jest wyrażona w "poziomie oświetlenia", który przyjmuje wartości od 0 (zupełnie ciemny) do 15 (jasny jak słońce).
There are two types of light: Sunlight and artificial light.=Są dwa typy światła: słoneczne oraz sztuczne.
Artificial light is emitted by luminous blocks. Artificial light has a light level from 1-14.=Światło sztuczne jest emitowane przez oświetlające bloki. Sztuczne światło ma poziom oświetlenia od 1 do 14.
Sunlight is the brightest light and always goes perfectly straight down from the sky at each time of the day. At night, the sunlight will become moonlight instead, which still provides a small amount of light. The light level of sunlight is 15.=Światło słoneczne jest najjaśniejszym światłem i zawsze świeci bezpośrednio w dół w trakcie dnia. W nocy światło to zamieni się w księżycowe, które wciąż daje niewielką ilość światła. Poziom oświetlenia słonecznego jest równy 15.
Blocks have 3 levels of transparency:=Bloki mają 3 poziomy przeźroczystości:
• Transparent: Sunlight goes through limitless, artificial light goes through with losses=• Przeźroczysty: Światło słoneczne przenika bez strat, sztuczne przenika ze spadkiem
• Semi-transparent: Sunlight and artificial light go through with losses=• Półprzeźroczysty: Światło słoneczne i sztuczne przenika ze stratą jasności
• Opaque: No light passes through=• Nieprzeźroczysty: Światło nie przenika
Artificial light will lose one level of brightness for each transparent or semi-transparent block it passes through, until only darkness remains (image 1).=Światło sztuczne będzie traciło jeden poziom jasności z każdym przeźroczystym lub nieprzeźroczystym blokiem przez który przenika, dopóki nie pozostanie tylko ciemność (obrazek 1).
Sunlight will preserve its brightness as long it only passes fully transparent blocks. When it passes through a semi-transparent block, it turns to artificial light. Image 2 shows the difference.=Światło słoneczne zachowuje swoją jasność tak długo jak przenika tylko przez w pełni przeźroczyste bloki. Gdy przenika przez półprzeźroczyste bloki, zamienia się w światło sztuczne. Obrazek 2 pokazuje różnicy.
Note that “transparency” here only means that the block is able to carry brightness from its neighboring blocks. It is possible for a block to be transparent to light but you can't see trough the other side.=Zwróć uwagę, że "przeźroczystość" odnosi się tutaj tylko do możliwości przenoszenia poziomu oświetlenia z sąsiednich bloków. Jest możliwe by blok był przeźroczysty dla światła, ale nie będziesz w stanie przez niego zobaczyć.
Coordinates=Współrzędne
The world is a large cube. And because of this, a position in the world can be easily expressed with Cartesian coordinates. That is, for each position in the world, there are 3 values X, Y and Z.=Świat jest wielką kostką. I z tego powodu pozycja w świecie może być łatwo wyrażona we współrzędnych kartezjańskich. To oznacza, że dla każdej pozycji na świecie są 3 wartości X, Y oraz Z.
Like this: (5, 45, -12)=Na przykład: (5, 45, -12)
This refers to the position where X@=5, Y@=45 and Z@=-12. The 3 letters are called “axes”: Y is for the height. X and Z are for the horizontal position.=To opisuje pozycje w której X@=5, Y@=45 i Z@=-12. Te 3 litery nazywamy "osiami": Y jest wysokością, X i Z są dla pozycji poziomej.
The values for X, Y and Z work like this:=Wartości dla X, Y i Z działają następująco:
• If you go up, Y increases=• Jeśli pójdziesz w górę, Y się zwiększy
• If you go down, Y decreases=• Jeśli pójdziesz w dół, Y się zmniejszy
• If you follow the sun, X increases=• Jeśli podążysz za słońcem, X się zwiększy
• If you go to the reverse direction, X decreases=• Jeśli pójdziesz w przeciwnym kierunku, X się zmniejszy
• Follow the sun, then go right: Z increases=• Podążaj za słońcem następnie, w prawo: Z się zwiększy
• Follow the sun, then go left: Z decreases=• Podążaj za słońcem następnie, w lewo: Z się zmniejszy
• The side length of a full cube is 1=• Długość boku jednego sześcianu wynosi 1
You can view your current position in the debug screen (open with [F5]).=Możesz zobaczyć swoją aktualną pozycję na ekranie debug (otwórz go naciskając [F5]).
# MCL2 extensions
Creative Mode=Tryb kreatywny
Enabling Creative Mode in MineClone 2 applies the following changes:=Włączenie trybu kreatywnego w MineClone 2 aplikuje następujące zmiany:
• You keep the things you've placed=• Nie tracisz postawionych rzeczy
• Creative inventory is available to obtain most items easily=• Kreatywny ekwipunek jest dostępny, który pozwala łatwo zdobywać przedmioty
• Hand breaks all default blocks instantly=• Ręka niszczy wszystkie domyślne bloki natychmiastowo
• Greatly increased hand pointing range=• Znacząco zwiększony zasięg reki
• Mined blocks don't drop items=• Wykopane bloki nie wyrzucają zrzutu
• Items don't get used up=• Przedmioty nie zużywają się
• Tools don't wear off=• Narzędzie nie niszczą się
• You can eat food whenever you want=• Możesz jeść jedzenie kiedy tylko chcesz
• You can always use the minimap (including radar mode)=• Zawsze możesz korzystać z minimapy (włączając w to tryb radaru)
Damage is not affected by Creative Mode, it needs to be disabled separately.=Tryb kreatywny nie ma wpływu na obrażenia, muszą być wyłączone osobno.
Mobs=Moby
Mobs are the living beings in the world. This includes animals and monsters.=Moby są żyjącymi stworzeniami w świecie. To między innymi zwierzęta i potwory.
Mobs appear randomly throughout the world. This is called “spawning”. Each mob kind appears on particular block types at a given light level. The height also plays a role. Peaceful mobs tend to spawn at daylight while hostile ones prefer darkness. Most mobs can spawn on any solid block but some mobs only spawn on particular blocks (like grass blocks).=Moby pojawiają się losowo w świecie. Nazywamy to "spawnowaniem". Każdy mob pojawia się na pewnym typie bloku przy pewnym poziomie oświetlenia. Wysokość również ma znaczenie. Spokojne moby najczęściej spawnują się w świetle, podczas gdy wrogie preferują ciemność. Większość mobów spawnuje się na dowolnym stałym bloku, ale niektóre moby spawnują się tylko na konkretnych blokach (np. blokach trawy).
Like players, mobs have hit points and sometimes armor points, too (which means you need better weapons to deal any damage at all). Also like players, hostile mobs can attack directly or at a distance. Mobs may drop random items after they die.=Podobnie jak gracze, moby mają punkty życia, a czasami również zbroi (co oznacza, że będziesz potrzebował lepszych broni by zadać im obrażenia). Również podobnie jak gracze wrogie moby mogą atakować bezpośrednio lub z dystansu. Moby mogą wyrzucać losowe przedmioty przy śmierci.
Most animals roam the world aimlessly while most hostile mobs hunt players. Animals can be fed, tamed and bred.=Większość zwierząt przemieszcza się po świecie bez celu, a większość wrogich mobów poluje na gracza. Zwierzęta mogą być karmione, oswajane i rozmnażane.
Animals=Zwierzęta
Animals are peaceful beings which roam the world aimlessly. You can feed, tame and breed them.=Zwierzęta są spokojnymi mobami, które przemierzają świat bez celu. Mogą być karmione, oswajane i rozmnażane.
Feeding:=Karmienie:
Each animal has its own taste for food and doesn't just accept any food. To feed, hold an item in your hand and rightclick the animal.=Każde zwierzę ma swój własny gust w jedzeniu i nie przyjmuje byle czego. Aby nakarmić, weź przedmiot do swojej ręki i kliknij prawym przyciskiem na zwierzę.
Animals are attraced to the food they like and follow you as long you hold the food item in hand.=Zwierzęta są przyciągane do jedzenia które lubią i będą za tobą podążać tak długo jak będziesz je trzymała w dłoni.
Feeding an animal has three uses: Taming, healing and breeding.=Karmienie zwierząt a trzy zastosowania: Oswajanie, uzdrawianie i rozmnażanie.
Feeding heals animals instantly, depending on the quality of the food item.=Karmienie natychmiast uzdrawia zwierzęta w zależności od jakości.
Taming:=Oswajanie
A few animals can be tamed. You can generally do more things with tamed animals and use other items on them. For example, tame horses can be saddled and tame wolves fight on your side.=Niektóre zwierzęta mogą być oswojony. Z oswojonymi zwierzętami możesz zwykle robić więcej rzeczy i używać na nich dodatkowych przedmiotów. Przykładowo oswojone konie mogą być osiodłane, a oswojone wilki walczą po twojej stronie.
Breeding:=Rozmnażanie
When you have fed an animal up to its maximum health, then feed it again, you will activate “Love Mode” and many hearts appear around the animal.=Gdy nakarmisz zwierzę do pełnego zdrowia, a następnie nakarmisz je jeszcze raz, aktywujesz "tryb miłości" i wiele serc pojawi się wokół zwierzęcia.
Two animals of the same species will start to breed if they are in Love Mode and close to each other. Soon a baby animal will pop up.=Dwa zwierzęta tego samego gatunku będą się rozmnażać jeśli są blisko siebie i w trybie miłości. Wkrótce potem pojawi się dziecko zwierzątko.
Baby animals:=Dzieci zwierzątka
Baby animals are just like their adult couterparts, but they can't be tamed or bred and don't drop anything when they die. They grow to adults after a short time. When fed, they grow to adults faster.=Dzieci zwierzątka są takie jak ich dorosłe odpowiedniki, jednak nie mogą być oswojone i rozmnażane oraz nie wyrzucają niczego gdy umierają. Po pewnym czasie wyrastają w dorosłe zwierze. Gdy są karmione wyrastają szybciej.
Hunger=Głód
Hunger affects your health and your ability to sprint. Hunger is not in effect when damage is disabled.=Głód wpływa na twoje zdrowie i możliwość biegania. Głód jest wyłączony gdy obrażenia są wyłączone.
Core hunger rules:=Główne zasady głodu:
• You start with 20/20 hunger points (more points @= less hungry)=• Zaczynasz z 20/20 punktami głodu (więcej punktów @= mniej głodna)
• Actions like combat, jumping, sprinting, etc. decrease hunger points=• Akcje takie jak walka, skakanie, bieganie itp. zmniejszają liczbę punktów głodu
• Food restores hunger points=• Jedzenie przywraca punkty głodu
• If your hunger bar decreases, you're hungry=• Jeśli twój pasek głodu zmniejsza się, staniesz się głodna
• At 18-20 hunger points, you regenerate 1 HP every 4 seconds=• Przy 18-20 punktach głodu, będziesz regenerował 1 HP co 4 sekundy
• At 6 hunger points or less, you can't sprint=• Przy 6 punktach głodu i mniej, nie możesz biegać
• At 0 hunger points, you lose 1 HP every 4 seconds (down to 1 HP)=• Przy 0 punktach głodu i mniej, tracisz 1 HP co 4 sekundy
• Poisonous food decreases your health=• Trujące jedzenie zmniejsza twoje zdrowie
Details:=Szczegóły:
You have 0-20 hunger points, indicated by 20 drumstick half-icons above the hotbar. You also have an invisible attribute: Saturation.=Masz 0-20 punktów głodu, oznaczanych przez 20 pałek pół-ikon nad paskiem szybkiego dostępu. Posiadasz również niewidzialną własność: Nasycenie.
Hunger points reflect how full you are while saturation points reflect how long it takes until you're hungry again.=Punkty głodu pokazują jak pełna jesteś, podczas gdy punkty nasycenia mówią jak długo zajmie zanim znów będziesz głodna.
Each food item increases both your hunger level as well your saturation.=Każde jedzenie zwiększa zarówno twój poziom głodu jak i nasycenia.
Food with a high saturation boost has the advantage that it will take longer until you get hungry again.=Jedzenie z większym wzrostem nasycenia ma tę przewagę, że sprawi, że dłużej zajmie zanim znów będziesz głodna.
A few food items might induce food poisoning by chance. When you're poisoned, the health and hunger symbols turn sickly green. Food poisoning drains your health by 1 HP per second, down to 1 HP. Food poisoning also drains your saturation. Food poisoning goes away after a while or when you drink milk.=Niektóre jedzenia mogą losowo wywołać zatrucie pokarmowe. Gdy jesteś otruta symbole życia i głodu zmienią kolor na zgniło-zielony. Zatrucie pokarmowe zmniejsza twoje życie o 1 HP na sekundę aż do 1 hp. Zmniejsza ono również twoje nasycenie. Zatrucie pokarmowe przechodzi po chwili lub gdy wypijesz mleko.
You start with 5 saturation points. The maximum saturation is equal to your current hunger level. So with 20 hunger points your maximum saturation is 20. What this means is that food items which restore many saturation points are more effective the more hunger points you have. This is because at low hunger levels, a lot of the saturation boost will be lost due to the low saturation cap.=Zaczynasz z 5 punktami nasycenia. Maksymalne nasycenie jest równe twojemu aktualnemu poziomowi głodu. Więc z 20 punktami głodu, twój maksymalny poziom nasycenia to 20. To oznacza, że jedzenie które zwiększa nasycenie jest bardziej efektywne im więcej punktów głodu masz. Jest tak ponieważ na niskich poziomach głodu spora część zwiększenia nasycenia zostanie stracona przez niski poziom maksymalny.
If your saturation reaches 0, you're hungry and start to lose hunger points. Whenever you see the hunger bar decrease, it is a good time to eat.=Gdy twój poziom nasycenia spadnie do 0 stajesz się głodna i zaczynasz tracić punkty głodu. Gdy widzisz, że twój pasek głodu zmniejsza się, to jest to dobry moment na jedzenie.
Saturation decreases by doing things which exhaust you (highest exhaustion first):=Nasycenie zmniejsza się gdy robisz rzeczy, które cię męczą (w kolejności od najbardziej męczącego):
• Regenerating 1 HP=• Odnowienie 1 HP
• Suffering food poisoning=• Zatrucie pokarmowe
• Sprint-jumping=• Skakanie podczas biegu
• Sprinting=• Bieganie
• Attacking=• Atakowanie
• Taking damage=• Otrzymywanie obrażeń
• Swimming=• Pływanie
• Jumping=• Skakanie
• Mining a block=• Kopanie bloku
Other actions, like walking, do not exaust you.=Inne akcje takie jak chodzenie nie męczą cię.
If you have a map item in any of your hotbar slots, you can use the minimap.=Jeśli masz przedmiot mapy w swoim pasku szybkiego dostępu możesz korzystać z minimapy.

View File

@ -1,4 +1,4 @@
local S = minetest.get_translator("mcl_doc_basics") local S = minetest.get_translator(minetest.get_current_modname())
doc.add_entry("advanced", "creative", { doc.add_entry("advanced", "creative", {
name = S("Creative Mode"), name = S("Creative Mode"),

View File

@ -1,2 +1,4 @@
dofile(minetest.get_modpath("mcl_tt").."/snippets_base.lua") local modpath = minetest.get_modpath(minetest.get_current_modname())
dofile(minetest.get_modpath("mcl_tt").."/snippets_mcl.lua")
dofile(modpath.."/snippets_base.lua")
dofile(modpath.."/snippets_mcl.lua")

View File

@ -0,0 +1,48 @@
# textdomain: mcl_tt
Head armor=Zbroja na głowę
Torso armor=Zbroja na pierś
Legs armor=Zbroja na nogi
Feet armor=Zbroja na stopy
Armor points: @1=Punkty zbroi
Armor durability: @1=Wytrzymałość zbroi: @1
Protection: @1%=Ochrona: @1%
Hunger points: +@1=Punkty głodu: +@1
Saturation points: +@1=Punkty nasycenia: +@1
Deals damage when falling=Zadaje obrażenia gdy spada
Grows on grass blocks or dirt=Rośnie na blokach trawy i ziemi
Grows on grass blocks, podzol, dirt or coarse dirt=Rośnie na blokach trawy, bielicy, ziemi oraz twardej ziemi
Flammable=Łatwopalne
Zombie view range: -50%=Zasięg widzenia zombie: -50%
Skeleton view range: -50%=Zasięg widzenia szkieleta: -50%
Creeper view range: -50%=Zasięg widzenia creepera: -50%
Damage: @1=Obrażenia: @1
Damage (@1): @2=Obrażenia (@1): @2
Healing: @1=Leczenie: @1
Healing (@1): @2=Leczenie (@1): @2
Full punch interval: @1s=Pełny okres uderzenia: @1s
Contact damage: @1 per second=Obrażenia kontaktowe: @1 na sekundę
Contact healing: @1 per second=Leczenie kontaktowe: @1 na sekundę
Drowning damage: @1=Obrażenia od topienia: @1
Bouncy (@1%)=Sprężystość (@1%)
Luminance: @1=Luminancja: @1
Slippery=Śliskość
Climbable=Wspinaczkowe
Climbable (only downwards)=Wspinaczkowe (tylko w dół)
No jumping=Nie można skakać
No swimming upwards=Nie można płynąć pod górę
No rising=Nie wolno wstawać
Fall damage: @1%=Obrażenia od upadku @1%
Fall damage: +@1%=Obrażenia od upadku +@1%
No fall damage=Brak obrażeń od upadku
Mining speed: @1=Szybkość kopania: @1
Very fast=Bardzo szybkie
Extremely fast=Ekstremalnie szybkie
Fast=Szybkie
Slow=Wolne
Very slow=Bardzo wolne
Painfully slow=Boleśnie wolne
Mining durability: @1=Wytrzymałość kopania: @1
Block breaking strength: @1=Siła niszczenia bloku: @1
@1 uses=@1 użyć
Unlimited uses=Nielimitowane użycia

View File

@ -1,4 +1,4 @@
local S = minetest.get_translator("mcl_tt") local S = minetest.get_translator(minetest.get_current_modname())
--[[local function get_min_digtime(caps) --[[local function get_min_digtime(caps)
local mintime local mintime

View File

@ -1,4 +1,4 @@
local S = minetest.get_translator("mcl_tt") local S = minetest.get_translator(minetest.get_current_modname())
-- Armor -- Armor
tt.register_snippet(function(itemstring) tt.register_snippet(function(itemstring)

View File

@ -7,11 +7,11 @@ tt.NAME_COLOR = mcl_colors.YELLOW
-- API -- API
tt.registered_snippets = {} tt.registered_snippets = {}
tt.register_snippet = function(func) function tt.register_snippet(func)
table.insert(tt.registered_snippets, func) table.insert(tt.registered_snippets, func)
end end
tt.register_priority_snippet = function(func) function tt.register_priority_snippet(func)
table.insert(tt.registered_snippets, 1, func) table.insert(tt.registered_snippets, 1, func)
end end
@ -43,7 +43,7 @@ local function apply_snippets(desc, itemstring, toolcaps, itemstack)
end end
local function should_change(itemstring, def) local function should_change(itemstring, def)
return itemstring ~= "" and itemstring ~= "air" and itemstring ~= "ignore" and itemstring ~= "unknown" and def ~= nil and def.description ~= nil and def.description ~= "" and def._tt_ignore ~= true return itemstring ~= "" and itemstring ~= "air" and itemstring ~= "ignore" and itemstring ~= "unknown" and def and def.description and def.description ~= "" and def._tt_ignore ~= true
end end
local function append_snippets() local function append_snippets()
@ -60,7 +60,7 @@ end
minetest.register_on_mods_loaded(append_snippets) minetest.register_on_mods_loaded(append_snippets)
tt.reload_itemstack_description = function(itemstack) function tt.reload_itemstack_description(itemstack)
local itemstring = itemstack:get_name() local itemstring = itemstack:get_name()
local def = itemstack:get_definition() local def = itemstack:get_definition()
local meta = itemstack:get_meta() local meta = itemstack:get_meta()

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