This commit is contained in:
JannisX11 2019-04-12 18:44:18 +02:00
parent 46e5f39312
commit fd145b7118
38 changed files with 1338 additions and 873 deletions

View File

@ -90,80 +90,83 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-sketchfab:before {
content: "\e91a";
}
.icon-blockbench_file:before {
content: "\e900";
content: "\e900";
}
.icon-vertexsnap:before {
content: "\e901";
content: "\e901";
}
.icon-create_bitmap:before {
content: "\e902";
content: "\e902";
}
.icon-objects:before {
content: "\e903";
content: "\e903";
}
.icon-bow:before {
content: "\e904";
content: "\e904";
}
.icon-bb_interface:before {
content: "\e905";
content: "\e905";
}
.icon-blockbench:before {
content: "\e906";
content: "\e906";
}
.icon-x11:before {
content: "\e907";
content: "\e907";
}
.icon-baby_zombie:before {
content: "\e908";
content: "\e908";
}
.icon-armor_stand:before {
content: "\e909";
content: "\e909";
}
.icon-armor_stand_small:before {
content: "\e90a";
content: "\e90a";
}
.icon-ground:before {
content: "\e90b";
content: "\e90b";
}
.icon-hud:before {
content: "\e90c";
content: "\e90c";
}
.icon-inventory_full:before {
content: "\e90d";
content: "\e90d";
}
.icon-inventory_nine:before {
content: "\e90e";
content: "\e90e";
}
.icon-inventory_single:before {
content: "\e90f";
content: "\e90f";
}
.icon-player_head:before {
content: "\e910";
content: "\e910";
}
.icon-zombie:before {
content: "\e911";
content: "\e911";
}
.icon-blockbench_inverted:before {
content: "\e912";
content: "\e912";
}
.icon-optifine_file:before {
content: "\e913";
content: "\e913";
}
.icon-saved:before {
content: "\e914";
content: "\e914";
}
.icon-player:before {
content: "\e915";
content: "\e915";
}
.icon-mirror_x:before {
content: "\e916";
content: "\e916";
}
.icon-mirror_y:before {
content: "\e917";
content: "\e917";
}
.icon-mirror_z:before {
content: "\e918";
content: "\e918";
}
.material-icons {
@ -257,6 +260,7 @@
}
hr {
border-top: 1px solid var(--color-dark);
margin: 12px 0;
}
h2 {
font-weight: lighter;
@ -312,6 +316,14 @@
background: var(--color-accent);
color: var(--color-text_acc) !important;
}
button.minor {
background: transparent;
border: none;
text-decoration: underline;
}
button.minor:hover {
color: var(--color-light) !important;
}
select {
-webkit-appearance: none;
appearance: none;
@ -644,6 +656,7 @@
display: none;
position: fixed;
width: 540px;
min-width: 370px;
top: 0;
background-color: var(--color-ui);
border: 1px solid var(--color-border);
@ -907,6 +920,7 @@
}
.bar_select select {
padding-right: 24px;
width: 100%;
}
.bar_select::before {
content: "\23F7";
@ -919,6 +933,7 @@
top: 3px;
}
.half {
display: inline-block;
width: calc(50% - 4px);
}
.tooltip {
@ -946,7 +961,7 @@
/*Layout*/
body {
display: grid;
grid-template-columns: 338px auto 300px;
grid-template-columns: 332px auto 300px;
grid-template-rows: 32px calc(100% - 58px) 26px;
grid-template-areas:
"header header header"
@ -1271,7 +1286,7 @@
}
.contextMenu.sub {
display: none;
margin-top: -31px;
margin-top: -29px;
}
.contextMenu li {
height: 35px;
@ -1766,12 +1781,13 @@
pointer-events: none;
z-index: 5;
}
#uv .bar.next_to_title {
.panel .bar.next_to_title {
margin-top: -32px;
position: relative;
float: right;
}
#uv .bar.next_to_title .tool {
.panel .bar.next_to_title > .tool {
float: right;
}
#uv_size .ui-resizable-se:before,
#uv_size .ui-resizable-sw:before,
@ -1809,6 +1825,63 @@
left: 1px;
}
/*Edit Session UI*/
#chat {
z-index: 16;
min-height: 180px;
flex-grow: 0;
}
#chat_history {
background: var(--color-back);
color: var(--color-text);
min-height: 81px;
max-height: 320px;
overflow-y: scroll;
padding: 5px;
font-size: 12pt;
}
#chat_history li {
padding-top: 1px;
padding-left: 7px;
}
#chat_history li b {
margin-left: -6px;
user-select: text;
color: var(--color-text);
background-color: var(--color-button);
border-radius: 4px;
padding: 1px 4px;
}
#chat_history li b.self {
color: var(--color-text_acc);
background-color: var(--color-accent);
}
#chat_history li span.text {
user-select: text;
}
#chat_history li span.timestamp {
opacity: 0.6;
font-size: 0.8em;
float: right;
}
#chat_bar {
height: 32px;
margin-bottom: 6px;
margin-top: 5px;
}
#chat_input {
padding: 5px;
width: calc(100% - 36px);
margin-left: 2px;
}
#chat_bar > i {
margin: 4px;
}
#chat_bar > i:hover {
color: var(--color-light);
}
/*Settings Dialog*/
#settings h3 > i {
margin-top: 5px;
@ -2365,6 +2438,7 @@
font-size: 0.92em;
background: var(--color-back);
border: 1px solid var(--color-border);
border-width: 1px 0;
}
#status_bar > div {
float: left;

Binary file not shown.

View File

@ -8,7 +8,7 @@
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="blockbench_file" d="M153.951-3.756c-6.924 3.711-15.624 12.415-19.336 19.336-6.424 11.98-6.752 32.89-6.752 432.985 0 462.85-1.225 438.583 22.867 453.355 12.015 7.368 16.624 7.482 263.436 6.546l251.208-0.951 22.165-10.36c18.602-8.695 36.802-24.947 113.223-101.118 96.976-96.661 106.64-109.318 114.023-149.335 2.48-13.445 3.464-126.019 2.807-321.565-0.948-282.802-1.408-301.488-7.672-311.049-3.666-5.595-11.98-13.411-18.473-17.37-11.486-7.003-21.461-7.2-368.357-7.211-338.278-0.018-357.199 0.332-369.14 6.737zM851.038 317.359l-0.948 265.062-234.454 3.695-24.145 24.146-2.143 236.3h-394.99v-552.748l72.961 10.216c40.13 5.618 75.455 9.527 78.503 8.685s96.143-14.098 206.879-29.454c232.847-32.294 222.415-30.531 220.937-37.369-1.148-5.311-165.014-86.457-174.591-86.457-4.366 0-331.198 88.883-387.14 105.285l-17.549 5.143v-217.563h657.624zM546.617 65.316c-1.188 3.097 4.069 22.244 11.687 42.548l13.847 36.916 17.38-2.306c16.039-2.128 19.916-0.868 50.307 16.341 18.112 10.256 33.502 17.033 34.2 15.060s-1.512-16.081-4.91-31.353c-5.94-26.691-6.847-28.191-23.434-38.727-22.35-14.194-84.362-44.104-91.44-44.104-3.013 0-6.449 2.534-7.637 5.632zM262.479 156.831c-1.518 3.952 25.756 69.258 28.822 69.020 6.3-0.488 70.529-18.396 72.286-20.153 1.307-1.306-0.908-8.484-4.922-15.948-6.883-12.798-9.62-14.259-47.938-25.589-46.687-13.805-45.815-13.671-48.248-7.326zM580.408 300.033c-107.688 13.925-199.218 25.387-203.401 25.477s-10.36 2.238-13.723 4.778c-5.617 4.24-4.772 10.35 10.363 74.808 9.063 38.604 17.784 75.179 19.378 81.275 2.51 9.606 5.098 11.443 19.409 13.782 34.411 5.626 425.888 29.017 429.259 25.649 2.094-2.094-6.209-51.557-21.418-127.634l-24.836-124.216-9.617 0.382c-5.289 0.211-97.723 11.776-205.41 25.7zM848.241 651.606c0 7.094-182.249 187.566-189.414 187.566-5.885 0-6.383-7.507-6.383-96.049v-96.049h97.897c74.907 0 97.897 1.064 97.897 4.535z" />
<glyph unicode="&#xe901;" glyph-name="vertexsnap" d="M349.649 829.823c-96.164-16.917-176.475-59.357-199.444-105.399-22.686-45.473 23.539-67.595 65.749-31.463 11.573 9.906 23.214 18.012 25.87 18.012s8.284 2.994 12.511 6.654c95.955 83.060 381.101 30.212 489.995-90.814 22.831-25.374 22.831-25.374-25.733-26.754-97.158-2.758-96.919-28.113 0.9-94.998 54.477-37.25 76.405-55.639 100.131-83.978 27.648-33.019 31.986-36.282 48.241-36.282 29.829 0 32.266 4.956 38.313 77.891 5.186 62.541 16.043 124.124 32.904 186.635 16.286 60.378-34.953 69.829-70.058 12.923-25.366-41.118-22.919-40.905-49.569-4.308-86.306 118.517-309.332 200.113-469.809 171.881zM35.272 623.72c-14.23-14.23-14.23-14.23-14.23-141.553 0-169.84-14.056-155.785 155.784-155.785s155.785-14.056 155.785 155.785c0 169.84 14.056 155.784-155.785 155.784-127.324 0-127.324 0-141.553-14.23zM707.091 297.546c-14.23-14.23-14.23-14.23-14.23-141.553 0-169.84-14.056-155.784 155.785-155.784s155.784-14.056 155.784 155.784c0 169.84 14.056 155.785-155.784 155.785-127.324 0-127.324 0-141.553-14.23z" />
<glyph unicode="&#xe901;" glyph-name="vertexsnap" d="M352.758 822.511c-94.322-16.593-173.095-58.22-195.625-103.381-22.252-44.602 23.088-66.301 64.49-30.86 11.351 9.716 22.769 17.667 25.375 17.667s8.125 2.937 12.271 6.527c94.117 81.469 373.803 29.633 480.612-89.075 22.394-24.888 22.394-24.888-25.24-26.242-95.297-2.705-95.063-27.575 0.883-93.179 53.434-36.537 74.942-54.574 98.213-82.37 27.119-32.387 31.373-35.587 47.317-35.587 29.258 0 31.648 4.861 37.579 76.399 5.087 61.343 15.736 121.747 32.274 183.061 15.974 59.222-34.284 68.492-68.716 12.676-24.88-40.331-22.48-40.122-48.62-4.226-84.653 116.247-303.408 196.281-460.812 168.589zM44.401 620.355c-13.957-13.957-13.957-13.957-13.957-138.842 0-166.588-13.787-152.802 152.801-152.802s152.802-13.787 152.802 152.802c0 166.588 13.787 152.801-152.802 152.801-124.886 0-124.886 0-138.842-13.957zM703.355 300.427c-13.957-13.957-13.957-13.957-13.957-138.842 0-166.588-13.787-152.801 152.802-152.801s152.801-13.787 152.801 152.801c0 166.588 13.787 152.802-152.801 152.802-124.886 0-124.886 0-138.842-13.957z" />
<glyph unicode="&#xe902;" glyph-name="create_bitmap" d="M233.975 795.371c-41.079 0-75.024-33.945-75.024-75.024v-553.202c0-41.079 33.945-75.024 75.024-75.024h556.032c41.079 0 75.024 33.945 75.024 75.024v553.202c0 41.079-33.945 75.024-75.024 75.024h-556.032zM728.208 550.872c31.861-0.066 58.699-5.78 77.775-11.178v-372.557c0-9.353-6.613-15.966-15.966-15.966h-556.032c-9.353 0-15.966 6.613-15.966 15.966v352.515c57.355-21.823 45.226-70.314 143.573-83.005 100.291-12.944 130.54 15.61 248.313 83.71 40.403 23.361 82.046 30.584 118.3 30.508zM616.108 419.361v-84.155h-84.155v-66.783h84.155v-84.155h66.872v84.155h84.155v66.783h-84.155v84.155h-66.872z" />
<glyph unicode="&#xe903;" glyph-name="objects" d="M405.375 850.625c-127.304-0.010-230.5-101.945-230.5-227.688 0-0.022 0-0.043 0-0.065v0.003c0.095-14.736 1.592-29.067 4.366-42.945l-0.241 1.445 128.875 50.875 175.75-91.75 113.125 208.625c-41.829 61.414-111.864 101.324-191.348 101.5h-0.027zM738.75 843.75l-65.375-127.625-0.125-0.5-155.625-286.75-214.5 112-167.75-66.25-93-38 2.875-322.375 257.375-121.625 243.25 141.375v170.875l164-108.625 288.5 192.25-259.625 455.25z" />
<glyph unicode="&#xe904;" glyph-name="bow" d="M35.553-29.24c-7.642 3.083-6.021 12.569 4.555 26.681 39.762 53.054 48.92 109.812 41.934 259.931-9.092 195.392 17.712 299.308 108.269 419.755l16.091 21.402-22.777 18.239c-12.528 10.032-28.615 23.732-35.748 30.446-15.222 14.326-15.034 14.429-19.587-10.825-8.701-48.272-36.488-35.113-45.118 21.367-2.847 18.629-11.631 49.997-19.519 69.707-20.487 51.185-12.617 58.915 43.919 43.134 16.070-4.486 42.751-10.936 59.289-14.334 59.696-12.263 65.502-22.743 23.093-41.68l-23.852-10.651 23.433-20.043c12.889-11.025 30.236-25.094 38.548-31.267l15.115-11.223 24.527 22.196c104.812 94.85 216.335 133.074 380.267 130.336 239.449-3.999 246.166-3.427 287.157 24.417 36.867 25.044 42.653 21.65 55.505-32.567 11.517-48.58-5.494-87.043-41.696-94.285-7.835-1.567-61.992-53.175-185.090-176.384l-174.014-174.167 40.202-38.579 104.503 3.775 55.215-39.504c64.41-46.082 65.569-43.35-20.196-47.582-79.336-3.915-70.911 6.254-68.577-82.78 1.813-69.153 1.423-75.324-4.461-70.83-5.425 4.142-78.61 65.619-90.43 75.964-2.086 1.827-6.092 29.94-8.901 62.475l-5.107 59.155-42.098 38.3-175.85-175.518c-142.782-142.514-177.562-179.314-184.956-195.704-19.076-42.291-109.432-77.193-153.649-59.351zM509.672 435.682c-21.641 18.212-105.2 90.781-158.726 137.85-62.738 55.171-56.863 52.53-69.371 31.187-46.704-79.693-64.276-167.878-70.532-353.948-2.298-68.36-5.276-128.804-6.615-134.316-1.602-6.589 52.343 44.655 157.417 149.541l159.853 159.564zM867.356 772.303c-0.464 0.362-22.496-2.702-48.958-6.81s-101.015-10.175-165.673-13.48c-182.26-9.32-222.996-18.596-296.424-67.508-13.787-9.184-24.613-17.926-24.056-19.426 1.567-4.226 94.394-87.537 97.536-87.537 1.531 0 19.23-15.007 39.331-33.348s49.128-43.642 64.504-56.224l27.956-22.876 153.315 153.276c84.323 84.303 152.934 153.572 152.47 153.934z" />
@ -32,4 +32,6 @@
<glyph unicode="&#xe916;" glyph-name="mirror_x" d="M860.39 84.204l-292.395 730.812-63.238-12.415 4.6-688.96 0.23-32.999zM486.244 802.596l-63.238 12.415-292.395-730.812 350.803-3.563 0.23 32.999zM419.443 629.438l-3.22-482.456-189.028 1.953z" />
<glyph unicode="&#xe917;" glyph-name="mirror_y" d="M858.931 812.516l-730.408-292.231 12.412-63.204 721.559 4.826-3.563 350.611zM140.935 438.578l-12.412-63.204 730.408-292.231 3.563 350.611-721.559 4.826zM313.998 371.809l482.188-3.216-1.953-188.924-480.235 192.14z" />
<glyph unicode="&#xe918;" glyph-name="mirror_z" d="M96.503 190.743l789.204 201.005 11.989 43.475-673.881-3.32zM904.588 447.952l35.107 43.475-571.447 201.005-133.945-241.161 30.634-0.159zM768.266 493.876l-447.93 2.212 72.206 129.948z" />
<glyph unicode="&#xe919;" d="M511.966 872.536c-235.058 0-425.542-190.533-425.542-425.557s190.484-425.582 425.542-425.582 425.582 190.559 425.582 425.582-190.523 425.557-425.582 425.557z" />
<glyph unicode="&#xe91a;" d="M511.966 904c-251.841 0-455.966-204.159-455.966-456s204.125-456 455.966-456 455.966 204.159 455.966 456-204.089 456-455.966 456zM472.328 176.651l-196.536 113.479v228.912l196.536-106.154zM507.346 466.75l-232.555 123.294 232.58 134.292 232.635-134.292zM740.104 289.688l-195.847-113.088v235.376l195.872 105.792z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Binary file not shown.

View File

@ -4,6 +4,7 @@
<title>Blockbench</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#3e90ff">
<meta name="robots" content="noindex">
<link rel="shortcut icon" href="favicon.png" type="image/x-icon" />
<link rel="stylesheet" href="css/w3.css">
<link rel="stylesheet" href="css/jquery-ui.min.css">
@ -19,7 +20,7 @@
<script>
if (typeof module === 'object') {window.module = module; module = undefined;}//jQuery Fix
const isApp = typeof require !== 'undefined';
const appVersion = '2.6.0';
const appVersion = '2.6.5';
</script>
<script src="lib/vue.min.js"></script>
<script src="lib/vue_sortable.js"></script>
@ -339,7 +340,7 @@
<div class="dialog_bar">
<button type="button" onclick="scaleAll(true)" class="confirm_btn tl">dialog.scale.confirm</button>
<button type="button" class="cancel_btn tl" onclick="cancelScaleAll()">dialog.cancel</button>
<button type="button" class="hidden tl" id="scale_overflow_btn" onclick="scaleAllSelectOverflow()">dialog.scale.select_overflow</button>
<button type="button" class="minor hidden tl" id="scale_overflow_btn" onclick="scaleAllSelectOverflow()">dialog.scale.select_overflow</button>
</div>
<div id="dialog_close_button" onclick="$('.dialog#'+open_dialog).find('.cancel_btn:not([disabled])').click()"><i class="material-icons">clear</i></div>
</div>
@ -432,7 +433,6 @@
<input v-model="Project.name" type="text" id="project_name" v-on:focusout="syncGeometry()" class="dark_bordered input_wide">
</div>
<div class="dialog_bar narrow">
<label for="project_parent" class="tl">dialog.project.parent</label>
</div>
@ -446,7 +446,6 @@
<input v-model="Project.ambientocclusion" type="checkbox" id="project_ambientocclusion">
</div>
<div class="dialog_bar narrow">
<label class="tl">dialog.project.texture_size</label>
</div>
@ -457,10 +456,9 @@
<input v-model="Project.texture_height" type="number" id="project_texsize_y" class="dark_bordered mediun_width" min="1" value="32">
</div>
<div class="dialog_bar">
<button type="button" class="large tl confirm_btn cancel_btn" onclick="saveProjectSettings();hideDialog();">dialog.confirm</button>
<button type="button" class="large tl" id="entity_mode_convert" onclick="entityMode.convert()">dialog.project.to_entitymodel</button>
<button type="button" class="tl confirm_btn cancel_btn" onclick="saveProjectSettings();hideDialog();">dialog.confirm</button>
<button type="button" class="minor tl" id="entity_mode_convert" onclick="entityMode.convert()">dialog.project.to_entitymodel</button>
</div>
<div id="dialog_close_button" onclick="$('.dialog#'+open_dialog).find('.cancel_btn:not([disabled])').click()"><i class="material-icons">clear</i></div>
</div>
@ -472,6 +470,7 @@
<div class="tl tab" id="layout_settings" onclick="setSettingsTab('layout_settings')">dialog.settings.layout</div>
<div class="tl tab" id="credits" onclick="setSettingsTab('credits')">dialog.settings.about</div>
</div>
<div id="setting" class="tab_content">
<h2 class="tl i_b">dialog.settings.settings</h2>
<ul id="settingslist">
@ -514,6 +513,7 @@
</li>
</ul>
</div>
<div id="keybindings" class="hidden tab_content">
<h2 class="tl i_b">dialog.settings.keybinds</h2>
<div class="bar next_to_title" id="keybinds_title_bar"></div>
@ -537,6 +537,7 @@
</li>
</ul>
</div>
<div id="layout_settings" class="hidden tab_content">
<h2 class="tl i_b">dialog.settings.layout</h2>
<div class="bar next_to_title" id="layout_title_bar"></div>
@ -684,6 +685,7 @@
<a class="open-in-browser" href="https://stuk.github.io/jszip/">JSZip</a>
</p>
</div>
<div class="dialog_bar">
<button type="button" class="large confirm_btn cancel_btn tl" onclick="saveSettings()">dialog.close</button>
</div>
@ -743,7 +745,7 @@
{{ item.name }}
</li>
</ul>
<div class="small_text" v-if="actions[index]">{{ actions[index].description }}</div>
<div class="small_text" v-if="actions[index]">{{ Pressing.alt ? actions[index].keybind.label : actions[index].description }}</div>
</div>
</div>
@ -937,6 +939,20 @@
<vue-tree :option="option"></vue-tree>
</ul>
</div>
<div id="chat" class="panel grow">
<div class="bar next_to_title" id="chat_title_bar"></div>
<ul id="chat_history" v-if="expanded">
<li v-for="msg in history">
<b v-if="msg.showAuthor()" v-bind:class="{self: msg.self}">{{ msg.author }}:</b>
<span class="text" v-bind:style="{color: msg.hex || 'inherit'}">{{ msg.text }}</span>
<span class="timestamp">{{ msg.timestamp }}</span>
</li>
</ul>
<div id="chat_bar">
<input type="text" id="chat_input" class="dark_bordered f_left" maxlength="512">
<i class="material-icons" onclick="Chat.send()">send</i>
</div>
</div>
</div>
<div id="preview">
</div>

View File

@ -4,6 +4,7 @@
<title>Blockbench</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#3e90ff">
<meta name="robots" content="noindex">
<link rel="shortcut icon" href="favicon.png" type="image/x-icon" />
<link rel="stylesheet" href="css/w3.css">
<link rel="stylesheet" href="css/jquery-ui.min.css">
@ -19,7 +20,7 @@
<script>
if (typeof module === 'object') {window.module = module; module = undefined;}//jQuery Fix
const isApp = typeof require !== 'undefined';
const appVersion = '2.6.0';
const appVersion = '2.6.5';
</script>
<script src="lib/vue.min.js"></script>
<script src="lib/vue_sortable.js"></script>
@ -355,7 +356,7 @@
<div class="dialog_bar">
<button type="button" onclick="scaleAll(true)" class="confirm_btn tl">dialog.scale.confirm</button>
<button type="button" class="cancel_btn tl" onclick="cancelScaleAll()">dialog.cancel</button>
<button type="button" class="hidden tl" id="scale_overflow_btn" onclick="scaleAllSelectOverflow()">dialog.scale.select_overflow</button>
<button type="button" class="minor hidden tl" id="scale_overflow_btn" onclick="scaleAllSelectOverflow()">dialog.scale.select_overflow</button>
</div>
<div id="dialog_close_button" onclick="$('.dialog#'+open_dialog).find('.cancel_btn:not([disabled])').click()"><i class="material-icons">clear</i></div>
</div>
@ -448,7 +449,6 @@
<input v-model="Project.name" type="text" id="project_name" v-on:focusout="syncGeometry()" class="dark_bordered input_wide">
</div>
<div class="dialog_bar narrow">
<label for="project_parent" class="tl">dialog.project.parent</label>
</div>
@ -462,7 +462,6 @@
<input v-model="Project.ambientocclusion" type="checkbox" id="project_ambientocclusion">
</div>
<div class="dialog_bar narrow">
<label class="tl">dialog.project.texture_size</label>
</div>
@ -473,10 +472,9 @@
<input v-model="Project.texture_height" type="number" id="project_texsize_y" class="dark_bordered mediun_width" min="1" value="32">
</div>
<div class="dialog_bar">
<button type="button" class="large tl confirm_btn cancel_btn" onclick="saveProjectSettings();hideDialog();">dialog.confirm</button>
<button type="button" class="large tl" id="entity_mode_convert" onclick="entityMode.convert()">dialog.project.to_entitymodel</button>
<button type="button" class="tl confirm_btn cancel_btn" onclick="saveProjectSettings();hideDialog();">dialog.confirm</button>
<button type="button" class="minor tl" id="entity_mode_convert" onclick="entityMode.convert()">dialog.project.to_entitymodel</button>
</div>
<div id="dialog_close_button" onclick="$('.dialog#'+open_dialog).find('.cancel_btn:not([disabled])').click()"><i class="material-icons">clear</i></div>
</div>
@ -488,6 +486,7 @@
<div class="tl tab" id="layout_settings" onclick="setSettingsTab('layout_settings')">dialog.settings.layout</div>
<div class="tl tab" id="credits" onclick="setSettingsTab('credits')">dialog.settings.about</div>
</div>
<div id="setting" class="tab_content">
<h2 class="tl i_b">dialog.settings.settings</h2>
<ul id="settingslist">
@ -530,6 +529,7 @@
</li>
</ul>
</div>
<div id="keybindings" class="hidden tab_content">
<h2 class="tl i_b">dialog.settings.keybinds</h2>
<div class="bar next_to_title" id="keybinds_title_bar"></div>
@ -553,6 +553,7 @@
</li>
</ul>
</div>
<div id="layout_settings" class="hidden tab_content">
<h2 class="tl i_b">dialog.settings.layout</h2>
<div class="bar next_to_title" id="layout_title_bar"></div>
@ -700,6 +701,7 @@
<a class="open-in-browser" href="https://stuk.github.io/jszip/">JSZip</a>
</p>
</div>
<div class="dialog_bar">
<button type="button" class="large confirm_btn cancel_btn tl" onclick="saveSettings()">dialog.close</button>
</div>
@ -759,7 +761,7 @@
{{ item.name }}
</li>
</ul>
<div class="small_text" v-if="actions[index]">{{ actions[index].description }}</div>
<div class="small_text" v-if="actions[index]">{{ Pressing.alt ? actions[index].keybind.label : actions[index].description }}</div>
</div>
</div>
@ -953,6 +955,20 @@
<vue-tree :option="option"></vue-tree>
</ul>
</div>
<div id="chat" class="panel grow">
<div class="bar next_to_title" id="chat_title_bar"></div>
<ul id="chat_history" v-if="expanded">
<li v-for="msg in history">
<b v-if="msg.showAuthor()" v-bind:class="{self: msg.self}">{{ msg.author }}:</b>
<span class="text" v-bind:style="{color: msg.hex || 'inherit'}">{{ msg.text }}</span>
<span class="timestamp">{{ msg.timestamp }}</span>
</li>
</ul>
<div id="chat_bar">
<input type="text" id="chat_input" class="dark_bordered f_left" maxlength="512">
<i class="material-icons" onclick="Chat.send()">send</i>
</div>
</div>
</div>
<div id="preview">
</div>

View File

@ -1427,6 +1427,7 @@ const BARS = {
BarItems.load_plugin.toElement('#plugins_header_bar')
BarItems.uv_dialog.toElement('#uv_title_bar')
BarItems.uv_dialog_full.toElement('#uv_title_bar')
BarItems.toggle_chat.toElement('#chat_title_bar')
},
setupVue: function() {
BARS.list = new Vue({
@ -1607,6 +1608,10 @@ const ActionControl = {
handleKeys: function(e) {
var data = ActionControl.vue._data
if (e.altKey) {
ActionControl.vue.$forceUpdate()
}
if (e.which === 38) {
data.index--;
if (data.index < 0) {
@ -1992,6 +1997,8 @@ const MenuBar = {
'export_obj',
'upload_sketchfab'
]},
'export_bbmodel',
'export_asset_archive',
'save',
'_',
'settings_window',
@ -2045,17 +2052,6 @@ const MenuBar = {
]}
], () => (!display_mode && !Animator.open))
new BarMenu('filter', [
'plugins_window',
'_',
/*
plaster
optimize
sort by transparency
entity / player model / shape generator
*/
])
new BarMenu('display', [
'copy',
@ -2122,6 +2118,18 @@ const MenuBar = {
return presets;
}}
], () => display_mode)
new BarMenu('filter', [
'plugins_window',
'_',
/*
plaster
optimize
sort by transparency
entity / player model / shape generator
*/
])
new BarMenu('animation', [
'copy',

View File

@ -980,9 +980,7 @@ const Timeline = {
Timeline.dragging_marker = true;
let time = e.offsetX / Timeline.vue._data.size
Timeline.setTime(time)
if (Animator.selected) {
Animator.preview()
}
Animator.preview()
})
$(document).mousemove(e => {
if (Timeline.dragging_marker) {
@ -1054,9 +1052,7 @@ const Timeline = {
+ limitNumber(times[2]/100, 0, 99)
if (Math.abs(seconds-Timeline.second) > 1e-3 ) {
Timeline.setTime(seconds, true)
if (Animator.selected) {
Animator.preview()
}
Animator.preview()
}
})
@ -1088,12 +1084,10 @@ const Timeline = {
var id = $(ui.helper).attr('id')
var clicked = Timeline.vue._data.keyframes.findInArray('uuid', id)
if (clicked) {
if (clicked && !clicked.selected) {
clicked.select()
}
clicked.dragging = true;
var i = 0;
for (var i = 0; i < Timeline.vue._data.keyframes.length; i++) {
@ -1452,7 +1446,7 @@ BARS.defineActions(function() {
id: 'reset_keyframe',
icon: 'replay',
category: 'animation',
condition: () => Animator.open,
condition: () => Animator.open && Timeline.selected.length,
click: function () {
Undo.initEdit({keyframes: Timeline.selected, keep_saved: true})
Timeline.selected.forEach((kf) => {

View File

@ -598,17 +598,16 @@ function Dialog(settings) {
if (scope.form) {
for (var form_id in scope.form) {
var data = scope.form[form_id]
if (data && Condition(data.condition)) {
if (data === '_') {
jq_dialog.append('<hr />')
} else if (data && Condition(data.condition)) {
var bar = $('<div class="dialog_bar"></div>')
if (data.label) {
bar.append(`<label class="name_space_left" for="${form_id}">${tl(data.label)+(data.nocolon?'':':')}</label>`)
max_label_width = Math.max(getStringWidth(tl(data.label)), max_label_width)
}
/*
type: +text
label
placeholder
*/
switch (data.type) {
default:
bar.append(`<input class="dark_bordered half" type="text" id="${form_id}" value="${data.value||''}" placeholder="${data.placeholder||''}">`)
@ -616,8 +615,26 @@ function Dialog(settings) {
case 'textarea':
bar.append(`<textarea style="height: ${data.height||150}px;" id="${form_id}"></textarea>`)
break;
case 'select':
var el = $(`<div class="bar_select half"><select id="${form_id}"></select></div>`)
var sel = el.find('select')
for (var key in data.options) {
var name = tl(data.options[key])
sel.append(`<option id="${key}" ${data.default === key ? 'selected' : ''}>${name}</option>`)
}
bar.append(el)
break;
case 'text':
bar.append(`<p>${tl(data.text)}</p>`)
var regex = /\[(.+)\]\((.+\..+)\)/g;
var matches = data.text.match(regex)
if (matches) {
data.text = data.text.replace(regex, (m, label, url) => {
return `<a href="${url}" class="open-in-browser">${label}</a>`
})
} else {
data.text = tl(data.text)
}
bar.append(`<p>${data.text}</p>`)
bar.addClass('small_text')
break;
case 'number':
@ -683,23 +700,29 @@ function Dialog(settings) {
if (scope.form) {
for (var form_id in scope.form) {
var data = scope.form[form_id]
switch (data.type) {
default:
result[form_id] = jq_dialog.find('input#'+form_id).val()
break;
case 'text': break;
case 'textarea':
result[form_id] = jq_dialog.find('textarea#'+form_id).val()
break;
case 'number':
result[form_id] = parseFloat(jq_dialog.find('input#'+form_id).val())||0
break;
case 'color':
result[form_id] = data.colorpicker.get();
break;
case 'checkbox':
result[form_id] = jq_dialog.find('input#'+form_id).is(':checked')
break;
if (typeof data === 'object') {
switch (data.type) {
default:
result[form_id] = jq_dialog.find('input#'+form_id).val()
break;
case 'text':
break;
case 'textarea':
result[form_id] = jq_dialog.find('textarea#'+form_id).val()
break;
case 'select':
result[form_id] = jq_dialog.find('select#'+form_id+' > option:selected').attr('id')
break;
case 'number':
result[form_id] = Math.clamp(parseFloat(jq_dialog.find('input#'+form_id).val())||0, data.min, data.max)
break;
case 'color':
result[form_id] = data.colorpicker.get();
break;
case 'checkbox':
result[form_id] = jq_dialog.find('input#'+form_id).is(':checked')
break;
}
}
}
}
@ -726,6 +749,11 @@ function Dialog(settings) {
if (this.width) {
jq_dialog.css('width', this.width+'px')
}
jq_dialog.find('.open-in-browser').click((event) => {
event.preventDefault();
shell.openExternal(event.target.href);
return true;
});
open_dialog = scope.id
open_interface = scope
Prop.active_panel = 'dialog'

View File

@ -16,7 +16,7 @@ var dialog_win = null,
$(document).ready(function() {
//Setup
$('.open-in-browser').click((event) => {
$('.open-in-browser').on('click', (event) => {
event.preventDefault();
shell.openExternal(event.target.href);
return true;
@ -376,9 +376,14 @@ function findBedrockAnimation() {
var animation_path = Prop.file_path.split(osfs)
var index = animation_path.lastIndexOf('models')
animation_path.splice(index)
animation_path = [...animation_path, 'animations', pathToName(Prop.file_path)+'.json'].join(osfs)
if (fs.existsSync(animation_path)) {
Blockbench.read([animation_path], {}, (files) => {
var path1 = [...animation_path, 'animations', pathToName(Prop.file_path)+'.json'].join(osfs)
var path2 = [...animation_path, 'animations', pathToName(Prop.file_path).replace('.geo', '')+'.animation.json'].join(osfs)
if (fs.existsSync(path1)) {
Blockbench.read([path1], {}, (files) => {
Animator.loadFile(files[0])
})
} else if (fs.existsSync(path2)) {
Blockbench.read([path2], {}, (files) => {
Animator.loadFile(files[0])
})
}
@ -632,6 +637,7 @@ function closeBlockbenchWindow() {
preventClosing = false;
Blockbench.dispatchEvent('before_closing')
localStorage.removeItem('backup_model')
EditSession.quit()
if (!Blockbench.hasFlag('update_restart')) {
return currentwindow.close();

View File

@ -12,7 +12,11 @@ var open_dialog = false;
var open_interface = false;
var tex_version = 1;
var pe_list;
var holding_shift = false;
const Pressing = {
shift: false,
ctrl: false,
alt: false,
}
var main_uv;
const Prop = {
active_panel: 'preview',
@ -597,16 +601,23 @@ const Clipbench = {
cubes: [],
copy: function(event, cut) {
var p = Prop.active_panel
if (open_dialog == 'uv_dialog') {
var text = window.getSelection()+''
if (text) {
Clipbench.setText(text)
} else if (open_dialog == 'uv_dialog') {
uv_dialog.copy(event)
} else if (display_mode) {
DisplayMode.copy()
} else if (Animator.open) {
if (Timeline.selected.length) {
Clipbench.setKeyframes(Timeline.selected)
}
} else if (p == 'uv' || p == 'preview') {
main_uv.copy(event)
} else if (p == 'textures' && isApp) {
if (textures.selected) {
Clipbench.setTexture(textures.selected)

View File

@ -1716,7 +1716,7 @@ onVueSetup(function() {
if (channel === 'scale') {
var val = limitNumber(DisplayMode.slot.scale[axis], 0, 4)
DisplayMode.slot.scale[axis] = val;
if (holding_shift) {
if (Pressing.shift) {
DisplayMode.slot.scale[0] = val;
DisplayMode.slot.scale[1] = val;
DisplayMode.slot.scale[2] = val;

View File

@ -3,43 +3,54 @@ const EditSession = {
active: false,
hosting: false,
BBKey: '1h3sq3hoj6vfkh',
clients: {},
start: function() {
if (EditSession.active) return;
EditSession.hosting = true;
Prop.session = true;
EditSession.setState(true);
var peer = EditSession.peer = new Peer({key: '1h3sq3hoj6vfkh'});
EditSession.username = $('#edit_session_username').val()
peer.on('open', (token) => {
EditSession.hosting = true;
Prop.session = true;
EditSession.setState(true);
EditSession.username = $('#edit_session_username').val()
var client = EditSession.self = new EditSession.Client({
id: EditSession.peer.id,
name: EditSession.username,
hosting: true
})
$('#edit_session_token').val(token)
EditSession.token = token;
Clipbench.setText(token)
Blockbench.dispatchEvent('create_session', {peer, token})
})
peer.on('connection', (conn) => {
EditSession.initConnection(conn)
Prop.connections = Object.keys(peer.connections).length
console.log(tl('edit_session.joined', [conn.metadata.username]))
Blockbench.showQuickMessage(tl('edit_session.joined', [conn.metadata.username]))
//New Login
var model = buildBBModel({uuids: true, bitmaps: true, history: true})
conn.on('open', function() {
Blockbench.dispatchEvent('user_joins_session', {conn})
conn.send({
var client = new EditSession.Client({
id: conn.peer,
conn: conn,
name: conn.metadata.username,
hosting: false
})
Chat.processMessage({text: tl('edit_session.joined', [client.name]), color: 'green'})
Blockbench.showQuickMessage(tl('edit_session.joined', [client.name]))
//New Login
client.send({
type: 'chat_message',
data: {text: tl('edit_session.welcome', [EditSession.username]), color: 'yellow'}
})
var model = buildBBModel({uuids: true, bitmaps: true, history: true})
client.send({
type: 'init_model',
fromHost: EditSession.hosting,
sender: EditSession.peer.id,
data: model
})
})
conn.on('close', function() {
Blockbench.dispatchEvent('user_leaves_session', {conn})
Blockbench.showQuickMessage(tl('edit_session.left', [conn.metadata.username]))
delete peer.connections[conn.peer]
Prop.connections = Object.keys(peer.connections).length
})
})
},
join: function() {
@ -48,7 +59,7 @@ const EditSession = {
EditSession.hosting = false;
EditSession.peer = new Peer({key: '1h3sq3hoj6vfkh'});
var token = $('#edit_session_token').val()
var username = $('#edit_session_username').val()
EditSession.username = $('#edit_session_username').val()
if (!token || !EditSession._matchToken(token)) {
Blockbench.showMessageBox({
translateKey: 'invalid_session',
@ -60,16 +71,15 @@ const EditSession = {
}
EditSession.token = token;
var conn = EditSession.peer.connect(token, {metadata: {username: username}});
var conn = EditSession.peer.connect(token, {metadata: {username: EditSession.username}});
conn.on('error', (a, b) => {
conn.on('error', (e) => {
Blockbench.showMessageBox({
translateKey: 'invalid_session',
icon: 'cloud_off',
buttons: [tl('dialog.ok')],
}, result => {
showDialog('edit_sessions');
})
EditSession.quit()
})
conn.on('open', () => {
hideDialog()
@ -80,6 +90,8 @@ const EditSession = {
})
},
quit: function() {
if (!EditSession.active) return;
Blockbench.dispatchEvent('quit_session', {})
if (EditSession.hosting) {
EditSession.sendAll('command', 'quit_session')
@ -88,12 +100,12 @@ const EditSession = {
}
setTimeout(function() {
EditSession.setState(false)
Chat.history.purge()
EditSession.peer.destroy()
Prop.session = false;
Prop.connections = 0;
Blockbench.showQuickMessage('edit_session.quit_session', 1500)
}, 400)
},
setState: function(active) {
EditSession.active = active;
@ -110,6 +122,7 @@ const EditSession = {
$('#edit_session_copy_button .tooltip').text(tl('action.paste'))
$('#edit_session_token').val('')
}
updateInterface()
},
dialog: function() {
showDialog('edit_sessions');
@ -152,23 +165,22 @@ const EditSession = {
EditSession.sendAll('init_model', JSON.stringify(model))
}
},
initConnection: function(conn) {
conn.on('data', EditSession.receiveData)
},
sendAll: function(type, data) {
var tag = {type, data}
Blockbench.dispatchEvent('send_session_data', tag)
for (var key in EditSession.peer.connections) {
var conns = EditSession.peer.connections[key];
conns.forEach(conn => {
conn.send({
for (var id in EditSession.clients) {
var client = EditSession.clients[id];
if (client != EditSession.self) {
client.send({
type: tag.type,
fromHost: EditSession.hosting,
sender: EditSession.peer.id,
data: tag.data
});
})
})
}
}
if (Blockbench.hasFlag('log_session')) {
console.log('Sent Data:', type, data)
@ -208,26 +220,153 @@ const EditSession = {
if (tag.type === 'edit') {
Undo.remoteEdit(data)
} else if (tag.type === 'init_model') {
force = data.flag === 'force';
newProject(false, force)
loadBBModel(data)
} else if (tag.type === 'command') {
switch (data) {
case 'undo': Undo.undo(true); break;
case 'redo': Undo.redo(true); break;
case 'quit_session': EditSession.quit(); break;
}
} else if (tag.type === 'change_project_meta') {
for (var key in data) {
Project = data[key];
Project[key] = data[key];
}
} else if (tag.type === 'chat_input' && EditSession.hosting) {
Chat.processMessage(tag.data)
} else if (tag.type === 'chat_message') {
Chat.addMessage(tag.data)
}
},
updateClientCount: function() {
Prop.connections = Object.keys(EditSession.clients).length-1
},
_matchToken: function(token) {
return !!(token.length === 16 && token.match(/[a-z0-9]{16}/))
}
}
EditSession.Client = class {
constructor(data) {
var scope = this;
this.id = data.id;
this.hosting = data.hosting;
this.conn = data.conn;
this.name = data.name;
EditSession.clients[this.id] = this;
EditSession.updateClientCount()
if (this.conn) {
EditSession.initConnection(this.conn)
this.conn.on('close', () => {
scope.disconnect()
})
this.conn.on('error', (e) => {
scope.disconnect()
this.conn.close()
console.error(e)
})
Blockbench.dispatchEvent('user_joins_session', {conn: this.conn})
}
}
send(tag) {
this.conn.send(tag)
}
disconnect(e) {
Blockbench.dispatchEvent('user_leaves_session', {conn: this.conn})
delete EditSession.peer.connections[this.conn.peer];
delete EditSession.clients[this.id];
EditSession.updateClientCount();
Chat.processMessage({text: tl('edit_session.left', [this.name]), color: 'red'})
Blockbench.showQuickMessage(tl('edit_session.left', [this.name]))
}
}
const Chat = {
history: [],
expanded: true,
maxlength: 512,
toggle: function() {
this.expanded = !this.expanded;
BarItems.toggle_chat.setIcon( Chat.expanded ? 'keyboard_arrow_down' : 'keyboard_arrow_up' )
},
send: function(text) {
if (typeof text !== 'string') {
text = $('input#chat_input').val()
$('input#chat_input').val('')
}
if (!text) return;
Chat.processMessage({author: EditSession.username, text: text})
},
addMessage: function(message) {
if (!(message instanceof Chat.Message)) {
message = new Chat.Message(message)
}
Chat.history.push(message)
Vue.nextTick(() => {
$('#chat_history').scrollTop(10000)
})
return message;
},
processMessage: function(data) {
if (!EditSession.hosting) {
EditSession.host.send({type: 'chat_input', data: data})
return;
}
var message = new Chat.Message(data)
//Host Only
Blockbench.dispatchEvent('process_chat_message', message)
EditSession.sendAll('chat_message', data)
Chat.addMessage(data)
}
};
Chat.Message = class {
constructor(data) {
this.author = data.author||'';
this.author = this.author.substr(0, 64)
this.self = (this.author && this.author === EditSession.username);
this.text = data.text.substr(0, Chat.maxlength)||'';
this.timestamp = new Date.getTimestamp()
this.toString = () => (this.author + ': ' + this.content);
//Color
this.color = data.color
switch (this.color) {
case 'red': this.hex = '#ff4158'; break;
case 'orange': this.hex = '#ff6f10'; break;
case 'yellow': this.hex = '#ffd100'; break;
case 'green': this.hex = '#00eb3b'; break;
case 'blue': this.hex = '#08a3ff'; break;
}
}
toObject() {
return {
author: this.author,
text: this.text,
color: this.color,
}
}
showAuthor() {
if (!this.author) return false;
var this_i = Chat.history.indexOf(this);
var prev = Chat.history[this_i-1];
return (!prev) || (prev.author !== this.author);
}
}
onVueSetup(function() {
Chat.vue = new Vue({
el: '#chat_history',
data: Chat
})
})
BARS.defineActions(function() {
new Action({
@ -236,4 +375,11 @@ BARS.defineActions(function() {
category: 'blockbench',
click: EditSession.dialog
})
new Action({
id: 'toggle_chat',
icon: 'keyboard_arrow_down',
condition: () => EditSession.active,
category: 'blockbench',
click: () => (Chat.toggle())
})
})

View File

@ -44,8 +44,6 @@ var OutlinerButtons = {
get title() {return Blockbench.entity_mode ? tl('switches.mirror') : tl('switches.shading')},
get icon() {return Blockbench.entity_mode ? 'fa fa-star' : 'fa fa-star'},
get icon_off() {return Blockbench.entity_mode ? 'fa fa-star-half-o' : 'fa fa-star-o'},
//icon: ' fa fa-star',
//icon_off: ' fa fa-star-o',
advanced_option: true,
click: function(obj) {
obj.toggle('shade')
@ -94,6 +92,8 @@ class Face {
this.texture = null;
} else if (object.texture === false) {
this.texture = false;
} else if (textures.includes(object.texture)) {
this.texture = object.texture.uuid;
} else if (typeof object.texture === 'string') {
Merge.string(this, object, 'texture')
}
@ -832,22 +832,24 @@ class Cube extends OutlinerElement {
this.menu.open(event, this)
return this;
}
forSelected(fc) {
forSelected(fc, undo_tag) {
if (selected.length <= 1 || !selected.includes(this)) {
if (fc) {
fc(this)
}
return [this];
var edited = [this]
} else {
var i = selected.length;
while (i > 0) {
i--;
if (fc) {
fc(selected[i])
}
}
return selected
var edited = selected
}
if (typeof fc === 'function') {
if (undo_tag) {
Undo.initEdit({cubes: edited})
}
for (var i = 0; i < edited.length; i++) {
fc(edited[i])
}
if (undo_tag) {
Undo.finishEdit(undo_tag)
}
}
return edited;
}
duplicate() {
var old_group = this.parent
@ -1012,19 +1014,16 @@ class Cube extends OutlinerElement {
}
}
toggle(key, val) {
var selection = this.forSelected()
if (val === undefined) {
var val = !this[key]
}
Undo.initEdit({cubes: selection})
selection.forEach(function (cube) {
this.forSelected((cube) => {
cube[key] = val
})
}, 'toggle '+key)
if (key === 'visibility') {
Canvas.updateVisibility()
}
Undo.finishEdit('toggle')
return this;
}
}
Cube.prototype.title = tl('data.cube')
@ -1050,39 +1049,29 @@ class Cube extends OutlinerElement {
updateSelection()
Undo.finishEdit('duplicate', {outliner: true, cubes: selected, selection: true})
}},
{name: 'generic.rename', icon: 'text_format', click: function(cube) {
if (selected.length > 1) {
renameCubes(cube)
} else {
cube.rename()
}
}},
{name: 'generic.rename', icon: 'text_format', click: renameOutliner},
'update_autouv',
{name: 'menu.cube.color', icon: 'color_lens', children: [
{icon: 'bubble_chart', color: cubeColors[0].hex, name: 'cube.color.'+cubeColors[0].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(0)})}},
{icon: 'bubble_chart', color: cubeColors[1].hex, name: 'cube.color.'+cubeColors[1].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(1)})}},
{icon: 'bubble_chart', color: cubeColors[2].hex, name: 'cube.color.'+cubeColors[2].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(2)})}},
{icon: 'bubble_chart', color: cubeColors[3].hex, name: 'cube.color.'+cubeColors[3].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(3)})}},
{icon: 'bubble_chart', color: cubeColors[4].hex, name: 'cube.color.'+cubeColors[4].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(4)})}},
{icon: 'bubble_chart', color: cubeColors[5].hex, name: 'cube.color.'+cubeColors[5].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(5)})}},
{icon: 'bubble_chart', color: cubeColors[6].hex, name: 'cube.color.'+cubeColors[6].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(6)})}},
{icon: 'bubble_chart', color: cubeColors[7].hex, name: 'cube.color.'+cubeColors[7].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(7)})}}
{icon: 'bubble_chart', color: cubeColors[0].hex, name: 'cube.color.'+cubeColors[0].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(0)}, 'change color')}},
{icon: 'bubble_chart', color: cubeColors[1].hex, name: 'cube.color.'+cubeColors[1].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(1)}, 'change color')}},
{icon: 'bubble_chart', color: cubeColors[2].hex, name: 'cube.color.'+cubeColors[2].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(2)}, 'change color')}},
{icon: 'bubble_chart', color: cubeColors[3].hex, name: 'cube.color.'+cubeColors[3].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(3)}, 'change color')}},
{icon: 'bubble_chart', color: cubeColors[4].hex, name: 'cube.color.'+cubeColors[4].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(4)}, 'change color')}},
{icon: 'bubble_chart', color: cubeColors[5].hex, name: 'cube.color.'+cubeColors[5].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(5)}, 'change color')}},
{icon: 'bubble_chart', color: cubeColors[6].hex, name: 'cube.color.'+cubeColors[6].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(6)}, 'change color')}},
{icon: 'bubble_chart', color: cubeColors[7].hex, name: 'cube.color.'+cubeColors[7].name, click: function(cube) {cube.forSelected(function(obj){obj.setColor(7)}, 'change color')}}
]},
{name: 'menu.cube.texture', icon: 'collections', condition: function() {return !Blockbench.entity_mode}, children: function() {
var arr = [
{icon: 'crop_square', name: 'menu.cube.texture.blank', click: function(cube) {
Undo.initEdit({cubes: selected})
cube.forSelected(function(obj) {
obj.applyTexture('blank', true)
})
Undo.initEdit('texture blank')
}, 'texture blank')
}},
{icon: 'clear', name: 'menu.cube.texture.transparent', click: function(cube) {
Undo.initEdit({cubes: selected})
cube.forSelected(function(obj) {
obj.applyTexture(undefined, true)
})
Undo.initEdit('texture blank')
}, 'texture transparent')
}}
]
textures.forEach(function(t) {
@ -1090,11 +1079,9 @@ class Cube extends OutlinerElement {
name: t.name,
icon: (t.mode === 'link' ? t.img : t.source),
click: function(cube) {
Undo.initEdit({cubes: selected})
cube.forSelected(function(obj) {
obj.applyTexture(t, true)
})
Undo.initEdit('texture blank')
}, 'apply texture')
}
})
})
@ -1515,7 +1502,7 @@ class Group extends OutlinerElement {
group.duplicate()
Undo.finishEdit('duplicate_group', {outliner: true, cubes: elements.slice().slice(cubes_before), selection: true})
}},
{icon: 'text_format', name: 'generic.rename', click: function(group) {group.rename()}},
'rename',
{icon: 'sort_by_alpha', name: 'menu.group.sort', click: function(group) {group.sortContent()}},
{icon: 'fa-leaf', name: 'menu.group.resolve', click: function(group) {
Undo.initEdit({outliner: true})
@ -1945,25 +1932,39 @@ function duplicateCubes() {
BarItems.move_tool.select()
Undo.finishEdit('duplicate', {cubes: selected, outliner: true, selection: true})
}
function renameCubes(element) {
stopRenameCubes()
if (selected_group && !element) {
function renameOutliner(element) {
stopRenameOutliner()
if (selected_group && !element && !EditSession.active) {
selected_group.rename()
} else if (selected.length === 0) {
return;
} else if (selected.length === 1) {
} else if (selected.length === 1 && !EditSession.active) {
selected[0].rename()
} else {
Blockbench.textPrompt(tl('message.rename_cubes'), selected[0].name, function (name) {
Undo.initEdit({cubes: selected})
selected.forEach(function(obj, i) {
obj.name = name.replace(/%/g, obj.index).replace(/\$/g, i)
} else if (selected.length) {
if (selected_group && !element) {
Blockbench.textPrompt(tl('message.rename_cubes'), selected_group.name, function (name) {
Undo.initEdit({group: selected_group})
selected_group.name = name
if (Blockbench.entity_mode) {
selected_group.createUniqueName()
}
Undo.finishEdit('rename group')
})
Undo.finishEdit('rename')
})
} else {
Blockbench.textPrompt(tl('message.rename_cubes'), selected[0].name, function (name) {
Undo.initEdit({cubes: selected})
selected.forEach(function(obj, i) {
obj.name = name.replace(/%/g, obj.index).replace(/\$/g, i)
})
Undo.finishEdit('rename')
})
}
}
}
function stopRenameCubes(save) {
function stopRenameOutliner(save) {
if (Blockbench.hasFlag('renaming')) {
var uuid = $('.outliner_object input.renaming').parent().parent().attr('id')
var element = TreeElements.findRecursive('uuid', uuid)
@ -2077,6 +2078,17 @@ BARS.defineActions(function() {
}
}
})
new Action({
id: 'rename',
icon: 'text_format',
category: 'edit',
keybind: new Keybind({key: 113}),
click: function () {
if (Modes.id === 'edit') {
renameOutliner()
}
}
})
new Action({
id: 'duplicate',

View File

@ -165,12 +165,12 @@ class ResizeLine {
var Interface = {
default_data: {
left_bar_width: 338,
left_bar_width: 332,
right_bar_width: 300,
quad_view_x: 50,
quad_view_y: 50,
left_bar: ['uv', 'textures', 'display', 'animations', 'keyframe', 'variable_placeholders'],
right_bar: ['options', 'outliner']
right_bar: ['options', 'color', 'outliner', 'chat']
},
Resizers: {
left: new ResizeLine({
@ -256,6 +256,12 @@ function setupInterface() {
$.extend(true, Interface.data, interface_data)
} catch (err) {}
if (!Language.loading_steps) {
Language.loading_steps = true;
} else {
translateUI()
}
$('.entity_mode_only').hide()
$('.edit_session_active').hide()
@ -349,6 +355,15 @@ function setupInterface() {
'outliner_toggle'
])
})
Interface.Panels.chat = new Panel({
id: 'chat',
condition: function() {return EditSession.active},
toolbars: {},
onResize: t => {
},
menu: new Menu([
])
})
Interface.Panels.animations = new Panel({
id: 'animations',
condition: () => Animator.open,
@ -442,8 +457,8 @@ function setupInterface() {
if (ActionControl.open && $('#action_selector').find(event.target).length === 0) {
ActionControl.hide();
}
if ($(event.target).is('input.cube_name:not([disabled])') === false) {
stopRenameCubes()
if ($(event.target).is('input.cube_name:not([disabled])') === false && Blockbench.hasFlag('renaming')) {
stopRenameOutliner()
}
})
$('.context_handler').on('click', function() {

View File

@ -3,8 +3,7 @@ function newProject(entity_mode, force) {
if (force || showSaveDialog()) {
if (Toolbox.selected.id !== 'move_tool') BarItems.move_tool.select();
elements.length = 0;
TreeElements.length = 1;
TreeElements.splice(0, 1);
TreeElements.purge();
Canvas.materials.length = 0;
textures.length = 0;
selected.length = 0;
@ -24,9 +23,8 @@ function newProject(entity_mode, force) {
Undo.history.length = 0;
Undo.index = 0;
Painter.current = {};
Animator.animations.length = 1;
Animator.animations.purge();
Animator.selected = undefined;
Animator.animations.splice(0, 1);
if (entity_mode) {
entityMode.join();
} else {
@ -836,17 +834,25 @@ var Extruder = {
},
startConversion: function() {
var scan_mode = $('select#scan_mode option:selected').attr('id') /*areas, lines, columns, pixels*/
var texture = textures[textures.length-1].uuid
var isNewProject = elements.length === 0;
var jimage = Jimp.read(Extruder.ext_img.src).then(function(image) {
var pixel_opacity_tolerance = $('#scan_tolerance').val()
//Undo
Undo.initEdit({cubes: selected, outliner: true, textures: []})
if (isApp) {
var texture = new Texture().fromPath(Extruder.ext_img.src).add(false).fillParticle()
} else {
var texture = new Texture().fromDataURL(Extruder.ext_img.src).add(false).fillParticle()
}
//var ext_x, ext_y;
var finished_pixels = {}
var cube_nr = 0;
var cube_name = textures[textures.length-1].name.split('.')[0]
selected = []
var cube_name = texture.name.split('.')[0]
selected.empty()
//Scale Index
var scale_i = 1;
if (Extruder.width < Extruder.height) {
@ -973,6 +979,9 @@ var Extruder = {
setProjectTitle(cube_name)
Prop.project_saved = false;
}
Undo.finishEdit('add extruded texture', {cubes: selected, outliner: true, textures: [textures[textures.length-1]]})
Blockbench.removeFlag('new_project')
loadOutlinerDraggable()
Canvas.updateAll()
@ -1721,19 +1730,25 @@ function buildOBJModel(name) {
return content;
}
function uploadSketchfabModel() {
if (elements.length === 0) {
return;
}
var dialog = new Dialog({
id: 'sketchfab_uploader',
title: 'Upload Sketchfab Model',
width: 540,
form: {
token: {label: 'dialog.sketchfab_uploader.token', value: settings.sketchfab_token.value},
about_token: {type: 'text', text: 'dialog.sketchfab_uploader.about_token'},
about_token: {type: 'text', text: tl('dialog.sketchfab_uploader.about_token', ['[sketchfab.com/settings/password](https://sketchfab.com/settings/password)'])},
name: {label: 'dialog.sketchfab_uploader.name'},
description: {label: 'dialog.sketchfab_uploader.description', type: 'textarea'},
tags: {label: 'dialog.sketchfab_uploader.tags', placeholder: 'Tag1 Tag2'},
divider: '_',
private: {label: 'dialog.sketchfab_uploader.private', type: 'checkbox'},
password: {label: 'dialog.sketchfab_uploader.password'},
},
onConfirm: function(formResult) {
if (formResult.token && !formResult.name) {
Blockbench.showQuickMessage('message.sketchfab.name_or_token', 1800)
return;
@ -1746,6 +1761,9 @@ function uploadSketchfabModel() {
data.append('name', formResult.name)
data.append('description', formResult.description)
data.append('tags', formResult.tags)
data.append('private', formResult.private)
data.append('password', formResult.password)
data.append('source', 'blockbench')
settings.sketchfab_token.value = formResult.token
@ -1909,9 +1927,9 @@ function saveProjectSettings() {
entityMode.setResolution()
Undo.finishEdit('changed resolution')
}
if (EditSession.active && EditSession.hosting) {
EditSession.sendAll('change_project_meta', JSON.stringify(Project));
}
}
if (EditSession.active) {
EditSession.sendAll('change_project_meta', JSON.stringify(Project));
}
}
@ -1986,11 +2004,6 @@ BARS.defineActions(function() {
readtype: 'image'
}, function(files) {
if (files.length) {
if (isApp) {
new Texture().fromPath(files[0].path).add(false).fillParticle()
} else {
new Texture().fromDataURL(files[0].content).add(false).fillParticle()
}
showDialog('image_extruder')
Extruder.drawImage(isApp ? files[0].path : files[0].content)
}
@ -2017,7 +2030,7 @@ BARS.defineActions(function() {
})
new Action({
id: 'export_bbmodel',
icon: 'insert_drive_file',
icon: 'icon-blockbench_file',
category: 'file',
click: function () {
Blockbench.export({
@ -2119,6 +2132,7 @@ BARS.defineActions(function() {
id: 'export_asset_archive',
icon: 'archive',
category: 'file',
condition: !isApp,
click: function() {
var archive = new JSZip();
if (Blockbench.entity_mode === false) {
@ -2129,7 +2143,7 @@ BARS.defineActions(function() {
archive.file((Project.name||'model')+'.json', content)
textures.forEach(tex => {
if (tex.mode === 'bitmap') {
texfolder.file(pathToName(tex.name) + '.png', tex.source.replace('data:image/png;base64,', ''), {base64: true});
archive.file(pathToName(tex.name) + '.png', tex.source.replace('data:image/png;base64,', ''), {base64: true});
}
})
archive.generateAsync({type: 'blob'}).then(content => {
@ -2147,7 +2161,7 @@ BARS.defineActions(function() {
})
new Action({
id: 'upload_sketchfab',
icon: 'fa-cube',
icon: 'icon-sketchfab',
category: 'file',
click: function(ev) {
uploadSketchfabModel()

View File

@ -75,19 +75,13 @@ class Keybind {
if (this.alt) modifiers.push(tl('keys.alt'))
if (this.meta) modifiers.push(tl('keys.meta'))
//if (this.ctrl === null) modifiers.push('[' + tl('keys.ctrl') + ']')
//if (this.shift === null) modifiers.push('[' + tl('keys.shift') + ']')
//if (this.alt === null) modifiers.push('[' + tl('keys.alt') + ']')
//if (this.meta === null) modifiers.push('[' + tl('keys.meta') + ']')
var char = this.getCode()//String.fromCharCode(this.code).toLowerCase()
var char = this.getCode()
var char_tl = tl('keys.'+char)
if (char_tl === ('keys.'+char)) {
modifiers.push(capitalizeFirstLetter(char))
} else {
modifiers.push(char_tl)
}
//modifiers.push(capitalizeFirstLetter(String.fromCharCode(this.code)))
return modifiers.join(' + ')
}
getCode(key) {
@ -227,7 +221,9 @@ onVueSetup(function() {
$(document).keydown(function(e) {
if (Keybinds.recording) return;
//Shift
holding_shift = e.shiftKey;
Pressing.shift = e.shiftKey;
Pressing.alt = e.altKey;
Pressing.ctrl = e.ctrlKey;
if (e.which === 16) {
showShiftTooltip()
}
@ -239,11 +235,17 @@ $(document).keydown(function(e) {
//User Editing Anything
if (Blockbench.hasFlag('renaming')) {
if (Keybinds.extra.confirm.keybind.isTriggered(e)) {
stopRenameCubes()
stopRenameOutliner()
} else if (Keybinds.extra.cancel.keybind.isTriggered(e)) {
stopRenameCubes(false)
stopRenameOutliner(false)
}
return;
}
if ($('input#chat_input:focus').length && EditSession.active) {
if (Keybinds.extra.confirm.keybind.isTriggered(e)) {
Chat.send();
return;
}
}
if (Keybinds.extra.confirm.keybind.isTriggered(e) || Keybinds.extra.cancel.keybind.isTriggered(e)) {
$(document).click()
@ -311,9 +313,14 @@ $(document).keydown(function(e) {
})
$(document).keyup(function(e) {
holding_shift = false;
if (Pressing.alt && ActionControl.open) {
ActionControl.vue.$forceUpdate()
}
if (e.which === 18 && Toolbox.original && Toolbox.original.alt_tool) {
Toolbox.original.select()
delete Toolbox.original;
}
Pressing.shift = false;
Pressing.alt = false;
Pressing.ctrl = false;
})

View File

@ -64,18 +64,15 @@ function loadLanguage() {
$.ajax({
dataType: "json",
url: 'lang/'+Language+'.json',
//data: data,
//async: false,
success: function(data) {
Language.data = data
translateUI()
if (!Language.loading_steps) {
Language.loading_steps = true;
} else {
translateUI()
}
}
});
/*
$.getJSON('lang/'+Language.code+'.json', function(data) {
Language.data = data
translateUI()
})
*/
}
loadLanguage()

View File

@ -520,7 +520,7 @@ class BBPainter {
folder: options.folder ? options.folder : 'blocks'
})
function makeTexture(dataUrl) {
texture.fromDataURL(dataUrl)
texture.fromDataURL(dataUrl).add(false)
switch (options.particle) {
case 'auto':
texture.fillParticle();
@ -532,12 +532,10 @@ class BBPainter {
if (typeof after === 'function') {
after(texture)
}
if (options.entity_template) {
Undo.finishEdit('create template', {textures: [texture], bitmap: true, cubes: Blockbench.entity_mode ? elements : selected, uv_only: true})
} else {
if (!options.entity_template) {
Undo.finishEdit('create blank texture', {textures: [texture], bitmap: true})
}
return texture.add(false);
return texture;
}
if (options.entity_template === true) {
Undo.initEdit({
@ -861,6 +859,7 @@ class BBPainter {
t.obj.autouv = 0
})
}
Undo.finishEdit('create template', {textures: [texture], bitmap: true, cubes: Blockbench.entity_mode ? elements : selected, uv_only: true})
}
}
const Painter = new BBPainter()

View File

@ -18,7 +18,7 @@ function settingSetup() {
brightness: {category: 'preview', value: 50, type: 'number'},
shading: {category: 'preview', value: true},
transparency: {category: 'preview', value: true},
outliner_colors: {category: 'preview', value: true},
outliner_colors: {category: 'preview', value: false},
texture_fps: {category: 'preview', value: 2, type: 'number'},
display_skin: {category: 'preview', value: false, type: 'click', condition: isApp, icon: 'icon-player', click: function() { changeDisplaySkin() }},
//Edit

View File

@ -990,13 +990,6 @@ BARS.defineActions(function() {
condition: () => Blockbench.entity_mode,
click: function () {toggleCubeProperty('shade')}
})
new Action({
id: 'rename',
icon: 'text_format',
category: 'transform',
keybind: new Keybind({key: 113}),
click: function () {renameCubes()}
})
new Action({
id: 'update_autouv',
icon: 'brightness_auto',

View File

@ -4,7 +4,7 @@
template:
'<li class="outliner_node" v-bind:class="{ parent_li: node.children && node.children.length > 0}" v-bind:id="node.uuid">' +
`<div @contextmenu.prevent.stop="node.showContextMenu($event)"
class="outliner_object" v-on:dblclick="node.rename($event)"
class="outliner_object" v-on:dblclick="renameOutliner()"
v-on:click="node.select($event, true)" v-on:touchstart="node.select($event)" :title="node.title"
v-bind:class="{ cube: node.type === \'cube\', group: node.type === \'group\', selected: node.selected }"
v-bind:style="{'padding-left': (node.getDepth ? limitNumber(node.getDepth(), 0, (Interface.Panels.outliner.width-124) / 20) * 20 : 0)+'px'}"

View File

@ -81,7 +81,11 @@ var asyncLoop = function(o){
}
async_loop();//init
}
// 1234567890qwertzuiopuasdfghjklyxcvbn
Date.prototype.getTimestamp = function() {
var l2 = i => (i.toString().length === 1 ? '0'+i : i);
return l2(this.getHours()) + ':' + l2(this.getMinutes());
}
//Jquery
$.fn.deepest = function() {
if (!this.length) return this;
@ -251,6 +255,11 @@ Array.prototype.empty = function() {
this.length = 0;
return this;
}
Array.prototype.purge = function() {
this.length = Math.clamp(this.length, 0, 1);
this.splice(0, 1)
return this;
}
Array.prototype.findInArray = function(key, value) {
for (var i = 0; i < this.length; i++) {
if (this[i][key] === value) return this[i]

View File

@ -612,8 +612,9 @@ class UVEditor {
}
}
this.grid = grid
var pixels = this.inner_size / this.grid;
if (Blockbench.entity_mode === false) {
this.jquery.size.resizable('option', 'grid', [this.getPixelSize(), this.getPixelSize()])
this.jquery.size.resizable('option', 'grid', [pixels, pixels])
}
if (load !== false) this.loadData()
}
@ -685,7 +686,7 @@ class UVEditor {
}
save() {
var scope = this;
//Save UV from Frame to object!!
//Save UV from Frame to object
if (Blockbench.entity_mode) {
@ -701,10 +702,11 @@ class UVEditor {
var trim = v => Math.round(v*1000+0.3)/1000;
var pixelSize = this.inner_size/16
var left = trim( this.jquery.size.position().left / pixelSize);
var top = trim( this.jquery.size.position().top / pixelSize * (Project.texture_width/Project.texture_height));
var left2= Math.clamp(trim( Math.round(this.jquery.size.width()) / pixelSize + left), 0, 16);
var top2 = Math.clamp(trim( Math.round(this.jquery.size.height()) / pixelSize + top), 0, 16);
var position = this.jquery.size.position()
var left = trim( position.left / pixelSize);
var top = trim( position.top / pixelSize * (Project.texture_width/Project.texture_height));
var left2= Math.clamp(trim( (this.jquery.size.width() + position.left) / pixelSize), 0, 16);
var top2 = Math.clamp(trim( (this.jquery.size.height() + position.top) / pixelSize), 0, 16);
var uvTag = this.getUVTag()
@ -1518,7 +1520,11 @@ const uv_dialog = {
uv_dialog.updateSelection()
},
selectAll: function() {
uv_dialog.selection = ['north', 'south', 'west', 'east', 'up', 'down']
if (uv_dialog.selection.length === 6) {
uv_dialog.selection.empty()
} else {
uv_dialog.selection = uv_dialog.allFaces.slice()
}
uv_dialog.updateSelection()
},
selectNone: function() {
@ -1626,7 +1632,7 @@ const uv_dialog = {
}
if (uv_dialog.single) {
var menu_gap = Blockbench.entity_mode ? 66 : 154
var editor_size = size.x
var editor_size = size.x-16
size.y = (size.y - menu_gap) * (Blockbench.entity_mode ? Project.texture_width/Project.texture_height : 1)
if (size.x > size.y) {
editor_size = size.y
@ -1794,6 +1800,15 @@ BARS.defineActions(function() {
}
}
})
new Action({
id: 'uv_select_all',
icon: 'view_module',
category: 'uv',
condition: () => open_dialog === 'uv_dialog',
click: uv_dialog.selectAll
})
new Action({
id: 'uv_maximize',
icon: 'zoom_out_map',

View File

@ -101,6 +101,9 @@ window.onbeforeunload = function() {
}
}
function showSaveDialog(close) {
function beforeClosing() {
EditSession.quit()
}
var unsaved_textures = 0;
textures.forEach(function(t) {
if (!t.saved) {
@ -114,11 +117,13 @@ function showSaveDialog(close) {
if (close) {
//preventClosing = false
}
beforeClosing()
return true;
} else {
return false;
}
} else {
beforeClosing()
return true;
}
}

View File

@ -817,7 +817,9 @@
"action.open_backup_folder": "Backup-Ordner öffnen",
"action.open_backup_folder.desc": "Öffnet den Backup-Ordner von Blockbench",
"switches.mirror": "UV Spiegeln",
"language_name": "Deutsch",
"Name of the Language you are editing, NOT English": {
"language_name": "Deutsch"
},
"message.plugin_reload": "%0 lokale Plugins wurden neugeladen",
"settings.brightness": "Helligkeit",
"settings.brightness.desc": "Helligkeit der Vorschau. Standardwert ist 50",
@ -856,7 +858,7 @@
"message.sketchfab.name_or_token": "Bitte gebe deinen Sketchfab Schlüssel und einen Namen ein",
"dialog.sketchfab_uploader.title": "Modell auf Sketchfab hochladen",
"dialog.sketchfab_uploader.token": "API Schlüssel",
"dialog.sketchfab_uploader.about_token": "Der Schlüssel wird benötigt, um Blockbench mit deinem Sketchfab Account zu verbinden. Du findest ihn unter sketchfab.com/settings/password",
"dialog.sketchfab_uploader.about_token": "Der Schlüssel wird benötigt, um Blockbench mit deinem Sketchfab Account zu verbinden. Du findest ihn unter %0",
"dialog.sketchfab_uploader.name": "Name",
"dialog.sketchfab_uploader.description": "Beschreibung",
"dialog.sketchfab_uploader.tags": "Tags",
@ -876,28 +878,36 @@
"texture.error.ratio": "Ungültiges Seitenverhältnis",
"texture.error.parent": "Textur durch Elternmodell",
"message.recover_backup.title": "Modell wiederherstellen",
"message.recover_backup.message": "Blockbench was closed without saving. Do you want to recover the model?",
"message.install_plugin": "Installing the plugin %0",
"message.invalid_session.title": "Invalid Session Token",
"message.invalid_session.message": "The session you are trying to join has expired or the token provided is invalid.",
"dialog.create_texture.power": "Power-of-2 Size",
"dialog.create_gif.turn": "Turntable Speed",
"action.edit_session": "Edit Session...",
"action.edit_session.desc": "Connect to an edit session to collaborate with other users",
"action.reset_keyframe": "Reset Keyframe",
"action.reset_keyframe.desc": "Reset all values of the selected keyframes",
"panel.options.origin": "Origin",
"dialog.edit_session.title": "Edit Session",
"edit_session.username": "Username",
"edit_session.token": "Token",
"edit_session.about": "Edit Sessions can be used to collaborate on models across the internet. Create a session and copy the token and send it to friends, who can then use it to join.",
"edit_session.join": "Join Session",
"edit_session.create": "Create Session",
"edit_session.quit": "Quit Session",
"edit_session.joined": "User %0 joined the session",
"edit_session.left": "User %0 left the session",
"edit_session.quit_session": "Left current session",
"message.recover_backup.message": "Blockbench wurde ohne zu speichern geschlossen. Möchtest do das Modell wiederherstellen?",
"message.install_plugin": "Installiere das Plugin %0",
"message.invalid_session.title": "Ungültiger Schlüssel",
"message.invalid_session.message": "Die Session ist abgelaufen oder der angegebene Schlüssel ist ungültig",
"dialog.create_texture.power": "2-Quadrat Größe",
"dialog.create_gif.turn": "Drehgeschwindigkeit",
"action.edit_session": "Zusammenarbeiten...",
"action.edit_session.desc": "Mit einer Session verbinden, um mit anderen zusammenzuarbeiten",
"action.reset_keyframe": "Keyframe zurücksetzen",
"action.reset_keyframe.desc": "Alle Werte der ausgewählten Keyframes zurücksetzen",
"panel.options.origin": "Angelpunkt",
"dialog.edit_session.title": "Zusammenarbeiten",
"edit_session.username": "Name",
"edit_session.token": "Schlüssel",
"edit_session.about": "Mit Sessions kann über das Internet zusammen an Modellen gearbeitet werden. Erstelle eine Session, kopiere den Schlüssel und schicke ihn an Freunde. Diese können damit deiner Session beitreten.",
"edit_session.join": "Session beitreten",
"edit_session.create": "Session erstellen",
"edit_session.quit": "Session verlassen",
"edit_session.joined": "%0 ist der Session beigetreten",
"edit_session.left": "%0 hat die Session verladden",
"edit_session.quit_session": "Session verlassen",
"edit_session.status": "Status",
"edit_session.hosting": "Hosting",
"edit_session.connected": "Connected to a session"
"edit_session.hosting": "Eine Session betreibend",
"edit_session.connected": "Mit Session verbunden",
"dialog.sketchfab_uploader.private": "Privat (Pro)",
"dialog.sketchfab_uploader.password": "Passwort (Pro)",
"action.toggle_chat": "Chat ein/ausblenden",
"action.toggle_chat.desc": "Blende den Chat ein oder aus",
"action.uv_select_all": "Alle auswählen",
"action.uv_select_all.desc": "Alle Oberflächen im UV Dialog auswählen",
"panel.chat": "Chat",
"edit_session.welcome": "Willkommen in der Sitzung von %0"
}

View File

@ -272,10 +272,12 @@
"dialog.sketchfab_uploader.title": "Upload Sketchfab Model",
"dialog.sketchfab_uploader.token": "API Token",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on sketchfab.com/settings/password",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on %0",
"dialog.sketchfab_uploader.name": "Model Name",
"dialog.sketchfab_uploader.description": "Description",
"dialog.sketchfab_uploader.tags": "Tags",
"dialog.sketchfab_uploader.private": "Private (Pro)",
"dialog.sketchfab_uploader.password": "Password (Pro)",
"dialog.settings.settings": "Settings",
"dialog.settings.keybinds": "Keybindings",
@ -541,8 +543,8 @@
"action.extrude_texture.desc": "Generate a model by stretching out a texture",
"action.export_blockmodel": "Export Blockmodel",
"action.export_blockmodel.desc": "Export a Minecraft block or item model",
"action.export_bbmodel": "Export Blockbench Project",
"action.export_bbmodel.desc": "Export a Blockbench project with all cubes, textures and animations",
"action.export_bbmodel": "Save Project",
"action.export_bbmodel.desc": "Save a Blockbench project with all cubes, textures and animations",
"action.export_asset_archive": "Download Archive",
"action.export_asset_archive.desc": "Download an archive with the model and all textures in it",
"action.export_entity": "Export Bedrock Entity",
@ -571,6 +573,8 @@
"action.action_control.desc": "Search and execute any available action",
"action.edit_session": "Edit Session...",
"action.edit_session.desc": "Connect to an edit session to collaborate with other users",
"action.toggle_chat": "Toggle Chat",
"action.toggle_chat.desc": "Toggle the visibility of the chat history",
"action.reset_keybindings": "Reset Keybindings",
"action.reset_keybindings.desc": "Reset all keybindings to Blockbench's defaults",
@ -729,8 +733,10 @@
"action.bone_reset_toggle": "Reset Bone",
"action.bone_reset_toggle.desc": "Stop the bone from displaying cubes from the parent model",
"action.reload": "Reload Blockbench",
"action.reload.desc": "Reload Blockbench. This will remove all unsaved progress",
"action.reload.desc": "Reload Blockbench. This will void all unsaved progress",
"action.uv_select_all": "Select All",
"action.uv_select_all.desc": "Select all faces in the UV dialog",
"action.uv_rotation": "UV Rotation",
"action.uv_rotation.desc": "Rotation of the UV face",
"action.uv_grid": "UV Grid",
@ -899,6 +905,7 @@
"panel.textures": "Textures",
"panel.color": "Color",
"panel.outliner": "Outliner",
"panel.chat": "Chat",
"panel.animations": "Animations",
"panel.keyframe": "Keyframe",
"panel.keyframe.type": "Keyframe (%0)",
@ -949,8 +956,9 @@
"edit_session.join": "Join Session",
"edit_session.create": "Create Session",
"edit_session.quit": "Quit Session",
"edit_session.joined": "User %0 joined the session",
"edit_session.left": "User %0 left the session",
"edit_session.joined": "%0 joined the session",
"edit_session.left": "%0 left the session",
"edit_session.welcome": "Welcome to this session by %0",
"edit_session.quit_session": "Left current session",
"edit_session.status": "Status",
"edit_session.hosting": "Hosting",

View File

@ -817,7 +817,9 @@
"action.open_backup_folder": "Abrir Carpeta de Backups",
"action.open_backup_folder.desc": "Abre la carpeta de backups de Blockbench",
"switches.mirror": "Invertir UV",
"language_name": "Inglés",
"Name of the Language you are editing, NOT English": {
"language_name": "English"
},
"message.plugin_reload": "Recargados %0 plugins locales",
"settings.brightness": "Brillo",
"settings.brightness.desc": "Brillo de la previsualización. Por defecto es 50",
@ -856,7 +858,7 @@
"message.sketchfab.name_or_token": "Por favor, introduce tu token de Sketchfab y un nombre",
"dialog.sketchfab_uploader.title": "Subir Modelo de Sketchfab",
"dialog.sketchfab_uploader.token": "Token de API",
"dialog.sketchfab_uploader.about_token": "El token es usado para conectar Blockbench a tu cuenta de Sketchfab. Puedes encontrarlo en sketchfab.com/settings/password",
"dialog.sketchfab_uploader.about_token": "El token es usado para conectar Blockbench a tu cuenta de Sketchfab. Puedes encontrarlo en %0",
"dialog.sketchfab_uploader.name": "Nombre del Modelo",
"dialog.sketchfab_uploader.description": "Descripción",
"dialog.sketchfab_uploader.tags": "Etiquetas",
@ -875,29 +877,37 @@
"texture.error.invalid": "Archivo inválido",
"texture.error.ratio": "Aspecto de ratio inválido",
"texture.error.parent": "Archivo de textura proveído por el modelo padre",
"message.recover_backup.title": "Recover Model",
"message.recover_backup.message": "Blockbench was closed without saving. Do you want to recover the model?",
"message.install_plugin": "Installing the plugin %0",
"message.invalid_session.title": "Invalid Session Token",
"message.invalid_session.message": "The session you are trying to join has expired or the token provided is invalid.",
"dialog.create_texture.power": "Power-of-2 Size",
"dialog.create_gif.turn": "Turntable Speed",
"action.edit_session": "Edit Session...",
"action.edit_session.desc": "Connect to an edit session to collaborate with other users",
"action.reset_keyframe": "Reset Keyframe",
"action.reset_keyframe.desc": "Reset all values of the selected keyframes",
"panel.options.origin": "Origin",
"dialog.edit_session.title": "Edit Session",
"edit_session.username": "Username",
"message.recover_backup.title": "Recuperar Modelo",
"message.recover_backup.message": "Blockbench fue cerrado sin guardar. ¿Quieres recuperar el modelo?",
"message.install_plugin": "Instalando el plugin %0",
"message.invalid_session.title": "Token de Sesión Inválido",
"message.invalid_session.message": "La sesión a la que estas intentando entrar ha expirado o el token proveído es inválido.",
"dialog.create_texture.power": "Tamaño Al Cuadrado",
"dialog.create_gif.turn": "Velocidad del Tocadiscos",
"action.edit_session": "Editar sesión...",
"action.edit_session.desc": "Conectarse a una sesión de edición para colaborar con otros usuarios",
"action.reset_keyframe": "Resetear Frames Clave",
"action.reset_keyframe.desc": "Resetea todos los valores de los frames clave seleccionados",
"panel.options.origin": "Origen",
"dialog.edit_session.title": "Editar Sesión",
"edit_session.username": "Nombre de Usuario",
"edit_session.token": "Token",
"edit_session.about": "Edit Sessions can be used to collaborate on models across the internet. Create a session and copy the token and send it to friends, who can then use it to join.",
"edit_session.join": "Join Session",
"edit_session.create": "Create Session",
"edit_session.quit": "Quit Session",
"edit_session.joined": "User %0 joined the session",
"edit_session.left": "User %0 left the session",
"edit_session.quit_session": "Left current session",
"edit_session.status": "Status",
"edit_session.hosting": "Hosting",
"edit_session.connected": "Connected to a session"
"edit_session.about": "Editar Sesiones puede ser utilizado para colaborar en modelos a través de Internet. Crea una sesión, copia el token y mándaselo a amigos, los cuales lo pueden usar para entrar.",
"edit_session.join": "Entrar a Sesión",
"edit_session.create": "Crear Sesión",
"edit_session.quit": "Salir de Sesión",
"edit_session.joined": "Usuario %0 ha entrado la sesión",
"edit_session.left": "Usuario %0 ha salido de la sesión",
"edit_session.quit_session": "Salir de la sesión actual",
"edit_session.status": "Estado",
"edit_session.hosting": "Anfitrión",
"edit_session.connected": "Conectado a una sesión",
"dialog.sketchfab_uploader.private": "Private (Pro)",
"dialog.sketchfab_uploader.password": "Password (Pro)",
"action.toggle_chat": "Toggle Chat",
"action.toggle_chat.desc": "Toggle the visibility of the chat history",
"action.uv_select_all": "Select All",
"action.uv_select_all.desc": "Select all faces in the UV dialog",
"panel.chat": "Chat",
"edit_session.welcome": "Welcome to this session by %0"
}

View File

@ -817,7 +817,9 @@
"action.open_backup_folder": "Ouvrir le dossier de sauvegarde",
"action.open_backup_folder.desc": "Ouvre le dossier de sauvegarde de Blockbench",
"switches.mirror": "Miroir UV",
"language_name": "Anglais",
"Name of the Language you are editing, NOT English": {
"language_name": "English"
},
"message.plugin_reload": "Recharger %0 plugins locaux",
"settings.brightness": "Luminosité",
"settings.brightness.desc": "Luminosité de l'aperçu. La valeur par défaut est 50",
@ -856,7 +858,7 @@
"message.sketchfab.name_or_token": "Please enter your Sketchfab token and a name",
"dialog.sketchfab_uploader.title": "Upload Sketchfab Model",
"dialog.sketchfab_uploader.token": "API Token",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on sketchfab.com/settings/password",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on %0",
"dialog.sketchfab_uploader.name": "Model Name",
"dialog.sketchfab_uploader.description": "Description",
"dialog.sketchfab_uploader.tags": "Tags",
@ -894,10 +896,18 @@
"edit_session.join": "Join Session",
"edit_session.create": "Create Session",
"edit_session.quit": "Quit Session",
"edit_session.joined": "User %0 joined the session",
"edit_session.left": "User %0 left the session",
"edit_session.joined": "%0 joined the session",
"edit_session.left": "%0 left the session",
"edit_session.quit_session": "Left current session",
"edit_session.status": "Status",
"edit_session.hosting": "Hosting",
"edit_session.connected": "Connected to a session"
"edit_session.connected": "Connected to a session",
"dialog.sketchfab_uploader.private": "Private (Pro)",
"dialog.sketchfab_uploader.password": "Password (Pro)",
"action.toggle_chat": "Toggle Chat",
"action.toggle_chat.desc": "Toggle the visibility of the chat history",
"action.uv_select_all": "Select All",
"action.uv_select_all.desc": "Select all faces in the UV dialog",
"panel.chat": "Chat",
"edit_session.welcome": "Welcome to this session by %0"
}

View File

@ -817,7 +817,9 @@
"action.open_backup_folder": "バックアップフォルダーを開く",
"action.open_backup_folder.desc": "Blockbenchのバックアップフォルダーを開きます",
"switches.mirror": "ミラーUV",
"language_name": "English",
"Name of the Language you are editing, NOT English": {
"language_name": "English"
},
"message.plugin_reload": "Reloaded %0 local plugins",
"settings.brightness": "輝度",
"settings.brightness.desc": "Brightness of the preview. Default is 50",
@ -848,15 +850,15 @@
"action.next_keyframe.desc": "Jump to the next keyframe",
"message.outdated_client.title": "Outdated client",
"message.outdated_client.message": "Please update to the latest version of Blockbench to do this.",
"action.export_bbmodel": "Export Blockbench Project",
"action.export_bbmodel.desc": "Export a Blockbench project with all cubes, textures and animations",
"action.export_bbmodel": "Save Project",
"action.export_bbmodel.desc": "Save a Blockbench project with all cubes, textures and animations",
"action.export_asset_archive": "Download Archive",
"action.export_asset_archive.desc": "Download an archive with the model and all textures in it",
"action.upload_sketchfab": "Sketchfab Upload",
"message.sketchfab.name_or_token": "Please enter your Sketchfab token and a name",
"dialog.sketchfab_uploader.title": "Upload Sketchfab Model",
"dialog.sketchfab_uploader.token": "API Token",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on sketchfab.com/settings/password",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on %0",
"dialog.sketchfab_uploader.name": "Model Name",
"dialog.sketchfab_uploader.description": "Description",
"dialog.sketchfab_uploader.tags": "Tags",
@ -894,10 +896,18 @@
"edit_session.join": "Join Session",
"edit_session.create": "Create Session",
"edit_session.quit": "Quit Session",
"edit_session.joined": "User %0 joined the session",
"edit_session.left": "User %0 left the session",
"edit_session.joined": "%0 joined the session",
"edit_session.left": "%0 left the session",
"edit_session.quit_session": "Left current session",
"edit_session.status": "Status",
"edit_session.hosting": "Hosting",
"edit_session.connected": "Connected to a session"
"edit_session.connected": "Connected to a session",
"dialog.sketchfab_uploader.private": "Private (Pro)",
"dialog.sketchfab_uploader.password": "Password (Pro)",
"action.toggle_chat": "Toggle Chat",
"action.toggle_chat.desc": "Toggle the visibility of the chat history",
"action.uv_select_all": "Select All",
"action.uv_select_all.desc": "Select all faces in the UV dialog",
"panel.chat": "Chat",
"edit_session.welcome": "Welcome to this session by %0"
}

View File

@ -817,7 +817,9 @@
"action.open_backup_folder": "Open Backup Folder",
"action.open_backup_folder.desc": "Opens the Blockbench backup folder",
"switches.mirror": "Mirror UV",
"language_name": "English",
"Name of the Language you are editing, NOT English": {
"language_name": "Français"
},
"message.plugin_reload": "Reloaded %0 local plugins",
"settings.brightness": "Brightness",
"settings.brightness.desc": "Brightness of the preview. Default is 50",
@ -848,15 +850,15 @@
"action.next_keyframe.desc": "Jump to the next keyframe",
"message.outdated_client.title": "Outdated client",
"message.outdated_client.message": "Please update to the latest version of Blockbench to do this.",
"action.export_bbmodel": "Export Blockbench Project",
"action.export_bbmodel.desc": "Export a Blockbench project with all cubes, textures and animations",
"action.export_bbmodel": "Save Project",
"action.export_bbmodel.desc": "Save a Blockbench project with all cubes, textures and animations",
"action.export_asset_archive": "Download Archive",
"action.export_asset_archive.desc": "Download an archive with the model and all textures in it",
"action.upload_sketchfab": "Sketchfab Upload",
"message.sketchfab.name_or_token": "Please enter your Sketchfab token and a name",
"dialog.sketchfab_uploader.title": "Upload Sketchfab Model",
"dialog.sketchfab_uploader.token": "API Token",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on sketchfab.com/settings/password",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on %0",
"dialog.sketchfab_uploader.name": "Model Name",
"dialog.sketchfab_uploader.description": "Description",
"dialog.sketchfab_uploader.tags": "Tags",
@ -894,10 +896,18 @@
"edit_session.join": "Join Session",
"edit_session.create": "Create Session",
"edit_session.quit": "Quit Session",
"edit_session.joined": "User %0 joined the session",
"edit_session.left": "User %0 left the session",
"edit_session.joined": "%0 joined the session",
"edit_session.left": "%0 left the session",
"edit_session.quit_session": "Left current session",
"edit_session.status": "Status",
"edit_session.hosting": "Hosting",
"edit_session.connected": "Connected to a session"
"edit_session.connected": "Connected to a session",
"dialog.sketchfab_uploader.private": "Private (Pro)",
"dialog.sketchfab_uploader.password": "Password (Pro)",
"action.toggle_chat": "Toggle Chat",
"action.toggle_chat.desc": "Toggle the visibility of the chat history",
"action.uv_select_all": "Select All",
"action.uv_select_all.desc": "Select all faces in the UV dialog",
"panel.chat": "Chat",
"edit_session.welcome": "Welcome to this session by %0"
}

View File

@ -817,7 +817,9 @@
"action.open_backup_folder": "Otwórz folder kopii zapasowej",
"action.open_backup_folder.desc": "Otwórz folder kopii zapasowej BlockBench",
"switches.mirror": "Lustro UV",
"language_name": "Polski",
"Name of the Language you are editing, NOT English": {
"language_name": "Polski"
},
"message.plugin_reload": "Reloaded %0 local plugins",
"settings.brightness": "Brightness",
"settings.brightness.desc": "Brightness of the preview. Default is 50",
@ -848,15 +850,15 @@
"action.next_keyframe.desc": "Jump to the next keyframe",
"message.outdated_client.title": "Outdated client",
"message.outdated_client.message": "Please update to the latest version of Blockbench to do this.",
"action.export_bbmodel": "Export Blockbench Project",
"action.export_bbmodel.desc": "Export a Blockbench project with all cubes, textures and animations",
"action.export_bbmodel": "Save Project",
"action.export_bbmodel.desc": "Save a Blockbench project with all cubes, textures and animations",
"action.export_asset_archive": "Pobier Archiv",
"action.export_asset_archive.desc": "Download an archive with the model and all textures in it",
"action.upload_sketchfab": "Sketchfab Upload",
"message.sketchfab.name_or_token": "Please enter your Sketchfab token and a name",
"dialog.sketchfab_uploader.title": "Upload Sketchfab Model",
"dialog.sketchfab_uploader.token": "API Token",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on sketchfab.com/settings/password",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on %0",
"dialog.sketchfab_uploader.name": "Model Name",
"dialog.sketchfab_uploader.description": "Description",
"dialog.sketchfab_uploader.tags": "Tags",
@ -894,10 +896,18 @@
"edit_session.join": "Join Session",
"edit_session.create": "Create Session",
"edit_session.quit": "Quit Session",
"edit_session.joined": "User %0 joined the session",
"edit_session.left": "User %0 left the session",
"edit_session.joined": "%0 joined the session",
"edit_session.left": "%0 left the session",
"edit_session.quit_session": "Left current session",
"edit_session.status": "Status",
"edit_session.hosting": "Hosting",
"edit_session.connected": "Connected to a session"
"edit_session.connected": "Connected to a session",
"dialog.sketchfab_uploader.private": "Private (Pro)",
"dialog.sketchfab_uploader.password": "Password (Pro)",
"action.toggle_chat": "Toggle Chat",
"action.toggle_chat.desc": "Toggle the visibility of the chat history",
"action.uv_select_all": "Select All",
"action.uv_select_all.desc": "Select all faces in the UV dialog",
"panel.chat": "Chat",
"edit_session.welcome": "Welcome to this session by %0"
}

File diff suppressed because it is too large Load Diff

View File

@ -805,19 +805,21 @@
"status_bar.recording_gif": "Запись GIF",
"status_bar.processing_gif": "Обработка GIF",
"settings.backup_retain": "Продолжительность хранения автосохранений",
"settings.backup_retain.desc": "Set how long Blockbench retains old backups in days",
"settings.backup_retain.desc": "Установить как долго Blockbench хранит автосохранения",
"action.rotate_tool": "Вращать",
"action.rotate_tool.desc": "Tool to select and rotate elements",
"action.fill_tool": "Paint Bucket",
"action.rotate_tool.desc": "Инструмент для выбора и поворота элементов",
"action.fill_tool": "Заполнение",
"action.fill_tool.desc": "Paint bucket to fill entire faces with one color",
"action.eraser": "Ластик",
"action.eraser.desc": "Eraser tool to replace colors on a texture with transparency",
"action.color_picker": "Выбор цвета",
"action.color_picker.desc": "Tool to pick the color of pixels on your texture",
"action.color_picker.desc": "Инструмент для выбора цвета пикселей на Вашей текстуре",
"action.open_backup_folder": "Открыть папку автосохранений",
"action.open_backup_folder.desc": "Opens the Blockbench backup folder",
"switches.mirror": "Mirror UV",
"language_name": "Английский",
"action.open_backup_folder.desc": "Открыть папку автосохранений Blockbench",
"switches.mirror": "Зеркалить UV",
"Name of the Language you are editing, NOT English": {
"language_name": "English"
},
"message.plugin_reload": "Перезагружено %0 локальных плагинов",
"settings.brightness": "Яркость",
"settings.brightness.desc": "Яркость дисплея. 50 по умолчанию",
@ -827,77 +829,85 @@
"action.fill_mode.face": "Грань",
"action.fill_mode.color": "Цвет",
"action.fill_mode.cube": "Куб",
"action.toggle_mirror_uv": "Mirror UV",
"action.toggle_mirror_uv": "Зеркалить UV",
"action.toggle_mirror_uv.desc": "Toggle the UV mirroring on the X axis of the selected cubes.",
"action.toggle_uv_overlay": "Toggle UV Overlay",
"action.toggle_uv_overlay": "Переключить слой UV",
"action.toggle_uv_overlay.desc": "When enabled, displays all UV mapping overlays above the texture.",
"menu.texture.blank": "Apply to Untextured Faces",
"dialog.scale.select_overflow": "Select Overflow",
"dialog.create_texture.compress": "Сжать шаблон",
"action.action_control": "Контроль действий",
"action.action_control.desc": "Search and execute any available action",
"keybindings.recording": "Recording Keybinding",
"action.action_control.desc": "Найти и выполнить любое доступное действие",
"keybindings.recording": "Запись",
"keybindings.press": "Press a key or key combination or click anywhere on the screen to record your keybinding.",
"action.pivot_tool": "Pivot Tool",
"action.pivot_tool.desc": "Tool to change the pivot point of cubes and bones",
"action.pivot_tool": "Инструмент центра поворота",
"action.pivot_tool.desc": "Инструмент для изменения центра поворота кубов и костей",
"action.slider_animation_speed": "Скорость воспроизведения",
"action.slider_animation_speed.desc": "Playback speed of the timeline in percent",
"action.slider_animation_speed.desc": "Скороть воспроизвеления в процентах",
"action.previous_keyframe": "Предыдущий кадр",
"action.previous_keyframe.desc": "Jump to the previous keyframe",
"action.previous_keyframe.desc": "Перейти к прошлому кадру",
"action.next_keyframe": "Следующий кадр",
"action.next_keyframe.desc": "Jump to the next keyframe",
"message.outdated_client.title": "Outdated client",
"message.outdated_client.message": "Please update to the latest version of Blockbench to do this.",
"action.export_bbmodel": "Export Blockbench Project",
"action.export_bbmodel.desc": "Export a Blockbench project with all cubes, textures and animations",
"action.export_asset_archive": "Download Archive",
"action.export_asset_archive.desc": "Download an archive with the model and all textures in it",
"action.upload_sketchfab": "Sketchfab Upload",
"message.sketchfab.name_or_token": "Please enter your Sketchfab token and a name",
"dialog.sketchfab_uploader.title": "Upload Sketchfab Model",
"dialog.sketchfab_uploader.token": "API Token",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on sketchfab.com/settings/password",
"dialog.sketchfab_uploader.name": "Model Name",
"dialog.sketchfab_uploader.description": "Description",
"action.next_keyframe.desc": "Перейти к следующему кадру",
"message.outdated_client.title": "Устаревший клиент",
"message.outdated_client.message": "Пожалуйста, обновите Blockbench до последней версии чтобы выполнить это действие.",
"action.export_bbmodel": "Экспортировать проект Blockbench",
"action.export_bbmodel.desc": "Экспортировать проект Blockbench со всеми кубами, текстурами и анимациями",
"action.export_asset_archive": "Скачать Архив",
"action.export_asset_archive.desc": "Скачать архив с моделью и текстурами",
"action.upload_sketchfab": "Загрузка Sketchfab",
"message.sketchfab.name_or_token": "Пожалуйста, введите ваше имя Sketchfab и ваш ключ",
"dialog.sketchfab_uploader.title": "Загрузить модель на Sketchfab",
"dialog.sketchfab_uploader.token": "Ключ API",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on %0",
"dialog.sketchfab_uploader.name": "Название модели",
"dialog.sketchfab_uploader.description": "Описание",
"dialog.sketchfab_uploader.tags": "Тэги",
"settings.sketchfab_token": "Ключ Скетчфаб",
"settings.sketchfab_token.desc": "Token to authorize Blockbench to upload to your Sketchfab account",
"panel.color": "Цвет",
"data.origin": "Центр поворота",
"message.sketchfab.success": "Uploaded model successfully",
"message.sketchfab.error": "Failed to upload model to Sketchfab",
"settings.outliner_colors": "Outliner Colors",
"settings.outliner_colors.desc": "Display cube colors in the outliner",
"action.upload_sketchfab.desc": "Upload your model to Sketchfab",
"message.sketchfab.success": "Загрузка модели прошла успешно",
"message.sketchfab.error": "Не удалось загрузить модель на Sketchfab",
"settings.outliner_colors": "Цвета Элементов",
"settings.outliner_colors.desc": "Показывать цвета элементов в списке элементов",
"action.upload_sketchfab.desc": "Загрузите Вашу модель на Sketchfab",
"action.element_colors": "Цвета кубов",
"action.element_colors.desc": "Show cube colors in the outliner",
"action.element_colors.desc": "Показывать цвета кубов в списке элементов",
"texture.error.file": "Файл не найден",
"texture.error.invalid": "Invalid file",
"texture.error.ratio": "Invalid aspect ratio",
"texture.error.parent": "Texture file provided by parent model",
"message.recover_backup.title": "Recover Model",
"message.recover_backup.message": "Blockbench was closed without saving. Do you want to recover the model?",
"message.install_plugin": "Installing the plugin %0",
"message.invalid_session.title": "Invalid Session Token",
"message.invalid_session.message": "The session you are trying to join has expired or the token provided is invalid.",
"dialog.create_texture.power": "Power-of-2 Size",
"dialog.create_gif.turn": "Turntable Speed",
"action.edit_session": "Edit Session...",
"action.edit_session.desc": "Connect to an edit session to collaborate with other users",
"action.reset_keyframe": "Reset Keyframe",
"action.reset_keyframe.desc": "Reset all values of the selected keyframes",
"panel.options.origin": "Origin",
"dialog.edit_session.title": "Edit Session",
"edit_session.username": "Username",
"edit_session.token": "Token",
"edit_session.about": "Edit Sessions can be used to collaborate on models across the internet. Create a session and copy the token and send it to friends, who can then use it to join.",
"edit_session.join": "Join Session",
"edit_session.create": "Create Session",
"edit_session.quit": "Quit Session",
"edit_session.joined": "User %0 joined the session",
"edit_session.left": "User %0 left the session",
"edit_session.quit_session": "Left current session",
"edit_session.status": "Status",
"edit_session.hosting": "Hosting",
"edit_session.connected": "Connected to a session"
"texture.error.invalid": "Неверный файл",
"texture.error.ratio": "Неверное соотношение сторон",
"texture.error.parent": "Текстура предоставлена родительской моделью",
"message.recover_backup.title": "Восстановить модель",
"message.recover_backup.message": "Blockbench был закрыт без сохранения. Вы хотите восстановить модель?",
"message.install_plugin": "Установка плагина %0",
"message.invalid_session.title": "Неверный ключ сеанса",
"message.invalid_session.message": "Сеанс к которому вы пытаетесь подключиться истек или ваш ключ не правильный.",
"dialog.create_texture.power": "Размер второй степени",
"dialog.create_gif.turn": "Скорость поворота камеры",
"action.edit_session": "Сеанс Редактирования...",
"action.edit_session.desc": "Присоединиться к сеансу редактирования для коллаборации с другими пользователями",
"action.reset_keyframe": "Сбросить кадр",
"action.reset_keyframe.desc": "Сбросить все значения выбранных кадров",
"panel.options.origin": "Центр поворота",
"dialog.edit_session.title": "Сеанс Редактирования",
"edit_session.username": "Имя пользователя",
"edit_session.token": "Ключ",
"edit_session.about": "Сеансы редактирования могут быть использованы для коллаборации по интернету. Создайте сеанс, скопируйте его ключ и отправьте его Вашим друзьям, которые могут воспользоваться им чтобы присоединиться.",
"edit_session.join": "Присоединиться к сеансу",
"edit_session.create": "Создать сеанс",
"edit_session.quit": "Покинуть сеанс",
"edit_session.joined": "Пользователь %0 присоединился к сеансу",
"edit_session.left": "Ползователь %0 покинул сеанс",
"edit_session.quit_session": "Покинул текущий сеанс",
"edit_session.status": "Статус",
"edit_session.hosting": "Хост",
"edit_session.connected": "Подключен к сеансу",
"dialog.sketchfab_uploader.private": "Private (Pro)",
"dialog.sketchfab_uploader.password": "Password (Pro)",
"action.toggle_chat": "Toggle Chat",
"action.toggle_chat.desc": "Toggle the visibility of the chat history",
"action.uv_select_all": "Select All",
"action.uv_select_all.desc": "Select all faces in the UV dialog",
"panel.chat": "Chat",
"edit_session.welcome": "Welcome to this session by %0"
}

View File

@ -207,7 +207,7 @@
"settings.category.general": "Allmän",
"settings.category.preview": "Förhansvisning",
"settings.category.grid": "Rutnät",
"settings.category.edit": "Ändra",
"settings.category.edit": "Redigera",
"settings.category.snapping": "Snäppning",
"settings.category.defaults": "Standarder",
"settings.category.dialogs": "Dialoger",
@ -286,7 +286,7 @@
"category.tools": "Verktyg",
"category.file": "Fil",
"category.blockbench": "Blockbench",
"category.edit": "Ändra",
"category.edit": "Redigera",
"category.transform": "Omvandla",
"category.filter": "Filter",
"category.view": "Visa",
@ -335,13 +335,13 @@
"action.background_color": "Bakgrundsfärg",
"action.background_color.desc": "Bakgrundsfärg på den skapade texturen",
"action.uv_slider_pos_x": "Flytta horisontellt",
"action.uv_slider_pos_x.desc": "Flytta UV-valet av alla valda kuber horisontellt",
"action.uv_slider_pos_x.desc": "Flytta UV valet av alla valda kuber horisontellt",
"action.uv_slider_pos_y": "Flytta vertikalt",
"action.uv_slider_pos_y.desc": "Flytta UV-valet av alla valda kuber vertikalt",
"action.uv_slider_pos_y.desc": "Flytta UV valet av alla valda kuber vertikalt",
"action.uv_slider_size_x": "Skala horisontellt",
"action.uv_slider_size_x.desc": "Skala UV-valet av alla valda kuber horisontellt",
"action.uv_slider_size_x.desc": "Skala UV valet av alla valda kuber horisontellt",
"action.uv_slider_size_y": "Skala vertikalt",
"action.uv_slider_size_y.desc": "Skala UV-valet av alla valda kuber vertikalt",
"action.uv_slider_size_y.desc": "Skala UV valet av alla valda kuber vertikalt",
"action.vertex_snap_mode": "Snäppläge",
"action.vertex_snap_mode.desc": "Välj om Vertex Snap flyttar element till det valda läget eller ändrar dem",
"action.move_tool": "Flytta",
@ -349,13 +349,13 @@
"action.resize_tool": "Ändra storlek",
"action.resize_tool.desc": "Verktyg för att ändra storlek på element",
"action.brush_tool": "Målarpensel",
"action.brush_tool.desc": "Verktyg att måla på bitmaptexturer på ytor eller UV-redigeraren.",
"action.brush_tool.desc": "Verktyg att måla på bitmaptexturer på ytor eller UV redigeraren.",
"action.vertex_snap_tool": "Vortex Snap",
"action.vertex_snap_tool.desc": "Flytta en kub till en annan kub genom att koppla samman två hörn.",
"action.swap_tools": "Byt verktyg",
"action.swap_tools.desc": "Växla mellan flytt och storleks verktygen",
"action.project_window": "Projekt...",
"action.project_window.desc": "Öppnar projektfönstret, där du kan ändra metadata för din modell",
"action.project_window.desc": "Öppnar projektfönstret, där du kan redigera metadata för din modell",
"action.new_block_model": "Ny modell",
"action.new_block_model.desc": "Skapar ett nytt block/objektmodell",
"action.new_entity_model": "Ny enititymodell",
@ -375,7 +375,7 @@
"action.export_optifine_full": "Exportera OptiFine JEM",
"action.export_optifine_full.desc": "Exportera en hel OptiFine enititymodell",
"action.export_obj": "Exportera OBJ modell",
"action.export_obj.desc": "Exportera en Wavefront OBJ modell för användning i andra program eller för att ladda upp till Sketchfab",
"action.export_obj.desc": "Exportera en Wavefront OBJ modell för rendering eller spelmotorer",
"action.save": "Spara",
"action.save.desc": "Spara nuvarande modell och texturer",
"action.settings_window": "Inställningar...",
@ -399,9 +399,9 @@
"action.reload_plugins": "Ladda om plugins",
"action.reload_plugins.desc": "Ladda om alla utvecklingsplugins",
"action.uv_dialog": "UV fönster",
"action.uv_dialog.desc": "Öppna UV-dialogen för att se alla ytor bredvid varandra",
"action.uv_dialog.desc": "Öppna UV dialogen för att se alla ytor bredvid varandra",
"action.uv_dialog_full": "Full vy",
"action.uv_dialog_full.desc": "Öppna UV-dialogen för att ändra en yta i helskärm",
"action.uv_dialog_full.desc": "Öppna UV dialogen för att redigera en yta i helskärm",
"action.undo": "Ångra",
"action.undo.desc": "Ångrar den senaste ändringen",
"action.redo": "Gör om",
@ -467,7 +467,7 @@
"action.toggle_export": "Växla export",
"action.toggle_export.desc": "Växla exportinställningarna för de valda kuberna.",
"action.toggle_autouv": "Växla Auto UV",
"action.toggle_autouv.desc": "Växla Auto UV-inställningar för de valda kuberna.",
"action.toggle_autouv.desc": "Växla Auto UV inställningar för de valda kuberna.",
"action.toggle_shade": "Växla skuggning",
"action.toggle_shade.desc": "Växla skuggningen för de valda kuberna.",
"action.rename": "Byt namn",
@ -485,7 +485,7 @@
"action.reset_interface": "Återställ gränssnitt",
"action.reset_interface.desc": "Återställ storlek och positioner för GUI",
"action.toggle_wireframe": "Växla wireframe",
"action.toggle_wireframe.desc": "Byt skärmsläge för wireframe.",
"action.toggle_wireframe.desc": "Växla skärmsläge för wireframe.",
"action.screenshot_model": "Skärmbildsmodell",
"action.screenshot_model.desc": "Ta en klippt skärmbild av modellen från den nuvarande vinkeln.",
"action.screenshot_app": "Skärmbildsapp",
@ -511,7 +511,7 @@
"action.reload": "Labba om Blockbench",
"action.reload.desc": "Ladda om Blockbench. Detta tar bort alla osparade framsteg.",
"menu.file": "Fil",
"menu.edit": "Ändra",
"menu.edit": "Redigera",
"menu.transform": "Transformera",
"menu.filter": "Filter",
"menu.display": "Visa",
@ -544,7 +544,7 @@
"menu.texture.refresh": "Ladda om",
"menu.texture.change": "Ändra fil",
"menu.texture.folder": "Öppna i mapp",
"menu.texture.edit": "Ändra",
"menu.texture.edit": "Redigera",
"menu.texture.export": "Spara som",
"menu.texture.save": "Spara",
"menu.texture.properties": "Egenskaper",
@ -638,7 +638,7 @@
"dialog.update.latest": "Senaste version",
"dialog.update.installed": "Installerad version",
"dialog.update.update": "Uppdatera",
"action.brush_mode.brush": "Pensel",
"action.brush_mode.brush": "Rund",
"action.brush_mode.noise": "Brus",
"action.vertex_snap_mode.move": "Flytta",
"action.vertex_snap_mode.scale": "Skala",
@ -743,7 +743,7 @@
"action.export_animation_file": "Exportera animationer",
"action.export_animation_file.desc": "Exportera en json fil med den nuvarande animationen",
"action.slider_keyframe_time": "Tidskod",
"action.slider_keyframe_time.desc": "Ändra tidskoden för de valda nyckelramarna",
"action.slider_keyframe_time.desc": "Ändra tidskoden för de valda keyframes",
"timeline.rotation": "Rotation",
"timeline.position": "Position",
"timeline.scale": "Skala",
@ -781,123 +781,133 @@
"panel.variable_placeholders": "Platshållare variabel",
"panel.variable_placeholders.info": "Ange de variabler du vill förhandsgranska via namn=värde",
"status_bar.vertex_distance": "Distans: %0",
"dialog.create_gif.title": "Record GIF",
"dialog.create_gif.length": "Length (Seconds)",
"dialog.create_gif.title": "Spela in GIF",
"dialog.create_gif.length": "Längd (Sekunder)",
"dialog.create_gif.fps": "FPS",
"dialog.create_gif.compression": "Compression Amount",
"dialog.create_gif.play": "Start Animation",
"dialog.create_gif.compression": "Kompressionsstorlek",
"dialog.create_gif.play": "Starta animationen",
"category.animation": "Animation",
"action.record_model_gif": "Record GIF",
"action.record_model_gif.desc": "Record an animated GIF of the model from the current angle",
"display.mirror": "Mirror",
"action.record_model_gif": "Spela in GIF",
"action.record_model_gif.desc": "Spela in en animerad GIF av modellen från den nuvarande vinkeln",
"display.mirror": "Spegla",
"data.separator": "Seperator",
"message.set_background_position.title": "Background Position",
"menu.preview.background.set_position": "Set Position",
"dialog.toolbar_edit.hidden": "Hidden",
"action.export_class_entity": "Export Java Entity",
"action.export_class_entity.desc": "Export the entity model as a Java class",
"settings.seethrough_outline": "X-Ray Outlines",
"settings.seethrough_outline.desc": "Show outlines through objects",
"mode.edit": "Edit",
"mode.paint": "Paint",
"mode.display": "Display",
"mode.animate": "Animate",
"status_bar.recording_gif": "Recording GIF",
"status_bar.processing_gif": "Processing GIF",
"settings.backup_retain": "Backup Retain Duration",
"settings.backup_retain.desc": "Set how long Blockbench retains old backups in days",
"action.rotate_tool": "Rotate",
"action.rotate_tool.desc": "Tool to select and rotate elements",
"action.fill_tool": "Paint Bucket",
"action.fill_tool.desc": "Paint bucket to fill entire faces with one color",
"action.eraser": "Eraser",
"action.eraser.desc": "Eraser tool to replace colors on a texture with transparency",
"action.color_picker": "Color Picker",
"action.color_picker.desc": "Tool to pick the color of pixels on your texture",
"action.open_backup_folder": "Open Backup Folder",
"action.open_backup_folder.desc": "Opens the Blockbench backup folder",
"switches.mirror": "Mirror UV",
"language_name": "English",
"message.plugin_reload": "Reloaded %0 local plugins",
"settings.brightness": "Brightness",
"settings.brightness.desc": "Brightness of the preview. Default is 50",
"menu.preview.perspective.reset": "Reset Camera",
"action.fill_mode": "Fill Mode",
"action.fill_mode.desc": "Mode of the fill tool",
"action.fill_mode.face": "Face",
"action.fill_mode.color": "Color",
"action.fill_mode.cube": "Cube",
"action.toggle_mirror_uv": "Mirror UV",
"action.toggle_mirror_uv.desc": "Toggle the UV mirroring on the X axis of the selected cubes.",
"action.toggle_uv_overlay": "Toggle UV Overlay",
"action.toggle_uv_overlay.desc": "When enabled, displays all UV mapping overlays above the texture.",
"menu.texture.blank": "Apply to Untextured Faces",
"dialog.scale.select_overflow": "Select Overflow",
"dialog.create_texture.compress": "Compress Template",
"action.action_control": "Action Control",
"action.action_control.desc": "Search and execute any available action",
"keybindings.recording": "Recording Keybinding",
"keybindings.press": "Press a key or key combination or click anywhere on the screen to record your keybinding.",
"action.pivot_tool": "Pivot Tool",
"action.pivot_tool.desc": "Tool to change the pivot point of cubes and bones",
"action.slider_animation_speed": "Playback Speed",
"action.slider_animation_speed.desc": "Playback speed of the timeline in percent",
"action.previous_keyframe": "Previous Keyframe",
"action.previous_keyframe.desc": "Jump to the previous keyframe",
"action.next_keyframe": "Next Keyframe",
"action.next_keyframe.desc": "Jump to the next keyframe",
"message.outdated_client.title": "Outdated client",
"message.outdated_client.message": "Please update to the latest version of Blockbench to do this.",
"action.export_bbmodel": "Export Blockbench Project",
"action.export_bbmodel.desc": "Export a Blockbench project with all cubes, textures and animations",
"action.export_asset_archive": "Download Archive",
"action.export_asset_archive.desc": "Download an archive with the model and all textures in it",
"action.upload_sketchfab": "Sketchfab Upload",
"message.sketchfab.name_or_token": "Please enter your Sketchfab token and a name",
"dialog.sketchfab_uploader.title": "Upload Sketchfab Model",
"message.set_background_position.title": "Bakgrundsposition",
"menu.preview.background.set_position": "Sätt position",
"dialog.toolbar_edit.hidden": "Gömd",
"action.export_class_entity": "Exportera Java Entity",
"action.export_class_entity.desc": "Exportera entitymodellen som en Java klass",
"settings.seethrough_outline": "Röntgenkonturer",
"settings.seethrough_outline.desc": "Visa konturer genom objekt",
"mode.edit": "Redigera",
"mode.paint": "Måla",
"mode.display": "Visa",
"mode.animate": "Animera",
"status_bar.recording_gif": "Spelar in GIF",
"status_bar.processing_gif": "Bearbetar GIF",
"settings.backup_retain": "Säkerhetskopierings varaktighet",
"settings.backup_retain.desc": "Ange hur länge Blockbench behåller gamla säkerhetskopior i dagar",
"action.rotate_tool": "Rotera",
"action.rotate_tool.desc": "Verktyg för att välja och rotera element",
"action.fill_tool": "Målarfärgsburk",
"action.fill_tool.desc": "Målarhink för att fylla hela ytor med en färg",
"action.eraser": "Suddgummi",
"action.eraser.desc": "Suddgummi för att ersätta färger på en textur med genomskinlighet",
"action.color_picker": "Färgväljare",
"action.color_picker.desc": "Verktyg för att välja färg på pixlar på din textur",
"action.open_backup_folder": "Öppna säkerhetskopieringsmappen",
"action.open_backup_folder.desc": "Öppnar säkerhetskopieringsmappen för Blockbench",
"switches.mirror": "Spegla UV",
"Name of the Language you are editing, NOT English": {
"language_name": "English"
},
"message.plugin_reload": "Uppdaterade %0 lokala plugins",
"settings.brightness": "Ljusstyrka",
"settings.brightness.desc": "Förhandsgranskningens ljusstyrka. Standard är 50",
"menu.preview.perspective.reset": "Återställ kamera",
"action.fill_mode": "Fyllningsläge",
"action.fill_mode.desc": "Fyllningsverktygets läge",
"action.fill_mode.face": "Yta",
"action.fill_mode.color": "Färg",
"action.fill_mode.cube": "Kub",
"action.toggle_mirror_uv": "Spegla UV",
"action.toggle_mirror_uv.desc": "Växla UV-spegling på X axeln för de valda kuberna.",
"action.toggle_uv_overlay": "Växla UV överlager",
"action.toggle_uv_overlay.desc": "När den är aktiverad visas alla UV kartläggningsöverlager ovanför texturen.",
"menu.texture.blank": "Applicera på otexturerade ytor",
"dialog.scale.select_overflow": "Välj överflöde",
"dialog.create_texture.compress": "Komprimera mall",
"action.action_control": "Åtgärdskontroll",
"action.action_control.desc": "Sök och kör alla tillgängliga åtgärder",
"keybindings.recording": "Spelar in tangentbindningar",
"keybindings.press": "Tryck på en knapp eller tangentkombination eller klicka någonstans på skärmen för att spela in din tangentbindning.",
"action.pivot_tool": "Pivotverktyg",
"action.pivot_tool.desc": "Verktyg för att ändra pivotpunkten för kuber och ben",
"action.slider_animation_speed": "Uppspelningshastighet",
"action.slider_animation_speed.desc": "Tidslinjens uppspelningshastighet i procent",
"action.previous_keyframe": "Föregående keyframe",
"action.previous_keyframe.desc": "Hoppa till föregående keyframen",
"action.next_keyframe": "Nästa keyframe",
"action.next_keyframe.desc": "Hoppa till nästa keyframe",
"message.outdated_client.title": "Utdaterad klient",
"message.outdated_client.message": "Vänligen uppdatera till den senaste versionen av Blockbench för att göra detta.",
"action.export_bbmodel": "Exportera Blockbench Project",
"action.export_bbmodel.desc": "Exportera ett Blockbench projekt med alla kuber, texturer och animeringar",
"action.export_asset_archive": "Hämta arkiv",
"action.export_asset_archive.desc": "Ladda ner ett arkiv med modellen och alla texturer i den",
"action.upload_sketchfab": "Sketchfab uppladdning",
"message.sketchfab.name_or_token": "Ange din Sketchfab token och ett namn",
"dialog.sketchfab_uploader.title": "Ladda upp Sketchfabmodell",
"dialog.sketchfab_uploader.token": "API Token",
"dialog.sketchfab_uploader.about_token": "The token is used to connect Blockbench to your Sketchfab account. You can find it on sketchfab.com/settings/password",
"dialog.sketchfab_uploader.name": "Model Name",
"dialog.sketchfab_uploader.description": "Description",
"dialog.sketchfab_uploader.about_token": "Token används för att ansluta Blockbench till ditt Sketchfab konto. Du kan hitta den på %0",
"dialog.sketchfab_uploader.name": "Modellnamn",
"dialog.sketchfab_uploader.description": "Beskrivning",
"dialog.sketchfab_uploader.tags": "Tags",
"settings.sketchfab_token": "Sketchfab Token",
"settings.sketchfab_token.desc": "Token to authorize Blockbench to upload to your Sketchfab account",
"panel.color": "Color",
"data.origin": "Origin",
"message.sketchfab.success": "Uploaded model successfully",
"message.sketchfab.error": "Failed to upload model to Sketchfab",
"settings.outliner_colors": "Outliner Colors",
"settings.outliner_colors.desc": "Display cube colors in the outliner",
"action.upload_sketchfab.desc": "Upload your model to Sketchfab",
"action.element_colors": "Cube Colors",
"action.element_colors.desc": "Show cube colors in the outliner",
"texture.error.file": "File not found",
"texture.error.invalid": "Invalid file",
"texture.error.ratio": "Invalid aspect ratio",
"texture.error.parent": "Texture file provided by parent model",
"settings.sketchfab_token": "Sketchfab token",
"settings.sketchfab_token.desc": "Token för att tillåta Blockbench att ladda upp till ditt Sketchfab konto",
"panel.color": "Färg",
"data.origin": "Ursprung",
"message.sketchfab.success": "Laddade upp modellen lyckat",
"message.sketchfab.error": "Det gick inte att ladda upp modellen till Sketchfab",
"settings.outliner_colors": "Kontur färger",
"settings.outliner_colors.desc": "Visa kubfärger i konturerna",
"action.upload_sketchfab.desc": "Ladda upp din modell till Sketchfab",
"action.element_colors": "Kubfärg",
"action.element_colors.desc": "Visa kubfärger i konturerna",
"texture.error.file": "Filen hittades inte",
"texture.error.invalid": "Ogiltig fil",
"texture.error.ratio": "Ogiltigt bildförhållande",
"texture.error.parent": "Texturfil försedd av modermodell",
"message.recover_backup.title": "Recover Model",
"message.recover_backup.message": "Blockbench was closed without saving. Do you want to recover the model?",
"message.install_plugin": "Installing the plugin %0",
"message.invalid_session.title": "Invalid Session Token",
"message.invalid_session.message": "The session you are trying to join has expired or the token provided is invalid.",
"dialog.create_texture.power": "Power-of-2 Size",
"dialog.create_gif.turn": "Turntable Speed",
"action.edit_session": "Edit Session...",
"action.edit_session.desc": "Connect to an edit session to collaborate with other users",
"action.reset_keyframe": "Reset Keyframe",
"action.reset_keyframe.desc": "Reset all values of the selected keyframes",
"panel.options.origin": "Origin",
"dialog.edit_session.title": "Edit Session",
"edit_session.username": "Username",
"message.recover_backup.message": "Blockbench stängdes utan att spara. Vill du återställa modellen?",
"message.install_plugin": "Installera plugin %0",
"message.invalid_session.title": "Ogiltig session token",
"message.invalid_session.message": "Den session du försöker gå med i har gått ut eller är den angivna token är ogiltig.",
"dialog.create_texture.power": "Upphöjt till 2 storlek",
"dialog.create_gif.turn": "Vridhastighet",
"action.edit_session": "Redigera session...",
"action.edit_session.desc": "Anslut till en redigeringssession för att samarbeta med andra användare",
"action.reset_keyframe": "Återställ keyframe",
"action.reset_keyframe.desc": "Återställ alla värden för de valda keyframes",
"panel.options.origin": "Ursprung",
"dialog.edit_session.title": "Redigera session",
"edit_session.username": "Användarnamn",
"edit_session.token": "Token",
"edit_session.about": "Edit Sessions can be used to collaborate on models across the internet. Create a session and copy the token and send it to friends, who can then use it to join.",
"edit_session.join": "Join Session",
"edit_session.create": "Create Session",
"edit_session.quit": "Quit Session",
"edit_session.joined": "User %0 joined the session",
"edit_session.left": "User %0 left the session",
"edit_session.quit_session": "Left current session",
"edit_session.about": "Redigeringssessioner kan användas för att samarbeta på modeller över hela internet. Skapa en session och kopiera din token och skicka den till vänner, som kan använda den för att gå med.",
"edit_session.join": "Gå med i sessionen",
"edit_session.create": "Skapa session",
"edit_session.quit": "Lämna session",
"edit_session.joined": "Användare %0 anslöt till sessionen",
"edit_session.left": "Användare %0 lämnade sessionen",
"edit_session.quit_session": "Lämna nuvarande session",
"edit_session.status": "Status",
"edit_session.hosting": "Hosting",
"edit_session.connected": "Connected to a session"
"edit_session.connected": "Ansluten till en session",
"dialog.sketchfab_uploader.private": "Private (Pro)",
"dialog.sketchfab_uploader.password": "Password (Pro)",
"action.toggle_chat": "Toggle Chat",
"action.toggle_chat.desc": "Toggle the visibility of the chat history",
"action.uv_select_all": "Select All",
"action.uv_select_all.desc": "Select all faces in the UV dialog",
"panel.chat": "Chat",
"edit_session.welcome": "Welcome to this session by %0"
}

2
lib/peer.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
{
"name": "Blockbench",
"description": "Minecraft Block Model Editor",
"version": "2.6.0",
"version": "2.6.5",
"license": "MIT",
"author": {
"name": "JannisX11",
@ -78,6 +78,6 @@
"devDependencies": {
"async": "^2.4.1",
"electron": "4.0.3",
"electron-builder": "^20.38.4"
"electron-builder": "^20.39.0"
}
}