Compare commits

...
Author SHA1 Message Date
Ludovic Marie fdc87aecdb Merge pull request #11978 from horizon-rust/split/using-item
🤖 Agent: pure move of 237 lines (an item in use, tick by tick) to game/using_item.rs; apply_consume_effect and drop_bundle_content stay in game.rs because an open draft changes them.
2026-11-07 20:03:38 +01:00
Ludovic Marie 5578753b58 Merge pull request #11981 from horizon-rust/perf/portal-ticking
🤖 Agent: requeued after merging main: the only conflict was the module list in game.rs (`pointer_capture` from main beside `portal_ticking_tests`), resolved by keeping both; no code change since the checks.
2026-11-07 19:46:09 +01:00
Horizon agent 8c612bc687 Merge remote-tracking branch 'origin/main' into perf/portal-ticking
# Conflicts:
#	crates/horizon-client/src/game.rs
2026-11-07 19:44:39 +01:00
Ludovic Marie 9debdf26d4 Merge pull request #11982 from horizon-rust/perf/mod-hook-spans
🤖 Agent: queued: spans only, no behaviour change; pr_ready --quick green. Point: the guards wrap the mods' hooks outside every level span, so the SMP's 1-2 s ticks get a name in horizon-report.
2026-11-07 19:43:54 +01:00
Ludovic Marie d7ae75b441 Merge pull request #11967 from horizon-rust/split/play-input
🤖 Agent: pure move of 390 lines (toggled keys, mapped keys, hotbar wheel, play_mouse) to game/play_input.rs; the two hook tests that compile mapped_key_event and the wheel branch read the new file.
2026-11-07 19:36:04 +01:00
Ludovic Marie bc017eec9b Merge pull request #11946 from horizon-rust/split/screen-backgrounds
🤖 Agent: pure move of 170 lines (title panorama, menu blur, border wall, the screens' render-post hooks) to game/screen_backgrounds.rs; regenerated on main after #11939 since the blocks were adjacent.
2026-11-07 19:36:01 +01:00
Horizon agentandClaude Opus 5.5 b19634003c Server tick: spans for the mods' tick hooks, the config poll and idle levels
A dedicated server's slow tick lines on the SMP show 1-2 s ticks whose
time is in no span: it is spent outside every level, where only the mods'
ServerTickStart/End hooks, the config poll and the idle-level close run.
Each gets a span, so a slow tick line and horizon-report name it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 18:17:09 +00:00
Horizon agent 8711aabd75 Merge remote-tracking branch 'origin/main' into split/play-input 2026-11-07 18:09:24 +00:00
Horizon agentandClaude Opus 5.5 76a5bd8a22 Move item use over time out of game.rs into game/using_item.rs
Pure move (#11857). Private methods and items become pub(super), the same reach they had in game.rs (the game module and its children). Port map rows, source-reading tests and the docs tables follow the code.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 18:08:23 +00:00
Horizon agentandClaude Opus 5.5 453d8b89ce Move the menu backgrounds out of game.rs into game/screen_backgrounds.rs
Pure move (#11857). Private methods and items become pub(super), the same reach they had in game.rs (the game module and its children). Port map rows, source-reading tests and the docs tables follow the code.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 18:05:14 +00:00
Ludovic Marie 845132a56b Merge pull request #11945 from horizon-rust/split/loading-window
🤖 Agent: pure move of 415 lines (first renderer, start_game) to game/loading_window.rs; the Windows-only hwnd stays in game.rs, so no cfg'd re-import is needed.
2026-11-07 19:03:20 +01:00
Horizon agentandClaude Opus 5.5 051e3dd546 Portals: entities past the simulation distance neither cross nor cool down
Entity.handlePortal runs in the entity's own tick, and ServerLevel.tick
ticks only the entities in entity-ticking chunks. handle_portals and
find_portals walked every loaded entity, so a mob in a nether portal past
the simulation distance went through it and its cooldown counted down.
They now skip entities outside entity-ticking chunks and keep the portal
state of the ones waiting there.

Fixes #11960

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 18:01:59 +00:00
Horizon agentandClaude Opus 5.5 ab5dfae985 Move play key and mouse mappings out of game.rs into game/play_input.rs
Pure move (#11857). Private methods and items become pub(super), the same reach they had in game.rs (the game module and its children). Port map rows, source-reading tests and the docs tables follow the code.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 18:01:11 +00:00
Ludovic Marie 19a6e9b81b Merge pull request #11943 from horizon-rust/split/world-entry
🤖 Agent: pure move of the world entry impl block (367 lines) to game/world_entry.rs; the world_items!/world_recipes! macros stay defined before the mod list, so the moved code still sees them.
2026-11-07 18:54:04 +01:00
Ludovic Marie de118feb4e Merge pull request #11948 from horizon-rust/perf/entity-inside-ticking
🤖 Agent: merging #11948 (smp-200). The one risk was the filter cutting block contact for entities that do tick: it keys on the same entity_ticking_area test the mob and item ticks use. The new test shows a zombie inside simulation distance 4 still presses its plate while one past it doesn't (and fails without the change). server_entities, mob_ai, cauldron, raid and dedicated_server harnesses pass locally; CI parity covers the rest.
2026-11-07 18:51:29 +01:00
Horizon agentandClaude Opus 5.5 e508e7919f rustfmt
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 17:49:45 +00:00
Ludovic Marie f222616f7e Merge pull request #11939 from horizon-rust/split/creative-screen
🤖 Agent: pure move of 440 lines (the creative screen) to game/creative_screen.rs; no open PR touches them, visibility stays within the game module.
2026-11-07 18:48:49 +01:00
Ludovic Marie 0f89fd7e00 Merge pull request #11937 from horizon-rust/split/pointer-capture
🤖 Agent: pure move of 324 lines to game/pointer_capture.rs; test_world_input_capture's method() now also finds pub(super) methods, so the capture fixture still compiles the real code.
2026-11-07 18:48:46 +01:00
Horizon agent 0804e2219a Merge remote-tracking branch 'origin/main' into split/loading-window 2026-11-07 17:35:51 +00:00
Horizon agent 8a9a6d5e3f Merge remote-tracking branch 'origin/main' into split/world-entry 2026-11-07 17:28:44 +00:00
Ludovic Marie d17e8fa343 Merge pull request #10330 from MSedgeMC/fix/bullet
🤖 Agent: kacpherek's Dir point is fixed (from3DDataValue wrap, Steps unclamped, tested); on top of MSedgeMC's main merges I only moved the no-target doc comment back onto its test; shulker_space and the save harnesses pass on the union of this gate's PRs on main 1d63e0a5a (playhorizon: fmt, clippy -D warnings, client + client-lib tests, 26 harnesses all pass).
2026-11-07 18:28:07 +01:00
Ludovic Marie 6f374959b7 Merge pull request #10288 from MSedgeMC/port_map/seven-dead-citations
🤖 Agent: port_ledger map-check on the four changed TSVs reads 519 rows, no problems, and kacpherek's PackSelectionScreen.Watcher row is restored (rdbtCVS's fix); TSV-only, no game code.
2026-11-07 18:28:03 +01:00
Horizon agent 1206818cde Merge remote-tracking branch 'origin/main' into split/creative-screen 2026-11-07 17:17:00 +00:00
Ludovic Marie 12157a2d67 Merge pull request #11901 from horizon-rust/feat/shop-stand-in
🤖 Agent: the stand-in is painted from the website's own palette and boxes (no Mojang texture); test pins its face pixels and transparent outer layers.
2026-11-07 18:12:33 +01:00
Horizon agent 9b89ff00ee Merge remote-tracking branch 'origin/main' into split/pointer-capture 2026-11-07 17:10:59 +00:00
Horizon agentandClaude Opus 5.5 2e13076a93 List game/loading_window.rs in the docs
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 17:10:21 +00:00
Horizon agentandClaude Opus 5.5 9974322832 Launcher Shop: dress Horizon's stand-in player when there is no skin
Without a skin the launcher can read (signed out, offline), the Shop's pictures
and its 3D view drew the plain grey figure. They now use the stand-in the
website's shop draws (its standInSkin, original art painted from rows, not
Mojang's Steve or Alex), so both shops show the same player.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 18:09:34 +01:00
Horizon agent b21f0c92f2 wip loading_window 2026-11-07 17:08:53 +00:00
Ludovic Marie 31545199d4 Merge pull request #11894 from horizon-rust/feat/shop-fortnite
🤖 Agent: pictures are drawn on background threads and cached by item hash and screen scale, so the Shop never renders on the UI thread; prices and the checkout call are the same rules as before (two live checkouts cancelled via Paddle).
2026-11-07 18:03:10 +01:00
Horizon agentandClaude Opus 5.5 9a8781468e rustfmt
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 16:56:54 +00:00
Horizon agentandClaude Opus 5.5 1117b98d15 rustfmt
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 16:56:19 +00:00
Horizon agentandClaude Opus 5.5 8fe0e40d68 Block contact only for entities in entity-ticking chunks
Entity.applyEffectsFromBlocks runs in the entity's own tick, and
ServerLevel.tick ticks only entities in entity-ticking chunks, so a mob or
item past the simulation distance presses no plate and is not hurt by a
cactus. tick_blocks swept every loaded entity: 2.5 ms a tick on the SMP,
where ~2,900 of 4,600 overworld mobs sit outside entity-ticking chunks.

Fixes #11881

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 16:55:32 +00:00
Horizon agentandClaude Opus 5.5 f68c335eb2 Point the port map and source-reading tests at game/pointer_capture.rs
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 16:53:05 +00:00
Horizon agent 12dad67f8c Merge remote-tracking branch 'origin/main' into feat/shop-fortnite
# Conflicts:
#	launcher/lang/af.json
#	launcher/lang/ar.json
#	launcher/lang/az.json
#	launcher/lang/ba.json
#	launcher/lang/be.json
#	launcher/lang/bg.json
#	launcher/lang/br.json
#	launcher/lang/bs.json
#	launcher/lang/ca.json
#	launcher/lang/cs.json
#	launcher/lang/cv.json
#	launcher/lang/cy.json
#	launcher/lang/da.json
#	launcher/lang/de.json
#	launcher/lang/el.json
#	launcher/lang/eo.json
#	launcher/lang/es.json
#	launcher/lang/et.json
#	launcher/lang/eu.json
#	launcher/lang/fa.json
#	launcher/lang/fi.json
#	launcher/lang/fil.json
#	launcher/lang/fo.json
#	launcher/lang/fr.json
#	launcher/lang/fur.json
#	launcher/lang/fy.json
#	launcher/lang/ga.json
#	launcher/lang/gd.json
#	launcher/lang/gl.json
#	launcher/lang/haw.json
#	launcher/lang/he.json
#	launcher/lang/hi.json
#	launcher/lang/hr.json
#	launcher/lang/hu.json
#	launcher/lang/hy.json
#	launcher/lang/id.json
#	launcher/lang/ig.json
#	launcher/lang/is.json
#	launcher/lang/it.json
#	launcher/lang/ja.json
#	launcher/lang/ka.json
#	launcher/lang/kk.json
#	launcher/lang/kn.json
#	launcher/lang/ko.json
#	launcher/lang/ky.json
#	launcher/lang/la.json
#	launcher/lang/lb.json
#	launcher/lang/li.json
#	launcher/lang/lmo.json
#	launcher/lang/lo.json
#	launcher/lang/lt.json
#	launcher/lang/lv.json
#	launcher/lang/mk.json
#	launcher/lang/mn.json
#	launcher/lang/ms.json
#	launcher/lang/mt.json
#	launcher/lang/nl.json
#	launcher/lang/no.json
#	launcher/lang/oc.json
#	launcher/lang/pl.json
#	launcher/lang/pt-br.json
#	launcher/lang/pt.json
#	launcher/lang/ro.json
#	launcher/lang/ru.json
#	launcher/lang/sah.json
#	launcher/lang/se.json
#	launcher/lang/sk.json
#	launcher/lang/sl.json
#	launcher/lang/so.json
#	launcher/lang/sq.json
#	launcher/lang/sr.json
#	launcher/lang/sv.json
#	launcher/lang/szl.json
#	launcher/lang/ta.json
#	launcher/lang/th.json
#	launcher/lang/tr.json
#	launcher/lang/tt.json
#	launcher/lang/uk.json
#	launcher/lang/ur.json
#	launcher/lang/uz.json
#	launcher/lang/vec.json
#	launcher/lang/vi.json
#	launcher/lang/yi.json
#	launcher/lang/yo.json
#	launcher/lang/zh.json
#	launcher/lang/zu.json
2026-11-07 17:49:15 +01:00
Horizon agentandClaude Opus 5.5 922f00f52e Launcher Shop: a game-style item shop with drawn items
Ludovic (2026-11-07): "In the launcher you just don't see the items." The Shop
now opens on the season pack across the top (its looks drawn side by side, name,
item count, price, Buy), then rows of big tiles: Looks, each collection's items,
the founder set and the Supporter badge. A tile is the item drawn, its name and its
price; it lifts under the pointer. A tile opens it big on the account's own player
in 3D (an emote plays), with a look's items, Buy and Gift.

- Pictures: the Wardrobe's CPU renderer, framed on the item (preview::fitted_view),
  at device pixels supersampled 2x, on background threads, kept by item hashes.
- Buy and Gift are one checkout of that offer through the same web checkout;
  prices still come from the catalogue and the service's set rules.
- Cut: the page's line, the basket and its notes; three new strings (Buy, Gift,
  Looks) in all 86 tables, nine unused ones removed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 17:48:35 +01:00
Horizon agentandClaude Opus 5.5 200615a30a Move world entry and the world content tables out of game.rs into game/world_entry.rs
Pure move (#11857): defer_world_entry to join_world_rest (the deferred world entry, world creation and rest polling, the world's item/recipe/station tables). Private methods become pub(super), the same reach they had in game.rs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 16:41:27 +00:00
Horizon agentandClaude Opus 5.5 1ba0db3c3c Move the creative inventory screen out of game.rs into game/creative_screen.rs
Pure move (#11857): the creative screen's tabs, pages, tooltips, trash, search and clicks. Private methods become pub(super), the same reach they had in game.rs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 16:41:27 +00:00
Horizon agentandClaude Opus 5.5 0ce0e67282 Move the mouse look and pointer grab out of game.rs into game/pointer_capture.rs
Pure move (#11857): look_options to regrab_on_refocus (mouse look, pause when inactive, held keys, the pointer grab and cursor icon). Private methods become pub(super), the same reach they had in game.rs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 16:41:27 +00:00
Horizon agentandClaude Opus 5.5 0f8cf58043 Launcher: the Wardrobe preview can read a saved shop catalogue
HORIZON_COSMETICS_CATALOGUE=<file of GET /v1/catalogue> gives the development preview
real prices, sets and collections, so Shop screenshots show what players see.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 17:08:41 +01:00
Horizon agentandClaude Opus 5.5 dd93b0164a Merge #10290 into #10330 (both edit the same lines)
Conflicts kept from both sides: crates/horizon-client/src/entity_nbt.rs

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 15:41:11 +01:00
Horizon agentandClaude Opus 5.5 7622c02706 Put the no-target doc comment back on its own test
The Dir/Steps test had taken the doc comment of the no-target test; each test now has its own.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 15:41:11 +01:00
MSedgeMC ac02477732 Merge remote-tracking branch 'upstream/main' into HEAD 2026-11-07 13:09:30 +00:00
MSedgeMC 0748416e9e Merge remote-tracking branch 'upstream/main' into HEAD
# Conflicts:
#	crates/horizon-client/src/entity_nbt.rs
2026-11-07 11:22:23 +00:00
rdbtCVSandClaude Opus 5.5 0fe1d0e15d Port map: keep PackSelectionScreen.Watcher on folder_stamp, which exists
Review feedback on #10288.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-06 20:16:42 +00:00
rdbtCVSandClaude Opus 5.5 3f38b2d0bd Merge origin/main into PR #10288
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-06 20:16:42 +00:00
MSedgeMC e08c7a3ee0 port_map: seven citations name functions the tree does not have
A ledger build from today's upstream/main reports seven map gaps, all rows
whose where cell names a function that no longer exists: PrimedTnt.explode
points at Game::tick_tnt (it is tick_one_tnt), FlatLevelSource.createState at
FlatTerrain::structure_settings (from_settings), PacketProcessor's hand-off at
conn::read_loop (io_pool::Pool::push), three ServerCommonPacketListenerImpl
keep-alive rows at conn::write_loop (that loop is wait_alive), and
PackSelectionScreen.Watcher is a class row written as a port.
2026-11-05 22:29:55 +00:00
124 changed files with 4877 additions and 3944 deletions

No files matched your search

+5 -5
View File
@@ -153,22 +153,22 @@ state stays separate from the library tests. This compiles gameplay twice for ex
| Subsystem | Files |
|---|---|
| Game loop, tick, frame | `game.rs`: `fn run`, `impl ApplicationHandler for Game` (`window_event`, `about_to_wait`), `fn tick`, `fn tick_world`, `fn render`; L: `clock.rs`, `spans.rs`; `horizon-client-input/src/window.rs` |
| Rendering | L: `gfx.rs` (`Renderer::new`, `Renderer::render`), `gfx/` (cull, occlusion, translucency, upload, timing, lod, weather, stars, end_sky), `*.wgsl`, `particles.rs`, `block_entity_render.rs`, `item_render.rs`, `fog.rs`, `clouds.rs`, `camera.rs`, `first_person.rs`; G: `render_tick.rs`, `item_draw.rs` |
| Chunks, streaming, light | L: `streaming.rs` (worker pool: generate, light, mesh), `world.rs`, `chunk.rs`, `chunk_map.rs`, `light.rs`, `mesher.rs` + `mesher/`, `vanillagen.rs` (binds horizon-world's generator), `lod.rs` + `lod/`, `server_terrain.rs` (a server's kept chunks), `bluemap.rs` + `bluemap_detect.rs` (far terrain from its web map), `ticket_levels.rs`; G: `world_loading.rs`, `postprocess.rs`; game.rs `fn update_world` |
| Rendering | L: `gfx.rs` (`Renderer::new`, `Renderer::render`), `gfx/` (cull, occlusion, translucency, upload, timing, lod, weather, stars, end_sky), `*.wgsl`, `particles.rs`, `block_entity_render.rs`, `item_render.rs`, `fog.rs`, `clouds.rs`, `camera.rs`, `first_person.rs`; G: `render_tick.rs`, `item_draw.rs`, `screen_backgrounds.rs` (panorama, menu blur, border wall) |
| Chunks, streaming, light | L: `streaming.rs` (worker pool: generate, light, mesh), `world.rs`, `chunk.rs`, `chunk_map.rs`, `light.rs`, `mesher.rs` + `mesher/`, `vanillagen.rs` (binds horizon-world's generator), `lod.rs` + `lod/`, `server_terrain.rs` (a server's kept chunks), `bluemap.rs` + `bluemap_detect.rs` (far terrain from its web map), `ticket_levels.rs`; G: `world_loading.rs`, `world_entry.rs`, `postprocess.rs`; game.rs `fn update_world` |
| World generation | `crates/horizon-world/src/worldgen/` (`generator*.rs`, `feature_graph.rs`, `structure/`, `carver/`) |
| Block behaviour | `crates/horizon-world/src/level/` (`mod.rs`, `tick.rs`, `hooks.rs`, `redstone.rs`, `place.rs`, `interact.rs`); game.rs `fn tick_blocks`, `fn process_level_events` |
| Mobs | L: `mobs.rs` (types), `mobs/` (`ai.rs`, `goals.rs`, `brain.rs`, `*_brain.rs`, `nav.rs`, `path.rs`, `species.rs`, `spawning.rs`, `render.rs`, `anim.rs`); G: `creatures.rs` (ticking, spawning, mob events), one file per mob family (`dragon.rs`, `wither.rs`, `villagers.rs`, `piglins.rs`, `golems.rs`...), `natural_spawning.rs` |
| Other entities | L: `entities.rs`, `projectiles.rs`, `arrows.rs`; G: `boats.rs`, `minecarts.rs`, `mounts.rs`, `armor_stands.rs`, `paintings.rs`, `frames.rs`, `fireworks.rs`, `tnt.rs`, `explosion.rs` |
| Player actions | game.rs (`fn use_hand`, `fn use_item`, `fn attack`, `fn tick_mining`, `fn break_block`); G: `hand.rs`, `combat.rs`, `consume.rs`, `potions.rs`, `shield.rs`, `crossbow.rs`, `trident.rs`, `fishing.rs`; L: `motion.rs` + `motion/` (movement), `collisions.rs`; crate `horizon-items`: `items.rs`, `item_data.rs`, `enchant.rs`, `blocks.rs` |
| Player actions | game.rs (`fn use_hand`, `fn use_item`, `fn attack`, `fn tick_mining`, `fn break_block`); G: `hand.rs`, `combat.rs`, `consume.rs`, `using_item.rs` (an item in use, tick by tick), `potions.rs`, `shield.rs`, `crossbow.rs`, `trident.rs`, `fishing.rs`; L: `motion.rs` + `motion/` (movement), `collisions.rs`; crate `horizon-items`: `items.rs`, `item_data.rs`, `enchant.rs`, `blocks.rs` |
| Inventory and containers | L: `menu.rs` (`AbstractContainerMenu.clicked`), `container_screen.rs`, `containers.rs`, `creative.rs`, `crafting.rs`, `recipe_book*.rs`, `stations.rs`, `merchant.rs`; game.rs `fn menu_ops`, `fn click_inventory`; G: `stations.rs`, `trading.rs`, `recipe_book.rs`, `machines.rs` |
| Commands | parse: crate `horizon-command` (`args.rs`, `selector.rs`, `tree_*.rs`, `vanilla.rs`); run: G: `commands.rs` (dispatch) + `commands/*.rs` (`admin`, `execute`, `items`, `players`, `world_cmds`...); L: `scoreboard_cmd.rs`, `data_cmd.rs`; `horizon-client-core`: `nbt_path.rs`, `scoreboard.rs`; G: `functions.rs`, `command_blocks.rs` |
| UI screens | `Screen` enum in game.rs; L: `title.rs` + `title/`, `options_ui.rs`, `multiplayer.rs`, `pack_screen.rs`, `graphics_ui.rs`, `screen_draw.rs`, `ui.rs` (widgets), `hud.rs`, `hud_layout.rs`, `hud_overlays.rs`, `chat.rs`, `tab_list.rs`; G: `startup_menu.rs`, `screens.rs` (pause, death), `options.rs`, `lan_screen.rs`, `chat.rs`, `sign_edit.rs`, `books.rs` |
| UI screens | `Screen` enum in game.rs; L: `title.rs` + `title/`, `options_ui.rs`, `multiplayer.rs`, `pack_screen.rs`, `graphics_ui.rs`, `screen_draw.rs`, `ui.rs` (widgets), `hud.rs`, `hud_layout.rs`, `hud_overlays.rs`, `chat.rs`, `tab_list.rs`; G: `startup_menu.rs`, `screens.rs` (pause, death), `options.rs`, `lan_screen.rs`, `chat.rs`, `sign_edit.rs`, `books.rs`, `creative_screen.rs` |
| Multiplayer client | L: `net.rs` (network thread); G: `remote.rs` (`fn handle_packet`, `fn tick_remote`), `remote_*.rs` (mob data, objects, projectiles, vehicles, stations) |
| LAN host / server side | L: `lan/` (`conn.rs` handshake + login threads, `hub.rs` + `hub/` play state, `chunks.rs`, `entity.rs`, `tracking.rs`, `guest.rs`, `playerdata.rs`); G: `lan.rs` (`LanHost`), `lan_actions.rs` (`fn as_guest`, `fn tick_guests`), `lan_*.rs` per feature, `lan_entities.rs` (tracked entities) |
| Integrated server | G: `integrated.rs` (the server thread), `levels.rs` (one level per dimension, `fn tick_server`), `server_travel.rs` |
| Dedicated server | G: `dedicated.rs`, `dedicated/status.rs`; crates `horizon-server-files`, `horizon-server`, `horizon-anticheat` (L: `lan/anticheat.rs`) |
| Save and load | L: `save.rs` (level.dat, regions, playerdata), `entity_nbt.rs`, `options_file.rs`; `horizon-client-core/src/block_entity_nbt.rs`; G: `saving.rs`, `persist.rs` (entities); `crates/horizon-world/src/{region.rs,nbt.rs,datafix/}` |
| Input | game.rs `fn window_event`, `fn key_pressed`, `fn play_mouse`; crate `horizon-client-input` (`keybinds.rs`, `keymapping.rs`, `key_names.rs`, `mouse.rs`, `input.rs`, `interaction_input.rs`, `gamepad.rs`, `clipboard.rs`); L: `osk.rs`; G: `pad.rs`, `pad_menu.rs` |
| Input | game.rs `fn window_event`, `fn key_pressed`; G: `play_input.rs` (`fn play_mouse`, toggled keys, the hotbar wheel); crate `horizon-client-input` (`keybinds.rs`, `keymapping.rs`, `key_names.rs`, `mouse.rs`, `input.rs`, `interaction_input.rs`, `gamepad.rs`, `clipboard.rs`); L: `osk.rs`; G: `pad.rs`, `pad_menu.rs`, `pointer_capture.rs` (mouse look, pointer grab) |
| Audio | L: `audio.rs` (mixer), `sound_engine.rs`, `sound_events.rs`, `music.rs`, `ambience.rs`; G: `music.rs`, `subtitle_hud.rs` |
| Resource packs | L: `packs.rs` + `packs/`, `pack_screen.rs`, `atlas_sources.rs`, `sprites.rs`, `mipmap.rs`, `model_library.rs`, `font.rs`, `mobs/cem.rs` + `mobs/cem_anim.rs` (OptiFine/EMF entity models and their animations); `horizon-client-core/src/lang.rs`; crates `horizon-assets`, `horizon-optifine`; G: `packs.rs` |
| Agent control | L: `control.rs` (socket), `bin/horizon-ctl/`; G: `control.rs`, `agent.rs`, `events.rs`, `ui_control.rs` ([docs/agent-control.md](docs/agent-control.md)) |
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,452 @@
//! The creative inventory screen (`CreativeModeInventoryScreen`): its tabs, pages, tooltips,
//! trash slot, search box and clicks.
use super::*;
impl Game<'_> {
/// `CreativeModeInventoryScreen.hasPermissions` (`canUseGameMasterBlocks`
/// and the Operator Items Tab option) given to `tryRefreshInvalidatedTabs`,
/// as the screen's constructor and `containerTick` do.
pub(super) fn refresh_creative_tabs(&mut self) {
let permissions = self.can_use_game_master_blocks() && self.settings.operator_items_tab;
self.creative_screen
.set_permissions(permissions, &self.pack.names);
}
pub(super) fn creative_inventory_open(&self) -> bool {
self.screen == Screen::Creative && self.creative_screen.tab().inventory
}
/// An item tab of the creative screen (its ItemPickerMenu).
pub(super) fn creative_tab_open(&self) -> bool {
self.screen == Screen::Creative && !self.creative_screen.tab().inventory
}
pub(super) fn creative_origin(batch: &HudBatch) -> (f32, f32) {
batch.centered_origin(Creative::WIDTH, Creative::HEIGHT)
}
/// A creative tab's title: `itemGroup.*` for vanilla's; a mod tab's
/// `itemGroup.<mod>.<name>`, else its `title` as a lang key (a mod's own
/// `itemGroup.<mod>`), else `title` as English text.
pub(super) fn creative_tab_title(&self, tab: &horizon_client::creative::Tab) -> String {
match horizon_client::creative::item_group_key(&tab.id) {
Some(key) => self.translate(key, &tab.title),
None => {
let own = self.translate(&tab.title, &tab.title);
self.translate(&format!("itemGroup.{}", tab.id.replace(':', ".")), &own)
}
}
}
/// Vanilla tooltip: dark box with a purple gradient border, laid out and
/// drawn like an item tooltip (4 px of padding on every side).
pub(super) fn tooltip(&self, batch: &mut HudBatch, text: &str, x: f32, y: f32) {
let atlas = &self.gui.atlas;
let lines = vec![(horizon_client::text::Text::literal(text), u32::MAX)];
let (x, y, w, h) =
Self::tooltip_geometry(atlas, &lines, (x, y), (batch.width, batch.height), [0.0; 2]);
self.tooltip_box(batch, None, x, y, w, h);
Self::tooltip_text(batch, atlas, &lines, x, y);
}
/// `CreativeModeInventoryScreen.getTooltipFromContainerItem`: the lines
/// that follow the item's name, none for a category tab's own grid slots
/// (`grid`): the names of the tabs containing the stack, in blue, then on
/// the search tab's grid the tags a `#` search shows, in dark purple.
pub(super) fn creative_tooltip_tabs(
&self,
stack: &ItemStack,
grid: bool,
) -> Vec<(horizon_client::text::Text, u32)> {
let screen = &self.creative_screen;
let tab = screen.tab();
let category = !tab.search && !tab.inventory;
if !horizon_client::creative::tooltip_lists_tabs(category, grid) {
return Vec::new();
}
let blue = rgba(85, 85, 255, 255);
let dark_purple = rgba(170, 0, 170, 255);
let mut lines: Vec<(horizon_client::text::Text, u32)> = screen
.tabs_containing(stack)
.into_iter()
.map(|i| {
let title = self.creative_tab_title(&screen.tabs[i]);
(horizon_client::text::Text::literal(title), blue)
})
.collect();
if tab.search && grid {
for tag in screen.search_tag_lines(stack) {
lines.push((horizon_client::text::Text::literal(tag), dark_purple));
}
}
lines
}
/// `CreativeModeInventoryScreen.extractRenderState`: item slots share the
/// container screen's hover target for their highlight and tooltip.
pub(super) fn draw_creative(&mut self, batch: &mut HudBatch) {
// CreativeModeInventoryScreen: `CommonComponents.EMPTY` for a title.
screen_info::begin_container("creative");
let (ox, oy) = Self::creative_origin(batch);
let selected = self.creative_screen.selected;
// Only what is drawn of the tabs: their stacks stay where they are.
let tabs = self.creative_screen.tab_headers();
let tab = &tabs[selected.min(tabs.len() - 1)];
let tab_sprite = |t: &horizon_client::creative::Tab, on: bool| {
format!(
"gui/sprites/container/creative_inventory/tab_{}_{}_{}",
if t.top { "top" } else { "bottom" },
if on { "selected" } else { "unselected" },
t.column + 1
)
};
self.render_transparent_background("creative", batch);
// Unselected tabs behind the panel, then the panel, then the selected tab.
for (i, t) in tabs.iter().enumerate() {
if i != selected && self.creative_screen.on_page(t) {
let (tx, ty) = Creative::tab_position(t);
batch.sprite(&self.gui.atlas, &tab_sprite(t, false), ox + tx, oy + ty);
let mouse = (self.cursor.0 - ox, self.cursor.1 - oy);
if Creative::tab_wants_hand(t, false, mouse) {
horizon_client::widgets::request_cursor(
horizon_client::widgets::Cursor::PointingHand,
);
}
}
}
let background = if tab.search {
"gui/container/creative_inventory/tab_item_search"
} else if tab.inventory {
"gui/container/creative_inventory/tab_inventory"
} else {
"gui/container/creative_inventory/tab_items"
};
if let Some(mut r) = self.gui.atlas.sprites.get(background).copied() {
r.u1 = r.u0 + (r.u1 - r.u0) * Creative::WIDTH / r.w as f32;
r.v1 = r.v0 + (r.v1 - r.v0) * Creative::HEIGHT / r.h as f32;
batch.rect_uv(ox, oy, Creative::WIDTH, Creative::HEIGHT, r, u32::MAX);
}
let (tx, ty) = Creative::tab_position(tab);
batch.sprite(&self.gui.atlas, &tab_sprite(tab, true), ox + tx, oy + ty);
for t in tabs.iter().filter(|t| self.creative_screen.on_page(t)) {
let (tx, ty) = Creative::tab_position(t);
let stack = ItemStack {
item: Arc::from(t.icon.as_str()),
count: 1,
damage: 0,
extra: None,
};
self.draw_item(
batch,
&stack,
ox + tx + 5.0,
oy + ty + if t.top { 9.0 } else { 7.0 },
);
}
let atlas = &self.gui.atlas;
if !tab.inventory {
let title = self.creative_tab_title(tab);
batch.text(
atlas,
&title,
ox + 8.0,
oy + 6.0,
rgba(64, 64, 64, 255),
false,
);
}
if tab.search {
// CreativeModeInventoryScreen: an unbordered EditBox of 50 at (82, 6).
let search = &mut self.creative_screen.search;
search.x = ox + 82.0;
search.y = oy + 6.0;
search.width = 80.0;
search.bordered = false;
search.focused = true;
search.text_color = u32::MAX;
search.max_length = clipboard::CREATIVE_SEARCH_CHARS;
if horizon_client::widgets::narrating() {
search.message = screen_info::tr("itemGroup.search", &[]);
}
search.draw(batch, atlas, None);
}
// The hovered stack, and whether it is a grid slot (`CustomCreativeSlot`).
let mut hovered: Option<(ItemStack, bool)> = None;
// Use the same padded slot bounds as clicks and the other menus, so
// highlights and tooltips remain visible between adjacent items.
let hovered_slot = self.slot_at(batch, self.cursor.0, self.cursor.1);
if tab.inventory {
self.draw_player_preview(
batch,
ox + 73.0,
oy + 6.0,
ox + 105.0,
oy + 49.0,
20.0,
0.0625,
);
let trash = Self::creative_trash_hovered(batch, self.cursor);
let (tx, ty) = Creative::TRASH_POSITION;
if trash {
self.draw_slot_highlight(batch, false, ox + tx, oy + ty);
}
self.draw_hovered_slot_highlight(batch, false, ox, oy);
self.draw_inventory_slots(batch, ox, oy);
if trash {
self.draw_slot_highlight(batch, true, ox + tx, oy + ty);
}
self.draw_hovered_slot_highlight(batch, true, ox, oy);
} else {
let items = self.creative_screen.items(&self.pack.names);
let first = self.creative_screen.first_row(&self.pack.names);
for r in 0..5 {
for c in 0..9 {
let Some(stack) = items.get((first + r) * 9 + c).filter(|s| s.count > 0) else {
continue;
};
let (x, y) = (ox + 9.0 + c as f32 * 18.0, oy + 18.0 + r as f32 * 18.0);
let over = hovered_slot == Some(Creative::DISPLAY + r * 9 + c);
if over {
self.draw_slot_highlight(batch, false, x, y);
}
self.draw_item(batch, stack, x, y);
if over {
self.draw_slot_highlight(batch, true, x, y);
hovered = Some((stack.clone(), true));
}
}
}
let drag = self.drag_view();
for c in 0..9 {
let (x, y) = (ox + 9.0 + c as f32 * 18.0, oy + 112.0);
let over = hovered_slot == Some(c);
if over {
self.draw_slot_highlight(batch, false, x, y);
}
self.draw_slot_item(batch, drag.as_ref(), c, &self.inventory[c], x, y);
if over {
self.draw_slot_highlight(batch, true, x, y);
hovered = self.inventory[c].clone().map(|s| (s, false));
}
}
let scrollable = self.creative_screen.rows(&self.pack.names) > 5;
let scroller = if scrollable {
"gui/sprites/container/creative_inventory/scroller"
} else {
"gui/sprites/container/creative_inventory/scroller_disabled"
};
batch.sprite(
&self.gui.atlas,
scroller,
ox + Creative::SCROLL_X,
oy + Creative::SCROLL_Y + self.creative_screen.scroller_offset(),
);
}
let effect_tip = self.draw_inventory_effects(batch, (ox, oy), Creative::WIDTH as i32);
self.draw_creative_pages(batch, ox, oy);
for t in tabs.iter().filter(|t| self.creative_screen.on_page(t)) {
let (tx, ty) = Creative::tab_position(t);
if self.cursor.0 >= ox + tx
&& self.cursor.0 < ox + tx + 26.0
&& self.cursor.1 >= oy + ty
&& self.cursor.1 < oy + ty + 32.0
{
self.tooltip(
batch,
&self.creative_tab_title(t),
self.cursor.0,
self.cursor.1,
);
}
}
self.draw_carried(batch);
if tab.inventory {
if Self::creative_trash_hovered(batch, self.cursor) {
// `CreativeModeInventoryScreen`: the destroy slot's tooltip is
// `inventory.binSlot`, not an English literal.
let destroy = self.translate("inventory.binSlot", "Destroy Item");
self.tooltip(batch, &destroy, self.cursor.0, self.cursor.1);
} else if let Some(slot) = self.slot_at(batch, self.cursor.0, self.cursor.1)
&& let Some(stack) = self.slot_view(slot)
&& self.tooltip_with_carried(&stack)
{
let tabs = self.creative_tooltip_tabs(&stack, false);
self.draw_stack_tooltip_with(
batch,
&stack,
false,
self.cursor.0,
self.cursor.1,
tabs,
);
}
} else if let Some((item, grid)) = hovered
&& self.tooltip_with_carried(&item)
{
let tabs = self.creative_tooltip_tabs(&item, grid);
// A `CustomCreativeSlot`: TooltipFlag.asCreative.
self.draw_stack_tooltip_with(batch, &item, grid, self.cursor.0, self.cursor.1, tabs);
}
if let Some(lines) = effect_tip {
self.draw_tooltip_lines(batch, &lines, self.cursor.0, self.cursor.1);
}
}
pub(super) fn creative_trash_hovered(batch: &HudBatch, cursor: (f32, f32)) -> bool {
let (ox, oy) = Self::creative_origin(batch);
let (x, y) = Creative::TRASH_POSITION;
cursor.0 >= ox + x
&& cursor.0 < ox + x + 16.0
&& cursor.1 >= oy + y
&& cursor.1 < oy + y + 16.0
}
/// NeoForge's creative page buttons, 20 square, 50 above the screen at
/// its left and right edges: -1 or 1 for the one at `cursor`, when there
/// is more than one page.
pub(super) fn creative_page_button(
ox: f32,
oy: f32,
cursor: (f32, f32),
pages: u32,
) -> Option<i64> {
if pages <= 1 {
return None;
}
let y = oy - 50.0;
let inside =
|x: f32| cursor.0 >= x && cursor.0 < x + 20.0 && cursor.1 >= y && cursor.1 < y + 20.0;
if inside(ox) {
Some(-1)
} else if inside(ox + Creative::WIDTH - 20.0) {
Some(1)
} else {
None
}
}
/// The page buttons and "page / pages" between them.
pub(super) fn draw_creative_pages(&self, batch: &mut HudBatch, ox: f32, oy: f32) {
let pages = self.creative_screen.pages();
if pages <= 1 {
return;
}
let atlas = &self.gui.atlas;
let y = oy - 50.0;
for (x, label, step) in [(ox, "<", -1), (ox + Creative::WIDTH - 20.0, ">", 1)] {
let hover = Self::creative_page_button(ox, oy, self.cursor, pages) == Some(step);
let page = self.creative_screen.page as i64 + step;
let active = (0..pages as i64).contains(&page);
let sprite = match (active, hover) {
(false, _) => "gui/sprites/widget/button_disabled",
(true, true) => "gui/sprites/widget/button_highlighted",
(true, false) => "gui/sprites/widget/button",
};
horizon_client::ui::blit_sprite(batch, atlas, sprite, x, y, 20.0, 20.0, u32::MAX);
let color = if active {
u32::MAX
} else {
rgba(160, 160, 160, 255)
};
let w = HudBatch::text_width(atlas, label);
batch.text(atlas, label, x + (20.0 - w) / 2.0, y + 6.0, color, true);
}
let text = format!("{} / {}", self.creative_screen.page + 1, pages);
let w = HudBatch::text_width(atlas, &text);
batch.text(
atlas,
&text,
ox + (Creative::WIDTH - w) / 2.0,
oy - 44.0,
u32::MAX,
true,
);
}
pub(super) fn click_creative(&mut self, right: bool) {
if self.mod_browser_press(right) {
return;
}
let Some(size) = self
.renderer
.as_ref()
.map(|r| [r.config.width, r.config.height])
else {
return;
};
let batch = HudBatch::new(size);
let (ox, oy) = Self::creative_origin(&batch);
let (cx, cy) = self.cursor;
// NeoForge's page buttons, when mods add tabs.
if let Some(step) =
Self::creative_page_button(ox, oy, (cx, cy), self.creative_screen.pages())
{
// Page buttons are outside the inventory panel; their release must
// not throw a carried stack, including when the button is disabled.
self.inv_clicks.skip_release();
let page = self.creative_screen.page as i64 + step;
if (0..self.creative_screen.pages() as i64).contains(&page) {
self.audio.play_button_click();
self.creative_screen.set_page(page as u32);
self.refresh_saved_hotbars();
}
return;
}
let tabs = self.creative_screen.tabs.clone();
for (i, t) in tabs.iter().enumerate() {
if !self.creative_screen.on_page(t) {
continue;
}
let (tx, ty) = Creative::tab_position(t);
if cx >= ox + tx && cx < ox + tx + 26.0 && cy >= oy + ty && cy < oy + ty + 32.0 {
select_creative_tab(&mut self.creative_screen, &mut self.inv_clicks, i);
self.refresh_saved_hotbars();
self.inv_drag = None;
self.last_inv_click = None;
return;
}
}
if self.creative_inventory_open() {
if Self::creative_trash_hovered(&batch, self.cursor) {
if self.has_shift_down() {
let before = self.player_equipment();
self.inventory.fill(None);
self.armor.fill(None);
self.offhand = None;
self.craft_grid[..4].fill(None);
self.player_equipment_changed(&before);
self.apply_equipment();
} else {
self.carried = None;
}
self.inv_drag = None;
self.inv_clicks = Default::default();
} else if self.slot_at(&batch, cx, cy).is_some() || self.clicked_outside(&batch) {
self.inventory_press(right);
}
return;
}
if !right && self.creative_search_click(ox, oy) {
return;
}
// Holding the scrollbar scrolls as the mouse moves (mouseDragged).
if !right
&& self
.creative_screen
.press_scrollbar(cx - ox, cy - oy, &self.pack.names)
{
return;
}
if self.slot_at(&batch, cx, cy).is_some() || self.clicked_outside(&batch) {
self.inventory_press(right);
}
}
/// A click on the search tab's box (`EditBox.onClick`).
pub(super) fn creative_search_click(&mut self, ox: f32, oy: f32) -> bool {
if !self.creative_screen.tab().search {
return false;
}
let (x, y, w, h) = (ox + 82.0, oy + 6.0, 80.0, 9.0);
let (mx, my) = self.cursor;
if mx < x || my < y || mx >= x + w || my >= y + h {
return false;
}
let shift = self.has_shift_down();
let search = &mut self.creative_screen.search;
search.x = x;
search.y = y;
search.width = w;
search.click(&self.gui.atlas, mx, shift, false);
true
}
}
@@ -0,0 +1,69 @@
//! `Entity.applyEffectsFromBlocks` runs in the entity's own tick, and
//! `ServerLevel.tick` ticks only the entities in entity-ticking chunks: a mob
//! past the simulation distance presses no plate, however long it stands on it.
use super::Game;
use super::native_machines::tests::server_game;
use horizon_client::chunk::Chunk;
use horizon_client::mobs::Mob;
use horizon_core::geometry::Vec3;
use std::sync::Arc;
#[test]
#[ignore = "needs prepared resources in HORIZON_TEST_RESOURCES"]
fn a_mob_presses_a_plate_only_inside_the_simulation_distance() {
let mut game = server_game();
game.settings.simulation_distance = 4;
game.settings.render_distance = 12;
let registry = game.pack.assets.registry;
let stone = registry.default_state("minecraft:stone").unwrap();
let plate = registry
.default_state("minecraft:stone_pressure_plate")
.unwrap();
let zombie = game
.res
.mob_types()
.get("minecraft:zombie")
.unwrap()
.clone();
// The player in chunk (0, 0); a zombie on a plate in chunk (2, 0), inside
// the simulation distance, and another in chunk (8, 0): loaded and in
// view, but past it.
game.player = Some(
horizon_client::motion::PlayerMotion::new(game.motion, Vec3::new(8.5, 65.0, 8.5)).unwrap(),
);
for (cx, x, id) in [(2, 40, 1), (8, 136, 2)] {
game.world
.chunks
.insert((cx, 0), Arc::new(Chunk::empty(cx, 0)));
game.world.set(x, 63, 8, stone).unwrap();
game.world.set(x, 64, 8, plate).unwrap();
game.mobs.push(Mob::new(
id,
zombie.clone(),
Vec3::new(f64::from(x) + 0.5, 64.0, 8.5),
0.0,
));
}
game.update_chunk_tickets();
let ticking = game.entity_ticking_area();
assert!(ticking(40, 8), "chunk (2, 0) ticks entities");
assert!(
!ticking(136, 8),
"chunk (8, 0) is past the simulation distance"
);
for _ in 0..3 {
game.tick_blocks().unwrap();
}
let powered = |game: &Game<'_>, x: i32| {
let state = game.world.block(x, 64, 8);
registry
.state(state)
.unwrap()
.properties
.get("powered")
.cloned()
};
assert_eq!(powered(&game, 40).as_deref(), Some("true"));
assert_eq!(powered(&game, 136).as_deref(), Some("false"));
}
+13 -2
View File
@@ -496,12 +496,16 @@ impl Game<'_> {
let running = (!paused && !self.agent.hold_server).then(|| self.clock.world_runs());
let server = self.serving.is_some() || self.options.dedicated.is_some();
// A config edited while the server is paused (empty) still reloads.
// The parts outside every level get spans of their own, so that a slow
// tick's line and `horizon-report` say when a mod's tick hook took it.
if server {
let _span = horizon_client::spans::guard("mod_configs_poll");
self.native_configs_poll();
}
if let Some(running) = running
&& server
{
let _span = horizon_client::spans::guard("mods_server_tick_start");
self.native_lifecycle_server_tick_start(running);
}
let observe_level =
@@ -578,13 +582,20 @@ impl Game<'_> {
self.native_lifecycle.cancel_server_tick();
}
result?;
if let Err(error) = self.close_idle_levels() {
let closed = {
let _span = horizon_client::spans::guard("close_idle_levels");
self.close_idle_levels()
};
if let Err(error) = closed {
self.native_lifecycle.cancel_server_tick();
return Err(error);
}
// `ServerTickEnd`: an errored tick or an idle-close failure (at
// the `?` above) never reaches this site.
self.native_lifecycle_server_tick_end(paused);
{
let _span = horizon_client::spans::guard("mods_server_tick_end");
self.native_lifecycle_server_tick_end(paused);
}
// The packets counted for `native_server_packets` (only while a mod counts them).
if server {
self.diagnostics_packets_tick();
@@ -0,0 +1,425 @@
//! The window's first renderer and frames: the renderer built from the prepared textures, the
//! boot screen's frame, and `start_game`, which turns the loaded resources into a `Game`.
use super::*;
/// CPU mip chains for the block sprites and world border.
pub(super) fn prepare_renderer_textures(
pack: &PackResources,
) -> horizon_client::gfx::PreparedTextures {
let assets = &pack.render;
horizon_client::gfx::PreparedTextures::new(
&assets.pixels.get(),
assets.sprite_size,
assets.texture_layers,
&assets.sprite_mips,
(&pack.forcefield.2, pack.forcefield.0),
)
.with_pbr(
&assets.pbr_normals,
&assets.pbr_specular,
assets.pbr_size,
assets.texture_layers,
)
}
/// Upload pack textures and create the renderer on the window's device.
pub(super) fn build_renderer(
window: Arc<Window>,
offscreen: bool,
pack: &PackResources,
gui: &UiResources,
previous: Option<&Renderer>,
prepared: Option<horizon_client::gfx::PreparedTextures>,
api: horizon_client::graphics::GraphicsApi,
translucent_batching: bool,
// HDR with Smooth Gradients (`Graphics::wide_frame`): a 16-bit frame where HDR output is
// offered (`Renderer::new`).
wide_frame: bool,
shader_pack: shader_packs::PickedPack,
filtering: (i32, i32),
) -> Result<Renderer> {
let assets = &pack.render;
let atlas = &gui.atlas;
// The new renderer's atlas texture starts from `HudAtlas.pixels`, which
// holds the textures but never a glyph rasterized at run time. The font's
// cache still answers with the rects it drew into the previous renderer's
// texture, so forget them: the glyphs that are drawn again are placed into
// this texture (as `ui_theme` does when its atlas changes). Without this,
// Chinese and Japanese menu labels go blank when the loading screen hands
// over to the game.
atlas.font.reset_cache();
// Made here when the worker did not: the renderer's own fallback has no LabPBR maps.
let prepared = Some(prepared.unwrap_or_else(|| prepare_renderer_textures(pack)));
let atlas_pixels = atlas.pixels();
let mut renderer = pollster::block_on(Renderer::new(
window,
offscreen,
&assets.pixels.get(),
assets.sprite_size,
assets.sprite_minimum_size,
assets.texture_layers,
&assets.sprite_mips,
&assets.animations,
(&atlas_pixels, atlas.width, atlas.height),
(&atlas.glint.0, atlas.glint.1, atlas.glint.2),
(
&atlas.glint_armor.0,
atlas.glint_armor.1,
atlas.glint_armor.2,
),
(&pack.forcefield.2, pack.forcefield.0),
gui.panorama.clone(),
prepared,
previous,
api,
translucent_batching,
wide_frame,
shader_pack.draws_flat,
shader_pack.linear,
shader_pack.hdr_float,
))?;
renderer.hud.sprite_animations = atlas
.sprite_animations
.iter()
.map(|(rect, animation)| (*rect, animation.clone(), (usize::MAX, 0, 0)))
.collect();
renderer
.hud
.set_text_shader(&renderer.device, atlas.text_shader.as_deref());
pack.item_renderer
.prepare_glint_atlas(renderer.device.limits().max_texture_dimension_2d, filtering)?;
renderer.set_lines_shader(atlas.lines_shader.as_deref());
renderer.set_custom_sky(&pack.custom_sky);
let cit_glints = pack.item_renderer.cit.as_ref().map(|c| &c.glint_textures);
renderer
.hud
.set_cit_glints(&renderer.device, &renderer.queue, cit_glints);
Ok(renderer)
}
/// The loading screen's renderer: one atlas (the boot screen's until the
/// pack's GUI atlas is ready) over one opaque white block-sprite layer, an
/// empty border texture and the title panorama once the menu bundle is ready.
pub(super) fn loading_renderer(
window: Arc<Window>,
offscreen: bool,
atlas: Option<&horizon_client::hud::HudAtlas>,
panorama: Option<&Arc<horizon_client::gfx::panorama::Faces>>,
previous: Option<&Renderer>,
api: horizon_client::graphics::GraphicsApi,
) -> Result<Renderer> {
static FORCEFIELD: [u8; 4] = [0; 4];
static EMPTY_HUD: [u8; 4] = [0, 0, 0, 255];
static EMPTY_GLINT: [u8; 4] = [0; 4];
let panorama = panorama
.cloned()
.unwrap_or_else(|| Arc::new(horizon_client::gfx::panorama::Faces::colour([0; 4])));
let (pixels, width, height) = atlas.map_or((EMPTY_HUD.as_slice(), 1, 1), |a| {
(a.pixels.as_slice(), a.width, a.height)
});
let (glint_pixels, glint_width, glint_height) = atlas
.map_or((EMPTY_GLINT.as_slice(), 1, 1), |a| {
(a.glint.0.as_slice(), a.glint.1, a.glint.2)
});
// A glyph rasterized into an earlier texture is not in these pixels; the
// new texture gets it again when the character is drawn (see
// `build_renderer`).
if let Some(atlas) = atlas {
atlas.font.reset_cache();
}
let mut renderer = pollster::block_on(Renderer::new(
window,
offscreen,
&[255, 255, 255, 255],
1,
1,
1,
&[],
&[],
(pixels, width, height),
(glint_pixels, glint_width, glint_height),
(glint_pixels, glint_width, glint_height),
(&FORCEFIELD[..], 1),
panorama,
None,
previous,
api,
// It draws no terrain.
false,
// An 8-bit frame, which HDR output takes as well.
false,
false,
false,
false,
))?;
if let Some(atlas) = atlas {
renderer.hud.sprite_animations = atlas
.sprite_animations
.iter()
.map(|(rect, animation)| (*rect, animation.clone(), (usize::MAX, 0, 0)))
.collect();
}
Ok(renderer)
}
pub(super) fn loading_frame(hud: &HudBatch) -> Frame<'_> {
Frame {
weather: &[],
weather_time: horizon_client::weather::Time::new(0, 0.0),
camera: glam::DVec3::new(0.5, 100.0, 0.5),
yaw: 0.0,
pitch: 10.0,
fov_degrees: 85.0,
eye: glam::DVec3::new(0.5, 100.0, 0.5),
eye_rotation: [0.0, 10.0],
first_person: true,
bob: glam::Mat4::IDENTITY,
spin: glam::Mat4::IDENTITY,
sky: horizon_client::environment::Sky::default(),
shadow_scene_revision: (0, 0),
shadow_cache: false,
distance: 12.0,
detail_distance: 12.0,
depth_far: 1000.0,
underwater: false,
water_plane: None,
cave_culling: false,
title: true,
sky_blocked: false,
skybox: false,
end_sky: false,
end_sky_sprite: None,
boss_world_fog: false,
environment_fog: None,
water_fog: [0.0; 3],
fog: None,
dark_disc: false,
outline: Vec::new(),
outline_after_terrain: false,
outline_high_contrast: false,
pvp: Default::default(),
debug_lines: &[],
debug_lines_on_top: &[],
debug_crosshair: &[],
hud,
glint_alpha: 0.75,
glint_ticks: 0.0,
nether_lighting: false,
entities: &[],
static_block_entities: &[],
visible_static_block_entity_sections: &[],
static_block_entity_stats: Default::default(),
entity_motion: &[],
entity_motion_posed: &[],
entity_spans: &[],
skin: None,
glowing: &[],
dynamic_lights: &[],
colored_lights: &[],
emissive_layers: &[],
clouds: None,
lightning: Default::default(),
additive: &[],
see_through: &[],
world_primitives: Default::default(),
shadow_only: &[],
celestial: &[],
stars: None,
hand: &[],
hand_items: &[],
hand_fov_degrees: 70.0,
screen: &[],
pack: Default::default(),
border: None,
game_time: 0.0,
shader_game_time: 0.0,
end_portal_sprites: [[0.0; 4]; 2],
crumbling_sprite: [0.0; 4],
ticks: 0,
darkness: (0.0, 0.0),
night_vision: 0.0,
block_flicker: 0.0,
boss_darken: 0.0,
chunk_fade: 0.0,
post_effects: horizon_client::post_chain::Request::none(),
menu_blur: None,
}
}
/// The post-load setup once the resources are ready: `Game::new` and the
/// options, packs, mods, control socket, benchmark and world selection the
/// old `run` did after loading. `None` means a harness or dedicated run
/// finished here instead.
#[allow(clippy::too_many_arguments)]
pub(super) fn start_game<'a>(
res: &'a Arc<Resources>,
pack: PackResources,
gui: UiResources,
options: Options,
pack_error: Option<String>,
audio: Audio,
vanilla_root: PathBuf,
started: Instant,
rest_loader: Option<WorldRestLoader>,
settings: Option<Settings>,
prepared: Option<GameCpuResources>,
entity_models: Option<Arc<horizon_client::mobs::EntityModelDocument>>,
) -> Result<Option<Game<'a>>> {
let handoff = prepared.is_some();
let mut settings = match settings {
Some(settings) => settings,
None => Settings::load(&Game::options_path()),
};
if let Some(d) = options.distance_override {
settings.render_distance = d;
}
// A synchronous launch has no handoff worker: build its CPU resources
// here, from the same entity-model document the rest worker read.
let prepared = match prepared {
Some(prepared) => Some(prepared),
None => Some(GameCpuResources::load(
&options.resources,
entity_models.as_deref(),
)?),
};
let mut game = Game::new(res, pack, gui, options, settings, audio, prepared)?;
game.rest_loader = rest_loader;
game.ui.vanilla_root = vanilla_root;
if let Some(error) = pack_error {
// Minecraft.clearResourcePacksOnError: the selection is cleared and
// saved, so the next launch starts without the packs.
game.settings.resource_packs.clear();
game.settings.save(&Game::options_path());
game.open_options_at(true, horizon_client::options_ui::Page::Packs);
game.ui.options.resource_error = Some(error);
}
if game.options.benchmark.is_some() {
// The same conditions on every machine: no VSync, no frame cap, no
// pause or idle limit without focus. In memory only, never saved.
game.settings.vsync = false;
game.settings.max_fps = 260;
game.settings.inactivity_fps_limit = "minimized".into();
game.options.no_pause = true;
}
game.apply_settings();
// Benchmarks measure the game alone.
if game.options.benchmark.is_none() {
game.mods.dev = game.options.dev_mods.clone();
game.start_mods();
}
// After the mods: their templates are among the ids it lists.
game.preload_registries();
game.start_agent_control()?;
if let Some(scenario) = game.options.benchmark.clone() {
let control = game
.control
.get_or_insert_with(horizon_client::control::Server::local);
horizon_client::benchmark::start(
control.sender(),
horizon_client::benchmark::Setup {
scenario,
started,
app: horizon_bench::App {
name: "horizon-client".into(),
version: horizon_client::crash::version(),
commit: option_env!("HORIZON_COMMIT").map(str::to_owned),
mods: Vec::new(),
},
simulation_distance: game.settings.simulation_distance as u32,
vsync: false,
fps_cap: None,
offscreen: game.options.offscreen,
game_dir: std::env::current_dir()?,
},
);
}
if let Some(directory) = std::env::var_os("HORIZON_NATIVE_CLIENT_PARTICLES_FIXTURE") {
game.run_native_client_particles_fixture(std::path::Path::new(&directory))?;
return Ok(None);
}
if let Some(directory) = std::env::var_os("HORIZON_BOAT_RIDER_FIXTURE") {
game.run_boat_rider_fixture(std::path::Path::new(&directory))?;
return Ok(None);
}
if let Some(directory) = std::env::var_os("HORIZON_BOAT_AUTHORITY_FIXTURE") {
game.run_boat_authority_fixture(std::path::Path::new(&directory))?;
return Ok(None);
}
if let Ok(spec) = std::env::var("HORIZON_DISPENSE_FIXTURE") {
game.run_component_harness(integrated::ComponentHarness::Dispenser(spec))?;
return Ok(None);
}
if let Ok(spec) = std::env::var("HORIZON_SCULK_FIXTURE") {
game.run_component_harness(integrated::ComponentHarness::Sculk(spec))?;
return Ok(None);
}
if game.options.execution_role == execution_role::ExecutionRole::DedicatedServer {
game.run_dedicated()?;
return Ok(None);
}
match game.options.world.clone() {
_ if game.options.server.is_some() => {
let (address, name) = (
game.options.server.clone().unwrap_or_default(),
game.options.player_name(),
);
game.connect_server(&address, &name)?;
if let Some(report) = std::env::var_os("HORIZON_NET_REPORT") {
game.run_net_harness(report.as_ref())?;
return Ok(None);
}
}
Some(folder) => {
let (seed, creative) = (game.options.seed, game.options.creative);
if std::env::var_os("HORIZON_COMMAND_SCRIPT").is_some() {
// The loaded-command fixture pins the server's valid minimum.
// Client options reject simulationDistance2 (their UI starts at5),
// so an options.txt value cannot establish this prerequisite.
if std::env::var_os("HORIZON_HARNESS_LOADED_FIXTURE").is_some() {
game.settings.simulation_distance = 2;
}
// Headless, but with the same server and memory connection as play.
game.open_integrated(&folder, None, Some(seed), creative, None)?;
} else {
// Start after the window is handed over, so --world uses the
// same responsive initialization path as the title screen.
game.title = Some(
Title::new(
std::env::current_dir()?.join("saves"),
&game.options.resources,
)
.with_user(|| game.options.player_name()),
);
game.pending_entry = Some(PendingWorldEntry::Local {
folder,
name: None,
seed: Some(seed),
creative,
create: None,
});
}
}
None if handoff => {}
None => {
let mut title = Title::new(
std::env::current_dir()?.join("saves"),
&game.options.resources,
)
.with_user(|| game.options.player_name());
title.last_server = game.settings.file.string("lastServer");
title.skip_multiplayer_warning = game.settings.file.bool("skipMultiplayerWarning");
// Gui.addInitialScreens: the accessibility onboarding comes first.
if game.settings.file.bool("onboardAccessibility") {
title.start_onboarding();
}
game.title = Some(title);
}
}
if std::env::var_os("HORIZON_COMMAND_SCRIPT").is_some()
&& std::env::var_os("HORIZON_COMMAND_OUTPUT").is_some()
{
game.wait_command_harness()?;
return Ok(None);
}
Ok(Some(game))
}
@@ -654,9 +654,21 @@ impl Game<'_> {
before.clear();
}
let mut ids: Vec<(u32, bool)> = Vec::new();
// ServerLevel.tick ticks only the entities in entity-ticking chunks,
// and handlePortal runs in their tick: past the simulation distance an
// entity's portal time and cooldown wait, kept as they are.
let entity_ticking = self.entity_ticking_area();
let mut waiting: Vec<u32> = Vec::new();
let tracked = &self.portals.entities;
for_each_entity!(entity_lists_of!(self), entity => {
if entity.portal_size().is_some() && entity.is_vehicle() == vehicles {
let at = entity.position();
if !entity_ticking(at.x.floor() as i32, at.z.floor() as i32) {
if tracked.contains_key(&entity.id()) {
waiting.push(entity.id());
}
continue;
}
if entity.portal_from().is_none() {
before.insert(entity.id(), entity.position());
}
@@ -666,7 +678,11 @@ impl Game<'_> {
}
});
self.portals.before = before;
let present: std::collections::HashSet<u32> = ids.iter().map(|(id, _)| *id).collect();
let present: std::collections::HashSet<u32> = ids
.iter()
.map(|(id, _)| *id)
.chain(waiting.iter().copied())
.collect();
// Each pass keeps the other group's states.
let (boats, carts) = (&self.boats, &self.carts);
self.portals.entities.retain(|id, _| {
@@ -840,16 +856,22 @@ impl Game<'_> {
}
let mut inside: Vec<(u32, BlockPos)> = Vec::new();
let mut portal_sections = std::mem::take(&mut self.portals.sections);
// Only the entities that tick (in entity-ticking chunks) move, so only
// they can have swept into a portal.
let entity_ticking = self.entity_ticking_area();
// The first portal block each entity's box swept through since the
// start of its tick (a stuck arrow that did not move enters none).
for_each_entity!(entity_lists_of!(self), entity => {
let Some((width, height)) = entity.portal_size() else {
continue;
};
let (id, to) = (entity.id(), entity.position());
if !entity_ticking(to.x.floor() as i32, to.z.floor() as i32) {
continue;
}
if !entity.portal_sweeps() || !entity.can_use_portal(self) {
continue;
}
let (id, to) = (entity.id(), entity.position());
let swept_later = match only {
Some(ids) => !ids.contains(&id),
None => ridden.contains(&id),
@@ -0,0 +1,407 @@
//! Key and mouse mappings in play: toggled sneak and sprint, keys after rebinding, keys held
//! across screens, the hotbar's wheel and bumper steps, and mouse buttons while playing.
use super::*;
impl Game<'_> {
/// Keep the held-key state of toggled sneak and sprint in step with their mapping.
/// `KeyMapping.resetToggleKeys`: every toggle mapping up, and the latched sneak and sprint
/// keys with it.
pub(super) fn reset_toggle_keys(&mut self) {
for key in &mut self.toggles.0 {
key.reset();
}
self.sync_toggle(0);
self.sync_toggle(1);
self.left = false;
self.right = false;
}
/// key.smoothCamera from any device toggles the cinematic camera in play.
pub(super) fn smooth_camera_action(&mut self) {
if self.screen == Screen::Playing {
self.smooth_camera = !self.smooth_camera;
}
}
pub(super) fn sync_toggle(&mut self, slot: usize) {
let key = [KeyCode::ShiftLeft, KeyCode::ControlLeft][slot];
if self.toggles.is_down(slot) {
self.keys.insert(key);
} else {
self.keys.remove(&key);
}
}
/// Let a held sneak, sprint or modifier key go when the keyboard reports
/// its modifier up. A release does not always reach the mapping: a screen
/// reads presses only, and an unfocused window is given no release at all,
/// so the latch would keep the player sneaking or sprinting until the key
/// is tapped again. The modifier state is what the keyboard itself
/// asserts, so it settles the question. A mapping that toggles, or one a
/// pad latched, keeps its state: `set_down(false, needs_toggle)` leaves
/// those alone, and a toggle the player asked for is meant to outlive the
/// key. A mapping rebound away from its modifier is left alone too: the
/// modifier says nothing about it, and so is one a controller holds.
///
/// Only `physical_keys` is cleared directly here; the logical `self.keys`
/// entries for sneak and sprint are left to the toggle loop below, because
/// they stand for the mapping and not the physical Shift or Control.
/// `Screen.hasShiftDown` and `hasControlDown` read the physical state
/// (vanilla's `InputConstants.isKeyDown`), so a Shift no one is holding
/// makes every inventory click a shift-click and every throw a whole-stack
/// drop. Those do not care what sneak and sprint are bound to. A modifier
/// says nothing about which side is down, so one being up means both
/// Shifts, or both Controls, are.
pub(super) fn heal_hold_latches(&mut self) {
let (shift, control) = (self.modifiers.shift_key(), self.modifiers.control_key());
if !shift {
for key in [KeyCode::ShiftLeft, KeyCode::ShiftRight] {
self.physical_keys.remove(&key);
}
}
if !control {
for key in [KeyCode::ControlLeft, KeyCode::ControlRight] {
self.physical_keys.remove(&key);
}
}
for (slot, mapping, needs_toggle) in [
(0, "key.sneak", self.settings.toggle_crouch),
(1, "key.sprint", self.settings.toggle_sprint),
] {
let held = match horizon_client::keybinds::key_code(self.settings.keys.get(mapping)) {
Some(KeyCode::ShiftLeft | KeyCode::ShiftRight) => shift,
Some(KeyCode::ControlLeft | KeyCode::ControlRight) => control,
_ => continue,
};
// A controller's stick click acts as the key without setting the modifier: it is held
// while the pad holds it (or its release waits for a tick), not when the keyboard says.
let pad = self.pad.holds_action(&self.settings.controller, mapping);
if !held && !pad {
self.toggles.0[slot].set_down(false, needs_toggle);
self.sync_toggle(slot);
}
}
}
/// Whether the other device still holds the sneak or sprint mapping `source` released.
pub(super) fn toggle_held_elsewhere(&self, slot: usize, key: KeyCode, source: Source) -> bool {
match source {
// A pad's toggle-sneak isn't holding it: it has no release that would end it.
Source::Keyboard => {
!(slot == SNEAK && self.settings.controller.toggle_sneak)
&& self
.pad
.holds_action(&self.settings.controller, ["key.sneak", "key.sprint"][slot])
}
Source::Pad => self.physical_keys.iter().any(|physical| {
self.settings
.keys
.translate_all(*physical)
.contains(&Ok(key))
}),
Source::Agent => false,
}
}
/// Apply a physical key to every mapping bound to it.
pub(super) fn mapped_key_event(
&mut self,
key: KeyCode,
pressed: bool,
repeat: bool,
) -> Result<()> {
for mapped in self.settings.keys.translate_all(key) {
match mapped {
Ok(k) => {
self.mapped_key(k, pressed, repeat, key, Source::Keyboard)?;
}
Err(button) => {
let action = match (pressed, repeat) {
(false, _) => KeyAction::Release,
(_, false) => KeyAction::Press,
(_, true) => KeyAction::Repeat,
};
if let Some(pressed) = keyboard_button(
gameplay_has_keyboard(
self.screen,
self.title.is_some(),
self.screen_over_playing(),
),
action,
) {
if self.shared_default_acts(button, horizon_client::keybinds::key_name(key))
{
self.mouse_mapping(button, pressed, Source::Keyboard)?;
}
} else if container_key_clones(button, action) {
self.inventory_pick_key();
}
}
}
}
Ok(())
}
/// A key event after rebinding, as the default key of its mapping (the
/// keyboard and controllers both end here). `raw` is the physical key
/// the event started from (`key` where the caller started from no window
/// key): the screens act in that keyspace (`Screen.keyPressed`), where
/// `key`, the vanilla default the mapping translated to, may itself be
/// another mapping's rebound key. `source` is the device the event came
/// from: a key stays held while any device holds it.
pub(super) fn mapped_key(
&mut self,
key: KeyCode,
pressed: bool,
repeat: bool,
raw: KeyCode,
source: Source,
) -> Result<()> {
// Sneak and sprint are ToggleKeyMappings: a press (or a key
// repeat) flips them when toggling; only releases reach them
// behind a screen (KeyboardHandler.keyPress).
let toggle = match key {
KeyCode::ShiftLeft => Some((0, self.settings.toggle_crouch)),
KeyCode::ControlLeft => Some((1, self.settings.toggle_sprint)),
_ => None,
};
if let Some((slot, option)) = toggle {
let action = match (pressed, repeat) {
(false, _) => KeyAction::Release,
(_, false) => KeyAction::Press,
(_, true) => KeyAction::Repeat,
};
// One device letting go doesn't let go for the other still holding it.
if !pressed && self.toggle_held_elsewhere(slot, key, source) {
return Ok(());
}
let screen_open = !gameplay_has_keyboard(
self.screen,
self.title.is_some(),
self.screen_over_playing(),
);
self.toggles.key(slot, action, screen_open, option);
self.sync_toggle(slot);
if !pressed {
return Ok(());
}
if self.keys.raw(&key) {
self.keys.press(key, source);
}
} else if !pressed {
self.keys.release(&key, source);
return Ok(());
} else {
self.keys.press(key, source);
}
// KeyboardHandler.keyPress: a repeat (InputConstants.REPEAT) reaches
// Screen.keyPressed and KeyMapping.click like a press, so holding
// key.drop keeps throwing, in game and over a menu slot.
if repeat && key != KeyCode::KeyQ {
return Ok(());
}
self.key_pressed(key, raw)
}
/// `KeyMapping.releaseAll` when a screen opens and
/// `restoreToggleStatesOnScreenClosed` when it closes.
pub(super) fn track_toggle_screens(&mut self) {
let dialog = self.dialog_open();
drop_held_behind_dialog(dialog, &mut self.keys, &mut self.left, &mut self.right);
let playing = gameplay_has_keyboard(
self.screen,
self.title.is_some(),
self.screen_over_playing(),
);
if playing == self.was_playing {
return;
}
self.was_playing = playing;
let options = [
self.settings.toggle_crouch,
self.settings.toggle_sprint,
self.settings.toggle_attack,
self.settings.toggle_use,
];
if playing {
self.toggles.screen_closed(options);
} else {
self.toggles.screen_opened(options);
}
self.sync_toggle(0);
self.sync_toggle(1);
self.left = self.toggles.is_down(2);
self.right = self.toggles.is_down(3);
}
/// `MouseHandler.onScroll`: the hotbar (or the spectator menu) takes the wheel only when no
/// screen is open; a book, lectern, sign or prompt drawn over gameplay is one.
pub(super) fn hotbar_takes_wheel(&self) -> bool {
self.screen == Screen::Playing
&& !self.screen_over_playing()
&& self.sleeping.is_none()
&& self.player.is_some()
}
/// A mod's `MouseScrolling` cancels the step about to turn the hotbar.
pub(super) fn hotbar_scroll_canceled(&mut self, scroll: [f64; 2], steps: [i32; 2]) -> bool {
let mut canceled = false;
self.native_mouse_scrolling(
scroll,
steps,
[
self.physical_buttons.contains(&MouseButton::Left),
self.physical_buttons.contains(&MouseButton::Middle),
self.physical_buttons.contains(&MouseButton::Right),
],
[self.cursor.0, self.cursor.1],
glfw_modifiers(self.modifiers),
&mut canceled,
);
canceled
}
/// What one whole wheel step does in play (`MouseHandler.onScroll`): a spectator's menu or
/// flying speed, else the selected hotbar slot.
pub(super) fn hotbar_wheel_step(&mut self, wheel: i32, vertical_steps: i32) {
if self.spectator() && self.spectator_gui.is_menu_active() {
self.spectator_scroll(-wheel);
} else if self.spectator() {
if let Some(player) = &mut self.player {
player.flying_speed = horizon_client::mouse::spectator_flying_speed(
player.flying_speed,
vertical_steps,
);
}
} else {
self.selected = horizon_client::mouse::ScrollWheelHandler::next_selection(
f64::from(wheel),
self.selected as i32,
9,
) as usize;
}
}
/// A step of the hotbar from a controller's bumper: one wheel notch, down for the next slot,
/// through everything the wheel goes through.
pub(super) fn hotbar_step(&mut self, next: bool) {
let wheel = if next { -1 } else { 1 };
if self.hotbar_takes_wheel()
&& !self.native_wheel_event(wheel as f32)
&& !self.hotbar_scroll_canceled([0.0, f64::from(wheel)], [0, wheel])
{
self.hotbar_wheel_step(wheel, wheel);
}
}
/// A mouse mapping pressed or let go by `source`. A release waits while another device holds
/// the mapping, so letting go of one can't end what the other still presses, as for keys
/// (`HeldKeys`).
pub(super) fn mouse_mapping(
&mut self,
button: MouseButton,
pressed: bool,
source: Source,
) -> Result<()> {
if !pressed && self.mouse_mapping_held_elsewhere(button, source) {
return Ok(());
}
self.play_mouse(button, pressed)
}
/// Whether a device other than `source` holds what `button` stands for. Asks each device's own
/// live state rather than keeping a count: a screen takes a mouse release without telling the
/// mappings, and a count would then hold the attack for good. A script keeps no such state, so
/// nothing waits for a script's mouse hold.
pub(super) fn mouse_mapping_held_elsewhere(&self, button: MouseButton, source: Source) -> bool {
let mapping = match button {
MouseButton::Left => "key.attack",
MouseButton::Right => "key.use",
_ => return false,
};
match source {
Source::Keyboard | Source::Agent => {
self.pad.holds_action(&self.settings.controller, mapping)
}
Source::Pad => {
let keys = &self.settings.keys;
self.physical_buttons
.iter()
.any(|held| keys.translate_mouse_all(*held).contains(&Err(button)))
|| self
.physical_keys
.iter()
.any(|held| keys.translate_all(*held).contains(&Err(button)))
}
}
}
/// Two mappings with one default button are separate mappings all the same
/// (`Minecraft.handleKeybinds`): whether the middle-button action a physical `input` translated
/// to is one of those it is bound to, for this player now.
pub(super) fn shared_default_acts(&self, button: MouseButton, input: Option<&str>) -> bool {
button != MouseButton::Middle
|| input.is_none_or(|input| self.settings.keys.middle_acts(input, self.spectator()))
}
/// A mouse button while playing (window or control socket).
pub(super) fn play_mouse(&mut self, button: MouseButton, pressed: bool) -> Result<()> {
if pressed {
self.pvp_click(button);
}
if self.sleeping.is_some() {
return Ok(());
}
// key.spectatorHotbar (the middle button) opens the spectator menu
// and uses its selected item.
if button == MouseButton::Middle && self.spectator() {
if pressed {
self.spectator_action_key();
}
return Ok(());
}
if self.remote.is_some() {
return self.remote_mouse(button, pressed);
}
match button {
MouseButton::Left => {
// KeyMapping.click: Minecraft.tick starts the attack.
if pressed {
self.attack_clicks += 1;
}
self.toggles
.button(2, pressed, false, self.settings.toggle_attack);
self.left = self.toggles.is_down(2);
}
MouseButton::Right => {
self.toggles
.button(3, pressed, false, self.settings.toggle_use);
self.right = self.toggles.is_down(3);
// handleKeybinds consumes use clicks without acting while an
// item is in use. Minecraft.tick runs them after the attack
// clicks, so a place and a break in one tick replace the block.
if pressed && self.using.is_none() {
self.use_clicks += 1;
}
}
MouseButton::Middle if pressed => {
// handleKeybinds: the number keys select before key.pickItem.
self.select_queued_hotbar();
// Minecraft.pickBlockOrEntity -> the server's handlePickItemFromBlock:
// the block's clone item, with its block entity's data on Ctrl in
// creative, picked from the inventory (`pick_item`).
if let Some(entity) = self.pick_entity_hit() {
// handlePickItemFromEntity: the entity's pick result.
if let Some(stack) = entity.and_then(|id| self.entity_pick_result(id)) {
let infinite = self.creative;
horizon_client::pick_item::pick(
&mut self.inventory[..36],
&mut self.selected,
&stack,
infinite,
);
}
} else if let Some(hit) = self.pick() {
let include_data = self.creative && self.has_control_down();
if let Some(stack) = self.picked_stack(hit.pos, include_data) {
let infinite = self.creative;
horizon_client::pick_item::pick(
&mut self.inventory[..36],
&mut self.selected,
&stack,
infinite,
);
}
}
}
_ => {}
}
Ok(())
}
}
@@ -0,0 +1,330 @@
//! The mouse in play: the look it turns, the pointer grab (`MouseHandler.grabMouse` /
//! `releaseMouse`), the cursor icon, and pausing a world whose window loses focus.
use super::*;
impl Game<'_> {
/// The options `MouseHandler.turnPlayer` reads.
pub(super) fn look_options(&self) -> LookOptions {
LookOptions {
sensitivity: f64::from(self.settings.sensitivity),
smooth_camera: self.smooth_camera,
scoping: self.scoping(),
invert_x: self.settings.invert_x,
invert_y: self.settings.invert_y,
}
}
/// `MouseHandler.handleAccumulatedMovement` and `Entity.turn`, once per frame.
/// An agent moving the mouse (`mouse-move`) counts as a grabbed pointer in
/// an active window, as it cannot grab the real one.
pub(super) fn apply_mouse_look(&mut self) {
let look = self.look_options();
let time = self.started.elapsed().as_secs_f64();
let pointer = self.captured || self.agent_pointer;
let grabbed = pointer && self.screen == Screen::Playing && self.player.is_some();
let active = self.focused || self.agent_pointer;
if let Some((xo, yo)) = self
.mouse
.handle_accumulated_movement(time, active, grabbed, look)
{
self.look_turn(xo, yo);
}
}
/// A look from any device, in `Entity.turn` units: the tutorial's "look
/// around" step hears it and Horizon's zoom slows it, for the mouse and a
/// controller alike.
pub(super) fn look_turn(&mut self, x: f64, y: f64) {
self.tutorial.mouse(x, y);
let zoom = self.zoom_turn_scale();
self.turn_player(x * zoom, y * zoom);
}
/// `Minecraft.pause`: a single-player game with a pausing screen open.
pub(super) fn pauses_game(&self) -> bool {
self.has_singleplayer_server()
&& !self.is_published()
&& !self.has_split_players()
&& self.title.is_none()
&& (matches!(
self.screen,
Screen::Paused
| Screen::Options
| Screen::Stats
| Screen::Advancements
| Screen::WorldOptions
| Screen::Friends
| Screen::Social
| Screen::ServerLinks
| Screen::ConfirmLink
| Screen::DialogWarning
| Screen::CommandBlock
| Screen::DebugOptions
| Screen::HudEditor
) || self.book.is_some()
|| self.win_screen_pauses())
}
/// A screen open over gameplay while `screen` stays `Playing`: a book or
/// lectern, a sign, a server dialog, the code of conduct, a link or
/// server pack prompt (vanilla's `Minecraft.screen` is set for each).
pub(super) fn screen_over_playing(&self) -> bool {
self.book.is_some() || self.sign_edit.is_some() || self.prompt_open()
}
/// A prompt is up: over the world or over another open screen, it takes the input and is
/// answered first, in the order of `handle_window_event`'s arms and of what draws on top.
pub(super) fn prompt_open(&self) -> bool {
self.dialog_open()
|| self.code_of_conduct.is_some()
|| self.link_prompt.is_some()
|| self.command_prompt.is_some()
|| self.server_packs.prompt.is_some()
}
/// `Minecraft.pauseIfInactive`: a window without focus for more than 500 ms
/// pauses the game. An open screen (books, signs, the pack prompt, a server
/// dialog) stays instead of pausing (`Gui.setPauseScreen`).
pub(super) fn pause_if_inactive(&mut self) {
if self
.focus_lost
.is_some_and(|t| t.elapsed() > Duration::from_millis(500))
&& self.control.is_none()
&& self.screen == Screen::Playing
&& self.player.is_some()
&& !self.options.no_pause
&& self.settings.file.bool("pauseOnLostFocus")
&& !self.pad_keeps_playing_unfocused()
&& self.book.is_none()
&& self.sign_edit.is_none()
&& self.server_packs.prompt.is_none()
&& !self.dialog_open()
{
self.pause_focus = None;
self.screen = Screen::Paused;
}
}
/// `KeyMapping.setAll`: every key physically held is held again, as the
/// mapping it is bound to, so a key pressed or kept down behind a screen
/// counts once the game has the keyboard back. A sneak or sprint that
/// toggles keeps its toggle state (`shouldSetOnIngameFocus`).
pub(super) fn restore_held_keys(&mut self) {
let held: Vec<KeyCode> = self.physical_keys.iter().copied().collect();
let toggles = [self.settings.toggle_crouch, self.settings.toggle_sprint];
for key in held {
for mapped in self.settings.keys.translate_all(key) {
match mapped {
Ok(slot_key @ (KeyCode::ShiftLeft | KeyCode::ControlLeft)) => {
let slot = usize::from(slot_key == KeyCode::ControlLeft);
if !toggles[slot] {
self.toggles.0[slot].set_down(true, false);
self.sync_toggle(slot);
}
}
Ok(other) => {
self.keys.insert(other);
}
Err(_) => {}
}
}
}
}
/// `MouseHandler.grabMouse` / `releaseMouse`. Both put the pointer at
/// the window's centre, so a screen opened from gameplay (inventory,
/// chest, pause, chat, sign, book, death) starts with the cursor in the
/// middle instead of wherever the system last left it. Releasing when
/// already released does nothing, so moving from screen to screen keeps
/// the cursor where it is. Like GLFW's `glfwSetCursorPos`, nothing warps
/// while the window is unfocused (losing focus releases the pointer).
pub(super) fn capture(&mut self, capture: bool) {
// A guest's action (`as_guest`) opens and closes screens on the
// guest's own client: the window's pointer stays the host's (#687).
if self.lan_acting.is_some() {
return;
}
// MouseHandler.grabMouse never captures an inactive window, and vanilla
// grabs only on `setScreen(null)`: the pack prompt and server dialogs
// are screens over the world that keep the pointer.
if capture
&& (!self.focused
|| self.server_packs.prompt.is_some()
|| self.dialog_open()
|| self.command_prompt.is_some())
{
return;
}
// The container screen's press state belongs to the screen: a screen
// that takes the pointer over starts with its own state, as
// `AbstractContainerScreen` does, so a press whose release never
// arrived (the pointer left the window) cannot wedge the next
// screen's quick move and clicks.
self.reset_inventory_clicks();
if !capture {
self.stop_mining();
}
// The real pointer takes over from an agent's.
self.agent_pointer = false;
// Splitscreen: another player has the pointer; this one's menus leave it alone.
if !self.keyboard_mouse {
self.captured = false;
self.capture_mode = None;
return;
}
if capture && !self.captured && !cfg!(target_os = "macos") {
// MouseHandler.grabMouse: KeyMapping.setAll unless
// InputQuirks.RESTORE_KEY_STATE_AFTER_MOUSE_GRAB is off (macOS).
self.restore_held_keys();
}
let Some(window) = &self.window else { return };
let size = self.renderer.as_ref().map_or_else(
|| window.inner_size().into(),
|r| [r.config.width, r.config.height],
);
let [vx, vy] = self.view_at.map(f64::from);
let centre = winit::dpi::PhysicalPosition::new(
vx + f64::from(size[0]) / 2.0,
vy + f64::from(size[1]) / 2.0,
);
let warp = |window: &Window| {
let _ = window.set_cursor_position(centre);
};
let scale = HudBatch::new(size).scale;
let was_grabbed = self.captured;
if self.options.offscreen && !self.split_window {
// A genuinely hidden `--offscreen` run leaves the system pointer where
// the person at the computer has it. Its grab is internal (an
// agent turns the view with `mouse-move`).
if capture {
self.mouse.set_ignore_first_move();
}
self.captured = capture;
self.capture_mode = None;
} else if capture {
self.mouse.set_ignore_first_move();
// macOS warps by re-associating the mouse with the pointer,
// which undoes a Locked grab and leaves the pointer free: warp
// first there. Wayland moves a pointer only while it is locked,
// so everywhere else warp after grabbing (Windows does both).
#[cfg(target_os = "macos")]
warp(window);
// Windows clips a Locked pointer to a 1x1 rectangle where it is, and `SetCursorPos`
// stays inside that clip: warp first, or the pointer stays frozen wherever it was
// (over another window, on another monitor) instead of the window's centre (#6076).
#[cfg(windows)]
if self.focused {
warp(window);
}
self.capture_mode = if window.set_cursor_grab(CursorGrabMode::Locked).is_ok() {
Some(CursorGrabMode::Locked)
} else if window.set_cursor_grab(CursorGrabMode::Confined).is_ok() {
Some(CursorGrabMode::Confined)
} else {
None
};
self.captured = self.capture_mode.is_some();
// Windows already warped above, inside the clip's own position.
#[cfg(not(any(target_os = "macos", target_os = "windows")))]
if self.captured && self.focused {
warp(window);
}
} else {
if self.captured {
// Wayland moves a pointer only as the locked pointer's
// position hint, which the compositor applies as the lock
// goes (sway and Hyprland do): set it before ungrabbing.
// X11, Windows and macOS warp, so warp again once free
// (Wayland refuses that one).
if self.focused {
warp(window);
}
let _ = window.set_cursor_grab(CursorGrabMode::None);
if self.focused {
warp(window);
}
} else {
let _ = window.set_cursor_grab(CursorGrabMode::None);
}
self.captured = false;
self.capture_mode = None;
}
// MouseHandler.grabMouse and releaseMouse: the mouse position is
// the window's centre whenever the pointer's grab state changes, so
// a screen opened from gameplay starts with the cursor in the middle
// and the game starts with it away from the screen's last spot.
if let Some(pos) = horizon_client::mouse::mouse_position_after_grab_change(
capture,
was_grabbed,
size,
scale,
) {
self.cursor = pos;
}
if !self.options.offscreen || self.split_window {
window.set_cursor_visible(!self.captured);
}
}
/// A Linux window manager can release the native pointer grab while the
/// window remains focused. Reapply the recorded mode on the next gameplay
/// click or wheel event, without warping the pointer or consuming input.
pub(super) fn reassert_pointer_capture(&mut self) {
#[cfg(target_os = "linux")]
if self.screen == Screen::Playing
&& self.focused
&& self.captured
&& !self.options.offscreen
&& let (Some(window), Some(mode)) = (&self.window, self.capture_mode)
{
let other = match mode {
CursorGrabMode::Locked => CursorGrabMode::Confined,
CursorGrabMode::Confined => CursorGrabMode::Locked,
CursorGrabMode::None => return,
};
self.capture_mode = if window.set_cursor_grab(mode).is_ok() {
Some(mode)
} else if window.set_cursor_grab(other).is_ok() {
Some(other)
} else {
None
};
self.captured = self.capture_mode.is_some();
window.set_cursor_visible(!self.captured);
}
}
/// `GuiGraphicsExtractor.applyCursor` -> `Window.selectCursor` at the end
/// of a frame: the cursor the frame's widgets asked for, set on the window
/// only when it changes.
pub(super) fn apply_cursor_icon(&mut self) {
use horizon_client::widgets::Cursor;
let wanted = horizon_client::widgets::take_cursor();
// The widgets under the keyboard's hidden pointer aren't under the
// mouse (`handleCursor` asks only for a hovered widget).
let effective = if self.settings.allow_cursor_changes && !self.key_focus_driving() {
wanted
} else {
Cursor::Arrow
};
if effective == self.cursor_icon || !self.keyboard_mouse {
return;
}
if let Some(window) = &self.window {
window.set_cursor(match effective {
Cursor::Arrow => winit::window::CursorIcon::Default,
Cursor::PointingHand => winit::window::CursorIcon::Pointer,
Cursor::NotAllowed => winit::window::CursorIcon::NotAllowed,
});
}
self.cursor_icon = effective;
}
/// LevelLoadingScreen.onClose -> Gui.setScreen(null) -> grabMouse.
pub(super) fn capture_loaded_world(&mut self) {
// Loading may finish after focus was lost or another screen opened.
if self.title.is_none() && self.screen == Screen::Playing {
self.capture(true);
}
}
/// The window came back into focus after holding the pointer: the system
/// dropped the grab with the focus, and vanilla's grab outlives it
/// (`MouseHandler.mouseGrabbed` stays true while GLFW keeps the cursor
/// mode), so the game takes the pointer again without waiting for a
/// click. A screen that is open keeps it free, as releasing the pointer
/// for that screen did: it is the screen, not the focus, that shows it.
pub(super) fn regrab_on_refocus(&mut self) {
if std::mem::take(&mut self.regrab_on_refocus) && self.screen == Screen::Playing {
self.capture(true);
}
}
}
@@ -0,0 +1,72 @@
//! `Entity.handlePortal` runs in the entity's own tick, and `ServerLevel.tick`
//! ticks only the entities in entity-ticking chunks: past the simulation
//! distance a mob in a nether portal doesn't cross, and a mob cooling down
//! from one keeps its cooldown until it ticks again.
use super::native_machines::tests::server_game;
use horizon_client::chunk::Chunk;
use horizon_client::mobs::Mob;
use horizon_client::nether_portal::ENTITY_DELAY;
use horizon_core::geometry::Vec3;
use std::sync::Arc;
#[test]
#[ignore = "needs prepared resources in HORIZON_TEST_RESOURCES"]
fn mobs_past_the_simulation_distance_neither_enter_portals_nor_cool_down() {
let mut game = server_game();
game.settings.simulation_distance = 4;
game.settings.render_distance = 12;
let registry = game.pack.assets.registry;
let stone = registry.default_state("minecraft:stone").unwrap();
let portal = registry.default_state("minecraft:nether_portal").unwrap();
let zombie = game
.res
.mob_types()
.get("minecraft:zombie")
.unwrap()
.clone();
// The player in chunk (0, 0); chunk (2, 0) is inside the simulation
// distance, chunk (8, 0) loaded and in view but past it. In each, one
// zombie stands in a portal (z 8) and one on stone, cooling down (z 12).
game.player = Some(
horizon_client::motion::PlayerMotion::new(game.motion, Vec3::new(8.5, 65.0, 8.5)).unwrap(),
);
for (cx, x, in_portal, cooling) in [(2, 40, 1, 3), (8, 136, 2, 4)] {
game.world
.chunks
.insert((cx, 0), Arc::new(Chunk::empty(cx, 0)));
for z in [8, 12] {
game.world.set(x, 63, z, stone).unwrap();
}
game.world.set(x, 64, 8, portal).unwrap();
game.world.set(x, 65, 8, portal).unwrap();
let at = |z: f64| Vec3::new(f64::from(x) + 0.5, 64.0, z);
game.mobs
.push(Mob::new(in_portal, zombie.clone(), at(8.5), 0.0));
game.mobs
.push(Mob::new(cooling, zombie.clone(), at(12.5), 0.0));
game.set_portal_cooldown(cooling);
}
game.update_chunk_tickets();
let ticking = game.entity_ticking_area();
assert!(ticking(40, 8), "chunk (2, 0) ticks entities");
assert!(
!ticking(136, 8),
"chunk (8, 0) is past the simulation distance"
);
for _ in 0..3 {
game.handle_entity_portals();
game.find_entity_portals();
}
let state = |id| game.portals.entities.get(&id);
let here = |id| game.mobs.iter().any(|m| m.id == id);
// A mob crosses a nether portal at once: the ticking zombie has gone.
assert!(!here(1), "the ticking zombie went through its portal");
assert!(here(2), "the far zombie is still here");
assert!(
state(2).is_none(),
"the far zombie never entered its portal"
);
assert_eq!(state(3).map(|s| s.cooldown), Some(ENTITY_DELAY - 3));
assert_eq!(state(4).map(|s| s.cooldown), Some(ENTITY_DELAY));
}
@@ -0,0 +1,177 @@
//! What a frame draws behind the screens: the title panorama, the level loading background, the
//! menu blur and transparent background, the world border wall, and the screens' render events.
use super::*;
impl Game<'_> {
/// `native_screen_render_post` (`ScreenEvent.Render.Post`) for the open
/// screen, once a frame; the Win and Options screens call this on their
/// own path. Reads `self.screen`, the one `hud_layers` drew. Not while
/// playing with no screen, nor while the server pack prompt hides the
/// open screen (`hud_layers` draws `Playing` then). Client only,
/// read-only: what a mod draws is its own.
pub(super) fn fire_screen_render_post(&self, batch: &mut HudBatch) {
let screen = self.screen;
if screen == Screen::Playing || self.server_packs.prompt.is_some() || self.book.is_some() {
return;
}
// slot_count mirrors slots() without allocating; keep them in step.
debug_assert_eq!(self.slot_count(), self.slots().len());
let view = self.screen_view(batch, screen);
self.native_screen_render_post(batch, &view);
}
/// `native_screen_render_post` (`ScreenEvent.Render.Post`) for the title's
/// own screen (`title`, `world_select`, `world_create`, `multiplayer`…),
/// once a frame, after it has drawn and before the toasts. Not when a
/// screen of the game's own is over the title (Options draws and fires
/// its own), nor while a dialog, a prompt or a connect or load hides it.
/// Client only, read-only: what a mod draws is its own.
pub(super) fn fire_title_screen_render_post(&self, batch: &mut HudBatch) {
if self.screen != Screen::Playing || self.screen_over_playing() || self.remote_loading() {
return;
}
let Some(view) = self.title_screen_view(batch) else {
return;
};
self.native_screen_render_post(batch, &view);
}
/// The frame shows the title's panorama, not a level: the title screen, or a
/// LevelLoadingScreen (Reason.OTHER), which draws it too.
pub(super) fn shows_panorama(&self) -> bool {
// The two cases that always had one: the title screen and waiting on
// a server. Left exactly as they were.
self.title.is_some() || self.remote_loading() || self.screen_wants_panorama()
}
/// Whether the screen on top asked for the panorama through
/// [`horizon_client::screen_draw::Backdrop`].
///
/// This is the opt-in path for Horizon's own screens: a screen sets its
/// `backdrop` and the renderer draws the panorama behind it, instead of
/// every such screen needing its own branch in `shows_panorama`. Vanilla
/// screens leave the backdrop at `None` and so never reach this.
///
/// Only in a menu: in a world the panorama would replace the world the
/// player is standing in, which is not what any of these screens want.
pub(super) fn screen_wants_panorama(&self) -> bool {
use horizon_client::screen_draw::Backdrop;
if self.player.is_some() {
return false;
}
self.ui
.options
.pack_screen
.as_ref()
.is_some_and(|p| p.backdrop == Backdrop::Panorama)
}
/// `LevelLoadingScreen.extractBackground`.
pub(super) fn draw_level_loading_background(
&self,
batch: &mut HudBatch,
reason: horizon_client::level_loading::Reason,
) {
use horizon_client::level_loading::Reason;
let atlas = &self.gui.atlas;
let (w, h) = (batch.width, batch.height);
match reason {
// The panorama and its blur are drawn by the renderer.
Reason::Other => {
horizon_client::ui::menu_background(batch, atlas, 0.0, 0.0, w, h, false)
}
Reason::NetherPortal => {
let overlay = hud_overlays::portal_overlay(w as i32, h as i32, 1.0);
hud_layout::paint(batch, atlas, &[overlay]);
}
Reason::EndPortal => batch.fill(atlas, 0.0, 0.0, w, h, rgba(20, 20, 20, 255)),
}
}
/// `GameRenderer.update`'s `requestedPostEffects`: `end_of_frame` (a resource
/// pack's own chain), then the server's `LocalPlayer.postEffects`. Only the
/// world is drawn through them.
pub(super) fn requested_post_effects(&self) -> Vec<String> {
if self.title.is_some() || self.player.is_none() {
return Vec::new();
}
std::iter::once("minecraft:end_of_frame".to_owned())
.chain(self.post_effects.iter().cloned())
.chain(self.spectated_post_effect.map(str::to_owned))
.collect()
}
/// `Screen.extractBlurredBackground` over the panorama or the world and
/// HUD, when `menuBackgroundBlurriness` is at least 1.
pub(super) fn menu_blur(&self) -> Option<f32> {
let blurred = self.remote_loading()
|| self.title.as_ref().is_some_and(|t| {
matches!(self.screen, Screen::Options | Screen::Win)
|| !matches!(t.mode, horizon_client::title::Mode::Main)
})
|| (self.title.is_none()
&& self.player.is_some()
&& (self.screen.blurs_background(self.pause_menu)
|| self.dialog_open()
|| (self.screen == Screen::Win && self.win_screen_pauses())))
|| self.screen_blur_requested.get();
let radius = self.settings.menu_blur as f32;
let mut radius = (blurred && radius >= 1.0).then_some(radius);
self.native_menu_background(&mut radius);
radius.filter(|r| r.is_finite() && (1.0..=64.0).contains(r))
}
/// `Screen.renderTransparentBackground`: draws the translucent dark background
/// behind an in-game screen (inventory, containers, creative, books, signs, editors),
/// giving native mods a chance to suppress it (`Flow::Cancel`) or apply menu blur / tiled background.
pub(super) fn render_transparent_background(&self, screen: &str, batch: &mut HudBatch) {
let mut canceled = false;
self.native_screen_transparent_background(screen, batch, &mut canceled);
if !canceled {
let atlas = &self.gui.atlas;
batch.fill(
atlas,
0.0,
0.0,
batch.width,
batch.height,
rgba(16, 16, 16, 160),
);
}
}
/// `LevelExtractor` / `LevelRenderer`: the world border wall this frame.
pub(super) fn border_draw(
&mut self,
camera: [f64; 3],
partial: f32,
) -> Option<horizon_client::gfx::BorderDraw> {
use horizon_client::border_render::{self, BorderRenderer};
let distance = f64::from(self.streaming.radius * 16);
border_render::extract(
&self.border,
partial,
camera,
distance,
&mut self.border_state,
);
// `LevelRenderer.repositionCamera`: the wall is rebuilt when the camera
// enters another `SectionPos` (it only holds the stretch in range).
let section = camera.map(|c| (c.floor() as i32) >> 4);
if self.border_section != Some(section) {
self.border_renderer.invalidate();
self.border_section = Some(section);
}
// Camera.depthFar, as the renderer's far plane.
let depth_far =
horizon_client::camera::depth_far(self.terrain_distance(), self.settings.cloud_range);
if !self
.border_renderer
.prepare(&self.border_state, camera, distance, depth_far)
{
return None;
}
let millis = self.visual_millis();
Some(horizon_client::gfx::BorderDraw {
vertices: self.border_renderer.vertices,
rebuilt: self.border_renderer.take_rebuilt(),
transforms: self
.border_renderer
.transforms(&self.border_state, camera, millis),
sides: BorderRenderer::sides(&self.border_state, camera, distance),
})
}
}
@@ -0,0 +1,246 @@
//! An item in use, tick by tick (`LivingEntity.startUsingItem`, `updatingUsingItem`,
//! `releaseUsingItem`, `stopUsingItem`): eating and drinking, goat horns, bundles, and the
//! vibrations a use makes.
use super::*;
impl Game<'_> {
/// `Consumable.startConsuming` for a held consumable: food needs
/// `Player.canEat` (`Consumable.canConsume`), anything else is always
/// consumed. The right click is held for `consume_seconds`.
pub(super) fn start_eating(&mut self, info: &horizon_client::items::ItemInfo) -> bool {
let Some(stack) = self.held().cloned() else {
return false;
};
if info.consumable.is_none()
|| (info.food.is_some()
&& (self.player.is_none() || !self.can_eat(&stack, info.can_always_eat)))
{
return false;
}
// as Consumable.startConsuming does, no time is eaten at once, without a use
// (the server's eating reaches a client through the inventory).
if let Some(consumable) = info.consumable.as_ref()
&& item_use::consumes_at_once(consumable.ticks())
{
if self.remote.is_none() {
// the cooldown of ItemStack.use's applyAfterUseComponentSideEffects.
self.apply_use_cooldown(&stack);
self.finish_consuming(info, consumable, &stack);
}
return true;
}
self.start_using_item();
true
}
/// `InstrumentItem.use` for a goat horn: the player holds it up for the
/// instrument's `use_duration`, its sound plays at the player
/// (`SoundSource.RECORDS`, volume `range / 16`), `INSTRUMENT_PLAY` is
/// posted, the used statistic counts and the horn is on cooldown as long.
/// A horn whose instrument is unknown fails, which still ends the click.
pub(super) fn use_instrument(&mut self, stack: &ItemStack) {
let Some(instrument) = self.res.items().instrument(stack) else {
return;
};
self.start_using_item();
self.play_player_bound_sound(&instrument.sound, 2, instrument.range / 16.0, 1.0, true);
self.post_entity_event(
"minecraft:instrument_play",
horizon_client::mobs::Who::Player,
);
if instrument.use_duration > 0.0 {
let group = horizon_client::cooldowns::group(stack, None);
self.add_cooldown(group, instrument.use_ticks());
}
self.award_stat("used", &stack.item, 1);
}
pub(super) fn consume_held(&mut self) {
if self.creative {
return;
}
let cell = self.held_mut();
if let Some(s) = cell.as_mut() {
s.count -= 1;
if s.count == 0 {
*cell = None;
}
}
}
pub(super) fn tick_using(&mut self) {
let Some(hand) = self.used_hand() else {
return;
};
self.with_hand(hand, Self::tick_used_item);
}
/// `LivingEntity.updatingUsingItem` for the item in use, its hand acting.
pub(super) fn tick_used_item(&mut self) {
let Some((slot, ticks)) = self.using else {
return;
};
let Some(stack) = self.stack_in(slot).cloned() else {
self.using = None;
return;
};
// Switching hotbar slots only ends a main-hand use.
let hand_changed = slot != self.selected && slot != shield::OFFHAND_SLOT;
if !self.right || hand_changed || self.screen != Screen::Playing {
self.using = None;
self.release_used_item(&stack, ticks, hand_changed);
return;
}
// ServerPlayer.updateUsingItem: USING_ITEM every tick of the use.
self.trigger_using_item(&stack);
let Some(info) = self.items().get(&stack.item).cloned() else {
self.using = None;
return;
};
// a mod's tick ran the use out: finished now, or frozen until let go
// for an item used on release (CrossbowItem.useOnRelease).
if !self.use_item_ticked(&stack, ticks) {
if &*stack.item != "minecraft:crossbow" {
self.complete_using_item(slot, &stack, &info);
}
return;
}
if self.blocks_attacks(&stack).is_some() {
// ShieldItem: used for 72000 ticks, i.e. until released.
self.item_on_use_tick(&stack, ticks);
self.using = Some((slot, ticks + 1));
return;
}
if self.tick_drinking(slot, ticks, &stack) {
if self.using.is_none() {
self.use_item_finished(&stack);
}
return;
}
if &*stack.item == "minecraft:bow" {
self.using = Some((slot, ticks + 1));
return;
}
if &*stack.item == "minecraft:crossbow" {
self.tick_crossbow(slot, ticks, &stack);
return;
}
// TridentItem and EnderEyeItem: used until released (an eye's
// getUseDuration 0 never counts down to finishUsingItem).
if matches!(&*stack.item, "minecraft:trident" | "minecraft:ender_eye") {
self.using = Some((slot, ticks + 1));
return;
}
// ItemStack.onUseTick: a spear stabs what its speed allows, until released.
if horizon_client::spear::Kinetic::of(&stack.item).is_some() {
self.spear_tick(&stack, ticks);
self.using = Some((slot, ticks + 1));
return;
}
if &*stack.item == "minecraft:spyglass" {
// SpyglassItem.getUseDuration (1200, as a mod left it), then
// completeUsingItem: finishUsingItem lowers it, and the finish hook.
match item_use::count_down(ticks, self.use_duration) {
Some(ticks) => self.using = Some((slot, ticks)),
None => self.complete_using_item(slot, &stack, &info),
}
return;
}
if let Some(duration) = self
.res
.items()
.instrument(&stack)
.map(|i| i.use_ticks().max(0) as u32)
{
// InstrumentItem.getUseDuration: held up that long. When it runs
// out, LivingEntity.stopUsingItem ends the use and causes the
// interaction vibration; letting go of the button already does.
if ticks + 1 < duration {
self.using = Some((slot, ticks + 1));
} else {
self.stop_using_item(&stack);
}
return;
}
if &*stack.item == "minecraft:brush" {
self.tick_brush(&stack, slot, ticks);
return;
}
if info.bundle {
self.tick_bundle(slot, ticks);
return;
}
if self.mod_use(&stack) {
self.tick_mod_use(slot, ticks, &stack);
return;
}
let Some(consumable) = info.consumable.as_ref() else {
self.using = None;
return;
};
// ItemStack.onUseTick: Consumable.shouldEmitParticlesAndSounds with
// the remaining ticks before this tick counts them down.
// the duration is getUseDuration's when the use started, as a mod's
// Start and Tick left it.
let remaining = self.use_duration - ticks as i32;
if consumable.should_emit(remaining) {
self.emit_consume(consumable, &stack, 5);
}
self.item_on_use_tick(&stack, ticks);
match item_use::count_down(ticks, self.use_duration) {
Some(ticks) => self.using = Some((slot, ticks)),
None => self.complete_using_item(slot, &stack, &info),
}
}
/// `BundleItem.onUseTick` and `getUseDuration` (200): the first tick and
/// then every second tick from the 11th on drop one stack out of the
/// bundle in `slot`; the use ends after 200 ticks.
pub(super) fn tick_bundle(&mut self, slot: usize, ticks: u32) {
const USE_DURATION: u32 = 200;
let remaining = USE_DURATION - ticks.min(USE_DURATION);
if ticks == 0 || (remaining < USE_DURATION - 10 && remaining.is_multiple_of(2)) {
self.drop_bundle_content(slot);
}
self.using = (ticks + 1 < USE_DURATION).then_some((slot, ticks + 1));
}
/// `LivingEntity.releaseUsingItem` (`Item.releaseUsing`) for `stack`,
/// used for `ticks`, its hand acting: a bow or a trident lets go (not
/// when its hand changed), a spyglass stops scoping, and a mod's own
/// release follows. A mod's `Stop` may skip the release. `stopUsingItem`
/// ends the use after it.
pub(super) fn release_used_item(&mut self, stack: &ItemStack, ticks: u32, hand_changed: bool) {
let canceled = !hand_changed && !self.use_item_stopped(stack, ticks);
let (release, spyglass) = item_use::release_parts(canceled, hand_changed);
match &*stack.item {
"minecraft:bow" if release => self.release_bow(stack, self.ticks_held(stack, ticks)),
"minecraft:trident" if release => self.release_trident(self.ticks_held(stack, ticks)),
"minecraft:spyglass" if spyglass => self.stop_spyglass(),
_ => {}
}
if release {
self.mod_release_using(stack, ticks);
}
self.stop_using_item(stack);
}
/// `LivingEntity.stopUsingItem`: the use of `stack` is over (`useItem` and
/// its remaining ticks are cleared), and when the use effects of the stack
/// ask for it, `ItemStack.causeUseVibration` sends an `ITEM_INTERACT_FINISH`
/// game event from the player, at its feet.
pub(super) fn stop_using_item(&mut self, stack: &ItemStack) {
self.using = None;
self.use_vibration(stack, "minecraft:item_interact_finish");
}
/// `ItemStack.causeUseVibration` for `stack` used by the player: the
/// `event` game event (`ITEM_INTERACT_START` when the use begins,
/// `ITEM_INTERACT_FINISH` when it ends) from the player, at its feet, when
/// the stack's use effects ask for interaction vibrations (the default).
pub(super) fn use_vibration(&mut self, stack: &ItemStack, event: &'static str) {
let default = self.items().get(&stack.item).map(|i| i.interact_vibrations);
if !item_use::interact_vibrations(stack, default) {
return;
}
let Some(p) = self.player.as_ref().map(|p| p.position) else {
return;
};
let ctx = self.player_context(None);
self.post_game_event(event, [p.x, p.y, p.z], ctx);
}
}
@@ -0,0 +1,380 @@
//! Entering a world without blocking the window: the deferred entry, world creation, the world
//! resources' background load, and the world's own content tables.
use super::*;
impl Game<'_> {
pub(super) fn defer_world_entry(&mut self, entry: PendingWorldEntry) -> Result<bool> {
self.poll_world_rest()?;
if self.rest_loader.is_none() {
return Ok(false);
}
self.perf.world_opening();
if self.title.is_none() {
self.title = Some(
Title::new(
std::env::current_dir()?.join("saves"),
&self.options.resources,
)
.with_user(|| self.options.player_name()),
);
}
self.pending_entry = Some(entry);
log::info!("Horizon: world entry waiting for world resources");
Ok(true)
}
pub(super) fn resume_world_entry(&mut self) -> Result<()> {
self.poll_integrated_start()?;
self.poll_world_rest()?;
self.poll_world_creation();
if self.rest_loader.is_some() {
return Ok(());
}
let on_world_screens = self.title.as_ref().is_some_and(|title| {
!matches!(
title.mode,
horizon_client::title::Mode::Main | horizon_client::title::Mode::Multiplayer(_)
)
});
world_loading::preload_world_data(
on_world_screens,
&self.options.resources,
self.pack.assets.registry,
);
if std::mem::take(&mut self.pending_pack_reload) {
self.reload_packs();
}
match self.pending_entry.take() {
Some(PendingWorldEntry::Local {
folder,
name,
seed,
creative,
create,
}) => {
self.open_world(&folder, name.as_deref(), seed, creative, create.as_deref())?;
}
Some(PendingWorldEntry::Server {
address,
name,
cookies,
lan,
}) => {
self.connect_server_with_options(&address, &name, cookies, lan)?;
}
Some(PendingWorldEntry::StudioReplay(path)) => {
let path_str = path.to_string_lossy().to_string();
if let Err(e) = self.open_studio_replay(&path_str) {
log::warn!("Horizon Studio: could not open {path_str}: {e}");
}
}
None => {}
}
Ok(())
}
/// `CreateWorldScreen.openCreateWorldScreen`: read the world generation
/// data the create screen describes, on a worker, then open the screen
/// (`title.preparing`).
pub(super) fn poll_world_creation(&mut self) {
let Some(title) = self.title.as_ref() else {
return;
};
if !title.preparing() {
return;
}
if self.creation_job.is_none() {
let dir = self.options.resources.join("worldgen");
let registry = self.pack.assets.registry;
// The chosen packs' worldgen over the game's own:
// `applyNewPackConfig` reloads with the new pack config.
let overrides = title
.creation_packs()
.map(|(dir, packs)| {
world_loading::creation_worldgen_overrides(
dir.as_deref(),
&self.options.resources,
&packs,
self.res.biomes(),
)
})
.unwrap_or_default();
self.creation_job = std::thread::Builder::new()
.name("world-creation".into())
.spawn(move || {
horizon_client::vanillagen::shared_data_with(&dir, &overrides, registry)
.map(|_| ())
.map_err(|e| e.to_string())
})
.ok();
return;
}
if !self
.creation_job
.as_ref()
.is_none_or(std::thread::JoinHandle::is_finished)
{
return;
}
let outcome = self.creation_job.take().and_then(|job| job.join().ok());
if let Some(title) = self.title.as_mut() {
match outcome {
Some(Ok(())) => title.finish_preparing(),
// `applyNewPackConfig`'s failure: back out of the read with
// the message, the Create screen's options intact.
outcome => {
let e = outcome
.and_then(|r| r.err())
.unwrap_or_else(|| "the read never ran".to_owned());
log::warn!("Horizon: preparing world creation failed: {e}");
// Clear the flag first: `failed` sets the error screen
// with Create as its back target, which
// `finish_preparing` would replace with a fresh world.
title.finish_preparing();
title.failed(format!(
"{}: {e}",
horizon_client::lang::get_or(
"createWorld.preparing",
"Preparing for world creation..."
)
));
}
}
}
}
pub(super) fn poll_world_rest(&mut self) -> Result<()> {
if let Some(loader) = &self.rest_loader
&& loader.ready()?
{
self.rest_loader
.take()
.ok_or("missing world loader")?
.finish()?;
}
Ok(())
}
// ---- the world's data packs' content tables ---------------------------
/// The content tables the world plays with: its data packs' over the
/// game's own when it has packs, `Resources.rest`'s own otherwise.
pub(super) fn items(&self) -> &Items {
match &self.world_tables {
Some(t) => &t.items,
None => self.res.items(),
}
}
pub(super) fn mob_suffocation(
&self,
) -> &horizon_world::suffocation::SuffocationRegistry<'static> {
self.world_tables
.as_ref()
.map_or_else(|| self.res.suffocation(), |t| &t.suffocation)
}
pub(super) fn recipes(&self) -> &Recipes {
match &self.world_tables {
Some(t) => &t.recipes,
None => self.synced_recipes().unwrap_or_else(|| self.res.recipes()),
}
}
pub(super) fn stations(&self) -> &horizon_client::stations::StationData {
match &self.world_tables {
Some(t) => &t.stations,
None => self.res.stations(),
}
}
/// The enchantments item names and tooltips read: a server's, with the
/// entries its data packs add, else the world's.
pub(super) fn enchantments(&self) -> &horizon_client::enchant::Enchantments {
match self.remote.as_ref().and_then(|r| r.enchantments.as_ref()) {
Some(e) => e,
None => &self.stations().enchantments,
}
}
/// The world's packs' content files, none without packs.
/// The biome table the world plays with, `None` before a world opens.
pub(super) fn packed_biomes(&self) -> Option<Arc<Biomes>> {
let table = world_loading::packed_biomes(
&self.world_root,
&self.options.resources,
self.res.biomes(),
&self.level.enabled_features,
);
(!Arc::ptr_eq(&table, self.res.biomes())).then_some(table)
}
/// What the chunk and far-terrain workers mesh with: the pack's context,
/// over the world's biomes when it has its own.
pub(super) fn worker_context(&self) -> Arc<WorkerContext> {
match &self.world_biomes {
Some(table) => self.pack.context_with(table.clone()),
None => self.pack.context.clone(),
}
}
pub(super) fn pack_files(&self) -> horizon_world::loot::PackOverlay<'_> {
pack_files(&self.world_tables)
}
/// Load the world's data packs' content tables (`None`: the world has no
/// packs, and `Resources.rest` stays in use). This re-reads the tables,
/// so it runs once per world open and on `/reload`.
pub(super) fn build_world_tables(
&self,
reload: bool,
enabled_features: &[String],
) -> Result<(Option<WorldTables>, horizon_client::health::HealthResources)> {
// The ask of this load, both here and on `/reload`: a native mod
// recomputes the pack files it contributes every time.
let mut contributed = Vec::new();
self.native_data_pack_files(&mut contributed);
let files = functions::overlay_files(
&self.world_root,
&self.options.resources,
self.cmds.vanilla_disabled,
enabled_features,
contributed,
);
let overlay = horizon_world::loot::PackOverlay { files: &files };
let root = &self.options.resources;
let base = if reload {
&self.health_resources
} else {
&self.motion.health
};
let health = base.with_packs(root, &overlay, reload)?;
// With no pack, `res` holds the tables, unless content mods switched
// live since it was loaded: their data is in the new root.
if files.is_empty() && !self.mods.data_switched {
return Ok((None, health));
}
let mut items = Items::load(root, self.pack.assets.registry, self.res.facts(), &overlay)?;
// Item damage predicates use the same frozen registry as player hurt.
Arc::make_mut(&mut items.enchantments).bind_damage_catalog(&health.damage);
// The recipe tables, the stations and the recipe book read one folder:
// hold its files so it is read once.
let _recipe_files = horizon_client::json_folder::read(&root.join("data/minecraft/recipe"));
let recipes = Recipes::load(root, &items, &overlay)?;
let stations = horizon_client::stations::StationData::load(root, &items, &overlay);
let mut data_map_types = Vec::new();
self.native_data_map_types(&mut data_map_types);
let data_maps = native_data_maps::DataMaps::load(
&data_map_types,
&files,
&items.item_tags,
&items.block_tags,
);
let causes_suffocation = items
.block_tags
.get("minecraft:causes_suffocation")
.into_iter()
.flatten()
.cloned()
.collect();
let suffocation = horizon_client::mobs::suffocation::bind(
self.res.core.collision.clone(),
&causes_suffocation,
)?;
// A registry whose pack tags don't load keeps the game's own tags
// (`in_tag` falls back to them), rather than matching no tag at all.
let pack_tags = WorldTables::PACK_TAG_REGISTRIES
.into_iter()
.filter_map(|registry| {
match horizon_client::items::load_tags(root, registry, &overlay) {
Ok(tags) => Some((registry, tags)),
Err(e) => {
log::warn!("Horizon: the world's {registry} tags are not applied: {e}");
None
}
}
})
.collect();
Ok((
Some(WorldTables {
suffocation,
files,
items,
recipes,
stations,
data_maps,
pack_tags,
}),
health,
))
}
/// Reload the content tables with the world's packs, as
/// `/reload` reloads a server's (`ReloadableServerResources`).
pub(super) fn reload_world_tables(&mut self) {
if self.remote.is_some() {
return;
}
match self.build_world_tables(true, &self.level.enabled_features) {
Ok((tables, health)) => {
self.world_tables = tables;
self.health_resources = health;
}
Err(e) => {
log::warn!("Horizon: the world's data packs are not applied: {e}");
return;
}
}
self.damage_tag_generation = self.damage_tag_generation.wrapping_add(1);
self.recipe_tables.categories = None;
horizon_client::structure_blocks::forget_loot_data();
// Before the players are sent the reloaded data below.
self.sync_recipe_content();
// PlayerList.reloadResources: the tags and recipes go to the players
// and their advancements reload. The synchronized registries (the
// dialogs, and the commands' ids of them) stay the hub's.
let kept = self.lan.as_ref().map(|host| host.hub.lan.shared.sync());
match kept {
Some(kept) => {
match lan::reload_sync_data(&self.options.resources, &self.pack_files(), &kept) {
Ok(sync) => {
if let Some(host) = self.lan.as_mut() {
host.hub.reload_resources(sync);
}
self.run_native_advancement_grants();
}
Err(e) => {
log::warn!("Horizon: the players are not sent the reloaded data: {e}")
}
}
}
None => {
if let Err(e) =
lan::reload_cached_sync_data(&self.options.resources, &self.pack_files())
{
log::warn!("Horizon: the cached world data is not reloaded: {e}");
}
}
}
let overlay = pack_files(&self.world_tables);
self.adv.tree = Arc::new(horizon_client::advancements::Tree::load_with(
&self.options.resources.join("data"),
&overlay,
));
self.adv.reset_tree();
self.native_reload_listeners();
self.native_server_data_loaded(true);
}
pub(super) fn join_world_rest(&mut self) -> Result<()> {
if self.rest_loader.is_some() {
let waited = Instant::now();
log::info!("Horizon: waiting for world resources");
while self.rest_loader.is_some() {
self.poll_world_rest()?;
if self.rest_loader.is_some() {
std::thread::sleep(Duration::from_millis(10));
}
}
log::info!(
"Horizon: world resources joined after {} ms",
waited.elapsed().as_millis()
);
}
if self.res.rest.get().is_none() {
return Err("world resources are unavailable".into());
}
Ok(())
}
}
+107 -2
View File
@@ -320,11 +320,65 @@ pub fn trail_part(item: &Item) -> Option<Part> {
/// Draws `draws` into a `width`×`height` picture seen from `camera`. At `Camera::HOME`'s zoom
/// the head's top is a fifth of the way down (room for a hat) and the feet 13% up.
pub fn render(draws: &[Draw], width: u32, height: u32, camera: &Camera) -> Image {
render_view(draws, width, height, camera.view(width, height))
}
/// Each corner of every face `draws` holds, in model space (blocks).
fn corners(draws: &[Draw], mut each: impl FnMut(Vec3)) {
for d in draws {
let mut stack = vec![(&*d.root, d.base)];
while let Some((part, parent)) = stack.pop() {
let m = parent * pose_matrix(pose_of(part, &d.poses));
for face in &part.faces {
for v in &face.vertices {
each(m.transform_point3(Vec3::new(v[0], v[1], v[2]) / 16.0));
}
}
for child in &part.children {
stack.push((child, m));
}
}
}
}
/// A view of `draws` alone, turned `yaw` degrees and seen from `pitch` degrees above as
/// `Camera` turns, as large as fits a `width`×`height` picture with `margin` of its smaller side
/// left free on each side: a shop's picture of one item, framed on it. None when there is
/// nothing to see.
pub fn fitted_view(
draws: &[Draw],
(width, height): (u32, u32),
(yaw, pitch): (f32, f32),
margin: f32,
) -> Option<Mat4> {
let turn = Mat4::from_rotation_x(pitch.to_radians()) * Mat4::from_rotation_y(yaw.to_radians());
let (mut lo, mut hi) = (Vec3::splat(f32::INFINITY), Vec3::splat(f32::NEG_INFINITY));
corners(draws, |p| {
let p = turn.transform_point3(p);
(lo, hi) = (lo.min(p), hi.max(p));
});
let size = hi - lo;
if !size.is_finite() || size.x <= 0.0 && size.y <= 0.0 {
return None;
}
let free = margin * width.min(height) as f32 * 2.0;
let (w, h) = (width as f32 - free, height as f32 - free);
let scale = (w / size.x.max(1e-3)).min(h / size.y.max(1e-3));
let centre = (lo + hi) / 2.0;
Some(
Mat4::from_translation(Vec3::new(width as f32 / 2.0, height as f32 / 2.0, 0.0))
* Mat4::from_scale(Vec3::splat(scale))
* Mat4::from_translation(-centre)
* turn,
)
}
/// Draws `draws` into a `width`×`height` picture through `view` (model space to the picture's
/// pixels, depth growing away from the viewer: `Camera::view`, `fitted_view`).
pub fn render_view(draws: &[Draw], width: u32, height: u32, view: Mat4) -> Image {
let (w, h) = (width as usize, height as usize);
let mut rgba = vec![0u8; w * h * 4];
let mut depth = vec![f32::INFINITY; w * h];
// Model space has y down and the front at -z: the camera looks along +z from the front.
let view = camera.view(width, height);
// Solid first; see-through over them, unsorted (an aura is one thin layer).
let solid = draws.iter().filter(|d| d.alpha >= 1.0);
for d in solid.chain(draws.iter().filter(|d| d.alpha < 1.0)) {
@@ -440,6 +494,57 @@ fn raster(
mod tests {
use super::*;
/// The drawn pixels' bounds: (left, top, right, bottom), inclusive.
fn drawn(image: &Image) -> Option<(u32, u32, u32, u32)> {
let mut out: Option<(u32, u32, u32, u32)> = None;
for y in 0..image.height {
for x in 0..image.width {
if image.rgba[((y * image.width + x) * 4 + 3) as usize] > 0 {
let (l, t, r, b) = out.unwrap_or((x, y, x, y));
out = Some((l.min(x), t.min(y), r.max(x), b.max(y)));
}
}
}
out
}
#[test]
fn a_fitted_view_fills_the_picture_with_the_head_alone() {
let (body, skin) = (player_model(false), skin());
let head = body.children.iter().find(|p| p.name == "head").unwrap();
let draws = [Draw::model(head, &skin)];
// Straight at the front: the head is a square, centred, a tenth of the height free
// around its (see-through, half a pixel larger) hat layer: 48 of 60 pixels for 9 of the
// skin's, so 42.7 for the head's 8.
let view = fitted_view(&draws, (100, 60), (0.0, 0.0), 0.1).unwrap();
let image = render_view(&draws, 100, 60, view);
assert_eq!(drawn(&image), Some((29, 9, 70, 50)));
// Its front is the red face, lit as a face toward the viewer is (three quarters).
assert_eq!(
&image.rgba[((30 * 100 + 50) * 4) as usize..][..3],
&[150, 0, 0]
);
// Turned, it is wider than tall, and still within the margins.
let view = fitted_view(&draws, (100, 100), (45.0, 20.0), 0.1).unwrap();
let (l, t, r, b) = drawn(&render_view(&draws, 100, 100, view)).unwrap();
assert!(l >= 9 && t >= 9 && r <= 90 && b <= 90, "{l} {t} {r} {b}");
assert!(r - l >= 68 || b - t >= 68, "fills one way: {l} {t} {r} {b}");
}
#[test]
fn nothing_to_see_has_no_fitted_view() {
let (skin, empty) = (
skin(),
Part {
name: "empty".into(),
pose: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0],
faces: Vec::new(),
children: Vec::new(),
},
);
assert!(fitted_view(&[Draw::model(&empty, &skin)], (64, 64), (30.0, 15.0), 0.1).is_none());
}
/// A 64×64 skin in one colour per region: what lands where shows which face was drawn.
fn skin() -> Texture {
let mut rgba = vec![0u8; 64 * 64 * 4];
+3 -3
View File
@@ -41,11 +41,11 @@ command above to inspect the selection rather than relying on historical counts.
| 12 | Guests' actions on a server (98) | `G/lan_actions.rs` (`fn as_guest`, `fn tick_guests`), `G/lan_{attributes,pvp,chat,crafting,stations,trading,mount_menu,waypoints}.rs` | server_player_combat, server_player_damage, server_player_targets, lan_e2e (all) |
| 13 | Modpack porting, mod content (97) | `crates/horizon-port-pack/`, `L/mod_content.rs`, `tools/port_*.py` | `cargo test -p horizon-port-pack`; `python3 tools/mod_port_harness.py` |
| 14 | Mob AI (96) | `L/mobs/ai.rs`, `goals.rs`, `brain.rs`, `*_brain.rs`, `nav.rs`, `path.rs`, `control.rs` | mob_ai (probe `examples/mob_ai_probe.rs`; known failure on main: drowned_*, #290) |
| 15 | Items and item use (96) | `I/items.rs`, `I/item_data.rs`, `G/hand.rs`, `G/consume.rs`, `G/potions.rs`, `R/effects.rs`; game.rs `fn use_hand`, `fn use_item` | use_item_on, item_use, item_use_lifecycle, consumable, consume_effect, status_effect |
| 15 | Items and item use (96) | `I/items.rs`, `I/item_data.rs`, `G/hand.rs`, `G/consume.rs`, `G/using_item.rs`, `G/potions.rs`, `R/effects.rs`; game.rs `fn use_hand`, `fn use_item` | use_item_on, item_use, item_use_lifecycle, consumable, consume_effect, status_effect |
| 16 | Options and settings screens (93) | `R/options_ui.rs`, `G/options.rs`, `R/settings.rs`, `R/options_file.rs`, `R/graphics_ui.rs`, `R/graphics.rs` | options, toggle_keys |
| 17 | HUD, chat, tab list (93) | `R/hud.rs`, `R/hud_layout.rs`, `R/hud_overlays.rs`, `R/chat.rs`, `G/chat.rs`, `R/tab_list.rs`, `L/locator_bar.rs`, `G/locator_bar.rs` | hud, tab_list, locator_bar, chat_screen, secure_chat |
| 18 | Command execution (88) | `G/commands.rs`, `G/commands/*.rs`, `L/scoreboard_cmd.rs`, `L/data_cmd.rs`, `K/scoreboard.rs`, `G/functions.rs` | command_exec (corpus `tools/command_exec_corpus.py`), scoreboard, server_ops_feedback, lan_e2e commands |
| 19 | Chunk streaming, light, tickets (85) | `R/streaming.rs`, `R/world.rs`, `R/chunk.rs`, `R/chunk_map.rs`, `R/light.rs`, `L/ticket_levels.rs`, `L/tick_chunk_membership.rs`, `G/world_loading.rs` | light, chunk_status, random_tick_sections; `cargo test -p horizon-client --test streaming_meshes` |
| 19 | Chunk streaming, light, tickets (85) | `R/streaming.rs`, `R/world.rs`, `R/chunk.rs`, `R/chunk_map.rs`, `R/light.rs`, `L/ticket_levels.rs`, `L/tick_chunk_membership.rs`, `G/world_loading.rs`, `G/world_entry.rs` | light, chunk_status, random_tick_sections; `cargo test -p horizon-client --test streaming_meshes` |
| 20 | Mob models and animation (78) | `L/mobs/render.rs`, `L/mobs/anim.rs`, `L/mobs/body_anim.rs`, `L/mobs/keyframes.rs`, `R/entity.wgsl` | entity_model |
| 21 | Block behaviour, server side (78) | `W/level/` (`mod.rs`, `tick.rs`, `hooks.rs`, `data.rs`, `redstone.rs`, `place.rs`), `G/block_entity_ticks.rs`, `G/moving_pistons.rs` | block_update, redstone, random_tick, simple_block, piston_movement, block_entity_tickers |
| 22 | Player movement and collision (75) | `L/motion.rs` + `L/motion/`, `R/collisions.rs`, `W/entity_move.rs`, `W/player_travel.rs`, `W/collision.rs` | collision, entity_move, player_travel, living_motion, climbing, swimming; `python3 tools/test_native_scene_motion.py` |
@@ -55,7 +55,7 @@ command above to inspect the selection rather than relying on historical counts.
| 26 | Crafting and the recipe book (59) | `L/crafting.rs`, `L/recipe_book.rs`, `L/recipe_book_screen.rs`, `G/recipe_book.rs`, `G/machines.rs`, `G/machines/crafter.rs` | recipe, recipe_book, recipe_book_view, place_recipe, ghost_recipe, crafter |
| 27 | Vehicles and mounts (54) | `G/boats.rs`, `G/boat_passengers.rs`, `G/minecarts.rs`, `G/mounts.rs`, `G/mount_menu.rs`, `G/llamas.rs`, `G/passengers.rs` | server_entities, lan_e2e boats minecarts riding mounts |
| 28 | Villagers, trading, raids (50) | `L/mobs/villager*.rs`, `L/merchant.rs`, `G/trading.rs`, `G/villagers.rs`, `L/raid.rs`, `G/raids.rs`, `L/gossip.rs` | trading, raid, mob_ai |
| 29 | Title, worlds, startup (49) | `L/title.rs` + `L/title/`, `G/startup_menu.rs`, `R/title_edition.rs` | world_options; `cargo test -p horizon-client --lib title` |
| 29 | Title, worlds, startup (49) | `L/title.rs` + `L/title/`, `G/startup_menu.rs`, `R/title_edition.rs`, `G/loading_window.rs` (the first renderer, `start_game`) | world_options; `cargo test -p horizon-client --lib title` |
| 30 | Dedicated server, horizon-server (48) | `G/dedicated.rs`, `G/dedicated/status.rs`, `crates/horizon-server/`, `crates/horizon-server-files/` | dedicated_server, server_files, user_cache, online_mode, server_ops_feedback |
| 31 | Particles and client effects (46) | `R/particles.rs`, `G/render_tick.rs`, `G/level_particles.rs`, `L/animate_tick.rs` | particle_providers, block_particles, entity_particles, emitter_particles, marker_particles |
| 32 | Bosses and the End (45) | `G/dragon.rs`, `G/wither.rs`, `G/end.rs` | server_dragon, forced_end, end_podium, end_gateway |
+21 -4
View File
@@ -457,11 +457,28 @@ for it. No countdowns, scarcity, buyer counts, "limited" wording or loot boxes.
What the catalogue doesn't price isn't sold, so items the service puts on sale
(`COSMETICS_ON_SALE`) show up by themselves. The currency is guessed from the system locale
(francs in CH/LI, pounds in GB, euros in the euro area, else dollars) and can be switched.
- **Cards** per collection (sets first), the founder set while it can be claimed, the Supporter badge.
Choosing a card tries it on the account's own skin, over what it wears (`shop::try_on`), in the
Wardrobe's 3D view (the live view above, a camera of its own): drag to turn, scroll to zoom.
- **Laid out like a game's item shop** (Ludovic, 2026-11-07: "you just don't see the items"): the
first collection's `pack` (else its largest set) across the top, big, with its name, item count,
price and *Buy*; then *Looks* (the other sets), each collection's items, and the founder set and
the Supporter badge. A tile is the thing itself drawn, its name and its price, nothing else; it
lifts under the pointer. Very little text anywhere.
- **Pictures** (`shop/thumbs.rs`): drawn by the Wardrobe's renderer (`preview::fitted_view` frames
an item on itself) at the screen's pixels, twice as fine then halved, on background threads, kept
by the item files' hashes (and the skin). An item alone at an angle (a back item from behind, an
aura from above, a trail's particles grown), a shirt on a plain figure, an emote on the player at
its fullest move, a look on the player, the pack as its looks side by side. Name tags show as the
game draws them. Without a skin the launcher can read (signed out, offline, an unreadable one),
the player is Horizon's stand-in, the website shop's own original art (`stand_in` in
`wardrobe_page.rs`, `standInSkin` on the site), never Mojang's Steve or Alex.
- **A tile opens it big**: the account's own player in 3D wearing it over what it wears
(`shop::try_on`; drag to turn, scroll to zoom; an emote plays, again each time it ends), its name,
price and line, a look's or the pack's items, *Buy* (not for what the account owns) and *Gift*
(the friend's Minecraft name, then *Pay … in your browser*, priced without what they own). Each
is one checkout of that offer (`POST /v1/web/checkout`); "Ask whoever pays before you buy.
Refunds within 14 days for any reason." sits under the buttons.
- **The founder set**: *Claim for free* where Paddle doesn't sell (`Claim::here`), else Paddle's free
checkout in the browser (`POST /v1/web/checkout` with `founder_set`).
- **A catalogue that doesn't load** shows "The shop didn't load." with *Retry*; nothing else changes.
- `HORIZON_LAUNCHER_PAGE=shop` in a development build shows it for the made-up account of the
Wardrobe's preview, the founder set tried on.
Wardrobe's preview; `HORIZON_COSMETICS_CATALOGUE=<file>` gives it a saved `GET /v1/catalogue`
(prices, sets), `HORIZON_COSMETICS_SKIN=<png>` a skin, `HORIZON_SHOP_OPEN=<id>` an offer open.
+1
View File
@@ -2696,6 +2696,7 @@ dependencies = [
"flate2",
"futures-lite",
"getrandom 0.3.4",
"glam",
"gpui-fast",
"gpui-fast-platform",
"horizon-bench",
+1
View File
@@ -42,6 +42,7 @@ clap_complete = "4"
horizon-theme = { path = "../crates/horizon-theme" }
horizon-core = { path = "../crates/horizon-core" }
horizon-cosmetics = { path = "../crates/horizon-cosmetics" }
glam = "0.30"
# `horizon-launcher mcp`: the Model Context Protocol, shared with horizon-ctl and horizon-server.
horizon-mcp = { path = "../crates/horizon-mcp" }
horizon-prepare = { path = "../crates/horizon-prepare" }
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Eis die stigter stel",
"Claiming…": "Eis tans op…",
"The shop didn't load.": "Die winkel het nie gelaai nie.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Goed om vir jou speler te dra, sigbaar vir almal wat op Horizon speel.",
"Free for founders": "Gratis vir stigters",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Vir die spelers wat eerste hier was. Gratis om op te eis; sodra jy dit opgeëis het, is dit joune om te hou.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Voltooi die gratis kassa in jou blaaier. Die stel verskyn 'n oomblik later hier.",
"{n} items": "{n} items",
"Nothing is on sale right now.": "Niks is nou te koop nie.",
"Your basket": "Jou mandjie",
"Your basket is empty.": "Jou mandjie is leeg.",
"Add to basket": "Voeg by mandjie",
"Total": "Totaal",
"This is a gift": "Dis 'n geskenk",
"Your friend's Minecraft name": "Jou vriend se Minecraft-naam",
"Find": "Soek",
"For {name}": "Vir {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Vra wie ook al betaal voordat jy koop. Terugbetalings binne 14 dae om enige rede.",
"Pay {price} in your browser": "Betaal {price} in jou blaaier",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle se betaling maak in jou blaaier oop. Niks word in die lanseerder gehef nie.",
"US sales tax is added where a state charges it.": "VS-verkoopsbelasting word bygevoeg waar 'n staat dit hef.",
"VAT included where it applies.": "BTW ingesluit waar dit geld.",
"In a set in your basket": "In 'n stel in jou mandjie",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Voltooi die betaling in jou blaaier. Jou items kom 'n oomblik later in die Klerekas.",
"{name} was left out: made for another Horizon version": "{name} is weggelaat: gemaak vir 'n ander Horizon-weergawe",
"{name} was left out: clashes with {other}": "{name} is weggelaat: bots met {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Maak oop in privaat venster",
"Open this link in a private window to pick another account.": "Maak hierdie skakel in 'n privaat venster oop om 'n ander rekening te kies.",
"Use a different Microsoft account": "Gebruik 'n ander Microsoft-rekening"
"Use a different Microsoft account": "Gebruik 'n ander Microsoft-rekening",
"Buy": "Koop",
"Gift": "Gee as geskenk",
"Looks": "Voorkomste"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "استلم طقم المؤسسين",
"Claiming…": "جارٍ الحصول عليه…",
"The shop didn't load.": "لم يتم تحميل المتجر.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "أشياء يرتديها لاعبك، يراها كل من يلعب على Horizon.",
"Free for founders": "مجاني للمؤسسين",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "للاعبين الذين كانوا هنا أولًا. مجاني؛ وبعد الحصول عليه يبقى لك.",
"Finish the free checkout in your browser. The set lands here a moment later.": "أكمل عملية الدفع المجانية في متصفحك. ستظهر المجموعة هنا بعد لحظات.",
"{n} items": "{n} عناصر",
"Nothing is on sale right now.": "لا شيء معروض للبيع الآن.",
"Your basket": "سلتك",
"Your basket is empty.": "سلتك فارغة.",
"Add to basket": "أضف إلى السلة",
"Total": "المجموع",
"This is a gift": "هذه هدية",
"Your friend's Minecraft name": "اسم صديقك في Minecraft",
"Find": "ابحث",
"For {name}": "إلى {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "اسأل من سيدفع قبل أن تشتري. استرداد خلال 14 يومًا لأي سبب.",
"Pay {price} in your browser": "ادفع {price} في متصفحك",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "يُفتح دفع Paddle في متصفحك. لا يُخصم شيء في المشغّل.",
"US sales tax is added where a state charges it.": "تُضاف ضريبة المبيعات الأمريكية حيث تفرضها الولاية.",
"VAT included where it applies.": "ضريبة القيمة المضافة مشمولة حيث تنطبق.",
"In a set in your basket": "ضمن مجموعة في سلتك",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "أكمل الدفع في متصفحك. تصل عناصرك إلى خزانة الملابس بعد لحظة.",
"{name} was left out: made for another Horizon version": "تم استبعاد {name}: صُنع لإصدار آخر من Horizon",
"{name} was left out: clashes with {other}": "تم استبعاد {name}: يتعارض مع {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "فتح في نافذة خاصة",
"Open this link in a private window to pick another account.": "افتح هذا الرابط في نافذة خاصة لاختيار حساب آخر.",
"Use a different Microsoft account": "استخدام حساب Microsoft مختلف"
"Use a different Microsoft account": "استخدام حساب Microsoft مختلف",
"Buy": "شراء",
"Gift": "إهداء",
"Looks": "إطلالات"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Təsisçi dəstini tələb edin",
"Claiming…": "Əldə edilir…",
"The shop didn't load.": "Mağaza yüklənmədi.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Oyunçunuz üçün geyimlər, Horizon-da oynayan hər kəsə görünür.",
"Free for founders": "Qurucular üçün pulsuz",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Ən əvvəl burada olan oyunçular üçün. Pulsuz əldə etmək olar; əldə etdikdən sonra həmişəlik sizindir.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Pulsuz ödənişi brauzerinizdə tamamlayın. Dəst bir az sonra burada görünəcək.",
"{n} items": "{n} əşya",
"Nothing is on sale right now.": "Hazırda heç nə satışda deyil.",
"Your basket": "Səbətiniz",
"Your basket is empty.": "Səbətiniz boşdur.",
"Add to basket": "Səbətə əlavə et",
"Total": "Cəmi",
"This is a gift": "Bu hədiyyədir",
"Your friend's Minecraft name": "Dostunuzun Minecraft adı",
"Find": "Tap",
"For {name}": "{name} üçün",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Almazdan əvvəl ödəyəcək şəxsdən soruşun. İstənilən səbəbdən 14 gün ərzində geri ödəniş.",
"Pay {price} in your browser": "{price} məbləğini brauzerdə ödə",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle ödənişi brauzerinizdə açılır. Launcher-də heç nə tutulmur.",
"US sales tax is added where a state charges it.": "ABŞ satış vergisi ştatın tələb etdiyi yerdə əlavə olunur.",
"VAT included where it applies.": "ƏDV tətbiq olunduğu yerdə daxildir.",
"In a set in your basket": "Səbətinizdəki dəstdə",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Ödənişi brauzerinizdə bitirin. Əşyalarınız bir azdan Qarderoba gələcək.",
"{name} was left out: made for another Horizon version": "{name} kənarda qaldı: başqa Horizon versiyası üçün hazırlanıb",
"{name} was left out: clashes with {other}": "{name} kənarda qaldı: {other} ilə toqquşur",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Gizli pəncərədə açın",
"Open this link in a private window to pick another account.": "Başqa hesab seçmək üçün bu linki gizli pəncərədə açın.",
"Use a different Microsoft account": "Başqa Microsoft hesabından istifadə edin"
"Use a different Microsoft account": "Başqa Microsoft hesabından istifadə edin",
"Buy": "Al",
"Gift": "Hədiyyə et",
"Looks": "Görünüşlər"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Нигеҙ һалыусылар йыйылмаһына дәғүә итегеҙ",
"Claiming…": "Алына…",
"The shop didn't load.": "Магазин ыңғайланманы.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Уйынсыңа кейем, Horizon-да уйнаусы һәр кемгә күренә.",
"Free for founders": "Нигеҙләүселәр өсөн бушлай",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Беренсе булып килгән уйынсылар өсөн. Бушлай алырға була; алғас, мәңгелеккә һинеке.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Бушлай түләүҙе браузерҙа тамамлағыҙ. Йыйылма бер аҙҙан бында барлыҡҡа килә.",
"{n} items": "{n} әйбер",
"Nothing is on sale right now.": "Хәҙер бер нәмә лә һатылмай.",
"Your basket": "Кәрзинегеҙ",
"Your basket is empty.": "Кәрзинегеҙ буш.",
"Add to basket": "Кәрзингә өҫтәргә",
"Total": "Барыһы",
"This is a gift": "Был бүләк",
"Your friend's Minecraft name": "Дуҫығыҙҙың Minecraft исеме",
"Find": "Табырға",
"For {name}": "{name} өсөн",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Һатып алыр алдынан кем түләйәсәген һорағыҙ. Теләһә ниндәй сәбәп менән 14 көн эсендә аҡса кире ҡайтарыла.",
"Pay {price} in your browser": "{price} браузерҙа түләргә",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle түләүе браузерығыҙҙа асыла. Лаунчерҙа бер нәмә лә алынмай.",
"US sales tax is added where a state charges it.": "АҠШ һатыу һалымы штат талап иткән урында өҫтәлә.",
"VAT included where it applies.": "ҠӨҺ ҡулланылған урында индерелгән.",
"In a set in your basket": "Кәрзинегеҙҙәге йыйылмала",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Түләүҙе браузерҙа тамамлағыҙ. Әйберҙәрегеҙ бер аҙҙан Гардеробҡа килә.",
"{name} was left out: made for another Horizon version": "{name} төшөрөп ҡалдырылды: Horizon-дың башҡа версияһы өсөн эшләнгән",
"{name} was left out: clashes with {other}": "{name} төшөрөп ҡалдырылды: {other} менән бәрелешә",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Шәхси тәҙрәлә асыу",
"Open this link in a private window to pick another account.": "Башҡа иҫәп яҙмаһын һайлау өсөн был һылтанманы шәхси тәҙрәлә асығыҙ.",
"Use a different Microsoft account": "Башҡа Microsoft иҫәп яҙмаһын ҡулланыу"
"Use a different Microsoft account": "Башҡа Microsoft иҫәп яҙмаһын ҡулланыу",
"Buy": "Һатып алырға",
"Gift": "Бүләк итергә",
"Looks": "Образдар"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Прэтэнзіі заснавальніка мноства",
"Claiming…": "Атрымліваем…",
"The shop didn't load.": "Краму не ўдалося загрузіць.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Рэчы для вашага персанажа, якія бачаць усе, хто гуляе ў Horizon.",
"Free for founders": "Бясплатна для заснавальнікаў",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Для гульцоў, якія былі тут першымі. Можна атрымаць бясплатна; атрымаўшы, вы пакідаеце яго назаўсёды.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Завяршыце бясплатную аплату ў браўзеры. Набор з’явіцца тут праз імгненне.",
"{n} items": "{n} прадметаў",
"Nothing is on sale right now.": "Зараз нічога не прадаецца.",
"Your basket": "Ваш кошык",
"Your basket is empty.": "Ваш кошык пусты.",
"Add to basket": "Дадаць у кошык",
"Total": "Разам",
"This is a gift": "Гэта падарунак",
"Your friend's Minecraft name": "Імя вашага сябра ў Minecraft",
"Find": "Знайсці",
"For {name}": "Для {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Спытайце таго, хто плаціць, перш чым купляць. Вяртанне грошай на працягу 14 дзён па любой прычыне.",
"Pay {price} in your browser": "Аплаціць {price} у браўзеры",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Аплата Paddle адкрываецца ў браўзеры. У лаунчары нічога не спісваецца.",
"US sales tax is added where a state charges it.": "Падатак з продажаў ЗША дадаецца там, дзе штат яго бярэ.",
"VAT included where it applies.": "ПДВ уключаны там, дзе ён ужываецца.",
"In a set in your basket": "У наборы ў вашым кошыку",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Завяршыце аплату ў браўзеры. Рэчы з'явяцца ў Гардэробе праз хвіліну.",
"{name} was left out: made for another Horizon version": "{name} прапушчаны: зроблены для іншай версіі Horizon",
"{name} was left out: clashes with {other}": "{name} прапушчаны: канфліктуе з {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Адкрыць у прыватным акне",
"Open this link in a private window to pick another account.": "Адкрыйце гэту спасылку ў прыватным акне, каб выбраць іншы ўліковы запіс.",
"Use a different Microsoft account": "Выкарыстаць іншы ўліковы запіс Microsoft"
"Use a different Microsoft account": "Выкарыстаць іншы ўліковы запіс Microsoft",
"Buy": "Купіць",
"Gift": "Падараваць",
"Looks": "Вобразы"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Заявете основателния комплект",
"Claiming…": "Взимане…",
"The shop didn't load.": "Магазинът не се зареди.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Неща за обличане на твоя играч, видими за всички, които играят на Horizon.",
"Free for founders": "Безплатно за основателите",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "За играчите, които бяха тук първи. Безплатно; веднъж взето, остава твое.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Завърши безплатното плащане в браузъра си. Комплектът се появява тук след малко.",
"{n} items": "{n} предмета",
"Nothing is on sale right now.": "В момента нищо не се продава.",
"Your basket": "Вашата кошница",
"Your basket is empty.": "Кошницата ви е празна.",
"Add to basket": "Добави в кошницата",
"Total": "Общо",
"This is a gift": "Това е подарък",
"Your friend's Minecraft name": "Името на приятеля ви в Minecraft",
"Find": "Намери",
"For {name}": "За {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Попитайте този, който плаща, преди да купите. Възстановяване на сумата до 14 дни по всякаква причина.",
"Pay {price} in your browser": "Плати {price} в браузъра",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Плащането на Paddle се отваря в браузъра ви. В лаунчера нищо не се таксува.",
"US sales tax is added where a state charges it.": "Данък върху продажбите в САЩ се добавя, където щатът го налага.",
"VAT included where it applies.": "ДДС е включен, където се прилага.",
"In a set in your basket": "В комплект в кошницата ви",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Завършете плащането в браузъра. Предметите ще се появят в Гардероба след миг.",
"{name} was left out: made for another Horizon version": "{name} е пропуснат: направен за друга версия на Horizon",
"{name} was left out: clashes with {other}": "{name} е пропуснат: конфликтира с {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Отваряне в поверителен прозорец",
"Open this link in a private window to pick another account.": "Отворете тази връзка в поверителен прозорец, за да изберете друг акаунт.",
"Use a different Microsoft account": "Използвайте друг акаунт в Microsoft"
"Use a different Microsoft account": "Използвайте друг акаунт в Microsoft",
"Buy": "Купи",
"Gift": "Подари",
"Looks": "Визии"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Goulenn ar strollad diazezerien",
"Claiming…": "O c’houlenn…",
"The shop didn't load.": "N’eo ket bet karget ar stal.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Traoù da wiskañ evit ho c’hoarier, gwelet gant an holl a c’hoari war Horizon.",
"Free for founders": "Digoust evit ar grouerien",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Evit ar re a oa amañ da gentañ. Digoust da c’houlenn; ur wech goulennet eo ho re da virout.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Echuit ar paeamant digoust en ho merdeer. Ar set a zeuio amañ un nebeut goude.",
"{n} items": "{n} elfenn",
"Nothing is on sale right now.": "Netra n'eo war werzh bremañ.",
"Your basket": "Ho poutailh",
"Your basket is empty.": "Goullo eo ho poutailh.",
"Add to basket": "Ouzhpennañ er boutailh",
"Total": "Hollad",
"This is a gift": "Ur prof eo",
"Your friend's Minecraft name": "Anv Minecraft ho mignon",
"Find": "Kavout",
"For {name}": "Evit {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Goulennit gant an hini a bae a-raok prenañ. Distaol a-benn 14 devezh evit forzh peseurt abeg.",
"Pay {price} in your browser": "Paeañ {price} en ho merdeer",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Digeriñ a ra paeamant Paddle en ho merdeer. Netra ne vez paet el lañser.",
"US sales tax is added where a state charges it.": "Ouzhpennet e vez tailh gwerzhañ SUA el lec'h ma vez goulennet gant ur stad.",
"VAT included where it applies.": "TVA enlakaet el lec'h ma talvez.",
"In a set in your basket": "En ur strollad en ho poutailh",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Echuit ar paeamant en ho merdeer. Erruout a raio hoc'h elfennoù er Wiskamant a-benn ur pennadig.",
"{name} was left out: made for another Horizon version": "{name} a zo bet lezet a-gostez: graet evit ur stumm all eus Horizon",
"{name} was left out: clashes with {other}": "{name} a zo bet lezet a-gostez: en em stok a ra gant {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Digeriñ en ur prenestr prevez",
"Open this link in a private window to pick another account.": "Digorit al liamm-mañ en ur prenestr prevez evit dibab ur gont all.",
"Use a different Microsoft account": "Implijout ur gont Microsoft all"
"Use a different Microsoft account": "Implijout ur gont Microsoft all",
"Buy": "Prenañ",
"Gift": "Reiñ e profad",
"Looks": "Neuzioù"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Zatražite osnivački skup",
"Claiming…": "Preuzimanje…",
"The shop didn't load.": "Prodavnica se nije učitala.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Stvari za nošenje za vašeg igrača, vidljive svima koji igraju na Horizonu.",
"Free for founders": "Besplatno za osnivače",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Za igrače koji su bili prvi ovdje. Besplatno za preuzimanje; kad ga preuzmete, vaš je zauvijek.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Završite besplatno plaćanje u pregledniku. Set će se ovdje pojaviti za trenutak.",
"{n} items": "{n} predmeta",
"Nothing is on sale right now.": "Trenutno se ništa ne prodaje.",
"Your basket": "Vaša korpa",
"Your basket is empty.": "Vaša korpa je prazna.",
"Add to basket": "Dodaj u korpu",
"Total": "Ukupno",
"This is a gift": "Ovo je poklon",
"Your friend's Minecraft name": "Minecraft ime vašeg prijatelja",
"Find": "Pronađi",
"For {name}": "Za {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pitajte onoga ko plaća prije kupovine. Povrat novca u roku od 14 dana iz bilo kojeg razloga.",
"Pay {price} in your browser": "Plati {price} u pregledniku",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle plaćanje se otvara u vašem pregledniku. U pokretaču se ništa ne naplaćuje.",
"US sales tax is added where a state charges it.": "Američki porez na promet dodaje se gdje ga država naplaćuje.",
"VAT included where it applies.": "PDV uključen gdje se primjenjuje.",
"In a set in your basket": "U kompletu u vašoj korpi",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Završite plaćanje u pregledniku. Predmeti stižu u Garderobu za trenutak.",
"{name} was left out: made for another Horizon version": "{name} je izostavljen: napravljen za drugu verziju Horizona",
"{name} was left out: clashes with {other}": "{name} je izostavljen: sukobljava se s {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Otvori u privatnom prozoru",
"Open this link in a private window to pick another account.": "Otvori ovaj link u privatnom prozoru da odabereš drugi nalog.",
"Use a different Microsoft account": "Koristi drugi Microsoft nalog"
"Use a different Microsoft account": "Koristi drugi Microsoft nalog",
"Buy": "Kupi",
"Gift": "Pokloni",
"Looks": "Izgledi"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Reclama el conjunt del fundador",
"Claiming…": "Reclamant…",
"The shop didn't load.": "La botiga no s’ha carregat.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Coses per portar al vostre jugador, que veu tothom qui juga a Horizon.",
"Free for founders": "Gratuït per als fundadors",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Per als jugadors que hi eren des del principi. Es pot reclamar gratis; un cop reclamat, és teu per sempre.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Acabeu el pagament gratuït al navegador. El set arribarà aquí d'aquí a un moment.",
"{n} items": "{n} objectes",
"Nothing is on sale right now.": "Ara mateix no hi ha res a la venda.",
"Your basket": "La teva cistella",
"Your basket is empty.": "La teva cistella és buida.",
"Add to basket": "Afegeix a la cistella",
"Total": "Total",
"This is a gift": "És un regal",
"Your friend's Minecraft name": "El nom de Minecraft del teu amic",
"Find": "Cerca",
"For {name}": "Per a {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pregunta a qui paga abans de comprar. Reemborsaments en 14 dies per qualsevol motiu.",
"Pay {price} in your browser": "Paga {price} al navegador",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "El pagament de Paddle s'obre al navegador. No es cobra res al llançador.",
"US sales tax is added where a state charges it.": "S'afegeix l'impost de vendes dels EUA on un estat el cobra.",
"VAT included where it applies.": "IVA inclòs on s'aplica.",
"In a set in your basket": "En un conjunt de la teva cistella",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Acaba el pagament al navegador. Els objectes arriben a l'Armari un moment després.",
"{name} was left out: made for another Horizon version": "S'ha deixat fora {name}: fet per a una altra versió d'Horizon",
"{name} was left out: clashes with {other}": "S'ha deixat fora {name}: entra en conflicte amb {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Obre en una finestra privada",
"Open this link in a private window to pick another account.": "Obriu aquest enllaç en una finestra privada per triar un altre compte.",
"Use a different Microsoft account": "Utilitza un altre compte de Microsoft"
"Use a different Microsoft account": "Utilitza un altre compte de Microsoft",
"Buy": "Compra",
"Gift": "Regala",
"Looks": "Estils"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Nárokujte zakladatelskou sadu",
"Claiming…": "Získávání…",
"The shop didn't load.": "Obchod se nenačetl.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Věci k nošení pro vašeho hráče, viditelné pro všechny, kdo hrají na Horizonu.",
"Free for founders": "Zdarma pro zakladatele",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Pro hráče, kteří tu byli první. Zdarma k získání; jakmile si ho vezmete, je váš navždy.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Dokončete bezplatnou platbu v prohlížeči. Sada se tu za chvíli objeví.",
"{n} items": "{n} předmětů",
"Nothing is on sale right now.": "Teď se nic neprodává.",
"Your basket": "Váš košík",
"Your basket is empty.": "Košík je prázdný.",
"Add to basket": "Přidat do košíku",
"Total": "Celkem",
"This is a gift": "Je to dárek",
"Your friend's Minecraft name": "Minecraft jméno vašeho přítele",
"Find": "Najít",
"For {name}": "Pro {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Než nakoupíte, zeptejte se toho, kdo platí. Vrácení peněz do 14 dnů z jakéhokoli důvodu.",
"Pay {price} in your browser": "Zaplatit {price} v prohlížeči",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Platba Paddle se otevře v prohlížeči. V launcheru se nic neúčtuje.",
"US sales tax is added where a state charges it.": "Americká daň z prodeje se přičítá tam, kde ji stát vybírá.",
"VAT included where it applies.": "DPH zahrnuta tam, kde se uplatňuje.",
"In a set in your basket": "V sadě ve vašem košíku",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Dokončete platbu v prohlížeči. Předměty dorazí do Šatníku za chvíli.",
"{name} was left out: made for another Horizon version": "{name} byl vynechán: vytvořen pro jinou verzi Horizonu",
"{name} was left out: clashes with {other}": "{name} byl vynechán: koliduje s {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Otevřít v anonymním okně",
"Open this link in a private window to pick another account.": "Otevřete tento odkaz v anonymním okně a vyberte jiný účet.",
"Use a different Microsoft account": "Použít jiný účet Microsoft"
"Use a different Microsoft account": "Použít jiný účet Microsoft",
"Buy": "Koupit",
"Gift": "Darovat",
"Looks": "Vzhledy"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Учредительсен пуххине илӗр",
"Claiming…": "Илет…",
"The shop didn't load.": "Лавкка тиеннӗ мар.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Вылякана тăхӑнмалли япаласем, Horizon çинче вылякан пурне те курӑнаççӗ.",
"Free for founders": "Никӗслекенсем валли тӳлевсӗр",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Пирвайхи килнӗ вылякансем валли. Тӳлевсӗр илме пулать; илсен яланлӑхах санӑн.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Тӳлевсӗр тӳлевне браузерта вӗçлесе хурӑр. Пухӑм кунта кӑшт та иртсен курӑнать.",
"{n} items": "{n} япала",
"Nothing is on sale right now.": "Халĕ нимĕн те сутăнмасть.",
"Your basket": "Сирĕн корзинка",
"Your basket is empty.": "Корзинка пушă.",
"Add to basket": "Корзинкăна хуш",
"Total": "Пурĕ",
"This is a gift": "Ку парне",
"Your friend's Minecraft name": "Тусăрăн Minecraft ячĕ",
"Find": "Туп",
"For {name}": "{name} валли",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Туянас умĕн кам тӳлессине ыйтăр. Кирек мĕнле сăлтавпа та 14 кун хушшинче укçа тавăрса параççĕ.",
"Pay {price} in your browser": "{price} браузерта тӳле",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle тӳлевĕ браузерта уçăлать. Лаунчерта нимĕн те илмеççĕ.",
"US sales tax is added where a state charges it.": "АПШ сутă налукне штат ыйтнă çĕрте хушаççĕ.",
"VAT included where it applies.": "НДС кĕрет, вăл ĕçленĕ çĕрте.",
"In a set in your basket": "Корзинкăри комплектра",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Тӳлеве браузерта вĕçлĕр. Япаласем Гардероба часах килĕç.",
"{name} was left out: made for another Horizon version": "{name} кӗртмен: Horizon-ӑн урӑх версийӗ валли тунӑ",
"{name} was left out: clashes with {other}": "{name} кӗртмен: {other} мод-па килӗшмест",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Вӑрттӑн чӳречере уҫӑр",
"Open this link in a private window to pick another account.": "Урӑх аккаунт суйлама ку ссылкӑна вӑрттӑн чӳречере уҫӑр.",
"Use a different Microsoft account": "Урӑх Microsoft аккаунтне усӑ курӑр"
"Use a different Microsoft account": "Урӑх Microsoft аккаунтне усӑ курӑр",
"Buy": "Туянса ил",
"Gift": "Парне пар",
"Looks": "Сăнарсем"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Hawliwch y set sylfaenydd",
"Claiming…": "Yn hawlio…",
"The shop didn't load.": "Wnaeth y siop ddim llwytho.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Pethau i’w gwisgo ar eich chwaraewr, i’w gweld gan bawb sy’n chwarae ar Horizon.",
"Free for founders": "Am ddim i’r sylfaenwyr",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "I’r chwaraewyr oedd yma gyntaf. Am ddim i’w hawlio; unwaith y byddwch wedi’i hawlio, mae’n eiddo i chi am byth.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Gorffennwch y ddesg dalu am ddim yn eich porwr. Bydd y set yn glanio yma ymhen ychydig.",
"{n} items": "{n} eitem",
"Nothing is on sale right now.": "Does dim ar werth ar hyn o bryd.",
"Your basket": "Eich basged",
"Your basket is empty.": "Mae eich basged yn wag.",
"Add to basket": "Ychwanegu i'r fasged",
"Total": "Cyfanswm",
"This is a gift": "Rhodd yw hon",
"Your friend's Minecraft name": "Enw Minecraft eich ffrind",
"Find": "Chwilio",
"For {name}": "I {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Gofynnwch i bwy bynnag sy'n talu cyn prynu. Ad-daliad o fewn 14 diwrnod am unrhyw reswm.",
"Pay {price} in your browser": "Talu {price} yn eich porwr",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Mae taliad Paddle yn agor yn eich porwr. Does dim yn cael ei godi yn y lansiwr.",
"US sales tax is added where a state charges it.": "Ychwanegir treth gwerthiant UDA lle mae talaith yn ei chodi.",
"VAT included where it applies.": "TAW wedi'i chynnwys lle mae'n berthnasol.",
"In a set in your basket": "Mewn set yn eich basged",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Gorffennwch dalu yn eich porwr. Bydd eich eitemau'n cyrraedd y Cwpwrdd Dillad mewn eiliad.",
"{name} was left out: made for another Horizon version": "Gadawyd {name} allan: wedi'i wneud ar gyfer fersiwn arall o Horizon",
"{name} was left out: clashes with {other}": "Gadawyd {name} allan: mae'n gwrthdaro â {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Agor mewn ffenestr breifat",
"Open this link in a private window to pick another account.": "Agorwch y ddolen hon mewn ffenestr breifat i ddewis cyfrif arall.",
"Use a different Microsoft account": "Defnyddio cyfrif Microsoft gwahanol"
"Use a different Microsoft account": "Defnyddio cyfrif Microsoft gwahanol",
"Buy": "Prynu",
"Gift": "Rhoi fel anrheg",
"Looks": "Gwisgoedd"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Gør krav på grundlæggersættet",
"Claiming…": "Henter…",
"The shop didn't load.": "Butikken blev ikke indlæst.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Ting din spiller kan bære, som alle, der spiller på Horizon, kan se.",
"Free for founders": "Gratis for grundlæggere",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Til spillerne, der var her først. Gratis at hente; når det er hentet, er det dit.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Gennemfør det gratis checkout i din browser. Sættet lander her et øjeblik senere.",
"{n} items": "{n} ting",
"Nothing is on sale right now.": "Intet er til salg lige nu.",
"Your basket": "Din kurv",
"Your basket is empty.": "Din kurv er tom.",
"Add to basket": "Læg i kurven",
"Total": "I alt",
"This is a gift": "Det er en gave",
"Your friend's Minecraft name": "Din vens Minecraft-navn",
"Find": "Find",
"For {name}": "Til {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Spørg den, der betaler, før du køber. Refusion inden for 14 dage uanset årsag.",
"Pay {price} in your browser": "Betal {price} i din browser",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddles betaling åbner i din browser. Intet trækkes i launcheren.",
"US sales tax is added where a state charges it.": "Amerikansk salgsmoms lægges til, hvor en stat opkræver den.",
"VAT included where it applies.": "Moms inkluderet, hvor den gælder.",
"In a set in your basket": "I et sæt i din kurv",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Gør betalingen færdig i din browser. Dine ting kommer i Garderoben et øjeblik efter.",
"{name} was left out: made for another Horizon version": "{name} blev udeladt: lavet til en anden Horizon-version",
"{name} was left out: clashes with {other}": "{name} blev udeladt: kolliderer med {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Åbn i privat vindue",
"Open this link in a private window to pick another account.": "Åbn dette link i et privat vindue for at vælge en anden konto.",
"Use a different Microsoft account": "Brug en anden Microsoft-konto"
"Use a different Microsoft account": "Brug en anden Microsoft-konto",
"Buy": "Køb",
"Gift": "Giv i gave",
"Looks": "Looks"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Gründer-Set beanspruchen",
"Claiming…": "Wird geholt…",
"The shop didn't load.": "Der Shop wurde nicht geladen.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Dinge für deinen Spieler, die alle sehen, die auf Horizon spielen.",
"Free for founders": "Gratis für Gründer",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Für die Spieler, die von Anfang an dabei waren. Gratis; einmal geholt, gehört es dir.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Schließe den kostenlosen Checkout in deinem Browser ab. Das Set erscheint kurz danach hier.",
"{n} items": "{n} Gegenstände",
"Nothing is on sale right now.": "Gerade ist nichts im Angebot.",
"Your basket": "Dein Warenkorb",
"Your basket is empty.": "Dein Warenkorb ist leer.",
"Add to basket": "In den Warenkorb",
"Total": "Gesamt",
"This is a gift": "Das ist ein Geschenk",
"Your friend's Minecraft name": "Minecraft-Name deines Freundes",
"Find": "Suchen",
"For {name}": "Für {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Frag vor dem Kauf, wer bezahlt. Erstattung innerhalb von 14 Tagen aus jedem Grund.",
"Pay {price} in your browser": "{price} im Browser bezahlen",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Die Kasse von Paddle öffnet sich in deinem Browser. Im Launcher wird nichts abgebucht.",
"US sales tax is added where a state charges it.": "US-Umsatzsteuer kommt hinzu, wo ein Bundesstaat sie erhebt.",
"VAT included where it applies.": "MwSt. inbegriffen, wo sie anfällt.",
"In a set in your basket": "In einem Set in deinem Warenkorb",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Schließe die Zahlung im Browser ab. Deine Gegenstände erscheinen kurz danach in der Garderobe.",
"{name} was left out: made for another Horizon version": "{name} wurde weggelassen: für eine andere Horizon-Version gemacht",
"{name} was left out: clashes with {other}": "{name} wurde weggelassen: kollidiert mit {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "In privatem Fenster öffnen",
"Open this link in a private window to pick another account.": "Öffne diesen Link in einem privaten Fenster, um ein anderes Konto auszuwählen.",
"Use a different Microsoft account": "Anderes Microsoft-Konto verwenden"
"Use a different Microsoft account": "Anderes Microsoft-Konto verwenden",
"Buy": "Kaufen",
"Gift": "Verschenken",
"Looks": "Looks"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Διεκδικήστε το ιδρυτικό σύνολο",
"Claiming…": "Διεκδίκηση…",
"The shop didn't load.": "Το κατάστημα δεν φόρτωσε.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Πράγματα για να φορέσει ο παίκτης σας, ορατά σε όλους όσοι παίζουν στο Horizon.",
"Free for founders": "Δωρεάν για ιδρυτές",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Για τους παίκτες που ήταν εδώ πρώτοι. Δωρεάν διεκδίκηση· μόλις το διεκδικήσετε, είναι δικό σας για πάντα.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Ολοκληρώστε τη δωρεάν πληρωμή στο πρόγραμμα περιήγησής σας. Το σετ εμφανίζεται εδώ λίγο αργότερα.",
"{n} items": "{n} αντικείμενα",
"Nothing is on sale right now.": "Τίποτα δεν πωλείται αυτή τη στιγμή.",
"Your basket": "Το καλάθι σας",
"Your basket is empty.": "Το καλάθι σας είναι άδειο.",
"Add to basket": "Προσθήκη στο καλάθι",
"Total": "Σύνολο",
"This is a gift": "Είναι δώρο",
"Your friend's Minecraft name": "Το όνομα Minecraft του φίλου σας",
"Find": "Εύρεση",
"For {name}": "Για {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Ρωτήστε όποιον πληρώνει πριν αγοράσετε. Επιστροφή χρημάτων εντός 14 ημερών για οποιονδήποτε λόγο.",
"Pay {price} in your browser": "Πληρωμή {price} στο πρόγραμμα περιήγησης",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Η πληρωμή του Paddle ανοίγει στο πρόγραμμα περιήγησης. Τίποτα δεν χρεώνεται στον εκκινητή.",
"US sales tax is added where a state charges it.": "Ο φόρος πωλήσεων ΗΠΑ προστίθεται όπου τον επιβάλλει η πολιτεία.",
"VAT included where it applies.": "Ο ΦΠΑ περιλαμβάνεται όπου ισχύει.",
"In a set in your basket": "Σε σετ στο καλάθι σας",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Ολοκληρώστε την πληρωμή στο πρόγραμμα περιήγησης. Τα αντικείμενα φτάνουν στη Γκαρνταρόμπα σε λίγο.",
"{name} was left out: made for another Horizon version": "Το {name} παραλείφθηκε: φτιάχτηκε για άλλη έκδοση του Horizon",
"{name} was left out: clashes with {other}": "Το {name} παραλείφθηκε: συγκρούεται με το {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Άνοιγμα σε ιδιωτικό παράθυρο",
"Open this link in a private window to pick another account.": "Ανοίξτε αυτόν τον σύνδεσμο σε ιδιωτικό παράθυρο για να επιλέξετε άλλον λογαριασμό.",
"Use a different Microsoft account": "Χρήση διαφορετικού λογαριασμού Microsoft"
"Use a different Microsoft account": "Χρήση διαφορετικού λογαριασμού Microsoft",
"Buy": "Αγορά",
"Gift": "Δώρο",
"Looks": "Εμφανίσεις"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Postulu la fondinton",
"Claiming…": "Postulante…",
"The shop didn't load.": "La vendejo ne ŝargiĝis.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Aĵoj por porti sur via ludanto, videblaj al ĉiuj, kiuj ludas en Horizon.",
"Free for founders": "Senpaga por fondintoj",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Por la ludantoj, kiuj estis ĉi tie unue. Senpage postuleblas; post la postulo ĝi estas via por ĉiam.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Finu la senpagan pagon en via retumilo. La aro aperos ĉi tie post momento.",
"{n} items": "{n} aĵoj",
"Nothing is on sale right now.": "Nenio estas vendata nun.",
"Your basket": "Via korbo",
"Your basket is empty.": "Via korbo estas malplena.",
"Add to basket": "Aldoni al korbo",
"Total": "Sumo",
"This is a gift": "Ĉi tio estas donaco",
"Your friend's Minecraft name": "La Minecraft-nomo de via amiko",
"Find": "Trovi",
"For {name}": "Por {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Demandu kiu pagas antaŭ ol aĉeti. Repago ene de 14 tagoj pro ajna kialo.",
"Pay {price} in your browser": "Pagi {price} en via retumilo",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "La pago de Paddle malfermiĝas en via retumilo. Nenio estas pagigita en la lanĉilo.",
"US sales tax is added where a state charges it.": "Usona vendimposto aldoniĝas kie ŝtato postulas ĝin.",
"VAT included where it applies.": "AVI inkluzivita kie ĝi validas.",
"In a set in your basket": "En aro en via korbo",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Finu la pagon en via retumilo. Viaj aĵoj alvenos en la Vestoŝrankon post momento.",
"{name} was left out: made for another Horizon version": "{name} estis preterlasita: farita por alia versio de Horizon",
"{name} was left out: clashes with {other}": "{name} estis preterlasita: konfliktas kun {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Malfermi en privata fenestro",
"Open this link in a private window to pick another account.": "Malfermu ĉi tiun ligilon en privata fenestro por elekti alian konton.",
"Use a different Microsoft account": "Uzi alian Microsoft-konton"
"Use a different Microsoft account": "Uzi alian Microsoft-konton",
"Buy": "Aĉeti",
"Gift": "Donaci",
"Looks": "Aspektoj"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Reclamar el set fundador",
"Claiming…": "Consiguiendo…",
"The shop didn't load.": "La tienda no se cargó.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Cosas que lleva tu jugador, visibles para todos los que juegan en Horizon.",
"Free for founders": "Gratis para fundadores",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Para quienes estuvieron aquí primero. Gratis; una vez conseguido, es tuyo para siempre.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Termina el pago gratuito en tu navegador. El set llegará aquí un momento después.",
"{n} items": "{n} objetos",
"Nothing is on sale right now.": "Ahora mismo no hay nada a la venta.",
"Your basket": "Tu cesta",
"Your basket is empty.": "Tu cesta está vacía.",
"Add to basket": "Añadir a la cesta",
"Total": "Total",
"This is a gift": "Es un regalo",
"Your friend's Minecraft name": "El nombre de Minecraft de tu amigo",
"Find": "Buscar",
"For {name}": "Para {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pregunta a quien paga antes de comprar. Reembolsos en 14 días por cualquier motivo.",
"Pay {price} in your browser": "Pagar {price} en el navegador",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "El pago de Paddle se abre en tu navegador. No se cobra nada en el launcher.",
"US sales tax is added where a state charges it.": "Se añade el impuesto sobre las ventas de EE. UU. donde un estado lo cobra.",
"VAT included where it applies.": "IVA incluido donde corresponde.",
"In a set in your basket": "En un conjunto de tu cesta",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Termina el pago en tu navegador. Tus objetos llegan al Armario un momento después.",
"{name} was left out: made for another Horizon version": "Se dejó fuera {name}: hecho para otra versión de Horizon",
"{name} was left out: clashes with {other}": "Se dejó fuera {name}: choca con {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Abrir en ventana privada",
"Open this link in a private window to pick another account.": "Abre este enlace en una ventana privada para elegir otra cuenta.",
"Use a different Microsoft account": "Usar otra cuenta de Microsoft"
"Use a different Microsoft account": "Usar otra cuenta de Microsoft",
"Buy": "Comprar",
"Gift": "Regalar",
"Looks": "Looks"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Nõudke asutajakomplekti",
"Claiming…": "Välja võtmine…",
"The shop didn't load.": "Poodi ei õnnestunud laadida.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Asjad mängija jaoks, mida näevad kõik, kes Horizonis mängivad.",
"Free for founders": "Tasuta asutajatele",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Mängijatele, kes olid siin esimesed. Tasuta välja võtta; kui olete selle välja võtnud, jääb see teile igaveseks.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Lõpetage tasuta makse oma brauseris. Komplekt ilmub siia hetke pärast.",
"{n} items": "{n} eset",
"Nothing is on sale right now.": "Praegu pole midagi müügil.",
"Your basket": "Sinu ostukorv",
"Your basket is empty.": "Sinu ostukorv on tühi.",
"Add to basket": "Lisa ostukorvi",
"Total": "Kokku",
"This is a gift": "See on kingitus",
"Your friend's Minecraft name": "Sinu sõbra Minecrafti nimi",
"Find": "Otsi",
"For {name}": "Saajale {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Enne ostmist küsi maksjalt. Raha tagastatakse 14 päeva jooksul mis tahes põhjusel.",
"Pay {price} in your browser": "Maksa {price} brauseris",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle'i makse avaneb brauseris. Käivitis ei võeta midagi.",
"US sales tax is added where a state charges it.": "USA müügimaks lisandub seal, kus osariik seda nõuab.",
"VAT included where it applies.": "Käibemaks sisaldub seal, kus see kehtib.",
"In a set in your basket": "Komplektis sinu ostukorvis",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Lõpeta makse brauseris. Esemed jõuavad Garderoobi hetke pärast.",
"{name} was left out: made for another Horizon version": "{name} jäeti välja: tehtud teise Horizoni versiooni jaoks",
"{name} was left out: clashes with {other}": "{name} jäeti välja: on vastuolus modiga {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Ava privaatses aknas",
"Open this link in a private window to pick another account.": "Ava see link privaatses aknas, et valida teine konto.",
"Use a different Microsoft account": "Kasuta teist Microsofti kontot"
"Use a different Microsoft account": "Kasuta teist Microsofti kontot",
"Buy": "Osta",
"Gift": "Kingi",
"Looks": "Välimused"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Erreklamatu sortzaile multzoa",
"Claiming…": "Eskatzen…",
"The shop didn't load.": "Dendak ez du kargatu.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Zure jokalariak jantzitako gauzak, Horizon-en jokatzen duen guztiek ikusiak.",
"Free for founders": "Sortzaileentzat doakoa",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Lehenengo hemen egon ziren jokalarientzat. Doan eska daiteke; behin eskatuta, zurea da betiko.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Amaitu doako ordainketa zure nabigatzailean. Multzoa pixka bat geroago iritsiko da hona.",
"{n} items": "{n} elementu",
"Nothing is on sale right now.": "Orain ez dago ezer salgai.",
"Your basket": "Zure saskia",
"Your basket is empty.": "Zure saskia hutsik dago.",
"Add to basket": "Gehitu saskira",
"Total": "Guztira",
"This is a gift": "Opari bat da",
"Your friend's Minecraft name": "Zure lagunaren Minecraft izena",
"Find": "Bilatu",
"For {name}": "{name}rentzat",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Galdetu ordainduko duenari erosi aurretik. Itzulketak 14 egunen barruan edozein arrazoirengatik.",
"Pay {price} in your browser": "Ordaindu {price} nabigatzailean",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle-ren ordainketa nabigatzailean irekitzen da. Abiarazlean ez da ezer kobratzen.",
"US sales tax is added where a state charges it.": "AEBetako salmenta-zerga gehitzen da estatu batek kobratzen duen lekuan.",
"VAT included where it applies.": "BEZ barne, aplikatzen den lekuan.",
"In a set in your basket": "Zure saskiko multzo batean",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Amaitu ordainketa nabigatzailean. Zure elementuak Armairura iritsiko dira une batean.",
"{name} was left out: made for another Horizon version": "{name} kanpoan utzi da: Horizonen beste bertsio baterako egina",
"{name} was left out: clashes with {other}": "{name} kanpoan utzi da: {other}(r)ekin talka egiten du",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Ireki leiho pribatuan",
"Open this link in a private window to pick another account.": "Ireki esteka hau leiho pribatu batean beste kontu bat aukeratzeko.",
"Use a different Microsoft account": "Erabili beste Microsoft kontu bat"
"Use a different Microsoft account": "Erabili beste Microsoft kontu bat",
"Buy": "Erosi",
"Gift": "Oparitu",
"Looks": "Itxurak"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "مجموعه موسس را ادعا کنید",
"Claiming…": "در حال دریافت…",
"The shop didn't load.": "فروشگاه بارگذاری نشد.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "چیزهایی برای پوشیدن بازیکن شما که همهٔ کسانی که در Horizon بازی می‌کنند می‌بینند.",
"Free for founders": "رایگان برای بنیان‌گذاران",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "برای بازیکنانی که اولین بار اینجا بودند. رایگان قابل دریافت است؛ پس از دریافت، برای همیشه مال شماست.",
"Finish the free checkout in your browser. The set lands here a moment later.": "پرداخت رایگان را در مرورگر خود کامل کنید. مجموعه چند لحظه بعد اینجا ظاهر می‌شود.",
"{n} items": "{n} آیتم",
"Nothing is on sale right now.": "الان چیزی برای فروش نیست.",
"Your basket": "سبد شما",
"Your basket is empty.": "سبد شما خالی است.",
"Add to basket": "افزودن به سبد",
"Total": "مجموع",
"This is a gift": "این یک هدیه است",
"Your friend's Minecraft name": "نام Minecraft دوستتان",
"Find": "یافتن",
"For {name}": "برای {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "پیش از خرید از کسی که پول می‌دهد بپرسید. بازپرداخت تا ۱۴ روز به هر دلیلی.",
"Pay {price} in your browser": "پرداخت {price} در مرورگر",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "پرداخت Paddle در مرورگرتان باز می‌شود. در لانچر هیچ مبلغی کسر نمی‌شود.",
"US sales tax is added where a state charges it.": "مالیات فروش آمریکا هر جا ایالتی آن را بگیرد اضافه می‌شود.",
"VAT included where it applies.": "مالیات بر ارزش افزوده هر جا لازم باشد گنجانده شده است.",
"In a set in your basket": "در یک مجموعه در سبد شما",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "پرداخت را در مرورگر تمام کنید. آیتم‌هایتان کمی بعد به کمد لباس می‌رسند.",
"{name} was left out: made for another Horizon version": "{name} کنار گذاشته شد: برای نسخهٔ دیگری از Horizon ساخته شده",
"{name} was left out: clashes with {other}": "{name} کنار گذاشته شد: با {other} تداخل دارد",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "باز کردن در پنجره ناشناس",
"Open this link in a private window to pick another account.": "برای انتخاب حساب دیگر، این پیوند را در یک پنجره ناشناس باز کنید.",
"Use a different Microsoft account": "استفاده از حساب مایکروسافت دیگر"
"Use a different Microsoft account": "استفاده از حساب مایکروسافت دیگر",
"Buy": "خرید",
"Gift": "هدیه دادن",
"Looks": "ظاهرها"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Lunasta perustajasarja",
"Claiming…": "Lunastetaan…",
"The shop didn't load.": "Kauppa ei latautunut.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Puettavaa pelaajallesi, kaikkien Horizonissa pelaavien nähtäväksi.",
"Free for founders": "Ilmainen perustajille",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Pelaajille, jotka olivat täällä ensin. Ilmainen; lunastettuna se on pysyvästi sinun.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Viimeistele ilmainen kassa selaimessasi. Setti ilmestyy tänne hetken kuluttua.",
"{n} items": "{n} esinettä",
"Nothing is on sale right now.": "Mitään ei ole nyt myynnissä.",
"Your basket": "Ostoskorisi",
"Your basket is empty.": "Ostoskorisi on tyhjä.",
"Add to basket": "Lisää koriin",
"Total": "Yhteensä",
"This is a gift": "Tämä on lahja",
"Your friend's Minecraft name": "Ystäväsi Minecraft-nimi",
"Find": "Etsi",
"For {name}": "Saajalle {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Kysy maksajalta ennen ostamista. Hyvitys 14 päivän sisällä mistä tahansa syystä.",
"Pay {price} in your browser": "Maksa {price} selaimessa",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddlen maksu avautuu selaimeesi. Käynnistimessä ei veloiteta mitään.",
"US sales tax is added where a state charges it.": "Yhdysvaltain myyntivero lisätään, jos osavaltio perii sen.",
"VAT included where it applies.": "ALV sisältyy, missä sitä sovelletaan.",
"In a set in your basket": "Korisi setissä",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Viimeistele maksu selaimessa. Esineet saapuvat Vaatekaappiin hetken kuluttua.",
"{name} was left out: made for another Horizon version": "{name} jätettiin pois: tehty toiselle Horizon-versiolle",
"{name} was left out: clashes with {other}": "{name} jätettiin pois: törmää modin {other} kanssa",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Avaa yksityisessä ikkunassa",
"Open this link in a private window to pick another account.": "Avaa tämä linkki yksityisessä ikkunassa valitaksesi toisen tilin.",
"Use a different Microsoft account": "Käytä toista Microsoft-tiliä"
"Use a different Microsoft account": "Käytä toista Microsoft-tiliä",
"Buy": "Osta",
"Gift": "Lahjoita",
"Looks": "Asut"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "I-claim ang founder set",
"Claiming…": "Kina-claim…",
"The shop didn't load.": "Hindi nag-load ang shop.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Mga isusuot para sa iyong player, nakikita ng lahat ng naglalaro sa Horizon.",
"Free for founders": "Libre para sa mga founder",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Para sa mga manlalarong nauna rito. Libreng i-claim; kapag na-claim mo na, sa iyo na ito habambuhay.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Tapusin ang libreng checkout sa iyong browser. Lalabas dito ang set pagkalipas ng ilang sandali.",
"{n} items": "{n} item",
"Nothing is on sale right now.": "Walang ibinebenta ngayon.",
"Your basket": "Ang basket mo",
"Your basket is empty.": "Walang laman ang basket mo.",
"Add to basket": "Idagdag sa basket",
"Total": "Kabuuan",
"This is a gift": "Regalo ito",
"Your friend's Minecraft name": "Pangalan sa Minecraft ng kaibigan mo",
"Find": "Hanapin",
"For {name}": "Para kay {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Tanungin ang magbabayad bago ka bumili. Refund sa loob ng 14 na araw sa anumang dahilan.",
"Pay {price} in your browser": "Bayaran ang {price} sa browser mo",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Bubukas sa browser mo ang bayaran ng Paddle. Walang sisingilin sa launcher.",
"US sales tax is added where a state charges it.": "Idinadagdag ang US sales tax kung saan sinisingil ito ng estado.",
"VAT included where it applies.": "Kasama ang VAT kung saan ito ipinapataw.",
"In a set in your basket": "Nasa isang set sa basket mo",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Tapusin ang pagbabayad sa browser mo. Darating ang mga item mo sa Wardrobe pagkaraan ng ilang sandali.",
"{name} was left out: made for another Horizon version": "Hindi isinama ang {name}: ginawa para sa ibang bersyon ng Horizon",
"{name} was left out: clashes with {other}": "Hindi isinama ang {name}: sumasalungat sa {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Buksan sa private window",
"Open this link in a private window to pick another account.": "Buksan ang link na ito sa private window para pumili ng ibang account.",
"Use a different Microsoft account": "Gumamit ng ibang Microsoft account"
"Use a different Microsoft account": "Gumamit ng ibang Microsoft account",
"Buy": "Bilhin",
"Gift": "Iregalo",
"Looks": "Mga look"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Krev stovnarasettið",
"Claiming…": "Krevur…",
"The shop didn't load.": "Handilin legði ikki.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Hlutir at bera á spælaranum hjá tær, sjónligir fyri øll sum spæla á Horizon.",
"Free for founders": "Ókeypis til stovnarar",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Til spælararnar sum vóru her fyrstir. Ókeypis at krevja; tá tú hevur kravt tað, er tað títt fyri altíð.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Enda tann ókeypis útrokningina í tínum kaga. Settið kemur higar eina løtu seinni.",
"{n} items": "{n} lutir",
"Nothing is on sale right now.": "Einki er til sølu júst nú.",
"Your basket": "Tín kurvur",
"Your basket is empty.": "Tín kurvur er tómur.",
"Add to basket": "Legg í kurvin",
"Total": "Tilsamans",
"This is a gift": "Hetta er ein gáva",
"Your friend's Minecraft name": "Minecraft-navnið á vini tínum",
"Find": "Finn",
"For {name}": "Til {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Spyr tann, ið rindar, áðrenn tú keypir. Endurgjald innan 14 dagar uttan mun til orsøk.",
"Pay {price} in your browser": "Rinda {price} í kaganum",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Gjaldingin hjá Paddle opnast í kaganum. Einki verður kravt í byrjaranum.",
"US sales tax is added where a state charges it.": "Amerikanskur søluskattur verður lagdur afturat, har ein statur krevur hann.",
"VAT included where it applies.": "MVG íroknað, har tað er galdandi.",
"In a set in your basket": "Í einum setti í tínum kurvi",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Ger gjaldingina lidna í kaganum. Lutirnir koma í Klæðaskápið eina løtu seinni.",
"{name} was left out: made for another Horizon version": "{name} varð útihildin: gjørd til eina aðra útgávu av Horizon",
"{name} was left out: clashes with {other}": "{name} varð útihildin: stríðist við {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Opna í privatum glugga",
"Open this link in a private window to pick another account.": "Opna hesa leinkju í privatum glugga fyri at velja eina aðra kontu.",
"Use a different Microsoft account": "Brúka eina aðra Microsoft kontu"
"Use a different Microsoft account": "Brúka eina aðra Microsoft kontu",
"Buy": "Keyp",
"Gift": "Gev í gávu",
"Looks": "Útsjónir"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Réclamer le set fondateur",
"Claiming…": "Récupération…",
"The shop didn't load.": "La boutique n'a pas chargé.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "De quoi habiller ton joueur, visible par tous ceux qui jouent sur Horizon.",
"Free for founders": "Gratuit pour les fondateurs",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Pour les joueurs qui étaient là en premier. Gratuit ; une fois récupéré, il est à toi pour de bon.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Termine le paiement gratuit dans ton navigateur. Le set arrive ici un instant plus tard.",
"{n} items": "{n} objets",
"Nothing is on sale right now.": "Rien n'est en vente pour le moment.",
"Your basket": "Votre panier",
"Your basket is empty.": "Votre panier est vide.",
"Add to basket": "Ajouter au panier",
"Total": "Total",
"This is a gift": "C'est un cadeau",
"Your friend's Minecraft name": "Le nom Minecraft de votre ami",
"Find": "Chercher",
"For {name}": "Pour {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Demandez à la personne qui paie avant d'acheter. Remboursement sous 14 jours, quelle qu'en soit la raison.",
"Pay {price} in your browser": "Payer {price} dans le navigateur",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Le paiement de Paddle s'ouvre dans votre navigateur. Rien n'est débité dans le launcher.",
"US sales tax is added where a state charges it.": "La taxe de vente américaine s'ajoute là où un État la perçoit.",
"VAT included where it applies.": "TVA incluse là où elle s'applique.",
"In a set in your basket": "Dans un set de votre panier",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Terminez le paiement dans votre navigateur. Vos objets arrivent dans la Garde-robe un instant plus tard.",
"{name} was left out: made for another Horizon version": "{name} a été laissé de côté : fait pour une autre version de Horizon",
"{name} was left out: clashes with {other}": "{name} a été laissé de côté : en conflit avec {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Ouvrir dans une fenêtre de navigation privée",
"Open this link in a private window to pick another account.": "Ouvrez ce lien dans une fenêtre de navigation privée pour choisir un autre compte.",
"Use a different Microsoft account": "Utiliser un autre compte Microsoft"
"Use a different Microsoft account": "Utiliser un autre compte Microsoft",
"Buy": "Acheter",
"Gift": "Offrir",
"Looks": "Tenues"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Rivendicâ il grup dai fondadôrs",
"Claiming…": "Daûr a reclamâ…",
"The shop didn't load.": "La buteghe no si à cjamât.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Robis di meti al to zuiadôr, che a vedin ducj chei che a zuin su Horizon.",
"Free for founders": "Gratis pai fondadôrs",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Pai zuiadôrs che a jerin ca par prins. Gratis di reclamâ; une volte reclamât, al è to par simpri.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Finìs il paiament gratuit tal to navigadôr. Il set al rive culì un moment dopo.",
"{n} items": "{n} ogjets",
"Nothing is on sale right now.": "Nuie al è in vendite cumò.",
"Your basket": "La tô çeste",
"Your basket is empty.": "La tô çeste e je vueide.",
"Add to basket": "Zonte te çeste",
"Total": "Totâl",
"This is a gift": "Al è un regâl",
"Your friend's Minecraft name": "Il non di Minecraft dal tô amì",
"Find": "Cjate",
"For {name}": "Par {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Domande a cui che al paie prime di comprâ. Rimbors dentri di 14 dîs par cualsisei reson.",
"Pay {price} in your browser": "Paie {price} tal navigadôr",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Il paiament di Paddle si vierç tal tô navigadôr. Nuie al ven cjapât tal inviadôr.",
"US sales tax is added where a state charges it.": "La tasse su lis venditis dai USA e ven zontade dulà che un stât le domande.",
"VAT included where it applies.": "IVA includude dulà che si aplche.",
"In a set in your basket": "Intun set te tô çeste",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Finìs il paiament tal navigadôr. I tiei ogjets a rivin tal Vistiari dopo un moment.",
"{name} was left out: made for another Horizon version": "{name} al è stât lassât fûr: fat par une altre version di Horizon",
"{name} was left out: clashes with {other}": "{name} al è stât lassât fûr: al va in conflit cun {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Vierç intun barcon privât",
"Open this link in a private window to pick another account.": "Vierç chest leam intun barcon privât par sielzi un altri conto.",
"Use a different Microsoft account": "Dopre un altri conto Microsoft"
"Use a different Microsoft account": "Dopre un altri conto Microsoft",
"Buy": "Compre",
"Gift": "Regale",
"Looks": "Stîi"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Claim de oprjochter set",
"Claiming…": "Opeaskje…",
"The shop didn't load.": "De winkel is net laden.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Dingen om oan te lûken foar dyn spiler, sichtber foar elkenien dy’t op Horizon spilet.",
"Free for founders": "Fergees foar oprjochters",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Foar de spilers dy’t hjir earst wiene. Fergees op te easkjen; ienris opeaske is it foar altyd fan dy.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Meitsje de fergese checkout ôf yn dyn browser. De set komt efkes letter hjir telâne.",
"{n} items": "{n} items",
"Nothing is on sale right now.": "Der is no neat te keap.",
"Your basket": "Dyn koerke",
"Your basket is empty.": "Dyn koerke is leech.",
"Add to basket": "Oan koerke tafoegje",
"Total": "Totaal",
"This is a gift": "Dit is in kado",
"Your friend's Minecraft name": "De Minecraft-namme fan dyn freon",
"Find": "Sykje",
"For {name}": "Foar {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Freegje wa't betellet foardatst keapest. Jild werom binnen 14 dagen om hokker reden ek.",
"Pay {price} in your browser": "{price} betelje yn dyn browser",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "De betelling fan Paddle iepenet yn dyn browser. Yn de launcher wurdt neat yn rekken brocht.",
"US sales tax is added where a state charges it.": "Amerikaanske ferkeapbelesting komt derby dêr't in steat dy hellet.",
"VAT included where it applies.": "Btw ynbegrepen dêr't dy jildt.",
"In a set in your basket": "Yn in set yn dyn koerke",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Meitsje de betelling ôf yn dyn browser. Dyn items komme efkes letter yn de Klaaikast.",
"{name} was left out: made for another Horizon version": "{name} is weilitten: makke foar in oare Horizon-ferzje",
"{name} was left out: clashes with {other}": "{name} is weilitten: botst mei {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Iepenje yn in priveefinster",
"Open this link in a private window to pick another account.": "Iepenje dizze keppeling yn in priveefinster om in oar akkount te kiezen.",
"Use a different Microsoft account": "Brûk in oar Microsoft akkount"
"Use a different Microsoft account": "Brûk in oar Microsoft akkount",
"Buy": "Keapje",
"Gift": "Kado jaan",
"Looks": "Looks"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Éileamh an tacar bunaitheoir",
"Claiming…": "Ag éileamh…",
"The shop didn't load.": "Níor luchtaigh an siopa.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Rudaí le caitheamh ar d’imreoir, le feiceáil ag gach duine a imríonn ar Horizon.",
"Free for founders": "Saor in aisce do bhunaitheoirí",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Do na himreoirí a bhí anseo ar dtús. Saor in aisce le héileamh; nuair a éilíonn tú é, is leatsa go deo é.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Críochnaigh an tseiceáil amach shaor in aisce i do bhrabhsálaí. Tiocfaidh an tsraith anseo nóiméad ina dhiaidh sin.",
"{n} items": "{n} míreanna",
"Nothing is on sale right now.": "Níl aon rud ar díol faoi láthair.",
"Your basket": "Do chiseán",
"Your basket is empty.": "Tá do chiseán folamh.",
"Add to basket": "Cuir sa chiseán",
"Total": "Iomlán",
"This is a gift": "Is bronntanas é seo",
"Your friend's Minecraft name": "Ainm Minecraft do chara",
"Find": "Aimsigh",
"For {name}": "Do {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Fiafraigh de cibé duine a íocann sula gceannaíonn tú. Aisíocaíocht laistigh de 14 lá ar chúis ar bith.",
"Pay {price} in your browser": "Íoc {price} i do bhrabhsálaí",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Osclaítear íocaíocht Paddle i do bhrabhsálaí. Ní ghearrtar aon rud sa lainseálaí.",
"US sales tax is added where a state charges it.": "Cuirtear cáin díolacháin SAM leis nuair a ghearrann stát í.",
"VAT included where it applies.": "CBL san áireamh nuair is infheidhme.",
"In a set in your basket": "I sraith i do chiseán",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Críochnaigh an íocaíocht i do bhrabhsálaí. Tiocfaidh do mhíreanna chuig an Vardrús i gceann nóiméid.",
"{name} was left out: made for another Horizon version": "Fágadh {name} amach: déanta do leagan eile de Horizon",
"{name} was left out: clashes with {other}": "Fágadh {name} amach: tagann sé salach ar {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Oscail i bhfuinneog phríobháideach",
"Open this link in a private window to pick another account.": "Oscail an nasc seo i bhfuinneog phríobháideach chun cuntas eile a roghnú.",
"Use a different Microsoft account": "Úsáid cuntas Microsoft eile"
"Use a different Microsoft account": "Úsáid cuntas Microsoft eile",
"Buy": "Ceannaigh",
"Gift": "Tabhair mar bhronntanas",
"Looks": "Stíleanna"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Dèan tagradh air an t-seata stèidheadair",
"Claiming…": "A' tagradh…",
"The shop didn't load.": "Cha do luchdaich a' bhùth.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Rudan airson do chluicheadair a chaitheamh, a chì a h-uile duine a chluicheas air Horizon.",
"Free for founders": "An-asgaidh dha luchd-stèidheachaidh",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Dha na cluicheadairean a bha an seo an toiseach. An-asgaidh airson tagradh; nuair a thagras tu e, bidh e agad gu bràth.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Cuir crìoch air a' phàigheadh an-asgaidh sa bhrobhsair agad. Nochdaidh an seata an seo greis às deidh sin.",
"{n} items": "{n} nithean",
"Nothing is on sale right now.": "Chan eil dad ri reic an-dràsta.",
"Your basket": "Do bhasgaid",
"Your basket is empty.": "Tha do bhasgaid falamh.",
"Add to basket": "Cuir ris a' bhasgaid",
"Total": "Iomlan",
"This is a gift": "'S e tiodhlac a th' ann",
"Your friend's Minecraft name": "Ainm Minecraft do charaid",
"Find": "Lorg",
"For {name}": "Do {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Faighnich dhen neach a phàigheas mus ceannaich thu. Ais-dhìoladh taobh a-staigh 14 làithean air adhbhar sam bith.",
"Pay {price} in your browser": "Pàigh {price} sa bhrabhsair",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Fosglaidh pàigheadh Paddle sa bhrabhsair agad. Cha tèid dad a thogail san lòinsear.",
"US sales tax is added where a state charges it.": "Thèid cìs reic nan SA a chur ris far an tog stàit i.",
"VAT included where it applies.": "VAT na bhroinn far a bheil i iomchaidh.",
"In a set in your basket": "Ann an seata sa bhasgaid agad",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Crìochnaich am pàigheadh sa bhrabhsair. Ruigidh na nithean agad am Preas-aodaich an ceann greis.",
"{name} was left out: made for another Horizon version": "Chaidh {name} fhàgail às: air a dhèanamh airson tionndadh eile de Horizon",
"{name} was left out: clashes with {other}": "Chaidh {name} fhàgail às: tha e a' bualadh air {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Fosgail ann an uinneag phrìobhaideach",
"Open this link in a private window to pick another account.": "Fosgail an ceangal seo ann an uinneag phrìobhaideach gus cunntas eile a thaghadh.",
"Use a different Microsoft account": "Cleachd cunntas Microsoft eile"
"Use a different Microsoft account": "Cleachd cunntas Microsoft eile",
"Buy": "Ceannaich",
"Gift": "Thoir mar thiodhlac",
"Looks": "Coltasan"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Reclama o conxunto do fundador",
"Claiming…": "Reclamando…",
"The shop didn't load.": "A tenda non se cargou.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Cousas para levar co teu xogador, que ve todo o mundo que xoga en Horizon.",
"Free for founders": "Gratis para fundadores",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Para os xogadores que estiveron aquí primeiro. Gratis para reclamar; unha vez reclamado, é teu para sempre.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Remata o pagamento gratuíto no navegador. O set chegará aquí un momento despois.",
"{n} items": "{n} obxectos",
"Nothing is on sale right now.": "Agora mesmo non hai nada á venda.",
"Your basket": "A túa cesta",
"Your basket is empty.": "A túa cesta está baleira.",
"Add to basket": "Engadir á cesta",
"Total": "Total",
"This is a gift": "É un agasallo",
"Your friend's Minecraft name": "O nome de Minecraft do teu amigo",
"Find": "Buscar",
"For {name}": "Para {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pregunta a quen paga antes de mercar. Reembolsos en 14 días por calquera motivo.",
"Pay {price} in your browser": "Pagar {price} no navegador",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "O pagamento de Paddle ábrese no teu navegador. Non se cobra nada no lanzador.",
"US sales tax is added where a state charges it.": "Engádese o imposto sobre vendas dos EUA onde un estado o cobra.",
"VAT included where it applies.": "IVE incluído onde se aplica.",
"In a set in your basket": "Nun conxunto da túa cesta",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Remata o pagamento no navegador. Os teus obxectos chegan ao Armario un momento despois.",
"{name} was left out: made for another Horizon version": "Deixouse fóra {name}: feito para outra versión de Horizon",
"{name} was left out: clashes with {other}": "Deixouse fóra {name}: choca con {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Abrir nunha xanela privada",
"Open this link in a private window to pick another account.": "Abre esta ligazón nunha xanela privada para escoller outra conta.",
"Use a different Microsoft account": "Usar outra conta de Microsoft"
"Use a different Microsoft account": "Usar outra conta de Microsoft",
"Buy": "Mercar",
"Gift": "Agasallar",
"Looks": "Estilos"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "E koi i ka mea hoʻokumu",
"Claiming…": "E loaʻa ana…",
"The shop didn't load.": "ʻAʻole i hoʻouka ʻia ka hale kūʻai.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Nā mea e ʻaʻahu ai no kāu mea pāʻani, ʻike ʻia e ka poʻe a pau e pāʻani ana ma Horizon.",
"Free for founders": "Manuahi no ka poʻe hoʻokumu",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "No nā mea pāʻani i hiki mua mai. Manuahi e loaʻa; i ka wā i loaʻa ai, nou mau loa.",
"Finish the free checkout in your browser. The set lands here a moment later.": "E hoʻopau i ka uku manuahi ma kāu polokalamu kele pūnaewele. E ʻike ʻia ana ka pūʻulu ma ʻaneʻi ma hope koke iho.",
"{n} items": "{n} mau mea",
"Nothing is on sale right now.": "ʻAʻohe mea e kūʻai ʻia ana i kēia manawa.",
"Your basket": "Kāu hīnaʻi",
"Your basket is empty.": "Ua hakahaka kāu hīnaʻi.",
"Add to basket": "Hoʻokomo i ka hīnaʻi",
"Total": "Huina",
"This is a gift": "He makana kēia",
"Your friend's Minecraft name": "Ka inoa Minecraft o kou hoaaloha",
"Find": "Huli",
"For {name}": "No {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "E nīnau i ka mea e uku ana ma mua o kou kūʻai ʻana. Hoʻihoʻi kālā i loko o 14 lā no kekahi kumu.",
"Pay {price} in your browser": "Uku i {price} ma kāu polokalamu pūnaewele",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Wehe ʻia ka uku Paddle ma kāu polokalamu pūnaewele. ʻAʻohe mea i uku ʻia ma ka launcher.",
"US sales tax is added where a state charges it.": "Hoʻohui ʻia ka ʻauhau kūʻai US ma kahi e ʻohi ai ka mokuʻāina.",
"VAT included where it applies.": "Komo pū ka VAT ma kahi e pili ai.",
"In a set in your basket": "I loko o kahi pūʻulu ma kāu hīnaʻi",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "E hoʻopau i ka uku ma kāu polokalamu pūnaewele. E hiki kāu mau mea i ka Lole ma hope iki.",
"{name} was left out: made for another Horizon version": "Ua waiho ʻia ʻo {name}: hana ʻia no kekahi mana ʻē aʻe o Horizon",
"{name} was left out: clashes with {other}": "Ua waiho ʻia ʻo {name}: kūʻē ia me {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "E wehe i loko o ka puka makani pilikino",
"Open this link in a private window to pick another account.": "E wehe i kēia loulou ma kahi puka makani pilikino e koho ai i kekahi moʻokāki ʻē aʻe.",
"Use a different Microsoft account": "E hoʻohana i kahi moʻokāki Microsoft ʻē aʻe"
"Use a different Microsoft account": "E hoʻohana i kahi moʻokāki Microsoft ʻē aʻe",
"Buy": "Kūʻai",
"Gift": "Hāʻawi makana",
"Looks": "Nā helehelena"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "תבע את סט המייסדים",
"Claiming…": "מקבל…",
"The shop didn't load.": "החנות לא נטענה.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "פריטים שהשחקן שלך לובש, גלויים לכל מי שמשחק ב־Horizon.",
"Free for founders": "חינם למייסדים",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "לשחקנים שהיו כאן ראשונים. חינם; אחרי שתקבל אותו, הוא שלך.",
"Finish the free checkout in your browser. The set lands here a moment later.": "סיים את התשלום החינמי בדפדפן. הסט יופיע כאן רגע אחר כך.",
"{n} items": "{n} פריטים",
"Nothing is on sale right now.": "שום דבר לא למכירה כרגע.",
"Your basket": "הסל שלך",
"Your basket is empty.": "הסל שלך ריק.",
"Add to basket": "הוספה לסל",
"Total": "סה״כ",
"This is a gift": "זו מתנה",
"Your friend's Minecraft name": "שם ה-Minecraft של החבר שלך",
"Find": "חיפוש",
"For {name}": "עבור {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "שאלו את מי שמשלם לפני שאתם קונים. החזר כספי תוך 14 יום מכל סיבה.",
"Pay {price} in your browser": "לשלם {price} בדפדפן",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "התשלום של Paddle נפתח בדפדפן. שום דבר לא מחויב במשגר.",
"US sales tax is added where a state charges it.": "מס מכירה אמריקאי מתווסף היכן שמדינה גובה אותו.",
"VAT included where it applies.": "מע״מ כלול היכן שהוא חל.",
"In a set in your basket": "בתוך סט בסל שלך",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "סיימו לשלם בדפדפן. הפריטים יגיעו לארון הבגדים בעוד רגע.",
"{name} was left out: made for another Horizon version": "{name} הושמט: נוצר לגרסה אחרת של Horizon",
"{name} was left out: clashes with {other}": "{name} הושמט: מתנגש עם {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "פתח בחלון פרטי",
"Open this link in a private window to pick another account.": "פתח את הקישור הזה בחלון פרטי כדי לבחור חשבון אחר.",
"Use a different Microsoft account": "השתמש בחשבון Microsoft אחר"
"Use a different Microsoft account": "השתמש בחשבון Microsoft אחר",
"Buy": "קנייה",
"Gift": "מתנה",
"Looks": "מראות"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "फ़ाउंडर सेट लें",
"Claiming…": "प्राप्त किया जा रहा है…",
"The shop didn't load.": "दुकान लोड नहीं हुई।",
"Things to wear for your player, seen by everyone who plays on Horizon.": "आपके खिलाड़ी के पहनने की चीज़ें, जो Horizon पर खेलने वाले सभी देखते हैं।",
"Free for founders": "संस्थापकों के लिए मुफ़्त",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "उन खिलाड़ियों के लिए जो सबसे पहले आए। मुफ़्त; एक बार मिलने पर हमेशा आपका।",
"Finish the free checkout in your browser. The set lands here a moment later.": "अपने ब्राउज़र में मुफ़्त चेकआउट पूरा करें। सेट कुछ ही देर में यहाँ आ जाएगा।",
"{n} items": "{n} चीज़ें",
"Nothing is on sale right now.": "अभी कुछ भी बिक्री पर नहीं है।",
"Your basket": "आपकी टोकरी",
"Your basket is empty.": "आपकी टोकरी खाली है।",
"Add to basket": "टोकरी में जोड़ें",
"Total": "कुल",
"This is a gift": "यह एक उपहार है",
"Your friend's Minecraft name": "आपके दोस्त का Minecraft नाम",
"Find": "खोजें",
"For {name}": "{name} के लिए",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "खरीदने से पहले जो भुगतान करेगा उससे पूछ लें। किसी भी कारण से 14 दिनों में धनवापसी।",
"Pay {price} in your browser": "ब्राउज़र में {price} चुकाएँ",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle का भुगतान आपके ब्राउज़र में खुलता है। लॉन्चर में कुछ नहीं काटा जाता।",
"US sales tax is added where a state charges it.": "जहाँ कोई राज्य लेता है, वहाँ अमेरिकी बिक्री कर जोड़ा जाता है।",
"VAT included where it applies.": "जहाँ लागू हो, वहाँ VAT शामिल है।",
"In a set in your basket": "आपकी टोकरी के एक सेट में",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "ब्राउज़र में भुगतान पूरा करें। आपकी चीज़ें थोड़ी देर में वार्डरोब में आ जाएँगी।",
"{name} was left out: made for another Horizon version": "{name} छोड़ दिया गया: Horizon के किसी दूसरे संस्करण के लिए बना है",
"{name} was left out: clashes with {other}": "{name} छोड़ दिया गया: {other} से टकराता है",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "निजी विंडो में खोलें",
"Open this link in a private window to pick another account.": "दूसरा खाता चुनने के लिए इस लिंक को निजी विंडो में खोलें।",
"Use a different Microsoft account": "दूसरे Microsoft खाते का उपयोग करें"
"Use a different Microsoft account": "दूसरे Microsoft खाते का उपयोग करें",
"Buy": "खरीदें",
"Gift": "उपहार दें",
"Looks": "लुक"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Preuzmi osnivački set",
"Claiming…": "Preuzimanje…",
"The shop didn't load.": "Trgovina se nije učitala.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Stvari koje tvoj igrač nosi, vidljive svima koji igraju na Horizonu.",
"Free for founders": "Besplatno za osnivače",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Za igrače koji su bili ovdje prvi. Besplatno; kad ga preuzmeš, tvoj je zauvijek.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Završi besplatno plaćanje u pregledniku. Set će se ovdje pojaviti za trenutak.",
"{n} items": "{n} predmeta",
"Nothing is on sale right now.": "Trenutačno se ništa ne prodaje.",
"Your basket": "Vaša košarica",
"Your basket is empty.": "Vaša košarica je prazna.",
"Add to basket": "Dodaj u košaricu",
"Total": "Ukupno",
"This is a gift": "Ovo je poklon",
"Your friend's Minecraft name": "Minecraft ime vašeg prijatelja",
"Find": "Pronađi",
"For {name}": "Za {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pitajte onoga tko plaća prije kupnje. Povrat novca u roku od 14 dana iz bilo kojeg razloga.",
"Pay {price} in your browser": "Plati {price} u pregledniku",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddleovo plaćanje otvara se u vašem pregledniku. U pokretaču se ništa ne naplaćuje.",
"US sales tax is added where a state charges it.": "Američki porez na promet dodaje se gdje ga savezna država naplaćuje.",
"VAT included where it applies.": "PDV uključen gdje se primjenjuje.",
"In a set in your basket": "U kompletu u vašoj košarici",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Dovršite plaćanje u pregledniku. Predmeti stižu u Garderobu za trenutak.",
"{name} was left out: made for another Horizon version": "{name} je izostavljen: napravljen za drugu verziju Horizona",
"{name} was left out: clashes with {other}": "{name} je izostavljen: sukobljava se s {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Otvori u privatnom prozoru",
"Open this link in a private window to pick another account.": "Otvorite ovu poveznicu u privatnom prozoru da biste odabrali drugi račun.",
"Use a different Microsoft account": "Koristi drugi Microsoft račun"
"Use a different Microsoft account": "Koristi drugi Microsoft račun",
"Buy": "Kupi",
"Gift": "Pokloni",
"Looks": "Izgledi"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Igényelje az alapítókészletet",
"Claiming…": "Beváltás…",
"The shop didn't load.": "A bolt nem töltődött be.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Viselnivaló a játékosodnak, amit mindenki lát, aki Horizonon játszik.",
"Free for founders": "Ingyenes az alapítóknak",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Azoknak, akik elsőként voltak itt. Ingyenes; ha beváltod, végleg a tiéd.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Fejezd be az ingyenes fizetést a böngészőben. A szett egy pillanattal később megjelenik itt.",
"{n} items": "{n} tárgy",
"Nothing is on sale right now.": "Most semmi sincs eladó.",
"Your basket": "Kosarad",
"Your basket is empty.": "A kosarad üres.",
"Add to basket": "Kosárba",
"Total": "Összesen",
"This is a gift": "Ez ajándék",
"Your friend's Minecraft name": "A barátod Minecraft-neve",
"Find": "Keresés",
"For {name}": "{name} részére",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Vásárlás előtt kérdezd meg, aki fizet. Visszatérítés 14 napon belül, bármilyen okból.",
"Pay {price} in your browser": "{price} fizetése a böngészőben",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "A Paddle fizetése a böngésződben nyílik meg. A launcherben semmit sem terhelünk.",
"US sales tax is added where a state charges it.": "Az amerikai forgalmi adó ott adódik hozzá, ahol egy állam felszámítja.",
"VAT included where it applies.": "Az áfa benne van, ahol érvényes.",
"In a set in your basket": "Egy készletben a kosaradban",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Fejezd be a fizetést a böngészőben. A tárgyaid kicsit később megjelennek a Ruhatárban.",
"{name} was left out: made for another Horizon version": "{name} kimaradt: a Horizon egy másik verziójához készült",
"{name} was left out: clashes with {other}": "{name} kimaradt: ütközik ezzel: {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Megnyitás privát ablakban",
"Open this link in a private window to pick another account.": "Nyisd meg ezt a linket privát ablakban, hogy másik fiókot válassz.",
"Use a different Microsoft account": "Másik Microsoft-fiók használata"
"Use a different Microsoft account": "Másik Microsoft-fiók használata",
"Buy": "Vásárlás",
"Gift": "Ajándékozás",
"Looks": "Szettek"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Պահանջեք հիմնադիր հավաքածուն",
"Claiming…": "Ստացվում է…",
"The shop didn't load.": "Խանութը չբեռնվեց։",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Իրեր ձեր խաղացողի համար, որոնք տեսնում են Horizon-ում խաղացող բոլորը։",
"Free for founders": "Անվճար հիմնադիրների համար",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Առաջինն այստեղ եղած խաղացողների համար։ Անվճար ստացվում է. ստանալուց հետո այն ձերն է ընդմիշտ։",
"Finish the free checkout in your browser. The set lands here a moment later.": "Ավարտեք անվճար վճարումը ձեր դիտարկիչում։ Հավաքածուն մի պահ անց կհայտնվի այստեղ։",
"{n} items": "{n} իր",
"Nothing is on sale right now.": "Հիմա ոչինչ վաճառքում չէ։",
"Your basket": "Ձեր զամբյուղը",
"Your basket is empty.": "Ձեր զամբյուղը դատարկ է։",
"Add to basket": "Ավելացնել զամբյուղ",
"Total": "Ընդամենը",
"This is a gift": "Սա նվեր է",
"Your friend's Minecraft name": "Ձեր ընկերոջ Minecraft անունը",
"Find": "Գտնել",
"For {name}": "{name}-ի համար",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Գնելուց առաջ հարցրեք նրան, ով վճարում է։ Գումարի վերադարձ 14 օրվա ընթացքում՝ ցանկացած պատճառով։",
"Pay {price} in your browser": "Վճարել {price} դիտարկիչում",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle-ի վճարումը բացվում է ձեր դիտարկիչում։ Գործարկիչում ոչինչ չի գանձվում։",
"US sales tax is added where a state charges it.": "ԱՄՆ վաճառքի հարկը ավելանում է այնտեղ, որտեղ նահանգը գանձում է այն։",
"VAT included where it applies.": "ԱԱՀ-ն ներառված է, որտեղ կիրառվում է։",
"In a set in your basket": "Ձեր զամբյուղի հավաքածուում",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Ավարտեք վճարումը դիտարկիչում։ Իրերը Զգեստապահարան կհասնեն մի պահ անց։",
"{name} was left out: made for another Horizon version": "{name}-ը բաց թողնվեց. ստեղծված է Horizon-ի այլ տարբերակի համար",
"{name} was left out: clashes with {other}": "{name}-ը բաց թողնվեց. բախվում է {other}-ի հետ",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Բացել մասնավոր պատուհանում",
"Open this link in a private window to pick another account.": "Բացեք այս հղումը մասնավոր պատուհանում՝ մեկ այլ հաշիվ ընտրելու համար:",
"Use a different Microsoft account": "Օգտագործել այլ Microsoft-ի հաշիվ"
"Use a different Microsoft account": "Օգտագործել այլ Microsoft-ի հաշիվ",
"Buy": "Գնել",
"Gift": "Նվիրել",
"Looks": "Կերպարներ"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Klaim set pendiri",
"Claiming…": "Mengklaim…",
"The shop didn't load.": "Toko gagal dimuat.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Barang yang dipakai pemainmu, terlihat oleh semua yang bermain di Horizon.",
"Free for founders": "Gratis untuk pendiri",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Untuk pemain yang datang lebih dulu. Gratis; setelah diklaim, jadi milikmu.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Selesaikan checkout gratis di browser-mu. Set akan muncul di sini sesaat kemudian.",
"{n} items": "{n} item",
"Nothing is on sale right now.": "Saat ini tidak ada yang dijual.",
"Your basket": "Keranjangmu",
"Your basket is empty.": "Keranjangmu kosong.",
"Add to basket": "Tambahkan ke keranjang",
"Total": "Total",
"This is a gift": "Ini hadiah",
"Your friend's Minecraft name": "Nama Minecraft temanmu",
"Find": "Cari",
"For {name}": "Untuk {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Tanyakan kepada yang membayar sebelum membeli. Pengembalian dana dalam 14 hari dengan alasan apa pun.",
"Pay {price} in your browser": "Bayar {price} di browser",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Pembayaran Paddle terbuka di browsermu. Tidak ada yang ditagih di launcher.",
"US sales tax is added where a state charges it.": "Pajak penjualan AS ditambahkan jika negara bagian memungutnya.",
"VAT included where it applies.": "PPN sudah termasuk jika berlaku.",
"In a set in your basket": "Dalam set di keranjangmu",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Selesaikan pembayaran di browser. Itemmu masuk ke Lemari sebentar lagi.",
"{name} was left out: made for another Horizon version": "{name} tidak disertakan: dibuat untuk versi Horizon lain",
"{name} was left out: clashes with {other}": "{name} tidak disertakan: bentrok dengan {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Buka di jendela pribadi",
"Open this link in a private window to pick another account.": "Buka tautan ini di jendela pribadi untuk memilih akun lain.",
"Use a different Microsoft account": "Gunakan akun Microsoft lain"
"Use a different Microsoft account": "Gunakan akun Microsoft lain",
"Buy": "Beli",
"Gift": "Hadiahkan",
"Looks": "Tampilan"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Chọọ ntọala ntọala",
"Claiming…": "Na-anata…",
"The shop didn't load.": "Ụlọ ahịa ahụ ebubataghị.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Ihe ị ga-eyi maka onye egwuregwu gị, nke onye ọ bụla na-egwu Horizon na-ahụ.",
"Free for founders": "N'efu maka ndị malitere",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Maka ndị egwuregwu nọ ebe a mbụ. Nweta ya n'efu; ozugbo i nwetara ya, ọ bụ nke gị mgbe niile.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Mechaa ịkwụ ụgwọ n'efu na browser gị. Ngwugwu ahụ ga-abịa ebe a obere oge mgbe ahụ gasịrị.",
"{n} items": "Ihe {n}",
"Nothing is on sale right now.": "Ọ dịghị ihe a na-ere ugbu a.",
"Your basket": "Nkata gị",
"Your basket is empty.": "Nkata gị tọgbọrọ chakoo.",
"Add to basket": "Tinye na nkata",
"Total": "Ngụkọta",
"This is a gift": "Nke a bụ onyinye",
"Your friend's Minecraft name": "Aha Minecraft enyi gị",
"Find": "Chọta",
"For {name}": "Maka {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Jụọ onye na-akwụ ụgwọ tupu ị zụta. Nkwụghachi n'ime ụbọchị 14 maka ihe ọ bụla kpatara ya.",
"Pay {price} in your browser": "Kwụọ {price} na ihe nchọgharị gị",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Ịkwụ ụgwọ Paddle na-emepe na ihe nchọgharị gị. Ọ dịghị ihe a na-ana na launcher.",
"US sales tax is added where a state charges it.": "A na-agbakwunye ụtụ ahịa US ebe steeti na-ana ya.",
"VAT included where it applies.": "VAT gụnyere ebe ọ dị.",
"In a set in your basket": "N'otu set dị na nkata gị",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Mechaa ịkwụ ụgwọ na ihe nchọgharị gị. Ihe gị ga-abata na Wardrobe n'oge na-adịghị anya.",
"{name} was left out: made for another Horizon version": "A hapụrụ {name}: e mere ya maka ụdị Horizon ọzọ",
"{name} was left out: clashes with {other}": "A hapụrụ {name}: ọ na-emegide {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Mepee na windo nzuzo",
"Open this link in a private window to pick another account.": "Mepee njikọ a na windo nzuzo ka ịhọrọ akaụntụ ọzọ.",
"Use a different Microsoft account": "Jiri akaụntụ Microsoft ọzọ"
"Use a different Microsoft account": "Jiri akaụntụ Microsoft ọzọ",
"Buy": "Zụta",
"Gift": "Nye onyinye",
"Looks": "Ọdịdị"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Gerðu tilkall til stofnendasettsins",
"Claiming…": "Sæki…",
"The shop didn't load.": "Verslunin hlóðst ekki.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Hlutir til að klæðast fyrir spilarann þinn, sýnilegir öllum sem spila á Horizon.",
"Free for founders": "Ókeypis fyrir stofnendur",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Fyrir spilarana sem voru hér fyrst. Ókeypis að sækja; þegar þú hefur sótt það er það þitt til frambúðar.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Ljúktu ókeypis greiðslunni í vafranum þínum. Settið birtist hér augnabliki síðar.",
"{n} items": "{n} hlutir",
"Nothing is on sale right now.": "Ekkert er til sölu núna.",
"Your basket": "Karfan þín",
"Your basket is empty.": "Karfan þín er tóm.",
"Add to basket": "Setja í körfu",
"Total": "Samtals",
"This is a gift": "Þetta er gjöf",
"Your friend's Minecraft name": "Minecraft-nafn vinar þíns",
"Find": "Finna",
"For {name}": "Fyrir {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Spyrðu þann sem borgar áður en þú kaupir. Endurgreiðsla innan 14 daga af hvaða ástæðu sem er.",
"Pay {price} in your browser": "Greiða {price} í vafranum",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Greiðsla Paddle opnast í vafranum þínum. Ekkert er rukkað í ræsinum.",
"US sales tax is added where a state charges it.": "Bandarískur söluskattur bætist við þar sem ríki innheimtir hann.",
"VAT included where it applies.": "VSK innifalinn þar sem hann á við.",
"In a set in your basket": "Í setti í körfunni þinni",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Ljúktu greiðslunni í vafranum. Hlutirnir koma í Fataskápinn augnabliki síðar.",
"{name} was left out: made for another Horizon version": "{name} var sleppt: gert fyrir aðra útgáfu af Horizon",
"{name} was left out: clashes with {other}": "{name} var sleppt: rekst á {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Opna í huliðsglugga",
"Open this link in a private window to pick another account.": "Opnaðu þennan tengil í huliðsglugga til að velja annan reikning.",
"Use a different Microsoft account": "Nota annan Microsoft reikning"
"Use a different Microsoft account": "Nota annan Microsoft reikning",
"Buy": "Kaupa",
"Gift": "Gefa",
"Looks": "Útlit"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Rivendica il set fondatore",
"Claiming…": "Riscatto in corso…",
"The shop didn't load.": "Il negozio non si è caricato.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Cose da indossare per il tuo giocatore, viste da tutti quelli che giocano su Horizon.",
"Free for founders": "Gratis per i fondatori",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Per i giocatori che c'erano fin dall'inizio. Gratis da riscattare; una volta riscattato, è tuo per sempre.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Completa il pagamento gratuito nel browser. Il set arriva qui un attimo dopo.",
"{n} items": "{n} oggetti",
"Nothing is on sale right now.": "Al momento non c'è niente in vendita.",
"Your basket": "Il tuo carrello",
"Your basket is empty.": "Il tuo carrello è vuoto.",
"Add to basket": "Aggiungi al carrello",
"Total": "Totale",
"This is a gift": "È un regalo",
"Your friend's Minecraft name": "Il nome Minecraft del tuo amico",
"Find": "Cerca",
"For {name}": "Per {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Chiedi a chi paga prima di comprare. Rimborsi entro 14 giorni per qualsiasi motivo.",
"Pay {price} in your browser": "Paga {price} nel browser",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Il pagamento di Paddle si apre nel tuo browser. Nel launcher non viene addebitato nulla.",
"US sales tax is added where a state charges it.": "L'imposta sulle vendite USA si aggiunge dove uno stato la applica.",
"VAT included where it applies.": "IVA inclusa dove si applica.",
"In a set in your basket": "In un set nel tuo carrello",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Completa il pagamento nel browser. I tuoi oggetti arrivano nel Guardaroba poco dopo.",
"{name} was left out: made for another Horizon version": "{name} è stato escluso: fatto per un'altra versione di Horizon",
"{name} was left out: clashes with {other}": "{name} è stato escluso: va in conflitto con {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Apri in una finestra anonima",
"Open this link in a private window to pick another account.": "Apri questo collegamento in una finestra anonima per scegliere un altro account.",
"Use a different Microsoft account": "Usa un altro account Microsoft"
"Use a different Microsoft account": "Usa un altro account Microsoft",
"Buy": "Acquista",
"Gift": "Regala",
"Looks": "Look"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "ファウンダーセットを受け取る",
"Claiming…": "受け取り中…",
"The shop didn't load.": "ショップを読み込めませんでした。",
"Things to wear for your player, seen by everyone who plays on Horizon.": "あなたのプレイヤーが身につけるもの。Horizon で遊ぶみんなに見えます。",
"Free for founders": "ファウンダーは無料",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "最初からいたプレイヤーへ。無料で受け取れます。受け取ればずっとあなたのものです。",
"Finish the free checkout in your browser. The set lands here a moment later.": "ブラウザで無料のチェックアウトを完了してください。しばらくするとセットがここに届きます。",
"{n} items": "{n} 点",
"Nothing is on sale right now.": "いま販売中のものはありません。",
"Your basket": "カート",
"Your basket is empty.": "カートは空です。",
"Add to basket": "カートに入れる",
"Total": "合計",
"This is a gift": "ギフトにする",
"Your friend's Minecraft name": "フレンドの Minecraft 名",
"Find": "探す",
"For {name}": "{name} へ",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "買う前に、支払う人に確認してください。理由を問わず 14 日以内なら返金できます。",
"Pay {price} in your browser": "ブラウザで {price} を支払う",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle の支払いはブラウザで開きます。ランチャーでは何も請求されません。",
"US sales tax is added where a state charges it.": "州が課す場合は米国の売上税が加算されます。",
"VAT included where it applies.": "該当する場合は VAT 込みです。",
"In a set in your basket": "カート内のセットに含まれています",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "ブラウザで支払いを済ませてください。アイテムは少しあとにワードローブに届きます。",
"{name} was left out: made for another Horizon version": "{name} は除外されました: 別のバージョンの Horizon 向けです",
"{name} was left out: clashes with {other}": "{name} は除外されました: {other} と競合します",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "プライベートウィンドウで開く",
"Open this link in a private window to pick another account.": "別のアカウントを選ぶには、このリンクをプライベートウィンドウで開いてください。",
"Use a different Microsoft account": "別の Microsoft アカウントを使用"
"Use a different Microsoft account": "別の Microsoft アカウントを使用",
"Buy": "購入",
"Gift": "ギフト",
"Looks": "コーデ"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "მოითხოვეთ დამფუძნებელი ნაკრები",
"Claiming…": "მიიღება…",
"The shop didn't load.": "მაღაზია ვერ ჩაიტვირთა.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "ნივთები თქვენი მოთამაშისთვის, რომლებსაც ხედავს ყველა, ვინც Horizon-ზე თამაშობს.",
"Free for founders": "უფასო დამფუძნებლებისთვის",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "მოთამაშეებისთვის, რომლებიც აქ პირველები იყვნენ. უფასოდ მისაღებია; მიღების შემდეგ ის სამუდამოდ თქვენია.",
"Finish the free checkout in your browser. The set lands here a moment later.": "დაასრულეთ უფასო გადახდა ბრაუზერში. ნაკრები აქ ცოტა ხანში გამოჩნდება.",
"{n} items": "{n} ნივთი",
"Nothing is on sale right now.": "ახლა არაფერი იყიდება.",
"Your basket": "თქვენი კალათა",
"Your basket is empty.": "თქვენი კალათა ცარიელია.",
"Add to basket": "კალათაში დამატება",
"Total": "სულ",
"This is a gift": "ეს საჩუქარია",
"Your friend's Minecraft name": "თქვენი მეგობრის Minecraft სახელი",
"Find": "ძებნა",
"For {name}": "{name}-სთვის",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "ყიდვამდე ჰკითხეთ, ვინც იხდის. თანხის დაბრუნება 14 დღეში ნებისმიერი მიზეზით.",
"Pay {price} in your browser": "{price}-ის გადახდა ბრაუზერში",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle-ის გადახდა იხსნება თქვენს ბრაუზერში. ლაუნჩერში არაფერი ჩამოიჭრება.",
"US sales tax is added where a state charges it.": "აშშ-ის გაყიდვების გადასახადი ემატება იქ, სადაც შტატი იღებს.",
"VAT included where it applies.": "დღგ შედის იქ, სადაც მოქმედებს.",
"In a set in your basket": "თქვენი კალათის ნაკრებში",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "დაასრულეთ გადახდა ბრაუზერში. ნივთები გარდერობში ცოტა ხანში მოვა.",
"{name} was left out: made for another Horizon version": "{name} გამოტოვებულია: შექმნილია Horizon-ის სხვა ვერსიისთვის",
"{name} was left out: clashes with {other}": "{name} გამოტოვებულია: კონფლიქტშია {other}-თან",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "გახსნა პირად ფანჯარაში",
"Open this link in a private window to pick another account.": "სხვა ანგარიშის ასარჩევად გახსენით ეს ბმული პირად ფანჯარაში.",
"Use a different Microsoft account": "გამოიყენეთ სხვა Microsoft-ის ანგარიში"
"Use a different Microsoft account": "გამოიყენეთ სხვა Microsoft-ის ანგარიში",
"Buy": "ყიდვა",
"Gift": "ჩუქება",
"Looks": "იერსახეები"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Құрылтайшы жиынтығын талап етіңіз",
"Claiming…": "Алынуда…",
"The shop didn't load.": "Дүкен жүктелмеді.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Ойыншыңызға арналған киімдер, Horizon-да ойнайтын барлығы көреді.",
"Free for founders": "Негізін қалаушыларға тегін",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Осында бірінші болған ойыншыларға арналған. Тегін алуға болады; алғаннан кейін ол мәңгі сізде қалады.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Тегін төлемді браузерде аяқтаңыз. Жиынтық сәлден кейін осында түседі.",
"{n} items": "{n} зат",
"Nothing is on sale right now.": "Қазір ештеңе сатылмайды.",
"Your basket": "Себетіңіз",
"Your basket is empty.": "Себетіңіз бос.",
"Add to basket": "Себетке қосу",
"Total": "Барлығы",
"This is a gift": "Бұл сыйлық",
"Your friend's Minecraft name": "Досыңыздың Minecraft аты",
"Find": "Табу",
"For {name}": "{name} үшін",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Сатып алмас бұрын кім төлейтінін сұраңыз. Кез келген себеппен 14 күн ішінде қайтарылады.",
"Pay {price} in your browser": "{price} браузерде төлеу",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle төлемі браузерде ашылады. Лаунчерде ештеңе алынбайды.",
"US sales tax is added where a state charges it.": "АҚШ сату салығы штат алатын жерде қосылады.",
"VAT included where it applies.": "ҚҚС қолданылатын жерде қосылған.",
"In a set in your basket": "Себетіңіздегі жиынтықта",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Төлемді браузерде аяқтаңыз. Заттарыңыз Гардеробқа сәлден соң келеді.",
"{name} was left out: made for another Horizon version": "{name} алынып тасталды: Horizon-ның басқа нұсқасына жасалған",
"{name} was left out: clashes with {other}": "{name} алынып тасталды: {other} модымен қайшылықта",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Жеке терезеде ашу",
"Open this link in a private window to pick another account.": "Басқа тіркелгіні таңдау үшін бұл сілтемені жеке терезеде ашыңыз.",
"Use a different Microsoft account": "Басқа Microsoft тіркелгісін пайдалану"
"Use a different Microsoft account": "Басқа Microsoft тіркелгісін пайдалану",
"Buy": "Сатып алу",
"Gift": "Сыйлау",
"Looks": "Бейнелер"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "ಸಂಸ್ಥಾಪಕ ಸೆಟ್ ಅನ್ನು ಕ್ಲೈಮ್ ಮಾಡಿ",
"Claiming…": "ಪಡೆಯಲಾಗುತ್ತಿದೆ…",
"The shop didn't load.": "ಅಂಗಡಿ ಲೋಡ್ ಆಗಲಿಲ್ಲ.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "ನಿಮ್ಮ ಆಟಗಾರನಿಗೆ ಧರಿಸಲು ವಸ್ತುಗಳು, Horizon ನಲ್ಲಿ ಆಡುವ ಎಲ್ಲರಿಗೂ ಕಾಣಿಸುತ್ತವೆ.",
"Free for founders": "ಸ್ಥಾಪಕರಿಗೆ ಉಚಿತ",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "ಇಲ್ಲಿ ಮೊದಲು ಇದ್ದ ಆಟಗಾರರಿಗಾಗಿ. ಉಚಿತವಾಗಿ ಪಡೆಯಬಹುದು; ಒಮ್ಮೆ ಪಡೆದರೆ ಅದು ಶಾಶ್ವತವಾಗಿ ನಿಮ್ಮದು.",
"Finish the free checkout in your browser. The set lands here a moment later.": "ನಿಮ್ಮ ಬ್ರೌಸರ್‌ನಲ್ಲಿ ಉಚಿತ ಚೆಕ್‌ಔಟ್ ಪೂರ್ಣಗೊಳಿಸಿ. ಸೆಟ್ ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ ಇಲ್ಲಿಗೆ ಬರುತ್ತದೆ.",
"{n} items": "{n} ವಸ್ತುಗಳು",
"Nothing is on sale right now.": "ಈಗ ಏನೂ ಮಾರಾಟಕ್ಕಿಲ್ಲ.",
"Your basket": "ನಿಮ್ಮ ಬುಟ್ಟಿ",
"Your basket is empty.": "ನಿಮ್ಮ ಬುಟ್ಟಿ ಖಾಲಿಯಾಗಿದೆ.",
"Add to basket": "ಬುಟ್ಟಿಗೆ ಸೇರಿಸಿ",
"Total": "ಒಟ್ಟು",
"This is a gift": "ಇದು ಉಡುಗೊರೆ",
"Your friend's Minecraft name": "ನಿಮ್ಮ ಸ್ನೇಹಿತರ Minecraft ಹೆಸರು",
"Find": "ಹುಡುಕಿ",
"For {name}": "{name} ಗಾಗಿ",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "ಕೊಳ್ಳುವ ಮೊದಲು ಹಣ ಕೊಡುವವರನ್ನು ಕೇಳಿ. ಯಾವುದೇ ಕಾರಣಕ್ಕೂ 14 ದಿನಗಳಲ್ಲಿ ಹಣ ಮರುಪಾವತಿ.",
"Pay {price} in your browser": "ಬ್ರೌಸರ್‌ನಲ್ಲಿ {price} ಪಾವತಿಸಿ",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle ಪಾವತಿ ನಿಮ್ಮ ಬ್ರೌಸರ್‌ನಲ್ಲಿ ತೆರೆಯುತ್ತದೆ. ಲಾಂಚರ್‌ನಲ್ಲಿ ಏನನ್ನೂ ಕಡಿತಗೊಳಿಸುವುದಿಲ್ಲ.",
"US sales tax is added where a state charges it.": "ರಾಜ್ಯ ವಿಧಿಸುವಲ್ಲಿ ಅಮೆರಿಕದ ಮಾರಾಟ ತೆರಿಗೆ ಸೇರುತ್ತದೆ.",
"VAT included where it applies.": "ಅನ್ವಯಿಸುವಲ್ಲಿ VAT ಸೇರಿದೆ.",
"In a set in your basket": "ನಿಮ್ಮ ಬುಟ್ಟಿಯ ಸೆಟ್‌ನಲ್ಲಿ",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "ಬ್ರೌಸರ್‌ನಲ್ಲಿ ಪಾವತಿ ಮುಗಿಸಿ. ನಿಮ್ಮ ವಸ್ತುಗಳು ಸ್ವಲ್ಪ ಹೊತ್ತಿನಲ್ಲಿ ವಾರ್ಡ್‌ರೋಬ್‌ಗೆ ಬರುತ್ತವೆ.",
"{name} was left out: made for another Horizon version": "{name} ಅನ್ನು ಬಿಡಲಾಗಿದೆ: Horizon ನ ಬೇರೆ ಆವೃತ್ತಿಗಾಗಿ ಮಾಡಲಾಗಿದೆ",
"{name} was left out: clashes with {other}": "{name} ಅನ್ನು ಬಿಡಲಾಗಿದೆ: {other} ಜೊತೆ ಘರ್ಷಿಸುತ್ತದೆ",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "ಖಾಸಗಿ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ",
"Open this link in a private window to pick another account.": "ಬೇರೆ ಖಾತೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಈ ಲಿಂಕ್ ಅನ್ನು ಖಾಸಗಿ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ.",
"Use a different Microsoft account": "ಬೇರೆ Microsoft ಖಾತೆಯನ್ನು ಬಳಸಿ"
"Use a different Microsoft account": "ಬೇರೆ Microsoft ಖಾತೆಯನ್ನು ಬಳಸಿ",
"Buy": "ಖರೀದಿಸಿ",
"Gift": "ಉಡುಗೊರೆ ನೀಡಿ",
"Looks": "ಲುಕ್‌ಗಳು"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "창립자 세트 받기",
"Claiming…": "받는 중…",
"The shop didn't load.": "상점을 불러오지 못했어요.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "내 플레이어가 착용하는 아이템으로, Horizon에서 플레이하는 모두에게 보여요.",
"Free for founders": "창립자에게 무료",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "처음부터 함께한 플레이어를 위해. 무료로 받을 수 있고, 받으면 계속 내 것이에요.",
"Finish the free checkout in your browser. The set lands here a moment later.": "브라우저에서 무료 결제를 마무리하세요. 잠시 뒤 세트가 여기에 도착해요.",
"{n} items": "{n}개 아이템",
"Nothing is on sale right now.": "지금은 판매 중인 것이 없습니다.",
"Your basket": "장바구니",
"Your basket is empty.": "장바구니가 비어 있습니다.",
"Add to basket": "장바구니에 담기",
"Total": "합계",
"This is a gift": "선물입니다",
"Your friend's Minecraft name": "친구의 Minecraft 이름",
"Find": "찾기",
"For {name}": "{name} 님에게",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "사기 전에 돈을 낼 사람에게 물어보세요. 어떤 이유로든 14일 안에 환불됩니다.",
"Pay {price} in your browser": "브라우저에서 {price} 결제",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle 결제는 브라우저에서 열립니다. 런처에서는 아무것도 청구되지 않습니다.",
"US sales tax is added where a state charges it.": "주에서 부과하는 경우 미국 판매세가 추가됩니다.",
"VAT included where it applies.": "해당하는 경우 VAT가 포함됩니다.",
"In a set in your basket": "장바구니의 세트에 포함됨",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "브라우저에서 결제를 마치세요. 아이템은 잠시 후 옷장에 들어옵니다.",
"{name} was left out: made for another Horizon version": "{name}이(가) 제외되었습니다: 다른 Horizon 버전용입니다",
"{name} was left out: clashes with {other}": "{name}이(가) 제외되었습니다: {other}와(과) 충돌합니다",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "시크릿 창에서 열기",
"Open this link in a private window to pick another account.": "다른 계정을 선택하려면 이 링크를 시크릿 창에서 여세요.",
"Use a different Microsoft account": "다른 Microsoft 계정 사용"
"Use a different Microsoft account": "다른 Microsoft 계정 사용",
"Buy": "구매",
"Gift": "선물하기",
"Looks": "룩"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Негиздөөчү топтомун талап кылыңыз",
"Claiming…": "Алынууда…",
"The shop didn't load.": "Дүкөн жүктөлгөн жок.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Оюнчуңузга кийчү нерселер, Horizon'до ойногондордун баары көрөт.",
"Free for founders": "Негиздөөчүлөргө акысыз",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Бул жерде биринчи болгон оюнчулар үчүн. Акысыз алууга болот; алгандан кийин ал түбөлүккө сизде калат.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Акысыз төлөмдү браузерде аягына чыгарыңыз. Топтом бир аздан кийин ушул жерге келет.",
"{n} items": "{n} буюм",
"Nothing is on sale right now.": "Азыр эч нерсе сатылбайт.",
"Your basket": "Себетиңиз",
"Your basket is empty.": "Себетиңиз бош.",
"Add to basket": "Себетке кошуу",
"Total": "Бардыгы",
"This is a gift": "Бул белек",
"Your friend's Minecraft name": "Досуңуздун Minecraft аты",
"Find": "Табуу",
"For {name}": "{name} үчүн",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Сатып алардан мурун ким төлөй турганын сураңыз. Каалаган себеп менен 14 күндүн ичинде акча кайтарылат.",
"Pay {price} in your browser": "{price} браузерде төлөө",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle төлөмү браузериңизде ачылат. Лаунчерде эч нерсе алынбайт.",
"US sales tax is added where a state charges it.": "АКШнын сатуу салыгы штат алган жерде кошулат.",
"VAT included where it applies.": "КНС колдонулган жерде кирет.",
"In a set in your basket": "Себетиңиздеги топтомдо",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Төлөмдү браузерде бүтүрүңүз. Буюмдарыңыз Гардеробго бир аздан кийин келет.",
"{name} was left out: made for another Horizon version": "{name} чыгарылып калды: Horizon'дун башка версиясы үчүн жасалган",
"{name} was left out: clashes with {other}": "{name} чыгарылып калды: {other} менен кагылышат",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Купуя терезеде ачуу",
"Open this link in a private window to pick another account.": "Башка эсепти тандоо үчүн бул шилтемени купуя терезеде ачыңыз.",
"Use a different Microsoft account": "Башка Microsoft эсебин колдонуу"
"Use a different Microsoft account": "Башка Microsoft эсебин колдонуу",
"Buy": "Сатып алуу",
"Gift": "Белек кылуу",
"Looks": "Образдар"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Set dici auctor",
"Claiming…": "Vindicatur…",
"The shop didn't load.": "Taberna non est onerata.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Res quas lusor tuus gerat, ab omnibus visae qui in Horizon ludunt.",
"Free for founders": "Gratis conditoribus",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Lusoribus qui primi hic fuerunt. Gratis vindicare; semel vindicatum, tuum semper est.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Solutionem gratuitam in navigatro tuo perfice. Paulo post copia hic apparebit.",
"{n} items": "{n} res",
"Nothing is on sale right now.": "Nihil nunc venit.",
"Your basket": "Corbis tua",
"Your basket is empty.": "Corbis tua vacua est.",
"Add to basket": "In corbem adde",
"Total": "Summa",
"This is a gift": "Donum est",
"Your friend's Minecraft name": "Nomen Minecraft amici tui",
"Find": "Quaere",
"For {name}": "Pro {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Roga eum qui solvit antequam emas. Pecunia redditur intra 14 dies quavis de causa.",
"Pay {price} in your browser": "Solve {price} in navigatro",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Solutio Paddle in navigatro tuo aperitur. Nihil in deductore exigitur.",
"US sales tax is added where a state charges it.": "Vectigal venditionis Americanum additur ubi civitas id exigit.",
"VAT included where it applies.": "VAT inclusum ubi valet.",
"In a set in your basket": "In collectione in corbe tua",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Solutionem in navigatro perfice. Res tuae paulo post in Vestiarium venient.",
"{name} was left out: made for another Horizon version": "{name} omissus est: factus ad aliam versionem Horizontis",
"{name} was left out: clashes with {other}": "{name} omissus est: cum {other} confligit",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Aperi in fenestra privata",
"Open this link in a private window to pick another account.": "Aperi hoc link in fenestra privata ut aliam rationem eligas.",
"Use a different Microsoft account": "Aliam Microsoft rationem adhibe"
"Use a different Microsoft account": "Aliam Microsoft rationem adhibe",
"Buy": "Eme",
"Gift": "Dona",
"Looks": "Habitus"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Fuerderen de Grënner Set",
"Claiming…": "Gëtt ofgeholl…",
"The shop didn't load.": "D'Buttek huet sech net gelueden.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Saache fir Äre Spiller unzedoen, gesi vu jidderengem, deen op Horizon spillt.",
"Free for founders": "Gratis fir Grënner",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Fir d'Spiller, déi als éischt hei waren. Gratis ofzehuelen; wann et ofgeholl ass, ass et Är fir ëmmer.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Schléisst de gratis Checkout an Ärem Browser of. De Set kënnt e Moment méi spéit hei un.",
"{n} items": "{n} Saachen",
"Nothing is on sale right now.": "Grad ass näischt ze kafen.",
"Your basket": "Däi Kuerf",
"Your basket is empty.": "Däi Kuerf ass eidel.",
"Add to basket": "An de Kuerf",
"Total": "Total",
"This is a gift": "Dat ass e Kaddo",
"Your friend's Minecraft name": "De Minecraft-Numm vun dengem Frënd",
"Find": "Sichen",
"For {name}": "Fir {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Fro dee, dee bezilt, ier s de kafs. Remboursement bannent 14 Deeg aus all Grond.",
"Pay {price} in your browser": "{price} am Browser bezuelen",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "D'Bezuelung vu Paddle mécht sech an dengem Browser op. Am Launcher gëtt näischt ofgebucht.",
"US sales tax is added where a state charges it.": "US-Verkafssteier kënnt dobäi, wou e Bundesstaat se erhieft.",
"VAT included where it applies.": "TVA abegraff, wou se gëllt.",
"In a set in your basket": "An engem Set an dengem Kuerf",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Maach d'Bezuelung am Browser fäerdeg. Deng Saachen kommen e Moment duerno an d'Garderob.",
"{name} was left out: made for another Horizon version": "{name} gouf ewechgelooss: fir eng aner Horizon-Versioun gemaach",
"{name} was left out: clashes with {other}": "{name} gouf ewechgelooss: kollidéiert mat {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "An engem privaten Fënster opmaachen",
"Open this link in a private window to pick another account.": "Maach dëse Link an engem privaten Fënster op, fir en anere Kont ze wielen.",
"Use a different Microsoft account": "Aneren Microsoft Kont notzen"
"Use a different Microsoft account": "Aneren Microsoft Kont notzen",
"Buy": "Kafen",
"Gift": "Verschenken",
"Looks": "Looks"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Claim de opriechterset",
"Claiming…": "Aan 't opeise…",
"The shop didn't load.": "De winkel is nit gelaje.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Dinger um aan te trekke veur dien speuler, gezeen door iederein die op Horizon speult.",
"Free for founders": "Gratis veur oprichters",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Veur de speulers die der es eerste waore. Gratis op te eise; es 't opgeëis is, is 't veur altied van dich.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Rond de gratis checkout aaf in dien browser. De set kömp ei momentje later hie aan.",
"{n} items": "{n} items",
"Nothing is on sale right now.": "D'r is noe niks te koup.",
"Your basket": "Diech mendje",
"Your basket is empty.": "Diech mendje is laeg.",
"Add to basket": "In 't mendje",
"Total": "Totaal",
"This is a gift": "Dit is e cadeau",
"Your friend's Minecraft name": "De Minecraft-naam van diene vrund",
"Find": "Zeuke",
"For {name}": "Veur {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Vraog wae betaalt veurdetse kóps. Geld trök binne 14 daag oet welke raeje auch.",
"Pay {price} in your browser": "{price} betaole in diene browser",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "De betaling van Paddle geit ope in diene browser. In de launcher wuurt niks aafgeschreve.",
"US sales tax is added where a state charges it.": "Amerikaanse verkoupbelasting kump drbie wo 'ne staot die hèf.",
"VAT included where it applies.": "Btw inbegrepe wo die geldj.",
"In a set in your basket": "In e set in diech mendje",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Maak de betaling aaf in diene browser. Dien items koume get later in de Kleijerkas.",
"{name} was left out: made for another Horizon version": "{name} is weggelaote: gemaak veur 'n anger Horizon-versie",
"{name} was left out: clashes with {other}": "{name} is weggelaote: bots mit {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Open in e privévinster",
"Open this link in a private window to pick another account.": "Open dees link in e privévinster om un angere account te kieze.",
"Use a different Microsoft account": "Gebruuk un angere Microsoft account"
"Use a different Microsoft account": "Gebruuk un angere Microsoft account",
"Buy": "Koupe",
"Gift": "Cadeau geve",
"Looks": "Looks"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Rivendicà l’insema di fundatur",
"Claiming…": "Ritiro in cors…",
"The shop didn't load.": "El negozi l'ha minga cargà.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Roba da métes sü per el tò giugadór, vedüda da tücc quei che gioghen su Horizon.",
"Free for founders": "Gratis per i fondador",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Per i giugadór che gh'eren per primm. Gratis da ritirà; ona volta ritirà, l'è tò per semper.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Finìss el pagament gratis in del to browser. El set el riva chì un moment dopo.",
"{n} items": "{n} oggett",
"Nothing is on sale right now.": "Adess gh'è nagott in vendita.",
"Your basket": "El tò cavagn",
"Your basket is empty.": "El tò cavagn l'è vœuj.",
"Add to basket": "Giontà al cavagn",
"Total": "Total",
"This is a gift": "L'è on regal",
"Your friend's Minecraft name": "El nom Minecraft del tò amis",
"Find": "Cercà",
"For {name}": "Per {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Domanda a chi paga prima de crompà. Rimbors in 14 dì per qualsessia rason.",
"Pay {price} in your browser": "Pagà {price} in del browser",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "El pagament de Paddle el se derva in del tò browser. In del launcher se paga nagott.",
"US sales tax is added where a state charges it.": "La tassa sui vendit di USA la se gionta indove on stat la ciama.",
"VAT included where it applies.": "IVA inclusa indove la se aplica.",
"In a set in your basket": "In d'on set in del tò cavagn",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Finiss el pagament in del browser. I tò oggett riven in del Guardaroba on moment dopo.",
"{name} was left out: made for another Horizon version": "{name} l'è staa lassaa foeura: faa per un'altra version de Horizon",
"{name} was left out: clashes with {other}": "{name} l'è staa lassaa foeura: el va in conflit con {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Vèrt in d'una finestra privada",
"Open this link in a private window to pick another account.": "Vèrt chèsto link in d'una finestra privada per sceglier un alter cunt.",
"Use a different Microsoft account": "Dopera un alter cunt Microsoft"
"Use a different Microsoft account": "Dopera un alter cunt Microsoft",
"Buy": "Crompà",
"Gift": "Regalà",
"Looks": "Stil"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "ຮຽກຮ້ອງຊຸດຜູ້ກໍ່ຕັ້ງ",
"Claiming…": "ກຳລັງຮັບ…",
"The shop didn't load.": "ຮ້ານໂຫຼດບໍ່ໄດ້.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "ສິ່ງທີ່ໃສ່ສຳລັບຕົວລະຄອນຂອງທ່ານ, ທຸກຄົນທີ່ຫຼິ້ນ Horizon ເຫັນ.",
"Free for founders": "ຟຣີສຳລັບຜູ້ກໍ່ຕັ້ງ",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "ສຳລັບຜູ້ຫຼິ້ນທີ່ຢູ່ທີ່ນີ້ກ່ອນ. ຮັບໄດ້ຟຣີ; ເມື່ອຮັບແລ້ວ ມັນເປັນຂອງທ່ານຕະຫຼອດໄປ.",
"Finish the free checkout in your browser. The set lands here a moment later.": "ຊຳລະແບບຟຣີໃຫ້ສຳເລັດໃນບຣາວເຊີຂອງທ່ານ. ຊຸດຈະມາຢູ່ບ່ອນນີ້ຫຼັງຈາກນັ້ນບໍ່ດົນ.",
"{n} items": "{n} ລາຍການ",
"Nothing is on sale right now.": "ຕອນນີ້ບໍ່ມີຫຍັງວາງຂາຍ.",
"Your basket": "ກະຕ່າຂອງທ່ານ",
"Your basket is empty.": "ກະຕ່າຂອງທ່ານຫວ່າງເປົ່າ.",
"Add to basket": "ເພີ່ມໃສ່ກະຕ່າ",
"Total": "ລວມ",
"This is a gift": "ນີ້ແມ່ນຂອງຂວັນ",
"Your friend's Minecraft name": "ຊື່ Minecraft ຂອງໝູ່ທ່ານ",
"Find": "ຊອກຫາ",
"For {name}": "ສຳລັບ {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "ຖາມຄົນທີ່ຈ່າຍເງິນກ່ອນຊື້. ຄືນເງິນພາຍໃນ 14 ວັນ ດ້ວຍເຫດຜົນໃດກໍໄດ້.",
"Pay {price} in your browser": "ຈ່າຍ {price} ໃນບຣາວເຊີ",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "ການຊຳລະຂອງ Paddle ເປີດໃນບຣາວເຊີຂອງທ່ານ. ບໍ່ມີການເກັບເງິນໃນລັນເຊີ.",
"US sales tax is added where a state charges it.": "ພາສີການຂາຍຂອງສະຫະລັດຖືກເພີ່ມບ່ອນທີ່ລັດເກັບ.",
"VAT included where it applies.": "ລວມ VAT ບ່ອນທີ່ໃຊ້ໄດ້.",
"In a set in your basket": "ຢູ່ໃນຊຸດໃນກະຕ່າຂອງທ່ານ",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "ຈ່າຍເງິນໃຫ້ແລ້ວໃນບຣາວເຊີ. ສິ່ງຂອງຂອງທ່ານຈະມາຮອດຕູ້ເສື້ອຜ້າໃນອີກບໍ່ດົນ.",
"{name} was left out: made for another Horizon version": "{name} ຖືກປະໄວ້: ສ້າງມາສຳລັບ Horizon ລຸ້ນອື່ນ",
"{name} was left out: clashes with {other}": "{name} ຖືກປະໄວ້: ຂັດກັບ {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "ເປີດໃນໜ້າຕ່າງສ່ວນຕົວ",
"Open this link in a private window to pick another account.": "ເປີດລິ້ງນີ້ໃນໜ້າຕ່າງສ່ວນຕົວເພື່ອເລືອກບັນຊີອື່ນ.",
"Use a different Microsoft account": "ໃຊ້ບັນຊີ Microsoft ອື່ນ"
"Use a different Microsoft account": "ໃຊ້ບັນຊີ Microsoft ອື່ນ",
"Buy": "ຊື້",
"Gift": "ມອບເປັນຂອງຂວັນ",
"Looks": "ລຸກ"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Pretenduokite į steigėjų rinkinį",
"Claiming…": "Atsiimama…",
"The shop didn't load.": "Parduotuvė neįsikėlė.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Daiktai tavo žaidėjui, kuriuos mato visi, žaidžiantys Horizon.",
"Free for founders": "Nemokama įkūrėjams",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Žaidėjams, kurie čia buvo pirmieji. Nemokamai; atsiėmus lieka tau.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Užbaik nemokamą atsiskaitymą naršyklėje. Rinkinys čia pasirodys po akimirkos.",
"{n} items": "{n} daiktai",
"Nothing is on sale right now.": "Šiuo metu niekas neparduodama.",
"Your basket": "Jūsų krepšelis",
"Your basket is empty.": "Jūsų krepšelis tuščias.",
"Add to basket": "Į krepšelį",
"Total": "Iš viso",
"This is a gift": "Tai dovana",
"Your friend's Minecraft name": "Jūsų draugo Minecraft vardas",
"Find": "Rasti",
"For {name}": "Gavėjui {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Prieš pirkdami paklauskite to, kas moka. Pinigai grąžinami per 14 dienų dėl bet kokios priežasties.",
"Pay {price} in your browser": "Mokėti {price} naršyklėje",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle mokėjimas atsidaro jūsų naršyklėje. Paleidyklėje nieko nenuskaičiuojama.",
"US sales tax is added where a state charges it.": "JAV pardavimo mokestis pridedamas ten, kur jį renka valstija.",
"VAT included where it applies.": "PVM įskaičiuotas ten, kur taikomas.",
"In a set in your basket": "Rinkinyje jūsų krepšelyje",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Užbaikite mokėjimą naršyklėje. Daiktai atkeliaus į Drabužinę po akimirkos.",
"{name} was left out: made for another Horizon version": "{name} praleistas: sukurtas kitai Horizon versijai",
"{name} was left out: clashes with {other}": "{name} praleistas: konfliktuoja su {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Atidaryti privačiame lange",
"Open this link in a private window to pick another account.": "Atidarykite šią nuorodą privačiame lange, kad pasirinktumėte kitą paskyrą.",
"Use a different Microsoft account": "Naudoti kitą „Microsoft“ paskyrą"
"Use a different Microsoft account": "Naudoti kitą „Microsoft“ paskyrą",
"Buy": "Pirkti",
"Gift": "Dovanoti",
"Looks": "Įvaizdžiai"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Pieprasiet dibinātāja komplektu",
"Claiming…": "Saņem…",
"The shop didn't load.": "Veikals neielādējās.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Lietas, ko valkāt jūsu spēlētājam, kuras redz ikviens, kas spēlē Horizon.",
"Free for founders": "Bezmaksas dibinātājiem",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Spēlētājiem, kas bija šeit pirmie. Saņemams bez maksas; kad esat to saņēmuši, tas ir jūsu uz visiem laikiem.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Pabeidziet bezmaksas norēķinu pārlūkprogrammā. Komplekts šeit parādīsies pēc brīža.",
"{n} items": "{n} priekšmeti",
"Nothing is on sale right now.": "Pašlaik nekas netiek pārdots.",
"Your basket": "Jūsu grozs",
"Your basket is empty.": "Jūsu grozs ir tukšs.",
"Add to basket": "Pievienot grozam",
"Total": "Kopā",
"This is a gift": "Tā ir dāvana",
"Your friend's Minecraft name": "Jūsu drauga Minecraft vārds",
"Find": "Atrast",
"For {name}": "Saņēmējam {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pirms pērkat, pajautājiet tam, kurš maksā. Naudas atmaksa 14 dienu laikā jebkāda iemesla dēļ.",
"Pay {price} in your browser": "Maksāt {price} pārlūkā",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle maksājums atveras jūsu pārlūkā. Palaidējā nekas netiek iekasēts.",
"US sales tax is added where a state charges it.": "ASV tirdzniecības nodoklis tiek pievienots, kur to iekasē štats.",
"VAT included where it applies.": "PVN iekļauts, kur tas attiecas.",
"In a set in your basket": "Komplektā jūsu grozā",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Pabeidziet maksājumu pārlūkā. Jūsu priekšmeti pēc brīža nonāks Garderobē.",
"{name} was left out: made for another Horizon version": "{name} tika izlaists: veidots citai Horizon versijai",
"{name} was left out: clashes with {other}": "{name} tika izlaists: konfliktē ar {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Atvērt privātajā logā",
"Open this link in a private window to pick another account.": "Atveriet šo saiti privātajā logā, lai izvēlētos citu kontu.",
"Use a different Microsoft account": "Izmantot citu Microsoft kontu"
"Use a different Microsoft account": "Izmantot citu Microsoft kontu",
"Buy": "Pirkt",
"Gift": "Dāvināt",
"Looks": "Tēli"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Побарајте го основачкиот сет",
"Claiming…": "Се презема…",
"The shop didn't load.": "Продавницата не се вчита.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Работи за облекување на вашиот играч, што ги гледаат сите што играат на Horizon.",
"Free for founders": "Бесплатно за основачите",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "За играчите што први беа тука. Бесплатно за преземање; откако ќе го преземете, ваш е засекогаш.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Завршете го бесплатното плаќање во прелистувачот. Комплетот ќе се појави тука за момент.",
"{n} items": "{n} предмети",
"Nothing is on sale right now.": "Во моментов ништо не се продава.",
"Your basket": "Вашата кошничка",
"Your basket is empty.": "Вашата кошничка е празна.",
"Add to basket": "Додај во кошничка",
"Total": "Вкупно",
"This is a gift": "Ова е подарок",
"Your friend's Minecraft name": "Minecraft името на вашиот пријател",
"Find": "Најди",
"For {name}": "За {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Прашајте го тој што плаќа пред да купите. Враќање пари во рок од 14 дена од која било причина.",
"Pay {price} in your browser": "Плати {price} во прелистувачот",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Плаќањето на Paddle се отвора во вашиот прелистувач. Во стартерот ништо не се наплаќа.",
"US sales tax is added where a state charges it.": "Американскиот данок на промет се додава каде што државата го наплаќа.",
"VAT included where it applies.": "ДДВ е вклучен каде што се применува.",
"In a set in your basket": "Во комплет во вашата кошничка",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Завршете го плаќањето во прелистувачот. Предметите стигнуваат во Гардеробата за момент.",
"{name} was left out: made for another Horizon version": "{name} е изоставен: направен за друга верзија на Horizon",
"{name} was left out: clashes with {other}": "{name} е изоставен: се судира со {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Отвори во приватен прозорец",
"Open this link in a private window to pick another account.": "Отворете ја оваа врска во приватен прозорец за да изберете друга сметка.",
"Use a different Microsoft account": "Користи друга сметка на Microsoft"
"Use a different Microsoft account": "Користи друга сметка на Microsoft",
"Buy": "Купи",
"Gift": "Подари",
"Looks": "Изгледи"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Үүсгэн байгуулагчийн багцыг нэхэмжлэх",
"Claiming…": "Авч байна…",
"The shop didn't load.": "Дэлгүүр ачаалагдсангүй.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Таны тоглогчид зориулсан өмсөх зүйлс, Horizon дээр тоглодог хүн бүр харна.",
"Free for founders": "Үүсгэн байгуулагчдад үнэгүй",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Эндхийн анхны тоглогчдод зориулсан. Үнэгүй авч болно; нэг авсны дараа таных үүрд.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Үнэгүй төлбөрийг хөтөч дээрээ дуусгана уу. Иж бүрдэл хэсэг хугацааны дараа энд ирнэ.",
"{n} items": "{n} зүйл",
"Nothing is on sale right now.": "Одоо юу ч зарагдахгүй байна.",
"Your basket": "Таны сагс",
"Your basket is empty.": "Таны сагс хоосон байна.",
"Add to basket": "Сагсанд нэмэх",
"Total": "Нийт",
"This is a gift": "Энэ бол бэлэг",
"Your friend's Minecraft name": "Найзын тань Minecraft нэр",
"Find": "Хайх",
"For {name}": "{name}-д",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Худалдан авахаасаа өмнө төлөх хүнээс асуугаарай. Ямар ч шалтгаанаар 14 хоногийн дотор мөнгө буцаана.",
"Pay {price} in your browser": "Хөтөч дээр {price} төлөх",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle-ийн төлбөр таны хөтөч дээр нээгдэнэ. Лаунчер дээр юу ч суутгахгүй.",
"US sales tax is added where a state charges it.": "Муж авдаг газарт АНУ-ын борлуулалтын татвар нэмэгдэнэ.",
"VAT included where it applies.": "НӨАТ хамаарах газарт багтсан.",
"In a set in your basket": "Таны сагсан дахь багцад",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Төлбөрөө хөтөч дээр дуусгаарай. Таны зүйлс хувцасны шүүгээнд удахгүй ирнэ.",
"{name} was left out: made for another Horizon version": "{name}-г хассан: Horizon-ын өөр хувилбарт зориулагдсан",
"{name} was left out: clashes with {other}": "{name}-г хассан: {other}-тэй зөрчилддөг",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Хувийн цонхонд нээх",
"Open this link in a private window to pick another account.": "Өөр данс сонгохын тулд энэ холбоосыг хувийн цонхонд нээнэ үү.",
"Use a different Microsoft account": "Өөр Microsoft данс ашиглах"
"Use a different Microsoft account": "Өөр Microsoft данс ашиглах",
"Buy": "Худалдаж авах",
"Gift": "Бэлэглэх",
"Looks": "Төрхүүд"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Tuntut set pengasas",
"Claiming…": "Menuntut…",
"The shop didn't load.": "Kedai tidak dimuatkan.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Perkara untuk dipakai oleh pemain anda, dilihat oleh semua orang yang bermain di Horizon.",
"Free for founders": "Percuma untuk pengasas",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Untuk pemain yang berada di sini dahulu. Percuma untuk dituntut; sebaik sahaja dituntut, ia milik anda selamanya.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Selesaikan pembayaran percuma dalam pelayar anda. Set akan tiba di sini sebentar lagi.",
"{n} items": "{n} item",
"Nothing is on sale right now.": "Tiada apa-apa dijual sekarang.",
"Your basket": "Bakul anda",
"Your basket is empty.": "Bakul anda kosong.",
"Add to basket": "Tambah ke bakul",
"Total": "Jumlah",
"This is a gift": "Ini hadiah",
"Your friend's Minecraft name": "Nama Minecraft rakan anda",
"Find": "Cari",
"For {name}": "Untuk {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Tanya sesiapa yang membayar sebelum membeli. Bayaran balik dalam 14 hari atas apa-apa sebab.",
"Pay {price} in your browser": "Bayar {price} dalam pelayar",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Pembayaran Paddle dibuka dalam pelayar anda. Tiada apa-apa dicaj dalam pelancar.",
"US sales tax is added where a state charges it.": "Cukai jualan AS ditambah di mana negeri mengenakannya.",
"VAT included where it applies.": "VAT termasuk di mana berkenaan.",
"In a set in your basket": "Dalam set dalam bakul anda",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Selesaikan pembayaran dalam pelayar. Item anda sampai ke Almari sebentar lagi.",
"{name} was left out: made for another Horizon version": "{name} ditinggalkan: dibuat untuk versi Horizon lain",
"{name} was left out: clashes with {other}": "{name} ditinggalkan: bercanggah dengan {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Buka dalam tetingkap peribadi",
"Open this link in a private window to pick another account.": "Buka pautan ini dalam tetingkap peribadi untuk memilih akaun lain.",
"Use a different Microsoft account": "Gunakan akaun Microsoft lain"
"Use a different Microsoft account": "Gunakan akaun Microsoft lain",
"Buy": "Beli",
"Gift": "Hadiahkan",
"Looks": "Gaya"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Itlob is-sett tal-fundatur",
"Claiming…": "Qed jintalab…",
"The shop didn't load.": "Is-susta ma tagħbietx.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Affarijiet x'tilbes għall-plejer tiegħek, li jarahom kull min jilgħab fuq Horizon.",
"Free for founders": "B'xejn għall-fundaturi",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Għal-plejers li kienu hawn l-ewwel. B'xejn biex titlob; ladarba titlobha, tibqa' tiegħek.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Spiċċa l-ħlas b'xejn fil-browser tiegħek. Is-sett jasal hawn ftit wara.",
"{n} items": "{n} oġġetti",
"Nothing is on sale right now.": "Xejn mhu għall-bejgħ bħalissa.",
"Your basket": "Il-basket tiegħek",
"Your basket is empty.": "Il-basket tiegħek vojt.",
"Add to basket": "Żid mal-basket",
"Total": "Total",
"This is a gift": "Dan rigal",
"Your friend's Minecraft name": "L-isem Minecraft tal-ħabib tiegħek",
"Find": "Sib",
"For {name}": "Għal {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Staqsi lil min se jħallas qabel ma tixtri. Rifużjoni fi żmien 14-il jum għal kwalunkwe raġuni.",
"Pay {price} in your browser": "Ħallas {price} fil-browser",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Il-ħlas ta' Paddle jinfetaħ fil-browser tiegħek. Xejn ma jiġi ċċarġjat fil-launcher.",
"US sales tax is added where a state charges it.": "It-taxxa tal-bejgħ tal-Istati Uniti tiżdied fejn stat jitlobha.",
"VAT included where it applies.": "VAT inkluża fejn tapplika.",
"In a set in your basket": "F'sett fil-basket tiegħek",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Lesti l-ħlas fil-browser. L-oġġetti tiegħek jaslu fil-Gwardarobba ftit wara.",
"{name} was left out: made for another Horizon version": "{name} tħalla barra: magħmul għal verżjoni oħra ta' Horizon",
"{name} was left out: clashes with {other}": "{name} tħalla barra: jaħbat ma' {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Iftaħ f'tieqa privata",
"Open this link in a private window to pick another account.": "Iftaħ dan il-link f'tieqa privata biex tagħżel kont ieħor.",
"Use a different Microsoft account": "Uża kont Microsoft differenti"
"Use a different Microsoft account": "Uża kont Microsoft differenti",
"Buy": "Ixtri",
"Gift": "Agħti rigal",
"Looks": "Dehriet"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Claim de oprichtersset",
"Claiming…": "Ophalen…",
"The shop didn't load.": "De winkel kon niet worden geladen.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Dingen om te dragen voor uw speler, zichtbaar voor iedereen die op Horizon speelt.",
"Free for founders": "Gratis voor founders",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Voor de spelers die er als eerste bij waren. Gratis op te halen; eenmaal opgehaald is het van u.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Rond de gratis checkout af in uw browser. De set verschijnt even later hier.",
"{n} items": "{n} items",
"Nothing is on sale right now.": "Er is nu niets te koop.",
"Your basket": "Je mandje",
"Your basket is empty.": "Je mandje is leeg.",
"Add to basket": "In mandje",
"Total": "Totaal",
"This is a gift": "Dit is een cadeau",
"Your friend's Minecraft name": "De Minecraft-naam van je vriend",
"Find": "Zoeken",
"For {name}": "Voor {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Vraag wie betaalt voordat je koopt. Geld terug binnen 14 dagen om welke reden dan ook.",
"Pay {price} in your browser": "{price} betalen in je browser",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "De betaling van Paddle opent in je browser. In de launcher wordt niets afgeschreven.",
"US sales tax is added where a state charges it.": "Amerikaanse omzetbelasting komt erbij waar een staat die heft.",
"VAT included where it applies.": "Btw inbegrepen waar die geldt.",
"In a set in your basket": "In een set in je mandje",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Rond de betaling af in je browser. Je items komen even later in de Kledingkast.",
"{name} was left out: made for another Horizon version": "{name} is weggelaten: gemaakt voor een andere Horizon-versie",
"{name} was left out: clashes with {other}": "{name} is weggelaten: botst met {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Openen in privévenster",
"Open this link in a private window to pick another account.": "Open deze link in een privévenster om een ander account te kiezen.",
"Use a different Microsoft account": "Een ander Microsoft-account gebruiken"
"Use a different Microsoft account": "Een ander Microsoft-account gebruiken",
"Buy": "Kopen",
"Gift": "Cadeau geven",
"Looks": "Looks"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Gjør krav på grunnleggersettet",
"Claiming…": "Henter…",
"The shop didn't load.": "Butikken ble ikke lastet.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Ting spilleren din kan ha på seg, synlig for alle som spiller på Horizon.",
"Free for founders": "Gratis for grunnleggere",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "For spillerne som var her først. Gratis; når det er hentet, er det ditt.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Fullfør den gratis utsjekkingen i nettleseren din. Settet dukker opp her et øyeblikk senere.",
"{n} items": "{n} ting",
"Nothing is on sale right now.": "Ingenting er til salgs akkurat nå.",
"Your basket": "Kurven din",
"Your basket is empty.": "Kurven din er tom.",
"Add to basket": "Legg i kurven",
"Total": "Totalt",
"This is a gift": "Dette er en gave",
"Your friend's Minecraft name": "Minecraft-navnet til vennen din",
"Find": "Finn",
"For {name}": "Til {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Spør den som betaler før du kjøper. Refusjon innen 14 dager uansett grunn.",
"Pay {price} in your browser": "Betal {price} i nettleseren",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Betalingen til Paddle åpnes i nettleseren din. Ingenting trekkes i launcheren.",
"US sales tax is added where a state charges it.": "Amerikansk salgsavgift legges til der en delstat krever den.",
"VAT included where it applies.": "MVA inkludert der den gjelder.",
"In a set in your basket": "I et sett i kurven din",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Fullfør betalingen i nettleseren. Tingene dine kommer i Garderoben om et øyeblikk.",
"{name} was left out: made for another Horizon version": "{name} ble utelatt: laget for en annen Horizon-versjon",
"{name} was left out: clashes with {other}": "{name} ble utelatt: kolliderer med {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Åpne i et privat vindu",
"Open this link in a private window to pick another account.": "Åpne denne lenken i et privat vindu for å velge en annen konto.",
"Use a different Microsoft account": "Bruk en annen Microsoft-konto"
"Use a different Microsoft account": "Bruk en annen Microsoft-konto",
"Buy": "Kjøp",
"Gift": "Gi i gave",
"Looks": "Antrekk"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Reclamatz l'ensemble fondator",
"Claiming…": "Reivindicacion…",
"The shop didn't load.": "La botiga s'es pas cargada.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "De causas de portar per vòstre jogador, vistas per totes los que jogan a Horizon.",
"Free for founders": "Gratuit pels fondadors",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Pels jogadors qu'èran aquí primièr. Gratuit de reivindicar ; un còp reivindicat, es vòstre per totjorn.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Acabatz lo pagament gratuit dins vòstre navegador. Lo set arribarà aicí un moment mai tard.",
"{n} items": "{n} objèctes",
"Nothing is on sale right now.": "Res es pas en venda pel moment.",
"Your basket": "Vòstre panièr",
"Your basket is empty.": "Vòstre panièr es void.",
"Add to basket": "Apondre al panièr",
"Total": "Total",
"This is a gift": "Es un present",
"Your friend's Minecraft name": "Lo nom Minecraft de vòstre amic",
"Find": "Cercar",
"For {name}": "Per {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Demandatz a qual paga abans de crompar. Remborsament dins 14 jorns per quina rason que siá.",
"Pay {price} in your browser": "Pagar {price} dins lo navegador",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Lo pagament de Paddle s'obrís dins vòstre navegador. Res es pas debitat dins l'aviaire.",
"US sales tax is added where a state charges it.": "La taxa de venda americana s'apond ont un estat la percep.",
"VAT included where it applies.": "TVA inclusa ont s'aplica.",
"In a set in your basket": "Dins un set de vòstre panièr",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Acabatz lo pagament dins lo navegador. Vòstres objèctes arriban a la Garda-rauba un momenton aprèp.",
"{name} was left out: made for another Horizon version": "{name} es estat daissat de caire: fach per una autra version d'Horizon",
"{name} was left out: clashes with {other}": "{name} es estat daissat de caire: en conflicte amb {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Dobrir dins una fenèstra privada",
"Open this link in a private window to pick another account.": "Dobrissètz aqueste ligam dins una fenèstra privada per causir un autre compte.",
"Use a different Microsoft account": "Utilizar un autre compte Microsoft"
"Use a different Microsoft account": "Utilizar un autre compte Microsoft",
"Buy": "Crompar",
"Gift": "Ofrir",
"Looks": "Estils"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Odbierz zestaw założyciela",
"Claiming…": "Odbieranie…",
"The shop didn't load.": "Sklep się nie wczytał.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Rzeczy dla twojej postaci, widoczne dla wszystkich grających na Horizon.",
"Free for founders": "Za darmo dla założycieli",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Dla graczy, którzy byli tu pierwsi. Za darmo; po odebraniu zostaje twój.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Dokończ bezpłatną płatność w przeglądarce. Zestaw pojawi się tutaj chwilę później.",
"{n} items": "{n} przedmiotów",
"Nothing is on sale right now.": "Teraz nic nie jest na sprzedaż.",
"Your basket": "Twój koszyk",
"Your basket is empty.": "Twój koszyk jest pusty.",
"Add to basket": "Dodaj do koszyka",
"Total": "Razem",
"This is a gift": "To prezent",
"Your friend's Minecraft name": "Nazwa Minecraft twojego znajomego",
"Find": "Znajdź",
"For {name}": "Dla {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Zapytaj osobę, która płaci, zanim kupisz. Zwrot pieniędzy w ciągu 14 dni z dowolnego powodu.",
"Pay {price} in your browser": "Zapłać {price} w przeglądarce",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Płatność Paddle otworzy się w przeglądarce. W launcherze nic nie jest pobierane.",
"US sales tax is added where a state charges it.": "Amerykański podatek od sprzedaży jest doliczany tam, gdzie pobiera go stan.",
"VAT included where it applies.": "VAT wliczony tam, gdzie obowiązuje.",
"In a set in your basket": "W zestawie w twoim koszyku",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Dokończ płatność w przeglądarce. Przedmioty trafią do Garderoby za chwilę.",
"{name} was left out: made for another Horizon version": "Pominięto {name}: stworzony dla innej wersji Horizon",
"{name} was left out: clashes with {other}": "Pominięto {name}: koliduje z {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Otwórz w oknie prywatnym",
"Open this link in a private window to pick another account.": "Otwórz ten link w oknie prywatnym, aby wybrać inne konto.",
"Use a different Microsoft account": "Użyj innego konta Microsoft"
"Use a different Microsoft account": "Użyj innego konta Microsoft",
"Buy": "Kup",
"Gift": "Podaruj",
"Looks": "Stylizacje"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Resgatar o conjunto fundador",
"Claiming…": "Resgatando…",
"The shop didn't load.": "A loja não carregou.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Coisas para o seu jogador usar, vistas por todos que jogam no Horizon.",
"Free for founders": "Grátis para fundadores",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Para quem chegou primeiro. Grátis; depois de resgatado, é seu para sempre.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Conclua o checkout gratuito no navegador. O set chega aqui um instante depois.",
"{n} items": "{n} itens",
"Nothing is on sale right now.": "Nada está à venda agora.",
"Your basket": "Seu carrinho",
"Your basket is empty.": "Seu carrinho está vazio.",
"Add to basket": "Adicionar ao carrinho",
"Total": "Total",
"This is a gift": "É um presente",
"Your friend's Minecraft name": "O nome de Minecraft do seu amigo",
"Find": "Buscar",
"For {name}": "Para {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pergunte a quem vai pagar antes de comprar. Reembolso em até 14 dias por qualquer motivo.",
"Pay {price} in your browser": "Pagar {price} no navegador",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "O pagamento do Paddle abre no seu navegador. Nada é cobrado no launcher.",
"US sales tax is added where a state charges it.": "O imposto sobre vendas dos EUA é somado onde um estado o cobra.",
"VAT included where it applies.": "IVA incluído onde se aplica.",
"In a set in your basket": "Em um conjunto no seu carrinho",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Termine o pagamento no navegador. Seus itens chegam ao Guarda-roupa logo depois.",
"{name} was left out: made for another Horizon version": "{name} ficou de fora: feito para outra versão do Horizon",
"{name} was left out: clashes with {other}": "{name} ficou de fora: entra em conflito com {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Abrir em janela anônima",
"Open this link in a private window to pick another account.": "Abra este link em uma janela anônima para escolher outra conta.",
"Use a different Microsoft account": "Usar outra conta Microsoft"
"Use a different Microsoft account": "Usar outra conta Microsoft",
"Buy": "Comprar",
"Gift": "Presentear",
"Looks": "Visuais"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Obter o conjunto de fundador",
"Claiming…": "A obter…",
"The shop didn't load.": "A loja não carregou.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Coisas para o teu jogador usar, vistas por todos os que jogam no Horizon.",
"Free for founders": "Grátis para fundadores",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Para quem chegou primeiro. Grátis; depois de obtido, é teu para sempre.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Conclui o pagamento gratuito no navegador. O set chega aqui um instante depois.",
"{n} items": "{n} artigos",
"Nothing is on sale right now.": "Nada está à venda neste momento.",
"Your basket": "O seu cesto",
"Your basket is empty.": "O seu cesto está vazio.",
"Add to basket": "Adicionar ao cesto",
"Total": "Total",
"This is a gift": "É um presente",
"Your friend's Minecraft name": "O nome de Minecraft do seu amigo",
"Find": "Procurar",
"For {name}": "Para {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pergunte a quem paga antes de comprar. Reembolso em 14 dias por qualquer motivo.",
"Pay {price} in your browser": "Pagar {price} no navegador",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "O pagamento do Paddle abre no seu navegador. Nada é cobrado no launcher.",
"US sales tax is added where a state charges it.": "O imposto sobre vendas dos EUA é acrescentado onde um estado o cobra.",
"VAT included where it applies.": "IVA incluído onde se aplica.",
"In a set in your basket": "Num conjunto do seu cesto",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Termine o pagamento no navegador. Os seus artigos chegam ao Guarda-roupa pouco depois.",
"{name} was left out: made for another Horizon version": "{name} ficou de fora: feito para outra versão do Horizon",
"{name} was left out: clashes with {other}": "{name} ficou de fora: entra em conflito com {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Abrir numa janela anónima",
"Open this link in a private window to pick another account.": "Abra esta ligação numa janela anónima para escolher outra conta.",
"Use a different Microsoft account": "Usar outra conta Microsoft"
"Use a different Microsoft account": "Usar outra conta Microsoft",
"Buy": "Comprar",
"Gift": "Oferecer",
"Looks": "Visuais"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Revendicați setul de fondator",
"Claiming…": "Se revendică…",
"The shop didn't load.": "Magazinul nu s-a încărcat.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Lucruri de purtat pentru jucătorul tău, văzute de toți cei care joacă pe Horizon.",
"Free for founders": "Gratuit pentru fondatori",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Pentru jucătorii care au fost aici primii. Gratuit; odată revendicat, rămâne al tău.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Finalizează plata gratuită în browser. Setul ajunge aici o clipă mai târziu.",
"{n} items": "{n} obiecte",
"Nothing is on sale right now.": "Momentan nu se vinde nimic.",
"Your basket": "Coșul tău",
"Your basket is empty.": "Coșul tău este gol.",
"Add to basket": "Adaugă în coș",
"Total": "Total",
"This is a gift": "Este un cadou",
"Your friend's Minecraft name": "Numele de Minecraft al prietenului tău",
"Find": "Caută",
"For {name}": "Pentru {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Întreabă pe cine plătește înainte să cumperi. Rambursare în 14 zile, din orice motiv.",
"Pay {price} in your browser": "Plătește {price} în browser",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Plata Paddle se deschide în browserul tău. Nu se încasează nimic în launcher.",
"US sales tax is added where a state charges it.": "Taxa pe vânzări din SUA se adaugă acolo unde un stat o percepe.",
"VAT included where it applies.": "TVA inclus acolo unde se aplică.",
"In a set in your basket": "Într-un set din coșul tău",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Termină plata în browser. Obiectele ajung în Garderobă puțin mai târziu.",
"{name} was left out: made for another Horizon version": "{name} a fost omis: făcut pentru altă versiune de Horizon",
"{name} was left out: clashes with {other}": "{name} a fost omis: intră în conflict cu {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Deschide într-o fereastră privată",
"Open this link in a private window to pick another account.": "Deschideți acest link într-o fereastră privată pentru a alege alt cont.",
"Use a different Microsoft account": "Folosiți alt cont Microsoft"
"Use a different Microsoft account": "Folosiți alt cont Microsoft",
"Buy": "Cumpără",
"Gift": "Dăruiește",
"Looks": "Ținute"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Получить набор основателя",
"Claiming…": "Получение…",
"The shop didn't load.": "Магазин не загрузился.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Вещи для твоего игрока, которые видят все, кто играет на Horizon.",
"Free for founders": "Бесплатно для основателей",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Для игроков, которые были здесь первыми. Бесплатно; получив, оставишь его себе навсегда.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Заверши бесплатную оплату в браузере. Набор появится здесь через мгновение.",
"{n} items": "{n} предметов",
"Nothing is on sale right now.": "Сейчас ничего не продаётся.",
"Your basket": "Ваша корзина",
"Your basket is empty.": "Ваша корзина пуста.",
"Add to basket": "В корзину",
"Total": "Итого",
"This is a gift": "Это подарок",
"Your friend's Minecraft name": "Имя друга в Minecraft",
"Find": "Найти",
"For {name}": "Для {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Перед покупкой спросите того, кто платит. Возврат денег в течение 14 дней по любой причине.",
"Pay {price} in your browser": "Оплатить {price} в браузере",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Оплата Paddle откроется в браузере. В лаунчере ничего не списывается.",
"US sales tax is added where a state charges it.": "Налог с продаж США добавляется там, где его берёт штат.",
"VAT included where it applies.": "НДС включён там, где он применяется.",
"In a set in your basket": "В наборе в вашей корзине",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Завершите оплату в браузере. Предметы появятся в Гардеробе через мгновение.",
"{name} was left out: made for another Horizon version": "{name} пропущен: сделан для другой версии Horizon",
"{name} was left out: clashes with {other}": "{name} пропущен: конфликтует с {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Открыть в приватном окне",
"Open this link in a private window to pick another account.": "Откройте эту ссылку в приватном окне, чтобы выбрать другой аккаунт.",
"Use a different Microsoft account": "Использовать другой аккаунт Microsoft"
"Use a different Microsoft account": "Использовать другой аккаунт Microsoft",
"Buy": "Купить",
"Gift": "Подарить",
"Looks": "Образы"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Төрүттээччи наборун ирдиир",
"Claiming…": "Ылан эрэбин…",
"The shop didn't load.": "Маагыаһын киирбэтэ.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Оонньооччуҥҥа кэтэр таҥас, Horizon-ҥа оонньооччулар барылара көрөллөр.",
"Free for founders": "Төрдүттэргэ босхо",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Бастаан кэлбит оонньооччулартан. Босхо ылыллар; биирдэ ылбыккар, эйиэхэ хаалар.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Босхо төлөбүрү браузергар түмүктээ. Хомуурунньук манна быдан кэлин көстөр.",
"{n} items": "{n} мал",
"Nothing is on sale right now.": "Билигин туох да атыыламмат.",
"Your basket": "Эн корзинаҥ",
"Your basket is empty.": "Корзинаҥ кураанах.",
"Add to basket": "Корзинаҕа эбэргэ",
"Total": "Барыта",
"This is a gift": "Бу бэлэх",
"Your friend's Minecraft name": "Доҕоруҥ Minecraft аата",
"Find": "Булуу",
"For {name}": "{name} иһин",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Атыылаһыаҥ иннинэ ким төлүөҕүн ыйыт. Ханнык баҕарар төрүөтүнэн 14 хонук иһигэр харчы төннөрүллэр.",
"Pay {price} in your browser": "{price} браузерга төлөө",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle төлөбүрэ браузергар аһыллар. Лаунчерга туох да ылыллыбат.",
"US sales tax is added where a state charges it.": "АХШ атыы нолуога штат ылар сиригэр эбиллэр.",
"VAT included where it applies.": "НДС киирэр, туттуллар сиригэр.",
"In a set in your basket": "Корзинаҕар баар комплекка",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Төлөбүрү браузерга бүтэр. Маллара Гардеробка сотору кэлиэхтэрэ.",
"{name} was left out: made for another Horizon version": "{name} киллэриллибэтэ: Horizon атын барылыатыгар оҥоһуллубут",
"{name} was left out: clashes with {other}": "{name} киллэриллибэтэ: {other} кытта мөккүһэр",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Кистэлэҥ түннүкка арыйыы",
"Open this link in a private window to pick another account.": "Атын учуоту талар туһуттан бу ссылканы кистэлэҥ түннүккэ арыйыҥ.",
"Use a different Microsoft account": "Атын Microsoft учуоту туттуу"
"Use a different Microsoft account": "Атын Microsoft учуоту туттуу",
"Buy": "Атыылас",
"Gift": "Бэлэхтээ",
"Looks": "Обрастар"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Gáibidit vuođđudeaddji seahka",
"Claiming…": "Váldá…",
"The shop didn't load.": "Gávpi ii viežžan.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Biktasat du speallái, maid buohkat geat spealla Horizon:is oidnet.",
"Free for founders": "Nuvttá vuođđudeaddjiide",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Sidjiide geat ledje dás vuosttažin. Nuvttá váldit; go lea váldojuvvon, dat lea du.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Loahpaha nuvttá mávsima du bláđđeheaddjis. Seatta boahtá deike hetti maŋŋil.",
"{n} items": "{n} ávnnasa",
"Nothing is on sale right now.": "Dál ii mihkkege leat vuovdimassii.",
"Your basket": "Du gorri",
"Your basket is empty.": "Du gorri lea guorus.",
"Add to basket": "Lasit gorrái",
"Total": "Oktiibuot",
"This is a gift": "Dát lea skeankka",
"Your friend's Minecraft name": "Du ustibа Minecraft-namma",
"Find": "Oza",
"For {name}": "{name} várás",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Jeara gii máksá ovdal go oasttát. Ruhta máhcahuvvo 14 beaivvi siste makkár ákkain beare.",
"Pay {price} in your browser": "Mávsse {price} neahttalohkkiin",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle máksin rahpasa du neahttalohkkiin. Álggaheaddjis ii gessojuvvo mihkkege.",
"US sales tax is added where a state charges it.": "USA vuovdinvearru lasihuvvo gos stáhta dan gáibida.",
"VAT included where it applies.": "MVA lea fárus gos dat guoská.",
"In a set in your basket": "Seahtas du gorris",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Gearggat máksima neahttalohkkiin. Du ávnnasat bohtet Gárvoskáhppái veaháš maŋŋil.",
"{name} was left out: made for another Horizon version": "{name} guđđojuvvui olggobeallái: dahkkon eará Horizon-veršuvdnii",
"{name} was left out: clashes with {other}": "{name} guđđojuvvui olggobeallái: riidalda {other} mielde",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Raba priváhta láseš",
"Open this link in a private window to pick another account.": "Raba dán liŋkka priváhta láseš válljen dihte eará konto.",
"Use a different Microsoft account": "Geavat eará Microsoft konto"
"Use a different Microsoft account": "Geavat eará Microsoft konto",
"Buy": "Oastte",
"Gift": "Atte skeaŋkan",
"Looks": "Fárddat"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Nárokovať zakladateľský set",
"Claiming…": "Získava sa…",
"The shop didn't load.": "Obchod sa nenačítal.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Veci pre tvojho hráča, ktoré vidí každý, kto hrá na Horizone.",
"Free for founders": "Zadarmo pre zakladateľov",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Pre hráčov, ktorí tu boli prví. Zadarmo; keď ho získaš, ostane tvoj.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Dokonči bezplatnú platbu v prehliadači. Sada sa tu o chvíľu objaví.",
"{n} items": "{n} predmetov",
"Nothing is on sale right now.": "Teraz sa nič nepredáva.",
"Your basket": "Váš košík",
"Your basket is empty.": "Košík je prázdny.",
"Add to basket": "Pridať do košíka",
"Total": "Spolu",
"This is a gift": "Je to darček",
"Your friend's Minecraft name": "Minecraft meno vášho priateľa",
"Find": "Nájsť",
"For {name}": "Pre {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pred nákupom sa opýtajte toho, kto platí. Vrátenie peňazí do 14 dní z akéhokoľvek dôvodu.",
"Pay {price} in your browser": "Zaplatiť {price} v prehliadači",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Platba Paddle sa otvorí v prehliadači. V launcheri sa nič neúčtuje.",
"US sales tax is added where a state charges it.": "Americká daň z predaja sa pripočíta tam, kde ju štát vyberá.",
"VAT included where it applies.": "DPH zahrnutá tam, kde sa uplatňuje.",
"In a set in your basket": "V sade vo vašom košíku",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Dokončite platbu v prehliadači. Predmety prídu do Šatníka o chvíľu.",
"{name} was left out: made for another Horizon version": "{name} bol vynechaný: vytvorený pre inú verziu Horizonu",
"{name} was left out: clashes with {other}": "{name} bol vynechaný: koliduje s {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Otvoriť v súkromnom okne",
"Open this link in a private window to pick another account.": "Otvorte tento odkaz v súkromnom okne a vyberte iné konto.",
"Use a different Microsoft account": "Použiť iné konto Microsoft"
"Use a different Microsoft account": "Použiť iné konto Microsoft",
"Buy": "Kúpiť",
"Gift": "Darovať",
"Looks": "Vzhľady"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Zahtevajte ustanoviteljski niz",
"Claiming…": "Prevzemanje …",
"The shop didn't load.": "Trgovina se ni naložila.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Stvari za nošenje za vašega igralca, ki jih vidijo vsi, ki igrajo na Horizonu.",
"Free for founders": "Brezplačno za ustanovitelje",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Za igralce, ki so bili tu prvi. Brezplačno za prevzem; ko ga prevzamete, je vaš za vedno.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Dokončajte brezplačno plačilo v brskalniku. Komplet se bo tu prikazal čez trenutek.",
"{n} items": "{n} predmetov",
"Nothing is on sale right now.": "Trenutno ni nič naprodaj.",
"Your basket": "Vaša košarica",
"Your basket is empty.": "Vaša košarica je prazna.",
"Add to basket": "Dodaj v košarico",
"Total": "Skupaj",
"This is a gift": "To je darilo",
"Your friend's Minecraft name": "Minecraft ime vašega prijatelja",
"Find": "Poišči",
"For {name}": "Za {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pred nakupom vprašajte tistega, ki plača. Vračilo denarja v 14 dneh iz kateregakoli razloga.",
"Pay {price} in your browser": "Plačaj {price} v brskalniku",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Plačilo Paddle se odpre v brskalniku. V zaganjalniku se nič ne zaračuna.",
"US sales tax is added where a state charges it.": "Ameriški prometni davek se doda, kjer ga zvezna država pobira.",
"VAT included where it applies.": "DDV vključen, kjer velja.",
"In a set in your basket": "V kompletu v vaši košarici",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Dokončajte plačilo v brskalniku. Predmeti pridejo v Garderobo čez trenutek.",
"{name} was left out: made for another Horizon version": "{name} je bil izpuščen: narejen za drugo različico Horizona",
"{name} was left out: clashes with {other}": "{name} je bil izpuščen: je v sporu z {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Odpri v zasebnem oknu",
"Open this link in a private window to pick another account.": "Odprite to povezavo v zasebnem oknu, da izberete drug račun.",
"Use a different Microsoft account": "Uporabi drug Microsoftov račun"
"Use a different Microsoft account": "Uporabi drug Microsoftov račun",
"Buy": "Kupi",
"Gift": "Podari",
"Looks": "Videzi"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Sheeg aasaasaha",
"Claiming…": "Waa la qaadanayaa…",
"The shop didn't load.": "Dukaanka ma soo shubmin.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Waxyaabo lagu xidho ciyaartoygaaga, ay arkaan qof kasta oo ku ciyaara Horizon.",
"Free for founders": "Bilaash aasaasayaasha",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Ciyaartoyda halkan ugu horreeyay. Bilaash ayaa loo qaadan karaa; marka la qaato, adigaa leh weligaa.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Dhammaystir bixinta bilaashka ah browser-kaaga. Xirmadu halkan ayay imaan doontaa daqiiqad ka dib.",
"{n} items": "{n} shay",
"Nothing is on sale right now.": "Hadda waxba lama iibinayo.",
"Your basket": "Dambiishaada",
"Your basket is empty.": "Dambiishaadu waa madhan tahay.",
"Add to basket": "Ku dar dambiisha",
"Total": "Wadarta",
"This is a gift": "Kani waa hadiyad",
"Your friend's Minecraft name": "Magaca Minecraft ee saaxiibkaa",
"Find": "Raadi",
"For {name}": "Loogu talagalay {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Weydii qofka bixinaya ka hor intaadan iibsan. Lacag celin 14 maalmood gudahood sabab kasta ha ahaatee.",
"Pay {price} in your browser": "Ku bixi {price} biraawsarkaaga",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Lacag bixinta Paddle waxay ka furantaa biraawsarkaaga. Waxba lagaama jaro launcher-ka.",
"US sales tax is added where a state charges it.": "Canshuurta iibka Maraykanka waa lagu daraa meesha gobol ka qaado.",
"VAT included where it applies.": "VAT waa ku jirtaa meesha ay khuseyso.",
"In a set in your basket": "Qayb ka mid ah set dambiishaada ku jira",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Ku dhammee lacag bixinta biraawsarka. Alaabtaadu waxay gaari doontaa Armaajada wax yar kadib.",
"{name} was left out: made for another Horizon version": "{name} waa laga reebay: waxaa loo sameeyay nooc kale oo Horizon ah",
"{name} was left out: clashes with {other}": "{name} waa laga reebay: wuxuu ku dhacaa {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Ku fur daaqad gaar ah",
"Open this link in a private window to pick another account.": "Ku fur isku xirkan daaqad gaar ah si aad u doorato xisaab kale.",
"Use a different Microsoft account": "Isticmaal xisaab Microsoft oo kale"
"Use a different Microsoft account": "Isticmaal xisaab Microsoft oo kale",
"Buy": "Iibso",
"Gift": "Hadiyad sii",
"Looks": "Muuqaalo"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Kërkoni grupin themelues",
"Claiming…": "Po merret…",
"The shop didn't load.": "Dyqani nuk u ngarkua.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Gjëra për të veshur për lojtarin tënd, të dukshme për këdo që luan në Horizon.",
"Free for founders": "Falas për themeluesit",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Për lojtarët që qenë këtu të parët. Falas për t’u marrë; pasi ta marrësh, mbetet yti.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Përfundo pagesën falas në shfletues. Seti do të shfaqet këtu pak më vonë.",
"{n} items": "{n} sende",
"Nothing is on sale right now.": "Tani nuk ka asgjë në shitje.",
"Your basket": "Shporta jote",
"Your basket is empty.": "Shporta jote është bosh.",
"Add to basket": "Shto në shportë",
"Total": "Gjithsej",
"This is a gift": "Kjo është dhuratë",
"Your friend's Minecraft name": "Emri Minecraft i mikut tënd",
"Find": "Gjej",
"For {name}": "Për {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Pyet atë që paguan para se të blesh. Rimbursim brenda 14 ditëve për çdo arsye.",
"Pay {price} in your browser": "Paguaj {price} në shfletues",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Pagesa e Paddle hapet në shfletuesin tënd. Në nisës nuk tarifohet asgjë.",
"US sales tax is added where a state charges it.": "Taksa amerikane e shitjes shtohet aty ku e mbledh një shtet.",
"VAT included where it applies.": "TVSH e përfshirë aty ku zbatohet.",
"In a set in your basket": "Në një set në shportën tënde",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Përfundo pagesën në shfletues. Sendet të vijnë në Garderobë pas pak.",
"{name} was left out: made for another Horizon version": "{name} u la jashtë: bërë për një version tjetër të Horizon",
"{name} was left out: clashes with {other}": "{name} u la jashtë: përplaset me {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Hape në dritare private",
"Open this link in a private window to pick another account.": "Hape këtë lidhje në një dritare private për të zgjedhur një llogari tjetër.",
"Use a different Microsoft account": "Përdor një llogari tjetër të Microsoft"
"Use a different Microsoft account": "Përdor një llogari tjetër të Microsoft",
"Buy": "Bli",
"Gift": "Dhuro",
"Looks": "Pamje"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Захтевајте оснивачки скуп",
"Claiming…": "Преузимање…",
"The shop didn't load.": "Продавница се није учитала.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Ствари за ношење за твог играча, које виде сви који играју на Horizon-у.",
"Free for founders": "Бесплатно за осниваче",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "За играче који су били први овде. Бесплатно за преузимање; када га преузмеш, твој је заувек.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Заврши бесплатно плаћање у прегледачу. Сет ће се овде појавити за тренутак.",
"{n} items": "{n} предмета",
"Nothing is on sale right now.": "Тренутно се ништа не продаје.",
"Your basket": "Ваша корпа",
"Your basket is empty.": "Ваша корпа је празна.",
"Add to basket": "Додај у корпу",
"Total": "Укупно",
"This is a gift": "Ово је поклон",
"Your friend's Minecraft name": "Minecraft име вашег пријатеља",
"Find": "Пронађи",
"For {name}": "За {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Питајте онога ко плаћа пре куповине. Повраћај новца у року од 14 дана из било ког разлога.",
"Pay {price} in your browser": "Плати {price} у прегледачу",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle плаћање се отвара у вашем прегледачу. У покретачу се ништа не наплаћује.",
"US sales tax is added where a state charges it.": "Амерички порез на промет додаје се где га држава наплаћује.",
"VAT included where it applies.": "ПДВ укључен где се примењује.",
"In a set in your basket": "У комплету у вашој корпи",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Завршите плаћање у прегледачу. Предмети стижу у Гардеробу за тренутак.",
"{name} was left out: made for another Horizon version": "{name} је изостављен: направљен за другу верзију Horizon-а",
"{name} was left out: clashes with {other}": "{name} је изостављен: сукобљава се са {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Отвори у приватном прозору",
"Open this link in a private window to pick another account.": "Отворите ову везу у приватном прозору да бисте изабрали други налог.",
"Use a different Microsoft account": "Користи други Microsoft налог"
"Use a different Microsoft account": "Користи други Microsoft налог",
"Buy": "Купи",
"Gift": "Поклони",
"Looks": "Изгледи"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Gör anspråk på grundaruppsättningen",
"Claiming…": "Hämtar…",
"The shop didn't load.": "Butiken laddades inte.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Saker att bära för din spelare, sedda av alla som spelar på Horizon.",
"Free for founders": "Gratis för grundare",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "För spelarna som var här först. Gratis att hämta; när du har hämtat det är det ditt att behålla.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Slutför den gratis kassan i webbläsaren. Setet dyker upp här en stund senare.",
"{n} items": "{n} saker",
"Nothing is on sale right now.": "Inget är till salu just nu.",
"Your basket": "Din korg",
"Your basket is empty.": "Din korg är tom.",
"Add to basket": "Lägg i korgen",
"Total": "Totalt",
"This is a gift": "Det här är en gåva",
"Your friend's Minecraft name": "Din väns Minecraft-namn",
"Find": "Hitta",
"For {name}": "Till {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Fråga den som betalar innan du köper. Återbetalning inom 14 dagar av vilken anledning som helst.",
"Pay {price} in your browser": "Betala {price} i webbläsaren",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddles betalning öppnas i din webbläsare. Inget dras i startprogrammet.",
"US sales tax is added where a state charges it.": "Amerikansk försäljningsskatt läggs till där en delstat tar ut den.",
"VAT included where it applies.": "Moms ingår där den gäller.",
"In a set in your basket": "I ett set i din korg",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Slutför betalningen i webbläsaren. Dina saker kommer till Garderoben strax därefter.",
"{name} was left out: made for another Horizon version": "{name} utelämnades: gjord för en annan Horizon-version",
"{name} was left out: clashes with {other}": "{name} utelämnades: krockar med {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Öppna i privat fönster",
"Open this link in a private window to pick another account.": "Öppna den här länken i ett privat fönster för att välja ett annat konto.",
"Use a different Microsoft account": "Använd ett annat Microsoft-konto"
"Use a different Microsoft account": "Använd ett annat Microsoft-konto",
"Buy": "Köp",
"Gift": "Ge bort",
"Looks": "Looks"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Roszczyć sie do zbioru założycieli",
"Claiming…": "Biere sie…",
"The shop didn't load.": "Sklep sie niy załadowoł.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Rzeczy do noszyńô dlŏ tworgo grŏcza, widzione bez wszyjskich, co grajōm na Horizon.",
"Free for founders": "Za darmo dlŏ zôłożycieli",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Dlŏ grŏczy, co byli tukej piyrsi. Za darmo do wziyńcia; jak już to weźniesz, ostanie twoje.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Skōńcz darmowõ płatność w przeglōndarce. Zestawa pokoże sie tukej chwila późni.",
"{n} items": "{n} rzeczy",
"Nothing is on sale right now.": "Terŏz nic niy ma na przedŏż.",
"Your basket": "Twōj koszyk",
"Your basket is empty.": "Twōj koszyk je prōżny.",
"Add to basket": "Przidej do koszyka",
"Total": "Razym",
"This is a gift": "To je gyszynk",
"Your friend's Minecraft name": "Miano Minecraft twojigo kamrata",
"Find": "Znojdź",
"For {name}": "Do {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Spytej tego, fto płaci, zanim kupisz. Zwrot pijyndzy we 14 dniach z jakigo bądź powodu.",
"Pay {price} in your browser": "Zapłać {price} we przeglōndarce",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Płacynie Paddle ôtwiyro sie we przeglōndarce. We launcherze nic niy je pobiyrane.",
"US sales tax is added where a state charges it.": "Amerykański podatek ôd przedaży je doliczany tam, kaj go bierze sztat.",
"VAT included where it applies.": "VAT wliczōny tam, kaj ôbowiōnzuje.",
"In a set in your basket": "We zestawie we twojim koszyku",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Skōńcz płacynie we przeglōndarce. Rzeczy przidōm do Garderoby za chwila.",
"{name} was left out: made for another Horizon version": "{name} zostoł pominiynty: zrobiōny do inkszyj wersyje Horizona",
"{name} was left out: clashes with {other}": "{name} zostoł pominiynty: koliduje ze {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Ôtworz w prywatnym ôknie",
"Open this link in a private window to pick another account.": "Ôtworz ten link w prywatnym ôknie, żeby wybrać inksze kōnto.",
"Use a different Microsoft account": "Użyj inkszego kōnta Microsoft"
"Use a different Microsoft account": "Użyj inkszego kōnta Microsoft",
"Buy": "Kup",
"Gift": "Podaruj",
"Looks": "Stylizacyje"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "நிறுவனர் தொகுப்பைக் கோருங்கள்",
"Claiming…": "பெறுகிறது…",
"The shop didn't load.": "கடை ஏற்றப்படவில்லை.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "உங்கள் வீரருக்கு அணிய வேண்டியவை, Horizon இல் விளையாடும் அனைவருக்கும் தெரியும்.",
"Free for founders": "நிறுவனர்களுக்கு இலவசம்",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "முதலில் இங்கே இருந்த வீரர்களுக்காக. இலவசமாகப் பெறலாம்; பெற்றதும் அது எப்போதும் உங்களுடையது.",
"Finish the free checkout in your browser. The set lands here a moment later.": "உங்கள் உலாவியில் இலவச செக்அவுட்டை முடிக்கவும். சிறிது நேரத்தில் செட் இங்கே வந்து சேரும்.",
"{n} items": "{n} பொருட்கள்",
"Nothing is on sale right now.": "இப்போது எதுவும் விற்பனையில் இல்லை.",
"Your basket": "உங்கள் கூடை",
"Your basket is empty.": "உங்கள் கூடை காலியாக உள்ளது.",
"Add to basket": "கூடையில் சேர்",
"Total": "மொத்தம்",
"This is a gift": "இது ஒரு பரிசு",
"Your friend's Minecraft name": "உங்கள் நண்பரின் Minecraft பெயர்",
"Find": "தேடு",
"For {name}": "{name} க்கு",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "வாங்கும் முன் பணம் செலுத்துபவரிடம் கேளுங்கள். எந்தக் காரணத்திற்காகவும் 14 நாட்களுக்குள் பணம் திருப்பித் தரப்படும்.",
"Pay {price} in your browser": "உலாவியில் {price} செலுத்து",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle கட்டணம் உங்கள் உலாவியில் திறக்கும். லாஞ்சரில் எதுவும் வசூலிக்கப்படாது.",
"US sales tax is added where a state charges it.": "மாநிலம் வசூலிக்கும் இடத்தில் அமெரிக்க விற்பனை வரி சேர்க்கப்படும்.",
"VAT included where it applies.": "பொருந்தும் இடத்தில் VAT சேர்க்கப்பட்டுள்ளது.",
"In a set in your basket": "உங்கள் கூடையில் உள்ள தொகுப்பில்",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "உலாவியில் கட்டணத்தை முடியுங்கள். உங்கள் பொருட்கள் சிறிது நேரத்தில் அலமாரிக்கு வரும்.",
"{name} was left out: made for another Horizon version": "{name} விடப்பட்டது: Horizon இன் வேறு பதிப்புக்காக உருவாக்கப்பட்டது",
"{name} was left out: clashes with {other}": "{name} விடப்பட்டது: {other} உடன் முரண்படுகிறது",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "தனிப்பட்ட சாளரத்தில் திற",
"Open this link in a private window to pick another account.": "வேறொரு கணக்கைத் தேர்ந்தெடுக்க, இந்த இணைப்பைத் தனிப்பட்ட சாளரத்தில் திறக்கவும்.",
"Use a different Microsoft account": "வேறு Microsoft கணக்கைப் பயன்படுத்தவும்"
"Use a different Microsoft account": "வேறு Microsoft கணக்கைப் பயன்படுத்தவும்",
"Buy": "வாங்கு",
"Gift": "பரிசளி",
"Looks": "தோற்றங்கள்"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "รับชุดผู้เล่นรุ่นแรก",
"Claiming…": "กำลังรับ…",
"The shop didn't load.": "โหลดร้านค้าไม่สำเร็จ",
"Things to wear for your player, seen by everyone who plays on Horizon.": "ของสวมใส่สำหรับตัวละครของคุณ ทุกคนที่เล่นบน Horizon จะเห็น",
"Free for founders": "ฟรีสำหรับผู้เล่นรุ่นแรก",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "สำหรับผู้เล่นที่อยู่ที่นี่มาก่อน รับได้ฟรี เมื่อรับแล้วจะเป็นของคุณตลอดไป",
"Finish the free checkout in your browser. The set lands here a moment later.": "ชำระเงินแบบฟรีให้เสร็จในเบราว์เซอร์ของคุณ ชุดจะมาปรากฏที่นี่อีกสักครู่",
"{n} items": "{n} ชิ้น",
"Nothing is on sale right now.": "ตอนนี้ไม่มีสินค้าวางขาย",
"Your basket": "ตะกร้าของคุณ",
"Your basket is empty.": "ตะกร้าของคุณว่างอยู่",
"Add to basket": "ใส่ตะกร้า",
"Total": "รวม",
"This is a gift": "ซื้อเป็นของขวัญ",
"Your friend's Minecraft name": "ชื่อ Minecraft ของเพื่อนคุณ",
"Find": "ค้นหา",
"For {name}": "สำหรับ {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "ถามคนที่จ่ายเงินก่อนซื้อ คืนเงินได้ภายใน 14 วันไม่ว่าด้วยเหตุผลใด",
"Pay {price} in your browser": "จ่าย {price} ในเบราว์เซอร์",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "หน้าชำระเงินของ Paddle จะเปิดในเบราว์เซอร์ ลันเชอร์ไม่เรียกเก็บเงินใด ๆ",
"US sales tax is added where a state charges it.": "เพิ่มภาษีการขายของสหรัฐฯ ในรัฐที่เรียกเก็บ",
"VAT included where it applies.": "รวม VAT แล้วในกรณีที่ต้องเสีย",
"In a set in your basket": "อยู่ในชุดที่อยู่ในตะกร้าแล้ว",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "ชำระเงินให้เสร็จในเบราว์เซอร์ ไอเท็มจะเข้าตู้เสื้อผ้าในอีกสักครู่",
"{name} was left out: made for another Horizon version": "ไม่ได้รวม {name}: สร้างมาสำหรับ Horizon เวอร์ชันอื่น",
"{name} was left out: clashes with {other}": "ไม่ได้รวม {name}: ขัดแย้งกับ {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "เปิดในหน้าต่างส่วนตัว",
"Open this link in a private window to pick another account.": "เปิดลิงก์นี้ในหน้าต่างส่วนตัวเพื่อเลือกบัญชีอื่น",
"Use a different Microsoft account": "ใช้บัญชี Microsoft อื่น"
"Use a different Microsoft account": "ใช้บัญชี Microsoft อื่น",
"Buy": "ซื้อ",
"Gift": "ซื้อเป็นของขวัญ",
"Looks": "ลุค"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Kurucu setini al",
"Claiming…": "Alınıyor…",
"The shop didn't load.": "Mağaza yüklenemedi.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Oyuncunun giyebileceği şeyler; Horizon'da oynayan herkes görür.",
"Free for founders": "Kurucular için ücretsiz",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "İlk gelen oyuncular için. Ücretsiz; aldıktan sonra hep senin.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Ücretsiz ödemeyi tarayıcında tamamla. Set birazdan burada belirir.",
"{n} items": "{n} eşya",
"Nothing is on sale right now.": "Şu anda satışta bir şey yok.",
"Your basket": "Sepetin",
"Your basket is empty.": "Sepetin boş.",
"Add to basket": "Sepete ekle",
"Total": "Toplam",
"This is a gift": "Bu bir hediye",
"Your friend's Minecraft name": "Arkadaşının Minecraft adı",
"Find": "Bul",
"For {name}": "{name} için",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Satın almadan önce ödeyecek kişiye sor. Herhangi bir nedenle 14 gün içinde para iadesi.",
"Pay {price} in your browser": "{price} tutarını tarayıcıda öde",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle ödemesi tarayıcında açılır. Başlatıcıda hiçbir ücret alınmaz.",
"US sales tax is added where a state charges it.": "ABD satış vergisi, bir eyaletin aldığı yerde eklenir.",
"VAT included where it applies.": "KDV geçerli olduğu yerde dahildir.",
"In a set in your basket": "Sepetindeki bir sette",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Ödemeyi tarayıcıda tamamla. Eşyaların biraz sonra Gardıroba gelir.",
"{name} was left out: made for another Horizon version": "{name} dışarıda bırakıldı: başka bir Horizon sürümü için yapılmış",
"{name} was left out: clashes with {other}": "{name} dışarıda bırakıldı: {other} ile çakışıyor",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Gizli pencerede aç",
"Open this link in a private window to pick another account.": "Başka bir hesap seçmek için bu bağlantıyı gizli pencerede açın.",
"Use a different Microsoft account": "Farklı bir Microsoft hesabı kullan"
"Use a different Microsoft account": "Farklı bir Microsoft hesabı kullan",
"Buy": "Satın al",
"Gift": "Hediye et",
"Looks": "Görünümler"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Оештыручы җыелмасын таләп итегез",
"Claiming…": "Алына…",
"The shop didn't load.": "Кибет йөкләнмәде.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Уенчыгыз өчен киемнәр, Horizon'да уйнаган һәркемгә күренә.",
"Free for founders": "Нигез салучылар өчен бушлай",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Монда беренче булган уенчылар өчен. Бушлай алып була; алгач, ул мәңге үзегезнеке.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Бушлай түләүне браузерда тәмамлагыз. Җыелма бераздан монда барлыкка киләчәк.",
"{n} items": "{n} әйбер",
"Nothing is on sale right now.": "Хәзер бернәрсә дә сатылмый.",
"Your basket": "Сезнең кәрзин",
"Your basket is empty.": "Кәрзин буш.",
"Add to basket": "Кәрзингә өстәү",
"Total": "Барысы",
"This is a gift": "Бу бүләк",
"Your friend's Minecraft name": "Дустыгызның Minecraft исеме",
"Find": "Табу",
"For {name}": "{name} өчен",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Сатып алганчы кем түләячәген сорагыз. Теләсә нинди сәбәп белән 14 көн эчендә акча кайтарыла.",
"Pay {price} in your browser": "{price} браузерда түләү",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle түләве браузерда ачыла. Лаунчерда бернәрсә дә алынмый.",
"US sales tax is added where a state charges it.": "АКШ сату салымы штат алган урында өстәлә.",
"VAT included where it applies.": "КӨС кулланылган урында кертелгән.",
"In a set in your basket": "Кәрзиндәге җыелмада",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Түләүне браузерда тәмамлагыз. Әйберләрегез Гардеробка бераздан килә.",
"{name} was left out: made for another Horizon version": "{name} төшереп калдырылды: Horizon-ның башка версиясе өчен ясалган",
"{name} was left out: clashes with {other}": "{name} төшереп калдырылды: {other} белән бәрелешә",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Шәхси тәрәзәдә ачу",
"Open this link in a private window to pick another account.": "Икенче счет сайлау өчен бу сылтаманы шәхси тәрәзәдә ачыгыз.",
"Use a different Microsoft account": "Башка Microsoft счетын куллану"
"Use a different Microsoft account": "Башка Microsoft счетын куллану",
"Buy": "Сатып алу",
"Gift": "Бүләк итү",
"Looks": "Образлар"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Отримати набір засновника",
"Claiming…": "Отримання…",
"The shop didn't load.": "Крамниця не завантажилася.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Речі для твого гравця, які бачать усі, хто грає на Horizon.",
"Free for founders": "Безкоштовно для засновників",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Для гравців, які були тут першими. Безкоштовно; отримавши, залишиш собі назавжди.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Заверши безкоштовну оплату в браузері. Набір з'явиться тут за мить.",
"{n} items": "{n} предметів",
"Nothing is on sale right now.": "Зараз нічого не продається.",
"Your basket": "Ваш кошик",
"Your basket is empty.": "Ваш кошик порожній.",
"Add to basket": "До кошика",
"Total": "Разом",
"This is a gift": "Це подарунок",
"Your friend's Minecraft name": "Ім'я друга в Minecraft",
"Find": "Знайти",
"For {name}": "Для {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Перед купівлею спитайте того, хто платить. Повернення коштів протягом 14 днів з будь-якої причини.",
"Pay {price} in your browser": "Сплатити {price} у браузері",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Оплата Paddle відкриється в браузері. У лаунчері нічого не списується.",
"US sales tax is added where a state charges it.": "Податок з продажів США додається там, де його бере штат.",
"VAT included where it applies.": "ПДВ включено там, де він застосовується.",
"In a set in your basket": "У наборі у вашому кошику",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Завершіть оплату в браузері. Предмети з'являться в Гардеробі за мить.",
"{name} was left out: made for another Horizon version": "{name} пропущено: зроблено для іншої версії Horizon",
"{name} was left out: clashes with {other}": "{name} пропущено: конфліктує з {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Відкрити в анонімному вікні",
"Open this link in a private window to pick another account.": "Відкрийте це посилання в анонімному вікні, щоб вибрати інший обліковий запис.",
"Use a different Microsoft account": "Використати інший обліковий запис Microsoft"
"Use a different Microsoft account": "Використати інший обліковий запис Microsoft",
"Buy": "Купити",
"Gift": "Подарувати",
"Looks": "Образи"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "بانی سیٹ کا دعوی کریں۔",
"Claiming…": "حاصل کیا جا رہا ہے…",
"The shop didn't load.": "دکان لوڈ نہیں ہوئی۔",
"Things to wear for your player, seen by everyone who plays on Horizon.": "آپ کے کھلاڑی کے پہننے کی چیزیں، جو Horizon پر کھیلنے والے ہر شخص کو نظر آتی ہیں۔",
"Free for founders": "بانیوں کے لیے مفت",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "ان کھلاڑیوں کے لیے جو یہاں سب سے پہلے تھے۔ مفت حاصل کریں؛ ایک بار حاصل کرنے کے بعد یہ ہمیشہ آپ کا ہے۔",
"Finish the free checkout in your browser. The set lands here a moment later.": "اپنے براؤزر میں مفت چیک آؤٹ مکمل کریں۔ سیٹ کچھ دیر بعد یہاں آ جائے گا۔",
"{n} items": "{n} چیزیں",
"Nothing is on sale right now.": "ابھی کچھ بھی فروخت کے لیے نہیں ہے۔",
"Your basket": "آپ کی ٹوکری",
"Your basket is empty.": "آپ کی ٹوکری خالی ہے۔",
"Add to basket": "ٹوکری میں ڈالیں",
"Total": "کل",
"This is a gift": "یہ تحفہ ہے",
"Your friend's Minecraft name": "آپ کے دوست کا Minecraft نام",
"Find": "تلاش کریں",
"For {name}": "{name} کے لیے",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "خریدنے سے پہلے ادائیگی کرنے والے سے پوچھ لیں۔ کسی بھی وجہ سے 14 دن میں رقم واپسی۔",
"Pay {price} in your browser": "براؤزر میں {price} ادا کریں",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle کی ادائیگی آپ کے براؤزر میں کھلتی ہے۔ لانچر میں کچھ نہیں کاٹا جاتا۔",
"US sales tax is added where a state charges it.": "جہاں ریاست لیتی ہے وہاں امریکی سیلز ٹیکس شامل کیا جاتا ہے۔",
"VAT included where it applies.": "جہاں لاگو ہو وہاں VAT شامل ہے۔",
"In a set in your basket": "آپ کی ٹوکری کے ایک سیٹ میں",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "براؤزر میں ادائیگی مکمل کریں۔ آپ کی چیزیں تھوڑی دیر میں الماری میں آ جائیں گی۔",
"{name} was left out: made for another Horizon version": "{name} چھوڑ دیا گیا: Horizon کے کسی اور ورژن کے لیے بنا ہے",
"{name} was left out: clashes with {other}": "{name} چھوڑ دیا گیا: {other} سے ٹکراتا ہے",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "نجی ونڈو میں کھولیں۔",
"Open this link in a private window to pick another account.": "دوسرا اکاؤنٹ منتخب کرنے کے لیے اس لنک کو نجی ونڈو میں کھولیں۔",
"Use a different Microsoft account": "دوسرا Microsoft اکاؤنٹ استعمال کریں۔"
"Use a different Microsoft account": "دوسرا Microsoft اکاؤنٹ استعمال کریں۔",
"Buy": "خریدیں",
"Gift": "تحفہ دیں",
"Looks": "لُکس"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Ta'sischilar to'plamiga da'vo qiling",
"Claiming…": "Olinmoqda…",
"The shop didn't load.": "Do‘kon yuklanmadi.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "O‘yinchingiz uchun kiyimlar, Horizon’da o‘ynayotgan hamma ko‘radi.",
"Free for founders": "Asoschilar uchun bepul",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Bu yerda birinchi bo‘lgan o‘yinchilar uchun. Bepul olish mumkin; olganingizdan so‘ng u abadiy sizniki.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Bepul to‘lovni brauzeringizda yakunlang. To‘plam birozdan so‘ng shu yerda paydo bo‘ladi.",
"{n} items": "{n} ta buyum",
"Nothing is on sale right now.": "Hozir hech narsa sotilmayapti.",
"Your basket": "Savatingiz",
"Your basket is empty.": "Savatingiz bo'sh.",
"Add to basket": "Savatga qo'shish",
"Total": "Jami",
"This is a gift": "Bu sovg'a",
"Your friend's Minecraft name": "Do'stingizning Minecraft nomi",
"Find": "Topish",
"For {name}": "{name} uchun",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Sotib olishdan oldin kim to'lashini so'rang. Har qanday sabab bilan 14 kun ichida pul qaytariladi.",
"Pay {price} in your browser": "{price} ni brauzerda to'lash",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Paddle to'lovi brauzeringizda ochiladi. Launcherda hech narsa yechilmaydi.",
"US sales tax is added where a state charges it.": "AQSh savdo solig'i shtat oladigan joyda qo'shiladi.",
"VAT included where it applies.": "QQS amal qiladigan joyda kiritilgan.",
"In a set in your basket": "Savatingizdagi to'plamda",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "To'lovni brauzerda tugating. Buyumlaringiz birozdan keyin Garderobga keladi.",
"{name} was left out: made for another Horizon version": "{name} chiqarib tashlandi: Horizonning boshqa versiyasi uchun yaratilgan",
"{name} was left out: clashes with {other}": "{name} chiqarib tashlandi: {other} bilan to'qnashadi",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Maxfiy oynada ochish",
"Open this link in a private window to pick another account.": "Boshqa hisobni tanlash uchun bu havolani maxfiy oynada oching.",
"Use a different Microsoft account": "Boshqa Microsoft hisob qaydnomasidan foydalanish"
"Use a different Microsoft account": "Boshqa Microsoft hisob qaydnomasidan foydalanish",
"Buy": "Sotib olish",
"Gift": "Sovgʻa qilish",
"Looks": "Obrazlar"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Rivendica el set fondador",
"Claiming…": "Ritiro in corso…",
"The shop didn't load.": "El negozio no’l se ga mìa cargà.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Roba da vestir par el to zogador, vista da chi che zoga so Horizon.",
"Free for founders": "Gratis par i fondadori",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Par i zogadori che gera chì par primi. Gratis da ritirar; una volta ritirà, el xe to par senpre.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Fenisi el pagamento gratis nel to browser. El set el riva qua un momento dopo.",
"{n} items": "{n} ogeti",
"Nothing is on sale right now.": "Par desso no ghe xe gnente in vendita.",
"Your basket": "El to caveo",
"Your basket is empty.": "El to caveo el xe vodo.",
"Add to basket": "Zonta al caveo",
"Total": "Totale",
"This is a gift": "El xe un regalo",
"Your friend's Minecraft name": "El nome Minecraft del to amigo",
"Find": "Cata",
"For {name}": "Par {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Domanda a chi che paga prima de comprar. Rimborso in 14 dì par qualsiasi motivo.",
"Pay {price} in your browser": "Paga {price} inte'l browser",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "El pagamento de Paddle el se verze inte'l to browser. Inte'l launcher no se paga gnente.",
"US sales tax is added where a state charges it.": "La tasa so le vendite dei USA la se zonta onde che un stato la ciama.",
"VAT included where it applies.": "IVA inclusa onde che la se aplica.",
"In a set in your basket": "In un set inte'l to caveo",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Finisi el pagamento inte'l browser. I to ogeti i riva inte'l Guardaroba un momento dopo.",
"{name} was left out: made for another Horizon version": "{name} el xe stà lasà fora: fato par n'altra version de Horizon",
"{name} was left out: clashes with {other}": "{name} el xe stà lasà fora: el va in conflito co {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Vèrxi in na finestra privada",
"Open this link in a private window to pick another account.": "Vèrxi sto link in na finestra privada par scoeger on altro conto.",
"Use a different Microsoft account": "Dòpara on altro conto Microsoft"
"Use a different Microsoft account": "Dòpara on altro conto Microsoft",
"Buy": "Cronpa",
"Gift": "Regała",
"Looks": "Stiłi"
}
+4 -10
View File
@@ -1194,26 +1194,17 @@
"Claim the founder set": "Yêu cầu bộ người sáng lập",
"Claiming…": "Đang nhận…",
"The shop didn't load.": "Không tải được cửa hàng.",
"Things to wear for your player, seen by everyone who plays on Horizon.": "Đồ để mặc cho người chơi của bạn, mọi người chơi trên Horizon đều thấy.",
"Free for founders": "Miễn phí cho người sáng lập",
"For the players who were here first. Free to claim; once claimed, it's yours to keep.": "Dành cho những người chơi có mặt từ đầu. Nhận miễn phí; nhận rồi thì mãi là của bạn.",
"Finish the free checkout in your browser. The set lands here a moment later.": "Hãy hoàn tất bước thanh toán miễn phí trong trình duyệt. Bộ sẽ xuất hiện ở đây ngay sau đó.",
"{n} items": "{n} món",
"Nothing is on sale right now.": "Hiện không có gì đang bán.",
"Your basket": "Giỏ của bạn",
"Your basket is empty.": "Giỏ của bạn đang trống.",
"Add to basket": "Thêm vào giỏ",
"Total": "Tổng",
"This is a gift": "Đây là quà tặng",
"Your friend's Minecraft name": "Tên Minecraft của bạn bè",
"Find": "Tìm",
"For {name}": "Cho {name}",
"Ask whoever pays before you buy. Refunds within 14 days for any reason.": "Hãy hỏi người trả tiền trước khi mua. Hoàn tiền trong 14 ngày vì bất kỳ lý do nào.",
"Pay {price} in your browser": "Trả {price} trong trình duyệt",
"Paddle's checkout opens in your browser. Nothing is charged in the launcher.": "Thanh toán Paddle mở trong trình duyệt của bạn. Trình khởi chạy không trừ tiền gì.",
"US sales tax is added where a state charges it.": "Thuế bán hàng Hoa Kỳ được cộng thêm ở nơi tiểu bang thu.",
"VAT included where it applies.": "Đã gồm VAT ở nơi áp dụng.",
"In a set in your basket": "Nằm trong một bộ trong giỏ của bạn",
"Finish paying in your browser. Your items reach the Wardrobe a moment later.": "Hoàn tất thanh toán trong trình duyệt. Vật phẩm sẽ vào Tủ đồ sau giây lát.",
"{name} was left out: made for another Horizon version": "Đã bỏ qua {name}: được làm cho phiên bản Horizon khác",
"{name} was left out: clashes with {other}": "Đã bỏ qua {name}: xung đột với {other}",
@@ -1256,5 +1247,8 @@
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
"Open in private window": "Mở trong cửa sổ ẩn danh",
"Open this link in a private window to pick another account.": "Mở liên kết này trong cửa sổ ẩn danh để chọn tài khoản khác.",
"Use a different Microsoft account": "Dùng tài khoản Microsoft khác"
"Use a different Microsoft account": "Dùng tài khoản Microsoft khác",
"Buy": "Mua",
"Gift": "Tặng",
"Looks": "Phong cách"
}
Loaded 100 of 124 files, more files were not shown because too many files have changed in this diff. Show more