Skip to content

Commit 150d6ad

Browse files
committed
🚧 Zip Export Modes
Added the option to export the Resource Pack and Data Pack as `.zip` files.
1 parent 41adae4 commit 150d6ad

14 files changed

+477
-285
lines changed

TODO.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
- [x] Apply variant keyframes in animations.
105105
- [x] Figure out how cameras will work.
106106
- [x] See how much swapping to a static list of UUIDs for selecting bones effects performance.
107+
- [x] Split up animation storage data command to avoid command length limit.
107108
- [ ] Check for references to non-existant functions in merged function tags, and remove them.
108109
- [ ] When applying variants, remove / replace any bones that have / had no elements with textured faces.
109110

@@ -138,4 +139,5 @@
138139

139140
- [ ] Add support for [block-display.com's API](https://wiki.block-display.com/api/get-api)
140141
- [ ] Add support for custom fonts in TextDisplays.
141-
- [ ] Add support and previewing for interaction entities.
142+
- [ ] Add support and previewing for interaction entity based locators.
143+
- [ ] Add support for previewing player skins on heads.

src/blueprintSettings.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import { Valuable } from './util/stores'
22

3+
export type ExportMode = 'raw' | 'zip' | 'none'
4+
35
export const defaultValues = {
46
export_namespace: 'blueprint',
57
show_bounding_box: false,
68
auto_bounding_box: true,
79
bounding_box: [48, 48],
810
// Export Settings
911
enable_plugin_mode: false,
10-
enable_resource_pack: true,
11-
enable_data_pack: true,
12+
resource_pack_export_mode: 'raw' as ExportMode,
13+
data_pack_export_mode: 'raw' as ExportMode,
1214
// Resource Pack Settings
1315
display_item: 'minecraft:white_dye',
1416
customModelDataOffset: 0,

src/components/blueprintSettingsDialog.svelte

Lines changed: 152 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@
1515
</script>
1616

1717
<script lang="ts">
18+
import Select from './dialogItems/select.svelte'
19+
1820
export let blueprintName: Valuable<string>
1921
export let textureSizeX: Valuable<number>
2022
export let textureSizeY: Valuable<number>
2123
// Export Settings
2224
export let exportNamespace: Valuable<string>
2325
export let enablePluginMode: Valuable<boolean>
24-
export let enableResourcePack: Valuable<boolean>
25-
export let enableDataPack: Valuable<boolean>
26+
export let resourcePackExportMode: Valuable<string>
27+
export let dataPackExportMode: Valuable<string>
2628
// Bounding Box
2729
export let showBoundingBox: Valuable<boolean>
2830
export let autoBoundingBox: Valuable<boolean>
@@ -305,6 +307,27 @@
305307
return { type: 'success', message: '' }
306308
}
307309
}
310+
311+
function zipChecker(value: string): { type: string; message: string } {
312+
switch (true) {
313+
case value === '':
314+
return {
315+
type: 'error',
316+
message: translate(
317+
'dialog.blueprint_settings.resource_pack_zip.error.no_file_selected',
318+
),
319+
}
320+
case fs.existsSync(value) && !fs.statSync(value).isFile():
321+
return {
322+
type: 'error',
323+
message: translate(
324+
'dialog.blueprint_settings.resource_pack_zip.error.not_a_file',
325+
),
326+
}
327+
default:
328+
return { type: 'success', message: '' }
329+
}
330+
}
308331
</script>
309332

310333
<div>
@@ -387,121 +410,151 @@
387410
valueChecker={jsonFileChecker}
388411
/>
389412
{:else}
390-
<Checkbox
391-
label={translate('dialog.blueprint_settings.enable_resource_pack.title')}
392-
tooltip={translate('dialog.blueprint_settings.enable_resource_pack.description')}
393-
bind:checked={enableResourcePack}
413+
<Select
414+
label={translate('dialog.blueprint_settings.resource_pack_export_mode.title')}
415+
tooltip={translate('dialog.blueprint_settings.resource_pack_export_mode.description')}
416+
options={{
417+
raw: translate('dialog.blueprint_settings.resource_pack_export_mode.options.raw'),
418+
zip: translate('dialog.blueprint_settings.resource_pack_export_mode.options.zip'),
419+
none: translate('dialog.blueprint_settings.resource_pack_export_mode.options.none'),
420+
}}
421+
defaultOption={'raw'}
422+
bind:value={resourcePackExportMode}
394423
/>
395-
<Checkbox
396-
label={translate('dialog.blueprint_settings.enable_data_pack.title')}
397-
tooltip={translate('dialog.blueprint_settings.enable_data_pack.description')}
398-
bind:checked={enableDataPack}
424+
425+
<Select
426+
label={translate('dialog.blueprint_settings.data_pack_export_mode.title')}
427+
tooltip={translate('dialog.blueprint_settings.data_pack_export_mode.description')}
428+
options={{
429+
raw: translate('dialog.blueprint_settings.data_pack_export_mode.options.raw'),
430+
zip: translate('dialog.blueprint_settings.data_pack_export_mode.options.zip'),
431+
none: translate('dialog.blueprint_settings.data_pack_export_mode.options.none'),
432+
}}
433+
defaultOption={'raw'}
434+
bind:value={dataPackExportMode}
399435
/>
400436

401-
{#if $enableResourcePack}
437+
{#if $resourcePackExportMode !== 'none'}
402438
<SectionHeader
403439
label={translate('dialog.blueprint_settings.resource_pack_settings.title')}
404440
/>
405-
<Checkbox
406-
label={translate(
407-
'dialog.blueprint_settings.enable_advanced_resource_pack_settings.title',
408-
)}
409-
bind:checked={enableAdvancedResourcePackSettings}
410-
/>
411-
{#if $enableAdvancedResourcePackSettings}
412-
<!-- -->
413-
<p class="warning">
414-
{translate('dialog.blueprint_settings.advanced_settings_warning')}
415-
</p>
416-
<LineInput
417-
label={translate('dialog.blueprint_settings.display_item.title')}
418-
tooltip={translate('dialog.blueprint_settings.display_item.description')}
419-
bind:value={displayItem}
420-
valueChecker={displayItemChecker}
421-
/>
422-
423-
<NumberSlider
424-
label={translate('dialog.blueprint_settings.custom_model_data_offset.title')}
425-
tooltip={translate(
426-
'dialog.blueprint_settings.custom_model_data_offset.description',
441+
{#if $resourcePackExportMode === 'raw'}
442+
<Checkbox
443+
label={translate(
444+
'dialog.blueprint_settings.enable_advanced_resource_pack_settings.title',
427445
)}
428-
bind:value={customModelDataOffset}
446+
bind:checked={enableAdvancedResourcePackSettings}
429447
/>
430-
448+
{#if $enableAdvancedResourcePackSettings}
449+
<p class="warning">
450+
{translate('dialog.blueprint_settings.advanced_settings_warning')}
451+
</p>
452+
<LineInput
453+
label={translate('dialog.blueprint_settings.display_item.title')}
454+
tooltip={translate('dialog.blueprint_settings.display_item.description')}
455+
bind:value={displayItem}
456+
valueChecker={displayItemChecker}
457+
/>
458+
459+
<NumberSlider
460+
label={translate(
461+
'dialog.blueprint_settings.custom_model_data_offset.title',
462+
)}
463+
tooltip={translate(
464+
'dialog.blueprint_settings.custom_model_data_offset.description',
465+
)}
466+
bind:value={customModelDataOffset}
467+
/>
468+
469+
<FileSelect
470+
label={translate('dialog.blueprint_settings.display_item_path.title')}
471+
tooltip={translate(
472+
'dialog.blueprint_settings.display_item_path.description',
473+
)}
474+
bind:value={displayItemPath}
475+
valueChecker={advancedResourcePackFileChecker}
476+
/>
477+
478+
<FolderSelect
479+
label={translate('dialog.blueprint_settings.model_folder.title')}
480+
tooltip={translate('dialog.blueprint_settings.model_folder.description')}
481+
bind:value={modelFolder}
482+
valueChecker={advancedResourcePackFolderChecker}
483+
/>
484+
485+
<FolderSelect
486+
label={translate('dialog.blueprint_settings.texture_folder.title')}
487+
tooltip={translate('dialog.blueprint_settings.texture_folder.description')}
488+
bind:value={textureFolder}
489+
valueChecker={advancedResourcePackFolderChecker}
490+
/>
491+
{:else}
492+
<LineInput
493+
label={translate('dialog.blueprint_settings.display_item.title')}
494+
tooltip={translate('dialog.blueprint_settings.display_item.description')}
495+
bind:value={displayItem}
496+
valueChecker={displayItemChecker}
497+
/>
498+
499+
<NumberSlider
500+
label={translate(
501+
'dialog.blueprint_settings.custom_model_data_offset.title',
502+
)}
503+
tooltip={translate(
504+
'dialog.blueprint_settings.custom_model_data_offset.description',
505+
)}
506+
bind:value={customModelDataOffset}
507+
min={0}
508+
max={2147483647}
509+
/>
510+
511+
<FolderSelect
512+
label={translate('dialog.blueprint_settings.resource_pack.title')}
513+
tooltip={translate('dialog.blueprint_settings.resource_pack.description')}
514+
bind:value={resourcePack}
515+
valueChecker={resourcePackFolderChecker}
516+
/>
517+
{/if}
518+
{:else if $resourcePackExportMode === 'zip'}
431519
<FileSelect
432-
label={translate('dialog.blueprint_settings.display_item_path.title')}
433-
tooltip={translate('dialog.blueprint_settings.display_item_path.description')}
434-
bind:value={displayItemPath}
435-
valueChecker={advancedResourcePackFileChecker}
436-
/>
437-
438-
<FolderSelect
439-
label={translate('dialog.blueprint_settings.model_folder.title')}
440-
tooltip={translate('dialog.blueprint_settings.model_folder.description')}
441-
bind:value={modelFolder}
442-
valueChecker={advancedResourcePackFolderChecker}
443-
/>
444-
445-
<FolderSelect
446-
label={translate('dialog.blueprint_settings.texture_folder.title')}
447-
tooltip={translate('dialog.blueprint_settings.texture_folder.description')}
448-
bind:value={textureFolder}
449-
valueChecker={advancedResourcePackFolderChecker}
450-
/>
451-
{:else}
452-
<LineInput
453-
label={translate('dialog.blueprint_settings.display_item.title')}
454-
tooltip={translate('dialog.blueprint_settings.display_item.description')}
455-
bind:value={displayItem}
456-
valueChecker={displayItemChecker}
457-
/>
458-
459-
<NumberSlider
460-
label={translate('dialog.blueprint_settings.custom_model_data_offset.title')}
461-
tooltip={translate(
462-
'dialog.blueprint_settings.custom_model_data_offset.description',
463-
)}
464-
bind:value={customModelDataOffset}
465-
min={0}
466-
max={2147483647}
467-
/>
468-
469-
<FolderSelect
470-
label={translate('dialog.blueprint_settings.resource_pack.title')}
471-
tooltip={translate('dialog.blueprint_settings.resource_pack.description')}
520+
label={translate('dialog.blueprint_settings.resource_pack_zip.title')}
521+
tooltip={translate('dialog.blueprint_settings.resource_pack_zip.description')}
472522
bind:value={resourcePack}
473-
valueChecker={resourcePackFolderChecker}
523+
valueChecker={zipChecker}
474524
/>
475525
{/if}
476526
{/if}
477527

478-
{#if $enableDataPack}
528+
{#if $dataPackExportMode !== 'none'}
479529
<SectionHeader
480530
label={translate('dialog.blueprint_settings.data_pack_settings.title')}
481531
/>
482-
<!-- <Checkbox
483-
label={translate(
484-
'dialog.blueprint_settings.enable_advanced_data_pack_settings.title',
485-
)}
486-
bind:checked={enableAdvancedDataPackSettings}
487-
/> -->
488-
{#if $enableAdvancedDataPackSettings}
489-
<p class="warning">
490-
{translate('dialog.blueprint_settings.advanced_settings_warning')}
491-
</p>
492-
493-
<FolderSelect
494-
label={translate('dialog.blueprint_settings.data_pack.title')}
495-
tooltip={translate('dialog.blueprint_settings.data_pack.description')}
496-
bind:value={dataPack}
497-
valueChecker={dataPackFolderChecker}
498-
/>
499-
{:else}
500-
<FolderSelect
501-
label={translate('dialog.blueprint_settings.data_pack.title')}
502-
tooltip={translate('dialog.blueprint_settings.data_pack.description')}
532+
{#if $dataPackExportMode === 'raw'}
533+
{#if $enableAdvancedDataPackSettings}
534+
<p class="warning">
535+
{translate('dialog.blueprint_settings.advanced_settings_warning')}
536+
</p>
537+
538+
<FolderSelect
539+
label={translate('dialog.blueprint_settings.data_pack.title')}
540+
tooltip={translate('dialog.blueprint_settings.data_pack.description')}
541+
bind:value={dataPack}
542+
valueChecker={dataPackFolderChecker}
543+
/>
544+
{:else}
545+
<FolderSelect
546+
label={translate('dialog.blueprint_settings.data_pack.title')}
547+
tooltip={translate('dialog.blueprint_settings.data_pack.description')}
548+
bind:value={dataPack}
549+
valueChecker={dataPackFolderChecker}
550+
/>
551+
{/if}
552+
{:else if $dataPackExportMode === 'zip'}
553+
<FileSelect
554+
label={translate('dialog.blueprint_settings.data_pack_zip.title')}
555+
tooltip={translate('dialog.blueprint_settings.data_pack_zip.description')}
503556
bind:value={dataPack}
504-
valueChecker={dataPackFolderChecker}
557+
valueChecker={zipChecker}
505558
/>
506559
{/if}
507560
<CodeInput
@@ -551,10 +604,4 @@
551604
font-size: 0.8em;
552605
margin-bottom: 8px;
553606
}
554-
/* .error {
555-
color: var(--color-error);
556-
font-family: var(--font-code);
557-
font-size: 0.8em;
558-
margin-bottom: 8px;
559-
} */
560607
</style>

0 commit comments

Comments
 (0)