Leaving players will have PEER_ID_INVALID for database saving purposes.
This patch clarifies that, and properly protects the batch send function.
Bug introduced by 5f5ea132.
Reduces memory usage on the server, especially with many user and/or large viewing distances.
Currently disabled on the client due to known data races on a block's data.
Large structures which are generated in on_generated callbacks
independently by Lua cannot influence decoration placement. This
change enables such a callback to assume responsibility for generating
decorations itself, presumably after structures are placed, by
disabling decorations in mg_flags and executing
core.generate_decorations.
---------
Co-authored-by: Po Lu <luangruo@yahoo.com>
These changes were initially made to improve performance. However,
on modern hardware, these changes turned out to make no difference.
This commit unifies the calculations in 'draw' and 'getDimension' and
adds comments to make it more understandable.
* Feature: Use the builtin profiler to automatically make zones for mod callback functions.
* Doc: Basic doc for builtin profiler, and better `/profiler` chatcommand help.
* Fix: `register_functions` (table of callback register function names), and `entity_instrumentation` is no longer outdated.
* Fix: Builtin profiler output is no longer printed to debug.txt or to file in world with translation escapes.
* Fix: Entity callback name generation used `obj_def.label` (normally non-existing field), now it uses the entity name.
* Small code improvements, like use of new `Settings.get_bool` with default.
A few functions tried to dereference a ServerEnvironment nullptr by
calling 'getEnv()'. This change makes use of a macro where possible.
This also cleans up incorrect macro uses, with no functional difference.
This change prevents issues arising from partial generation of MapChunks, which are liable to be regenerated completely when ungenerated MapBlocks within are encountered.
Co-authored-by: Po Lu <luangruo@yahoo.com>
Co-authored-by: sfan5 <sfan5@live.de>
Gimbal lock is a situation where the pitch (the middle angle) of the Tait-Bryan angles (usually called Euler angles incorrectly) is 90 degrees. If the angles specify a rotation close to gimbal lock, the precision requirements increase significantly, beyond what a single-precision float can provide, and at exactly gimbal lock, there's a loss of information. The test didn't take this into account. Fix this by decreasing the expected precision when close to gimbal lock.
The increased error rate on ARM Macs is probably caused by lesser precision in trigonometric functions. IEC-559 does not specify any semantics for those, and while Intel typically has a precision < 1 ulp for trigonometric functions with angles < 2*pi, it's likely that ARM's precision is a bit worse.
* Document Luanti rotation conventions
* Add test for setPitchYawRollRad (entity) rotation conventions
* Test and document that `vector.rotate` uses (extrinsic) Z-X-Y rotation order
Strings with CR+LF (\r+\n) were wrongly fixed into \r, which is enough to display them correctly, but the missing \n became important once the text was saved/reloaded.
By removing the \r instead of the \n, then the text is displayed correctly and saved correctly.
Fix according to Lua code style guidelines (grorp)
Fix order in defaultsettings.cpp (grorp)
remove unrequired comment, and whitespace
Co-authored-by: y5nw <y5nw@users.noreply.github.com>
Co-authored-by: grorp <grorp@users.noreply.github.com>
* Fix attachments lagging behind their parents (#14818)
* Fix animation blending (#14817)
* Bring back cool guy as another .x smoke test
* Add .x mesh loader unittest
* Do bounding box & matrix calculation at proper point in time
* Remove obsolete `SAnimatedMesh`
This could happen before and would just silently discard the data,
but now that Lua can create VManips without loading from map beforehand
we definitely need to handle this case.
Shortening the peer timeout was supposedly necessary at some point
to work around an unknown bug. I was not able to reproduce the bug
running a headless Luanti server on WSL Tumbleweed and connecting with
a client on the Windows host. That is not enough to say the issue no
longer exists. This commit may cause a regression.
The access to change the peer timeout was unsynchronized and done by a
different thread than the sending thread, so it was detected by TSan to
be a data race. Since this patch deletes the code performing the write,
the data race is no longer a concern and no synchronization must be
added.
Fixes issues related to combining animated and world-aligned textures.
Changes texture coordinates of cuboid drawtypes to stay in the [0,1] range, instead of carrying the mapblock alignment and becoming negative after transformations.
The setting 'gui_scaling_filter = true' previously broke 9-slice images.
With this change, custom button background images now scale the same as
backgrounds created using 'background9[...]' (9-slice images).
Second try after the revert in 8a28339 due to an unexpected regression.
- Rigidly animated models (e.g. the glTF frog node) were not working correctly,
since cloning the mesh ignored the transformation matrices.
Note that scaling the mesh needs to occur *after* transforming the vertices.
- Visual scale did not apply to skinned models,
as resetting the animation overwrote scaled vertex data with static positions & normals.
For backwards compatibility, we now apply a 10x scale to static, non-glTF models.
We now do scale static meshes, as the bug that caused meshes not to be scaled was limited to skeletally animated meshes,
hence we ought not to reproduce it for skinned meshes that do not take advantage of skeletal animations (e.g. current MTG doors).
However, glTF models (e.g. Wuzzy's eyeballs) up until recently were always affected due to technical reasons
(using skeletal animation for rigid animation).
Thus, to preserve behavior, we:
1. Do not apply 10x scale to glTF models.
2. Apply 10x scale to obj models.
3. Apply 10x scale to static x or b3d models, but not to animated ones.
See also: #16141
The error was caused by fd857374, where 'MenuQuit' was processed after 'try_quit'.
This commit fixes the error by moving the special 'MenuQuit' handling to Lua.
This feature needs a proper API integration to result in a correct
in-game appearance. See #15898 for details.
This is a band-aid solution for the 5.12.0 release.
It literally breaks torches and doors in MTG.
Regardless of whether this is an oversight or not let's not pull this in so close to release.
This reverts commit 612db5b2ca.
- Rigidly animated models (e.g. the gltf frog node) were not working correctly,
since cloning the mesh ignored the transformation matrices.
Note that scaling the mesh needs to occur *after* transforming the vertices.
- Visual scale did not apply to skinned models,
as resetting the animation overwrote scaled vertex data with static positions & normals.
For backwards compatibility, we only apply a 10x scale to static (.obj) models.
The server already includes such check. There must be a desync issue that causes
an ID mismatch, resulting in client crashes. Any such crash must be prevented.
* Provide tool and digger to get_node_drops
This gives games/mods the ability to modify node drops depending on item
and/or player metadata without overriding node_dig or other workarounds.
* Copy wielded item to prevent modification in get_node_drops
* Also pass node pos to get_node_drops
Allowing properties of the node and its surroundings to affect node drops.
* Copy pos to prevent modification in get_node_drops
Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
* Don't pass empty item stack to get_node_drops if wielded is nil
---------
Co-authored-by: sfan5 <sfan5@live.de>
Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
We don't have a C++ expert on hand, but taking a pointer to one member
and expecting to access another by an offset is very fishy:
- for one, there could theoretically be padding
- the compiler might assume that we are only writing to that first member
The new code has shown to be free for constant parameter values.
Non-constant ones cause the assembly to have branches (why?), but we don't
use that much.
behavior change: newly generated blocks are no longer momentarily activated.
this shouldn't matter for anyone and did not consistently apply to all blocks anyway
addresses issue from #15902 for new maps(!)
Textures created through a render target are flipped along the X axis.
For the same reason, screenshots must be flipped back as well ('IVideoDriver::createScreenShot').
This commit implements the same flipping concept in two places:
1. Batch rendering of images (mostly used by fonts/text)
2. In-world rendering of such textures
The root issue of the unit test failure is that all directories that are found in the mod search are counted as mods, even if they are detected to be invalid as such by the parser. For example, the presence of an init.lua file is required, and the parser will return false if one is not found. This return value was completely ignored. Simply counting the mod conditionally on the parsing success makes the modserver tests pass on MSVC.
We can simply add 0x800800800 to the encoding, then use bit masking.
This works because adding 0x800 maps -2048:2047 to 0x000:0xFFF.
And 0x800800800 is (0x800 << 24 + 0x800 << 12 + 0x800) for x,y,z.
After bitmasking, -0x800 restores the original value range.
First, this reverts 56123b2fbe,
which un-fixes #15031 but fixes#15798 and #15854.
Then we disable culling for the cloud scene node which fixes#15031 again.
see #15761
SDL is the only device that supports relative mode and
mouse input is actually somewhat broken if it's *not* enabled.
This reverts commit 45c5ef8798
and 88b007907a.
ee9258ce introduced a logic error, which caused clients to lose
node metadata when they should not and vice-versa.
See also: server.cpp / Server::sendAddNode
- get rid of simulated mouse events for digging/placing, use keyboard events
instead
- consistent with other simulated events, less code, no need for a
pointer position
- more correct: touch controls no longer break if you have custom
dig/place keybindings set
- move reading of "touch_use_crosshair" setting from Game to TouchControls
This used to be the default for android.
There's not much issues now with using a lower value, so a lower default on all platforms
is reasonable.
The only downside I know of is that if you re-focus the window, it can up till the
next client step until it goes back to normal fps, but 10 Hz feels fast enough.
The button_exit[]s were replaced by regular button[]s, to avoid a very short unpause when you
click the btn_settings (probably because it uses ClientEvent stuff).
Results in the `movement_x` and `movement_y` fields of `player:get_player_control()` being safe to use
(otherwise users would need to compute the length as `(x^2 + y^2)^0.5` and clamp that to 1 themselves).
In 99% of the cases, this behaviour is identical to before.
With this commit, it is again possible to have 'builtin' a symlink that e.g.
points to the engine source directory, which is helpful for development purposes.
According to https://developer.apple.com/documentation/appkit/nsstringpboardtype?language=objc
we can replace it with NSPasteboardTypeString:
> In apps that adopt App Sandbox, use an NSURL object, a bookmark, or a
> filename pasteboard type instead. In a nonsandboxed app, you can also
> use the NSPasteboardTypeString pasteboard type.
There was code to take the light of the node above, but the color was not updated.
To reproduce, don't set paramtype="light", (i.e. not what all the devtest nodes do).
The cause for the test failure is an edge case bug
in the raycast implementation (perfectly diagonal raycasts).
This is fixed by switching to a continuous random distribution
which makes it extremely unlikely that the buggy edge case occurs.
Additionally, devtest unit test failures now print their random seed
to be easier to reproduce in the future.
`GL_LINES` isn't suitable, because it makes lines between pairs of 2 vertices,
not loops around 3 vertices.
Support for OpenGL ES isn't simple, as it has no `glPolygonMode`. And showing broken
wireframe (i.e. with `GL_LINES`) would cause confusion.
Previously, ServerEnv created a player instance before they're fully initialized.
This commit moves all initialization steps and callbacks into TOSERVER_CLIENT_READY
^ which includes StageTwoClientInit for player loading or creation
`IShaderSource` was designed with the idea that if you want a shader,
you must want it for a node. So it depends heavily on being given a tile
material and the node drawtype. But this doesn't make sense neither in theory
nor in practice.
This commit takes a small step towards removing the incorrect abstraction.
* Add "lava flan" (.x model) smoke test
* Fix double finalize in `.x` mesh loader
* Use reserve instead of resize again
The weights are added indirectly via `AnimatedMesh->addWeight`
The currently established convention uses `NS` for "translation no-ops", i.e., it will be collected by a string-collecting utility but not be translated by Luanti at this place.
We don't want to mislead modders with this example into using `NS` for plural forms instead, breaking with the established convention and making use of automated tools harder.
See also: https://github.com/minetest/modtools/pull/11
BiomeGen::getNextTransitionY(y) did not guarantee the condition (y < biome_y_min)
of the next loop because the function may return the value (biome_y_min - 1).
Hence, the biome was not updated until one Y coordinate after.
We are being lax here, but the glTF specification just requires that "when the weights are stored using float component type, their linear sum SHOULD be as close as reasonably possible to 1.0 for a given vertex"
In particular weights > 1 and weight sums well below or above 1 can be observed in models exported by Blender if they aren't manually normalized.
These fail the glTF validator but Irrlicht normalizes weights itself so we can support them just fine.
The docs have been updated to recommend normalizing weights (as well as documenting the status of interpolation support).
Weights < 0, most of them close to 0, also occur. Consistent with Irrlicht, we ignore them, but we also raise a warning.
CImageWriterPNG::writeImage() and writeJPEGFile() explicitly allocate
and deallocate memory with `new` and `delete`, which is prone to programming errors.
The code also has non-functional error handling:
When memory allocation fails, `new` throws an `std::bad_alloc` exception
and never returns `nullptr`, so the check for `nullptr` is always false.
Co-authored-by: DS <ds.desour@proton.me>
This is a newer feature introduced in CMake 3.12, which is now our
minimum version. It supercedes `add_definitions`. I've also replaced
some calls to set `CMAKE_<LANG>_FLAGS` that were used to set
definitions. This is a fairly trivial routine build maintenance that
is not intended to have any behavioral effects.
Server selections are now always correct (no more arbitrarily changing selections if the order of the serverlist changes) and consistent with the address + port in the sidebar.
- The editor is accessible via the pause menu and the settings menu.
- Buttons can be moved via drag & drop.
- Buttons can be added/removed. The grid menu added by #14918 is used to show
all buttons not included in the layout.
- Custom layouts are responsive and adapt to changed screen size / DPI /
hud_scaling.
- The layout is saved as JSON in the "touch_layout" setting.
TGA uses BGR(A)8, stored in memory in that order. Irrlicht typically expects 0xAARRGGBB, which depends on endianness.
(This means that on little endian, no [B][G][R][A] -> 0xAARRGGBB conversion needs to be done, but Irrlicht was swapping the bytes.)
This makes both conversion functions consistently convert from [B][G][R]([A]) to 0xAARRGGBB (SColor), documents them properly and moves them to CImageLoaderTGA.cpp
so no poor soul shall be fooled by them in the near future.
---------
Co-authored-by: Ælla Chiana Moskopp <erle@dieweltistgarnichtso.net>
This lets modders avoid alpha blending rendering bugs as well as potential (future) performance issues.
The appropriate blend modes are also used for node dig particles.
---------
Co-authored-by: sfan5 <sfan5@live.de>
- Actually it's MSAA I think, or perhaps the terms are equivalent
- I've made it fit into the existing Irrlicht architecture, but that has resulted in code duplication compared to my original "hacky" approach
- OpenGL 3.2+ and OpenGL ES 3.1+ are supported
- EDT_OPENGL3 is not required, EDT_OPENGL works too
- Helpful tutorial: https://learnopengl.com/Advanced-OpenGL/Anti-Aliasing, section "Off-screen MSAA"
- This may be rough around the edges, but in general it works
SColor.h contains many functions which are unused and/or perform linear
operations on non-linear 8 bit sRGB color values, such as the plus operator and
`SColor::getInterpolated()`, and there is no documentation about missing gamma
correction.
Some of these functions are not called or called only once:
* `getAverage(s16 color)`: Unused
* `SColor::getLightness()`: Unused
* `SColor::getAverage()`: Claims to determine a color's average intensity but
calculates something significantly different since SColor represents
non-linear sRGB values.
* `SColor::getInterpolated_quadratic()`: Claims to interpolate between colors
but uses the sRGB color space, which is neither physically nor perceptually
linear.
* `SColorf::getInterpolated_quadratic()`: Unused
* `SColorf::setColorComponentValue()`: Unused
Removing or inlining these functions can simplify the code and documenting
gamma-incorrect operations can reduce confusion about what the functions do.
This commit does the following:
* Remove the above-mentioned unused functions
* Inline `SColor::getAverage()` into
`CIrrDeviceLinux::TextureToMonochromeCursor()`
* Rename `SColor::getLuminance()` into `SColor::getBrightness()` since it does
not determine a color's luminance but calculates something which differs
significantly from physical luminance since SColor represents non-linear sRGB
values.
* Inline `SColor::getInterpolated_quadratic()` into `GameUI::update()`,
where it is only used for the alpha value calculation for fading
* Document gamma-incorrect behaviour in docstrings
I originally wanted to get of the legacy IVideoDriver::setRenderTarget altogether,
but that ended up being too much work.
The remaining usage is in "dynamicshadowsrender.cpp".
Here's a comment I wrote about the workaround:
----------------------------------------
Use legacy call when there's single texture without depth texture
This means Irrlicht creates a depth texture for us and binds it to the FBO
This is currently necessary for a working depth buffer in the following cases:
- post-processing disabled, undersampling enabled
(addUpscaling specifies no depth texture)
- post-processing disabled, 3d_mode = sidebyside / topbottom / crossview
(populateSideBySidePipeline specifies no depth texture)
- post-processing disabled, 3d_mode = interlaced
(probably, can't test since it's broken)
(populateInterlacedPipeline specifies no depth texture)
With post-processing disabled, the world is rendered to the TextureBufferOutput
created in the functions listed above, so a depth buffer is needed
(-> this workaround is needed).
With post-processing enabled, only a fullscreen rectangle is rendered to
this TextureBufferOutput, so a depth buffer isn't actually needed.
But: These pipeline steps shouldn't rely on what ends up being rendered to
the TextureBufferOutput they provide, since that may change.
This workaround was added in 1e96403954 /
https://irc.minetest.net/minetest-dev/2022-10-04#i_6021940
This workaround should be replaced by explicitly configuring depth
textures where needed.
----------------------------------------
Under certain unlikely circumstances the main server loop could attempt to process packets even when the connection didn't return one. This would result in the default empty packet being processed resulting in spurious warnings about a missing client.
The recently added ioctl use is reported as a false-positive by valgrind.
I tried moving it to different compilers/versions two times and only
hit further issues that were valgrind's fault.
Also includes a tiny fix.
The notification channel creation is moved into MainActivity.
The notification channel ID string is stored into a static variable.
The name and description of the notification channel are stored into the strings resource file.
Co-authored-by: sfan5 <sfan5@live.de>
The code relied on touch IDs being consecutive. This is true on Android, but not on Linux.
Therefore, touch input on Linux was broken since 53886dcdb5.
If you call minetest.clear_craft after minetest.register_alias_force, the craft definition reference may not be removed from m_output_craft_definitions leading to UAF.
If a newly started thread immediately exits then m_running would
immediately be set to false again and the caller would be stuck
waiting for m_running to become true forever.
Since a mutex for synchronizing startup already exists we can
simply move the while loop into it.
see also: #5134 which introduced m_start_finished_mutex
Since b2eb44afc5, a texture defined as
`[combine:16x512:0,0=some_file.png;etc`
will not be sent correctly from a 5.5 server to a 5.4 client due to the
overeager detection of unsupported base modifier `[` introducing a
spurious `blank.png^` before the modifier.
Fix this by whitelisting which base modifiers can be passed through
unchanged to the client, and prefix `blank.png` for the others
(which at the moment is just [png:, but the list may grow larger
as new base modifiers are added.)
Stop scaling images to POT immediately when loaded. The 'combine'
modifier hardcodes X and Y coordinates, and so behaves incorrectly
if applied to a scaled image. Images emitted by generateImage()
are already scaled to POT before being used as a texture, so
nothing should break.
Code that relies on `resend_count` was added in 7ea4a03 and 247a1eb, but never worked.
This was fixed in #11607 which caused the problem to surface.
Hence undo the first commit entirely and change the logic of the second.
From November 2021, the Play Store will no longer be accepting
apps which use the deprecated getExternalStorageDirectory() API.
Therefore, this commit replaces uses of deprecated API with the new
scoped API (`getExternalFilesDir()` and `getExternalCacheDir()`).
It also provides a temporary migration to move user data from the
shared external directory to new storage.
Fixes#2097, #11417 and #11118
The upstream JsonCpp project has renamed the `json/features.h` file to
`json/json_features.h`. This patch fixes the JsonCpp installation search
by looking for `json/allocator.h` which has not been renamed on newer
versions of JsonCpp.
Fixes: https://github.com/minetest/minetest/issues/9119
The getS16NoEx() handler will return true unless there is a
`[num_emerge_threads]` line in the `minetest.conf` at which
point the excption handler part is reached. Due to the fact that
`defaultsettings.cpp` has a default value set for this setting,
that never will happen.
Because of this, the code will never check the number of threads on
the system, and keep `nthreads = 0`. If that happens, the value is
changed to `1` and only 1 emerge thread will be used.
The default should be set to `1` instead, due to the potential unsafe
consequences for the standard sqlite map files, but that should be a
separate commit that also adds documentation for that setting. This
commit focuses on removing this `hiding` bug instead.
1. **Please update Luanti to the latest stable or dev version** before submitting bug reports. Make sure the bug is still reproducible on the latest version.
2. This page is for reporting the bugs of **the engine itself**. For bugs in a particular game, please [search for the game in the ContentDB](https://content.luanti.org/packages/?type=game) and submit a bug report in their issue trackers.
* For example, you can submit issues about the Minetest Game [in its own repository](https://github.com/minetest/minetest_game/issues).
3. Please provide as many details as possible for us to spot the problem quicker.
1. **Update Luanti to the latest stable or dev version** before submitting a bug report. Make sure the bug is still reproducible on the latest version.
2. This page is for reporting the bugs of **the engine itself**. For bugs in a particular game, please [search for the game on ContentDB](https://content.luanti.org/packages/?type=game) and submit a bug report to its developers.
* For example, issues about Minetest Game are submitted to [its own repository](https://github.com/luanti-org/minetest_game/issues).
3. Please provide as many relevant details as possible.
4. If you have used an LLM/AI to format your issue description, disclose this. Try to keep it concise. No walls of text please.
- type:textarea
attributes:
label:Luanti version
description:|
Paste the Luanti version below.
If you are on a dev version, please also indicate the git commit hash.
Refer to the "About" tab of the menu or run `luanti --version` on the command line.
placeholder:|
Example:
@@ -34,34 +35,28 @@ body:
render:"true"
validations:
required:true
- type:input
attributes:
label:Irrlicht device
description:
placeholder:"Example: X11"
validations:
required:false
- type:input
attributes:
label:Operating system and version
description:It is recommended to upgrade your operating system to see if the problem persists.
description:Keeping your OS up-to-date can solve some problems on its own.
placeholder:"Example: Ubuntu 22.04"
validations:
required:true
- type:input
attributes:
label:CPU model
description:Usually found in OS/system settings.
description:Usually found in OS/system settings
placeholder:"Example: Intel Core i5-2410M"
validations:
required:false
- type:markdown
attributes:
value:The GPU model and renderer can be omitted if the bug is not a graphical issue.
value:If the bug is server-side please skip the "GPU model" and "Active renderer" fields.
- type:input
attributes:
label:GPU model
description:Usually found in OS/system settings.
description:Usually found in OS/system settings
placeholder:"Example: NVIDIA GeForce GTX 1660"
validations:
required:false
@@ -69,18 +64,29 @@ body:
attributes:
label:Active renderer
description:You can find this in the "About" tab in the main menu.
placeholder:"Example: OpenGL 4.6.0"
placeholder:"Example: ES 3.2 / ogles2 / X11"
validations:
required:false
- type:textarea
attributes:
label:Summary
description:Describe your problem here.
description:|
Describe your problem here.
Make sure to include the all error messages you see and/or screenshots in case of visual bugs.
Attaching a copy of your `debug.txt` and `minetest.conf` can be helpful as well.
validations:
required:true
- type:textarea
attributes:
label:Steps to reproduce
description:Explain how the problem has happened, providing a minimal test (e.g. a minimized code snippet) where possible.
description:|
Explain how the problem has happened.
To the extent possible, the reproduction steps should describe not just what you did (e.g. "I open my world and it crashes")
but be detailed enough so that anyone with a fresh installation of Luanti could follow these steps to encounter the same problem.
In case of modding issues it is often useful to include a code snippet.
This will help us diagnose the problem quicker and more efficiently. Thank you.
1. Only submit a feature request if the feature does not exist on the latest dev version.
2. This page is for suggesting changes to **the engine itself**. To suggest changes to games, please [search for the game in the ContentDB](https://content.luanti.org/packages/?type=game) and submit a feature request in their issue trackers.
3. If you have used an LLM/AI to format your issue description, disclose this. Try to keep it concise. No walls of text please.
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.4785px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#d9d9d9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.4785px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#d9d9d9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
Invalid command usage.=Неприемлива употреба на команда.
(@1 s)= (@1 сек)
Command execution took @1 s=Изпълнението на командата отне @1сек.
You don't have permission to run this command (missing privileges: @1).=Нямате права да изпълните тази команда (липсващи права: @1).
Unable to get position of player @1.=Неуспешно получаване на позицията на играч @1.
Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Неправилен формат на област. Очаква се: (x1,y1,z1) (x2,y2,z2)
<action>=<действие>
Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=Показва действие в разговорите (напр. „/me поръчва пица“ показва „<име на играч> поръчва пица“)
Show the name of the server owner=Показва името на собственика на сървъра
The administrator of this server is @1.=Администраторът на този сървър е @1.
There's no administrator named in the config file.=Във файла с настройки не е зададен администратор.
@1 does not have any privileges.=@1 няма никакви права.
Privileges of @1: @2=Правата на @1: @2
[<name>]=[<име>]
Show privileges of yourself or another player=Показва вашите права или тези на друг играч
Player @1 does not exist.=Играчът @1 не съществува.
<privilege>=<права>
Return list of all online players with privilege=Показва списък на играчите на линия с дадени права
Invalid parameters (see /help haspriv).=Неприемливи параметри (вижте /help haspriv).
Unknown privilege!=Неизвестно право!
No online player has the "@1" privilege.=Няма играч на линия с правата „@1“.
Players online with the "@1" privilege: @2=Играчи на линия с правата „@1“: @2
Your privileges are insufficient.=Нямате достатъчно права.
Your privileges are insufficient. '@1' only allows you to grant: @2=Нямате достатъчно права. „@1“ ви позволява да давате само: @2
Unknown privilege: @1=Неизвестни права: @1
@1 granted you privileges: @2=@1 ви даде правото: @2
Set or read server configuration setting=Задава или извежда на екрата настройка на сървъра
Failed. Cannot modify secure settings. Edit the settings file manually.=Грешка! Настройките за сигурност не могат да бъдат променяни. Променете файла с настройки ръчно.
Failed. Use '/set -n <name> <value>' to create a new setting.=Грешка! Използвайте „/set -n <име> <стойност>“, за да създадете нова настройка.
@1 @= @2=@1 @= @2
<not set>=<не е зададено>
Invalid parameters (see /help set).=Неприемливи параметри (вижте /help set).
Finished emerging @1 blocks in @2ms.=Зареждането на @1 блока завърши за @2 мс.
Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Зарежда (или ако липсват, генерира) блокове от света в областта от коорд1 до коорд2 (<коорд1> и <коорд2> трябва да са в скоби)
Started emerge of area ranging from @1 to @2.=Започна зареждане на областта от @1 до @2.
Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Премахва блокове от света в областта от коорд1 до коорд2 (<коорд1> и <коорд2> трябва да са в скоби)
Successfully cleared area ranging from @1 to @2.=Успешно изчистена област от @1 до @2.
Failed to clear one or more blocks in area.=Неуспешно изчистване на един или повече блока в областта.
Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=Нулира осветлението в областта между коорд1 и коорд2 (<коорд1> и <коорд2> трябва да са в скоби)
Successfully reset light in the area ranging from @1 to @2.=Успешно нулирано осветление в област от @1 до @2.
Failed to load one or more blocks in area.=Неуспешно зареждане на един или повече блока в областта.
List mods installed on the server=Показва списък с модификациите, инсталирани на сървъра
No mods installed.=Няма инсталирани модификации.
Cannot give an empty item.=Не може да бъде даден празен предмет.
Cannot give an unknown item.=Не може да бъде даден неизвестен предмет.
Giving 'ignore' is not allowed.=Нее позволено да бъде даван „ignore“.
@1 is not a known player.=@1 не е известен играч.
@1 partially added to inventory.=@1 частично добавен в инвентара.
@1 could not be added to inventory.=@1 не може да бъде добавен в инвентара.
@1 added to inventory.=@1 добавен в инвентара.
@1 partially added to inventory of @2.=@1 частично добавен в инвентара на @2.
@1 could not be added to inventory of @2.=@1 не може да бъде добавен в инвентара на @2.
@1 added to inventory of @2.=@1 добавен в инвентара на @2.
Check who last touched a node or a node near it within the time specified by <seconds>. Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set <seconds> to inf for no time limit=Проверява кой последно е докоснал възел или близък възел в рамките на времето, зададено от <секунди>. По подразбиране: обхват @= 0, секунди @= 86400 @= 24ч, ограничение @= 5. Задайте <секунди> на inf за без ограничение.
Rollback functions are disabled.=Функциите за отменяне на действия са изключени.
That limit is too high!=Ограничението е твърде голямо!
Checking @1 ...=Проверка @1…
Nobody has touched the specified location in @1 seconds.=Никой не е докосвал указаното място през последните @1 секунди.
Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=Отменя действията на играч. По подразбиране <секунди> е 60. Задайте <секунди> на inf за без ограничение.
Invalid parameters. See /help rollback and /help rollback_check.=Неприемливи параметри. Вижте /help rollback и /help rollback_check.
Reverting actions of player '@1' since @2 seconds.=Отменяне действията на играча „@1“ отпреди @2 секунди.
Reverting actions of @1 since @2 seconds.=Отменяне действията на @1 отпреди @2 секунди.
(log is too long to show)=(дневникът е твърде дълъг, за да бъде показан)
Reverting actions succeeded.=Действията са отменени.
Reverting actions FAILED.=Грешка при отменяне на действията.
Show server status=Показва състоянието на сървъра
This command was disabled by a mod or game.=Тази команда е изключена от модификация или игра.
Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)=Изключва сървъра (-1 отменя забавено спиране, -r позволява на играчите повторно да се свързват)
Server shutting down (operator request).=Сървърът се изключва (по искане на оператор).
Ban the IP of a player or show the ban list=Забранява играч/IP или извежда списък със забранените
The ban list is empty.=Списъкът със забранени е празен.
Ban list: @1=Списък със забранени: @1
You cannot ban players in singleplayer!=Не можете да забраните играчи в режим един играч!
Player is not online.=Играчът не е на линия.
Failed to ban player.=Грешка при забраняване на играч.
Banned @1.=Играчът @1 е забранен.
<name> | <IP_address>=<име> | <IP_адрес>
Remove IP ban belonging to a player/IP=Премахва забрана по IP на играч/IP.
Failed to unban player/IP.=Грешка при премахване забраната на играч/IP.
Unbanned @1.=Премахната забрана на @1.
<name> [<reason>]=<име> [<причина>]
Kick a player=Изгонва играч
Failed to kick player @1.=Грешка при изгонване на играча @1.
Kicked @1.=Играчът @1 е изгонен.
[full | quick]=[пълно | бързо]
Clear all objects in world=Премахва всички обекти в света
Invalid usage, see /help clearobjects.=Неприемливи параметри. Вижте /help clearobjects.
Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Премахване на всички обекти. Може да отнеме време. Може и времето за връзка да изтече. (by @1)
Cleared all objects.=Премахнати са всички обекти.
<name> <message>=<име> <съобщение>
Send a direct message to a player=Изпраща лично съобщение на играч
Invalid usage, see /help msg.=Неприемливи параметри. Вижте /help msg.
The player @1 is not online.=Играчът @1 не е на линия.
DM from @1: @2=ЛС от @1: @2
DM sent to @1: @2=ЛС изпратено до @1: @2
Get the last login time of a player or yourself=Получава последното влизане на играч или себе си
@1's last login time was @2.=Последното влизане на @1 е @2.
@1's last login time is unknown.=Последното влизане на @1 е неизвестно.
Clear the inventory of yourself or another player=Изчиства инвентара на друг играч или вас
You don't have permission to clear another player's inventory (missing privilege: @1).=Нямате право да изчиствате инвентара на друг играч (липсващи права: @1).
@1 cleared your inventory.=@1 изчисти вашия инвентар.
Cleared @1's inventory.=Инвентарът на @1 е изчистен.
Player must be online to clear inventory!=Играчът трябва да е онлайн, за да изчистите инвентара му!
Players can't be killed, damage has been disabled.=Играчите не могат да бъдат убивани, щетите са изключени.
Player @1 is not online.=Играчът @1 не е на линия.
You are already dead.=Вече сте мъртви.
@1 is already dead.=@1 вече е мъртъв.
@1 has been killed.=@1 е убит.
Kill player or yourself=Убива играч или себе си
Invalid parameters (see /help @1).=Неприемливи параметри (вижте /help @1).
Too many arguments, try using just /help <command>=Твърде много аргументи, опитайте /help <команда>
Available commands: @1=Достъпни команди: @1
Use '/help <cmd>' to get more information, or '/help all' to list everything.=Използвайте „/help <cmd>“, за да получите повече информация, или „/help all“, за да видите списък с всички команди.
Available commands:=Достъпни команди:
Command not available: @1=Командата не е достъпна: @1
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=Управлява инструмента за профилиране и данните от него. Може да изведе в панела за разговори (print), в дневника (dump) или във файл в света (save). Форматът може да бъде txt, csv, lua, json, json_pretty (структурите може да бъдат променени). Филтърът е шаблон на lua за ограничаване на изхода до съвпадащи имена на модификации.
Statistics written to action log.=Статистиката е записана в дневника.
Statistics were reset.=Статистиката е нулирана.
@1 joined the game.=@1 се присъедини.
@1 left the game.=@1 напусна играта.
@1 left the game (timed out).=@1 напусна играта (изтекло време).
(no description)=(няма описание)
Can interact with things and modify the world=Може да взаимодейства с неща и променя света
Can speak in chat=Може да пише съобщения
Can modify basic privileges (@1)=Може да променя основните права (@1)
Can modify privileges=Може да променя права
Can teleport self=Може да телепортира себе си
Can teleport other players=Може да телепортира играчи
Can set the time of day using /time=Може да задава часа през деня чрез /time
Can do server maintenance stuff=Може да извършва поддръжка на сървъра
Can bypass node protection in the world=Може да заобикаля защитата на възли в света
Can ban and unban players=Може да забранява и разрешава играчи
Can kick players=Може да изгонва играчи
Can use /give and /giveme=Може да използва /give и /giveme
Can use /setpassword and /clearpassword=Може да използва /setpassword и /clearpassword
Can use fly mode=Може да използва режим на летене
Can use fast mode=Може да използва режим на бързо придвижване
Can fly through solid nodes using noclip mode=Може да преминава през твърди възли в режим „без изрязване“
Can use the rollback functionality=Може да използва възможността за отменяне на действия
Can enable wireframe=Може да включва телени рамки
Unknown Item=Неизвестен предмет
Air=Въздух
Ignore=Пренебрегване
You can't place 'ignore' nodes!=Не можете да поставяте възли „пренебрегване“!
Values below show absolute/relative times spend per server step by the instrumented function.=Стойностите по-долу показват абсолютното/относителното време за всяка стъпка на сървъра от замерваната функция.
A total of @1 sample(s) were taken.=Взети са общи @1 проби.
The output is limited to '@1'.=Изходът е ограничен до „@1“.
Saving of profile failed: @1=Грешка при запазване на профила: @1
Handle the profiler and profiling data=Den Profiler und Profilingdaten verwalten
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=Den Profiler benutzen und mit Profiling-Daten arbeiten. Kann in den Chat (print), in das Action-Protokoll (dump) oder in eine Datei in der Welt (save) ausgeben. Das Format kann „txt“, „csv“, „lua“, „json“ oder „json_pretty“ sein (die Strukturen könnten sich in Zukunft ändern). Filter ist ein Lua-Pattern, das benutzt wird, um die Ausgabe auf passende Modnamen einzuschränken.
Statistics written to action log.=Statistiken zum Aktionsprotokoll geschrieben.
Statistics were reset.=Statistiken wurden zurückgesetzt.
Usage: @1=Verwendung: @1
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Format kann entweder „txt“, „csv“, „lua“, „json“ oder „json_pretty“ sein (die Struktur kann sich in Zukunft ändern).
Values below show absolute/relative times spend per server step by the instrumented function.=Die unten angegebenen Werte zeigen absolute/relative Zeitspannen, die je Server-Step von der instrumentierten Funktion in Anspruch genommen wurden.
A total of @1 sample(s) were taken.=Es wurden insgesamt @1 Datenpunkt(e) aufgezeichnet.
The output is limited to '@1'.=Die Ausgabe ist beschränkt auf „@1“.
Saving of profile failed: @1=Speichern des Profils fehlgeschlagen: @1
Handle the profiler and profiling data=Trakti la analizilon kaj analizajn datumojn
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
Statistics written to action log.=Analizoj skribitaj al agoprotokolo.
Statistics were reset.=Analizoj forviŝitaj.
Usage: @1=Uzado: @1
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Formo povas estas txt, csv, lua, json, aŭ json_pretty (struktuoj eble iam ŝanĝiĝos).
Values below show absolute/relative times spend per server step by the instrumented function.=Valoroj subaj montras la malrelativan/relativan tempon pasigitan de la servilo je ĉiu paŝo de la funkcio.
A total of @1 sample(s) were taken.=Sume @1 ekzemplero(j) konserviĝis.
The output is limited to '@1'.=La eligo estas limigita al «@1».
Saving of profile failed: @1=Konservado de profilo malsukcesis: @1
Handle the profiler and profiling data=Traiter le profileur et les données de profilage
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
Statistics written to action log.=Les statistiques sont écrites dans les journaux d'actions.
Statistics were reset.=Les statistiques ont été réinitialisées.
Usage: @1=Usage : @1
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Le format peut être txt, csv, lua, json ou json_pretty (les structures sont sujettes au changement).
Values below show absolute/relative times spend per server step by the instrumented function.=Les valeurs inférieures affichent les temps absolu et relatif dépensés par étape du serveur par la fonction utilisée.
A total of @1 sample(s) were taken.=@1 échantillons ont été collectés.
The output is limited to '@1'.=La sortie est limitée à '@1'.
Saving of profile failed: @1=La sauvegarde du profil a échoué : @1
Profile saved to @1=Le profil a été sauvegardé dans @1
Handle the profiler and profiling data=Menangani profiler dan data profiling
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
Statistics written to action log.=Statistik ditulis ke log action.
Statistics were reset.=Statistik diatur ulang.
Usage: @1=Penggunaan: @1
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Format berupa salah satu dari txt, csv, lua, json, json_pretty (struktur mungkin berubah).
Values below show absolute/relative times spend per server step by the instrumented function.=Nilai berikut menampilkan waktu mutlak/relatif yang dihabiskan tiap langkah server oleh fungsi instrumen.
A total of @1 sample(s) were taken.=Total @1 sampel yang diambil.
The output is limited to '@1'.=Keluaran dibatasi ke '@1'.
Saving of profile failed: @1=Penyimpanan profil gagal: @1
Profile saved to @1=Profil disimpan ke @1
You died=Anda mati
Respawn=Bangkit kembali
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.