mirror of
https://github.com/horizon-rust/horizon.git
synced 2026-11-11 02:21:38 -10:00
Compare commits
46
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fdc87aecdb | ||
|
|
5578753b58 | ||
|
|
8c612bc687 | ||
|
|
9debdf26d4 | ||
|
|
d7ae75b441 | ||
|
|
bc017eec9b | ||
|
|
b19634003c | ||
|
|
8711aabd75 | ||
|
|
76a5bd8a22 | ||
|
|
453d8b89ce | ||
|
|
845132a56b | ||
|
|
051e3dd546 | ||
|
|
ab5dfae985 | ||
|
|
19a6e9b81b | ||
|
|
de118feb4e | ||
|
|
e508e7919f | ||
|
|
f222616f7e | ||
|
|
0f89fd7e00 | ||
|
|
0804e2219a | ||
|
|
8a9a6d5e3f | ||
|
|
d17e8fa343 | ||
|
|
6f374959b7 | ||
|
|
1206818cde | ||
|
|
12157a2d67 | ||
|
|
9b89ff00ee | ||
|
|
2e13076a93 | ||
|
|
9974322832 | ||
|
|
b21f0c92f2 | ||
|
|
31545199d4 | ||
|
|
9a8781468e | ||
|
|
1117b98d15 | ||
|
|
8fe0e40d68 | ||
|
|
f68c335eb2 | ||
|
|
12dad67f8c | ||
|
|
922f00f52e | ||
|
|
200615a30a | ||
|
|
1ba0db3c3c | ||
|
|
0ce0e67282 | ||
|
|
0f8cf58043 | ||
|
|
dd93b0164a | ||
|
|
7622c02706 | ||
|
|
ac02477732 | ||
|
|
0748416e9e | ||
|
|
0fe1d0e15d | ||
|
|
3f38b2d0bd | ||
|
|
e08c7a3ee0 |
No files matched your search
@@ -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)) |
|
||||
|
||||
+23
-2356
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"));
|
||||
}
|
||||
@@ -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(())
|
||||
}
|
||||
}
|
||||
@@ -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];
|
||||
|
||||
@@ -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
@@ -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.
|
||||
Generated
+1
@@ -2696,6 +2696,7 @@ dependencies = [
|
||||
"flate2",
|
||||
"futures-lite",
|
||||
"getrandom 0.3.4",
|
||||
"glam",
|
||||
"gpui-fast",
|
||||
"gpui-fast-platform",
|
||||
"horizon-bench",
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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"
|
||||
}
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
Reference in new issue
Block a user