Copy disabled (too large)
Download .txt
Showing preview only (12,703K chars total). Download the full file to get everything.
Repository: JannisX11/blockbench-plugins
Branch: master
Commit: 45b7b40961df
Files: 552
Total size: 12.0 MB
Directory structure:
gitextract_sf8c47uj/
├── .github/
│ ├── pull_request_template.md
│ └── workflows/
│ ├── plugin_updates.yml
│ └── validate.yml
├── .gitignore
├── .vscode/
│ └── settings.json
├── README.md
├── build/
│ ├── generate_plugin_updates.mjs
│ └── update_plugin_updates.mjs
├── package.json
├── plugins/
│ ├── _template/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── members.yml
│ │ └── plugin.js
│ ├── activity_tracker/
│ │ ├── about.md
│ │ ├── activity_tracker.js
│ │ └── changelog.json
│ ├── ambient_occlusion.js
│ ├── animated_java/
│ │ ├── about.md
│ │ ├── animated_java.js
│ │ ├── changelog.json
│ │ └── members.yml
│ ├── animated_platforms/
│ │ ├── about.md
│ │ └── animated_platforms.js
│ ├── animation_sliders/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── animation_sliders.js
│ │ └── members.yml
│ ├── animation_to_java.js
│ ├── animation_to_json.js
│ ├── animation_utils/
│ │ ├── README.md
│ │ ├── about.md
│ │ ├── animation_utils.js
│ │ ├── changelog.json
│ │ ├── members.yml
│ │ └── src/
│ │ ├── .eslintignore
│ │ ├── .eslintrc.cjs
│ │ ├── .gitignore
│ │ ├── .nvmrc
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── resources/
│ │ │ ├── armorTemplate.json
│ │ │ └── easing_keyframes.css
│ │ ├── scripts/
│ │ │ └── updateManifest.mjs
│ │ ├── tests/
│ │ │ └── easing.test.ts
│ │ ├── ts/
│ │ │ ├── animationUi.ts
│ │ │ ├── codec.ts
│ │ │ ├── constants.ts
│ │ │ ├── easing.ts
│ │ │ ├── events.ts
│ │ │ ├── index.ts
│ │ │ ├── keyframe.ts
│ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ ├── types/
│ │ │ └── blockbench-types.d.ts
│ │ └── webpack.config.js
│ ├── animator.js
│ ├── arcaniax_block_exporter.js
│ ├── armor_stand_animator.js
│ ├── asset_browser/
│ │ ├── about.md
│ │ ├── asset_browser.js
│ │ └── changelog.json
│ ├── azurelib_utils/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── azurelib_utils.js
│ │ ├── azurelib_utils.js.LICENSE.txt
│ │ ├── changelog.json
│ │ └── members.yml
│ ├── backup_viewer/
│ │ ├── about.md
│ │ ├── backup_viewer.js
│ │ └── changelog.json
│ ├── baked_ambient_occlusion/
│ │ ├── LICENSE.MD
│ │ ├── README.md
│ │ ├── about.md
│ │ ├── baked_ambient_occlusion.js
│ │ ├── members.yml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── types.d.ts
│ │ ├── tsconfig.json
│ │ └── webpack.config.js
│ ├── bakery.js
│ ├── bamo/
│ │ ├── bamo.js
│ │ └── src/
│ │ ├── .gitignore
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── BamoAdvancedProperties.vue
│ │ │ │ ├── BamoAdvancedTemplate.html
│ │ │ │ ├── BamoBaseComponent.vue
│ │ │ │ ├── ComponentTemplate.html
│ │ │ │ └── bamo.css
│ │ │ ├── main.js
│ │ │ └── util/
│ │ │ ├── Codec.js
│ │ │ ├── GenDataFiles.js
│ │ │ ├── GenStates.js
│ │ │ ├── OptionArrays.js
│ │ │ ├── Settings.js
│ │ │ └── Utils.js
│ │ └── webpack.config.js
│ ├── bbs_exporter/
│ │ ├── about.md
│ │ ├── bbs_exporter.js
│ │ └── changelog.json
│ ├── bedrock_block_transforms/
│ │ └── bedrock_block_transforms.js
│ ├── block_multi_collisions/
│ │ ├── LICENSE.md
│ │ ├── about.md
│ │ ├── block_multi_collisions.js
│ │ ├── changelog.json
│ │ └── members.yml
│ ├── blockmodels-exporter.js
│ ├── bone_view/
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── about.md
│ │ ├── bone_view.js
│ │ ├── changelog.json
│ │ └── members.yml
│ ├── brush.js
│ ├── brush_randomizer.js
│ ├── brush_tuna/
│ │ ├── about.md
│ │ ├── brush_tuna.js
│ │ ├── changelog.json
│ │ └── members.yml
│ ├── cameras.js
│ ├── cardinal.js
│ ├── cem_template_loader/
│ │ ├── about.md
│ │ ├── cem_template_loader.js
│ │ └── changelog.json
│ ├── clone_brush.js
│ ├── code_view.js
│ ├── collapsible_start_screen_categories.js
│ ├── colour_gradient_generator/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── colour_gradient_generator.js
│ ├── cosmic_reach_model_editor/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── cosmic_reach_model_editor.js
│ ├── creative_mode/
│ │ ├── LICENSE
│ │ ├── about.md
│ │ └── creative_mode.js
│ ├── csmodel.js
│ ├── cube_inverter.js
│ ├── custom_marker_colors.js
│ ├── datagen_export.js
│ ├── discord-rpc.js
│ ├── double_sided_cubes.js
│ ├── duplicate_renamer.js
│ ├── easings/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── easings.js
│ ├── emf_animation_addon/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ ├── emf_animation_addon.js
│ │ └── members.yml
│ ├── endimations_exporter.js
│ ├── expand_bone_timeline/
│ │ ├── about.md
│ │ └── expand_bone_timeline.js
│ ├── explorer/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── explorer.js
│ ├── export_to_3mf/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── export_to_3mf.js
│ │ ├── members.yml
│ │ └── src/
│ │ ├── compile.ts
│ │ ├── export_to_3mf.ts
│ │ └── validation.ts
│ ├── export_to_blender/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── export_to_blender.js
│ │ └── members.yml
│ ├── farsight/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── farsight.js
│ ├── figura_format/
│ │ ├── about.md
│ │ └── figura_format.js
│ ├── free_rotation/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ ├── free_rotation.js
│ │ └── members.yml
│ ├── geckolib/
│ │ ├── README.md
│ │ ├── about.md
│ │ ├── changelog.json
│ │ ├── geckolib.js
│ │ ├── members.yml
│ │ └── src/
│ │ ├── .eslintrc.cjs
│ │ ├── .gitignore
│ │ ├── .nvmrc
│ │ ├── eslint.config.js
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── resources/
│ │ │ ├── armorTemplate.json
│ │ │ └── easing_keyframes.css
│ │ ├── scripts/
│ │ │ └── updateManifest.mjs
│ │ ├── tests/
│ │ │ └── easing.test.ts
│ │ ├── ts/
│ │ │ ├── animationUi.ts
│ │ │ ├── codec.ts
│ │ │ ├── constants.ts
│ │ │ ├── easing.ts
│ │ │ ├── events.ts
│ │ │ ├── index.ts
│ │ │ ├── keyframe.ts
│ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ ├── types/
│ │ │ └── blockbench-types.d.ts
│ │ └── webpack.config.js
│ ├── geenium_bedrock_entity_helper.js
│ ├── gltf_importer/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── gltf_importer.js
│ │ ├── members.yml
│ │ └── src/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── patches/
│ │ │ └── blockbench-types+5.0.0-beta.0.patch
│ │ ├── plugin/
│ │ │ ├── GLTFLoader.js
│ │ │ ├── defer.ts
│ │ │ ├── global.d.ts
│ │ │ ├── import_gltf.ts
│ │ │ ├── parse_gltf.ts
│ │ │ ├── plugin.ts
│ │ │ ├── util.ts
│ │ │ └── vector_hash_map.ts
│ │ └── tsconfig.json
│ ├── grayscale_preview.js
│ ├── ground_plane_editor.js
│ ├── guessing_game.js
│ ├── highlight_generator.js
│ ├── hytale_avatar_loader/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── hytale_avatar_loader.js
│ ├── hytale_bridge/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── hytale_bridge.js
│ ├── hytale_hitbox_helper/
│ │ ├── about.md
│ │ └── hytale_hitbox_helper.js
│ ├── hytale_plugin/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── hytale_plugin.js
│ ├── image_centering.js
│ ├── java_block_sequencer/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ ├── java_block_sequencer.js
│ │ └── members.yml
│ ├── let_there_be_noise/
│ │ ├── about.md
│ │ └── let_there_be_noise.js
│ ├── light_tracer_uploader.js
│ ├── live_dev_reloader/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── live_dev_reloader.js
│ ├── mc_text_generator.js
│ ├── menu_icon_exporter/
│ │ ├── LICENSE.md
│ │ ├── about.md
│ │ └── menu_icon_exporter.js
│ ├── mesh_tools/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── mesh_tools.js
│ ├── meshy/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── changelog.json
│ │ ├── members.yml
│ │ └── meshy.js
│ ├── mimodel_format.js
│ ├── minecraft_block_wizard/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── minecraft_block_wizard.js
│ ├── minecraft_entity_wizard/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── minecraft_entity_wizard.js
│ ├── minecraft_item_wizard/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── minecraft_item_wizard.js
│ ├── minecraft_title_generator/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── minecraft_title_generator.js
│ ├── missing_texture_highlighter.js
│ ├── mod_utils.js
│ ├── modded_entity_fabric.js
│ ├── multi-layer.js
│ ├── no_java_limits/
│ │ ├── about.md
│ │ └── no_java_limits.js
│ ├── obj_animation_export.js
│ ├── oc_3dm_model.js
│ ├── optifine_player_models/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── optifine_player_models.js
│ ├── optimize.js
│ ├── outline_creator.js
│ ├── outliner_group_exporter/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── changelog.json
│ │ ├── members.yml
│ │ └── outliner_group_exporter.js
│ ├── pbr_preview/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── changelog.json
│ │ ├── members.yml
│ │ └── pbr_preview.js
│ ├── performance_audit.js
│ ├── pie_menu.js
│ ├── plaster.js
│ ├── player_statue_generator.js
│ ├── pluginstats.js
│ ├── preview_scene_customiser/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── preview_scene_customiser.js
│ ├── quick_box_uv_layout.js
│ ├── rainbow_road_game/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ └── rainbow_road_game.js
│ ├── reexport_on_save/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── members.yml
│ │ └── reexport_on_save.js
│ ├── reference_models/
│ │ └── reference_models.js
│ ├── repeat_it.js
│ ├── repeating_textures/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── members.yml
│ │ └── repeating_textures.js
│ ├── resource_pack_exporter.js
│ ├── resource_pack_utilities/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── resource_pack_utilities.js
│ ├── resourcepack_packager.js
│ ├── root_motion_extractor.js
│ ├── sam3dj.js
│ ├── scene_recorder/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── scene_recorder.js
│ ├── screencast_keys.js
│ ├── seat_position.js
│ ├── shape_generator.js
│ ├── shaper.js
│ ├── simplify.js
│ ├── skin_mirror.js
│ ├── skin_packager.js
│ ├── smudge_brush/
│ │ ├── LICENSE.MD
│ │ ├── members.yml
│ │ └── smudge_brush.js
│ ├── splash_art_customiser/
│ │ ├── about.md
│ │ └── splash_art_customiser.js
│ ├── startup_tips.js
│ ├── structure_importer.js
│ ├── texture_downscaler/
│ │ ├── LICENSE.MD
│ │ ├── about.md
│ │ ├── members.yml
│ │ └── texture_downscaler.js
│ ├── texture_filtering/
│ │ └── texture_filtering.js
│ ├── texture_stitcher/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ └── texture_stitcher.js
│ ├── threecore_exporter.js
│ ├── tint_preview.js
│ ├── translation_plane_gizmo/
│ │ ├── about.md
│ │ ├── changelog.json
│ │ ├── members.yml
│ │ └── translation_plane_gizmo.js
│ ├── transparency_fix.js
│ ├── tweaks_n_stuff/
│ │ ├── .vscode/
│ │ │ └── settings.json
│ │ ├── about.md
│ │ ├── changelog.json
│ │ ├── members.yml
│ │ ├── src/
│ │ │ ├── .prettierrc.json
│ │ │ ├── build.mjs
│ │ │ ├── package.json
│ │ │ ├── ts/
│ │ │ │ ├── constants.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lang/
│ │ │ │ │ ├── cz.json
│ │ │ │ │ ├── de.json
│ │ │ │ │ ├── en.json
│ │ │ │ │ ├── es.json
│ │ │ │ │ ├── fr.json
│ │ │ │ │ ├── it.json
│ │ │ │ │ ├── ja.json
│ │ │ │ │ ├── ko.json
│ │ │ │ │ ├── nl.json
│ │ │ │ │ ├── pl.json
│ │ │ │ │ ├── pt.json
│ │ │ │ │ ├── ru.json
│ │ │ │ │ ├── sv.json
│ │ │ │ │ ├── uk.json
│ │ │ │ │ ├── vi.json
│ │ │ │ │ ├── zh.json
│ │ │ │ │ └── zh_tw.json
│ │ │ │ ├── languages.ts
│ │ │ │ ├── mixins.ts
│ │ │ │ ├── tweaks/
│ │ │ │ │ ├── base.ts
│ │ │ │ │ ├── close_actions.ts
│ │ │ │ │ ├── header_color.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── pin_tab.ts
│ │ │ │ │ └── wrap_tabs.ts
│ │ │ │ └── utils.ts
│ │ │ ├── tsconfig.json
│ │ │ └── types/
│ │ │ └── tweaks_n_stuff.d.ts
│ │ └── tweaks_n_stuff.js
│ ├── utility_flaggers.js
│ ├── vintagestory_models.js
│ ├── vox_importer.js
│ ├── voxel_shape_fabric_generator.js
│ ├── voxel_shape_generator.js
│ ├── wasd_controls.js
│ └── workspaces/
│ ├── about.md
│ └── workspaces.js
├── plugins.json
├── schema.json
├── scripts/
│ └── validate.js
├── src/
│ ├── azurelib_utils/
│ │ ├── .eslintignore
│ │ ├── .eslintrc.json
│ │ ├── .gitignore
│ │ ├── .nvmrc
│ │ ├── LICENSE_Geckolib
│ │ ├── animation/
│ │ │ ├── azure-animation-tab.js
│ │ │ ├── azure-animation-ui.js
│ │ │ ├── azure-easing.js
│ │ │ ├── azure-ik.js
│ │ │ └── azure-keyframes.js
│ │ ├── core/
│ │ │ ├── azure-codec.js
│ │ │ ├── azure-settings.js
│ │ │ └── azure-utils.js
│ │ ├── index.js
│ │ ├── package.json
│ │ ├── templates/
│ │ │ └── armorTemplate.json
│ │ └── webpack.config.js
│ ├── easings/
│ │ ├── .gitignore
│ │ ├── .prettierrc
│ │ ├── README.md
│ │ ├── eslint.config.mjs
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── easings.ts
│ │ │ ├── index.ts
│ │ │ └── util.ts
│ │ └── tsconfig.json
│ ├── mesh_tools/
│ │ ├── .gitignore
│ │ ├── .vscode/
│ │ │ └── settings.json
│ │ ├── TODO.md
│ │ ├── assets/
│ │ │ ├── actions.json
│ │ │ ├── roboto_regular.json
│ │ │ └── xyz_presets.jsonc
│ │ ├── esbuild.js
│ │ ├── jsconfig.json
│ │ ├── meta/
│ │ │ └── changelog.json
│ │ ├── package.json
│ │ ├── plugins/
│ │ │ ├── about.plugin.js
│ │ │ └── about.rollup.plugin.js
│ │ └── src/
│ │ ├── actions.js
│ │ ├── generators/
│ │ │ ├── index.js
│ │ │ ├── quickprimitives/
│ │ │ │ ├── polyhedron.action.js
│ │ │ │ ├── quickprimitives.action.js
│ │ │ │ └── torusknot.action.js
│ │ │ ├── terrain.action.js
│ │ │ ├── terrain_style_editor.action.js
│ │ │ ├── text_mesh.action.js
│ │ │ └── xyz_math_surface_function.action.js
│ │ ├── global.d.ts
│ │ ├── globals.js
│ │ ├── index.js
│ │ ├── lib/
│ │ │ └── three-polyfills/
│ │ │ ├── BatchedMesh.js
│ │ │ └── Triangle.js
│ │ ├── operators/
│ │ │ ├── array_elements.action.js
│ │ │ ├── boolean.action.ts
│ │ │ ├── index.js
│ │ │ ├── scatter.action.js
│ │ │ ├── split_edges.action.js
│ │ │ └── subdivide.action.js
│ │ ├── shims/
│ │ │ └── three.shim.ts
│ │ ├── tools/
│ │ │ ├── bevel._action.js
│ │ │ ├── bridge_edge_loops.action.js
│ │ │ ├── expand_selection.action.js
│ │ │ ├── index.js
│ │ │ ├── laplacian_smooth.action.js
│ │ │ ├── poke.action.js
│ │ │ ├── shrink_selection.action.js
│ │ │ ├── to_sphere.action.js
│ │ │ ├── triangulate.action.js
│ │ │ ├── tris_to_quad.action.js
│ │ │ └── uv_mapping/
│ │ │ ├── uv_mapping.action.js
│ │ │ ├── uv_project_view.action.js
│ │ │ └── uv_turnaround_projection.action.js
│ │ └── utils/
│ │ ├── array.js
│ │ ├── docs.js
│ │ ├── facetype.js
│ │ ├── geometry.js
│ │ ├── info.js
│ │ ├── mesh/
│ │ │ └── neighborhood.js
│ │ ├── perlin.js
│ │ ├── storage.js
│ │ ├── terrain_gen.js
│ │ ├── threejs_interoperability.js
│ │ ├── utils.js
│ │ └── vector.js
│ ├── pbr_preview/
│ │ ├── .prettierignore
│ │ ├── .prettierrc
│ │ ├── changelog.mjs
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── constants.ts
│ │ │ ├── deps.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ ├── Lightr.ts
│ │ │ │ ├── MaterialBrush.ts
│ │ │ │ ├── PbrMaterials.ts
│ │ │ │ ├── actions/
│ │ │ │ │ ├── bakeTextures.ts
│ │ │ │ │ ├── channelAssignment.ts
│ │ │ │ │ ├── generateNormal.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── labPbr.ts
│ │ │ │ │ ├── materialTexture.ts
│ │ │ │ │ ├── mer.ts
│ │ │ │ │ ├── textureSet.ts
│ │ │ │ │ ├── toggleLights.ts
│ │ │ │ │ ├── togglePbr.ts
│ │ │ │ │ ├── tonemapping.ts
│ │ │ │ │ └── usdz.ts
│ │ │ │ ├── applyPbrMaterial.ts
│ │ │ │ ├── bakery.ts
│ │ │ │ ├── disablePbr.ts
│ │ │ │ ├── io/
│ │ │ │ │ ├── UsdzExporter.ts
│ │ │ │ │ └── bbmat.ts
│ │ │ │ ├── mer.ts
│ │ │ │ ├── normalMap.ts
│ │ │ │ ├── panels/
│ │ │ │ │ ├── channels.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── materialBrush.ts
│ │ │ │ │ └── pbrSettings.ts
│ │ │ │ ├── properties.ts
│ │ │ │ ├── tools/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── materialBrush.ts
│ │ │ │ └── util.ts
│ │ │ └── types.d.ts
│ │ └── tsconfig.json
│ └── resourcepack_packager/
│ ├── .eslintrc
│ ├── .gitignore
│ ├── .prettierrc
│ ├── LICENSE
│ ├── package.json
│ ├── src/
│ │ ├── elements/
│ │ │ ├── ExportResourcepackFormDialog.ts
│ │ │ └── ExportResourcepackMenuAction.ts
│ │ ├── index.ts
│ │ ├── javaPackVersions.ts
│ │ ├── pluginEmitter.ts
│ │ ├── services/
│ │ │ ├── buildResourcepackService.ts
│ │ │ └── resourcepackOptionsService.ts
│ │ ├── types.d.ts
│ │ └── utils/
│ │ ├── archiveUtils.ts
│ │ ├── arrayUtils.ts
│ │ ├── blockbenchUtils.ts
│ │ └── objectUtils.ts
│ ├── tsconfig.json
│ └── webpack.config.js
├── types/
│ ├── changelog.schema.json
│ ├── index.d.ts
│ └── plugins.schema.json
└── updates.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/pull_request_template.md
================================================
> **_IMPORTANT:_** Please remember to update plugin metadata in plugins.json along with the metadata in your plugin. Always increase the version number when submitting an update.
Please only update one plugin per pull-request (unless you are applying the same fix to multiple pull requests, and nothing else).
================================================
FILE: .github/workflows/plugin_updates.yml
================================================
name: Plugin Updates
on:
push:
branches: [master]
jobs:
generate-updates:
if: github.repository == 'JannisX11/blockbench-plugins'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Generate updates.json
working-directory: build
run: node update_plugin_updates.mjs
- name: Commit and push updates.json
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add updates.json
if ! git diff --cached --quiet; then
git commit -m "Update updates.json"
git push
else
echo "No changes to commit"
fi
================================================
FILE: .github/workflows/validate.yml
================================================
name: Plugin Validator
on: [pull_request]
jobs:
verify-json-validation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Validate JSON
uses: docker://orrosenblatt/validate-json-action:latest
env:
INPUT_SCHEMA: ./schema.json
INPUT_JSONS: ./plugins.json
validate:
runs-on: ubuntu-latest
steps:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Checkout the code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Ensures we have the full history for diff
- name: Validate
run: |
npm ci
git fetch origin ${{ github.base_ref }}
CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)
CHANGED_FILES="$CHANGED_FILES" npm run validate
================================================
FILE: .gitignore
================================================
node_modules/
.DS_Store
desktop.ini
/.idea
================================================
FILE: .vscode/settings.json
================================================
{
"json.schemas": [
{
"fileMatch": [
"changelog.json"
],
"url": "./types/changelog.schema.json"
},
{
"fileMatch": [
"plugins.json"
],
"url": "./types/plugins.schema.json"
}
]
}
================================================
FILE: README.md
================================================
# Blockbench Plugin Repository
Create a pull request to submit or update plugins. Open an issue to report bugs within plugins and tag the author if possible.
## Installing Plugins
To install a plugin, go to File > Plugins... and switch to the available tab. Find the plugin you want to use and click Install.
## Links
* Discover plugins: [blockbench.net/plugins](https://blockbench.net/plugins)
* Main Blockbench repository: [JannisX11/blockbench](https://github.com/JannisX11/blockbench)
* Plugin Documentation: [blockbench.net/wiki/api/plugin](https://www.blockbench.net/wiki/api/plugin)
* Discord plugin development forum: [#bb-plugin-dev](https://discord.gg/2Df3h6ge9f)
## Conventions
* Plugin IDs should be snake_case and must be consistent across all properties and file names.
* Indentation for common files must be Tab character. Individual plugin files can follow own personal preferences.
* Use simple semver for plugin versioning: MAJOR.MINOR.PATCH, e. g. "1.2.11". You need to increase the version number for each update that is published.
## File Structure
Blockbench supports two file structure systems.
### Legacy structure
The legacy format, where plugin Javascript files are saved directly in the plugins directory, was used by Blockbench 4.7 and older, and will continue to be supported for already existing plugins.
### Current structure
The new structure utilizes a separate directory per plugin in the plugins directory, which contains the plugin Javascript file, as well as other optional files.
The new structure will be used by Blockbench if the `"min_version"` is set to 4.8.0 or higher.
The new structure is recommended for new plugins.
These are the files that can be added to the plugin directory
* `plugins/plugin_id/plugin_id.js`- The plugin Javascript file itself
* `plugins/plugin_id/about.md`: Markdown file containing the plugin about + instructions.
* `plugins/plugin_id/icon.png` or `icon.svg`: The plugin icon. Icons can be either PNG or SVG files with a resolution of 48x48 - 96x96 and a maximum size of 12 KB. To register an icon, set the icon field in the plugin meta data to the file name of the icon.
* `plugins/plugin_id/members.yml`: This file allows you to list Github users who have your permission to do changes to your model, without me having to check back with you. You can add two types of members: `maintainers` Can do anything with the plugin, including removing it entirely or modifying the members list. `developers` can contribute new versions of the plugin.
* `plugins/plugin_id/LICENSE.MD`: Add a license if you want to license your plugin as open source. You can choose your license here: [choosealicense.com](https://choosealicense.com)
* `plugins/plugin_id/changelog.json`: Add a changelog file for your plugin. Set `has_changelog` to `true` in the meta data to enable this. If you use VS Code (which I recommend), you'll automatically have autocomplete and validation for this file. Make sure to add new versions to the bottom of the file!
* `plugins/plugin_id/src/**`: Use this directory to store the plugin source, if using a bundler.
## Development
* To develop a plugin, fork and clone the repository. Make sure [NodeJS](https://nodejs.org/en/) is installed and run `npm install` in the repository. This will install the Blockbench types that make it easier to use the Blockbench API.
## Bundling
If your plugin exceeds a certain level of complexity, it can reach the point where it becomes necessary to use a Bundler, such as Webpack or esbuild, to build the plugin JS file.
This is possible, but comes with the requirement that the source code must be public and human-readable, and builds must be reprocable by anyone from the source.
There are several options for keeping your source code:
* You can keep the source code in the `src` folder of your plugin's directory. Good example: `plugins/geckolib/src`
* In the root `src` folder. Example: `src/resourcepack_packager`. This is deprecated for new plugins.
* In an external Git repository. This is recommended for large plugins with active development. Requirements are a min_version of 5.0.0 or higher, a link to the source repository in the plugin metadata, and passing the automatic validation with no errors.
When bundling, obfuscation is not allowed. You may use minification if the bundle would otherwise become too large, otherwise consider leaving it unminified for transparency and easier debugging.
## Submission
In order to submit your plugin, you need to meet a few requirements:
* If your plugin is created by a bundler, you need to upload the source as well. See **Bundling**
* If your plugin is designed for anything related to Minecraft, add one of the tags `Minecraft: Java Edition`, `Minecraft: Bedrock Edition` (or `Minecraft`). The same applies if it's designed for another specific game.
(Keep in mind that artists from many different areas use Blockbench, so provide some context in the meta data)
* In total, you can provide up to three plugin tags
* THE PLUGIN META DATA NEEDS TO BE THE SAME in the plugin file itself and in the file `plugins.json`.
* Plugins should not be larger than 2 MB
* Make sure to not bundle dependencies that are already included in Blockbench. Blockbench comes with a number of libraries already included that can be used by plugins, such as ThreeJS, Vue 2, JSZip, Marked, and MolangJS.
* Plugins may not execute code from external sources. This includes separately hosted scripts, user inputs or files, or otherwise externally hosted or generated code. This also applies to rendering of HTML content.
* Plugins that utilize generative AI are not accepted into this repository but may be shared externally.
This list of plugins is curated to some extent. Plugins will be reviewed and may not be accepted if they don't meet quality standards. Already published plugins may also be taken down if they no longer meet the requirements.
While it is the goal to keep the plugin API generally compatible across different Blockbench version, it can happen that a feature is changed or deprecated and your plugin must be updated in order to keep working.
It is recommended to test all of your plugins during the beta phase before each Blockbench feature update!
To help catch some common issues, you can use the validator script in the root of this repo to catch common issues.
This script will also run in each pull request.
```bash
npm install
npm run validate <plugin-id>
```
Once you are ready to submit your plugin, create a pull request.
## Updates
Updates to plugins can be submitted via pull request.
In order for the plugin to auto update for users who already have it installed, the version number needs to be increased both in the plugin file and in plugins.json.
Optionally, a changelog can indicate what changed in a given update. See [Current structure](#current-structure).
## Third party contributions
As explained above, you can add approved contributors in the `members.yml` file.
For contributions from third parties, the original creator or maintainer of the plugin will be pinged in the respective Pull Request for permission.
If you have a preference, you can specify in `membery.yml` under `abandoned` what you would like to happen if you no longer contribute to the plugin and no longer approval third party contributions.
If unspecified, if you haven't replied within 4 weeks and are no longer active on Github, or if you haven't replied in 8 weeks despite being active, we may test and merge the contribution.
Some small changes like fixes for changed Blockbench APIs may be merged without asking for permission of the original creator.
================================================
FILE: build/generate_plugin_updates.mjs
================================================
import plugins from "../plugins.json" with { type: "json" }
import fs from "node:fs"
const updates = {}
for (const [id, data] of Object.entries(plugins)) {
if (!data.version || !/^\d+\.\d+\.\d+$/.test(data.version)) {
continue
}
updates[id] = {
version: data.version
}
let changelog
if (data.has_changelog && fs.existsSync(`../plugins/${id}/changelog.json`)) {
try {
changelog = Object.values(JSON.parse(fs.readFileSync(`../plugins/${id}/changelog.json`)))
} catch {}
}
if (data.creation_date) {
updates[id].created = Date.parse(data.creation_date) || 0
} else if (changelog?.[0]?.date) {
updates[id].created = Date.parse(changelog[0].date) || 0
} else {
updates[id].created = 0
}
if (changelog?.at(-1)?.date) {
updates[id].updated = Date.parse(changelog.at(-1).date) || updates[id].created
} else {
updates[id].updated = updates[id].created
}
}
fs.writeFileSync("../updates.json", JSON.stringify(updates, null, 2))
================================================
FILE: build/update_plugin_updates.mjs
================================================
import plugins from "../plugins.json" with { type: "json" }
import updates from "../updates.json" with { type: "json" }
import fs from "node:fs"
const now = Date.now()
for (const [id, data] of Object.entries(plugins)) {
if (!data.version || !/^\d+\.\d+\.\d+$/.test(data.version)) {
continue
}
if (!updates[id]) {
updates[id] = {
version: data.version,
created: now,
updated: now
}
continue
}
if (data.version === updates[id].version) {
continue
}
const [oMaj, oMin, oPatch] = updates[id].version.split(".").map(Number)
const [nMaj, nMin, nPatch] = data.version.split(".").map(Number)
const wentDown = nMaj < oMaj || (nMaj === oMaj && nMin < oMin) || (nMaj === oMaj && nMin === oMin && nPatch < oPatch)
const onlyPatchChanged = nMaj === oMaj && nMin === oMin && nPatch !== oPatch
updates[id].version = data.version
if (wentDown || onlyPatchChanged) {
continue
}
updates[id].updated = now
}
fs.writeFileSync("../updates.json", JSON.stringify(updates, null, 2))
================================================
FILE: package.json
================================================
{
"name": "blockbench-plugins",
"version": "1.0.0",
"description": "Blockbench plugins repository.",
"main": "index.js",
"types": "types/index.d.ts",
"type": "module",
"repository": {
"type": "git",
"url": "git+https://github.com/JannisX11/blockbench-plugins.git"
},
"bugs": {
"url": "https://github.com/JannisX11/blockbench-plugins/issues"
},
"homepage": "https://github.com/JannisX11/blockbench-plugins#readme",
"devDependencies": {
"blockbench-types": "^5.1.0",
"compare-versions": "^6.1.1",
"image-size": "^2.0.2"
},
"scripts": {
"validate": "node ./scripts/validate.js"
}
}
================================================
FILE: plugins/_template/LICENSE.MD
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: plugins/_template/about.md
================================================
Template plugin!
## How to use
================================================
FILE: plugins/_template/members.yml
================================================
maintainers:
- YourName
developers:
- OtherName
================================================
FILE: plugins/_template/plugin.js
================================================
/// <reference path="../../types/index.d.ts" />
(function() {
// When updating, apply meta data changes to plugins.json entry!
BBPlugin.register('plugin', {
title: 'Plugin',
icon: 'icon.png',
author: '',
description: '',
tags: [],
version: '0.0.1',
min_version: '4.9.0',
variant: 'both',
onload() {
},
onunload() {
}
});
})()
================================================
FILE: plugins/activity_tracker/about.md
================================================
<div id="about-content">
<p>This plugin allows you to keep track of how much time you spend using Blockbench and how long you spend working on each project.</p>
<h3>Usage:</h3>
<ul>
<li>Head to the <strong>Tools</strong> menu and select <strong>Activity Tracker</strong></li>
<li>From here you can see all your stats for both Blockbench and the current project.</li>
<li>You can use the options in the dialog to configure if tracking should pause when tabbed out.</li>
</ul>
</div>
<style>
.about {
height: 100%;
display: flex;
flex-direction: column;
}
#about-content {
overflow-y: auto;
min-height: 128px;
display: flex;
flex-direction: column;
height: 100%;
}
#about-markdown-links {
display: flex;
justify-content: space-around;
margin: 20px 20px 0;
}
#about-markdown-links > a {
display: flex;
flex-direction: column;
align-items: center;
gap: 5px;
padding: 5px;
text-decoration: none;
flex-grow: 1;
flex-basis: 0;
color: var(--color-subtle_text);
text-align: center;
}
#about-markdown-links > a:hover {
background-color: var(--color-accent);
color: var(--color-light);
}
#about-markdown-links > a > i {
font-size: 32px;
width: 100%;
max-width: initial;
height: 32px;
text-align: center;
}
#about-markdown-links > a:hover > i {
color: var(--color-light) !important;
}
#about-markdown-links > a > p {
flex: 1;
display: flex;
align-items: center;
margin: 0;
}
</style>
<div id="about-markdown-links">
<a href="https://ewanhowell.com/">
<i class="material-icons icon" style="color: #33E38E;">language</i>
<p>By Ewan Howell</p>
</a>
<a href="https://discord.ewanhowell.com/">
<i class="fa_big icon fab fa-discord" style="color: #727FFF;"></i>
<p>Discord Server</p>
</a>
</div>
================================================
FILE: plugins/activity_tracker/activity_tracker.js
================================================
let styles, dialog, action, running, importDialog, exportDialog, interval, timeout, notification, state
const id = "activity_tracker"
const name = "Activity Tracker"
const icon = "trending_up"
const description = "Track how long you spend using Blockbench and working on each project."
const activity = JSON.parse(localStorage.getItem(id) ?? '{ "clock": 0 }')
let pauseOnLostFocus = localStorage.getItem(`${id}_pause_lost_focus`) ?? "0"
Plugin.register(id, {
title: name,
icon: "icon.png",
author: "Ewan Howell",
description,
tags: ["Tracking", "Stats", "Utility"],
version: "1.1.1",
min_version: "4.8.0",
variant: "both",
creation_date: "2023-03-30",
website: "https://ewanhowell.com/plugins/activity-tracker/",
repository: "https://github.com/ewanhowell5195/blockbenchPlugins/tree/main/activity-tracker",
bug_tracker: "https://github.com/ewanhowell5195/blockbenchPlugins/issues/new?title=[Activity Tracker]",
has_changelog: true,
onload() {
activity.session = activity.clock
styles = Blockbench.addCSS(`
#tracker-container {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.tracker-row {
display: flex;
gap: 20px;
width: 100%;
margin: 10px 0 20px;
justify-content: center;
}
.tracker-col {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.tracker-col > p {
color: var(--color-light);
font-size: 1.5rem;
}
.tracker-line {
width: 100%;
border-top: 2px solid var(--color-border);
margin: 10px 0 20px;
}
#tracker-container .button-row {
display: flex;
justify-content: flex-end;
width: 100%;
}
#tracker-import {
margin: 20px 0 10px;
}
#tracker-export {
user-select: all;
}
.tracker-row-center {
align-items: center;
gap: 10px;
}
#tracker-container i {
cursor: pointer;
}
#tracker-container i:hover {
color: var(--color-light);
}
`)
property = new Property(ModelProject, "number", id, {
default: 0,
exposed: false
})
ModelProject.all.forEach(e => {
e.activity_tracker = 0
e.activity_tracker_session = 0
})
importDialog = new Dialog({
id: `${id}_import`,
title: `${name} Import`,
buttons: [],
component: {
data: {
seconds: 0
},
methods: {
input(e) {
this.seconds = Math.min(parseInt(e.target.value) || 0, 9999999999)
},
durationString,
confirm() {
activity.clock = this.seconds
activity.session = this.seconds
importDialog.close()
}
},
template: `
<div id="tracker-container">
<h2>Enter number of seconds:</h2>
<input id="tracker-import" class="dark_bordered half" type="number" placeholder="123456789" @input="input"></input>
<p>Preview: {{ durationString(seconds) }}</p>
<div class="button-row">
<button @click="confirm">Confirm</button>
</div>
</div>
`
}
})
exportDialog = new Dialog({
id: `${id}_export`,
title: `${name} Export`,
buttons: [],
component: {
data: {
clock: activity.clock
},
methods: {
copy() {
navigator.clipboard.writeText(this.clock)
const text = $("#tracker-export").text("Copied...")
setTimeout(() => text.text(this.clock), 1000)
}
},
template: `
<div id="tracker-container">
<h2>Your total activity in seconds:</h2>
<div class="tracker-row tracker-row-center">
<p id="tracker-export" class="dark_bordered half">{{ clock }}</p>
<i class="material-icons icon" title="Copy to clipboard" @click="copy">content_copy</i>
</div>
</div>
`
}
})
dialog = new Dialog({
id,
title: name,
buttons: [],
component: {
data: () => ({
get Project() { return Project },
activity,
importDialog,
exportDialog,
options: {
"0": "Immediately",
"10": "After 10 seconds",
"30": "After 30 seconds",
"60": "After 1 minute",
"300": "After 5 minutes",
"600": "After 10 minutes",
"1200": "After 20 minutes",
"1800": "After 30 minutes",
"2700": "After 45 minutes",
"3600": "After 1 hour",
"never": "Never"
},
option: pauseOnLostFocus
}),
methods: {
durationString,
set(e) {
pauseOnLostFocus = e
localStorage.setItem(`${id}_pause_lost_focus`, e)
}
},
template: `
<div id="tracker-container">
<h1>Global Activity</h1>
<div class="tracker-row">
<div class="tracker-col">
<h2>Total</h2>
<p>{{ durationString(activity.clock) }}</p>
</div>
<div class="tracker-col">
<h2>Current session</h2>
<p>{{ durationString(activity.clock - activity.session) }}</p>
</div>
</div>
<div v-if="Project" id="project-tracker">
<div class="tracker-line"></div>
<h1>Current Project Activity</h1>
<p>Models must be saved as a bbmodel to preserve per project activity tracking.</p>
<div class="tracker-row">
<div class="tracker-col">
<h2>Total</h2>
<p>{{ durationString(Project.${id}) }}</p>
</div>
<div class="tracker-col">
<h2>Current session</h2>
<p>{{ durationString(Project.${id} - Project.${id}_session) }}</p>
</div>
</div>
</div>
<div class="tracker-line"></div>
<div id="pause-tracking-select-container" class="tracker-row tracker-row-center">
<p>Pause tracking when tabbed out:</p>
<select-input v-model="option" :options="options" @input="set" />
</div>
<div class="tracker-line"></div>
<div class="tracker-row">
<button @click="importDialog.show()">Import time</button>
<button @click="exportDialog.show()">Export time</button>
</div>
</div>
`
}
})
action = new Action({
name,
id,
description,
icon,
click: () => dialog.show()
})
MenuBar.addAction(action, "tools")
window.addEventListener("focus", focus)
window.addEventListener("blur", blur)
if (Blockbench.isWeb) document.addEventListener("visibilitychange", visibilityChange)
Blockbench.on("select_project", selectProject)
selectProject()
focus()
},
onunload() {
window.removeEventListener("focus", focus)
window.removeEventListener("blur", blur)
if (Blockbench.isWeb) document.removeEventListener("visibilitychange", visibilityChange)
Blockbench.removeListener("select_project", selectProject)
clearTimeout(timeout)
clearInterval(interval)
styles.delete()
property.delete()
action.delete()
dialog.close()
importDialog.close()
exportDialog.close()
}
})
function durationString(num) {
num = num * 1000
const years = Math.floor(num / 3.1536e10)
let days = Math.floor(num / 8.64e7) % 365
const weeks = Math.floor(days / 7)
days %= 7
const hours = Math.floor(num / 3.6e6) % 24
const minutes = Math.floor(num / 6e4) % 60
const seconds = Math.round(num / 1000 % 60)
return `${years} year${years === 1 ? "" : "s"}, ${weeks} week${weeks === 1 ? "" : "s"}, ${days} day${days === 1 ? "" : "s"}, ${hours.toString().padStart(2, 0)}:${minutes.toString().padStart(2, 0)}:${seconds.toString().padStart(2, 0)}`.replace(/(?<!\d)0\s[a-z]+,\s/g, "").replace(/(, 00:00:00)/, "")
}
function selectProject() {
setTimeout(() => {
Project.activity_tracker_session ||= Project.activity_tracker
}, 0)
}
function visibilityChange() {
if (document.visibilityState === "hidden") blur()
else focus()
}
function focus() {
if (state === "focus") return
state = "focus"
clearTimeout(timeout)
notification?.delete()
if (running) return
running = true
interval = setInterval(() => {
activity.clock += 1
Project.activity_tracker += 1
localStorage.setItem(id, JSON.stringify(activity))
}, 1000)
}
function blur() {
if (state === "blur") return
state = "blur"
if (pauseOnLostFocus === "never") return
timeout = setTimeout(() => {
clearInterval(interval)
running = false
notification = Blockbench.showToastNotification({
text: "Activity tracking paused. Tab back in to resume.",
icon
})
}, parseInt(pauseOnLostFocus) * 1000)
}
================================================
FILE: plugins/activity_tracker/changelog.json
================================================
{
"1.0.0": {
"title": "1.0.0",
"date": "2023-03-30",
"author": "Ewan Howell",
"categories": [
{
"title": "New Features",
"list": [
"Initial release"
]
}
]
},
"1.0.1": {
"title": "1.0.1",
"date": "2023-04-01",
"author": "Ewan Howell",
"categories": [
{
"title": "Fixes",
"list": [
"Fixed minor tracking issues"
]
}
]
},
"1.1.0": {
"title": "1.1.0",
"date": "2025-10-15",
"author": "Ewan Howell",
"categories": [
{
"title": "Technical Changes",
"list": [
"Updated to new repository format"
]
},
{
"title": "Bug Fixes",
"list": [
"Fixed project tracking not showing for Blockbench 5.0"
]
}
]
},
"1.1.1": {
"title": "1.1.1",
"date": "2025-10-19",
"author": "Ewan Howell",
"categories": [
{
"title": "Bug Fixes",
"list": [
"Fixed project tracking not showing if Activity Tracker is first opened on the Start Screen"
]
}
]
}
}
================================================
FILE: plugins/ambient_occlusion.js
================================================
(function() {
/**
* @author alteredq / http://alteredqualia.com/
*/
THREE.EffectComposer = function ( renderer, renderTarget ) {
this.renderer = renderer;
if ( renderTarget === undefined ) {
var parameters = {
minFilter: THREE.LinearFilter,
magFilter: THREE.LinearFilter,
format: THREE.RGBAFormat,
stencilBuffer: false
};
var size = renderer.getSize( new THREE.Vector2() );
this._pixelRatio = renderer.getPixelRatio();
this._width = size.width;
this._height = size.height;
renderTarget = new THREE.WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, parameters );
renderTarget.texture.name = 'EffectComposer.rt1';
} else {
this._pixelRatio = 1;
this._width = renderTarget.width;
this._height = renderTarget.height;
}
this.renderTarget1 = renderTarget;
this.renderTarget2 = renderTarget.clone();
this.renderTarget2.texture.name = 'EffectComposer.rt2';
this.writeBuffer = this.renderTarget1;
this.readBuffer = this.renderTarget2;
this.renderToScreen = true;
this.passes = [];
// dependencies
if ( THREE.CopyShader === undefined ) {
console.error( 'THREE.EffectComposer relies on THREE.CopyShader' );
}
if ( THREE.ShaderPass === undefined ) {
console.error( 'THREE.EffectComposer relies on THREE.ShaderPass' );
}
this.copyPass = new THREE.ShaderPass( THREE.CopyShader );
this.clock = new THREE.Clock();
};
Object.assign( THREE.EffectComposer.prototype, {
swapBuffers: function () {
var tmp = this.readBuffer;
this.readBuffer = this.writeBuffer;
this.writeBuffer = tmp;
},
addPass: function ( pass ) {
this.passes.push( pass );
pass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );
},
insertPass: function ( pass, index ) {
this.passes.splice( index, 0, pass );
},
isLastEnabledPass: function ( passIndex ) {
for ( var i = passIndex + 1; i < this.passes.length; i ++ ) {
if ( this.passes[ i ].enabled ) {
return false;
}
}
return true;
},
render: function ( deltaTime ) {
// deltaTime value is in seconds
if ( deltaTime === undefined ) {
deltaTime = this.clock.getDelta();
}
var currentRenderTarget = this.renderer.getRenderTarget();
var maskActive = false;
var pass, i, il = this.passes.length;
for ( i = 0; i < il; i ++ ) {
pass = this.passes[ i ];
if ( pass.enabled === false ) continue;
pass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );
pass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );
if ( pass.needsSwap ) {
if ( maskActive ) {
var context = this.renderer.getContext();
var stencil = this.renderer.state.buffers.stencil;
//context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );
stencil.setFunc( context.NOTEQUAL, 1, 0xffffffff );
this.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );
//context.stencilFunc( context.EQUAL, 1, 0xffffffff );
stencil.setFunc( context.EQUAL, 1, 0xffffffff );
}
this.swapBuffers();
}
if ( THREE.MaskPass !== undefined ) {
if ( pass instanceof THREE.MaskPass ) {
maskActive = true;
} else if ( pass instanceof THREE.ClearMaskPass ) {
maskActive = false;
}
}
}
this.renderer.setRenderTarget( currentRenderTarget );
},
reset: function ( renderTarget ) {
if ( renderTarget === undefined ) {
var size = this.renderer.getSize( new THREE.Vector2() );
this._pixelRatio = this.renderer.getPixelRatio();
this._width = size.width;
this._height = size.height;
renderTarget = this.renderTarget1.clone();
renderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );
}
this.renderTarget1.dispose();
this.renderTarget2.dispose();
this.renderTarget1 = renderTarget;
this.renderTarget2 = renderTarget.clone();
this.writeBuffer = this.renderTarget1;
this.readBuffer = this.renderTarget2;
},
setSize: function ( width, height ) {
this._width = width;
this._height = height;
var effectiveWidth = this._width * this._pixelRatio;
var effectiveHeight = this._height * this._pixelRatio;
this.renderTarget1.setSize( effectiveWidth, effectiveHeight );
this.renderTarget2.setSize( effectiveWidth, effectiveHeight );
for ( var i = 0; i < this.passes.length; i ++ ) {
this.passes[ i ].setSize( effectiveWidth, effectiveHeight );
}
},
setPixelRatio: function ( pixelRatio ) {
this._pixelRatio = pixelRatio;
this.setSize( this._width, this._height );
}
} );
THREE.Pass = function () {
// if set to true, the pass is processed by the composer
this.enabled = true;
// if set to true, the pass indicates to swap read and write buffer after rendering
this.needsSwap = true;
// if set to true, the pass clears its buffer before rendering
this.clear = false;
// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.
this.renderToScreen = false;
};
Object.assign( THREE.Pass.prototype, {
setSize: function ( /* width, height */ ) {},
render: function ( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {
console.error( 'THREE.Pass: .render() must be implemented in derived pass.' );
}
} );
// Helper for passes that need to fill the viewport with a single quad.
THREE.Pass.FullScreenQuad = ( function () {
var camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
var geometry = new THREE.PlaneBufferGeometry( 2, 2 );
var FullScreenQuad = function ( material ) {
this._mesh = new THREE.Mesh( geometry, material );
};
Object.defineProperty( FullScreenQuad.prototype, 'material', {
get: function () {
return this._mesh.material;
},
set: function ( value ) {
this._mesh.material = value;
}
} );
Object.assign( FullScreenQuad.prototype, {
dispose: function () {
this._mesh.geometry.dispose();
},
render: function ( renderer ) {
renderer.render( this._mesh, camera );
}
} );
return FullScreenQuad;
} )();
/**
* @author alteredq / http://alteredqualia.com/
*
* Full-screen textured quad shader
*/
THREE.CopyShader = {
uniforms: {
"tDiffuse": { value: null },
"opacity": { value: 1.0 }
},
vertexShader: [
"varying vec2 vUv;",
"void main() {",
" vUv = uv;",
" gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
"}"
].join( "\n" ),
fragmentShader: [
"uniform float opacity;",
"uniform sampler2D tDiffuse;",
"varying vec2 vUv;",
"void main() {",
" vec4 texel = texture2D( tDiffuse, vUv );",
" gl_FragColor = opacity * texel;",
"}"
].join( "\n" )
};
/**
* @author alteredq / http://alteredqualia.com/
*/
THREE.ShaderPass = function ( shader, textureID ) {
THREE.Pass.call( this );
this.textureID = ( textureID !== undefined ) ? textureID : "tDiffuse";
if ( shader instanceof THREE.ShaderMaterial ) {
this.uniforms = shader.uniforms;
this.material = shader;
} else if ( shader ) {
this.uniforms = THREE.UniformsUtils.clone( shader.uniforms );
this.material = new THREE.ShaderMaterial( {
defines: Object.assign( {}, shader.defines ),
uniforms: this.uniforms,
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader
} );
}
this.fsQuad = new THREE.Pass.FullScreenQuad( this.material );
};
THREE.ShaderPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {
constructor: THREE.ShaderPass,
render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
if ( this.uniforms[ this.textureID ] ) {
this.uniforms[ this.textureID ].value = readBuffer.texture;
}
this.fsQuad.material = this.material;
if ( this.renderToScreen ) {
renderer.setRenderTarget( null );
this.fsQuad.render( renderer );
} else {
renderer.setRenderTarget( writeBuffer );
// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600
if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
this.fsQuad.render( renderer );
}
}
} );
/**
* @author alteredq / http://alteredqualia.com/
*/
THREE.RenderPass = function ( scene, camera, overrideMaterial, clearColor, clearAlpha ) {
THREE.Pass.call( this );
this.scene = scene;
this.camera = camera;
this.overrideMaterial = overrideMaterial;
this.clearColor = clearColor;
this.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;
this.clear = true;
this.clearDepth = false;
this.needsSwap = false;
};
THREE.RenderPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {
constructor: THREE.RenderPass,
render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
var oldAutoClear = renderer.autoClear;
renderer.autoClear = false;
var oldClearColor, oldClearAlpha, oldOverrideMaterial;
if ( this.overrideMaterial !== undefined ) {
oldOverrideMaterial = this.scene.overrideMaterial;
this.scene.overrideMaterial = this.overrideMaterial;
}
if ( this.clearColor ) {
oldClearColor = renderer.getClearColor(new THREE.Color()).getHex();
oldClearAlpha = renderer.getClearAlpha();
renderer.setClearColor( this.clearColor, this.clearAlpha );
}
if ( this.clearDepth ) {
renderer.clearDepth();
}
renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600
if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
renderer.render( this.scene, this.camera );
if ( this.clearColor ) {
renderer.setClearColor( oldClearColor, oldClearAlpha );
}
if ( this.overrideMaterial !== undefined ) {
this.scene.overrideMaterial = oldOverrideMaterial;
}
renderer.autoClear = oldAutoClear;
}
} );
/**
* TODO
*/
THREE.SAOShader = {
defines: {
"NUM_SAMPLES": 7,
"NUM_RINGS": 4,
"NORMAL_TEXTURE": 0,
"DIFFUSE_TEXTURE": 0,
"DEPTH_PACKING": 1,
"PERSPECTIVE_CAMERA": 1
},
uniforms: {
"tDepth": { value: null },
"tDiffuse": { value: null },
"tNormal": { value: null },
"size": { value: new THREE.Vector2( 512, 512 ) },
"cameraNear": { value: 1 },
"cameraFar": { value: 100 },
"cameraProjectionMatrix": { value: new THREE.Matrix4() },
"cameraInverseProjectionMatrix": { value: new THREE.Matrix4() },
"scale": { value: 1.0 },
"intensity": { value: 0.1 },
"bias": { value: 0.5 },
"minResolution": { value: 0.0 },
"kernelRadius": { value: 100.0 },
"randomSeed": { value: 0.0 }
},
vertexShader: [
"varying vec2 vUv;",
"void main() {",
" vUv = uv;",
" gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
"}"
].join( "\n" ),
fragmentShader: [
"#include <common>",
"varying vec2 vUv;",
"#if DIFFUSE_TEXTURE == 1",
"uniform sampler2D tDiffuse;",
"#endif",
"uniform sampler2D tDepth;",
"#if NORMAL_TEXTURE == 1",
"uniform sampler2D tNormal;",
"#endif",
"uniform float cameraNear;",
"uniform float cameraFar;",
"uniform mat4 cameraProjectionMatrix;",
"uniform mat4 cameraInverseProjectionMatrix;",
"uniform float scale;",
"uniform float intensity;",
"uniform float bias;",
"uniform float kernelRadius;",
"uniform float minResolution;",
"uniform vec2 size;",
"uniform float randomSeed;",
"// RGBA depth",
"#include <packing>",
"vec4 getDefaultColor( const in vec2 screenPosition ) {",
" #if DIFFUSE_TEXTURE == 1",
" return texture2D( tDiffuse, vUv );",
" #else",
" return vec4( 1.0 );",
" #endif",
"}",
"float getDepth( const in vec2 screenPosition ) {",
" #if DEPTH_PACKING == 1",
" return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );",
" #else",
" return texture2D( tDepth, screenPosition ).x;",
" #endif",
"}",
"float getViewZ( const in float depth ) {",
" #if PERSPECTIVE_CAMERA == 1",
" return perspectiveDepthToViewZ( depth, cameraNear, cameraFar );",
" #else",
" return orthographicDepthToViewZ( depth, cameraNear, cameraFar );",
" #endif",
"}",
"vec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {",
" float clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];",
" vec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );",
" clipPosition *= clipW; // unprojection.",
" return ( cameraInverseProjectionMatrix * clipPosition ).xyz;",
"}",
"vec3 getViewNormal( const in vec3 viewPosition, const in vec2 screenPosition ) {",
" #if NORMAL_TEXTURE == 1",
" return unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );",
" #else",
" return normalize( cross( dFdx( viewPosition ), dFdy( viewPosition ) ) );",
" #endif",
"}",
"float scaleDividedByCameraFar;",
"float minResolutionMultipliedByCameraFar;",
"float getOcclusion( const in vec3 centerViewPosition, const in vec3 centerViewNormal, const in vec3 sampleViewPosition ) {",
" vec3 viewDelta = sampleViewPosition - centerViewPosition;",
" float viewDistance = length( viewDelta );",
" float scaledScreenDistance = scaleDividedByCameraFar * viewDistance;",
" return max(0.0, (dot(centerViewNormal, viewDelta) - minResolutionMultipliedByCameraFar) / scaledScreenDistance - bias) / (1.0 + pow2( scaledScreenDistance ) );",
"}",
"// moving costly divides into consts",
"const float ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES );",
"const float INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES );",
"float getAmbientOcclusion( const in vec3 centerViewPosition ) {",
" // precompute some variables require in getOcclusion.",
" scaleDividedByCameraFar = scale / cameraFar;",
" minResolutionMultipliedByCameraFar = minResolution * cameraFar;",
" vec3 centerViewNormal = getViewNormal( centerViewPosition, vUv );",
" // jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/",
" float angle = rand( vUv + randomSeed ) * PI2;",
" vec2 radius = vec2( kernelRadius * INV_NUM_SAMPLES ) / size;",
" vec2 radiusStep = radius;",
" float occlusionSum = 0.0;",
" float weightSum = 0.0;",
" for( int i = 0; i < NUM_SAMPLES; i ++ ) {",
" vec2 sampleUv = vUv + vec2( cos( angle ), sin( angle ) ) * radius;",
" radius += radiusStep;",
" angle += ANGLE_STEP;",
" float sampleDepth = getDepth( sampleUv );",
" if( sampleDepth >= ( 1.0 - EPSILON ) ) {",
" continue;",
" }",
" float sampleViewZ = getViewZ( sampleDepth );",
" vec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ );",
" occlusionSum += getOcclusion( centerViewPosition, centerViewNormal, sampleViewPosition );",
" weightSum += 1.0;",
" }",
" if( weightSum == 0.0 ) discard;",
" return occlusionSum * ( intensity / weightSum );",
"}",
"void main() {",
" float centerDepth = getDepth( vUv );",
" if( centerDepth >= ( 1.0 - EPSILON ) ) {",
" discard;",
" }",
" float centerViewZ = getViewZ( centerDepth );",
" vec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ );",
" float ambientOcclusion = getAmbientOcclusion( viewPosition );",
" gl_FragColor = getDefaultColor( vUv );",
" gl_FragColor.xyz *= 1.0 - ambientOcclusion;",
"}"
].join( "\n" )
};
/**
* TODO
*/
THREE.DepthLimitedBlurShader = {
defines: {
"KERNEL_RADIUS": 4,
"DEPTH_PACKING": 1,
"PERSPECTIVE_CAMERA": 1
},
uniforms: {
"tDiffuse": { value: null },
"size": { value: new THREE.Vector2( 512, 512 ) },
"sampleUvOffsets": { value: [ new THREE.Vector2( 0, 0 ) ] },
"sampleWeights": { value: [ 1.0 ] },
"tDepth": { value: null },
"cameraNear": { value: 10 },
"cameraFar": { value: 1000 },
"depthCutoff": { value: 10 },
},
vertexShader: [
"#include <common>",
"uniform vec2 size;",
"varying vec2 vUv;",
"varying vec2 vInvSize;",
"void main() {",
" vUv = uv;",
" vInvSize = 1.0 / size;",
" gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
"}"
].join( "\n" ),
fragmentShader: [
"#include <common>",
"#include <packing>",
"uniform sampler2D tDiffuse;",
"uniform sampler2D tDepth;",
"uniform float cameraNear;",
"uniform float cameraFar;",
"uniform float depthCutoff;",
"uniform vec2 sampleUvOffsets[ KERNEL_RADIUS + 1 ];",
"uniform float sampleWeights[ KERNEL_RADIUS + 1 ];",
"varying vec2 vUv;",
"varying vec2 vInvSize;",
"float getDepth( const in vec2 screenPosition ) {",
" #if DEPTH_PACKING == 1",
" return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );",
" #else",
" return texture2D( tDepth, screenPosition ).x;",
" #endif",
"}",
"float getViewZ( const in float depth ) {",
" #if PERSPECTIVE_CAMERA == 1",
" return perspectiveDepthToViewZ( depth, cameraNear, cameraFar );",
" #else",
" return orthographicDepthToViewZ( depth, cameraNear, cameraFar );",
" #endif",
"}",
"void main() {",
" float depth = getDepth( vUv );",
" if( depth >= ( 1.0 - EPSILON ) ) {",
" discard;",
" }",
" float centerViewZ = -getViewZ( depth );",
" bool rBreak = false, lBreak = false;",
" float weightSum = sampleWeights[0];",
" vec4 diffuseSum = texture2D( tDiffuse, vUv ) * weightSum;",
" for( int i = 1; i <= KERNEL_RADIUS; i ++ ) {",
" float sampleWeight = sampleWeights[i];",
" vec2 sampleUvOffset = sampleUvOffsets[i] * vInvSize;",
" vec2 sampleUv = vUv + sampleUvOffset;",
" float viewZ = -getViewZ( getDepth( sampleUv ) );",
" if( abs( viewZ - centerViewZ ) > depthCutoff ) rBreak = true;",
" if( ! rBreak ) {",
" diffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;",
" weightSum += sampleWeight;",
" }",
" sampleUv = vUv - sampleUvOffset;",
" viewZ = -getViewZ( getDepth( sampleUv ) );",
" if( abs( viewZ - centerViewZ ) > depthCutoff ) lBreak = true;",
" if( ! lBreak ) {",
" diffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;",
" weightSum += sampleWeight;",
" }",
" }",
" gl_FragColor = diffuseSum / weightSum;",
"}"
].join( "\n" )
};
THREE.BlurShaderUtils = {
createSampleWeights: function ( kernelRadius, stdDev ) {
var gaussian = function ( x, stdDev ) {
return Math.exp( - ( x * x ) / ( 2.0 * ( stdDev * stdDev ) ) ) / ( Math.sqrt( 2.0 * Math.PI ) * stdDev );
};
var weights = [];
for ( var i = 0; i <= kernelRadius; i ++ ) {
weights.push( gaussian( i, stdDev ) );
}
return weights;
},
createSampleOffsets: function ( kernelRadius, uvIncrement ) {
var offsets = [];
for ( var i = 0; i <= kernelRadius; i ++ ) {
offsets.push( uvIncrement.clone().multiplyScalar( i ) );
}
return offsets;
},
configure: function ( material, kernelRadius, stdDev, uvIncrement ) {
material.defines[ "KERNEL_RADIUS" ] = kernelRadius;
material.uniforms[ "sampleUvOffsets" ].value = THREE.BlurShaderUtils.createSampleOffsets( kernelRadius, uvIncrement );
material.uniforms[ "sampleWeights" ].value = THREE.BlurShaderUtils.createSampleWeights( kernelRadius, stdDev );
material.needsUpdate = true;
}
};
/**
* @author alteredq / http://alteredqualia.com/
*
* Unpack RGBA depth shader
* - show RGBA encoded depth as monochrome color
*/
THREE.UnpackDepthRGBAShader = {
uniforms: {
"tDiffuse": { value: null },
"opacity": { value: 1.0 }
},
vertexShader: [
"varying vec2 vUv;",
"void main() {",
" vUv = uv;",
" gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
"}"
].join( "\n" ),
fragmentShader: [
"uniform float opacity;",
"uniform sampler2D tDiffuse;",
"varying vec2 vUv;",
"#include <packing>",
"void main() {",
" float depth = 1.0 - unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );",
" gl_FragColor = vec4( vec3( depth ), opacity );",
"}"
].join( "\n" )
};
/**
* @author ludobaka / ludobaka.github.io
* SAO implementation inspired from bhouston previous SAO work
*/
THREE.SAOPass = function ( scene, camera, depthTexture, useNormals, resolution ) {
THREE.Pass.call( this );
this.scene = scene;
this.camera = camera;
this.clear = true;
this.needsSwap = false;
this.supportsDepthTextureExtension = ( depthTexture !== undefined ) ? depthTexture : false;
this.supportsNormalTexture = ( useNormals !== undefined ) ? useNormals : false;
this.originalClearColor = new THREE.Color();
this.oldClearColor = new THREE.Color();
this.oldClearAlpha = 1;
this.params = {
output: 0,
saoBias: 0.5,
saoIntensity: 0.18,
saoScale: 1,
saoKernelRadius: 100,
saoMinResolution: 0,
saoBlur: true,
saoBlurRadius: 8,
saoBlurStdDev: 4,
saoBlurDepthCutoff: 0.01
};
this.resolution = ( resolution !== undefined ) ? new THREE.Vector2( resolution.x, resolution.y ) : new THREE.Vector2( 256, 256 );
this.saoRenderTarget = new THREE.WebGLRenderTarget( this.resolution.x, this.resolution.y, {
minFilter: THREE.LinearFilter,
magFilter: THREE.LinearFilter,
format: THREE.RGBAFormat
} );
this.blurIntermediateRenderTarget = this.saoRenderTarget.clone();
this.beautyRenderTarget = this.saoRenderTarget.clone();
this.normalRenderTarget = new THREE.WebGLRenderTarget( this.resolution.x, this.resolution.y, {
minFilter: THREE.NearestFilter,
magFilter: THREE.NearestFilter,
format: THREE.RGBAFormat
} );
this.depthRenderTarget = this.normalRenderTarget.clone();
if ( this.supportsDepthTextureExtension ) {
var depthTexture = new THREE.DepthTexture();
depthTexture.type = THREE.UnsignedShortType;
depthTexture.minFilter = THREE.NearestFilter;
depthTexture.maxFilter = THREE.NearestFilter;
this.beautyRenderTarget.depthTexture = depthTexture;
this.beautyRenderTarget.depthBuffer = true;
}
this.depthMaterial = new THREE.MeshDepthMaterial();
this.depthMaterial.depthPacking = THREE.RGBADepthPacking;
this.depthMaterial.blending = THREE.NoBlending;
this.normalMaterial = new THREE.MeshNormalMaterial();
this.normalMaterial.blending = THREE.NoBlending;
if ( THREE.SAOShader === undefined ) {
console.error( 'THREE.SAOPass relies on THREE.SAOShader' );
}
this.saoMaterial = new THREE.ShaderMaterial( {
defines: Object.assign( {}, THREE.SAOShader.defines ),
fragmentShader: THREE.SAOShader.fragmentShader,
vertexShader: THREE.SAOShader.vertexShader,
uniforms: THREE.UniformsUtils.clone( THREE.SAOShader.uniforms )
} );
this.saoMaterial.extensions.derivatives = true;
this.saoMaterial.defines[ 'DEPTH_PACKING' ] = this.supportsDepthTextureExtension ? 0 : 1;
this.saoMaterial.defines[ 'NORMAL_TEXTURE' ] = this.supportsNormalTexture ? 1 : 0;
this.saoMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;
this.saoMaterial.uniforms[ 'tDepth' ].value = ( this.supportsDepthTextureExtension ) ? depthTexture : this.depthRenderTarget.texture;
this.saoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;
this.saoMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );
this.saoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrix ).invert();
this.saoMaterial.uniforms[ 'cameraProjectionMatrix' ].value = this.camera.projectionMatrix;
this.saoMaterial.blending = THREE.NoBlending;
if ( THREE.DepthLimitedBlurShader === undefined ) {
console.error( 'THREE.SAOPass relies on THREE.DepthLimitedBlurShader' );
}
this.vBlurMaterial = new THREE.ShaderMaterial( {
uniforms: THREE.UniformsUtils.clone( THREE.DepthLimitedBlurShader.uniforms ),
defines: Object.assign( {}, THREE.DepthLimitedBlurShader.defines ),
vertexShader: THREE.DepthLimitedBlurShader.vertexShader,
fragmentShader: THREE.DepthLimitedBlurShader.fragmentShader
} );
this.vBlurMaterial.defines[ 'DEPTH_PACKING' ] = this.supportsDepthTextureExtension ? 0 : 1;
this.vBlurMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;
this.vBlurMaterial.uniforms[ 'tDiffuse' ].value = this.saoRenderTarget.texture;
this.vBlurMaterial.uniforms[ 'tDepth' ].value = ( this.supportsDepthTextureExtension ) ? depthTexture : this.depthRenderTarget.texture;
this.vBlurMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );
this.vBlurMaterial.blending = THREE.NoBlending;
this.hBlurMaterial = new THREE.ShaderMaterial( {
uniforms: THREE.UniformsUtils.clone( THREE.DepthLimitedBlurShader.uniforms ),
defines: Object.assign( {}, THREE.DepthLimitedBlurShader.defines ),
vertexShader: THREE.DepthLimitedBlurShader.vertexShader,
fragmentShader: THREE.DepthLimitedBlurShader.fragmentShader
} );
this.hBlurMaterial.defines[ 'DEPTH_PACKING' ] = this.supportsDepthTextureExtension ? 0 : 1;
this.hBlurMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;
this.hBlurMaterial.uniforms[ 'tDiffuse' ].value = this.blurIntermediateRenderTarget.texture;
this.hBlurMaterial.uniforms[ 'tDepth' ].value = ( this.supportsDepthTextureExtension ) ? depthTexture : this.depthRenderTarget.texture;
this.hBlurMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );
this.hBlurMaterial.blending = THREE.NoBlending;
if ( THREE.CopyShader === undefined ) {
console.error( 'THREE.SAOPass relies on THREE.CopyShader' );
}
this.materialCopy = new THREE.ShaderMaterial( {
uniforms: THREE.UniformsUtils.clone( THREE.CopyShader.uniforms ),
vertexShader: THREE.CopyShader.vertexShader,
fragmentShader: THREE.CopyShader.fragmentShader,
blending: THREE.NoBlending
} );
this.materialCopy.transparent = true;
this.materialCopy.depthTest = false;
this.materialCopy.depthWrite = false;
this.materialCopy.blending = THREE.CustomBlending;
this.materialCopy.blendSrc = THREE.DstColorFactor;
this.materialCopy.blendDst = THREE.ZeroFactor;
this.materialCopy.blendEquation = THREE.AddEquation;
this.materialCopy.blendSrcAlpha = THREE.DstAlphaFactor;
this.materialCopy.blendDstAlpha = THREE.ZeroFactor;
this.materialCopy.blendEquationAlpha = THREE.AddEquation;
if ( THREE.UnpackDepthRGBAShader === undefined ) {
console.error( 'THREE.SAOPass relies on THREE.UnpackDepthRGBAShader' );
}
this.depthCopy = new THREE.ShaderMaterial( {
uniforms: THREE.UniformsUtils.clone( THREE.UnpackDepthRGBAShader.uniforms ),
vertexShader: THREE.UnpackDepthRGBAShader.vertexShader,
fragmentShader: THREE.UnpackDepthRGBAShader.fragmentShader,
blending: THREE.NoBlending
} );
this.fsQuad = new THREE.Pass.FullScreenQuad( null );
};
THREE.SAOPass.OUTPUT = {
'Beauty': 1,
'Default': 0,
'SAO': 2,
'Depth': 3,
'Normal': 4
};
THREE.SAOPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {
constructor: THREE.SAOPass,
render: function ( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {
// Rendering readBuffer first when rendering to screen
if ( this.renderToScreen ) {
this.materialCopy.blending = THREE.NoBlending;
this.materialCopy.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
this.materialCopy.needsUpdate = true;
this.renderPass( renderer, this.materialCopy, null );
}
if ( this.params.output === 1 ) {
return;
}
this.oldClearColor.copy( renderer.getClearColor(new THREE.Color()) );
this.oldClearAlpha = renderer.getClearAlpha();
var oldAutoClear = renderer.autoClear;
renderer.autoClear = false;
renderer.setRenderTarget( this.depthRenderTarget );
renderer.clear();
this.saoMaterial.uniforms[ 'bias' ].value = this.params.saoBias;
this.saoMaterial.uniforms[ 'intensity' ].value = this.params.saoIntensity;
this.saoMaterial.uniforms[ 'scale' ].value = this.params.saoScale;
this.saoMaterial.uniforms[ 'kernelRadius' ].value = this.params.saoKernelRadius;
this.saoMaterial.uniforms[ 'minResolution' ].value = this.params.saoMinResolution;
this.saoMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;
this.saoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;
// this.saoMaterial.uniforms['randomSeed'].value = Math.random();
var depthCutoff = this.params.saoBlurDepthCutoff * ( this.camera.far - this.camera.near );
this.vBlurMaterial.uniforms[ 'depthCutoff' ].value = depthCutoff;
this.hBlurMaterial.uniforms[ 'depthCutoff' ].value = depthCutoff;
this.vBlurMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;
this.vBlurMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;
this.hBlurMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;
this.hBlurMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;
this.params.saoBlurRadius = Math.floor( this.params.saoBlurRadius );
if ( ( this.prevStdDev !== this.params.saoBlurStdDev ) || ( this.prevNumSamples !== this.params.saoBlurRadius ) ) {
THREE.BlurShaderUtils.configure( this.vBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new THREE.Vector2( 0, 1 ) );
THREE.BlurShaderUtils.configure( this.hBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new THREE.Vector2( 1, 0 ) );
this.prevStdDev = this.params.saoBlurStdDev;
this.prevNumSamples = this.params.saoBlurRadius;
}
// Rendering scene to depth texture
renderer.setClearColor( 0x000000 );
renderer.setRenderTarget( this.beautyRenderTarget );
renderer.clear();
renderer.render( this.scene, this.camera );
// Re-render scene if depth texture extension is not supported
if ( ! this.supportsDepthTextureExtension ) {
// Clear rule : far clipping plane in both RGBA and Basic encoding
this.renderOverride( renderer, this.depthMaterial, this.depthRenderTarget, 0x000000, 1.0 );
}
if ( this.supportsNormalTexture ) {
// Clear rule : default normal is facing the camera
this.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );
}
// Rendering SAO texture
this.renderPass( renderer, this.saoMaterial, this.saoRenderTarget, 0xffffff, 1.0 );
// Blurring SAO texture
if ( this.params.saoBlur ) {
this.renderPass( renderer, this.vBlurMaterial, this.blurIntermediateRenderTarget, 0xffffff, 1.0 );
this.renderPass( renderer, this.hBlurMaterial, this.saoRenderTarget, 0xffffff, 1.0 );
}
var outputMaterial = this.materialCopy;
// Setting up SAO rendering
if ( this.params.output === 3 ) {
if ( this.supportsDepthTextureExtension ) {
this.materialCopy.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.depthTexture;
this.materialCopy.needsUpdate = true;
} else {
this.depthCopy.uniforms[ 'tDiffuse' ].value = this.depthRenderTarget.texture;
this.depthCopy.needsUpdate = true;
outputMaterial = this.depthCopy;
}
} else if ( this.params.output === 4 ) {
this.materialCopy.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;
this.materialCopy.needsUpdate = true;
} else {
this.materialCopy.uniforms[ 'tDiffuse' ].value = this.saoRenderTarget.texture;
this.materialCopy.needsUpdate = true;
}
// Blending depends on output, only want a CustomBlending when showing SAO
if ( this.params.output === 0 ) {
outputMaterial.blending = THREE.CustomBlending;
} else {
outputMaterial.blending = THREE.NoBlending;
}
// Rendering SAOPass result on top of previous pass
this.renderPass( renderer, outputMaterial, this.renderToScreen ? null : readBuffer );
renderer.setClearColor( this.oldClearColor, this.oldClearAlpha );
renderer.autoClear = oldAutoClear;
},
renderPass: function ( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {
// save original state
this.originalClearColor.copy( renderer.getClearColor(new THREE.Color()) );
var originalClearAlpha = renderer.getClearAlpha();
var originalAutoClear = renderer.autoClear;
renderer.setRenderTarget( renderTarget );
// setup pass state
renderer.autoClear = false;
if ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {
renderer.setClearColor( clearColor );
renderer.setClearAlpha( clearAlpha || 0.0 );
renderer.clear();
}
this.fsQuad.material = passMaterial;
this.fsQuad.render( renderer );
// restore original state
renderer.autoClear = originalAutoClear;
renderer.setClearColor( this.originalClearColor );
renderer.setClearAlpha( originalClearAlpha );
},
renderOverride: function ( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
this.originalClearColor.copy( renderer.getClearColor(new THREE.Color()) );
var originalClearAlpha = renderer.getClearAlpha();
var originalAutoClear = renderer.autoClear;
renderer.setRenderTarget( renderTarget );
renderer.autoClear = false;
clearColor = overrideMaterial.clearColor || clearColor;
clearAlpha = overrideMaterial.clearAlpha || clearAlpha;
if ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {
renderer.setClearColor( clearColor );
renderer.setClearAlpha( clearAlpha || 0.0 );
renderer.clear();
}
this.scene.overrideMaterial = overrideMaterial;
renderer.render( this.scene, this.camera );
this.scene.overrideMaterial = null;
// restore original state
renderer.autoClear = originalAutoClear;
renderer.setClearColor( this.originalClearColor );
renderer.setClearAlpha( originalClearAlpha );
},
setSize: function ( width, height ) {
this.beautyRenderTarget.setSize( width, height );
this.saoRenderTarget.setSize( width, height );
this.blurIntermediateRenderTarget.setSize( width, height );
this.normalRenderTarget.setSize( width, height );
this.depthRenderTarget.setSize( width, height );
this.saoMaterial.uniforms[ 'size' ].value.set( width, height );
this.saoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrix ).invert();
this.saoMaterial.uniforms[ 'cameraProjectionMatrix' ].value = this.camera.projectionMatrix;
this.saoMaterial.needsUpdate = true;
this.vBlurMaterial.uniforms[ 'size' ].value.set( width, height );
this.vBlurMaterial.needsUpdate = true;
this.hBlurMaterial.uniforms[ 'size' ].value.set( width, height );
this.hBlurMaterial.needsUpdate = true;
}
} );
Plugin.register('ambient_occlusion', {
title: 'Ambient Occlusion',
icon: 'gradient',
author: 'JannisX11',
description: 'Adds a screen space ambient occlusion shader',
tags: ["Deprecated"],
deprecation_note: "This plugin can cause visual artifacts and a decreased framerate",
version: '1.0.4',
min_version: '3.2.0',
variant: 'both',
onload() {
new Setting('ambient_occlusion_enabled', {
name: 'Ambient Occlusion',
description: 'Enable Ambient Occlusion in the Blockbench previews',
category: 'preview',
value: 'true',
onChange: (value) => {
Preview.all.forEach(preview => {
if (!value || preview == MediaPreview) return;
preview.composer.setSize(preview.width, preview.height);
})
}
})
new Setting('ambient_occlusion_intensity', {
name: 'Ambient Occlusion Intensity',
description: 'Ambient Occlusion intensity in the Blockbench previews, 50 is the maximum.',
category: 'preview',
type: 'number',
value: 25,
min: 0,
max: 50,
onChange: (value) => {
value = Math.clamp(value, 0, 50)/100;
Preview.all.forEach(preview => {
if (!preview.saoPass || preview == MediaPreview) return;
preview.saoPass.params.saoIntensity = value;
})
}
})
function setupPreviewSAO(preview) {
var this_scene = (preview.id == 'display' && Blockbench.isOlderThan('4.3')) ? window.display_scene : scene;
preview.composer = new THREE.EffectComposer( preview.renderer );
preview.renderPass = new THREE.RenderPass( this_scene, preview.camPers );
preview.composer.addPass( preview.renderPass );
preview.saoPass = new THREE.SAOPass( this_scene, preview.camPers, false, true );
preview.composer.addPass( preview.saoPass );
preview.saoPass.params.saoIntensity = 0.25;
preview.saoPass.params.saoScale = 2900;
}
Preview.all.filter(preview => preview != MediaPreview).forEach(setupPreviewSAO)
Preview.prototype.render = function() {
this.controls.update()
//console.log(Settings.get('ambient_occlusion_enabled') ? 'composer' : 'renderer', this[Settings.get('ambient_occlusion_enabled') ? 'composer' : 'renderer'])
this[(Settings.get('ambient_occlusion_enabled') && this !== MediaPreview) ? 'composer' : 'renderer'].render(
(Modes.display && Blockbench.isOlderThan('4.3'))
? display_scene
: scene,
this.camera
)
}
Preview.prototype.resize = function(width, height) {
if (this.canvas.isConnected && this !== MediaPreview) {
this.height = this.node.parentElement.clientHeight;
this.width = this.node.parentElement.clientWidth;
} else if (height && width) {
this.height = height;
this.width = width;
} else {
return this;
}
if (!this.saoPass && this !== MediaPreview) {
setupPreviewSAO(this);
}
if (this.isOrtho === false) {
this.camPers.aspect = this.width / this.height
this.camPers.updateProjectionMatrix();
} else {
this.camOrtho.right = this.width / 80
this.camOrtho.left = this.camOrtho.right*-1
this.camOrtho.top = this.height / 80
this.camOrtho.bottom = this.camOrtho.top*-1
this.camOrtho.updateProjectionMatrix();
}
this.renderer.setSize(this.width, this.height);
if (Settings.get('ambient_occlusion_enabled') && this !== MediaPreview) this.composer.setSize(this.width, this.height);
this.renderer.setPixelRatio(window.devicePixelRatio);
if (this.canvas.isConnected) {
this.updateBackground()
if (Transformer) {
Transformer.update()
}
}
if (this._wasOrtho != this.isOrtho && this !== MediaPreview) {
this.renderPass.camera = this.camera;
this.saoPass.camera = this.camera;
this._wasOrtho == this.isOrtho;
}
return this;
}
},
onunload() {
if (settings.ambient_occlusion_enabled) settings.ambient_occlusion_enabled.delete();
if (settings.ambient_occlusion_intensity) settings.ambient_occlusion_intensity.delete();
}
});
})()
================================================
FILE: plugins/animated_java/about.md
================================================
<div class="blurb animated-java-plugin-page-17qwm57"><span>Do you wish your Vanilla Minecraft creations could move and animate like the ones in
mods? </span>
<span>Are you <i>tired</i> of Minecraft's </span>
<span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-5000ms">s</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4925ms">i</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4850ms">l</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4775ms">l</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4700ms">y</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4625ms"> </span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4550ms">m</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4475ms">o</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4400ms">d</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4325ms">e</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4250ms">l</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4175ms"> </span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4100ms">l</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-4025ms">i</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-3950ms">m</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-3875ms">i</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-3800ms">t</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-3725ms">a</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-3650ms">t</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-3575ms">i</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-3500ms">o</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-3425ms">n</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-3350ms">s</span><span class="silly animated-java-plugin-page-17qwm57" style="animation-delay:-3275ms">?</span></span>
<span> Animated Java is here to help! </span></div>
<div style="display: flex; align-items: center; height: 64px; margin-top: 8px; "><h1>Welcome to Animated Java!</h1>
<img src="https://github.com/Animated-Java/animated-java/blob/main/src/assets/armor_stand_wave.webp?raw=true" alt="Armor Stand Waving" width="80px"></div>
<p>Animated Java is a plugin for Blockbench that allows you to create custom animations and models
for Vanilla Minecraft. It uses the power of Java Edition's Data Pack and Resource Pack systems
to bring your creations to life!
</p>
<h3 class="animated-java-plugin-page-h3 animated-java-plugin-page-17qwm57">Features</h3>
<ul><li class="animated-java-plugin-page-17qwm57">Variants: Swap between different textures in-game.</li>
<li class="animated-java-plugin-page-17qwm57">Highly optimized: Hours of performance tests and optimization tweaks have gone into Animated
Java's Exported Data Pack to make sure it has as little performance impact as possible.
</li>
<li class="animated-java-plugin-page-17qwm57">Limited Molang support. If Blockbench can render it, Animated Java can animate it.</li>
<li class="animated-java-plugin-page-17qwm57">Text Display previewing and animation support.</li>
<li class="animated-java-plugin-page-17qwm57">Resource Pack-less exporting. Animate Vanilla block and item models!</li>
<li class="animated-java-plugin-page-17qwm57">Locators: Run commands relative to a locators position via keyframes.</li>
<li class="animated-java-plugin-page-17qwm57">Camera Plugin Support: Install the <a href="https://www.blockbench.net/plugins/cameras">Official Camera Plugin</a> to create cinematic camera paths with ease!
</li>
<li class="animated-java-plugin-page-17qwm57">Animation Tweening: Create smooth transitions between animations.</li>
<li class="animated-java-plugin-page-17qwm57">Many different configuration options.</li>
<li class="animated-java-plugin-page-17qwm57">Complete Documentation at <a href="https://animated-java.dev/docs">animated-java.dev/documentation/</a></li>
<li class="animated-java-plugin-page-17qwm57">And much more!</li></ul>
<h3 class="animated-java-plugin-page-h3 animated-java-plugin-page-17qwm57">Getting started</h3>
<p>To learn the basics of Animated Java, check out our <a href="https://animated-java.dev/docs/getting-started/installing-animated-java">Getting Started</a> guide.
</p>
<p class="note animated-java-plugin-page-17qwm57"><i>Note that it is <b>highly</b> recommended to have a basic understanding of Java Edition's Data
Pack and Resource Pack systems before using Animated Java!</i></p>
<h3 class="animated-java-plugin-page-h3 animated-java-plugin-page-17qwm57">Need Help?</h3>
<p>Check our <a href="https://animated-java.dev/docs">Documentation</a> to find answers to common
questions or make a post in the
<a href="https://discord.gg/adWuKnZD69">#animated-java-support</a> channel on our
<a href="https://animated-java.dev/discord">Discord</a> server to get help from the community and
developers.
</p>
<h3 class="animated-java-plugin-page-h3 animated-java-plugin-page-17qwm57">Found a bug?</h3>
<p>If you find a bug, please report it on our <a href="https://animated-java.dev/source">GitHub</a>. It only takes a few moments of your time, and improves the quality of the project for
everyone!
</p>
<style>h3.animated-java-plugin-page-17qwm57{border-bottom:1px solid var(--color-accent)}li.animated-java-plugin-page-17qwm57{margin:0px}.blurb.animated-java-plugin-page-17qwm57{margin:0px !important}.note.animated-java-plugin-page-17qwm57{font-size:0.9em;color:var(--color-error)}@keyframes animated-java-plugin-page-17qwm57-wave{0%{transform:translatey(-1px)}50%{transform:translatey(1px)}100%{transform:translatey(-1px)}}.silly.animated-java-plugin-page-17qwm57{display:inline-block;animation:animated-java-plugin-page-17qwm57-wave 1.5s infinite;animation-timing-function:ease-in-out}</style>
================================================
FILE: plugins/animated_java/animated_java.js
================================================
//?? ╭─────────────────────────────────────────────────────────────────────────────────╮
//?? │ ____ _ _ _ _ _ ____ ___ ____ ___ _ ____ _ _ ____ │
//?? │ |__| |\ | | |\/| |__| | |___ | \ | |__| | | |__| │
//?? │ | | | \| | | | | | | |___ |__/ _| | | \/ | | │
//?? │ │
//?? │ v1.8.1 │
//?? │ │
//?? │ Effortlessly craft complex animations for Minecraft: Java Edition │
//?? │ │
//?? │ Created by Titus Evans (SnaveSutit) │
//?? │ (snavesutit@gmail.com) [https://discordapp.com/users/213746232923783168] │
//?? │ │
//?? │ With AMAZING help from │
//?? │ │
//?? │ Ian Senne (FetchBot) │
//?? │ (contact@iansenne.com) [https://discordapp.com/users/162347688011104256] │
//?? │ │
//?? │ and Jesse Spicer (Dominexis) │
//?? │ (dominexis9@gmail.com) [https://discordapp.com/users/749826119636615229] │
//?? │ │
//?? │ [ SPECIAL THANKS ] │
//?? │ │
//?? │ Howzieky, MulverineX, YokaiS, Ancientkingg, Ersatz, │
//?? │ CubeDeveloper, __SK__, MrMakistein, Flubberschnub, │
//?? │ legitimoose, VelVoxelRaptor, _JeffWooden, Onnowhere, │
//?? │ DoubleFelix, JayPeaSize, Kastle, Matt/Arwen, │
//?? │ Nerdrope, Sprunkles, Suso, taj, TheRedstoneer, │
//?? │ Totigonzales, VioletXIV, CommanderRedstone, │
//?? │ FabulousCodingFox, ououn, luigiutmc │
//?? │ │
//?? │ [ SOURCE ] │
//?? │ https://github.com/Animated-Java/animated-java │
//?? │ │
//?? │ [ LICENSE ] │
//?? │ Animated Java - A tool for easily making animations in Minecraft: Java Edition! │
//?? │ Copyright (C) 2023 Titus Evans │
//?? │ │
//?? │ This program is free software: you can redistribute it and/or modify │
//?? │ it under the terms of the GNU Affero General Public License as published │
//?? │ by the Free Software Foundation, either version 3 of the License, or │
//?? │ (at your option) any later version. │
//?? │ │
//?? │ This program is distributed in the hope that it will be useful, │
//?? │ but WITHOUT ANY WARRANTY; without even the implied warranty of │
//?? │ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │
//?? │ GNU Affero General Public License for more details. │
//?? │ │
//?? │ You should have received a copy of the GNU Affero General Public License │
//?? │ along with this program. If not, see <https://www.gnu.org/licenses/>. │
//?? │ │
//?? │ GNU AFFERO GENERAL PUBLIC LICENSE │
//?? │ Version 3, 19 November 2007 │
//?? │ │
//?? │ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> │
//?? │ Everyone is permitted to copy and distribute verbatim copies │
//?? │ of this license document, but changing it is not allowed. │
//?? │ │
//?? │ Preamble │
//?? │ │
//?? │ The GNU Affero General Public License is a free, copyleft license for │
//?? │ software and other kinds of works, specifically designed to ensure │
//?? │ cooperation with the community in the case of network server software. │
//?? │ │
//?? │ The licenses for most software and other practical works are designed │
//?? │ to take away your freedom to share and change the works. By contrast, │
//?? │ our General Public Licenses are intended to guarantee your freedom to │
//?? │ share and change all versions of a program--to make sure it remains free │
//?? │ software for all its users. │
//?? │ │
//?? │ When we speak of free software, we are referring to freedom, not │
//?? │ price. Our General Public Licenses are designed to make sure that you │
//?? │ have the freedom to distribute copies of free software (and charge for │
//?? │ them if you wish), that you receive source code or can get it if you │
//?? │ want it, that you can change the software or use pieces of it in new │
//?? │ free programs, and that you know you can do these things. │
//?? │ │
//?? │ Developers that use our General Public Licenses protect your rights │
//?? │ with two steps: (1) assert copyright on the software, and (2) offer │
//?? │ you this License which gives you legal permission to copy, distribute │
//?? │ and/or modify the software. │
//?? │ │
//?? │ A secondary benefit of defending all users' freedom is that │
//?? │ improvements made in alternate versions of the program, if they │
//?? │ receive widespread use, become available for other developers to │
//?? │ incorporate. Many developers of free software are heartened and │
//?? │ encouraged by the resulting cooperation. However, in the case of │
//?? │ software used on network servers, this result may fail to come about. │
//?? │ The GNU General Public License permits making a modified version and │
//?? │ letting the public access it on a server without ever releasing its │
//?? │ source code to the public. │
//?? │ │
//?? │ The GNU Affero General Public License is designed specifically to │
//?? │ ensure that, in such cases, the modified source code becomes available │
//?? │ to the community. It requires the operator of a network server to │
//?? │ provide the source code of the modified version running there to the │
//?? │ users of that server. Therefore, public use of a modified version, on │
//?? │ a publicly accessible server, gives the public access to the source │
//?? │ code of the modified version. │
//?? │ │
//?? │ An older license, called the Affero General Public License and │
//?? │ published by Affero, was designed to accomplish similar goals. This is │
//?? │ a different license, not a version of the Affero GPL, but Affero has │
//?? │ released a new version of the Affero GPL which permits relicensing under │
//?? │ this license. │
//?? │ │
//?? │ The precise terms and conditions for copying, distribution and │
//?? │ modification follow. │
//?? │ │
//?? │ TERMS AND CONDITIONS │
//?? │ │
//?? │ 0. Definitions. │
//?? │ │
//?? │ "This License" refers to version 3 of the GNU Affero General Public License. │
//?? │ │
//?? │ "Copyright" also means copyright-like laws that apply to other kinds of │
//?? │ works, such as semiconductor masks. │
//?? │ │
//?? │ "The Program" refers to any copyrightable work licensed under this │
//?? │ License. Each licensee is addressed as "you". "Licensees" and │
//?? │ "recipients" may be individuals or organizations. │
//?? │ │
//?? │ To "modify" a work means to copy from or adapt all or part of the work │
//?? │ in a fashion requiring copyright permission, other than the making of an │
//?? │ exact copy. The resulting work is called a "modified version" of the │
//?? │ earlier work or a work "based on" the earlier work. │
//?? │ │
//?? │ A "covered work" means either the unmodified Program or a work based │
//?? │ on the Program. │
//?? │ │
//?? │ To "propagate" a work means to do anything with it that, without │
//?? │ permission, would make you directly or secondarily liable for │
//?? │ infringement under applicable copyright law, except executing it on a │
//?? │ computer or modifying a private copy. Propagation includes copying, │
//?? │ distribution (with or without modification), making available to the │
//?? │ public, and in some countries other activities as well. │
//?? │ │
//?? │ To "convey" a work means any kind of propagation that enables other │
//?? │ parties to make or receive copies. Mere interaction with a user through │
//?? │ a computer network, with no transfer of a copy, is not conveying. │
//?? │ │
//?? │ An interactive user interface displays "Appropriate Legal Notices" │
//?? │ to the extent that it includes a convenient and prominently visible │
//?? │ feature that (1) displays an appropriate copyright notice, and (2) │
//?? │ tells the user that there is no warranty for the work (except to the │
//?? │ extent that warranties are provided), that licensees may convey the │
//?? │ work under this License, and how to view a copy of this License. If │
//?? │ the interface presents a list of user commands or options, such as a │
//?? │ menu, a prominent item in the list meets this criterion. │
//?? │ │
//?? │ 1. Source Code. │
//?? │ │
//?? │ The "source code" for a work means the preferred form of the work │
//?? │ for making modifications to it. "Object code" means any non-source │
//?? │ form of a work. │
//?? │ │
//?? │ A "Standard Interface" means an interface that either is an official │
//?? │ standard defined by a recognized standards body, or, in the case of │
//?? │ interfaces specified for a particular programming language, one that │
//?? │ is widely used among developers working in that language. │
//?? │ │
//?? │ The "System Libraries" of an executable work include anything, other │
//?? │ than the work as a whole, that (a) is included in the normal form of │
//?? │ packaging a Major Component, but which is not part of that Major │
//?? │ Component, and (b) serves only to enable use of the work with that │
//?? │ Major Component, or to implement a Standard Interface for which an │
//?? │ implementation is available to the public in source code form. A │
//?? │ "Major Component", in this context, means a major essential component │
//?? │ (kernel, window system, and so on) of the specific operating system │
//?? │ (if any) on which the executable work runs, or a compiler used to │
//?? │ produce the work, or an object code interpreter used to run it. │
//?? │ │
//?? │ The "Corresponding Source" for a work in object code form means all │
//?? │ the source code needed to generate, install, and (for an executable │
//?? │ work) run the object code and to modify the work, including scripts to │
//?? │ control those activities. However, it does not include the work's │
//?? │ System Libraries, or general-purpose tools or generally available free │
//?? │ programs which are used unmodified in performing those activities but │
//?? │ which are not part of the work. For example, Corresponding Source │
//?? │ includes interface definition files associated with source files for │
//?? │ the work, and the source code for shared libraries and dynamically │
//?? │ linked subprograms that the work is specifically designed to require, │
//?? │ such as by intimate data communication or control flow between those │
//?? │ subprograms and other parts of the work. │
//?? │ │
//?? │ The Corresponding Source need not include anything that users │
//?? │ can regenerate automatically from other parts of the Corresponding │
//?? │ Source. │
//?? │ │
//?? │ The Corresponding Source for a work in source code form is that │
//?? │ same work. │
//?? │ │
//?? │ 2. Basic Permissions. │
//?? │ │
//?? │ All rights granted under this License are granted for the term of │
//?? │ copyright on the Program, and are irrevocable provided the stated │
//?? │ conditions are met. This License explicitly affirms your unlimited │
//?? │ permission to run the unmodified Program. The output from running a │
//?? │ covered work is covered by this License only if the output, given its │
//?? │ content, constitutes a covered work. This License acknowledges your │
//?? │ rights of fair use or other equivalent, as provided by copyright law. │
//?? │ │
//?? │ You may make, run and propagate covered works that you do not │
//?? │ convey, without conditions so long as your license otherwise remains │
//?? │ in force. You may convey covered works to others for the sole purpose │
//?? │ of having them make modifications exclusively for you, or provide you │
//?? │ with facilities for running those works, provided that you comply with │
//?? │ the terms of this License in conveying all material for which you do │
//?? │ not control copyright. Those thus making or running the covered works │
//?? │ for you must do so exclusively on your behalf, under your direction │
//?? │ and control, on terms that prohibit them from making any copies of │
//?? │ your copyrighted material outside their relationship with you. │
//?? │ │
//?? │ Conveying under any other circumstances is permitted solely under │
//?? │ the conditions stated below. Sublicensing is not allowed; section 10 │
//?? │ makes it unnecessary. │
//?? │ │
//?? │ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. │
//?? │ │
//?? │ No covered work shall be deemed part of an effective technological │
//?? │ measure under any applicable law fulfilling obligations under article │
//?? │ 11 of the WIPO copyright treaty adopted on 20 December 1996, or │
//?? │ similar laws prohibiting or restricting circumvention of such │
//?? │ measures. │
//?? │ │
//?? │ When you convey a covered work, you waive any legal power to forbid │
//?? │ circumvention of technological measures to the extent such circumvention │
//?? │ is effected by exercising rights under this License with respect to │
//?? │ the covered work, and you disclaim any intention to limit operation or │
//?? │ modification of the work as a means of enforcing, against the work's │
//?? │ users, your or third parties' legal rights to forbid circumvention of │
//?? │ technological measures. │
//?? │ │
//?? │ 4. Conveying Verbatim Copies. │
//?? │ │
//?? │ You may convey verbatim copies of the Program's source code as you │
//?? │ receive it, in any medium, provided that you conspicuously and │
//?? │ appropriately publish on each copy an appropriate copyright notice; │
//?? │ keep intact all notices stating that this License and any │
//?? │ non-permissive terms added in accord with section 7 apply to the code; │
//?? │ keep intact all notices of the absence of any warranty; and give all │
//?? │ recipients a copy of this License along with the Program. │
//?? │ │
//?? │ You may charge any price or no price for each copy that you convey, │
//?? │ and you may offer support or warranty protection for a fee. │
//?? │ │
//?? │ 5. Conveying Modified Source Versions. │
//?? │ │
//?? │ You may convey a work based on the Program, or the modifications to │
//?? │ produce it from the Program, in the form of source code under the │
//?? │ terms of section 4, provided that you also meet all of these conditions: │
//?? │ │
//?? │ a) The work must carry prominent notices stating that you modified │
//?? │ it, and giving a relevant date. │
//?? │ │
//?? │ b) The work must carry prominent notices stating that it is │
//?? │ released under this License and any conditions added under section │
//?? │ 7. This requirement modifies the requirement in section 4 to │
//?? │ "keep intact all notices". │
//?? │ │
//?? │ c) You must license the entire work, as a whole, under this │
//?? │ License to anyone who comes into possession of a copy. This │
//?? │ License will therefore apply, along with any applicable section 7 │
//?? │ additional terms, to the whole of the work, and all its parts, │
//?? │ regardless of how they are packaged. This License gives no │
//?? │ permission to license the work in any other way, but it does not │
//?? │ invalidate such permission if you have separately received it. │
//?? │ │
//?? │ d) If the work has interactive user interfaces, each must display │
//?? │ Appropriate Legal Notices; however, if the Program has interactive │
//?? │ interfaces that do not display Appropriate Legal Notices, your │
//?? │ work need not make them do so. │
//?? │ │
//?? │ A compilation of a covered work with other separate and independent │
//?? │ works, which are not by their nature extensions of the covered work, │
//?? │ and which are not combined with it such as to form a larger program, │
//?? │ in or on a volume of a storage or distribution medium, is called an │
//?? │ "aggregate" if the compilation and its resulting copyright are not │
//?? │ used to limit the access or legal rights of the compilation's users │
//?? │ beyond what the individual works permit. Inclusion of a covered work │
//?? │ in an aggregate does not cause this License to apply to the other │
//?? │ parts of the aggregate. │
//?? │ │
//?? │ 6. Conveying Non-Source Forms. │
//?? │ │
//?? │ You may convey a covered work in object code form under the terms │
//?? │ of sections 4 and 5, provided that you also convey the │
//?? │ machine-readable Corresponding Source under the terms of this License, │
//?? │ in one of these ways: │
//?? │ │
//?? │ a) Convey the object code in, or embodied in, a physical product │
//?? │ (including a physical distribution medium), accompanied by the │
//?? │ Corresponding Source fixed on a durable physical medium │
//?? │ customarily used for software interchange. │
//?? │ │
//?? │ b) Convey the object code in, or embodied in, a physical product │
//?? │ (including a physical distribution medium), accompanied by a │
//?? │ written offer, valid for at least three years and valid for as │
//?? │ long as you offer spare parts or customer support for that product │
//?? │ model, to give anyone who possesses the object code either (1) a │
//?? │ copy of the Corresponding Source for all the software in the │
//?? │ product that is covered by this License, on a durable physical │
//?? │ medium customarily used for software interchange, for a price no │
//?? │ more than your reasonable cost of physically performing this │
//?? │ conveying of source, or (2) access to copy the │
//?? │ Corresponding Source from a network server at no charge. │
//?? │ │
//?? │ c) Convey individual copies of the object code with a copy of the │
//?? │ written offer to provide the Corresponding Source. This │
//?? │ alternative is allowed only occasionally and noncommercially, and │
//?? │ only if you received the object code with such an offer, in accord │
//?? │ with subsection 6b. │
//?? │ │
//?? │ d) Convey the object code by offering access from a designated │
//?? │ place (gratis or for a charge), and offer equivalent access to the │
//?? │ Corresponding Source in the same way through the same place at no │
//?? │ further charge. You need not require recipients to copy the │
//?? │ Corresponding Source along with the object code. If the place to │
//?? │ copy the object code is a network server, the Corresponding Source │
//?? │ may be on a different server (operated by you or a third party) │
//?? │ that supports equivalent copying facilities, provided you maintain │
//?? │ clear directions next to the object code saying where to find the │
//?? │ Corresponding Source. Regardless of what server hosts the │
//?? │ Corresponding Source, you remain obligated to ensure that it is │
//?? │ available for as long as needed to satisfy these requirements. │
//?? │ │
//?? │ e) Convey the object code using peer-to-peer transmission, provided │
//?? │ you inform other peers where the object code and Corresponding │
//?? │ Source of the work are being offered to the general public at no │
//?? │ charge under subsection 6d. │
//?? │ │
//?? │ A separable portion of the object code, whose source code is excluded │
//?? │ from the Corresponding Source as a System Library, need not be │
//?? │ included in conveying the object code work. │
//?? │ │
//?? │ A "User Product" is either (1) a "consumer product", which means any │
//?? │ tangible personal property which is normally used for personal, family, │
//?? │ or household purposes, or (2) anything designed or sold for incorporation │
//?? │ into a dwelling. In determining whether a product is a consumer product, │
//?? │ doubtful cases shall be resolved in favor of coverage. For a particular │
//?? │ product received by a particular user, "normally used" refers to a │
//?? │ typical or common use of that class of product, regardless of the status │
//?? │ of the particular user or of the way in which the particular user │
//?? │ actually uses, or expects or is expected to use, the product. A product │
//?? │ is a consumer product regardless of whether the product has substantial │
//?? │ commercial, industrial or non-consumer uses, unless such uses represent │
//?? │ the only significant mode of use of the product. │
//?? │ │
//?? │ "Installation Information" for a User Product means any methods, │
//?? │ procedures, authorization keys, or other information required to install │
//?? │ and execute modified versions of a covered work in that User Product from │
//?? │ a modified version of its Corresponding Source. The information must │
//?? │ suffice to ensure that the continued functioning of the modified object │
//?? │ code is in no case prevented or interfered with solely because │
//?? │ modification has been made. │
//?? │ │
//?? │ If you convey an object code work under this section in, or with, or │
//?? │ specifically for use in, a User Product, and the conveying occurs as │
//?? │ part of a transaction in which the right of possession and use of the │
//?? │ User Product is transferred to the recipient in perpetuity or for a │
//?? │ fixed term (regardless of how the transaction is characterized), the │
//?? │ Corresponding Source conveyed under this section must be accompanied │
//?? │ by the Installation Information. But this requirement does not apply │
//?? │ if neither you nor any third party retains the ability to install │
//?? │ modified object code on the User Product (for example, the work has │
//?? │ been installed in ROM). │
//?? │ │
//?? │ The requirement to provide Installation Information does not include a │
//?? │ requirement to continue to provide support service, warranty, or updates │
//?? │ for a work that has been modified or installed by the recipient, or for │
//?? │ the User Product in which it has been modified or installed. Access to a │
//?? │ network may be denied when the modification itself materially and │
//?? │ adversely affects the operation of the network or violates the rules and │
//?? │ protocols for communication across the network. │
//?? │ │
//?? │ Corresponding Source conveyed, and Installation Information provided, │
//?? │ in accord with this section must be in a format that is publicly │
//?? │ documented (and with an implementation available to the public in │
//?? │ source code form), and must require no special password or key for │
//?? │ unpacking, reading or copying. │
//?? │ │
//?? │ 7. Additional Terms. │
//?? │ │
//?? │ "Additional permissions" are terms that supplement the terms of this │
//?? │ License by making exceptions from one or more of its conditions. │
//?? │ Additional permissions that are applicable to the entire Program shall │
//?? │ be treated as though they were included in this License, to the extent │
//?? │ that they are valid under applicable law. If additional permissions │
//?? │ apply only to part of the Program, that part may be used separately │
//?? │ under those permissions, but the entire Program remains governed by │
//?? │ this License without regard to the additional permissions. │
//?? │ │
//?? │ When you convey a copy of a covered work, you may at your option │
//?? │ remove any additional permissions from that copy, or from any part of │
//?? │ it. (Additional permissions may be written to require their own │
//?? │ removal in certain cases when you modify the work.) You may place │
//?? │ additional permissions on material, added by you to a covered work, │
//?? │ for which you have or can give appropriate copyright permission. │
//?? │ │
//?? │ Notwithstanding any other provision of this License, for material you │
//?? │ add to a covered work, you may (if authorized by the copyright holders of │
//?? │ that material) supplement the terms of this License with terms: │
//?? │ │
//?? │ a) Disclaiming warranty or limiting liability differently from the │
//?? │ terms of sections 15 and 16 of this License; or │
//?? │ │
//?? │ b) Requiring preservation of specified reasonable legal notices or │
//?? │ author attributions in that material or in the Appropriate Legal │
//?? │ Notices displayed by works containing it; or │
//?? │ │
//?? │ c) Prohibiting misrepresentation of the origin of that material, or │
//?? │ requiring that modified versions of such material be marked in │
//?? │ reasonable ways as different from the original version; or │
//?? │ │
//?? │ d) Limiting the use for publicity purposes of names of licensors or │
//?? │ authors of the material; or │
//?? │ │
//?? │ e) Declining to grant rights under trademark law for use of some │
//?? │ trade names, trademarks, or service marks; or │
//?? │ │
//?? │ f) Requiring indemnification of licensors and authors of that │
//?? │ material by anyone who conveys the material (or modified versions of │
//?? │ it) with contractual assumptions of liability to the recipient, for │
//?? │ any liability that these contractual assumptions directly impose on │
//?? │ those licensors and authors. │
//?? │ │
//?? │ All other non-permissive additional terms are considered "further │
//?? │ restrictions" within the meaning of section 10. If the Program as you │
//?? │ received it, or any part of it, contains a notice stating that it is │
//?? │ governed by this License along with a term that is a further │
//?? │ restriction, you may remove that term. If a license document contains │
//?? │ a further restriction but permits relicensing or conveying under this │
//?? │ License, you may add to a covered work material governed by the terms │
//?? │ of that license document, provided that the further restriction does │
//?? │ not survive such relicensing or conveying. │
//?? │ │
//?? │ If you add terms to a covered work in accord with this section, you │
//?? │ must place, in the relevant source files, a statement of the │
//?? │ additional terms that apply to those files, or a notice indicating │
//?? │ where to find the applicable terms. │
//?? │ │
//?? │ Additional terms, permissive or non-permissive, may be stated in the │
//?? │ form of a separately written license, or stated as exceptions; │
//?? │ the above requirements apply either way. │
//?? │ │
//?? │ 8. Termination. │
//?? │ │
//?? │ You may not propagate or modify a covered work except as expressly │
//?? │ provided under this License. Any attempt otherwise to propagate or │
//?? │ modify it is void, and will automatically terminate your rights under │
//?? │ this License (including any patent licenses granted under the third │
//?? │ paragraph of section 11). │
//?? │ │
//?? │ However, if you cease all violation of this License, then your │
//?? │ license from a particular copyright holder is reinstated (a) │
//?? │ provisionally, unless and until the copyright holder explicitly and │
//?? │ finally terminates your license, and (b) permanently, if the copyright │
//?? │ holder fails to notify you of the violation by some reasonable means │
//?? │ prior to 60 days after the cessation. │
//?? │ │
//?? │ Moreover, your license from a particular copyright holder is │
//?? │ reinstated permanently if the copyright holder notifies you of the │
//?? │ violation by some reasonable means, this is the first time you have │
//?? │ received notice of violation of this License (for any work) from that │
//?? │ copyright holder, and you cure the violation prior to 30 days after │
//?? │ your receipt of the notice. │
//?? │ │
//?? │ Termination of your rights under this section does not terminate the │
//?? │ licenses of parties who have received copies or rights from you under │
//?? │ this License. If your rights have been terminated and not permanently │
//?? │ reinstated, you do not qualify to receive new licenses for the same │
//?? │ material under section 10. │
//?? │ │
//?? │ 9. Acceptance Not Required for Having Copies. │
//?? │ │
//?? │ You are not required to accept this License in order to receive or │
//?? │ run a copy of the Program. Ancillary propagation of a covered work │
//?? │ occurring solely as a consequence of using peer-to-peer transmission │
//?? │ to receive a copy likewise does not require acceptance. However, │
//?? │ nothing other than this License grants you permission to propagate or │
//?? │ modify any covered work. These actions infringe copyright if you do │
//?? │ not accept this License. Therefore, by modifying or propagating a │
//?? │ covered work, you indicate your acceptance of this License to do so. │
//?? │ │
//?? │ 10. Automatic Licensing of Downstream Recipients. │
//?? │ │
//?? │ Each time you convey a covered work, the recipient automatically │
//?? │ receives a license from the original licensors, to run, modify and │
//?? │ propagate that work, subject to this License. You are not responsible │
//?? │ for enforcing compliance by third parties with this License. │
//?? │ │
//?? │ An "entity transaction" is a transaction transferring control of an │
//?? │ organization, or substantially all assets of one, or subdividing an │
//?? │ organization, or merging organizations. If propagation of a covered │
//?? │ work results from an entity transaction, each party to that │
//?? │ transaction who receives a copy of the work also receives whatever │
//?? │ licenses to the work the party's predecessor in interest had or could │
//?? │ give under the previous paragraph, plus a right to possession of the │
//?? │ Corresponding Source of the work from the predecessor in interest, if │
//?? │ the predecessor has it or can get it with reasonable efforts. │
//?? │ │
//?? │ You may not impose any further restrictions on the exercise of the │
//?? │ rights granted or affirmed under this License. For example, you may │
//?? │ not impose a license fee, royalty, or other charge for exercise of │
//?? │ rights granted under this License, and you may not initiate litigation │
//?? │ (including a cross-claim or counterclaim in a lawsuit) alleging that │
//?? │ any patent claim is infringed by making, using, selling, offering for │
//?? │ sale, or importing the Program or any portion of it. │
//?? │ │
//?? │ 11. Patents. │
//?? │ │
//?? │ A "contributor" is a copyright holder who authorizes use under this │
//?? │ License of the Program or a work on which the Program is based. The │
//?? │ work thus licensed is called the contributor's "contributor version". │
//?? │ │
//?? │ A contributor's "essential patent claims" are all patent claims │
//?? │ owned or controlled by the contributor, whether already acquired or │
//?? │ hereafter acquired, that would be infringed by some manner, permitted │
//?? │ by this License, of making, using, or selling its contributor version, │
//?? │ but do not include claims that would be infringed only as a │
//?? │ consequence of further modification of the contributor version. For │
//?? │ purposes of this definition, "control" includes the right to grant │
//?? │ patent sublicenses in a manner consistent with the requirements of │
//?? │ this License. │
//?? │ │
//?? │ Each contributor grants you a non-exclusive, worldwide, royalty-free │
//?? │ patent license under the contributor's essential patent claims, to │
//?? │ make, use, sell, offer for sale, import and otherwise run, modify and │
//?? │ propagate the contents of its contributor version. │
//?? │ │
//?? │ In the following three paragraphs, a "patent license" is any express │
//?? │ agreement or commitment, however denominated, not to enforce a patent │
//?? │ (such as an express permission to practice a patent or covenant not to │
//?? │ sue for patent infringement). To "grant" such a patent license to a │
//?? │ party means to make such an agreement or commitment not to enforce a │
//?? │ patent against the party. │
//?? │ │
//?? │ If you convey a covered work, knowingly relying on a patent license, │
//?? │ and the Corresponding Source of the work is not available for anyone │
//?? │ to copy, free of charge and under the terms of this License, through a │
//?? │ publicly available network server or other readily accessible means, │
//?? │ then you must either (1) cause the Corresponding Source to be so │
//?? │ available, or (2) arrange to deprive yourself of the benefit of the │
//?? │ patent license for this particular work, or (3) arrange, in a manner │
//?? │ consistent with the requirements of this License, to extend the patent │
//?? │ license to downstream recipients. "Knowingly relying" means you have │
//?? │ actual knowledge that, but for the patent license, your conveying the │
//?? │ covered work in a country, or your recipient's use of the covered work │
//?? │ in a country, would infringe one or more identifiable patents in that │
//?? │ country that you have reason to believe are valid. │
//?? │ │
//?? │ If, pursuant to or in connection with a single transaction or │
//?? │ arrangement, you convey, or propagate by procuring conveyance of, a │
//?? │ covered work, and grant a patent license to some of the parties │
//?? │ receiving the covered work authorizing them to use, propagate, modify │
//?? │ or convey a specific copy of the covered work, then the patent license │
//?? │ you grant is automatically extended to all recipients of the covered │
//?? │ work and works based on it. │
//?? │ │
//?? │ A patent license is "discriminatory" if it does not include within │
//?? │ the scope of its coverage, prohibits the exercise of, or is │
//?? │ conditioned on the non-exercise of one or more of the rights that are │
//?? │ specifically granted under this License. You may not convey a covered │
//?? │ work if you are a party to an arrangement with a third party that is │
//?? │ in the business of distributing software, under which you make payment │
//?? │ to the third party based on the extent of your activity of conveying │
//?? │ the work, and under which the third party grants, to any of the │
//?? │ parties who would receive the covered work from you, a discriminatory │
//?? │ patent license (a) in connection with copies of the covered work │
//?? │ conveyed by you (or copies made from those copies), or (b) primarily │
//?? │ for and in connection with specific products or compilations that │
//?? │ contain the covered work, unless you entered into that arrangement, │
//?? │ or that patent license was granted, prior to 28 March 2007. │
//?? │ │
//?? │ Nothing in this License shall be construed as excluding or limiting │
//?? │ any implied license or other defenses to infringement that may │
//?? │ otherwise be available to you under applicable patent law. │
//?? │ │
//?? │ 12. No Surrender of Others' Freedom. │
//?? │ │
//?? │ If conditions are imposed on you (whether by court order, agreement or │
//?? │ otherwise) that contradict the conditions of this License, they do not │
//?? │ excuse you from the conditions of this License. If you cannot convey a │
//?? │ covered work so as to satisfy simultaneously your obligations under this │
//?? │ License and any other pertinent obligations, then as a consequence you may │
//?? │ not convey it at all. For example, if you agree to terms that obligate you │
//?? │ to collect a royalty for further conveying from those to whom you convey │
//?? │ the Program, the only way you could satisfy both those terms and this │
//?? │ License would be to refrain entirely from conveying the Program. │
//?? │ │
//?? │ 13. Remote Network Interaction; Use with the GNU General Public License. │
//?? │ │
//?? │ Notwithstanding any other provision of this License, if you modify the │
//?? │ Program, your modified version must prominently offer all users │
//?? │ interacting with it remotely through a computer network (if your version │
//?? │ supports such interaction) an opportunity to receive the Corresponding │
//?? │ Source of your version by providing access to the Corresponding Source │
//?? │ from a network server at no charge, through some standard or customary │
//?? │ means of facilitating copying of software. This Corresponding Source │
//?? │ shall include the Corresponding Source for any work covered by version 3 │
//?? │ of the GNU General Public License that is incorporated pursuant to the │
//?? │ following paragraph. │
//?? │ │
//?? │ Notwithstanding any other provision of this License, you have │
//?? │ permission to link or combine any covered work with a work licensed │
//?? │ under version 3 of the GNU General Public License into a single │
//?? │ combined work, and to convey the resulting work. The terms of this │
//?? │ License will continue to apply to the part which is the covered work, │
//?? │ but the work with which it is combined will remain governed by version │
//?? │ 3 of the GNU General Public License. │
//?? │ │
//?? │ 14. Revised Versions of this License. │
//?? │ │
//?? │ The Free Software Foundation may publish revised and/or new versions of │
//?? │ the GNU Affero General Public License from time to time. Such new versions │
//?? │ will be similar in spirit to the present version, but may differ in detail to │
//?? │ address new problems or concerns. │
//?? │ │
//?? │ Each version is given a distinguishing version number. If the │
//?? │ Program specifies that a certain numbered version of the GNU Affero General │
//?? │ Public License "or any later version" applies to it, you have the │
//?? │ option of following the terms and conditions either of that numbered │
//?? │ version or of any later version published by the Free Software │
//?? │ Foundation. If the Program does not specify a version number of the │
//?? │ GNU Affero General Public License, you may choose any version ever published │
//?? │ by the Free Software Foundation. │
//?? │ │
//?? │ If the Program specifies that a proxy can decide which future │
//?? │ versions of the GNU Affero General Public License can be used, that proxy's │
//?? │ public statement of acceptance of a version permanently authorizes you │
//?? │ to choose that version for the Program. │
//?? │ │
//?? │ Later license versions may give you additional or different │
//?? │ permissions. However, no additional obligations are imposed on any │
//?? │ author or copyright holder as a result of your choosing to follow a │
//?? │ later version. │
//?? │ │
//?? │ 15. Disclaimer of Warranty. │
//?? │ │
//?? │ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY │
//?? │ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT │
//?? │ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY │
//?? │ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, │
//?? │ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR │
//?? │ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM │
//?? │ IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF │
//?? │ ALL NECESSARY SERVICING, REPAIR OR CORRECTION. │
//?? │ │
//?? │ 16. Limitation of Liability. │
//?? │ │
//?? │ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING │
//?? │ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS │
//?? │ THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY │
//?? │ GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE │
//?? │ USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF │
//?? │ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD │
//?? │ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), │
//?? │ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF │
//?? │ SUCH DAMAGES. │
//?? │ │
//?? │ 17. Interpretation of Sections 15 and 16. │
//?? │ │
//?? │ If the disclaimer of warranty and limitation of liability provided │
//?? │ above cannot be given local legal effect according to their terms, │
//?? │ reviewing courts shall apply local law that most closely approximates │
//?? │ an absolute waiver of all civil liability in connection with the │
//?? │ Program, unless a warranty or assumption of liability accompanies a │
//?? │ copy of the Program in return for a fee. │
//?? │ │
//?? │ END OF TERMS AND CONDITIONS │
//?? │ │
//?? │ How to Apply These Terms to Your New Programs │
//?? │ │
//?? │ If you develop a new program, and you want it to be of the greatest │
//?? │ possible use to the public, the best way to achieve this is to make it │
//?? │ free software which everyone can redistribute and change under these terms. │
//?? │ │
//?? │ To do so, attach the following notices to the program. It is safest │
//?? │ to attach them to the start of each source file to most effectively │
//?? │ state the exclusion of warranty; and each file should have at least │
//?? │ the "copyright" line and a pointer to where the full notice is found. │
//?? │ │
//?? │ <one line to give the program's name and a brief idea of what it does.> │
//?? │ Copyright (C) <year> <name of author> │
//?? │ │
//?? │ This program is free software: you can redistribute it and/or modify │
//?? │ it under the terms of the GNU Affero General Public License as published │
//?? │ by the Free Software Foundation, either version 3 of the License, or │
//?? │ (at your option) any later version. │
//?? │ │
//?? │ This program is distributed in the hope that it will be useful, │
//?? │ but WITHOUT ANY WARRANTY; without even the implied warranty of │
//?? │ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │
//?? │ GNU Affero General Public License for more details. │
//?? │ │
//?? │ You should have received a copy of the GNU Affero General Public License │
//?? │ along with this program. If not, see <https://www.gnu.org/licenses/>. │
//?? │ │
//?? │ Also add information on how to contact you by electronic and paper mail. │
//?? │ │
//?? │ If your software can interact with users remotely through a computer │
//?? │ network, you should also make sure that it provides a way for users to │
//?? │ get its source. For example, if your program is a web application, its │
//?? │ interface could display a "Source" link that leads users to an archive │
//?? │ of the code. There are many ways you could offer source, and different │
//?? │ solutions will be better for different programs; see section 13 for the │
//?? │ specific requirements. │
//?? │ │
//?? │ You should also get your employer (if you work as a programmer) or school, │
//?? │ if any, to sign a "copyright disclaimer" for the program, if necessary. │
//?? │ For more information on this, and how to apply and follow the GNU AGPL, see │
//?? │ <https://www.gnu.org/licenses/>. │
//?? │ │
//?? ╰─────────────────────────────────────────────────────────────────────────────────╯
(() => {
if (!compareVersions('5.0.0', Blockbench.version)) {
const message = `
# Animated Java does not work in Blockbench 5
You will need to install and use Blockbench v4.12.6 to use Animated Java until it is updated to support 5.
## How to install Blockbench v4.12.6
1. Download the portable version of Blockbench 4.12.6 [here](https://github.com/JannisX11/blockbench/releases/download/v4.12.6/Blockbench_4.12.6_portable.exe).
2. Once it's finished downloading, double click the .exe file to run it.
If you're familiar with command line interfaces, you can use [Envbench](https://www.npmjs.com/package/envbench) to install and manage multiple Blockbench versions side by side.
`;
Blockbench.showMessageBox({title: 'Animated Java - Incompatible Blockbench Version',message,width:600});
requestAnimationFrame(() => Plugins.registered['animated_java'].uninstall());
throw new Error(message);
}
})()
"use strict";(()=>{var xI=Object.create;var ys=Object.defineProperty;var jy=Object.getOwnPropertyDescriptor;var vI=Object.getOwnPropertyNames;var bI=Object.getPrototypeOf,yI=Object.prototype.hasOwnProperty;var wI=(t,e,n)=>e in t?ys(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var s=(t,e)=>ys(t,"name",{value:e,configurable:!0}),Ee=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var EI=(t,e)=>()=>(t&&(e=t(t=0)),e);var oe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),vn=(t,e)=>{for(var n in e)ys(t,n,{get:e[n],enumerable:!0})},Ay=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of vI(e))!yI.call(t,a)&&a!==n&&ys(t,a,{get:()=>e[a],enumerable:!(i=jy(e,a))||i.enumerable});return t};var wi=(t,e,n)=>(n=t!=null?xI(bI(t)):{},Ay(e||!t||!t.__esModule?ys(n,"default",{value:t,enumerable:!0}):n,t)),nu=t=>Ay(ys({},"__esModule",{value:!0}),t),Do=(t,e,n,i)=>{for(var a=i>1?void 0:i?jy(e,n):e,r=t.length-1,o;r>=0;r--)(o=t[r])&&(a=(i?o(e,n,a):o(a))||a);return i&&a&&ys(e,n,a),a};var lt=(t,e,n)=>(wI(t,typeof e!="symbol"?e+"":e,n),n);var kI=t=>new Uint8Array(Buffer.from(t,"base64"));var Dl={};vn(Dl,{Buffer:()=>ks});var ks,No=EI(()=>{ks=globalThis.Buffer});var Cp=oe((zg,c1)=>{var Tp=(No(),nu(Dl)),hr=Tp.Buffer;function l1(t,e){for(var n in t)e[n]=t[n]}s(l1,"copyProps");hr.from&&hr.alloc&&hr.allocUnsafe&&hr.allocUnsafeSlow?c1.exports=Tp:(l1(Tp,zg),zg.Buffer=js);function js(t,e,n){return hr(t,e,n)}s(js,"SafeBuffer");js.prototype=Object.create(hr.prototype);l1(hr,js);js.from=function(t,e,n){if(typeof t=="number")throw new TypeError("Argument must not be a number");return hr(t,e,n)};js.alloc=function(t,e,n){if(typeof t!="number")throw new TypeError("Argument must be a number");var i=hr(t);return e!==void 0?typeof n=="string"?i.fill(e,n):i.fill(e):i.fill(0),i};js.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return hr(t)};js.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return Tp.SlowBuffer(t)}});var h1=oe((Y2e,Ug)=>{"use strict";Ug.exports=Ile;Ug.exports.parse=Rle;var u1=Ee("path").basename,yle=Cp().Buffer,wle=/[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g,Ele=/%[0-9A-Fa-f]{2}/,kle=/%([0-9A-Fa-f]{2})/g,p1=/[^\x20-\x7e\xa0-\xff]/g,jle=/\\([\u0000-\u007f])/g,Ale=/([\\"])/g,d1=/;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g,Tle=/^[\x20-\x7e\x80-\xff]+$/,Cle=/^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/,Sle=/^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/,Ole=/^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/;function Ile(t,e){var n=e||{},i=n.type||"attachment",a=Dle(t,n.fallback);return Fle(new f1(i,a))}s(Ile,"contentDisposition");function Dle(t,e){if(t!==void 0){var n={};if(typeof t!="string")throw new TypeError("filename must be a string");if(e===void 0&&(e=!0),typeof e!="string"&&typeof e!="boolean")throw new TypeError("fallback must be a string or boolean");if(typeof e=="string"&&p1.test(e))throw new TypeError("fallback must be ISO-8859-1 string");var i=u1(t),a=Tle.test(i),r=typeof e!="string"?e&&m1(i):u1(e),o=typeof r=="string"&&r!==i;return(o||!a||Ele.test(i))&&(n["filename*"]=i),(a||o)&&(n.filename=o?r:i),n}}s(Dle,"createparams");function Fle(t){var e=t.parameters,n=t.type;if(!n||typeof n!="string"||!Cle.test(n))throw new TypeError("invalid type");var i=String(n).toLowerCase();if(e&&typeof e=="object")for(var a,r=Object.keys(e).sort(),o=0;o<r.length;o++){a=r[o];var l=a.substr(-1)==="*"?Lle(e[a]):Ple(e[a]);i+="; "+a+"="+l}return i}s(Fle,"format");function Nle(t){var e=Sle.exec(t);if(!e)throw new TypeError("invalid extended field value");var n=e[1].toLowerCase(),i=e[2],a,r=i.replace(kle,Mle);switch(n){case"iso-8859-1":a=m1(r);break;case"utf-8":a=yle.from(r,"binary").toString("utf8");break;default:throw new TypeError("unsupported charset in extended field")}return a}s(Nle,"decodefield");function m1(t){return String(t).replace(p1,"?")}s(m1,"getlatin1");function Rle(t){if(!t||typeof t!="string")throw new TypeError("argument string is required");var e=Ole.exec(t);if(!e)throw new TypeError("invalid type format");var n=e[0].length,i=e[1].toLowerCase(),a,r=[],o={},l;for(n=d1.lastIndex=e[0].substr(-1)===";"?n-1:n;e=d1.exec(t);){if(e.index!==n)throw new TypeError("invalid parameter format");if(n+=e[0].length,a=e[1].toLowerCase(),l=e[2],r.indexOf(a)!==-1)throw new TypeError("invalid duplicate parameter");if(r.push(a),a.indexOf("*")+1===a.length){a=a.slice(0,-1),l=Nle(l),o[a]=l;continue}typeof o[a]!="string"&&(l[0]==='"'&&(l=l.substr(1,l.length-2).replace(jle,"$1")),o[a]=l)}if(n!==-1&&n!==t.length)throw new TypeError("invalid parameter format");return new f1(i,o)}s(Rle,"parse");function Mle(t,e){return String.fromCharCode(parseInt(e,16))}s(Mle,"pdecode");function Ble(t){return"%"+String(t).charCodeAt(0).toString(16).toUpperCase()}s(Ble,"pencode");function Ple(t){var e=String(t);return'"'+e.replace(Ale,"\\$1")+'"'}s(Ple,"qstring");function Lle(t){var e=String(t),n=encodeURIComponent(e).replace(wle,Ble);return"UTF-8''"+n}s(Lle,"ustring");function f1(t,e){this.type=t,this.parameters=e}s(f1,"ContentDisposition")});var _1=oe((Z2e,g1)=>{"use strict";g1.exports=t=>{let e=new Uint8Array(t);if(!(e&&e.length>1))return null;let n=s((i,a)=>{a=Object.assign({offset:0},a);for(let r=0;r<i.length;r++)if(i[r]!==e[r+a.offset])return!1;return!0},"check");if(n([255,216,255]))return{ext:"jpg",mime:"image/jpeg"};if(n([137,80,78,71,13,10,26,10]))return{ext:"png",mime:"image/png"};if(n([71,73,70]))return{ext:"gif",mime:"image/gif"};if(n([87,69,66,80],{offset:8}))return{ext:"webp",mime:"image/webp"};if(n([70,76,73,70]))return{ext:"flif",mime:"image/flif"};if((n([73,73,42,0])||n([77,77,0,42]))&&n([67,82],{offset:8}))return{ext:"cr2",mime:"image/x-canon-cr2"};if(n([73,73,42,0])||n([77,77,0,42]))return{ext:"tif",mime:"image/tiff"};if(n([66,77]))return{ext:"bmp",mime:"image/bmp"};if(n([73,73,188]))return{ext:"jxr",mime:"image/vnd.ms-photo"};if(n([56,66,80,83]))return{ext:"psd",mime:"image/vnd.adobe.photoshop"};if(n([80,75,3,4])&&n([109,105,109,101,116,121,112,101,97,112,112,108,105,99,97,116,105,111,110,47,101,112,117,98,43,122,105,112],{offset:30}))return{ext:"epub",mime:"application/epub+zip"};if(n([80,75,3,4])&&n([77,69,84,65,45,73,78,70,47,109,111,122,105,108,108,97,46,114,115,97],{offset:30}))return{ext:"xpi",mime:"application/x-xpinstall"};if(n([80,75])&&(e[2]===3||e[2]===5||e[2]===7)&&(e[3]===4||e[3]===6||e[3]===8))return{ext:"zip",mime:"application/zip"};if(n([117,115,116,97,114],{offset:257}))return{ext:"tar",mime:"application/x-tar"};if(n([82,97,114,33,26,7])&&(e[6]===0||e[6]===1))return{ext:"rar",mime:"application/x-rar-compressed"};if(n([31,139,8]))return{ext:"gz",mime:"application/gzip"};if(n([66,90,104]))return{ext:"bz2",mime:"application/x-bzip2"};if(n([55,122,188,175,39,28]))return{ext:"7z",mime:"application/x-7z-compressed"};if(n([120,1]))return{ext:"dmg",mime:"application/x-apple-diskimage"};if(n([0,0,0])&&(e[3]===24||e[3]===32)&&n([102,116,121,112],{offset:4})||n([51,103,112,53])||n([0,0,0,28,102,116,121,112,109,112,52,50])&&n([109,112,52,49,109,112,52,50,105,115,111,109],{offset:16})||n([0,0,0,28,102,116,121,112,105,115,111,109])||n([0,0,0,28,102,116,121,112,109,112,52,50,0,0,0,0]))return{ext:"mp4",mime:"video/mp4"};if(n([0,0,0,28,102,116,121,112,77,52,86]))return{ext:"m4v",mime:"video/x-m4v"};if(n([77,84,104,100]))return{ext:"mid",mime:"audio/midi"};if(n([26,69,223,163])){let i=e.subarray(4,4100),a=i.findIndex((r,o,l)=>l[o]===66&&l[o+1]===130);if(a>=0){let r=a+3,o=s(l=>Array.from(l).every((c,d)=>i[r+d]===c.charCodeAt(0)),"findDocType");if(o("matroska"))return{ext:"mkv",mime:"video/x-matroska"};if(o("webm"))return{ext:"webm",mime:"video/webm"}}}return n([0,0,0,20,102,116,121,112,113,116,32,32])||n([102,114,101,101],{offset:4})||n([102,116,121,112,113,116,32,32],{offset:4})||n([109,100,97,116],{offset:4})||n([119,105,100,101],{offset:4})?{ext:"mov",mime:"video/quicktime"}:n([82,73,70,70])&&n([65,86,73],{offset:8})?{ext:"avi",mime:"video/x-msvideo"}:n([48,38,178,117,142,102,207,17,166,217])?{ext:"wmv",mime:"video/x-ms-wmv"}:n([0,0,1,186])?{ext:"mpg",mime:"video/mpeg"}:n([73,68,51])||n([255,251])?{ext:"mp3",mime:"audio/mpeg"}:n([102,116,121,112,77,52,65],{offset:4})||n([77,52,65,32])?{ext:"m4a",mime:"audio/m4a"}:n([79,112,117,115,72,101,97,100],{offset:28})?{ext:"opus",mime:"audio/opus"}:n([79,103,103,83])?{ext:"ogg",mime:"audio/ogg"}:n([102,76,97,67])?{ext:"flac",mime:"audio/x-flac"}:n([82,73,70,70])&&n([87,65,86,69],{offset:8})?{ext:"wav",mime:"audio/x-wav"}:n([35,33,65,77,82,10])?{ext:"amr",mime:"audio/amr"}:n([37,80,68,70])?{ext:"pdf",mime:"application/pdf"}:n([77,90])?{ext:"exe",mime:"application/x-msdownload"}:(e[0]===67||e[0]===70)&&n([87,83],{offset:1})?{ext:"swf",mime:"application/x-shockwave-flash"}:n([123,92,114,116,102])?{ext:"rtf",mime:"application/rtf"}:n([0,97,115,109])?{ext:"wasm",mime:"application/wasm"}:n([119,79,70,70])&&(n([0,1,0,0],{offset:4})||n([79,84,84,79],{offset:4}))?{ext:"woff",mime:"application/font-woff"}:n([119,79,70,50])&&(n([0,1,0,0],{offset:4})||n([79,84,84,79],{offset:4}))?{ext:"woff2",mime:"application/font-woff"}:n([76,80],{offset:34})&&(n([0,0,1],{offset:8})||n([1,0,2],{offset:8})||n([2,0,2],{offset:8}))?{ext:"eot",mime:"application/octet-stream"}:n([0,1,0,0,0])?{ext:"ttf",mime:"application/font-sfnt"}:n([79,84,84,79,0])?{ext:"otf",mime:"application/font-sfnt"}:n([0,0,1,0])?{ext:"ico",mime:"image/x-icon"}:n([70,76,86,1])?{ext:"flv",mime:"video/x-flv"}:n([37,33])?{ext:"ps",mime:"application/postscript"}:n([253,55,122,88,90,0])?{ext:"xz",mime:"application/x-xz"}:n([83,81,76,105])?{ext:"sqlite",mime:"application/x-sqlite3"}:n([78,69,83,26])?{ext:"nes",mime:"application/x-nintendo-nes-rom"}:n([67,114,50,52])?{ext:"crx",mime:"application/x-google-chrome-extension"}:n([77,83,67,70])||n([73,83,99,40])?{ext:"cab",mime:"application/vnd.ms-cab-compressed"}:n([33,60,97,114,99,104,62,10,100,101,98,105,97,110,45,98,105,110,97,114,121])?{ext:"deb",mime:"application/x-deb"}:n([33,60,97,114,99,104,62])?{ext:"ar",mime:"application/x-unix-archive"}:n([237,171,238,219])?{ext:"rpm",mime:"application/x-rpm"}:n([31,160])||n([31,157])?{ext:"Z",mime:"application/x-compress"}:n([76,90,73,80])?{ext:"lz",mime:"application/x-lzip"}:n([208,207,17,224,161,177,26,225])?{ext:"msi",mime:"application/x-msi"}:n([6,14,43,52,2,5,1,1,13,1,2,1,1,2])?{ext:"mxf",mime:"application/mxf"}:n([66,76,69,78,68,69,82])?{ext:"blend",mime:"application/x-blender"}:null}});var v1=oe(($2e,x1)=>{"use strict";var Vle=_1(),zle=new Set(["7z","bz2","gz","rar","tar","zip","xz","gz"]);x1.exports=t=>{let e=Vle(t);return zle.has(e&&e.ext)?e:null}});var y1=oe((eEe,b1)=>{var Ro=Ee("constants"),Ule=process.cwd,Sp=null,qle=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return Sp||(Sp=Ule.call(process)),Sp};try{process.cwd()}catch{}typeof process.chdir=="function"&&(qg=process.chdir,process.chdir=function(t){Sp=null,qg.call(process,t)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,qg));var qg;b1.exports=Hle;function Hle(t){Ro.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&e(t),t.lutimes||n(t),t.chown=r(t.chown),t.fchown=r(t.fchown),t.lchown=r(t.lchown),t.chmod=i(t.chmod),t.fchmod=i(t.fchmod),t.lchmod=i(t.lchmod),t.chownSync=o(t.chownSync),t.fchownSync=o(t.fchownSync),t.lchownSync=o(t.lchownSync),t.chmodSync=a(t.chmodSync),t.fchmodSync=a(t.fchmodSync),t.lchmodSync=a(t.lchmodSync),t.stat=l(t.stat),t.fstat=l(t.fstat),t.lstat=l(t.lstat),t.statSync=c(t.statSync),t.fstatSync=c(t.fstatSync),t.lstatSync=c(t.lstatSync),t.chmod&&!t.lchmod&&(t.lchmod=function(u,p,m){m&&process.nextTick(m)},t.lchmodSync=function(){}),t.chown&&!t.lchown&&(t.lchown=function(u,p,m,f){f&&process.nextTick(f)},t.lchownSync=function(){}),qle==="win32"&&(t.rename=typeof t.rename!="function"?t.rename:function(u){function p(m,f,g){var x=Date.now(),_=0;u(m,f,s(function h(v){if(v&&(v.code==="EACCES"||v.code==="EPERM"||v.code==="EBUSY")&&Date.now()-x<6e4){setTimeout(function(){t.stat(f,function(b,y){b&&b.code==="ENOENT"?u(m,f,h):g(v)})},_),_<100&&(_+=10);return}g&&g(v)},"CB"))}return s(p,"rename"),Object.setPrototypeOf&&Object.setPrototypeOf(p,u),p}(t.rename)),t.read=typeof t.read!="function"?t.read:function(u){function p(m,f,g,x,_,h){var v;if(h&&typeof h=="function"){var b=0;v=s(function(y,w,S){if(y&&y.code==="EAGAIN"&&b<10)return b++,u.call(t,m,f,g,x,_,v);h.apply(this,arguments)},"callback")}return u.call(t,m,f,g,x,_,v)}return s(p,"read"),Object.setPrototypeOf&&Object.setPrototypeOf(p,u),p}(t.read),t.readSync=typeof t.readSync!="function"?t.readSync:function(u){return function(p,m,f,g,x){for(var _=0;;)try{return u.call(t,p,m,f,g,x)}catch(h){if(h.code==="EAGAIN"&&_<10){_++;continue}throw h}}}(t.readSync);function e(u){u.lchmod=function(p,m,f){u.open(p,Ro.O_WRONLY|Ro.O_SYMLINK,m,function(g,x){if(g){f&&f(g);return}u.fchmod(x,m,function(_){u.close(x,function(h){f&&f(_||h)})})})},u.lchmodSync=function(p,m){var f=u.openSync(p,Ro.O_WRONLY|Ro.O_SYMLINK,m),g=!0,x;try{x=u.fchmodSync(f,m),g=!1}finally{if(g)try{u.closeSync(f)}catch{}else u.closeSync(f)}return x}}s(e,"patchLchmod");function n(u){Ro.hasOwnProperty("O_SYMLINK")&&u.futimes?(u.lutimes=function(p,m,f,g){u.open(p,Ro.O_SYMLINK,function(x,_){if(x){g&&g(x);return}u.futimes(_,m,f,function(h){u.close(_,function(v){g&&g(h||v)})})})},u.lutimesSync=function(p,m,f){var g=u.openSync(p,Ro.O_SYMLINK),x,_=!0;try{x=u.futimesSync(g,m,f),_=!1}finally{if(_)try{u.closeSync(g)}catch{}else u.closeSync(g)}return x}):u.futimes&&(u.lutimes=function(p,m,f,g){g&&process.nextTick(g)},u.lutimesSync=function(){})}s(n,"patchLutimes");function i(u){return u&&function(p,m,f){return u.call(t,p,m,function(g){d(g)&&(g=null),f&&f.apply(this,arguments)})}}s(i,"chmodFix");function a(u){return u&&function(p,m){try{return u.call(t,p,m)}catch(f){if(!d(f))throw f}}}s(a,"chmodFixSync");function r(u){return u&&function(p,m,f,g){return u.call(t,p,m,f,function(x){d(x)&&(x=null),g&&g.apply(this,arguments)})}}s(r,"chownFix");function o(u){return u&&function(p,m,f){try{return u.call(t,p,m,f)}catch(g){if(!d(g))throw g}}}s(o,"chownFixSync");function l(u){return u&&function(p,m,f){typeof m=="function"&&(f=m,m=null);function g(x,_){_&&(_.uid<0&&(_.uid+=4294967296),_.gid<0&&(_.gid+=4294967296)),f&&f.apply(this,arguments)}return s(g,"callback"),m?u.call(t,p,m,g):u.call(t,p,g)}}s(l,"statFix");function c(u){return u&&function(p,m){var f=m?u.call(t,p,m):u.call(t,p);return f&&(f.uid<0&&(f.uid+=4294967296),f.gid<0&&(f.gid+=4294967296)),f}}s(c,"statFixSync");function d(u){if(!u||u.code==="ENOSYS")return!0;var p=!process.getuid||process.getuid()!==0;return!!(p&&(u.code==="EINVAL"||u.code==="EPERM"))}s(d,"chownErOk")}s(Hle,"patch")});var k1=oe((nEe,E1)=>{var w1=Ee("stream").Stream;E1.exports=Jle;function Jle(t){return{ReadStream:e,WriteStream:n};function e(i,a){if(!(this instanceof e))return new e(i,a);w1.call(this);var r=this;this.path=i,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,a=a||{};for(var o=Object.keys(a),l=0,c=o.length;l<c;l++){var d=o[l];this[d]=a[d]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){r._read()});return}t.open(this.path,this.flags,this.mode,function(u,p){if(u){r.emit("error",u),r.readable=!1;return}r.fd=p,r.emit("open",p),r._read()})}function n(i,a){if(!(this instanceof n))return new n(i,a);w1.call(this),this.path=i,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,a=a||{};for(var r=Object.keys(a),o=0,l=r.length;o<l;o++){var c=r[o];this[c]=a[c]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=t.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}s(Jle,"legacy")});var A1=oe((aEe,j1)=>{"use strict";j1.exports=Wle;var Gle=Object.getPrototypeOf||function(t){return t.__proto__};function Wle(t){if(t===null||typeof t!="object")return t;if(t instanceof Object)var e={__proto__:Gle(t)};else var e=Object.create(null);return Object.getOwnPropertyNames(t).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}s(Wle,"clone")});var O1=oe((oEe,Gg)=>{var jn=Ee("fs"),Kle=y1(),Yle=k1(),Xle=A1(),Op=Ee("util"),ri,Dp;typeof Symbol=="function"&&typeof Symbol.for=="function"?(ri=Symbol.for("graceful-fs.queue"),Dp=Symbol.for("graceful-fs.previous")):(ri="___graceful-fs.queue",Dp="___graceful-fs.previous");function Zle(){}s(Zle,"noop");function S1(t,e){Object.defineProperty(t,ri,{get:function(){return e}})}s(S1,"publishQueue");var As=Zle;Op.debuglog?As=Op.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(As=s(function(){var t=Op.format.apply(Op,arguments);t="GFS4: "+t.split(/\n/).join(`
GFS4: `),console.error(t)},"debug"));jn[ri]||(T1=global[ri]||[],S1(jn,T1),jn.close=function(t){function e(n,i){return t.call(jn,n,function(a){a||C1(),typeof i=="function"&&i.apply(this,arguments)})}return s(e,"close"),Object.defineProperty(e,Dp,{value:t}),e}(jn.close),jn.closeSync=function(t){function e(n){t.apply(jn,arguments),C1()}return s(e,"closeSync"),Object.defineProperty(e,Dp,{value:t}),e}(jn.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){As(jn[ri]),Ee("assert").equal(jn[ri].length,0)}));var T1;global[ri]||S1(global,jn[ri]);Gg.exports=Hg(Xle(jn));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!jn.__patched&&(Gg.exports=Hg(jn),jn.__patched=!0);function Hg(t){Kle(t),t.gracefulify=Hg,t.createReadStream=w,t.createWriteStream=S;var e=t.readFile;t.readFile=n;function n(k,R,D){return typeof R=="function"&&(D=R,R=null),B(k,R,D);function B(q,G,W,ee){return e(q,G,function(Z){Z&&(Z.code==="EMFILE"||Z.code==="ENFILE")?Fl([B,[q,G,W],Z,ee||Date.now(),Date.now()]):typeof W=="function"&&W.apply(this,arguments)})}s(B,"go$readFile")}s(n,"readFile");var i=t.writeFile;t.writeFile=a;function a(k,R,D,B){return typeof D=="function"&&(B=D,D=null),q(k,R,D,B);function q(G,W,ee,Z,me){return i(G,W,ee,function(X){X&&(X.code==="EMFILE"||X.code==="ENFILE")?Fl([q,[G,W,ee,Z],X,me||Date.now(),Date.now()]):typeof Z=="function"&&Z.apply(this,arguments)})}s(q,"go$writeFile")}s(a,"writeFile");var r=t.appendFile;r&&(t.appendFile=o);function o(k,R,D,B){return typeof D=="function"&&(B=D,D=null),q(k,R,D,B);function q(G,W,ee,Z,me){return r(G,W,ee,function(X){X&&(X.code==="EMFILE"||X.code==="ENFILE")?Fl([q,[G,W,ee,Z],X,me||Date.now(),Date.now()]):typeof Z=="function"&&Z.apply(this,arguments)})}s(q,"go$appendFile")}s(o,"appendFile");var l=t.copyFile;l&&(t.copyFile=c);function c(k,R,D,B){return typeof D=="function"&&(B=D,D=0),q(k,R,D,B);function q(G,W,ee,Z,me){return l(G,W,ee,function(X){X&&(X.code==="EMFILE"||X.code==="ENFILE")?Fl([q,[G,W,ee,Z],X,me||Date.now(),Date.now()]):typeof Z=="function"&&Z.apply(this,arguments)})}s(q,"go$copyFile")}s(c,"copyFile");var d=t.readdir;t.readdir=p;var u=/^v[0-5]\./;function p(k,R,D){typeof R=="function"&&(D=R,R=null);var B=u.test(process.version)?s(function(W,ee,Z,me){return d(W,q(W,ee,Z,me))},"go$readdir"):s(function(W,ee,Z,me){return d(W,ee,q(W,ee,Z,me))},"go$readdir");return B(k,R,D);function q(G,W,ee,Z){return function(me,X){me&&(me.code==="EMFILE"||me.code==="ENFILE")?Fl([B,[G,W,ee],me,Z||Date.now(),Date.now()]):(X&&X.sort&&X.sort(),typeof ee=="function"&&ee.call(this,me,X))}}}if(s(p,"readdir"),process.version.substr(0,4)==="v0.8"){var m=Yle(t);h=m.ReadStream,b=m.WriteStream}var f=t.ReadStream;f&&(h.prototype=Object.create(f.prototype),h.prototype.open=v);var g=t.WriteStream;g&&(b.prototype=Object.create(g.prototype),b.prototype.open=y),Object.defineProperty(t,"ReadStream",{get:function(){return h},set:function(k){h=k},enumerable:!0,configurable:!0}),Object.defineProperty(t,"WriteStream",{get:function(){return b},set:function(k){b=k},enumerable:!0,configurable:!0});var x=h;Object.defineProperty(t,"FileReadStream",{get:function(){return x},set:function(k){x=k},enumerable:!0,configurable:!0});var _=b;Object.defineProperty(t,"FileWriteStream",{get:function(){return _},set:function(k){_=k},enumerable:!0,configurable:!0});function h(k,R){return this instanceof h?(f.apply(this,arguments),this):h.apply(Object.create(h.prototype),arguments)}s(h,"ReadStream");function v(){var k=this;N(k.path,k.flags,k.mode,function(R,D){R?(k.autoClose&&k.destroy(),k.emit("error",R)):(k.fd=D,k.emit("open",D),k.read())})}s(v,"ReadStream$open");function b(k,R){return this instanceof b?(g.apply(this,arguments),this):b.apply(Object.create(b.prototype),arguments)}s(b,"WriteStream");function y(){var k=this;N(k.path,k.flags,k.mode,function(R,D){R?(k.destroy(),k.emit("error",R)):(k.fd=D,k.emit("open",D))})}s(y,"WriteStream$open");function w(k,R){return new t.ReadStream(k,R)}s(w,"createReadStream");function S(k,R){return new t.WriteStream(k,R)}s(S,"createWriteStream");var F=t.open;t.open=N;function N(k,R,D,B){return typeof D=="function"&&(B=D,D=null),q(k,R,D,B);function q(G,W,ee,Z,me){return F(G,W,ee,function(X,Q){X&&(X.code==="EMFILE"||X.code==="ENFILE")?Fl([q,[G,W,ee,Z],X,me||Date.now(),Date.now()]):typeof Z=="function"&&Z.apply(this,arguments)})}s(q,"go$open")}return s(N,"open"),t}s(Hg,"patch");function Fl(t){As("ENQUEUE",t[0].name,t[1]),jn[ri].push(t),Jg()}s(Fl,"enqueue");var Ip;function C1(){for(var t=Date.now(),e=0;e<jn[ri].length;++e)jn[ri][e].length>2&&(jn[ri][e][3]=t,jn[ri][e][4]=t);Jg()}s(C1,"resetQueue");function Jg(){if(clearTimeout(Ip),Ip=void 0,jn[ri].length!==0){var t=jn[ri].shift(),e=t[0],n=t[1],i=t[2],a=t[3],r=t[4];if(a===void 0)As("RETRY",e.name,n),e.apply(null,n);else if(Date.now()-a>=6e4){As("TIMEOUT",e.name,n);var o=n.pop();typeof o=="function"&&o.call(null,i)}else{var l=Date.now()-r,c=Math.max(r-a,1),d=Math.min(c*1.2,100);l>=d?(As("RETRY",e.name,n),e.apply(null,n.concat([a]))):jn[ri].push(t)}Ip===void 0&&(Ip=setTimeout(Jg,0))}}s(Jg,"retry")});var Wg=oe((lEe,I1)=>{"use strict";I1.exports=t=>{let e=new Uint8Array(t);if(!(e&&e.length>1))return null;let n=s((i,a)=>{a=Object.assign({offset:0},a);for(let r=0;r<i.length;r++)if(i[r]!==e[r+a.offset])return!1;return!0},"check");if(n([255,216,255]))return{ext:"jpg",mime:"image/jpeg"};if(n([137,80,78,71,13,10,26,10]))return{ext:"png",mime:"image/png"};if(n([71,73,70]))return{ext:"gif",mime:"image/gif"};if(n([87,69,66,80],{offset:8}))return{ext:"webp",mime:"image/webp"};if(n([70,76,73,70]))return{ext:"flif",mime:"image/flif"};if((n([73,73,42,0])||n([77,77,0,42]))&&n([67,82],{offset:8}))return{ext:"cr2",mime:"image/x-canon-cr2"};if(n([73,73,42,0])||n([77,77,0,42]))return{ext:"tif",mime:"image/tiff"};if(n([66,77]))return{ext:"bmp",mime:"image/bmp"};if(n([73,73,188]))return{ext:"jxr",mime:"image/vnd.ms-photo"};if(n([56,66,80,83]))return{ext:"psd",mime:"image/vnd.adobe.photoshop"};if(n([80,75,3,4])&&n([109,105,109,101,116,121,112,101,97,112,112,108,105,99,97,116,105,111,110,47,101,112,117,98,43,122,105,112],{offset:30}))return{ext:"epub",mime:"application/epub+zip"};if(n([80,75,3,4])&&n([77,69,84,65,45,73,78,70,47,109,111,122,105,108,108,97,46,114,115,97],{offset:30}))return{ext:"xpi",mime:"application/x-xpinstall"};if(n([80,75])&&(e[2]===3||e[2]===5||e[2]===7)&&(e[3]===4||e[3]===6||e[3]===8))return{ext:"zip",mime:"application/zip"};if(n([117,115,116,97,114],{offset:257}))return{ext:"tar",mime:"application/x-tar"};if(n([82,97,114,33,26,7])&&(e[6]===0||e[6]===1))return{ext:"rar",mime:"application/x-rar-compressed"};if(n([31,139,8]))return{ext:"gz",mime:"application/gzip"};if(n([66,90,104]))return{ext:"bz2",mime:"application/x-bzip2"};if(n([55,122,188,175,39,28]))return{ext:"7z",mime:"application/x-7z-compressed"};if(n([120,1]))return{ext:"dmg",mime:"application/x-apple-diskimage"};if(n([0,0,0])&&(e[3]===24||e[3]===32)&&n([102,116,121,112],{offset:4})||n([51,103,112,53])||n([0,0,0,28,102,116,121,112,109,112,52,50])&&n([109,112,52,49,109,112,52,50,105,115,111,109],{offset:16})||n([0,0,0,28,102,116,121,112,105,115,111,109])||n([0,0,0,28,102,116,121,112,109,112,52,50,0,0,0,0]))return{ext:"mp4",mime:"video/mp4"};if(n([0,0,0,28,102,116,121,112,77,52,86]))return{ext:"m4v",mime:"video/x-m4v"};if(n([77,84,104,100]))return{ext:"mid",mime:"audio/midi"};if(n([26,69,223,163])){let i=e.subarray(4,4100),a=i.findIndex((r,o,l)=>l[o]===66&&l[o+1]===130);if(a>=0){let r=a+3,o=s(l=>Array.from(l).every((c,d)=>i[r+d]===c.charCodeAt(0)),"findDocType");if(o("matroska"))return{ext:"mkv",mime:"video/x-matroska"};if(o("webm"))return{ext:"webm",mime:"video/webm"}}}return n([0,0,0,20,102,116,121,112,113,116,32,32])||n([102,114,101,101],{offset:4})||n([102,116,121,112,113,116,32,32],{offset:4})||n([109,100,97,116],{offset:4})||n([119,105,100,101],{offset:4})?{ext:"mov",mime:"video/quicktime"}:n([82,73,70,70])&&n([65,86,73],{offset:8})?{ext:"avi",mime:"video/x-msvideo"}:n([48,38,178,117,142,102,207,17,166,217])?{ext:"wmv",mime:"video/x-ms-wmv"}:n([0,0,1,186])?{ext:"mpg",mime:"video/mpeg"}:n([73,68,51])||n([255,251])?{ext:"mp3",mime:"audio/mpeg"}:n([102,116,121,112,77,52,65],{offset:4})||n([77,52,65,32])?{ext:"m4a",mime:"audio/m4a"}:n([79,112,117,115,72,101,97,100],{offset:28})?{ext:"opus",mime:"audio/opus"}:n([79,103,103,83])?{ext:"ogg",mime:"audio/ogg"}:n([102,76,97,67])?{ext:"flac",mime:"audio/x-flac"}:n([82,73,70,70])&&n([87,65,86,69],{offset:8})?{ext:"wav",mime:"audio/x-wav"}:n([35,33,65,77,82,10])?{ext:"amr",mime:"audio/amr"}:n([37,80,68,70])?{ext:"pdf",mime:"application/pdf"}:n([77,90])?{ext:"exe",mime:"application/x-msdownload"}:(e[0]===67||e[0]===70)&&n([87,83],{offset:1})?{ext:"swf",mime:"application/x-shockwave-flash"}:n([123,92,114,116,102])?{ext:"rtf",mime:"application/rtf"}:n([0,97,115,109])?{ext:"wasm",mime:"application/wasm"}:n([119,79,70,70])&&(n([0,1,0,0],{offset:4})||n([79,84,84,79],{offset:4}))?{ext:"woff",mime:"font/woff"}:n([119,79,70,50])&&(n([0,1,0,0],{offset:4})||n([79,84,84,79],{offset:4}))?{ext:"woff2",mime:"font/woff2"}:n([76,80],{offset:34})&&(n([0,0,1],{offset:8})||n([1,0,2],{offset:8})||n([2,0,2],{offset:8}))?{ext:"eot",mime:"application/octet-stream"}:n([0,1,0,0,0])?{ext:"ttf",mime:"font/ttf"}:n([79,84,84,79,0])?{ext:"otf",mime:"font/otf"}:n([0,0,1,0])?{ext:"ico",mime:"image/x-icon"}:n([70,76,86,1])?{ext:"flv",mime:"video/x-flv"}:n([37,33])?{ext:"ps",mime:"application/postscript"}:n([253,55,122,88,90,0])?{ext:"xz",mime:"application/x-xz"}:n([83,81,76,105])?{ext:"sqlite",mime:"application/x-sqlite3"}:n([78,69,83,26])?{ext:"nes",mime:"application/x-nintendo-nes-rom"}:n([67,114,50,52])?{ext:"crx",mime:"application/x-google-chrome-extension"}:n([77,83,67,70])||n([73,83,99,40])?{ext:"cab",mime:"application/vnd.ms-cab-compressed"}:n([33,60,97,114,99,104,62,10,100,101,98,105,97,110,45,98,105,110,97,114,121])?{ext:"deb",mime:"application/x-deb"}:n([33,60,97,114,99,104,62])?{ext:"ar",mime:"application/x-unix-archive"}:n([237,171,238,219])?{ext:"rpm",mime:"application/x-rpm"}:n([31,160])||n([31,157])?{ext:"Z",mime:"application/x-compress"}:n([76,90,73,80])?{ext:"lz",mime:"application/x-lzip"}:n([208,207,17,224,161,177,26,225])?{ext:"msi",mime:"application/x-msi"}:n([6,14,43,52,2,5,1,1,13,1,2,1,1,2])?{ext:"mxf",mime:"application/mxf"}:n([71],{o
gitextract_sf8c47uj/ ├── .github/ │ ├── pull_request_template.md │ └── workflows/ │ ├── plugin_updates.yml │ └── validate.yml ├── .gitignore ├── .vscode/ │ └── settings.json ├── README.md ├── build/ │ ├── generate_plugin_updates.mjs │ └── update_plugin_updates.mjs ├── package.json ├── plugins/ │ ├── _template/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── members.yml │ │ └── plugin.js │ ├── activity_tracker/ │ │ ├── about.md │ │ ├── activity_tracker.js │ │ └── changelog.json │ ├── ambient_occlusion.js │ ├── animated_java/ │ │ ├── about.md │ │ ├── animated_java.js │ │ ├── changelog.json │ │ └── members.yml │ ├── animated_platforms/ │ │ ├── about.md │ │ └── animated_platforms.js │ ├── animation_sliders/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── animation_sliders.js │ │ └── members.yml │ ├── animation_to_java.js │ ├── animation_to_json.js │ ├── animation_utils/ │ │ ├── README.md │ │ ├── about.md │ │ ├── animation_utils.js │ │ ├── changelog.json │ │ ├── members.yml │ │ └── src/ │ │ ├── .eslintignore │ │ ├── .eslintrc.cjs │ │ ├── .gitignore │ │ ├── .nvmrc │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── resources/ │ │ │ ├── armorTemplate.json │ │ │ └── easing_keyframes.css │ │ ├── scripts/ │ │ │ └── updateManifest.mjs │ │ ├── tests/ │ │ │ └── easing.test.ts │ │ ├── ts/ │ │ │ ├── animationUi.ts │ │ │ ├── codec.ts │ │ │ ├── constants.ts │ │ │ ├── easing.ts │ │ │ ├── events.ts │ │ │ ├── index.ts │ │ │ ├── keyframe.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ └── blockbench-types.d.ts │ │ └── webpack.config.js │ ├── animator.js │ ├── arcaniax_block_exporter.js │ ├── armor_stand_animator.js │ ├── asset_browser/ │ │ ├── about.md │ │ ├── asset_browser.js │ │ └── changelog.json │ ├── azurelib_utils/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── azurelib_utils.js │ │ ├── azurelib_utils.js.LICENSE.txt │ │ ├── changelog.json │ │ └── members.yml │ ├── backup_viewer/ │ │ ├── about.md │ │ ├── backup_viewer.js │ │ └── changelog.json │ ├── baked_ambient_occlusion/ │ │ ├── LICENSE.MD │ │ ├── README.md │ │ ├── about.md │ │ ├── baked_ambient_occlusion.js │ │ ├── members.yml │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── types.d.ts │ │ ├── tsconfig.json │ │ └── webpack.config.js │ ├── bakery.js │ ├── bamo/ │ │ ├── bamo.js │ │ └── src/ │ │ ├── .gitignore │ │ ├── babel.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── components/ │ │ │ │ ├── BamoAdvancedProperties.vue │ │ │ │ ├── BamoAdvancedTemplate.html │ │ │ │ ├── BamoBaseComponent.vue │ │ │ │ ├── ComponentTemplate.html │ │ │ │ └── bamo.css │ │ │ ├── main.js │ │ │ └── util/ │ │ │ ├── Codec.js │ │ │ ├── GenDataFiles.js │ │ │ ├── GenStates.js │ │ │ ├── OptionArrays.js │ │ │ ├── Settings.js │ │ │ └── Utils.js │ │ └── webpack.config.js │ ├── bbs_exporter/ │ │ ├── about.md │ │ ├── bbs_exporter.js │ │ └── changelog.json │ ├── bedrock_block_transforms/ │ │ └── bedrock_block_transforms.js │ ├── block_multi_collisions/ │ │ ├── LICENSE.md │ │ ├── about.md │ │ ├── block_multi_collisions.js │ │ ├── changelog.json │ │ └── members.yml │ ├── blockmodels-exporter.js │ ├── bone_view/ │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── about.md │ │ ├── bone_view.js │ │ ├── changelog.json │ │ └── members.yml │ ├── brush.js │ ├── brush_randomizer.js │ ├── brush_tuna/ │ │ ├── about.md │ │ ├── brush_tuna.js │ │ ├── changelog.json │ │ └── members.yml │ ├── cameras.js │ ├── cardinal.js │ ├── cem_template_loader/ │ │ ├── about.md │ │ ├── cem_template_loader.js │ │ └── changelog.json │ ├── clone_brush.js │ ├── code_view.js │ ├── collapsible_start_screen_categories.js │ ├── colour_gradient_generator/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── colour_gradient_generator.js │ ├── cosmic_reach_model_editor/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── cosmic_reach_model_editor.js │ ├── creative_mode/ │ │ ├── LICENSE │ │ ├── about.md │ │ └── creative_mode.js │ ├── csmodel.js │ ├── cube_inverter.js │ ├── custom_marker_colors.js │ ├── datagen_export.js │ ├── discord-rpc.js │ ├── double_sided_cubes.js │ ├── duplicate_renamer.js │ ├── easings/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── easings.js │ ├── emf_animation_addon/ │ │ ├── about.md │ │ ├── changelog.json │ │ ├── emf_animation_addon.js │ │ └── members.yml │ ├── endimations_exporter.js │ ├── expand_bone_timeline/ │ │ ├── about.md │ │ └── expand_bone_timeline.js │ ├── explorer/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── explorer.js │ ├── export_to_3mf/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── export_to_3mf.js │ │ ├── members.yml │ │ └── src/ │ │ ├── compile.ts │ │ ├── export_to_3mf.ts │ │ └── validation.ts │ ├── export_to_blender/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── export_to_blender.js │ │ └── members.yml │ ├── farsight/ │ │ ├── LICENSE │ │ ├── README.md │ │ └── farsight.js │ ├── figura_format/ │ │ ├── about.md │ │ └── figura_format.js │ ├── free_rotation/ │ │ ├── about.md │ │ ├── changelog.json │ │ ├── free_rotation.js │ │ └── members.yml │ ├── geckolib/ │ │ ├── README.md │ │ ├── about.md │ │ ├── changelog.json │ │ ├── geckolib.js │ │ ├── members.yml │ │ └── src/ │ │ ├── .eslintrc.cjs │ │ ├── .gitignore │ │ ├── .nvmrc │ │ ├── eslint.config.js │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── resources/ │ │ │ ├── armorTemplate.json │ │ │ └── easing_keyframes.css │ │ ├── scripts/ │ │ │ └── updateManifest.mjs │ │ ├── tests/ │ │ │ └── easing.test.ts │ │ ├── ts/ │ │ │ ├── animationUi.ts │ │ │ ├── codec.ts │ │ │ ├── constants.ts │ │ │ ├── easing.ts │ │ │ ├── events.ts │ │ │ ├── index.ts │ │ │ ├── keyframe.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ └── blockbench-types.d.ts │ │ └── webpack.config.js │ ├── geenium_bedrock_entity_helper.js │ ├── gltf_importer/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── gltf_importer.js │ │ ├── members.yml │ │ └── src/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── patches/ │ │ │ └── blockbench-types+5.0.0-beta.0.patch │ │ ├── plugin/ │ │ │ ├── GLTFLoader.js │ │ │ ├── defer.ts │ │ │ ├── global.d.ts │ │ │ ├── import_gltf.ts │ │ │ ├── parse_gltf.ts │ │ │ ├── plugin.ts │ │ │ ├── util.ts │ │ │ └── vector_hash_map.ts │ │ └── tsconfig.json │ ├── grayscale_preview.js │ ├── ground_plane_editor.js │ ├── guessing_game.js │ ├── highlight_generator.js │ ├── hytale_avatar_loader/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── changelog.json │ │ └── hytale_avatar_loader.js │ ├── hytale_bridge/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── hytale_bridge.js │ ├── hytale_hitbox_helper/ │ │ ├── about.md │ │ └── hytale_hitbox_helper.js │ ├── hytale_plugin/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── hytale_plugin.js │ ├── image_centering.js │ ├── java_block_sequencer/ │ │ ├── about.md │ │ ├── changelog.json │ │ ├── java_block_sequencer.js │ │ └── members.yml │ ├── let_there_be_noise/ │ │ ├── about.md │ │ └── let_there_be_noise.js │ ├── light_tracer_uploader.js │ ├── live_dev_reloader/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── live_dev_reloader.js │ ├── mc_text_generator.js │ ├── menu_icon_exporter/ │ │ ├── LICENSE.md │ │ ├── about.md │ │ └── menu_icon_exporter.js │ ├── mesh_tools/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── mesh_tools.js │ ├── meshy/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── changelog.json │ │ ├── members.yml │ │ └── meshy.js │ ├── mimodel_format.js │ ├── minecraft_block_wizard/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── minecraft_block_wizard.js │ ├── minecraft_entity_wizard/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── minecraft_entity_wizard.js │ ├── minecraft_item_wizard/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── minecraft_item_wizard.js │ ├── minecraft_title_generator/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── minecraft_title_generator.js │ ├── missing_texture_highlighter.js │ ├── mod_utils.js │ ├── modded_entity_fabric.js │ ├── multi-layer.js │ ├── no_java_limits/ │ │ ├── about.md │ │ └── no_java_limits.js │ ├── obj_animation_export.js │ ├── oc_3dm_model.js │ ├── optifine_player_models/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── optifine_player_models.js │ ├── optimize.js │ ├── outline_creator.js │ ├── outliner_group_exporter/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── changelog.json │ │ ├── members.yml │ │ └── outliner_group_exporter.js │ ├── pbr_preview/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── changelog.json │ │ ├── members.yml │ │ └── pbr_preview.js │ ├── performance_audit.js │ ├── pie_menu.js │ ├── plaster.js │ ├── player_statue_generator.js │ ├── pluginstats.js │ ├── preview_scene_customiser/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── preview_scene_customiser.js │ ├── quick_box_uv_layout.js │ ├── rainbow_road_game/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ └── rainbow_road_game.js │ ├── reexport_on_save/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── members.yml │ │ └── reexport_on_save.js │ ├── reference_models/ │ │ └── reference_models.js │ ├── repeat_it.js │ ├── repeating_textures/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── members.yml │ │ └── repeating_textures.js │ ├── resource_pack_exporter.js │ ├── resource_pack_utilities/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── resource_pack_utilities.js │ ├── resourcepack_packager.js │ ├── root_motion_extractor.js │ ├── sam3dj.js │ ├── scene_recorder/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── scene_recorder.js │ ├── screencast_keys.js │ ├── seat_position.js │ ├── shape_generator.js │ ├── shaper.js │ ├── simplify.js │ ├── skin_mirror.js │ ├── skin_packager.js │ ├── smudge_brush/ │ │ ├── LICENSE.MD │ │ ├── members.yml │ │ └── smudge_brush.js │ ├── splash_art_customiser/ │ │ ├── about.md │ │ └── splash_art_customiser.js │ ├── startup_tips.js │ ├── structure_importer.js │ ├── texture_downscaler/ │ │ ├── LICENSE.MD │ │ ├── about.md │ │ ├── members.yml │ │ └── texture_downscaler.js │ ├── texture_filtering/ │ │ └── texture_filtering.js │ ├── texture_stitcher/ │ │ ├── about.md │ │ ├── changelog.json │ │ └── texture_stitcher.js │ ├── threecore_exporter.js │ ├── tint_preview.js │ ├── translation_plane_gizmo/ │ │ ├── about.md │ │ ├── changelog.json │ │ ├── members.yml │ │ └── translation_plane_gizmo.js │ ├── transparency_fix.js │ ├── tweaks_n_stuff/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── about.md │ │ ├── changelog.json │ │ ├── members.yml │ │ ├── src/ │ │ │ ├── .prettierrc.json │ │ │ ├── build.mjs │ │ │ ├── package.json │ │ │ ├── ts/ │ │ │ │ ├── constants.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lang/ │ │ │ │ │ ├── cz.json │ │ │ │ │ ├── de.json │ │ │ │ │ ├── en.json │ │ │ │ │ ├── es.json │ │ │ │ │ ├── fr.json │ │ │ │ │ ├── it.json │ │ │ │ │ ├── ja.json │ │ │ │ │ ├── ko.json │ │ │ │ │ ├── nl.json │ │ │ │ │ ├── pl.json │ │ │ │ │ ├── pt.json │ │ │ │ │ ├── ru.json │ │ │ │ │ ├── sv.json │ │ │ │ │ ├── uk.json │ │ │ │ │ ├── vi.json │ │ │ │ │ ├── zh.json │ │ │ │ │ └── zh_tw.json │ │ │ │ ├── languages.ts │ │ │ │ ├── mixins.ts │ │ │ │ ├── tweaks/ │ │ │ │ │ ├── base.ts │ │ │ │ │ ├── close_actions.ts │ │ │ │ │ ├── header_color.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── pin_tab.ts │ │ │ │ │ └── wrap_tabs.ts │ │ │ │ └── utils.ts │ │ │ ├── tsconfig.json │ │ │ └── types/ │ │ │ └── tweaks_n_stuff.d.ts │ │ └── tweaks_n_stuff.js │ ├── utility_flaggers.js │ ├── vintagestory_models.js │ ├── vox_importer.js │ ├── voxel_shape_fabric_generator.js │ ├── voxel_shape_generator.js │ ├── wasd_controls.js │ └── workspaces/ │ ├── about.md │ └── workspaces.js ├── plugins.json ├── schema.json ├── scripts/ │ └── validate.js ├── src/ │ ├── azurelib_utils/ │ │ ├── .eslintignore │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── .nvmrc │ │ ├── LICENSE_Geckolib │ │ ├── animation/ │ │ │ ├── azure-animation-tab.js │ │ │ ├── azure-animation-ui.js │ │ │ ├── azure-easing.js │ │ │ ├── azure-ik.js │ │ │ └── azure-keyframes.js │ │ ├── core/ │ │ │ ├── azure-codec.js │ │ │ ├── azure-settings.js │ │ │ └── azure-utils.js │ │ ├── index.js │ │ ├── package.json │ │ ├── templates/ │ │ │ └── armorTemplate.json │ │ └── webpack.config.js │ ├── easings/ │ │ ├── .gitignore │ │ ├── .prettierrc │ │ ├── README.md │ │ ├── eslint.config.mjs │ │ ├── package.json │ │ ├── src/ │ │ │ ├── easings.ts │ │ │ ├── index.ts │ │ │ └── util.ts │ │ └── tsconfig.json │ ├── mesh_tools/ │ │ ├── .gitignore │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── TODO.md │ │ ├── assets/ │ │ │ ├── actions.json │ │ │ ├── roboto_regular.json │ │ │ └── xyz_presets.jsonc │ │ ├── esbuild.js │ │ ├── jsconfig.json │ │ ├── meta/ │ │ │ └── changelog.json │ │ ├── package.json │ │ ├── plugins/ │ │ │ ├── about.plugin.js │ │ │ └── about.rollup.plugin.js │ │ └── src/ │ │ ├── actions.js │ │ ├── generators/ │ │ │ ├── index.js │ │ │ ├── quickprimitives/ │ │ │ │ ├── polyhedron.action.js │ │ │ │ ├── quickprimitives.action.js │ │ │ │ └── torusknot.action.js │ │ │ ├── terrain.action.js │ │ │ ├── terrain_style_editor.action.js │ │ │ ├── text_mesh.action.js │ │ │ └── xyz_math_surface_function.action.js │ │ ├── global.d.ts │ │ ├── globals.js │ │ ├── index.js │ │ ├── lib/ │ │ │ └── three-polyfills/ │ │ │ ├── BatchedMesh.js │ │ │ └── Triangle.js │ │ ├── operators/ │ │ │ ├── array_elements.action.js │ │ │ ├── boolean.action.ts │ │ │ ├── index.js │ │ │ ├── scatter.action.js │ │ │ ├── split_edges.action.js │ │ │ └── subdivide.action.js │ │ ├── shims/ │ │ │ └── three.shim.ts │ │ ├── tools/ │ │ │ ├── bevel._action.js │ │ │ ├── bridge_edge_loops.action.js │ │ │ ├── expand_selection.action.js │ │ │ ├── index.js │ │ │ ├── laplacian_smooth.action.js │ │ │ ├── poke.action.js │ │ │ ├── shrink_selection.action.js │ │ │ ├── to_sphere.action.js │ │ │ ├── triangulate.action.js │ │ │ ├── tris_to_quad.action.js │ │ │ └── uv_mapping/ │ │ │ ├── uv_mapping.action.js │ │ │ ├── uv_project_view.action.js │ │ │ └── uv_turnaround_projection.action.js │ │ └── utils/ │ │ ├── array.js │ │ ├── docs.js │ │ ├── facetype.js │ │ ├── geometry.js │ │ ├── info.js │ │ ├── mesh/ │ │ │ └── neighborhood.js │ │ ├── perlin.js │ │ ├── storage.js │ │ ├── terrain_gen.js │ │ ├── threejs_interoperability.js │ │ ├── utils.js │ │ └── vector.js │ ├── pbr_preview/ │ │ ├── .prettierignore │ │ ├── .prettierrc │ │ ├── changelog.mjs │ │ ├── package.json │ │ ├── src/ │ │ │ ├── constants.ts │ │ │ ├── deps.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── Lightr.ts │ │ │ │ ├── MaterialBrush.ts │ │ │ │ ├── PbrMaterials.ts │ │ │ │ ├── actions/ │ │ │ │ │ ├── bakeTextures.ts │ │ │ │ │ ├── channelAssignment.ts │ │ │ │ │ ├── generateNormal.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── labPbr.ts │ │ │ │ │ ├── materialTexture.ts │ │ │ │ │ ├── mer.ts │ │ │ │ │ ├── textureSet.ts │ │ │ │ │ ├── toggleLights.ts │ │ │ │ │ ├── togglePbr.ts │ │ │ │ │ ├── tonemapping.ts │ │ │ │ │ └── usdz.ts │ │ │ │ ├── applyPbrMaterial.ts │ │ │ │ ├── bakery.ts │ │ │ │ ├── disablePbr.ts │ │ │ │ ├── io/ │ │ │ │ │ ├── UsdzExporter.ts │ │ │ │ │ └── bbmat.ts │ │ │ │ ├── mer.ts │ │ │ │ ├── normalMap.ts │ │ │ │ ├── panels/ │ │ │ │ │ ├── channels.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── materialBrush.ts │ │ │ │ │ └── pbrSettings.ts │ │ │ │ ├── properties.ts │ │ │ │ ├── tools/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── materialBrush.ts │ │ │ │ └── util.ts │ │ │ └── types.d.ts │ │ └── tsconfig.json │ └── resourcepack_packager/ │ ├── .eslintrc │ ├── .gitignore │ ├── .prettierrc │ ├── LICENSE │ ├── package.json │ ├── src/ │ │ ├── elements/ │ │ │ ├── ExportResourcepackFormDialog.ts │ │ │ └── ExportResourcepackMenuAction.ts │ │ ├── index.ts │ │ ├── javaPackVersions.ts │ │ ├── pluginEmitter.ts │ │ ├── services/ │ │ │ ├── buildResourcepackService.ts │ │ │ └── resourcepackOptionsService.ts │ │ ├── types.d.ts │ │ └── utils/ │ │ ├── archiveUtils.ts │ │ ├── arrayUtils.ts │ │ ├── blockbenchUtils.ts │ │ └── objectUtils.ts │ ├── tsconfig.json │ └── webpack.config.js ├── types/ │ ├── changelog.schema.json │ ├── index.d.ts │ └── plugins.schema.json └── updates.json
Showing preview only (713K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (8139 symbols across 266 files)
FILE: plugins/_template/plugin.js
method onload (line 15) | onload() {
method onunload (line 18) | onunload() {
FILE: plugins/activity_tracker/activity_tracker.js
method onload (line 25) | onload() {
method onunload (line 241) | onunload() {
function durationString (line 257) | function durationString(num) {
function selectProject (line 269) | function selectProject() {
function visibilityChange (line 275) | function visibilityChange() {
function focus (line 280) | function focus() {
function blur (line 294) | function blur() {
FILE: plugins/ambient_occlusion.js
method onload (line 1314) | onload() {
method onunload (line 1424) | onunload() {
FILE: plugins/animated_java/animated_java.js
function l1 (line 736) | function l1(t,e){for(var n in t)e[n]=t[n]}
function js (line 736) | function js(t,e,n){return hr(t,e,n)}
function Ile (line 736) | function Ile(t,e){var n=e||{},i=n.type||"attachment",a=Dle(t,n.fallback)...
function Dle (line 736) | function Dle(t,e){if(t!==void 0){var n={};if(typeof t!="string")throw ne...
function Fle (line 736) | function Fle(t){var e=t.parameters,n=t.type;if(!n||typeof n!="string"||!...
function Nle (line 736) | function Nle(t){var e=Sle.exec(t);if(!e)throw new TypeError("invalid ext...
function m1 (line 736) | function m1(t){return String(t).replace(p1,"?")}
function Rle (line 736) | function Rle(t){if(!t||typeof t!="string")throw new TypeError("argument ...
function Mle (line 736) | function Mle(t,e){return String.fromCharCode(parseInt(e,16))}
function Ble (line 736) | function Ble(t){return"%"+String(t).charCodeAt(0).toString(16).toUpperCa...
function Ple (line 736) | function Ple(t){var e=String(t);return'"'+e.replace(Ale,"\\$1")+'"'}
function Lle (line 736) | function Lle(t){var e=String(t),n=encodeURIComponent(e).replace(wle,Ble)...
function f1 (line 736) | function f1(t,e){this.type=t,this.parameters=e}
function Hle (line 736) | function Hle(t){Ro.hasOwnProperty("O_SYMLINK")&&process.version.match(/^...
function Jle (line 736) | function Jle(t){return{ReadStream:e,WriteStream:n};function e(i,a){if(!(...
function Wle (line 736) | function Wle(t){if(t===null||typeof t!="object")return t;if(t instanceof...
function Zle (line 736) | function Zle(){}
function S1 (line 736) | function S1(t,e){Object.defineProperty(t,ri,{get:function(){return e}})}
function e (line 737) | function e(n,i){return t.call(jn,n,function(a){a||C1(),typeof i=="functi...
method constructor (line 3131) | constructor(i,a,r,o,l,c){this.x=i,this.z=a,this.compression=r,this.tim...
method getFile (line 3131) | getFile(){if(this.file instanceof qa)return this.file}
method getRoot (line 3131) | getRoot(){if(this.file instanceof qa)return this.file.root}
method getFileAsync (line 3131) | async getFileAsync(){return this.file?this.file:(this.file=(async()=>{...
method getRootAsync (line 3131) | async getRootAsync(){return(await this.getFileAsync()).root}
method isResolved (line 3131) | isResolved(){return this.file instanceof qa}
function e (line 737) | function e(n){t.apply(jn,arguments),C1()}
method constructor (line 3131) | constructor(i,a,r,o,l,c){this.x=i,this.z=a,this.compression=r,this.tim...
method getFile (line 3131) | getFile(){if(this.file instanceof qa)return this.file}
method getRoot (line 3131) | getRoot(){if(this.file instanceof qa)return this.file.root}
method getFileAsync (line 3131) | async getFileAsync(){return this.file?this.file:(this.file=(async()=>{...
method getRootAsync (line 3131) | async getRootAsync(){return(await this.getFileAsync()).root}
method isResolved (line 3131) | isResolved(){return this.file instanceof qa}
function Hg (line 737) | function Hg(t){Kle(t),t.gracefulify=Hg,t.createReadStream=w,t.createWrit...
function Fl (line 737) | function Fl(t){As("ENQUEUE",t[0].name,t[1]),jn[ri].push(t),Jg()}
function C1 (line 737) | function C1(){for(var t=Date.now(),e=0;e<jn[ri].length;++e)jn[ri][e].len...
function Jg (line 737) | function Jg(){if(clearTimeout(Ip),Ip=void 0,jn[ri].length!==0){var t=jn[...
function Qle (line 737) | function Qle(t,e,n,i){if(typeof t!="function")throw new TypeError('"call...
function M1 (line 737) | function M1(t,e){for(var n in t)e[n]=t[n]}
function Nl (line 737) | function Nl(t,e,n){return ao(t,e,n)}
function ece (line 737) | function ece(t){return Array.isArray?Array.isArray(t):Mp(t)==="[object A...
function tce (line 737) | function tce(t){return typeof t=="boolean"}
function nce (line 737) | function nce(t){return t===null}
function ice (line 737) | function ice(t){return t==null}
function ace (line 737) | function ace(t){return typeof t=="number"}
function rce (line 737) | function rce(t){return typeof t=="string"}
function oce (line 737) | function oce(t){return typeof t=="symbol"}
function sce (line 737) | function sce(t){return t===void 0}
function lce (line 737) | function lce(t){return Mp(t)==="[object RegExp]"}
function cce (line 737) | function cce(t){return typeof t=="object"&&t!==null}
function uce (line 737) | function uce(t){return Mp(t)==="[object Date]"}
function dce (line 737) | function dce(t){return Mp(t)==="[object Error]"||t instanceof Error}
function pce (line 737) | function pce(t){return typeof t=="function"}
function mce (line 737) | function mce(t){return t===null||typeof t=="boolean"||typeof t=="number"...
function Mp (line 737) | function Mp(t){return Object.prototype.toString.call(t)}
function fce (line 737) | function fce(t,e){if(!(t instanceof e))throw new TypeError("Cannot call ...
function hce (line 737) | function hce(t,e,n){t.copy(e,n)}
function t (line 737) | function t(){fce(this,t),this.head=null,this.tail=null,this.length=0}
function gce (line 737) | function gce(t,e){var n=this,i=this._readableState&&this._readableState....
function _ce (line 737) | function _ce(){this._readableState&&(this._readableState.destroyed=!1,th...
function Pp (line 737) | function Pp(t,e){t.emit("error",e)}
function J1 (line 737) | function J1(t){var e=this;this.next=null,this.entry=null,this.finish=fun...
function yce (line 737) | function yce(t){return Vp.from(t)}
function wce (line 737) | function wce(t){return Vp.isBuffer(t)||t instanceof bce}
function Ece (line 737) | function Ece(){}
function hu (line 737) | function hu(t,e){Ml=Ml||Ss(),t=t||{};var n=e instanceof Ml;this.objectMo...
function Bn (line 737) | function Bn(t){if(Ml=Ml||Ss(),!Lp.call(Bn,this)&&!(this instanceof Ml))r...
function kce (line 737) | function kce(t,e){var n=new Error("write after end");t.emit("error",n),C...
function jce (line 737) | function jce(t,e,n,i){var a=!0,r=!1;return n===null?r=new TypeError("May...
function Ace (line 737) | function Ace(t,e,n){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=...
function Tce (line 737) | function Tce(t,e,n,i,a,r){if(!n){var o=Ace(e,i,a);i!==o&&(n=!0,a="buffer...
function n_ (line 737) | function n_(t,e,n,i,a,r,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=...
function Cce (line 737) | function Cce(t,e,n,i,a){--e.pendingcb,n?(Cs.nextTick(a,i),Cs.nextTick(fu...
function Sce (line 737) | function Sce(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.write...
function Oce (line 737) | function Oce(t,e){var n=t._writableState,i=n.sync,a=n.writecb;if(Sce(n),...
function H1 (line 737) | function H1(t,e,n,i){n||Ice(t,e),e.pendingcb--,i(),fu(t,e)}
function Ice (line 737) | function Ice(t,e){e.length===0&&e.needDrain&&(e.needDrain=!1,t.emit("dra...
function Y1 (line 737) | function Y1(t,e){e.bufferProcessing=!0;var n=e.bufferedRequest;if(t._wri...
function X1 (line 737) | function X1(t){return t.ending&&t.length===0&&t.bufferedRequest===null&&...
function Dce (line 737) | function Dce(t,e){t._final(function(n){e.pendingcb--,n&&t.emit("error",n...
function Fce (line 737) | function Fce(t,e){!e.prefinished&&!e.finalCalled&&(typeof t._final=="fun...
function fu (line 737) | function fu(t,e){var n=X1(e);return n&&(Fce(t,e),e.pendingcb===0&&(e.fin...
function Nce (line 737) | function Nce(t,e,n){e.ending=!0,fu(t,e),n&&(e.finished?Cs.nextTick(n):t....
function Rce (line 737) | function Rce(t,e,n){var i=t.entry;for(t.entry=null;i;){var a=i.callback;...
function ro (line 737) | function ro(t){if(!(this instanceof ro))return new ro(t);ew.call(this,t)...
function Bce (line 737) | function Bce(){this.allowHalfOpen||this._writableState.ended||Q1.nextTic...
function Pce (line 737) | function Pce(t){t.end()}
function nw (line 737) | function nw(t,e){for(var n in t)e[n]=t[n]}
function Bl (line 737) | function Bl(t,e,n){return oo(t,e,n)}
function Lce (line 737) | function Lce(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case...
function Vce (line 737) | function Vce(t){var e=Lce(t);if(typeof e!="string"&&(c_.isEncoding===rw|...
function gu (line 737) | function gu(t){this.encoding=Vce(t);var e;switch(this.encoding){case"utf...
function l_ (line 737) | function l_(t){return t<=127?0:t>>5===6?2:t>>4===14?3:t>>3===30?4:t>>6==...
function zce (line 737) | function zce(t,e,n){var i=e.length-1;if(i<n)return 0;var a=l_(e[i]);retu...
function Uce (line 737) | function Uce(t,e,n){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(...
function qce (line 737) | function qce(t){var e=this.lastTotal-this.lastNeed,n=Uce(this,t,e);if(n!...
function Hce (line 737) | function Hce(t,e){var n=zce(this,t,e);if(!this.lastNeed)return t.toStrin...
function Jce (line 737) | function Jce(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?...
function Gce (line 737) | function Gce(t,e){if((t.length-e)%2===0){var n=t.toString("utf16le",e);i...
function Wce (line 737) | function Wce(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var...
function Kce (line 737) | function Kce(t,e){var n=(t.length-e)%3;return n===0?t.toString("base64",...
function Yce (line 737) | function Yce(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?...
function Xce (line 737) | function Xce(t){return t.toString(this.encoding)}
function Zce (line 737) | function Zce(t){return t&&t.length?this.write(t):""}
function eue (line 737) | function eue(t){return xu.from(t)}
function tue (line 737) | function tue(t){return xu.isBuffer(t)||t instanceof $ce}
function iue (line 737) | function iue(t,e,n){if(typeof t.prependListener=="function")return t.pre...
function mw (line 737) | function mw(t,e){_u=_u||Ss(),t=t||{};var n=e instanceof _u;this.objectMo...
function pn (line 737) | function pn(t){if(_u=_u||Ss(),!(this instanceof pn))return new pn(t);thi...
function fw (line 737) | function fw(t,e,n,i,a){var r=t._readableState;if(e===null)r.reading=!1,s...
function m_ (line 737) | function m_(t,e,n,i){e.flowing&&e.length===0&&!e.sync?(t.emit("data",n),...
function aue (line 737) | function aue(t,e){var n;return!tue(e)&&typeof e!="string"&&e!==void 0&&!...
function rue (line 737) | function rue(t){return!t.ended&&(t.needReadable||t.length<t.highWaterMar...
function oue (line 737) | function oue(t){return t>=sw?t=sw:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>...
function lw (line 737) | function lw(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!=...
function sue (line 737) | function sue(t,e){if(!e.ended){if(e.decoder){var n=e.decoder.end();n&&n....
function Hp (line 737) | function Hp(t){var e=t._readableState;e.needReadable=!1,e.emittedReadabl...
function cw (line 737) | function cw(t){Lt("emit readable"),t.emit("readable"),g_(t)}
function hw (line 737) | function hw(t,e){e.readingMore||(e.readingMore=!0,Ll.nextTick(lue,t,e))}
function lue (line 737) | function lue(t,e){for(var n=e.length;!e.reading&&!e.flowing&&!e.ended&&e...
function o (line 737) | function o(h,v){Lt("onunpipe"),h===n&&v&&v.hasUnpiped===!1&&(v.hasUnpipe...
function l (line 737) | function l(){Lt("onend"),t.end()}
function u (line 737) | function u(){Lt("cleanup"),t.removeListener("close",g),t.removeListener(...
function m (line 737) | function m(h){Lt("ondata"),p=!1;var v=t.write(h);v===!1&&!p&&((i.pipesCo...
function f (line 737) | function f(h){Lt("onerror",h),_(),t.removeListener("error",f),uw(t,"erro...
function g (line 737) | function g(){t.removeListener("finish",x),_()}
function x (line 737) | function x(){Lt("onfinish"),t.removeListener("close",g),_()}
function _ (line 737) | function _(){Lt("unpipe"),n.unpipe(t)}
function cue (line 737) | function cue(t){return function(){var e=t._readableState;Lt("pipeOnDrain...
function uue (line 737) | function uue(t){Lt("readable nexttick read 0"),t.read(0)}
function due (line 737) | function due(t,e){e.resumeScheduled||(e.resumeScheduled=!0,Ll.nextTick(p...
function pue (line 737) | function pue(t,e){e.reading||(Lt("resume read 0"),t.read(0)),e.resumeSch...
function g_ (line 737) | function g_(t){var e=t._readableState;for(Lt("flow",e.flowing);e.flowing...
function gw (line 737) | function gw(t,e){if(e.length===0)return null;var n;return e.objectMode?n...
function mue (line 737) | function mue(t,e,n){var i;return t<e.head.data.length?(i=e.head.data.sli...
function fue (line 737) | function fue(t,e){var n=e.head,i=1,a=n.data;for(t-=a.length;n=n.next;){v...
function hue (line 737) | function hue(t,e){var n=xu.allocUnsafe(t),i=e.head,a=1;for(i.data.copy(n...
function f_ (line 737) | function f_(t){var e=t._readableState;if(e.length>0)throw new Error('"en...
function gue (line 737) | function gue(t,e){!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readab...
function _w (line 737) | function _w(t,e){for(var n=0,i=t.length;n<i;n++)if(t[n]===e)return n;ret...
function _ue (line 737) | function _ue(t,e){var n=this._transformState;n.transforming=!1;var i=n.w...
function so (line 737) | function so(t){if(!(this instanceof so))return new so(t);Jp.call(this,t)...
function xue (line 737) | function xue(){var t=this;typeof this._flush=="function"?this._flush(fun...
function vw (line 737) | function vw(t,e,n){if(e)return t.emit("error",e);if(n!=null&&t.push(n),t...
function vu (line 737) | function vu(t){if(!(this instanceof vu))return new vu(t);ww.call(this,t)}
function In (line 737) | function In(t){if(!(this instanceof In))return new In(t);if(this._bufs=[...
function yue (line 737) | function yue(){for(var t={},e=0;e<arguments.length;e++){var n=arguments[...
function wue (line 737) | function wue(t,e){return new Buffer(t,e)}
function Eue (line 737) | function Eue(t,e){if(Buffer.isBuffer(t))return t;if(typeof t=="string")r...
function jue (line 737) | function jue(t){return t.length===1&&t.charCodeAt(0)<256}
function Wp (line 737) | function Wp(t,e,n,i){if(n<0||i>t.length)throw new RangeError("Out of ran...
function Aue (line 737) | function Aue(t,e,n,i){if(n<0||i>t.length)throw new RangeError("Out of ra...
function Tue (line 737) | function Tue(t,e,n,i,a){if(kue)return t.fill(e,n,i,a);if(typeof e=="numb...
function Cue (line 737) | function Cue(t){if(typeof t!="number")throw new TypeError('"size" argume...
function Lue (line 737) | function Lue(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else re...
function Qw (line 740) | function Qw(t,e){if(t&&e)return Qw(t)(e);if(typeof t!="function")throw n...
function Yp (line 740) | function Yp(t){var e=s(function(){return e.called?e.value:(e.called=!0,e...
function n3 (line 740) | function n3(t){var e=s(function(){if(e.called)throw new Error(e.onceErro...
function $ue (line 740) | function $ue(t){switch(t&ql.S_IFMT){case ql.S_IFBLK:return"block-device"...
function O_ (line 740) | function O_(t,e,n){t=t||function(u){this.queue(u)},e=e||function(){this....
function I_ (line 740) | function I_(t){this.name="Bzip2Error",this.message=t,this.stack=new Erro...
function gde (line 740) | function gde(){var t=[],e=0,n=0,i=!1,a=!1,r=null,o=null;function l(u){if...
function jde (line 740) | function jde(){for(var t=0;t<ku.length;t++)ku[t][0](ku[t][1]);ku=[],D_=!1}
function am (line 740) | function am(t,e){ku.push([t,e]),D_||(D_=!0,kde(jde,0))}
function Ade (line 740) | function Ade(t,e){function n(a){N_(e,a)}s(n,"resolvePromise");function i...
function $3 (line 740) | function $3(t){var e=t.owner,n=e._state,i=e._data,a=t[n],r=t.then;if(typ...
function e2 (line 740) | function e2(t,e){var n;try{if(t===e)throw new TypeError("A promises call...
function N_ (line 740) | function N_(t,e){(t===e||!e2(t,e))&&t2(t,e)}
function t2 (line 740) | function t2(t,e){t._state===F_&&(t._state=Z3,t._data=e,am(Tde,t))}
function ju (line 740) | function ju(t,e){t._state===F_&&(t._state=Z3,t._data=e,am(Cde,t))}
function n2 (line 740) | function n2(t){t._then=t._then.forEach($3)}
function Tde (line 740) | function Tde(t){t._state=nm,n2(t)}
function Cde (line 740) | function Cde(t){t._state=im,n2(t),!t._handled&&Q3&&global.process.emit("...
function Sde (line 740) | function Sde(t){global.process.emit("rejectionHandled",t)}
function Qi (line 740) | function Qi(t){if(typeof t!="function")throw new TypeError("Promise reso...
function r (line 740) | function r(c){return a++,function(d){i[c]=d,--a||e(i)}}
function Dde (line 740) | function Dde(t){if(t==null)throw new TypeError("Object.assign cannot be ...
function Fde (line 740) | function Fde(){try{if(!Object.assign)return!1;var t=new String("abc");if...
function M_ (line 740) | function M_(t,e){if(!t)return d2.reject(new Error("Expected a stream"));...
function sm (line 740) | function sm(){this.pending=0,this.max=1/0,this.listeners=[],this.waiting...
function g2 (line 740) | function g2(t){t.pending+=1;var e=!1;return n;function n(a){if(e)throw n...
function _2 (line 740) | function _2(t,e){e(g2(t))}
function co (line 740) | function co(t,e){e=e||{},cm.call(this),this.fd=t,this.pend=new Pde,this....
function e (line 740) | function e(n){n?t.emit("error",n):t.emit("close")}
method constructor (line 3131) | constructor(i,a,r,o,l,c){this.x=i,this.z=a,this.compression=r,this.tim...
method getFile (line 3131) | getFile(){if(this.file instanceof qa)return this.file}
method getRoot (line 3131) | getRoot(){if(this.file instanceof qa)return this.file.root}
method getFileAsync (line 3131) | async getFileAsync(){return this.file?this.file:(this.file=(async()=>{...
method getRootAsync (line 3131) | async getRootAsync(){return(await this.getFileAsync()).root}
method isResolved (line 3131) | isResolved(){return this.file instanceof qa}
function um (line 740) | function um(t,e){e=e||{},b2.call(this,e),this.context=t,this.context.ref...
function dm (line 740) | function dm(t,e){e=e||{},L_.call(this,e),this.context=t,this.context.ref...
function uo (line 740) | function uo(t,e){cm.call(this),e=e||{},this.refCount=0,this.buffer=t,thi...
function Lde (line 740) | function Lde(t,e){return new uo(t,e)}
function Vde (line 740) | function Vde(t,e){return new co(t,e)}
function w2 (line 740) | function w2(t){if(Lo.isBuffer(t))return t;var e=typeof Lo.alloc=="functi...
function zde (line 740) | function zde(t){var e=w2(4);return e.writeInt32BE(t,0),e}
function z_ (line 740) | function z_(t,e){t=w2(t),Lo.isBuffer(e)&&(e=e.readUInt32BE(0));for(var n...
function U_ (line 740) | function U_(){return zde(z_.apply(null,arguments))}
function Jde (line 740) | function Jde(t,e,n){typeof e=="function"&&(n=e,e=null),e==null&&(e={}),e...
function T2 (line 740) | function T2(t,e,n){typeof e=="function"&&(n=e,e=null),e==null&&(e={}),e....
function Gde (line 740) | function Gde(t,e,n){typeof e=="function"&&(n=e,e=null),e==null&&(e={}),e...
function J_ (line 740) | function J_(t,e,n,i){typeof n=="function"&&(i=n,n=null),n==null&&(n={}),...
function Vo (line 740) | function Vo(t,e,n,i,a,r,o,l,c,d){var u=this;hm.call(u),u.reader=t,u.read...
function La (line 740) | function La(t,e){t.autoClose&&t.close(),C2(t,e)}
function C2 (line 740) | function C2(t,e){t.emittedError||(t.emittedError=!0,t.emit("error",e))}
function Cu (line 740) | function Cu(){}
function S2 (line 740) | function S2(t,e){var n=t&31,i=(t>>5&15)-1,a=(t>>9&127)+1980,r=0,o=(e&31)...
function O2 (line 740) | function O2(t){return t.indexOf("\\")!==-1?"invalid characters in fileNa...
function Gl (line 740) | function Gl(t,e,n,i,a,r){if(i===0)return setImmediate(function(){r(null,...
function Su (line 740) | function Su(t){A2.call(this),this.actualByteCount=0,this.expectedByteCou...
function zo (line 740) | function zo(){hm.call(this),this.refCount=0}
function e (line 740) | function e(n){if(n)return t.emit("error",n);t.emit("close")}
method constructor (line 3131) | constructor(i,a,r,o,l,c){this.x=i,this.z=a,this.compression=r,this.tim...
method getFile (line 3131) | getFile(){if(this.file instanceof qa)return this.file}
method getRoot (line 3131) | getRoot(){if(this.file instanceof qa)return this.file.root}
method getFileAsync (line 3131) | async getFileAsync(){return this.file?this.file:(this.file=(async()=>{...
method getRootAsync (line 3131) | async getRootAsync(){return(await this.getFileAsync()).root}
method isResolved (line 3131) | isResolved(){return this.file instanceof qa}
function gm (line 740) | function gm(t){H_.call(this),this.context=t,this.context.ref(),this.unre...
function pm (line 740) | function pm(t,e,n,i){if(i)return t.toString("utf8",e,n);for(var a="",r=e...
function Wl (line 740) | function Wl(t,e){var n=t.readUInt32LE(e),i=t.readUInt32LE(e+4);return i*...
function mm (line 740) | function mm(t){if(t)throw t}
method constructor (line 740) | constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}
function e0 (line 740) | function e0(t,e){if(!t)return Promise.reject(new Error("Expected a strea...
function t0 (line 740) | function t0(t,e){try{return[decodeURIComponent(t.join(""))]}catch{}if(t....
function Spe (line 740) | function Spe(t){try{return decodeURIComponent(t)}catch{for(var e=t.match...
function Ope (line 740) | function Ope(t){for(var e={"%FE%FF":"\uFFFD\uFFFD","%FF%FE":"\uFFFD\uFFF...
function Dpe (line 740) | function Dpe(t){switch(t.arrayFormat){case"index":return function(e,n,i)...
function Fpe (line 740) | function Fpe(t){var e;switch(t.arrayFormat){case"index":return function(...
function ea (line 740) | function ea(t,e){return e.encode?e.strict?Ipe(t):encodeURIComponent(t):t}
function xE (line 740) | function xE(t){return Array.isArray(t)?t.sort():typeof t=="object"?xE(Ob...
function vE (line 740) | function vE(t){var e=t.indexOf("?");return e===-1?"":t.slice(e+1)}
function bE (line 740) | function bE(t,e){e=_E({arrayFormat:"none"},e);var n=Fpe(e),i=Object.crea...
function TE (line 740) | function TE(t,e){return e.some(n=>n instanceof RegExp?n.test(t):n===t)}
function o0 (line 740) | function o0(t,e){if(!t)return Promise.reject(new Error("Expected a strea...
function Upe (line 740) | function Upe(t,e){if(!(t instanceof e))throw new TypeError("Cannot call ...
function l0 (line 740) | function l0(t){var e={};if(!t)return e;for(var n=t.trim().split(/\s*,\s*...
function Wpe (line 740) | function Wpe(t){var e=[];for(var n in t){var i=t[n];e.push(i===!0?n:n+"=...
function t (line 740) | function t(e,n){var i=arguments.length>2&&arguments[2]!==void 0?argument...
method constructor (line 740) | constructor(e,n,i,a){if(typeof e!="number")throw new TypeError("Argument...
method _read (line 740) | _read(){this.push(this.body),this.push(null)}
method constructor (line 740) | constructor(e,n){if(super(),this.opts=Object.assign({namespace:"keyv"},t...
method _getKeyPrefix (line 740) | _getKeyPrefix(e){return`${this.opts.namespace}:${e}`}
method get (line 740) | get(e){e=this._getKeyPrefix(e);let n=this.opts.store;return Promise.reso...
method set (line 740) | set(e,n,i){e=this._getKeyPrefix(e),typeof i>"u"&&(i=this.opts.ttl),i===0...
method delete (line 740) | delete(e){e=this._getKeyPrefix(e);let n=this.opts.store;return Promise.r...
method clear (line 740) | clear(){let e=this.opts.store;return Promise.resolve().then(()=>e.clear())}
method constructor (line 740) | constructor(e,n){if(typeof e!="function")throw new TypeError("Parameter ...
method createCacheableRequest (line 740) | createCacheableRequest(e){return(n,i)=>{typeof n=="string"&&(n=WE.parse(...
method constructor (line 740) | constructor(t){super(t.message),this.name="RequestError",Object.assign(t...
method constructor (line 740) | constructor(t){super(t.message),this.name="CacheError",Object.assign(thi...
function Kl (line 740) | function Kl(t,e,n){typeof n>"u"&&(n=e,e=t,t=null),d0.Duplex.call(this,t)...
function ume (line 740) | function ume(t){return t=t.slice(),function(e,n){var i=null,a=t.length?t...
function jm (line 740) | function jm(t,e){(typeof t!="object"||Array.isArray(t))&&(e=t,t={});var ...
function $E (line 740) | function $E(t,e){typeof t=="function"&&(e=t,t={}),t=tk(t),lme(n,QE);func...
function dme (line 740) | function dme(t,e){return(typeof t=="function"||Array.isArray(t))&&(e=t,t...
function ek (line 740) | function ek(){}
function tk (line 740) | function tk(t){return t=t||{},t}
function i (line 740) | function i(a){t=a,e=sk(t)?t:null,n=!e&&t[Symbol.iterator]&&typeof t!="st...
function i (line 740) | function i(a){t=a,e=sk(t)?t:null,n=!e&&t[Symbol.iterator]?t[Symbol.itera...
function yr (line 740) | function yr(t){if(t===null)return"null";if(t===!0||t===!1)return"boolean...
function x (line 740) | function x(h){return g(Array.prototype.some,h,arguments)}
function _ (line 740) | function _(h){return g(Array.prototype.every,h,arguments)}
function a (line 740) | function a(){t.timeoutTimer&&(clearTimeout(t.timeoutTimer),t.timeoutTime...
function r (line 740) | function r(){a(),n.socket!==void 0&&t.setTimeout(n.socket,s(function(){t...
function hme (line 740) | function hme(t){var e={protocol:t.protocol,hostname:t.hostname,hash:t.ha...
method constructor (line 740) | constructor(){super("Promise was canceled"),this.name="CancelError"}
method isCanceled (line 740) | get isCanceled(){return!0}
method fn (line 740) | static fn(e){return function(){let n=[].slice.apply(arguments);return ne...
method constructor (line 740) | constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCancel...
method then (line 740) | then(e,n){return this._promise.then(e,n)}
method catch (line 740) | catch(e){return this._promise.catch(e)}
method finally (line 740) | finally(e){return this._promise.finally(e)}
method cancel (line 740) | cancel(){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandle...
method isCanceled (line 740) | get isCanceled(){return this._isCanceled}
method constructor (line 740) | constructor(e){super(e),this.name="TimeoutError"}
method constructor (line 740) | constructor(e,n,i){super(e),Error.captureStackTrace(this,this.constructo...
method constructor (line 740) | constructor(t,e){super(t.message,t,e),this.name="CacheError"}
method constructor (line 740) | constructor(t,e){super(t.message,t,e),this.name="RequestError"}
method constructor (line 740) | constructor(t,e){super(t.message,t,e),this.name="ReadError"}
method constructor (line 740) | constructor(t,e,n,i){super(`${t.message} in "${Mme.format(n)}":
method constructor (line 741) | constructor(t,e,n,i){e?e=e.replace(/\r?\n/g," ").trim():e=w0.STATUS_CODE...
method constructor (line 741) | constructor(t,e,n){super("Redirected 10 times. Aborting.",{},n),this.nam...
method constructor (line 741) | constructor(t){super(`Unsupported protocol "${t.protocol}"`,{},t),this.n...
function Lme (line 741) | function Lme(){let t;if(Pk.existsSync(Lk)&&(t=Pk.readFileSync(Lk,"utf-8"...
function Zk (line 741) | function Zk(t){t=t||{};let e=new Xk,n=t.href||Lu.resolve(Lu.format(t),t....
function afe (line 741) | function afe(t,e,n,i){let a=Number(t.headers["content-length"])||null,r=...
function rfe (line 741) | function rfe(t){let e=s(r=>t.gotTimeout&&t.gotTimeout.request?$me(r,t.go...
function Qk (line 741) | function Qk(t){t.stream=!0;let e=new Uk,n=new Uk,i=qme(e,n),a;if(t.gotTi...
function $k (line 741) | function $k(t,e){if(!Dt.string(t)&&!Dt.object(t))throw new TypeError(`Pa...
function Hn (line 741) | function Hn(t,e){try{let n=$k(t,e);return n.stream?Qk(n):rfe(n)}catch(n)...
function Nm (line 741) | function Nm(t){for(var e=0;e<A0.length;e++){var n=A0[e][0],i=A0[e][1];t=...
function Ms (line 741) | function Ms(t,e){if((!e||typeof e!="object")&&(e={loose:!!e,includePrere...
function dfe (line 741) | function dfe(t,e){var n=Ms(t,e);return n?n.version:null}
function pfe (line 741) | function pfe(t,e){var n=Ms(t.trim().replace(/^[=v]+/,""),e);return n?n.v...
function Ot (line 741) | function Ot(t,e){if((!e||typeof e!="object")&&(e={loose:!!e,includePrere...
function mfe (line 741) | function mfe(t,e,n,i){typeof n=="string"&&(i=n,n=void 0);try{return new ...
function ffe (line 741) | function ffe(t,e){if(L0(t,e))return null;var n=Ms(t),i=Ms(e),a="";if(n.p...
function Zl (line 741) | function Zl(t,e){var n=r5.test(t),i=r5.test(e);return n&&i&&(t=+t,e=+e),...
function hfe (line 741) | function hfe(t,e){return Zl(e,t)}
function gfe (line 741) | function gfe(t,e){return new Ot(t,e).major}
function _fe (line 741) | function _fe(t,e){return new Ot(t,e).minor}
function xfe (line 741) | function xfe(t,e){return new Ot(t,e).patch}
function po (line 741) | function po(t,e,n){return new Ot(t,n).compare(new Ot(e,n))}
function vfe (line 741) | function vfe(t,e){return po(t,e,!0)}
function bfe (line 741) | function bfe(t,e,n){return po(e,t,n)}
function yfe (line 741) | function yfe(t,e){return t.sort(function(n,i){return pt.compare(n,i,e)})}
function wfe (line 741) | function wfe(t,e){return t.sort(function(n,i){return pt.rcompare(n,i,e)})}
function Uu (line 741) | function Uu(t,e,n){return po(t,e,n)>0}
function Im (line 741) | function Im(t,e,n){return po(t,e,n)<0}
function L0 (line 741) | function L0(t,e,n){return po(t,e,n)===0}
function v5 (line 741) | function v5(t,e,n){return po(t,e,n)!==0}
function V0 (line 741) | function V0(t,e,n){return po(t,e,n)>=0}
function z0 (line 741) | function z0(t,e,n){return po(t,e,n)<=0}
function Dm (line 741) | function Dm(t,e,n,i){switch(e){case"===":return typeof t=="object"&&(t=t...
function ma (line 741) | function ma(t,e){if((!e||typeof e!="object")&&(e={loose:!!e,includePrere...
function An (line 741) | function An(t,e){if((!e||typeof e!="object")&&(e={loose:!!e,includePrere...
function Efe (line 741) | function Efe(t,e){return new An(t,e).set.map(function(n){return n.map(fu...
function kfe (line 741) | function kfe(t,e){return Wt("comp",t,e),t=Tfe(t,e),Wt("caret",t),t=jfe(t...
function ki (line 741) | function ki(t){return!t||t.toLowerCase()==="x"||t==="*"}
function jfe (line 741) | function jfe(t,e){return t.trim().split(/\s+/).map(function(n){return Af...
function Afe (line 741) | function Afe(t,e){var n=e.loose?un[m5]:un[p5];return t.replace(n,functio...
function Tfe (line 741) | function Tfe(t,e){return t.trim().split(/\s+/).map(function(n){return Cf...
function Cfe (line 741) | function Cfe(t,e){Wt("caret",t,e);var n=e.loose?un[h5]:un[f5];return t.r...
function Sfe (line 741) | function Sfe(t,e){return Wt("replaceXRanges",t,e),t.split(/\s+/).map(fun...
function Ofe (line 741) | function Ofe(t,e){t=t.trim();var n=e.loose?un[u5]:un[c5];return t.replac...
function Ife (line 741) | function Ife(t,e){return Wt("replaceStars",t,e),t.trim().replace(un[x5],...
function Dfe (line 741) | function Dfe(t,e,n,i,a,r,o,l,c,d,u,p,m){return ki(n)?e="":ki(i)?e=">="+n...
function Ffe (line 741) | function Ffe(t,e,n){for(var i=0;i<t.length;i++)if(!t[i].test(e))return!1...
function Fm (line 741) | function Fm(t,e,n){try{e=new An(e,n)}catch{return!1}return e.test(t)}
function Nfe (line 741) | function Nfe(t,e,n){var i=null,a=null;try{var r=new An(e,n)}catch{return...
function Rfe (line 741) | function Rfe(t,e,n){var i=null,a=null;try{var r=new An(e,n)}catch{return...
function Mfe (line 741) | function Mfe(t,e){t=new An(t,e);var n=new Ot("0.0.0");if(t.test(n)||(n=n...
function Bfe (line 741) | function Bfe(t,e){try{return new An(t,e).range||"*"}catch{return null}}
function Pfe (line 741) | function Pfe(t,e,n){return U0(t,e,"<",n)}
function Lfe (line 741) | function Lfe(t,e,n){return U0(t,e,">",n)}
function U0 (line 741) | function U0(t,e,n,i){t=new Ot(t,i),e=new An(e,i);var a,r,o,l,c;switch(n)...
function Vfe (line 741) | function Vfe(t,e){var n=Ms(t,e);return n&&n.prerelease.length?n.prerelea...
function zfe (line 741) | function zfe(t,e,n){return t=new An(t,n),e=new An(e,n),t.intersects(e)}
function Ufe (line 741) | function Ufe(t){if(t instanceof Ot)return t;if(typeof t!="string")return...
method [Symbol.asyncIterator] (line 741) | [Symbol.asyncIterator](){return this}
method next (line 741) | next(){return Promise.resolve({done:!0,value:void 0})}
method [Jfe] (line 741) | [Jfe](){return this}
method next (line 741) | next(){if(f.length>0){let b=f.shift();return Promise.resolve({done:d&&f....
method return (line 741) | return(b){return _(),Promise.resolve({done:d,value:b})}
function gbe (line 741) | function gbe(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}
function _be (line 741) | function _be(){let t={},e=Object.keys(Xf);for(let n=e.length,i=0;i<n;i++...
function xbe (line 741) | function xbe(t){let e=_be(),n=[t];for(e[t].distance=0;n.length;){let i=n...
function vbe (line 741) | function vbe(t,e){return function(n){return e(t(n))}}
function bbe (line 741) | function bbe(t,e){let n=[e[t].parent,t],i=Xf[e[t].parent][t],a=e[t].pare...
function Ebe (line 741) | function Ebe(t){let e=s(function(...n){let i=n[0];return i==null?i:(i.le...
function kbe (line 741) | function kbe(t){let e=s(function(...n){let i=n[0];if(i==null)return i;i....
function jbe (line 741) | function jbe(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2...
function wv (line 741) | function wv(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t...
function Ev (line 741) | function Ev(t,e){if(os===0)return 0;if(Ta("color=16m")||Ta("color=full")...
function Tbe (line 741) | function Tbe(t){let e=Ev(t,t&&t.isTTY);return wv(e)}
function pC (line 745) | function pC(t){let e=t[0]==="u",n=t[1]==="{";return e&&!n&&t.length===5|...
function Nbe (line 745) | function Nbe(t,e){let n=[],i=e.trim().split(/\s*,\s*/g),a;for(let r of i...
function Rbe (line 745) | function Rbe(t){uC.lastIndex=0;let e=[],n;for(;(n=uC.exec(t))!==null;){l...
function dC (line 745) | function dC(t,e){let n={};for(let a of e)for(let r of a.styles)n[r[0]]=a...
method constructor (line 745) | constructor(e){return _C(e)}
function eh (line 745) | function eh(t){return _C(t)}
method get (line 745) | get(){let n=th(this,Tv(e.open,e.close,this._styler),this._isEmpty);retur...
method get (line 745) | get(){let t=th(this,this._styler,!0);return Object.defineProperty(this,"...
method get (line 745) | get(){let{level:e}=this;return function(...n){let i=Tv(Vd.color[gC[e]][t...
method get (line 745) | get(){let{level:n}=this;return function(...i){let a=Tv(Vd.bgColor[gC[n]]...
method get (line 745) | get(){return this._generator.level}
method set (line 745) | set(t){this._generator.level=t}
function kt (line 746) | function kt(){let t=new Set,e=!1;return{subscribe:(n,i=!1)=>{if(i){let a...
function A (line 1014) | function A(t,...e){let n=Oy.indexOf(settings.language.value);n===-1&&(co...
method constructor (line 1014) | constructor(e,n){super(`'${e}' failed to install: ${n.message}`+(n.stack?`
method constructor (line 1015) | constructor(e,n){super(`'${e}' failed to uninstall: ${n.message}`+(n.sta...
function Yse (line 1016) | function Yse(){$r.sort((t,e)=>{let n=ws.get(t);return ws.get(e).priority...
function St (line 1016) | function St(t){let e,n=!1;if(ws.has(t.id))throw new Error(`A Mod with th...
function da (line 1016) | function da(t){let e=null;return St({...t,apply:()=>[K.PRE_SELECT_PROJEC...
function Dy (line 1016) | function Dy(t){let e;return St({...t,apply:()=>[K.EXTERNAL_PLUGIN_LOAD.s...
function yl (line 1016) | function yl(t,e){return s(function({id:i,priority:a,dependencies:r},...o...
function iu (line 1016) | function iu(t){St({...t,apply:()=>{if(t.object==null)throw new Error("Ca...
function Nt (line 1016) | function Nt(t){St({...t,apply:()=>{if(t.object==null)throw new Error("Ca...
function Py (line 1016) | function Py(t,e){let n=Iy.get(t),i={value:t[e]};if(n===void 0){let a=kt(...
method constructor (line 1016) | constructor(e,n,i){super(e,"object",n,i)}
method copy (line 1016) | copy(e,n){e[this.name]==null?n[this.name]=e[this.name]:n[this.name]=JSON...
method merge (line 1016) | merge(e,n){n[this.name]==null?e[this.name]=this.default:e[this.name]=JSO...
method constructor (line 1016) | constructor(){super("Polling was cancelled"),this.name="PollingCancelled...
function El (line 1016) | function El(t,e,n=1e3*60,i){let a=performance.now(),r=i!==void 0?o=>setT...
function Gn (line 1016) | function Gn(t){let e;if(typeof t.target=="string"?e=document.querySelect...
function yp (line 1016) | function yp(t){let e=typeof t.target=="string"?document.querySelector.bi...
function ie (line 1016) | function ie(){}
function zy (line 1016) | function zy(t,e){for(let n in e)t[n]=e[n];return t}
function Xse (line 1016) | function Xse(t){return!!t&&(typeof t=="object"||typeof t=="function")&&t...
function Fg (line 1016) | function Fg(t){return t()}
function Ly (line 1016) | function Ly(){return Object.create(null)}
function Rt (line 1016) | function Rt(t){t.forEach(Fg)}
function qn (line 1016) | function qn(t){return typeof t=="function"}
function De (line 1016) | function De(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t...
function Ht (line 1016) | function Ht(t,e){return wp||(wp=document.createElement("a")),wp.href=e,t...
function Uy (line 1016) | function Uy(t){return Object.keys(t).length===0}
function rt (line 1016) | function rt(t,...e){if(t==null)return ie;let n=t.subscribe(...e);return ...
function Ng (line 1016) | function Ng(t){let e;return rt(t,n=>e=n)(),e}
function Pa (line 1016) | function Pa(t,e,n){t.$$.on_destroy.push(rt(e,n))}
function qy (line 1016) | function qy(t,e,n,i){if(t){let a=Hy(t,e,n,i);return t[0](a)}}
function Hy (line 1016) | function Hy(t,e,n,i){return t[1]&&i?zy(n.ctx.slice(),t[1](i(e))):n.ctx}
function Jy (line 1016) | function Jy(t,e,n,i){if(t[2]&&i){let a=t[2](i(n));if(e.dirty===void 0)re...
function Gy (line 1016) | function Gy(t,e,n,i,a,r){if(a){let o=Hy(e,n,i,r);t.p(o,a)}}
function Wy (line 1016) | function Wy(t){if(t.ctx.length>32){let e=[],n=t.ctx.length/32;for(let i=...
function Xi (line 1016) | function Xi(t){return t??""}
function Jt (line 1016) | function Jt(t,e,n){return t.set(n),e}
function bn (line 1016) | function bn(t){return t&&qn(t.destroy)?t.destroy:ie}
function Xy (line 1016) | function Xy(t){Al.forEach(e=>{e.c(t)||(Al.delete(e),e.f())}),Al.size!==0...
function Zy (line 1016) | function Zy(t){let e;return Al.size===0&&Rg(Xy),{promise:new Promise(n=>...
method constructor (line 1016) | constructor(e){this.options=e,this._listeners="WeakMap"in Qy?new WeakMap...
method observe (line 1016) | observe(e,n){return this._listeners.set(e,n),this._getObserver().observe...
method _getObserver (line 1016) | _getObserver(){var e;return(e=this._observer)!==null&&e!==void 0?e:this....
function Zse (line 1016) | function Zse(){$y=!0}
function Qse (line 1016) | function Qse(){$y=!1}
function I (line 1016) | function I(t,e){t.appendChild(e)}
function e1 (line 1016) | function e1(t){if(!t)return document;let e=t.getRootNode?t.getRootNode()...
function $se (line 1016) | function $se(t){let e=L("style");return ele(e1(t),e),e.sheet}
function ele (line 1016) | function ele(t,e){return I(t.head||t,e),e.sheet}
function U (line 1016) | function U(t,e,n){t.insertBefore(e,n||null)}
function z (line 1016) | function z(t){t.parentNode&&t.parentNode.removeChild(t)}
function Wn (line 1016) | function Wn(t,e){for(let n=0;n<t.length;n+=1)t[n]&&t[n].d(e)}
function L (line 1016) | function L(t){return document.createElement(t)}
function tle (line 1016) | function tle(t){return document.createElementNS("http://www.w3.org/2000/...
function Re (line 1016) | function Re(t){return document.createTextNode(t)}
function J (line 1016) | function J(){return Re(" ")}
function _t (line 1016) | function _t(){return Re("")}
function Ue (line 1016) | function Ue(t,e,n,i){return t.addEventListener(e,n,i),()=>t.removeEventL...
function t1 (line 1016) | function t1(t){return function(e){return e.stopPropagation(),t.call(this...
function E (line 1016) | function E(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t....
function Sl (line 1016) | function Sl(t){return t===""?null:+t}
function nle (line 1016) | function nle(t){return Array.from(t.childNodes)}
function ct (line 1016) | function ct(t,e){e=""+e,t.data!==e&&(t.data=e)}
function Bt (line 1016) | function Bt(t,e){t.value=e??""}
function Xe (line 1016) | function Xe(t,e,n,i){n==null?t.style.removeProperty(e):t.style.setProper...
function n1 (line 1016) | function n1(t,e,{bubbles:n=!1,cancelable:i=!1}={}){let a=document.create...
method constructor (line 1016) | constructor(e=!1){this.is_svg=!1,this.is_svg=e,this.e=this.n=null}
method c (line 1016) | c(e){this.h(e)}
method m (line 1016) | m(e,n,i=null){this.e||(this.is_svg?this.e=tle(n.nodeName):this.e=L(n.nod...
method h (line 1016) | h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName==="TEMPLATE"?t...
method i (line 1016) | i(e){for(let n=0;n<this.n.length;n+=1)U(this.t,this.n[n],e)}
method p (line 1016) | p(e){this.d(),this.h(e),this.i(this.a)}
method d (line 1016) | d(){this.n.forEach(z)}
function ile (line 1016) | function ile(t){let e=5381,n=t.length;for(;n--;)e=(e<<5)-e^t.charCodeAt(...
function ale (line 1016) | function ale(t,e){let n={stylesheet:$se(e),rules:{}};return kp.set(t,n),n}
function i1 (line 1016) | function i1(t,e,n,i,a,r,o,l=0){let c=16.666/i,d=`{
function Og (line 1019) | function Og(t,e){let n=(t.style.animation||"").split(", "),i=n.filter(e?...
function rle (line 1019) | function rle(){Rg(()=>{jp||(kp.forEach(t=>{let{ownerNode:e}=t.stylesheet...
function su (line 1019) | function su(t,e,n,i){if(!e)return ie;let a=t.getBoundingClientRect();if(...
function lu (line 1019) | function lu(t){let e=getComputedStyle(t);if(e.position!=="absolute"&&e.p...
function ole (line 1019) | function ole(t,e){let n=t.getBoundingClientRect();if(e.left!==n.left||e....
function eo (line 1019) | function eo(t){ru=t}
function Mg (line 1019) | function Mg(){if(!ru)throw new Error("Function called outside component ...
function Zi (line 1019) | function Zi(t){Mg().$$.on_destroy.push(t)}
function Bg (line 1019) | function Bg(){let t=Mg();return(e,n,{cancelable:i=!1}={})=>{let a=t.$$.c...
function lle (line 1019) | function lle(){Dg||(Dg=!0,sle.then(Pg))}
function to (line 1019) | function to(t){Cl.push(t)}
function Me (line 1019) | function Me(t){Ig.push(t)}
function Pg (line 1019) | function Pg(){if(kl!==0)return;let t=ru;do{try{for(;kl<jl.length;){let e...
function cle (line 1019) | function cle(t){if(t.fragment!==null){t.update(),Rt(t.before_update);let...
function ule (line 1019) | function ule(t){let e=[],n=[];Cl.forEach(i=>t.indexOf(i)===-1?e.push(i):...
function dle (line 1019) | function dle(){return au||(au=Promise.resolve(),au.then(()=>{au=null})),au}
function Vy (line 1019) | function Vy(t,e,n){t.dispatchEvent(n1(`${e?"intro":"outro"}${n}`))}
function Sn (line 1019) | function Sn(){Es={r:0,c:[],p:Es}}
function On (line 1019) | function On(){Es.r||Rt(Es.c),Es=Es.p}
function ae (line 1019) | function ae(t,e){t&&t.i&&(Ep.delete(t),t.i(e))}
function de (line 1019) | function de(t,e,n,i){if(t&&t.o){if(Ep.has(t))return;Ep.add(t),Es.c.push(...
function cu (line 1019) | function cu(t,e,n){let i={direction:"in"},a=e(t,n,i),r=!1,o,l,c=0;functi...
function a1 (line 1019) | function a1(t,e){let n=e.token={};function i(a,r,o,l){if(e.token!==n)ret...
function r1 (line 1019) | function r1(t,e,n){let i=e.slice(),{resolved:a}=t;t.current===t.then&&(i...
function mle (line 1019) | function mle(t,e){t.d(1),e.delete(t.key)}
function uu (line 1019) | function uu(t,e){t.f(),mle(t,e)}
function du (line 1019) | function du(t,e,n,i,a,r,o,l,c,d,u,p){let m=t.length,f=r.length,g=m,x={};...
function Be (line 1019) | function Be(t,e,n){let i=t.$$.props[e];i!==void 0&&(t.$$.bound[i]=n,n(t....
function Ce (line 1019) | function Ce(t){t&&t.c()}
function Ae (line 1019) | function Ae(t,e,n,i){let{fragment:a,after_update:r}=t.$$;a&&a.m(e,n),i||...
function je (line 1019) | function je(t,e){let n=t.$$;n.fragment!==null&&(ule(n.after_update),Rt(n...
function hle (line 1019) | function hle(t,e){t.$$.dirty[0]===-1&&(jl.push(t),lle(),t.$$.dirty.fill(...
function Ve (line 1019) | function Ve(t,e,n,i,a,r,o,l=[-1]){let c=ru;eo(t);let d=t.$$={fragment:nu...
method constructor (line 1019) | constructor(){super(),this.attachShadow({mode:"open"})}
method connectedCallback (line 1019) | connectedCallback(){let{on_mount:t}=this.$$;this.$$.on_disconnect=t.map(...
method attributeChangedCallback (line 1019) | attributeChangedCallback(t,e,n){this[t]=n}
method disconnectedCallback (line 1019) | disconnectedCallback(){Rt(this.$$.on_disconnect)}
method $destroy (line 1019) | $destroy(){je(this,1),this.$destroy=ie}
method $on (line 1019) | $on(t,e){if(!qn(e))return ie;let n=this.$$.callbacks[t]||(this.$$.callba...
method $set (line 1019) | $set(t){this.$$set&&!Uy(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$...
method $destroy (line 1019) | $destroy(){je(this,1),this.$destroy=ie}
method $on (line 1019) | $on(e,n){if(!qn(n))return ie;let i=this.$$.callbacks[e]||(this.$$.callba...
method $set (line 1019) | $set(e){this.$$set&&!Uy(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$...
function _le (line 1019) | function _le(t){let e,n,i,a,r,o=xle()+"",l,c,d,u,p=A("dialog.unexpected_...
function xle (line 1025) | function xle(){return o1[Math.floor(Math.random()*o1.length)]}
function vle (line 1025) | function vle(t,e,n){let{error:i}=e,a=i.message+`
method constructor (line 1026) | constructor(e){super(),Ve(this,e,vle,_le,De,{error:2})}
function Vg (line 1026) | function Vg(t,e){for(let[n,i]of Object.entries(e))t.style[n]=i??""}
method constructor (line 1026) | constructor(e){let n=document.createComment("svelte-dialog-"+guid()),i={...
function Fo (line 1026) | function Fo(t){new cn({id:`${Ke.name}:unexpectedError`,title:A("dialog.u...
function no (line 1026) | async function no(){if(Ol)return Ol;if(!window.navigator.onLine){if(cons...
function Il (line 1026) | function Il(){let t=localStorage.getItem("animated_java:minecraftVersion...
function aj (line 3123) | function aj(t,e=ie){let n,i=new Set;function a(l){if(De(t,l)&&(t=l,n)){l...
method constructor (line 3123) | constructor(e,n){this.store=aj(e),this.valueValidator=n??(i=>i),J0.all.p...
method get (line 3123) | get(){return this.valueValidator(Ng(this.store))}
method set (line 3123) | set(e){return this.store.set(this.valueValidator(e))}
method update (line 3123) | update(e){return this.store.update(n=>this.valueValidator(e(n)))}
method subscribe (line 3123) | subscribe(e,n){return this.store.subscribe(e,n)}
function che (line 3123) | function che(t){let e,n,i,a,r,o,l,c=(t[6]!==""||t[7]!==0)&&rj(t);return{...
function uhe (line 3123) | function uhe(t){let e;return{c(){e=L("div"),e.textContent=`${A("popup.lo...
function dhe (line 3123) | function dhe(t){let e,n=A("popup.loading.offline").split(`
function rj (line 3124) | function rj(t){let e,n,i,a;return{c(){e=L("div"),n=Re(t[6]),i=J(),a=L("p...
function phe (line 3124) | function phe(t){let e,n;function i(o,l){return o[4]?dhe:o[5]?uhe:che}s(i...
function fhe (line 3124) | function fhe(t,e,n){let i,a=ie,r=s(()=>(a(),a=rt(_,b=>n(4,i=b)),_),"$$su...
method constructor (line 3124) | constructor(e){super(),Ve(this,e,fhe,phe,De,{loaded:0,offline:1,progress...
function dj (line 3124) | function dj(){kr||(kr=Gn({component:oj,props:{loaded:sj,offline:lj,progr...
function pj (line 3124) | function pj(){kr&&(sj.set(!0),setTimeout(()=>{kr&&(kr.$destroy(),kr=void...
function G0 (line 3124) | function G0(){kr&&(lj.set(!0),setTimeout(()=>{kr&&(kr.$destroy(),kr=void...
function mj (line 3124) | function mj(t){cj.set(t)}
function fj (line 3124) | function fj(t){uj.set(t)}
function hj (line 3124) | function hj(t){var e=t.slice(0,2);return e.length===2&&e[0]===31&&e[1]==...
function gj (line 3124) | function gj(t){let e=t.slice(0,2);return e.length===2&&e[0]===120&&(e[1]...
function _j (line 3124) | function _j(t){let e=t.slice(0,8),n=new DataView(e.buffer,e.byteOffset),...
function xj (line 3124) | function xj(t){var e=[],n,i;for(n=0;n<t.length;n++)i=t.charCodeAt(n),i<1...
function vj (line 3124) | function vj(t){var e=[],n;for(n=0;n<t.length;n++)t[n]&128?n+1<t.length&&...
method constructor (line 3124) | constructor(e,n){this.littleEndian=n?.littleEndian??!1,this.offset=n?.of...
method readNumber (line 3124) | readNumber(e,n){let i=this.view[e](this.offset,this.littleEndian);return...
method readBytes (line 3124) | readBytes(e){let n=this.array.slice(this.offset,this.offset+e);return th...
method readString (line 3124) | readString(){let e=this.readShort(),n=this.readBytes(e);return vj(n)}
method constructor (line 3124) | constructor(e){this.littleEndian=e?.littleEndian??!1,this.offset=e?.offs...
method accommodate (line 3124) | accommodate(e){let n=this.offset+e;if(this.buffer.byteLength>=n)return;l...
method writeNumber (line 3124) | writeNumber(e,n,i){this.accommodate(n),this.view[e](this.offset,i,this.l...
method writeBytes (line 3124) | writeBytes(e){this.accommodate(e.length),this.array.set(e,this.offset),t...
method writeString (line 3124) | writeString(e){let n=xj(e);this.writeShort(n.length),this.writeBytes(n)}
method getData (line 3124) | getData(){return this.accommodate(0),this.array.slice(0,this.offset)}
function e (line 3124) | function e(p){return typeof p=="number"?p:void 0}
method constructor (line 3131) | constructor(i,a,r,o,l,c){this.x=i,this.z=a,this.compression=r,this.tim...
method getFile (line 3131) | getFile(){if(this.file instanceof qa)return this.file}
method getRoot (line 3131) | getRoot(){if(this.file instanceof qa)return this.file.root}
method getFileAsync (line 3131) | async getFileAsync(){return this.file?this.file:(this.file=(async()=>{...
method getRootAsync (line 3131) | async getRootAsync(){return(await this.getFileAsync()).root}
method isResolved (line 3131) | isResolved(){return this.file instanceof qa}
function n (line 3124) | function n(p){return typeof p=="number"?Math.floor(p):void 0}
function i (line 3124) | function i(p){return typeof p=="string"?p:void 0}
function a (line 3124) | function a(p){return typeof p=="boolean"?p:void 0}
function r (line 3124) | function r(p){return typeof p=="object"&&p!==null&&!Array.isArray(p)?p:v...
function o (line 3124) | function o(p,m){if(Array.isArray(p))return m?p.map(f=>m(f)):p}
function l (line 3124) | function l(p,m){if(Array.isArray(p))return[0,1].map(f=>m(p[f]))}
function c (line 3124) | function c(p,m){let f=r(p)??{};return Object.fromEntries(Object.entries(...
function d (line 3124) | function d(p,m,f){let g=m(p);return g?f(g):void 0}
function u (line 3124) | function u(p,m){return typeof p!="string"?m[0]:m.includes(p)?p:m[0]}
method constructor (line 3124) | constructor(e){this.source=e,this.cursor=0}
method remainingLength (line 3124) | get remainingLength(){return this.source.length-this.cursor}
method totalLength (line 3124) | get totalLength(){return this.source.length}
method getRead (line 3124) | getRead(e=0){return this.source.substring(e,this.cursor)}
method getRemaining (line 3124) | getRemaining(){return this.source.substring(this.cursor)}
method canRead (line 3124) | canRead(e=1){return this.cursor+e<=this.source.length}
method peek (line 3124) | peek(e=0){return this.source.charAt(this.cursor+e)}
method read (line 3124) | read(){return this.source.charAt(this.cursor++)}
method skip (line 3124) | skip(){this.cursor+=1}
method skipWhitespace (line 3124) | skipWhitespace(){for(;this.canRead()&&ci.isWhitespace(this.peek());)this...
method expect (line 3124) | expect(e,n=!1){if(n&&this.skipWhitespace(),!this.canRead()||this.peek()!...
method readInt (line 3124) | readInt(){let e=this.cursor;for(;this.canRead()&&ci.isAllowedInNumber(th...
method readFloat (line 3124) | readFloat(){let e=this.cursor;for(;this.canRead()&&ci.isAllowedInNumber(...
method readUnquotedString (line 3124) | readUnquotedString(){let e=this.cursor;for(;this.canRead()&&ci.isAllowed...
method readQuotedString (line 3124) | readQuotedString(){if(!this.canRead())return"";let e=this.peek();if(!ci....
method readString (line 3124) | readString(){if(!this.canRead())return"";let e=this.peek();return ci.isQ...
method readStringUntil (line 3124) | readStringUntil(e){let n=[],i=!1;for(;this.canRead();){let a=this.read()...
method readBoolean (line 3124) | readBoolean(){let e=this.cursor,n=this.readUnquotedString();if(n.length=...
method isAllowedInNumber (line 3124) | static isAllowedInNumber(e){return e>="0"&&e<="9"||e==="."||e==="-"}
method isAllowedInUnquotedString (line 3124) | static isAllowedInUnquotedString(e){return e>="0"&&e<="9"||e>="A"&&e<="Z...
method isQuotedStringStart (line 3124) | static isQuotedStringStart(e){return e==="'"||e==='"'}
method isWhitespace (line 3124) | static isWhitespace(e){return e===" "||e===" "||e===`
method createError (line 3125) | createError(e){let n=Math.min(this.source.length,this.cursor),i=(n>10?"....
function lc (line 3125) | function lc(t){let e=t.length;for(;--e>=0;)t[e]=0}
function K0 (line 3125) | function K0(t,e,n,i,a){this.static_tree=t,this.extra_bits=e,this.extra_b...
function Y0 (line 3125) | function Y0(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}
function jr (line 3125) | function jr(t,e,n,i,a){this.good_length=t,this.max_lazy=e,this.nice_leng...
function gge (line 3125) | function gge(){this.strm=null,this.status=0,this.pending_buf=null,this.p...
function Pge (line 3125) | function Pge(){this.input=null,this.next_in=0,this.avail_in=0,this.total...
function dd (line 3125) | function dd(t){this.options=Qm.assign({level:Hge,method:Gge,chunkSize:16...
function yx (line 3125) | function yx(t,e){let n=new dd(e);if(n.push(t,!0),n.err)throw n.msg||Vs[n...
function Wge (line 3125) | function Wge(t,e){return e=e||{},e.raw=!0,yx(t,e)}
function Kge (line 3125) | function Kge(t,e){return e=e||{},e.gzip=!0,yx(t,e)}
function __e (line 3125) | function __e(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this....
function N_e (line 3125) | function N_e(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extr...
function pd (line 3125) | function pd(t){this.options=Qm.assign({chunkSize:1024*64,windowBits:15,t...
function wx (line 3125) | function wx(t,e){let n=new pd(e);if(n.push(t),n.err)throw n.msg||Vs[n.er...
function V_e (line 3125) | function V_e(t,e){return e=e||{},e.raw=!0,wx(t,e)}
method register (line 3125) | static register(e,n){let i=n.create().getId();if(i!==e)throw new Error(`...
method isEnd (line 3125) | isEnd(){return this.getId()===Oe.End}
method isByte (line 3125) | isByte(){return this.getId()===Oe.Byte}
method isShort (line 3125) | isShort(){return this.getId()===Oe.Short}
method isInt (line 3125) | isInt(){return this.getId()===Oe.Int}
method isLong (line 3125) | isLong(){return this.getId()===Oe.Long}
method isFloat (line 3125) | isFloat(){return this.getId()===Oe.Float}
method isDouble (line 3125) | isDouble(){return this.getId()===Oe.Double}
method isByteArray (line 3125) | isByteArray(){return this.getId()===Oe.ByteArray}
method isString (line 3125) | isString(){return this.getId()===Oe.String}
method isList (line 3125) | isList(){return this.getId()===Oe.List}
method isCompound (line 3125) | isCompound(){return this.getId()===Oe.Compound}
method isIntArray (line 3125) | isIntArray(){return this.getId()===Oe.IntArray}
method isLongArray (line 3125) | isLongArray(){return this.getId()===Oe.LongArray}
method isNumber (line 3125) | isNumber(){return this.isByte()||this.isShort()||this.isInt()||this.isLo...
method isArray (line 3125) | isArray(){return this.isByteArray()||this.isIntArray()||this.isLongArray()}
method isListOrArray (line 3125) | isListOrArray(){return this.isList()||this.isArray()}
method getAsNumber (line 3125) | getAsNumber(){return 0}
method getAsString (line 3125) | getAsString(){return""}
method toJsonWithId (line 3125) | toJsonWithId(){return{type:this.getId(),value:this.toJson()}}
method getFactory (line 3125) | static getFactory(e){let n=this.FACTORIES.get(e);if(!n)throw new Error(`...
method create (line 3125) | static create(e){return this.getFactory(e).create()}
method fromString (line 3125) | static fromString(e){let n=typeof e=="string"?new ci(e):e;return this.ge...
method fromJson (line 3125) | static fromJson(e,n=Oe.Compound){return this.getFactory(n).fromJson(e)}
method fromJsonWithId (line 3125) | static fromJsonWithId(e){let n=ut.readObject(e)??{},i=ut.readInt(n.type)...
method fromBytes (line 3125) | static fromBytes(e,n=Oe.Compound){return this.getFactory(n).fromBytes(e)}
method constructor (line 3125) | constructor(e){super(),this.value=typeof e=="number"?e:e?1:0}
method getId (line 3125) | getId(){return Oe.Byte}
method getAsNumber (line 3125) | getAsNumber(){return this.value}
method toString (line 3125) | toString(){return this.value.toFixed()+"b"}
method toPrettyString (line 3125) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3125) | toSimplifiedJson(){return this.value}
method toJson (line 3125) | toJson(){return this.value}
method toBytes (line 3125) | toBytes(e){e.writeByte(this.value)}
method create (line 3125) | static create(){return Js.ZERO}
method fromJson (line 3125) | static fromJson(e){return new Js(ut.readInt(e)??0)}
method fromBytes (line 3125) | static fromBytes(e){let n=e.readByte();return new Js(n)}
method constructor (line 3125) | constructor(e){super(),this.items=e}
method getItems (line 3125) | getItems(){return this.items.slice(0)}
method getAsTuple (line 3125) | getAsTuple(e,n){return[...Array(e)].map((i,a)=>n(this.items[a]))}
method get (line 3125) | get(e){if(e=Math.floor(e),!(e<0||e>=this.items.length))return this.items...
method length (line 3125) | get length(){return this.items.length}
method map (line 3125) | map(e){return this.items.map(e)}
method filter (line 3125) | filter(e){return this.items.filter(e)}
method forEach (line 3125) | forEach(e){this.items.forEach(e)}
method set (line 3125) | set(e,n){this.items[e]=n}
method add (line 3125) | add(e){this.items.push(e)}
method insert (line 3125) | insert(e,n){this.items.splice(e,0,n)}
method delete (line 3125) | delete(e){this.items.splice(e,1)}
method clear (line 3125) | clear(){this.items=[]}
method constructor (line 3125) | constructor(e){super(Array.from(e??[],n=>typeof n=="number"?new di(n):n))}
method getId (line 3125) | getId(){return Oe.ByteArray}
method getType (line 3125) | getType(){return Oe.Byte}
method toString (line 3125) | toString(){return"[B;"+this.items.map(n=>n.getAsNumber().toFixed()+"B")....
method toPrettyString (line 3125) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3125) | toSimplifiedJson(){return this.items.map(e=>e.getAsNumber())}
method toJson (line 3125) | toJson(){return this.items.map(e=>e.getAsNumber())}
method toBytes (line 3125) | toBytes(e){e.writeInt(this.items.length),e.writeBytes(this.items.map(n=>...
method create (line 3125) | static create(){return new ga([])}
method fromJson (line 3125) | static fromJson(e){let n=ut.readArray(e,i=>ut.readNumber(i)??0)??[];retu...
method fromBytes (line 3125) | static fromBytes(e){let n=e.readInt(),i=e.readBytes(n);return new ga(i)}
method constructor (line 3125) | constructor(e){super(),this.value=e}
method getId (line 3125) | getId(){return Oe.Float}
method getAsNumber (line 3125) | getAsNumber(){return this.value}
method toString (line 3125) | toString(){return this.value.toString()+"f"}
method toPrettyString (line 3125) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3125) | toSimplifiedJson(){return this.value}
method toJson (line 3125) | toJson(){return this.value}
method toBytes (line 3125) | toBytes(e){e.writeFloat(this.value)}
method create (line 3125) | static create(){return new fn(0)}
method fromJson (line 3125) | static fromJson(e){return new fn(ut.readNumber(e)??0)}
method fromBytes (line 3125) | static fromBytes(e){let n=e.readFloat();return new fn(n)}
method constructor (line 3125) | constructor(e){super(),this.value=e}
method getId (line 3125) | getId(){return Oe.Int}
method getAsNumber (line 3125) | getAsNumber(){return this.value}
method toString (line 3125) | toString(){return this.value.toFixed()}
method toPrettyString (line 3125) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3125) | toSimplifiedJson(){return this.value}
method toJson (line 3125) | toJson(){return this.value}
method toBytes (line 3125) | toBytes(e){e.writeInt(this.value)}
method create (line 3125) | static create(){return new an(0)}
method fromJson (line 3125) | static fromJson(e){return new an(ut.readInt(e)??0)}
method fromBytes (line 3125) | static fromBytes(e){let n=e.readInt();return new an(n)}
method constructor (line 3125) | constructor(e){super(Array.from(e??[],n=>typeof n=="number"?new an(n):n))}
method getId (line 3125) | getId(){return Oe.IntArray}
method getType (line 3125) | getType(){return Oe.Int}
method length (line 3125) | get length(){return this.items.length}
method toString (line 3125) | toString(){return"[I;"+this.items.map(n=>n.getAsNumber().toFixed()).join...
method toPrettyString (line 3125) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3125) | toSimplifiedJson(){return this.items.map(e=>e.getAsNumber())}
method toJson (line 3125) | toJson(){return this.items.map(e=>e.getAsNumber())}
method toBytes (line 3125) | toBytes(e){e.writeInt(this.items.length);for(let n of this.items)e.write...
method create (line 3125) | static create(){return new _a}
method fromJson (line 3125) | static fromJson(e){let n=ut.readArray(e,i=>ut.readNumber(i)??0)??[];retu...
method fromBytes (line 3125) | static fromBytes(e){let n=e.readInt(),i=[];for(let a=0;a<n;a+=1)i.push(e...
method constructor (line 3125) | constructor(e,n){super(e??[]),this.type=this.items.length===0?Oe.End:n??...
method make (line 3125) | static make(e,n){return new Tn(n.map(i=>new e(i)))}
method getId (line 3125) | getId(){return Oe.List}
method getType (line 3125) | getType(){return this.type}
method getNumber (line 3125) | getNumber(e){let n=this.get(e);return n?.isNumber()?n.getAsNumber():0}
method getString (line 3125) | getString(e){let n=this.get(e);return n?.isString()?n.getAsString():""}
method getList (line 3125) | getList(e,n){let i=this.get(e);return i?.isList()&&i.getType()===n?i:Tn....
method getCompound (line 3125) | getCompound(e){let n=this.get(e);return n?.isCompound()?n:ot.create()}
method set (line 3125) | set(e,n){this.updateType(n),super.set(e,n)}
method add (line 3125) | add(e){this.updateType(e),super.add(e)}
method insert (line 3125) | insert(e,n){this.updateType(n),super.insert(e,n)}
method updateType (line 3125) | updateType(e){if(e.getId()!==Oe.End){if(this.type===Oe.End)this.type=e.g...
method clear (line 3125) | clear(){super.clear(),this.type=Oe.End}
method toString (line 3125) | toString(){return"["+this.items.map(e=>e.toString()).join(",")+"]"}
method toPrettyString (line 3125) | toPrettyString(e=" ",n=0){if(this.length===0)return"[]";let i=e.repeat(...
method toSimplifiedJson (line 3128) | toSimplifiedJson(){return this.map(e=>e.toSimplifiedJson())}
method toJson (line 3128) | toJson(){return{type:this.type,items:this.items.map(e=>e.toJson())}}
method toBytes (line 3128) | toBytes(e){this.items.length===0?this.type=Oe.End:this.type=this.items[0...
method create (line 3128) | static create(){return new Tn}
method fromJson (line 3128) | static fromJson(e){let n=ut.readObject(e)??{},i=ut.readNumber(n.type)??O...
method fromBytes (line 3128) | static fromBytes(e){let n=e.readByte(),i=e.readInt();if(n===Oe.End&&i>0)...
method constructor (line 3128) | constructor(e){super(),this.value=Jn.toPair(e)}
method toPair (line 3128) | static toPair(e){return Array.isArray(e)?e:Jn.bigintToPair(e)}
method bigintToPair (line 3128) | static bigintToPair(e){return Jn.dataview.setBigInt64(0,e),[Jn.dataview....
method pairToBigint (line 3128) | static pairToBigint(e){return Jn.dataview.setInt32(0,Number(e[0])),Jn.da...
method pairToString (line 3128) | static pairToString(e){return Jn.pairToBigint(e).toString()}
method pairToNumber (line 3128) | static pairToNumber(e){return Number(Jn.pairToBigint(e))}
method getId (line 3128) | getId(){return Oe.Long}
method getAsNumber (line 3128) | getAsNumber(){return Jn.pairToNumber(this.value)}
method getAsPair (line 3128) | getAsPair(){return this.value}
method toBigInt (line 3128) | toBigInt(){return Jn.pairToBigint(this.value)}
method toString (line 3128) | toString(){return Jn.pairToString(this.value)+"L"}
method toPrettyString (line 3128) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3128) | toSimplifiedJson(){return Jn.pairToNumber(this.value)}
method toJson (line 3128) | toJson(){return this.value}
method toBytes (line 3128) | toBytes(e){e.writeInt(this.value[0]),e.writeInt(this.value[1])}
method create (line 3128) | static create(){return new Jn([0,0])}
method fromJson (line 3128) | static fromJson(e){return new Jn(Array.isArray(e)&&e.length===2?e.map(n=...
method fromBytes (line 3128) | static fromBytes(e){let n=e.readInt(),i=e.readInt();return new Jn([n,i])}
method constructor (line 3128) | constructor(e){super(Array.from(e??[],n=>typeof n=="bigint"||Array.isArr...
method getId (line 3128) | getId(){return Oe.LongArray}
method getType (line 3128) | getType(){return Oe.Long}
method length (line 3128) | get length(){return this.items.length}
method toString (line 3128) | toString(){return"[I;"+this.items.map(n=>n.toString()).join(",")+"]"}
method toPrettyString (line 3128) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3128) | toSimplifiedJson(){return this.items.map(e=>e.getAsPair())}
method toJson (line 3128) | toJson(){return this.items.map(e=>e.getAsPair())}
method toBytes (line 3128) | toBytes(e){e.writeInt(this.items.length);for(let n of this.items){let[i,...
method create (line 3128) | static create(){return new xa}
method fromJson (line 3128) | static fromJson(e){let n=ut.readArray(e,i=>ut.readPair(i,a=>ut.readNumbe...
method fromBytes (line 3128) | static fromBytes(e){let n=e.readInt(),i=[];for(let a=0;a<n;a+=1)i.push([...
method constructor (line 3128) | constructor(e){super(),this.value=e}
method getId (line 3128) | getId(){return Oe.Short}
method getAsNumber (line 3128) | getAsNumber(){return this.value}
method toString (line 3128) | toString(){return this.value.toFixed()+"s"}
method toPrettyString (line 3128) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3128) | toSimplifiedJson(){return this.value}
method toJson (line 3128) | toJson(){return this.value}
method toBytes (line 3128) | toBytes(e){e.writeShort(this.value)}
method create (line 3128) | static create(){return new Sr(0)}
method fromJson (line 3128) | static fromJson(e){return new Sr(typeof e=="number"?Math.floor(e):0)}
method fromBytes (line 3128) | static fromBytes(e){let n=e.readShort();return new Sr(n)}
method constructor (line 3128) | constructor(e){super(),this.value=e}
method getId (line 3128) | getId(){return Oe.String}
method getAsString (line 3128) | getAsString(){return this.value}
method toString (line 3128) | toString(){return'"'+this.value.replace(/(\\|")/g,"\\$1")+'"'}
method toPrettyString (line 3128) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3128) | toSimplifiedJson(){return this.value}
method toJson (line 3128) | toJson(){return this.value}
method toBytes (line 3128) | toBytes(e){e.writeString(this.value)}
method create (line 3128) | static create(){return dc.EMPTY}
method fromJson (line 3128) | static fromJson(e){return new dc(typeof e=="string"?e:"")}
method fromBytes (line 3128) | static fromBytes(e){let n=e.readString();return new dc(n)}
function c (line 3128) | function c(f){if(f.skipWhitespace(),!f.canRead())throw f.createError("Ex...
function d (line 3128) | function d(f){f.expect("{",!0);let g=new Map;for(f.skipWhitespace();f.ca...
function u (line 3128) | function u(f){if(f.expect("[",!0),f.skipWhitespace(),!f.canRead())throw ...
function p (line 3128) | function p(f,g,x,_){let h=[];for(;f.peek()!=="]";){let v=c(f);if(v.getId...
function m (line 3128) | function m(f){return f.skipWhitespace(),f.canRead()&&f.peek()===","?(f.s...
method constructor (line 3128) | constructor(e){super(),this.properties=e??new Map}
method getId (line 3128) | getId(){return Oe.Compound}
method has (line 3128) | has(e){return this.properties.has(e)}
method hasNumber (line 3128) | hasNumber(e){return this.get(e)?.isNumber()??!1}
method hasString (line 3128) | hasString(e){return this.get(e)?.isString()??!1}
method hasList (line 3128) | hasList(e,n,i){let a=this.get(e);return(a?.isList()&&(n===void 0||a.getT...
method hasCompound (line 3128) | hasCompound(e){return this.get(e)?.isCompound()??!1}
method get (line 3128) | get(e){return this.properties.get(e)}
method getString (line 3128) | getString(e){return this.get(e)?.getAsString()??""}
method getNumber (line 3128) | getNumber(e){return this.get(e)?.getAsNumber()??0}
method getBoolean (line 3128) | getBoolean(e){return this.getNumber(e)!==0}
method getList (line 3128) | getList(e,n){let i=this.get(e);return i?.isList()&&(n===void 0||i.getTyp...
method getCompound (line 3128) | getCompound(e){let n=this.get(e);return n?.isCompound()?n:ot.create()}
method getByteArray (line 3128) | getByteArray(e){let n=this.get(e);return n?.isByteArray()?n:ga.create()}
method getIntArray (line 3128) | getIntArray(e){let n=this.get(e);return n?.isIntArray()?n:_a.create()}
method getLongArray (line 3128) | getLongArray(e){let n=this.get(e);return n?.isLongArray()?n:xa.create()}
method keys (line 3128) | keys(){return this.properties.keys()}
method size (line 3128) | get size(){return this.properties.size}
method map (line 3128) | map(e){return Object.fromEntries([...this.properties.entries()].map(([n,...
method forEach (line 3128) | forEach(e){[...this.properties.entries()].forEach(([n,i])=>e(n,i,this))}
method set (line 3128) | set(e,n){return this.properties.set(e,n),this}
method delete (line 3128) | delete(e){return this.properties.delete(e)}
method clear (line 3128) | clear(){return this.properties.clear(),this}
method toString (line 3128) | toString(){let e=[];for(let[n,i]of this.properties.entries()){let a=n.sp...
method toPrettyString (line 3128) | toPrettyString(e=" ",n=0){if(this.size===0)return"{}";let i=e.repeat(n)...
method toSimplifiedJson (line 3131) | toSimplifiedJson(){return this.map((e,n)=>[e,n.toSimplifiedJson()])}
method toJson (line 3131) | toJson(){return this.map((e,n)=>[e,{type:n.getId(),value:n.toJson()}])}
method toBytes (line 3131) | toBytes(e){for(let[n,i]of this.properties.entries()){let a=i.getId();e.w...
method create (line 3131) | static create(){return new ot}
method fromString (line 3131) | static fromString(e){return nf.readTag(e)}
method fromJson (line 3131) | static fromJson(e){let n=ut.readMap(e,i=>{let{type:a,value:r}=ut.readObj...
method fromBytes (line 3131) | static fromBytes(e){let n=new Map;for(;;){let i=e.readByte();if(i===Oe.E...
method constructor (line 3131) | constructor(e,n,i,a,r){this.name=e,this.root=n,this.compression=i,this.l...
method writeNamedTag (line 3131) | writeNamedTag(e){e.writeByte(Oe.Compound),e.writeString(this.name),this....
method write (line 3131) | write(){let e=this.littleEndian===!0||this.bedrockHeader!==void 0,n=new ...
method readNamedTag (line 3131) | static readNamedTag(e){if(e.readByte()!==Oe.Compound)throw new Error("To...
method create (line 3131) | static create(e={}){let n=e.name??Wo.DEFAULT_NAME,i=ot.create(),a=e.comp...
method read (line 3131) | static read(e,n={}){let i=typeof n.bedrockHeader=="number"?n.bedrockHead...
method toJson (line 3131) | toJson(){return{name:this.name,root:this.root.toJson(),compression:this....
method fromJson (line 3131) | static fromJson(e){let n=ut.readObject(e)??{},i=ut.readString(n.name)??"...
method constructor (line 3131) | constructor(e,n,i,a,r){this.x=e,this.z=n,this.compression=i,this.timesta...
method getCompression (line 3131) | getCompression(){switch(this.compression){case 1:return"gzip";case 2:ret...
method setCompression (line 3131) | setCompression(e){switch(e){case"gzip":this.compression=1;break;case"zli...
method getFile (line 3131) | getFile(){return this.file===void 0&&(this.file=qa.read(this.raw,{compre...
method getRoot (line 3131) | getRoot(){return this.getFile().root}
method setRoot (line 3131) | setRoot(e){this.file===void 0&&(this.file=qa.create({compression:this.ge...
method markDirty (line 3131) | markDirty(){this.dirty=!0}
method getRaw (line 3131) | getRaw(){if(this.file===void 0||this.dirty===!1)return this.raw;this.fil...
method toJson (line 3131) | toJson(){return{x:this.x,z:this.z,compression:this.compression,timestamp...
method toRef (line 3131) | toRef(e){return new va.Ref(this.x,this.z,this.compression,this.timestamp...
method create (line 3131) | static create(e,n,i,a){let r=new va(e,n,0,a??0,i.write());return r.setCo...
method fromJson (line 3131) | static fromJson(e,n){let i=ut.readObject(e)??{},a=ut.readInt(i.x)??0,r=u...
class e (line 3131) | class e{x;z;compression;timestamp;size;resolver;file;constructor(i,a,r,o...
method constructor (line 3131) | constructor(i,a,r,o,l,c){this.x=i,this.z=a,this.compression=r,this.tim...
method getFile (line 3131) | getFile(){if(this.file instanceof qa)return this.file}
method getRoot (line 3131) | getRoot(){if(this.file instanceof qa)return this.file.root}
method getFileAsync (line 3131) | async getFileAsync(){return this.file?this.file:(this.file=(async()=>{...
method getRootAsync (line 3131) | async getRootAsync(){return(await this.getFileAsync()).root}
method isResolved (line 3131) | isResolved(){return this.file instanceof qa}
method constructor (line 3131) | constructor(e){this.chunks=Array(32*32).fill(void 0);for(let n of e){let...
method getChunkPositions (line 3131) | getChunkPositions(){return this.chunks.flatMap(e=>e?[[e.x,e.z]]:[])}
method getChunk (line 3131) | getChunk(e){if(!(e<0||e>=32*32))return this.chunks[e]}
method findChunk (line 3131) | findChunk(e,n){return this.getChunk(Or.getIndex(e,n))}
method getFirstChunk (line 3131) | getFirstChunk(){return this.chunks.filter(e=>e!==void 0)[0]}
method filter (line 3131) | filter(e){return this.chunks.filter(n=>n!==void 0&&e(n))}
method map (line 3131) | map(e){return this.chunks.flatMap(n=>n!==void 0?[e(n)]:[])}
method constructor (line 3131) | constructor(e){super(e)}
method write (line 3131) | write(){let e=0;for(let r of this.chunks)r!==void 0&&(e+=Math.ceil(r.get...
method read (line 3131) | static read(e){let n=[];for(let i=0;i<32;i+=1)for(let a=0;a<32;a+=1){let...
method getIndex (line 3131) | static getIndex(e,n){return(e&31)+(n&31)*32}
method toJson (line 3131) | toJson(){return{chunks:this.map(e=>e.toJson())}}
method fromJson (line 3131) | static fromJson(e,n){let i=ut.readObject(e)??{},r=(ut.readArray(i.chunks...
class e (line 3131) | class e extends md{}
method constructor (line 3131) | constructor(i,a,r,o,l,c){this.x=i,this.z=a,this.compression=r,this.tim...
method getFile (line 3131) | getFile(){if(this.file instanceof qa)return this.file}
method getRoot (line 3131) | getRoot(){if(this.file instanceof qa)return this.file.root}
method getFileAsync (line 3131) | async getFileAsync(){return this.file?this.file:(this.file=(async()=>{...
method getRootAsync (line 3131) | async getRootAsync(){return(await this.getFileAsync()).root}
method isResolved (line 3131) | isResolved(){return this.file instanceof qa}
method constructor (line 3131) | constructor(e){super(),this.value=e}
method getId (line 3131) | getId(){return Oe.Double}
method getAsNumber (line 3131) | getAsNumber(){return this.value}
method toString (line 3131) | toString(){return Number.isInteger(this.value)?this.value.toFixed(1):thi...
method toPrettyString (line 3131) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3131) | toSimplifiedJson(){return this.value}
method toJson (line 3131) | toJson(){return this.value}
method toBytes (line 3131) | toBytes(e){e.writeDouble(this.value)}
method create (line 3131) | static create(){return new Ua(0)}
method fromJson (line 3131) | static fromJson(e){return new Ua(ut.readNumber(e)??0)}
method fromBytes (line 3131) | static fromBytes(e){let n=e.readDouble();return new Ua(n)}
method constructor (line 3131) | constructor(){super()}
method getId (line 3131) | getId(){return Oe.End}
method toString (line 3131) | toString(){return"END"}
method toPrettyString (line 3131) | toPrettyString(){return this.toString()}
method toSimplifiedJson (line 3131) | toSimplifiedJson(){return null}
method toJson (line 3131) | toJson(){return null}
method toBytes (line 3131) | toBytes(){}
method create (line 3131) | static create(){return pc.INSTANCE}
method fromJson (line 3131) | static fromJson(){return pc.INSTANCE}
method fromBytes (line 3131) | static fromBytes(){return pc.INSTANCE}
function x0e (line 3131) | function x0e(t,e,n){return n||(n=e,e={}),typeof n!="function"&&Ai(7),_0e...
function Cx (line 3131) | function Cx(t,e){return $A(t,{i:2},e&&e.out,e&&e.dictionary)}
function y0e (line 3131) | function y0e(t,e){if(e){for(var n="",i=0;i<t.length;i+=16384)n+=String.f...
function nT (line 3131) | function nT(t,e,n){n||(n=e,e={}),typeof n!="function"&&Ai(7);var i=[],a=...
function j0e (line 3131) | function j0e(t){let e,n,i,a,r,o,l,c,d,u,p,m;return{c(){e=L("p"),e.textCo...
function A0e (line 3133) | function A0e(t){return[s(()=>aT(),"click_handler")]}
method constructor (line 3133) | constructor(e){super(),Ve(this,e,A0e,j0e,De,{})}
function S0e (line 3133) | function S0e(t){let e,n;return{c(){e=L("img"),Ht(e.src,n=ya)||E(e,"src",...
function O0e (line 3133) | function O0e(t){let e,n;return{c(){e=L("img"),Ht(e.src,n=rT)||E(e,"src",...
function I0e (line 3133) | function I0e(t){let e;function n(r,o){return r[1]?O0e:S0e}s(n,"select_bl...
function D0e (line 3133) | function D0e(t,e,n){let i,a=ie,r=s(()=>(a(),a=rt(o,l=>n(1,i=l)),o),"$$su...
method constructor (line 3133) | constructor(e){super(),Ve(this,e,D0e,I0e,De,{pluginMode:0})}
method constructor (line 3133) | constructor(){this.map=new Map}
method add (line 3133) | add(e,n){this.map.set(e,n)}
method get (line 3133) | get(e){return this.map.get(e)}
method has (line 3133) | has(e){return this.map.has(e)}
method delete (line 3133) | delete(e){this.map.delete(e)}
method getMappedTexture (line 3133) | getMappedTexture(e){let n=this.map.get(e instanceof Texture?e.uuid:e);re...
method setMappedTexture (line 3133) | setMappedTexture(e,n){this.map.set(e.uuid,n.uuid)}
method toJSON (line 3133) | toJSON(){return Object.fromEntries(this.map)}
method fromJSON (line 3133) | static fromJSON(e){let n=new Ws;for(let[i,a]of Object.entries(e))n.add(i...
method copy (line 3133) | copy(){let e=new Ws;return e.map=new Map(this.map),e}
method verifyTextures (line 3133) | verifyTextures(){for(let[e,n]of this.map)Texture.all.some(i=>i.uuid===n)...
method constructor (line 3133) | constructor(e,n=!1){if(this.displayName=rn.makeDisplayNameUnique(this,e)...
method select (line 3133) | select(){rn.selected&&rn.selected.unselect(),rn.selected=this,Canvas.upd...
method unselect (line 3133) | unselect(){rn.selected=void 0}
method delete (line 3133) | delete(){if(this.isDefault)return;let e=rn.all.indexOf(this);e>-1&&rn.al...
method toJSON (line 3133) | toJSON(){let e={name:this.name,display_name:this.displayName,uuid:this.u...
method duplicate (line 3133) | duplicate(){let e=new rn(this.displayName,!1);e.uuid=guid(),e.isDefault=...
method verifyTextureMap (line 3133) | verifyTextureMap(){this.textureMap.verifyTextures()}
method fromJSON (line 3133) | static fromJSON(e,n=!1){let i=new rn(e.display_name,n);if(i.uuid=e.uuid,...
method makeDisplayNameUnique (line 3133) | static makeDisplayNameUnique(e,n){if(!rn.all.some(o=>o!==e&&o.displayNam...
method makeNameUnique (line 3133) | static makeNameUnique(e,n){if(n=Kt(n),!rn.all.some(o=>o!==e&&o.name===n)...
method selectDefault (line 3133) | static selectDefault(){rn.getDefault().select()}
method getByUUID (line 3133) | static getByUUID(e){return rn.all.find(n=>n.uuid===e)}
method allExcludingDefault (line 3133) | static allExcludingDefault(){return rn.all.filter(e=>!e.isDefault)}
method hasDefault (line 3133) | static hasDefault(){return rn.all.some(e=>e.isDefault)}
method getDefault (line 3133) | static getDefault(){return rn.all.find(e=>e.isDefault)??new rn("Default"...
method constructor (line 3133) | constructor(t){this.string=t,this.consume()}
method length (line 3133) | get length(){return this.string.length}
method progress (line 3133) | get progress(){return Math.min(this.index/this.length,1)}
method next (line 3133) | get next(){return this.string.at(this.index+1)}
method nextCode (line 3133) | get nextCode(){return this.string.charCodeAt(this.index+1)}
method currentLine (line 3133) | get currentLine(){return this.lines[this.line-1]}
method look (line 3133) | look(t,e=1){return this.string.slice(this.index+t,this.index+t+e)}
method consume (line 3133) | consume(){let t=this.item;this.item&&(this.currentLine.content+=this.ite...
method consumeN (line 3134) | consumeN(t){for(let e=0;e<t;e++)this.consume()}
method consumeWhile (line 3134) | consumeWhile(t){for(;this.item&&t(this);)this.consume()}
method collect (line 3134) | collect(){let t=this.item;return this.consume(),t}
method collectN (line 3134) | collectN(t){let e="";for(let n=0;n<t;n++)e+=this.collect();return e}
method collectWhile (line 3134) | collectWhile(t){let e="";for(;this.item&&t(this);)e+=this.collect();retu...
method seek (line 3134) | seek(t,e=1/0){if(e=Math.min(this.index+e,this.length),typeof t=="functio...
method lineNumberToIndex (line 3134) | lineNumberToIndex(t){return t-1}
method completeLine (line 3134) | completeLine(){this.line++,this.column=1,this.lines.push({number:this.li...
function Ja (line 3134) | function Ja(t,e){return Math.round(t*10**e)/10**e}
function Dr (line 3134) | function Dr(t,e){return Math.round(t*e)/e}
function sT (line 3134) | function sT(t){t.x===0&&(t.x=1e-5),t.y===0&&(t.y=1e-5),t.z===0&&(t.z=1e-5)}
function Ks (line 3134) | function Ks(t){for(let e in t)t[e]===void 0?delete t[e]:typeof t[e]=="ob...
function pf (line 3134) | function pf(t){let e=new THREE.Euler().setFromQuaternion(t,"YXZ"),n=new ...
method constructor (line 3134) | constructor(e){this.name=e}
method start (line 3134) | start(){if(this.startTime!==void 0)throw new Error("Stopwatch already st...
method debug (line 3134) | debug(...e){this.stop();let n=this.createMessage();return e.length>0&&(n...
method stop (line 3135) | stop(){if(this.startTime===void 0)throw new Error("Stopwatch not started...
method createMessage (line 3135) | createMessage(){let e=this.duration===void 0?"Not finished":`${Ja(this.d...
method function (line 3135) | static function(e,n){return(...i)=>{let a=new pi(e).start(),r=n(...i);re...
method promise (line 3135) | static promise(e,n){let i=new pi(e).start();return n.finally(i.debug.bin...
method constructor (line 3135) | constructor(e){this.minecraftVersion=e;fc(this.minecraftVersion,"1.21.5"...
method stringify (line 3135) | stringify(e){return this.stringifyTextElement(e)}
method stringifyString (line 3135) | stringifyString(e){e=e.replaceAll(`
method stringifyTextElementArray (line 3136) | stringifyTextElementArray(e){return`[${e.map(n=>this.stringifyTextElemen...
method stringifyScoreObject (line 3136) | stringifyScoreObject(e){return this.enabledFeatures&1?`{"name":${this.st...
method stringifyPlayerObject (line 3136) | stringifyPlayerObject(e){let n=this.enabledFeatures&1?'"':"",i=[];if(e.n...
method stringifyLegacyHoverEvent (line 3136) | stringifyLegacyHoverEvent(e){switch(e.action){case"show_text":return`{"a...
method stringifyModernHoverEvent (line 3136) | stringifyModernHoverEvent(e){switch(e.action){case"show_text":return`{ac...
method stringifyLegacyClickEvent (line 3136) | stringifyLegacyClickEvent(e){return`{"action":"${e.action}","value":${th...
method stringifyModernClickEvent (line 3136) | stringifyModernClickEvent(e){switch(e.action){case"open_url":return`{act...
method stringifyTextObject (line 3136) | stringifyTextObject(e){let n=[];for(let i of Object.keys(e)){if(e[i]===v...
method stringifyTextElement (line 3136) | stringifyTextElement(e){if(typeof e=="string")return this.stringifyStrin...
method constructor (line 3136) | constructor(e){this.content=e}
method toString (line 3136) | toString(e=!0,n=ia.defaultMinecraftVersion){let i=e?this.flatten():this....
method toJSON (line 3136) | toJSON(){return structuredClone(this.content)}
method flatten (line 3136) | flatten(e=!1){let n=[],i=s((a,r={})=>{let o=ia.getComponentStyle(a,r),l=...
method getComponentStyle (line 3136) | static getComponentStyle(e,n=ia.defaultStyle){switch(!0){case Array.isAr...
method hasSameStyle (line 3136) | static hasSameStyle(e,n){for(let i of Object.values(Sx))if(e[i]!==n[i])r...
method intToRgba (line 3136) | static intToRgba(e){let n=e>>24&255,i=e>>16&255,a=e>>8&255,r=e&255;retur...
method rgbaToInt (line 3136) | static rgbaToInt([e,n,i,a]){return e=Math.floor(e*255),n=Math.floor(n*25...
method intToHex8 (line 3136) | static intToHex8(e){return`#${(e>>>0).toString(16).padStart(8,"0")}`}
method hexToRgba (line 3136) | static hexToRgba(e){return ia.intToRgba(ia.hexToInt(e))}
method moveHex8AlphaToStart (line 3136) | static moveHex8AlphaToStart(e){return"#"+e.slice(-2)+e.slice(1,-2)}
method hexToInt (line 3136) | static hexToInt(e){if(!e.startsWith("#")||e.length!==7&&e.length!==9)thr...
method getColor (line 3136) | static getColor(e){if(Array.isArray(e))return tinycolor({r:e[0]*255,g:e[...
method fromString (line 3136) | static fromString(e,n){return new Yn(n).parse(e)}
function fc (line 3136) | function fc(t,e){let n=t.split(".").map(Number),i=e.split(".").map(Numbe...
method constructor (line 3136) | constructor(e){super(e),this.name="JsonTextParserError"}
method constructor (line 3136) | constructor(e,n,{child:i,line:a=n.line,column:r=n.column,pointerLength:o...
method getOriginErrorMessage (line 3137) | getOriginErrorMessage(){return this.child?this.child instanceof Ko?this....
method updatePointerMessage (line 3137) | updatePointerMessage(){let e=this.stream.lines[this.line-1].startIndex,n...
method constructor (line 3141) | constructor(e){let{minecraftVersion:n=jt.defaultMinecraftVersion,feature...
method parse (line 3141) | parse(e){let n=new pi("Parse JSON Text").start();this.s=new df(e),this.r...
method throwSyntax (line 3143) | throwSyntax(e,n){throw new Ko(e,this.s,n)}
method recordPosition (line 3143) | recordPosition(){return{index:this.s.index,line:this.s.line,column:this....
method reset (line 3143) | reset(){this.currentNestingDepth=0}
method consumeWhitespace (line 3143) | consumeWhitespace(){this.s.consumeWhile(e=>!!e.item&&wn.WHITESPACE.inclu...
method parseTextElement (line 3143) | parseTextElement(){let e;return this.s.item==="{"?e=this.parseTextObject...
method parseObject (line 3143) | parseObject({objectName:e,keys:n=new Set,required:i,parseKey:a,parseValu...
method normalizeHexColor (line 3143) | normalizeHexColor(e){return e.startsWith("0x")&&(e="#"+e.substring(2)),/...
method normalizeHex8Color (line 3143) | normalizeHex8Color(e){return e.startsWith("0x")&&(e="#"+e.substring(2)),...
method assertTextObjectColorIsValid (line 3143) | assertTextObjectColorIsValid(e){e.startsWith("#")?this.normalizeHexColor...
method parseTextObjectColor (line 3143) | parseTextObjectColor(){let e=this.parseString();if(e.startsWith("#"))ret...
method parseTextObjectShadowColor (line 3143) | parseTextObjectShadowColor(){if(this.enabledFeatures&256||this.throwSynt...
method parseTextObject (line 3143) | parseTextObject(){return this.parseObject({objectName:"TextObject",keys:...
method parsePlayerPropertyObject (line 3143) | parsePlayerPropertyObject(){return this.parseObject({objectName:"player ...
method parsePlayerPropertiesArray (line 3143) | parsePlayerPropertiesArray(){return this.parseArray({arrayName:"player p...
method parsePlayerObject (line 3143) | parsePlayerObject(){return this.parseObject({objectName:"player object",...
method parseUnknownArray (line 3143) | parseUnknownArray(e){return this.parseArray({arrayName:e,parseItem:this....
method parseUnknownValue (line 3143) | parseUnknownValue(){if(this.s.item==="{")return this.parseUnknownObject(...
method parseUnknownObject (line 3143) | parseUnknownObject(e){return this.parseObject({objectName:e,parseValue:(...
method parseScoreObject (line 3143) | parseScoreObject(){return this.parseObject({objectName:"score object",ke...
method parseLegacyClickEventObject (line 3143) | parseLegacyClickEventObject(){return this.parseObject({objectName:"click...
method parseModernClickEventObject (line 3143) | parseModernClickEventObject(){return this.parseObject({objectName:"click...
method transformModernClickEventObjectToLegacy (line 3143) | transformModernClickEventObjectToLegacy(e){switch(e.action){case"open_ur...
method transformLegacyClickEventToModern (line 3143) | transformLegacyClickEventToModern(e){switch(e.action){case"open_url":{le...
method parseLegacyHoverEventObjectShowItemContents (line 3143) | parseLegacyHoverEventObjectShowItemContents(){return this.parseObject({o...
method parseLegacyHoverEventObjectShowEntityContents (line 3143) | parseLegacyHoverEventObjectShowEntityContents(){return this.parseObject(...
method parseLegacyHoverEventObject (line 3143) | parseLegacyHoverEventObject(){return this.parseObject({objectName:"hover...
method parseModernHoverEventObject (line 3143) | parseModernHoverEventObject(){return this.parseObject({objectName:"hover...
method transformLegacyHoverEventObjectToModern (line 3143) | transformLegacyHoverEventObjectToModern(e){switch(e.action){case"show_te...
method transformModernHoverEventObjectToLegacy (line 3143) | transformModernHoverEventObjectToLegacy(e){switch(e.action){case"show_te...
method parseArray (line 3143) | parseArray({arrayName:e,parsePrefix:n,parseItem:i,expectedLength:a}){thi...
method parseTextElementArray (line 3143) | parseTextElementArray(){return this.parseArray({arrayName:"TextElementAr...
method parseIntArray (line 3143) | parseIntArray(e,n){return this.parseArray({arrayName:"int-array",parsePr...
method parseFloatArray (line 3143) | parseFloatArray(e){return this.parseArray({arrayName:"float-array",parse...
method collectHexDigits (line 3143) | collectHexDigits(e){let n="";for(let i=0;i<e;i++)this.s.item&&wn.HEXADEC...
method parseHashedHexColor (line 3143) | parseHashedHexColor(){this.expect(this.s.item,"#","to begin hex color",!...
method parseNamedUnicodeEscapeSequence (line 3143) | parseNamedUnicodeEscapeSequence(){this.expect(this.s.look(0,2),"N{","to ...
method parseUnicodeEscapeSequence (line 3143) | parseUnicodeEscapeSequence(){this.expect(this.s.item,["x","u","U"],"to b...
method parseEscapeSequence (line 3143) | parseEscapeSequence(){this.expect(this.s.item,"\\","to begin escape sequ...
method parseQuotedString (line 3143) | parseQuotedString(){let e=this.s.item;this.expect(this.s.item,wn.QUOTES,...
method parseLiteral (line 3143) | parseLiteral(){this.enabledFeatures&2||this.throwSyntax(`Literal strings...
method parseString (line 3143) | parseString(e){let n,i=this.recordPosition();return this.s.item&&wn.QUOT...
method parseBoolean (line 3143) | parseBoolean(){if(this.s.look(0,4).toLowerCase()==="true")return this.s....
method parseDigits (line 3143) | parseDigits(e,n=wn.NUMBER,i=0,a=1/0){let r="";for(;this.s.item&&n.includ...
method parseNumber (line 3143) | parseNumber(e="number"){let n="",i=!1,a=wn.NUMBER,r=this.s.look(0,2).toL...
method expect (line 3143) | expect(e,n,i,a=!1){(Array.isArray(n)?!e||!n.includes(e):e!==n)&&(Array.i...
method expectSyntaxBoundaryAfter (line 3143) | expectSyntaxBoundaryAfter(e){if(this.s.item&&!wn.SYNTAX_BOUNDARY.include...
method constructor (line 3143) | constructor(e,n,i){super(e,"object",n,i)}
method merge (line 3143) | merge(e,n){typeof n[this.name]=="object"&&(e[this.name]=JSON.parse(JSON....
method copy (line 3143) | copy(e,n){typeof e[this.name]=="object"&&(n[this.name]=JSON.parse(JSON.s...
function wa (line 3143) | function wa(t,e=!1){let n=t[0].index!==null,i=new Set(Object.keys(t[0].a...
function uT (line 3143) | function uT(t){let e,n,i,a=-1,r=0;for(let d=0;d<t.length;++d){let u=t[d]...
function M0e (line 3144) | async function M0e(){let e=await(await fetch("https://unicode.org/Public...
function B0e (line 3145) | function B0e(t,e){let n="";for(let i=0;i<e;i++)if(t.item&&/[0-9a-fA-F]/....
function P0e (line 3145) | function P0e(t){if(t.next!=="{")return console.warn("Expected 'N{' to be...
function L0e (line 3145) | function L0e(t){if(!"xuU".includes(t.item))return console.warn("Expected...
function V0e (line 3145) | function V0e(t){let e="",n=new df(t);for(;n.item;){if(n.item==="\\"){let...
method constructor (line 3145) | constructor(e){if(this.str=e,this.str!==""){this.str=V0e(e);for(let n of...
method [Symbol.iterator] (line 3145) | [Symbol.iterator](){return this.chars[Symbol.iterator]()}
method length (line 3145) | get length(){return this.chars.length}
method includes (line 3145) | includes(e){return this.chars.includes(e)}
method indexOf (line 3145) | indexOf(e){return this.chars.indexOf(e)}
method slice (line 3145) | slice(e,n){let i=this.chars.slice(e,n);return xd.fromChars(i)}
method at (line 3145) | at(e){if(!(e<0||e>=this.chars.length))return this.chars[e]}
method append (line 3145) | append(e){this.chars.push(e),this.str+=e}
method toString (line 3145) | toString(){return this.str}
method fromChars (line 3145) | static fromChars(e){return new xd(e.join(""))}
function dT (line 3145) | function dT(t){if(typeof t=="string")return new hn(t);switch(!0){case t....
function z0e (line 3145) | function z0e(t){let e=new pi("Parse Words").start(),n=new jt(t).flatten(...
function pT (line 3146) | async function pT(t,e=200){let n=new pi("Wrap Json Text").start(),i=z0e(...
function _T (line 3146) | function _T(){return{type:"bitmap",ascent:7,width:6,atlas:gT,bitmapUV:{x...
method constructor (line 3146) | constructor(e){this.type=e.type}
method fromAssetPath (line 3146) | static fromAssetPath(e){e.endsWith(".json")||(e+=".json");let n=Mi(e);sw...
method constructor (line 3146) | constructor(e){super(e);let n=Fr(e.id,"font");this.reference=new Xo(e.id...
method load (line 3146) | async load(){return this.loaded?this:(await this.reference.load(),this.l...
method getChar (line 3146) | getChar(e){let n=this.reference.getChar(e);if(!(n.type==="bitmap"&&n.atl...
method constructor (line 3146) | constructor(e){super(e),this.advances=e.advances}
method load (line 3146) | load(){return this.loaded?this:(this.loaded=!0,this)}
method getChar (line 3146) | getChar(e){if(this.advances[e]!==void 0)return{type:"space",width:this.a...
method constructor (line 3146) | constructor(e){super(e),this.type=e.type,this.bitmapPath=Fr(e.file,"text...
method load (line 3146) | async load(){if(this.loaded)return this;let e=Zo(this.bitmapPath),n=awai...
method getCharIndex (line 3146) | getCharIndex(e){for(let n of this.chars)if(n.includes(e))return[this.cha...
method getChar (line 3146) | getChar(e){let n=this.charCache.get(e);if(n)return n;let i=this.getCharI...
method constructor (line 3146) | constructor(e,n,i){this.id=e,this.fallback=i;let a;try{a=Mi(n)}catch(r){...
method getById (line 3146) | static getById(e){return Xs.all.find(n=>n.id===e)}
method load (line 3146) | async load(){return this.loaded?this:(await Promise.all(this.providers.m...
method getChar (line 3146) | getChar(e){let n=this.charCache.get(e);if(n)return n;for(let i of this.p...
method getTextWidth (line 3146) | getTextWidth(e,n){let i=0,a=n?.style.bold?1:0,r=this;if(n?.style.font&&n...
method getWordWidth (line 3147) | getWordWidth(e){let n=0,i=this;for(let a of e.styles){if(a.style.font&&a...
method getColorMaterial (line 3147) | getColorMaterial(e){let n=e.toHex8String(),i=this.materialCache.get(n);i...
method generateTextDisplayMesh (line 3147) | async generateTextDisplayMesh({jsonText:e,maxLineWidth:n=ve.properties.m...
method getCharGeo (line 3147) | getCharGeo(e,n){let i=this;if(n.font){let d=Xs.getById(n.font);d&&(i=d)}...
function U0e (line 3147) | function U0e(){console.log("Loading Minecraft fonts..."),xc=new Xo("mine...
function _c (line 3147) | async function _c(){return xc||await new Promise(t=>{K.MINECRAFT_FONTS_L...
method from (line 3147) | get from(){return this.position}
method from (line 3147) | set from(e){this.position=e}
method to (line 3147) | get to(){return[0,0,0]}
method stretch (line 3147) | get stretch(){return[]}
method uv_offset (line 3147) | get uv_offset(){return[]}
method constructor (line 3147) | constructor(e,n=guid()){super(e,n),this.extend(e),this.name??="resizable...
method origin (line 3147) | get origin(){return this.position}
method getWorldCenter (line 3147) | getWorldCenter(){return Reusable.vec3.set(0,0,0),THREE.fastWorldPosition...
method extend (line 3147) | extend(e){let n=this.constructor.properties;for(let i in n)n[i].merge(th...
method selectLow (line 3147) | selectLow(){return Project.selected_elements.safePush(this),this.selecte...
method size (line 3147) | size(e,n){return e===void 0?n?this.scale.map(i=>Math.floor(i)):[...this....
method resize (line 3147) | resize(e,n){let i=this.oldScale??this.size(n);i instanceof Array&&(i=i[n...
method getSaveCopy (line 3147) | getSaveCopy(){let e=super.getSaveCopy?.()??{};return e.uuid=this.uuid,e....
method setup (line 3147) | setup(t){let e=new THREE.Mesh;e.isElement=!0,e.fix_rotation=new THREE.Eu...
method updateTransform (line 3147) | updateTransform(t){NodePreviewController.prototype.updateTransform.call(...
function Fx (line 3253) | async function Fx(t,e){await Qo();let n=t+"|"+e,i=xT.get(n);if(i||(i=awa...
function J0e (line 3253) | function J0e(t){let e=bc(t);return e.namespace+":item/"+e.path}
function gf (line 3253) | function gf(t,e,n){if(n==="none"||!e.display)return;!e.display.thirdpers...
function vT (line 3253) | async function vT(t,e,n){let i=Fr(t,"models"),a;try{a=Mi(i+".json")}catc...
function W0e (line 3253) | async function W0e(t,e){let n=new THREE.Mesh,i=[],a=[];for(let c of Obje...
function Mx (line 3253) | async function Mx(t){await Qo();let e=bT.get(t);if(!e){let n=await wd(t)...
function Wa (line 3253) | async function Wa(t,e,n="none"){let i=Fr(t.model,"models"),a=Mi(i+".json...
function Y0e (line 3253) | async function Y0e(t,e){if(console.log(`Generating block mesh for '${t.m...
function wT (line 3255) | async function wT(t,e){e.at(0)==="#"&&(e=e.slice(1));let n=t[e];if(n?.at...
function Bx (line 3255) | function Bx(t){if(t.blockStateRegistryEntry)for(let[e,n]of Object.entrie...
function ET (line 3255) | async function ET(t){let e=Fr(t.resourceLocation,"blockstates"),n=await ...
function X0e (line 3257) | async function X0e(t,e){if(e.when){let n=s(a=>{if(a.OR&&a.AND)throw new ...
function kT (line 3257) | function kT(t,e,n,i){if(typeof n=="string"&&n.includes("|")){if(!i)throw...
method constructor (line 3257) | constructor(e){for(let[n,i]of Object.entries(e[1]))this.defaultStates[n]...
function Q0e (line 3257) | function Q0e(){let t=localStorage.getItem("animated_java:blockStateRegis...
function Vx (line 3257) | async function Vx(){console.log("Updating BlockState Registry...");let t...
function $0e (line 3257) | async function $0e(){if(console.log("Checking if BlockState Registry upd...
function wc (line 3257) | async function wc(t){return Object.keys(yc).length===0?new Promise(e=>{K...
method constructor (line 3257) | constructor(e){this.items=e}
method has (line 3257) | has(e){return this.items.includes(e)}
method find (line 3257) | find(e){return this.items.find(e)}
function txe (line 3257) | function txe(){let t=localStorage.getItem("animated_java:minecraftRegist...
function zx (line 3257) | async function zx(){console.log("Updating Minecraft Registry...");let t=...
function nxe (line 3257) | async function nxe(){if(console.log("Checking if Minecraft Registry upda...
method constructor (line 3257) | constructor(e,n=guid()){super(e,n),$e.all.push(this);for(let i in $e.pro...
method block (line 3257) | get block(){return this.__block===void 0?"minecraft:stone":this.__block....
method block (line 3257) | set block(e){this.__block!==void 0&&this.block!==e&&this.__block.set(e)}
method getBlockValuable (line 3257) | getBlockValuable(){return this.__block}
method sanitizeName (line 3257) | sanitizeName(){return this.name=Ea(this.name,this.uuid),this.name}
method getUndoCopy (line 3257) | getUndoCopy(){let e={};for(let n in $e.properties)$e.properties[n].copy(...
method getSaveCopy (line 3257) | getSaveCopy(){let e=super.getSaveCopy?.()??{};for(let n in $e.properties...
method select (line 3257) | select(){return Group.first_selected&&Group.first_selected.unselect(),!P...
method unselect (line 3257) | unselect(){this.selected&&(Animator.open&&Timeline.selected_animator&&Ti...
method updateBlock (line 3257) | async updateBlock(){let e=await vf(this.block);if(e){this.error.set(e),t...
method applyBlockModel (line 3257) | applyBlockModel(e){let n=this.mesh;n.name=this.uuid,n.geometry=e.boundin...
method setup (line 3257) | setup(t){gn.prototype.preview_controller.setup(t);let e=new THREE.Sprite...
method updateGeometry (line 3257) | updateGeometry(t){t.mesh&&Mx(t.block).then(e=>{e?.mesh&&t.applyBlockMode...
method updateTransform (line 3257) | updateTransform(t){gn.prototype.preview_controller.updateTransform(t)}
method updateHighlight (line 3257) | updateHighlight(t,e){if(!Fe()||!t?.mesh)return;let n=Modes.edit&&(e===!0...
method constructor (line 3257) | constructor(e,n,i){super(e,n,i),this.uuid=e}
method getElement (line 3257) | getElement(){return this.element=OutlinerNode.uuids[this.uuid],this.elem...
method select (line 3257) | select(){if(this.getElement(),!this.element)return unselectAllElements()...
method doRender (line 3257) | doRender(){return this.getElement(),!!this.element?.mesh}
method displayRotation (line 3257) | displayRotation(e,n=1){let i=this.getElement().mesh;if(i.fix_rotation&&i...
method displayPosition (line 3257) | displayPosition(e,n=1){let i=this.getElement().mesh;return i.fix_positio...
method displayScale (line 3257) | displayScale(e,n=1){if(!e)return this;let i=this.getElement().mesh;retur...
method condition (line 3257) | condition(){return Fe()&&Mode.selected.id===Modes.options.edit.id}
method click (line 3257) | click(){Undo.initEdit({outliner:!0,elements:[],selection:!0});let t=new ...
function TT (line 3257) | function TT(){let t=Math.floor(Math.sqrt(Xn.block.items.length));for(let...
function CT (line 3257) | async function CT(t){let e=await wc(t);if(!e)return;let n=rxe(e.stateVal...
function axe (line 3257) | function axe(t){return`[${Object.entries(t).map(([n,i])=>`${n}=${i.toStr...
function rxe (line 3257) | function rxe(t){let e=Object.values(t).reduce((i,a)=>i*a.length,1),n=[];...
method constructor (line 3257) | constructor(e,n=guid()){super(e,n),We.all.push(this);for(let i in We.pro...
method item (line 3257) | get item(){return this.__item===void 0?"minecraft:diamond":this.__item.g...
method item (line 3257) | set item(e){this.__item!==void 0&&this.__item.set(e)}
method itemDisplay (line 3257) | get itemDisplay(){return this.__itemDisplay===void 0?"none":this.__itemD...
method itemDisplay (line 3257) | set itemDisplay(e){this.__itemDisplay!==void 0&&this.__itemDisplay.set(e)}
method sanitizeName (line 3257) | sanitizeName(){return this.name=Ea(this.name,this.uuid),this.name}
method getUndoCopy (line 3257) | getUndoCopy(){let e={};for(let n in We.properties)We.properties[n].copy(...
method getSaveCopy (line 3257) | getSaveCopy(){let e=super.getSaveCopy?.()??{};for(let n in We.properties...
method select (line 3257) | select(){return Group.first_selected&&Group.first_selected.unselect(),!P...
method unselect (line 3257) | unselect(){this.selected&&(Animator.open&&Timeline.selected_animator&&Ti...
method updateItem (line 3257) | async updateItem(){let e=await bf(this.item);if(e){this.error.set(e);ret...
method setup (line 3257) | setup(t){gn.prototype.preview_controller.setup(t);let e=new THREE.Sprite...
method updateGeometry (line 3257) | updateGeometry(t){t.mesh&&Fx(t.item,t.itemDisplay).then(e=>{if(!e)return...
method updateTransform (line 3257) | updateTransform(t){gn.prototype.preview_controller.updateTransform(t)}
method updateHighlight (line 3257) | updateHighlight(t,e){if(!Fe()||!t?.mesh)return;let n=Modes.edit&&(e===!0...
method constructor (line 3257) | constructor(e,n,i){super(e,n,i),this.uuid=e}
method getElement (line 3257) | getElement(){return this.element=OutlinerNode.uuids[this.uuid],this.elem...
method select (line 3257) | select(){if(this.getElement(),!this.element)return unselectAllElements()...
method doRender (line 3257) | doRender(){return this.getElement(),!!this.element?.mesh}
method displayRotation (line 3257) | displayRotation(e,n=1){let i=this.getElement().mesh;if(i.fix_rotation&&i...
method displayPosition (line 3257) | displayPosition(e,n=1){let i=this.getElement().mesh;return i.fix_positio...
method displayScale (line 3257) | displayScale(e,n=1){if(!e)return this;let i=this.getElement().mesh;retur...
method condition (line 3257) | condition(){return Fe()&&Mode.selected.id===Modes.options.edit.id}
method click (line 3257) | click(){Undo.initEdit({outliner:!0,elements:[],selection:!0});let t=new ...
function Ea (line 3257) | function Ea(t,e){t=Kt(t);let n=[...$e.all,...Group.all,...ve.all,...We.a...
method constructor (line 3257) | constructor(e,n=guid()){super(e,n),ve.all.push(this);for(let i in ve.pro...
method sanitizeName (line 3257) | sanitizeName(){return this.name=Ea(this.name,this.uuid),this.name}
method text (line 3257) | get text(){return this.__text===void 0?ve.properties.text.default:this._...
method text (line 3257) | set text(e){this.__text!==void 0&&e!==this.__text.get()&&(this.__text.se...
method lineWidth (line 3257) | get lineWidth(){return this.__lineWidth===void 0?ve.properties.lineWidth...
method lineWidth (line 3257) | set lineWidth(e){this.__lineWidth!==void 0&&e!==this.__lineWidth&&(this....
method backgroundColor (line 3257) | get backgroundColor(){return this.__backgroundColor===void 0?ve.properti...
method backgroundColor (line 3257) | set backgroundColor(e){this.__backgroundColor!==void 0&&e!==this.__backg...
method shadow (line 3257) | get shadow(){return this.__shadow===void 0?ve.properties.shadow.default:...
method shadow (line 3257) | set shadow(e){this.__shadow!==void 0&&e!==this.__shadow&&(this.__shadow=...
method align (line 3257) | get align(){return this.__align===void 0?ve.properties.align.default:thi...
method align (line 3257) | set align(e){this.__align!==void 0&&e!==this.__align&&(this.__align=e,th...
method getTextValuable (line 3257) | getTextValuable(){return this.__text}
method getUndoCopy (line 3257) | getUndoCopy(){let e=new ve(this);for(let n in ve.properties)ve.propertie...
method getSaveCopy (line 3257) | getSaveCopy(){let e=super.getSaveCopy?.()??{};for(let n in ve.properties...
method select (line 3257) | select(){return Group.first_selected&&Group.first_selected.unselect(),!P...
method unselect (line 3257) | unselect(){this.selected&&(Animator.open&&Timeline.selected_animator&&Ti...
method updateTextMesh (line 3257) | updateTextMesh(){let e;try{let n=new Yn({minecraftVersion:Project.animat...
method renderTextMesh (line 3257) | renderTextMesh(e){let n=_c().then(i=>i.generateTextDisplayMesh({jsonText...
method applyTextMesh (line 3257) | applyTextMesh(e,n,i){e.name=this.uuid+"_text",e.isTextDisplayText=!0;let...
method setup (line 3257) | setup(t){gn.prototype.preview_controller.setup(t);let e=new THREE.Sprite...
method updateGeometry (line 3257) | updateGeometry(t){t.needsMeshUpdate&&(t.updateTextMesh(),t.needsMeshUpda...
method updateTransform (line 3257) | updateTransform(t){gn.prototype.preview_controller.updateTransform(t)}
method constructor (line 3257) | constructor(e,n,i){super(e,n,i),this.uuid=e}
method getElement (line 3257) | getElement(){return this.element=OutlinerNode.uuids[this.uuid],this.elem...
method select (line 3257) | select(){if(this.getElement(),!this.element)return unselectAllElements()...
method doRender (line 3257) | doRender(){return this.getElement(),!!this.element?.mesh}
method displayRotation (line 3257) | displayRotation(e,n=1){let i=this.getElement().mesh;if(i.fix_rotation&&i...
method displayPosition (line 3257) | displayPosition(e,n=1){let i=this.getElement().mesh;return i.fix_positio...
method displayScale (line 3257) | displayScale(e,n=1){if(!e)return this;let i=this.getElement().mesh;retur...
method condition (line 3257) | condition(){return Fe()&&Mode.selected.id===Modes.options.edit.id}
method click (line 3257) | click(){Undo.initEdit({outliner:!0,elements:[],selection:!0});let t=new ...
method getDefault (line 3257) | static getDefault(){return wt.fromJSON({on_apply_function:"",billboard:"...
method onApplyFunction (line 3257) | get onApplyFunction(){return this.__onApplyFunction!==void 0?this.__onAp...
method onApplyFunction (line 3257) | set onApplyFunction(e){this.__onApplyFunction=e}
method billboard (line 3257) | get billboard(){return this.__billboard!==void 0?this.__billboard:wt.get...
method billboard (line 3257) | set billboard(e){this.__billboard=e}
method overrideBrightness (line 3257) | get overrideBrightness(){return this.__overrideBrightness!==void 0?this....
method overrideBrightness (line 3257) | set overrideBrightness(e){this.__overrideBrightness=e}
method brightnessOverride (line 3257) | get brightnessOverride(){return this.__brightnessOverride!==void 0?this....
method brightnessOverride (line 3257) | set brightnessOverride(e){this.__brightnessOverride=e}
method enchanted (line 3257) | get enchanted(){return this.__enchanted!==void 0?this.__enchanted:wt.get...
method enchanted (line 3257) | set enchanted(e){this.__enchanted=e}
method glowing (line 3257) | get glowing(){return this.__glowing!==void 0?this.__glowing:wt.getDefaul...
method glowing (line 3257) | set glowing(e){this.__glowing=e}
method overrideGlowColor (line 3257) | get overrideGlowColor(){return this.__overrideGlowColor!==void 0?this.__...
method overrideGlowColor (line 3257) | set overrideGlowColor(e){this.__overrideGlowColor=e}
method glowColor (line 3257) | get glowColor(){return this.__glowColor!==void 0?this.__glowColor:wt.get...
method glowColor (line 3257) | set glowColor(e){this.__glowColor=e}
method invisible (line 3257) | get invisible(){return this.__invisible!==void 0?this.__invisible:wt.get...
method invisible (line 3257) | set invisible(e){this.__invisible=e}
method shadowRadius (line 3257) | get shadowRadius(){return this.__shadowRadius!==void 0?this.__shadowRadi...
method shadowRadius (line 3257) | set shadowRadius(e){this.__shadowRadius=e}
method shadowStrength (line 3257) | get shadowStrength(){return this.__shadowStrength!==void 0?this.__shadow...
method shadowStrength (line 3257) | set shadowStrength(e){this.__shadowStrength=e}
method checkIfEqual (line 3257) | checkIfEqual(e){return this.__onApplyFunction===e.__onApplyFunction&&thi...
method isDefault (line 3257) | isDefault(){return this.checkIfEqual(wt.getDefault())}
method toJSON (line 3257) | toJSON(){return Ks({on_apply_function:this.__onApplyFunction,billboard:t...
method inheritFrom (line 3257) | inheritFrom(e){e.__onApplyFunction!==void 0&&(this.onApplyFunction=e.onA...
method fromJSON (line 3257) | static fromJSON(e){let n=new wt;return e.on_apply_function!==void 0&&(n....
method toNBT (line 3257) | toNBT(e=new ot){if(this.__billboard&&e.set("billboard",new xt(this.billb...
method getDefault (line 3257) | getDefault(){return Nr.fromJSON({use_entity:!1,entity_type:"minecraft:pi...
method useEntity (line 3257) | get useEntity(){return this.__useEntity!==void 0?this.__useEntity:this.g...
method useEntity (line 3257) | set useEntity(e){this.__useEntity=e}
method entityType (line 3257) | get entityType(){return this.__entityType!==void 0?this.__entityType:thi...
method entityType (line 3257) | set entityType(e){this.__entityType=e}
method syncPassengerRotation (line 3257) | get syncPassengerRotation(){return this.__syncPassengerRotation!==void 0...
method syncPassengerRotation (line 3257) | set syncPassengerRotation(e){this.__syncPassengerRotation=e}
method onSummonFunction (line 3257) | get onSummonFunction(){return this.__onSummonFunction!==void 0?this.__on...
method onSummonFunction (line 3257) | set onSummonFunction(e){this.__onSummonFunction=e}
method onRemoveFunction (line 3257) | get onRemoveFunction(){return this.__onRemoveFunction!==void 0?this.__on...
method onRemoveFunction (line 3257) | set onRemoveFunction(e){this.__onRemoveFunction=e}
method onTickFunction (line 3257) | get onTickFunction(){return this.__onTickFunction!==void 0?this.__onTick...
method onTickFunction (line 3257) | set onTickFunction(e){this.__onTickFunction=e}
method toJSON (line 3257) | toJSON(){return Ks({use_entity:this.__useEntity,entity_type:this.__entit...
method fromJSON (line 3257) | static fromJSON(e){let n=new Nr;return e.use_entity!==void 0&&(n.__useEn...
method isDefault (line 3257) | isDefault(){return this.checkIfEqual(new Nr)}
method checkIfEqual (line 3257) | checkIfEqual(e){return this.useEntity===e.useEntity&&this.entityType===e...
function yf (line 3257) | function yf(t){t?.meta?.model_format==="animatedJava/ajmodel"&&(t.meta.m...
function cxe (line 3257) | function cxe(t){console.log("Processing model format 1.0",t);let e=JSON....
function uxe (line 3257) | function uxe(t){console.log("Processing model format 1.1",t);let e=JSON....
function dxe (line 3257) | function dxe(t){console.log("Processing model format 1.2",t);let e=JSON....
function pxe (line 3257) | function pxe(t){console.log("Processing model format 1.3",t);let e=JSON....
function mxe (line 3257) | function mxe(t){console.log("Processing model format 1.4",t);let e=JSON....
function fxe (line 3257) | function fxe(t){console.log("Processing model for AJ 0.3.10",t);let e=JS...
function hxe (line 3257) | function hxe(t){console.log("Processing model format 1.0.0-pre1",t);let ...
function gxe (line 3262) | function gxe(t){console.log("Processing model format 1.0.0-pre6",t);let ...
function _xe (line 3262) | function _xe(t){console.log("Processing model format 1.0.0-pre7",t);let ...
function xxe (line 3262) | function xxe(t){console.log("Processing model format 1.0.0-pre8",t);let ...
function vxe (line 3262) | function vxe(t){console.log("Processing model format 1.4.0",t);let e=JSO...
function bxe (line 3262) | function bxe(t){console.log("Processing model format 1.6.3",t);let e=JSO...
function yxe (line 3262) | function yxe(t){console.log("Processing model format 1.6.5",t);let e=JSO...
function wxe (line 3262) | function wxe(t){console.log("Processing model format 1.8.0",JSON.parse(J...
function wf (line 3268) | function wf(t){return t.replace(/\\/g,"/")}
function Ec (line 3268) | function Ec(t){return t.endsWith(".json")&&(t.includes("tags\\function")...
function Exe (line 3268) | function Exe(t){return t.replace(/%([^%]+)%/g,function(e,n){if(!process....
function kxe (line 3268) | function kxe(t){return t.startsWith("./")||t.startsWith("../")||t.starts...
function jxe (line 3268) | function jxe(t){if(!Project?.save_path)return;let e=PathModule.dirname(P...
function $o (line 3268) | function $o(t){if(kxe(t)){let e=jxe(t);if(!e)throw new Error(`Failed to ...
function Ef (line 3268) | function Ef(t){try{return fs.readFileSync(t)}catch{return}}
function MT (line 3268) | function MT(t){let e,n,i,a,r,o,l,c,d,u,p,m,f,g,x;return{c(){e=L("div"),n...
function Cxe (line 3268) | function Cxe(t){let e,n=t[0]&&MT(t);return{c(){n&&n.c(),e=_t()},m(i,a){n...
function Sxe (line 3268) | function Sxe(t,e,n){let i=localStorage.getItem("animated_java_settings_s...
method constructor (line 3268) | constructor(e){super(),Ve(this,e,Sxe,Cxe,De,{})}
function Yx (line 3269) | function Yx(){for(let t of Cube.all)Cube.preview_controller.updateTransf...
function Kx (line 3269) | function Kx(t,e){t.isRotationValid!==e&&(t.mesh.outline.material=e?Canva...
function Oxe (line 3269) | function Oxe(){if(!jf){jf=Blockbench.showToastNotification({text:A(Rr("1...
function Nxe (line 3269) | function Nxe(t){let e,n,i,a,r=pureMarked(t[1])+"";return{c(){e=L("div"),...
function Rxe (line 3269) | function Rxe(t){let e,n,i,a,r=pureMarked(t[2])+"";return{c(){e=L("div"),...
function VT (line 3269) | function VT(t){let e,n=pureMarked(t[0])+"",i;return{c(){e=new Yi(!1),i=_...
function Mxe (line 3269) | function Mxe(t){let e,n,i,a,r,o,l,c,d,u,p,m,f=t[7].default,g=qy(f,t,t[6]...
function Bxe (line 3269) | function Bxe(t,e,n){let{$$slots:i={},$$scope:a}=e,{label:r}=e,{tooltip:o...
method constructor (line 3269) | constructor(e){super(),Ve(this,e,Bxe,Mxe,De,{label:5,tooltip:0,warningTe...
function Pxe (line 3269) | function Pxe(t){let e,n,i,a,r,o,l,c,d,u,p,m,f,g,x,_,h,v,b;return{c(){e=L...
function Lxe (line 3269) | function Lxe(t){let e,n,i,a;function r(c){t[27](c)}s(r,"basedialogitem_w...
function Vxe (line 3269) | function Vxe(t,e,n){let i,a=ie,r=s(()=>(a(),a=rt(m,le=>n(10,i=le)),m),"$...
method constructor (line 3269) | constructor(e){super(),Ve(this,e,Vxe,Lxe,De,{label:0,tooltip:1,step:13,v...
function zxe (line 3269) | function zxe(t){let e,n,i,a,r,o,l;return{c(){e=L("div"),n=L("label"),i=R...
function Uxe (line 3269) | function Uxe(t){let e,n;return e=new Ln({props:{label:t[0],tooltip:t[1],...
function qxe (line 3269) | function qxe(t,e,n){let{label:i}=e,{tooltip:a=""}=e,{options:r}=e,{defau...
method constructor (line 3269) | constructor(e){super(),Ve(this,e,qxe,Uxe,De,{label:0,tooltip:1,options:4...
function Hxe (line 3269) | function Hxe(t){let e,n,i;return{c(){e=L("div"),n=L("h4"),i=Re(t[0]),E(n...
function Jxe (line 3269) | function Jxe(t,e,n){let{label:i}=e;return t.$$set=a=>{"label"in a&&n(0,i...
method constructor (line 3269) | constructor(e){super(),Ve(this,e,Jxe,Hxe,De,{label:0})}
function Gxe (line 3269) | function Gxe(t){let e,n,i,a,r,o,l,c,d,u,p,m;return{c(){e=L("div"),n=L("l...
function Wxe (line 3269) | function Wxe(t){let e,n;return e=new Ln({props:{label:t[0],tooltip:t[1],...
function Kxe (line 3269) | function Kxe(t,e,n){let i,a=ie,r=s(()=>(a(),a=rt(c,N=>n(5,i=N)),c),"$$su...
method constructor (line 3269) | constructor(e){super(),Ve(this,e,Kxe,Wxe,De,{label:0,tooltip:1,value:2,d...
function Yxe (line 3269) | function Yxe(t){let e,n,i,a,r,o,l,c,d,u;return{c(){e=L("div"),n=L("label...
function Xxe (line 3269) | function Xxe(t){let e,n;return e=new Ln({props:{label:t[0],tooltip:t[1],...
function Zxe (line 3269) | function Zxe(t,e,n){let{label:i}=e,{tooltip:a=""}=e,{value:r}=e,{default...
method constructor (line 3269) | constructor(e){super(),Ve(this,e,Zxe,Xxe,De,{label:0,tooltip:1,value:8,d...
function Qxe (line 3269) | function Qxe(t){let e,n,i,a,r,o,l,c,d,u,p;return{c(){e=L("div"),n=L("lab...
function $xe (line 3269) | function $xe(t){let e,n,i,a;function r(c){t[15](c)}s(r,"basedialogitem_w...
function eve (line 3269) | function eve(t,e,n){let{label:i}=e,{tooltip:a=""}=e,{value:r}=e,{default...
method constructor (line 3269) | constructor(e){super(),Ve(this,e,eve,$xe,De,{label:0,tooltip:1,value:8,d...
function tve (line 3269) | function tve(t){let e,n,i,a,r,o,l,c,d,u,p;return{c(){e=L("div"),n=L("lab...
function nve (line 3269) | function nve(t){let e,n,i,a;function r(c){t[15](c)}s(r,"basedialogitem_w...
function ive (line 3269) | function ive(t,e,n){let{label:i}=e,{tooltip:a=""}=e,{value:r}=e,{default...
method constructor (line 3269) | constructor(e){super(),Ve(this,e,ive,nve,De,{label:0,tooltip:1,value:8,d...
function $x (line 3269) | function $x(t,e,n={}){let i=Object.assign({tab:" ",indentOn:/[({\[]$/,mo...
function zT (line 3275) | function zT(t,e={}){let n={class:"codejar-linenumbers",wrapClass:"codeja...
function rve (line 3278) | function rve(t,e){let n=getComputedStyle(t),i=document.createElement("di...
function UT (line 3278) | function UT(t,e){let{highlight:n,onUpdate:i,syntax:a,value:r,withLineNum...
function ove (line 3278) | function ove(t){let e;return{c(){e=Re(t[1])},m(n,i){U(n,e,i)},p(n,i){i&2...
function sve (line 3278) | function sve(t){let e,n=t[12](t[1],t[13])+"",i;return{c(){e=new Yi(!1),i...
function lve (line 3278) | function lve(t){let e,n,i,a,r,o,l,c;function d(m,f){return m[12]?sve:ove...
function cve (line 3278) | function cve(t,e,n){let i=Bg(),{element:a=void 0}=e,{class:r=void 0}=e,{...
method constructor (line 3278) | constructor(e){super(),Ve(this,e,cve,lve,De,{element:0,class:2,style:3,a...
function qT (line 3278) | function qT(t){let e,n;return{c(){e=L("div"),n=Re(t[1]),E(e,"class","pla...
function uve (line 3278) | function uve(t){let e,n,i,a,r,o,l,c,d,u,p;function m(_){t[7](_)}s(m,"cod...
function dve (line 3310) | function dve(t,e){return e?Prism.highlight(t,Prism.languages[e],e):t}
function pve (line 3310) | function pve(t,e,n){let{value:i}=e,{placeholder:a=void 0}=e,{style:r=voi...
method constructor (line 3310) | constructor(e){super(),Ve(this,e,pve,uve,De,{value:0,placeholder:1,style...
function HT (line 3327) | function HT(t){let e,n,i;return{c(){e=L("textarea"),e.readOnly=!0,E(e,"r...
function mve (line 3329) | function mve(t){let e,n,i,a,r,o,l,c,d,u,p,m;function f(_){t[11](_)}s(f,"...
function fve (line 3329) | function fve(t){let e,n;return e=new Ln({props:{label:t[0],tooltip:t[1],...
function hve (line 3329) | function hve(t,e,n){let i,a=ie,r=s(()=>(a(),a=rt(c,y=>n(6,i=y)),c),"$$su...
method constructor (line 3329) | constructor(e){super(),Ve(this,e,hve,fve,De,{label:0,tooltip:1,value:2,d...
function gve (line 3346) | function gve(t){let e,n,i,a,r,o,l,c,d,u,p,m;return{c(){e=L("div"),n=L("l...
function _ve (line 3346) | function _ve(t){let e,n;return e=new Ln({props:{label:t[0],tooltip:t[1],...
function xve (line 3346) | function xve(t,e,n){let i,a=ie,r=s(()=>(a(),a=rt(c,m=>n(3,i=m)),c),"$$su...
method constructor (line 3346) | constructor(e){super(),Ve(this,e,xve,_ve,De,{label:0,tooltip:1,checked:2...
function Ive (line 3346) | function Ive(t,e){return Sve(t,{i:2},e&&e.out,e&&e.dictionary)}
function Nve (line 3346) | function Nve(t,e){if(e){for(var n="",i=0;i<t.length;i+=16384)n+=String.f...
function $T (line 3346) | function $T(t,e){for(var n={},i=t.length-22;Ya(t,i)!=101010256;--i)(!i||...
function _n (line 3346) | function _n(t){return Buffer.from(Lve[t]).toString("utf-8")}
function o4 (line 3346) | function o4(t){let e,n,i,a;function r(c){t[40](c)}s(r,"vector2d_valueX_b...
function zve (line 3346) | function zve(t){let e,n,i,a,r,o,l,c,d,u,p,m,f,g,x,_;function h(k){t[46](...
function Uve (line 3346) | function Uve(t){let e,n,i,a,r,o,l,c,d;function u(_){t[43](_)}s(u,"linein...
function s4 (line 3346) | function s4(t){let e,n,i,a,r,o,l,c,d,u=t[27]&&l4(t),p=[Hve,qve],m=[];fun...
function l4 (line 3346) | function l4(t){let e,n,i;function a(o){t[48](o)}s(a,"lineinput_value_bin...
function qve (line 3346) | function qve(t){let e,n,i;function a(o){t[50](o)}s(a,"fileselect_value_b...
function Hve (line 3346) | function Hve(t){let e,n,i;function a(o){t[49](o)}s(a,"folderselect_value...
function c4 (line 3346) | function c4(t){let e,n,i,a,r;function o(c){t[52](c)}s(o,"numberslider_va...
function u4 (line 3346) | function u4(t){let e,n,i,a,r,o,l,c,d,u,p,m,f,g,x,_,h,v,b,y,w,S,F,N,k,R,D...
function Jve (line 3346) | function Jve(t){let e,n,i;function a(o){t[55](o)}s(a,"fileselect_value_b...
function Gve (line 3346) | function Gve(t){let e,n,i;function a(o){t[54](o)}s(a,"folderselect_value...
function Wve (line 3346) | function Wve(t){let e,n,i,a,r,o,l,c,d,u,p,m,f,g,x,_,h,v,b,y,w,S,F,N,k;e=...
function Kve (line 3346) | function Kve(t){return t===""?{type:"error",message:A("dialog.blueprint_...
function p4 (line 3346) | function p4(t){if(t==="")return{type:"error",message:A("dialog.blueprint...
function Yve (line 3346) | function Yve(t){let e=Number(t.x),n=Number(t.y),i=Number(Texture.all.map...
function Xve (line 3346) | function Xve(t){let e;try{e=$o(t)}catch(n){return console.error(n),{type...
function Zve (line 3346) | function Zve(t){let e;try{e=$o(t)}catch(n){return console.error(n),{type...
function Qve (line 3346) | function Qve(t){let e;try{e=$o(t)}catch(n){return console.error(n),{type...
function m4 (line 3346) | function m4(t){let e;try{e=$o(t)}catch(n){return console.error(n),{type:...
function $ve (line 3346) | function $ve(t,e,n){let i,a=ie,r=s(()=>(a(),a=rt(q,ce=>n(34,i=ce)),q),"$...
method constructor (line 3346) | constructor(e){super(),Ve(this,e,$ve,Wve,De,{blueprintName:0,textureSize...
function ebe (line 3346) | function ebe(){return{blueprintName:new ke(Project.name,t=>t||"My Bluepr...
function tbe (line 3346) | function tbe(t){Project&&(Project.name=t.blueprintName.get(),setProjectR...
function jc (line 3346) | function jc(){if(!Project)return;let t=ebe();return new cn({id:`${Ke.nam...
function h4 (line 3346) | function h4(t){let e,n;return{c(){e=L("progress"),e.value=n=t[4]/t[5]||0...
function nbe (line 3346) | function nbe(t){let e,n,i,a,r,o,l,c,d=t[4]!==0&&h4(t);return{c(){e=L("di...
function ibe (line 3346) | function ibe(t,e,n){let i,a=ie,r=s(()=>(a(),a=rt(g,x=>n(3,i=x)),g),"$$su...
method constructor (line 3346) | constructor(e){super(),Ve(this,e,ibe,nbe,De,{progress:0,maxProgress:1,pr...
function qf (line 3346) | function qf(t){return Pt.set(0),Bi.set(1),Dn.set("Preparing..."),t&&(Bi....
function uv (line 3346) | function uv(){main_preview.controls.rotateLeft(Math.PI),scene.setRotatio...
function dv (line 3346) | function dv(){main_preview.controls.rotateLeft(-Math.PI),scene.setRotati...
function Hf (line 3346) | function Hf(t,e){let n=t.mesh.matrixWorld.clone(),i=new THREE.Vector3()....
function abe (line 3346) | function abe(t){let e=new THREE.Vector3,n=new THREE.Quaternion,i=new THR...
function rbe (line 3346) | function rbe(t){let e=new THREE.Euler().setFromQuaternion(t,"YXZ");retur...
function pv (line 3346) | function pv(t,e,n=0){let i={time:n,node_transforms:{},...obe(t,n),...sbe...
function obe (line 3346) | function obe(t,e){let n=t.animators.effects?.variant;if(n){let i=n.find(...
function sbe (line 3346) | function sbe(t,e){let n=t.animators.effects?.function;if(n){let i=n.find...
function Nd (line 3346) | function Nd(t,e){Timeline.time=e,Animator.showDefaultPose(!0);let n=[......
function lbe (line 3346) | function lbe(t,e){let n={name:t.name,storage_name:Kt(t.name),uuid:t.uuid...
function x4 (line 3346) | function x4(t){let e=_4.createHash("sha256");for(let n of t){e.update("a...
function cbe (line 3346) | function cbe(){return[...Group.all,...Locator.all,...ve.all,...$e.all,.....
function v4 (line 3346) | async function v4(t,e){lv=void 0,Ac=new Map,Fd=new Map,cv=new Set,Jf=new...
method constructor (line 3346) | constructor(e){this.limit=e;this.lastTime=performance.now()}
method sync (line 3346) | async sync(){return performance.now()-this.lastTime>=this.limit?(await n...
method global (line 3346) | static global(e){return j.globals[e]?j.globals[e]:j.globals[e]={}}
method createStatic (line 3346) | static createStatic(e,n,i){let a=null;Object.defineProperty(e,n,{enumera...
method iterator (line 3346) | static iterator(e){if(Array.isArray(e)){let n=e;return function(){return...
method getIterator (line 3346) | static getIterator(e){return Array.isArray(e)?j.mkIter(e):e.iterator()}
method mkIter (line 3346) | static mkIter(e){return new mv(e)}
method extend (line 3346) | static extend(e){function n(){this[j.new].apply(this,arguments)}return s...
method inherits (line 3346) | static inherits(e,n){n==null&&(n=!1);function i(){n&&e&&i[j.init]&&i[j.i...
method bind (line 3346) | static bind(e,n){if(n==null)return null;n.__id__==null&&(n.__id__=j.fid+...
method __name__ (line 3346) | static get __name__(){return"genes.Register"}
method __class__ (line 3346) | get __class__(){return j}
method [j.new] (line 3346) | [j.new](e){this.current=0,this.array=e}
method hasNext (line 3346) | hasNext(){return this.current<this.array.length}
method next (line 3346) | next(){return this.array[this.current++]}
method __name__ (line 3346) | static get __name__(){return"genes._Register.ArrayIterator"}
method __class__ (line 3346) | get __class__(){return y4}
method [j.new] (line 3346) | [j.new](e,n,i){super[j.new](String(e),n,i),this.value=e}
method unwrap (line 3346) | unwrap(){return this.value}
method __name__ (line 3346) | static get __name__(){return"haxe.ValueException"}
method __super__ (line 3346) | static get __super__(){return ne}
method __class__ (line 3346) | get __class__(){return w4}
method [j.new] (line 3346) | [j.new](e,n,i){Error.call(this,e),this.message=e,this.__previousExceptio...
method unwrap (line 3346) | unwrap(){return this.__nativeException}
method toString (line 3346) | toString(){return this.get_message()}
method get_message (line 3346) | get_message(){return this.message}
method get_native (line 3346) | get_native(){return this.__nativeException}
method caught (line 3346) | static caught(e){return e instanceof Md?e:e instanceof Error?new Md(e.me...
method thrown (line 3346) | static thrown(e){return e instanceof Md?e.get_native():e instanceof Erro...
method __name__ (line 3346) | static get __name__(){return"haxe.Exception"}
method __super__ (line 3346) | static get __super__(){return Error}
method __class__ (line 3346) | get __class__(){return Md}
method dateStr (line 3346) | static dateStr(e){let n=e.getMonth()+1,i=e.getDate(),a=e.getHours(),r=e....
method strDate (line 3346) | static strDate(e){switch(e.length){case 8:let n=e.split(":"),i=new Date;...
method cca (line 3346) | static cca(e,n){let i=e.charCodeAt(n);if(i==i)return i}
method substr (line 3346) | static substr(e,n,i){if(i==null)i=e.length;else if(i<0)if(n==0)i=e.lengt...
method now (line 3346) | static now(){return Date.now()}
method __name__ (line 3346) | static get __name__(){return"HxOverrides"}
method __class__ (line 3346) | get __class__(){return E4}
method isSpace (line 3346) | static isSpace(e,n){let i=at.cca(e,n);return i>8&&i<14?!0:i==32}
method ltrim (line 3346) | static ltrim(e){let n=e.length,i=0;for(;i<n&&Tc.isSpace(e,i);)++i;return...
method rtrim (line 3346) | static rtrim(e){let n=e.length,i=0;for(;i<n&&Tc.isSpace(e,n-i-1);)++i;re...
method trim (line 3346) | static trim(e){return Tc.ltrim(Tc.rtrim(e))}
method hex (line 3346) | static hex(e,n){let i="",a="0123456789ABCDEF";do i=a.charAt(e&15)+i,e>>>...
method __name__ (line 3346) | static get __name__(){return"StringTools"}
method __class__ (line 3346) | get __class__(){return Tc}
method tokenize (line 3346) | static tokenize(e,n){let i=!1,a=[],r=[],o=0,l=e.split(`
method __name__ (line 3348) | static get __name__(){return"mcl.Tokenizer"}
method __class__ (line 3348) | get __class__(){return k4}
method [j.new] (line 3348) | [j.new](e,n){super[j.new](e),this.mcbstack=n}
method __init__ (line 3348) | __init__(){}
method isMclError (line 3348) | static isMclError(e){return e instanceof fv}
method __name__ (line 3348) | static get __name__(){return"mcl.error.McbError"}
method __super__ (line 3348) | static get __super__(){return ne}
method __class__ (line 3348) | get __class__(){return fv}
method [j.new] (line 3348) | [j.new](e,n,i){super[j.new]((n?"Internal ":"")+`Compiler Error:
method __name__ (line 3349) | static get __name__(){return"mcl.error.CompilerError"}
method __super__ (line 3349) | static get __super__(){return Ci}
method __class__ (line 3349) | get __class__(){return j4}
method [j.new] (line 3349) | [j.new](e){switch(e){case".":case"..":this.dir=e,this.file="";return}let...
method toString (line 3349) | toString(){return(this.dir==null?"":this.dir+(this.backslash?"\\":"/"))+...
method withoutExtension (line 3349) | static withoutExtension(e){let n=new el(e);return n.ext=null,n.toString()}
method directory (line 3349) | static directory(e){let n=new el(e);return n.dir==null?"":n.dir}
method extension (line 3349) | static extension(e){let n=new el(e);return n.ext==null?"":n.ext}
method join (line 3349) | static join(e){let n=[],i=0,a=e;for(;i<a.length;){let d=a[i];++i,d!=null...
method normalize (line 3349) | static normalize(e){let n="/";if(e=e.split("\\").join(n),e==n)return n;l...
method addTrailingSlash (line 3349) | static addTrailingSlash(e){if(e.length==0)return"/";let n=e.lastIndexOf(...
method __name__ (line 3349) | static get __name__(){return"haxe.io.Path"}
method __class__ (line 3349) | get __class__(){return el}
method [j.new] (line 3349) | [j.new](){this.inst=new Map}
method get (line 3349) | get(e){return this.inst.get(e)}
method keys (line 3349) | keys(){return hv.adaptIterator(this.inst.keys())}
method clear (line 3349) | clear(){this.inst.clear()}
method adaptIterator (line 3349) | static adaptIterator(e){let n,i,a=s(function(){let r=e.next();n=r.value,...
method __name__ (line 3349) | static get __name__(){return"genes.util.EsMap"}
method __class__ (line 3349) | get __class__(){return hv}
method [j.new] (line 3349) | [j.new](){super[j.new]()}
method __name__ (line 3349) | static get __name__(){return"haxe.ds.StringMap"}
method __interfaces__ (line 3349) | static get __interfaces__(){return[nl]}
method __super__ (line 3349) | static get __super__(){return Mt}
method __class__ (line 3349) | get __class__(){return A4}
method [j.new] (line 3349) | [j.new](){this.tagEntries=new et}
method ensureTag (line 3349) | ensureTag(e,n){let i=e.indexOf(":");if(i==-1)e=n.namespace+":"+n.path.co...
method addTagEntry (line 3349) | addTagEntry(e,n,i,a){a==null&&(a=!1),e=this.ensureTag(e,i),this.tagEntri...
method setTagReplace (line 3349) | setTagReplace(e,n,i){e=this.ensureTag(e,n),this.tagEntries.inst.get(e).r...
method writeTagFiles (line 3349) | writeTagFiles(e){let n=this.tagEntries,i=n,a=n.keys();for(;a.hasNext();)...
method __name__ (line 3349) | static get __name__(){return"mcl.TagManager"}
method __class__ (line 3349) | get __class__(){return T4}
method [j.new] (line 3349) | [j.new](e){super[j.new](`Parser Error:
method __name__ (line 3350) | static get __name__(){return"mcl.error.ParserError"}
method __super__ (line 3350) | static get __super__(){return Ci}
method __class__ (line 3350) | get __class__(){return C4}
method getClass (line 3350) | static getClass(e){if(e==null)return null;if(e instanceof Array)return A...
method __string_rec (line 3350) | static __string_rec(e,n){if(e==null)return"null";if(n.length>=5)return"<...
method __interfLoop (line 3353) | static __interfLoop(e,n){if(e==null)return!1;if(e==n)return!0;let i=e.__...
method __instanceof (line 3353) | static __instanceof(e,n){if(n==null)return!1;switch(n){case Array:return...
method __downcastCheck (line 3353) | static __downcastCheck(e,n){return e instanceof n?!0:n.__isInterface__?v...
method __cast (line 3353) | static __cast(e,n){if(e==null||vi.__instanceof(e,n))return e;throw ne.th...
method __nativeClassName (line 3353) | static __nativeClassName(e){let n=vi.__toStr.call(e).slice(8,-1);return ...
method __isNativeObj (line 3353) | static __isNativeObj(e){return vi.__nativeClassName(e)!=null}
method __resolveNativeClass (line 3353) | static __resolveNativeClass(e){return j.$global[e]}
method __name__ (line 3353) | static get __name__(){return"js.Boot"}
method __class__ (line 3353) | get __class__(){return vi}
method string (line 3353) | static string(e){return Pr.__string_rec(e,"")}
method parseInt (line 3353) | static parseInt(e){let n=parseInt(e);return isNaN(n)?null:n}
method __name__ (line 3353) | static get __name__(){return"Std"}
method __class__ (line 3353) | get __class__(){return S4}
method [j.new] (line 3353) | [j.new](e,n){this.r=new RegExp(e,n.split("u").join(""))}
method match (line 3353) | match(e){return this.r.global&&(this.r.lastIndex=0),this.r.m=this.r.exec...
method matched (line 3353) | matched(e){if(this.r.m!=null&&e>=0&&e<this.r.m.length)return this.r.m[e]...
method matchedRight (line 3353) | matchedRight(){if(this.r.m==null)throw ne.thrown("No string matched");le...
method matchedPos (line 3353) | matchedPos(){if(this.r.m==null)throw ne.thrown("No string matched");retu...
method __name__ (line 3353) | static get __name__(){return"EReg"}
method __class__ (line 3353) | get __class__(){return O4}
method [j.new] (line 3353) | [j.new](e){this.array=e,this.set_index(0)}
method index (line 3353) | get index(){return this.get_index()}
method index (line 3353) | set index(e){this.set_index(e)}
method get_index (line 3353) | get_index(){return this._index}
method set_index (line 3353) | set_index(e){return this._index=e}
method next (line 3353) | next(){if(this._index>=this.array.length)throw new Si("Tried to read pas...
method skip (line 3353) | skip(){this.set_index(this.get_index()+1)}
method peek (line 3353) | peek(){return this.array[this.get_index()]}
method hasNext (line 3353) | hasNext(){return this.get_index()<this.array.length}
method insert (line 3353) | insert(e){let n=this.array,i=this.get_index();n.splice(i,0,e)}
method back (line 3353) | back(){this.set_index(this.get_index()-1)}
method update (line 3353) | update(e){this.array[this.get_index()]=e}
method __name__ (line 3353) | static get __name__(){return"mcl.ArrayInput"}
method __class__ (line 3353) | get __class__(){return I4}
method format (line 3353) | static format(e,...n){let i=new RegExp("\\{\\}","".split("u").join("")),...
method toss (line 3353) | static toss(e,n){switch(e._hx_index){case 0:let i=e.v,a=e.pos;throw new ...
method unreachable (line 3353) | static unreachable(e){let n;switch(e._hx_index){case 0:let i=e.v,a=e.pos...
method expect (line 3353) | static expect(e,n){let i=e.next();if(!n(i))throw ye.unreachable(i)}
method expectThenData (line 3353) | static expectThenData(e,n){n==null&&(n=!0);let i=e.peek();if(ye.expect(e...
method block (line 3353) | static block(e,n,i,a){i==null&&(i=!0);let r=ye.expectThenData(e,i);for(;...
method readFunction (line 3353) | static readFunction(e,n,i){let a=[],r=null,o=e.split(" ");return o.lengt...
method innerParseTemplate (line 3353) | static innerParseTemplate(e){let n=e.peek();if(n._hx_index==0){let i=n.v...
method readTemplate (line 3353) | static readTemplate(e,n,i){let a=[];return ye.block(n,function(){let r=y...
method pos (line 3353) | static pos(e){switch(e._hx_index){case 0:let n=e.v;return e.pos;case 1:l...
method json (line 3353) | static json(e){let n=ye.pos(e.peek()),i=0,a="";do{if(!e.hasNext())throw ...
method parseMcbFile (line 3353) | static parseMcbFile(e){let n=new ko(e),i=[];for(;n.hasNext();)i.push(ye....
method parseMcbtFile (line 3353) | static parseMcbtFile(e){let n=new ko(e),i=[];for(;n.hasNext();){let a=n....
method parserCompilerLoop (line 3353) | static parserCompilerLoop(e,n,i,a){let r=[];if(ye.block(i,function(){r.p...
method parseTLD (line 3353) | static parseTLD(e){let n=e.next();if(n._hx_index==0){let i=n.v,a=n.pos;i...
method readPlainJsonFile (line 3353) | static readPlainJsonFile(e,n,i){let a=[],r=0,o=e.split(" ");for(;r<o.len...
method innerParse (line 3353) | static innerParse(e){let n=e.peek();switch(n._hx_index){case 0:let i=n.v...
method readRaw (line 3353) | static readRaw(e,n,i,a){if(!i.hasNext())return pe.Raw(e,n,[],a);let r=[]...
method parseCompileTimeIf (line 3353) | static parseCompileTimeIf(e,n,i,a){let r=Et.trim(e.substring(2)),o=[];ye...
method __name__ (line 3353) | static get __name__(){return"mcl.Parser"}
method __class__ (line 3353) | get __class__(){return ye}
method isDecimalDigit (line 3353) | static isDecimalDigit(e){return e>=48?e<=57:!1}
method isUpperCaseLetter (line 3353) | static isUpperCaseLetter(e){return e>=65?e<=90:!1}
method isLowerCaseLetter (line 3353) | static isLowerCaseLetter(e){return e>=97?e<=122:!1}
method isIdentifierStart (line 3353) | static isIdentifierStart(e){return e==Pi.DOLLAR_CODE||e==Pi.UNDERSCORE_C...
method isIdentifierPart (line 3353) | static isIdentifierPart(e){return Pi.isIdentifierStart(e)||Pi.isDecimalD...
method isWhiteSpace (line 3353) | static isWhiteSpace(e){return e==Pi.TAB_CODE||e==Pi.LF_CODE||e==Pi.CR_CO...
method __name__ (line 3353) | static get __name__(){return"haxpression.utils.Chars"}
method __class__ (line 3353) | get __class__(){return Pi}
method toArray (line 3353) | static toArray(e){let n=[],i=e;for(;i.hasNext();){let a=i.next();n.push(...
method __name__ (line 3353) | static get __name__(){return"haxpression.utils.Iterators"}
method __class__ (line 3353) | get __class__(){return D4}
method all (line 3353) | static all(e,n){let i=[],a=0,r=e;for(;a<r.length;){let o=r[a];++a,n(o)&&...
method reduce (line 3353) | static reduce(e,n,i){let a=0;for(;a<e.length;){let r=e[a];++a,i=n(i,r)}r...
method __name__ (line 3353) | static get __name__(){return"haxpression.utils.Arrays"}
method __class__ (line 3353) | get __class__(){return F4}
method [j.new] (line 3353) | [j.new](e,n,i){this.message=e,this.expression=n,this.position=i}
method toString (line 3353) | toString(){let e=this.expression!=null?' in expression: "'+this.expressi...
method __name__ (line 3353) | static get __name__(){return"haxpression.Error"}
method __class__ (line 3353) | get __class__(){return N4}
method fromValueType (line 3353) | static fromValueType(e){return e}
method toValueType (line 3353) | static toValueType(e){return e}
method fromFloat (line 3353) | static fromFloat(e){return Sc.fromValueType(mt.VFloat(e))}
method fromInt (line 3353) | static fromInt(e){return Sc.fromValueType(mt.VInt(e))}
method fromBool (line 3353) | static fromBool(e){return Sc.fromValueType(mt.VBool(e))}
method toFloat (line 3353) | static toFloat(e){switch(e._hx_index){case 0:return e.v;case 1:return e....
method toInt (line 3353) | static toInt(e){switch(e._hx_index){case 0:return e.v|0;case 1:return e....
method toBool (line 3353) | static toBool(e){switch(e._hx_index){case 0:return e.v!=0;case 1:return ...
method isNA (line 3353) | static isNA(e){return e._hx_index==4}
method isNM (line 3353) | static isNM(e){return e._hx_index==5}
method __name__ (line 3353) | static get __name__(){return"haxpression._Value.Value_Impl_"}
method __class__ (line 3353) | get __class__(){return Sc}
method evaluate (line 3353) | static evaluate(e,n){return il.map.inst.get(e).operation(n)}
method addOperator (line 3353) | static addOperator(e,n){let i=il.map,a={operation:il.wrapOperation(n)};i...
method hasOperator (line 3353) | static hasOperator(e){return il.map.inst.has(e)}
method getMaxOperatorLength (line 3353) | static getMaxOperatorLength(){return Cc.reduce(Wf.toArray(Mt.adaptIterat...
method wrapOperation (line 3353) | static wrapOperation(e){return function(n){return se.isNA(n)?se.fromValu...
method __name__ (line 3353) | static get __name__(){return"haxpression.UnaryOperations"}
method __class__ (line 3353) | get __class__(){return il}
method canEvaluateAll (line 3353) | static canEvaluateAll(e){return Cc.all(e,function(n){return bt.canEvalua...
method simplify (line 3353) | static simplify(e){let n=new Array(e.length),i=0,a=e.length;for(;i<a;){l...
method evaluate (line 3353) | static evaluate(e,n){let i=new Array(e.length),a=0,r=e.length;for(;a<r;)...
method __name__ (line 3353) | static get __name__(){return"haxpression.ExpressionTypes"}
method __class__ (line 3353) | get __class__(){return R4}
method addFunction (line 3353) | static addFunction(e,n,i){let a=Aa.map,r={arity:n,operation:Aa.wrapOpera...
method hasFunction (line 3353) | static hasFunction(e){return Aa.map.inst.has(e)}
method getFunction (line 3353) | static getFunction(e){if(!Aa.hasFunction(e))throw ne.thrown(new At("no f...
method getArity (line 3353) | static getArity(e){if(!Aa.hasFunction(e))throw ne.thrown(new At("no func...
method canEvaluate (line 3353) | static canEvaluate(e,n){if(!Aa.hasFunction(e))return!1;let i=Aa.getArity...
method evaluate (line 3353) | static evaluate(e,n){return Aa.getFunction(e)(n)}
method wrapOperation (line 3353) | static wrapOperation(e,n,i){return function(a){if(n>=0&&a.length!=n)thro...
method __name__ (line 3353) | static get __name__(){return"haxpression.CallOperations"}
method __class__ (line 3353) | get __class__(){return Aa}
method evaluate (line 3353) | static evaluate(e,n,i){return is.map.inst.get(e).operation(n,i)}
method addOperator (line 3353) | static addOperator(e,n,i){let a=is.map,r={precedence:n,operation:is.wrap...
method hasOperator (line 3353) | static hasOperator(e){return is.map.inst.has(e)}
method getOperatorPrecedence (line 3353) | static getOperatorPrecedence(e){return is.map.inst.get(e).precedence}
method getMaxOperatorLength (line 3353) | static getMaxOperatorLength(){return Cc.reduce(Wf.toArray(Mt.adaptIterat...
method wrapOperation (line 3353) | static wrapOperation(e){return function(n,i){return se.isNA(n)||se.isNA(...
method __name__ (line 3353) | static get __name__(){return"haxpression.BinaryOperations"}
method __class__ (line 3353) | get __class__(){return is}
method fromExpressionType (line 3353) | static fromExpressionType(e){return e}
method toExpressionType (line 3353) | static toExpressionType(e){return e}
method simplify (line 3353) | static simplify(e){switch(e._hx_index){case 0:let n=e.value;return ze.fr...
method canEvaluate (line 3353) | static canEvaluate(e){switch(e._hx_index){case 0:let n=e.value;return!0;...
method evaluate (line 3353) | static evaluate(e,n){switch(n==null&&(n=new et),e._hx_index){case 0:let ...
method isCompound (line 3353) | static isCompound(e){let n=ze.toExpressionType(e);if(n._hx_index==7){let...
method __name__ (line 3353) | static get __name__(){return"haxpression._Expression.Expression_Impl_"}
method __class__ (line 3353) | get __class__(){return ze}
method [j.new] (line 3353) | [j.new](e){this.inputString=e,this.index=0,this.length=e.length,this.exp...
method internalParse (line 3353) | internalParse(){for(;this.index<this.length;){let e=this.charCodeAt(this...
method charAt (line 3353) | charAt(e){return this.inputString.charAt(e)}
method charCodeAt (line 3353) | charCodeAt(e){return at.cca(this.inputString,e)}
method gobbleSpaces (line 3353) | gobbleSpaces(){let e=this.charCodeAt(this.index);for(;this.index<this.le...
method gobbleExpression (line 3353) | gobbleExpression(){let e=this.gobbleBinaryExpression();if(this.gobbleSpa...
method gobbleBinaryOperator (line 3353) | gobbleBinaryOperator(){this.gobbleSpaces();let e=at.substr(this.inputStr...
method gobbleBinaryExpression (line 3353) | gobbleBinaryExpression(){let e,n,i,a,r,o,l,c=this.gobbleToken(),d=this.g...
method gobbleToken (line 3353) | gobbleToken(){this.gobbleSpaces();let e=this.charCodeAt(this.index);if(n...
method gobbleNumericLiteral (line 3353) | gobbleNumericLiteral(){let e="";for(;this.index<this.length&&nt.isDecima...
method gobbleStringLiteral (line 3353) | gobbleStringLiteral(){let e="",n=this.charAt(this.index++),i=!1;for(;thi...
method gobbleIdentifier (line 3354) | gobbleIdentifier(){let e=this.charCodeAt(this.index),n=this.index;if(nt....
method gobbleArguments (line 3354) | gobbleArguments(e){let n=[],i=!1;for(;this.index<this.length;){this.gobb...
method gobbleVariable (line 3354) | gobbleVariable(){let e=this.charCodeAt(this.index),n;if(e==nt.OPEN_PAREN...
method gobbleGroup (line 3354) | gobbleGroup(){this.index++;let e=this.gobbleExpression();if(this.charCod...
method gobbleArray (line 3354) | gobbleArray(){this.index++;let e=this.gobbleArguments(nt.CLOSE_BRACKET_C...
method parse (line 3354) | static parse(e){return new _v(e).internalParse()}
method __name__ (line 3354) | static get __name__(){return"haxpression.Parser"}
method __class__ (line 3354) | get __class__(){return _v}
method flatten (line 3354) | static flatten(e){switch(e._hx_index){case 0:let n=e.value;return En.FLi...
method organize (line 3354) | static organize(e){switch(e._hx_index){case 0:let n=e.value;switch(n._hx...
method compile (line 3354) | static compile(e,n){let i=0,a=e.length;for(;i<a;){let w=i++;if(e.charAt(...
method render (line 3354) | static render(e,n,i,a,r){let o=[],l=0,c=new Map,d=r.compiler.config.eqCo...
method __name__ (line 3355) | static get __name__(){return"mcl.McMath"}
method __class__ (line 3355) | get __class__(){return gt}
method [j.new] (line 3355) | [j.new](e){this.current=0,this.array=e}
method hasNext (line 3355) | hasNext(){return this.current<this.array.length}
method next (line 3355) | next(){return this.array[this.current++]}
method __name__ (line 3355) | static get __name__(){return"haxe.iterators.ArrayIterator"}
method __class__ (line 3355) | get __class__(){return B4}
method [j.new] (line 3355) | [j.new](){super[j.new]()}
method __name__ (line 3355) | static get __name__(){return"haxe.ds.ObjectMap"}
method __interfaces__ (line 3355) | static get __interfaces__(){return[nl]}
method __super__ (line 3355) | static get __super__(){return Mt}
method __class__ (line 3355) | get __class__(){return P4}
method field (line 3355) | static field(e,n){try{return e[n]}catch{return null}}
method getProperty (line 3355) | static getProperty(e,n){let i;if(e==null)return null;{let a;return e.__p...
method fields (line 3355) | static fields(e){let n=[];if(e!=null){let a=Object.prototype.hasOwnPrope...
method isFunction (line 3355) | static isFunction(e){return typeof e=="function"?!(e.__name__||e.__ename...
method isObject (line 3355) | static isObject(e){if(e==null)return!1;let n=typeof e;return n=="string"...
method __name__ (line 3355) | static get __name__(){return"Reflect"}
method __class__ (line 3355) | get __class__(){return L4}
method createInstance (line 3355) | static createInstance(e,n){let i=Function.prototype.bind.apply(e,[null]....
method createEnum (line 3355) | static createEnum(e,n,i){let a=sn.field(e,n);if(a==null)throw ne.thrown(...
method typeof (line 3355) | static typeof(e){switch(typeof e){case"boolean":return ft.TBool;case"fun...
method enumEq (line 3355) | static enumEq(e,n){if(e==n)return!0;try{let i=e.__enum__;if(i==null||i!=...
method __name__ (line 3355) | static get __name__(){return"Type"}
method __class__ (line 3355) | get __class__(){return xv}
method [j.new] (line 3355) | [j.new](e,n){this.min=e,this.max=n,this.current=e,this.offset=e<n?1:-1}
method hasNext (line 3355) | hasNext(){return this.offset==1?this.current<=this.max:this.current>=thi...
method next (line 3355) | next(){let e=this.current;if(!this.hasNext())throw ne.thrown("No such el...
method __name__ (line 3355) | static get __name__(){return"mcl.McIntIterator"}
method __class__ (line 3355) | get __class__(){return V4}
method [j.new] (line 3355) | [j.new](e,n,i){if(this.min=e,this.max=n,this.current=e,this.offset=i,i<0...
method hasNext (line 3355) | hasNext(){return this.offset>0?this.current<=this.max:this.current>=this...
method next (line 3355) | next(){let e=this.current;if(!this.hasNext())throw ne.thrown("No such el...
method __name__ (line 3355) | static get __name__(){return"mcl.McFloatIterator"}
method __class__ (line 3355) | get __class__(){return z4}
method set (line 3355) | static set(e,n){Dc.map.inst.set(e,n)}
method get (line 3355) | static get(e){return Dc.map.inst.get(e)}
method has (line 3355) | static has(e){return Dc.map.inst.has(e)}
method delete (line 3355) | static delete(e){return Dc.map.inst.delete(e)}
method __name__ (line 3355) | static get __name__(){return"mcl.Globals"}
method __class__ (line 3355) | get __class__(){return Dc}
method [j.new] (line 3355) | [j.new](){super[j.new]()}
method __name__ (line 3355) | static get __name__(){return"haxe.ds.IntMap"}
method __interfaces__ (line 3355) | static get __interfaces__(){return[nl]}
method __super__ (line 3355) | static get __super__(){return Mt}
method __class__ (line 3355) | get __class__(){return U4}
method [j.new] (line 3355) | [j.new](){this.useFolderRenames48=!1}
method apply (line 3355) | apply(e,n){let i=[],a=Kf.flags,r=a,o=a.keys();for(;o.hasNext();){let d=o...
method __name__ (line 3355) | static get __name__(){return"mcl.FeatureFlags"}
method __class__ (line 3355) | get __class__(){return Kf}
method log (line 3355) | static log(e){if(Za.enabled){let n=Za.prefix+Za.chalk.white(e);process.s...
method error (line 3356) | static error(e){if(Za.enabled){let n=Za.prefix+Za.chalk.redBright(e);pro...
method warn (line 3357) | static warn(e){if(Za.enabled){let n=Za.prefix+Za.chalk.yellow(e);process...
method __name__ (line 3358) | static get __name__(){return"mcb.Logger"}
method __class__ (line 3358) | get __class__(){return Za}
method exists (line 3358) | static exists(e){try{return Vi.accessSync(e),!0}catch{return!1}}
method isDirectory (line 3358) | static isDirectory(e){try{return Vi.statSync(e).isDirectory()}catch{retu...
method createDirectory (line 3358) | static createDirectory(e){try{Vi.mkdirSync(e)}catch(n){let i=ne.caught(n...
method deleteDirectory (line 3358) | static deleteDirectory(e){if(Pc.exists(e)){let n=0,i=Vi.readdirSync(e);f...
method __name__ (line 3358) | static get __name__(){return"sys.FileSystem"}
method __class__ (line 3358) | get __class__(){return Pc}
method [j.new] (line 3358) | [j.new](e){this.length=e.byteLength,this.b=new Uint8Array(e),this.b.buff...
method getString (line 3358) | getString(e,n,i){if(e<0||n<0||e+n>this.length)throw ne.thrown(Qa.Outside...
method toString (line 3358) | toString(){return this.getString(0,this.length)}
method ofString (line 3358) | static ofString(e,n){if(n==$a.RawNative){let r=new Uint8Array(e.length<<...
method ofData (line 3358) | static ofData(e){let n=e.hxBytes;return n??new zd(e)}
method __name__ (line 3358) | static get __name__(){return"haxe.io.Bytes"}
method __class__ (line 3358) | get __class__(){return zd}
method bytesOfBuffer (line 3358) | static bytesOfBuffer(e){let n=Object.create(Oi.prototype);return n.lengt...
method __name__ (line 3358) | static get __name__(){return"js.node.buffer._Buffer.Helper"}
method __class__ (line 3358) | get __class__(){return jC}
method [j.new] (line 3358) | [j.new](){}
method doEncode (line 3358) | doEncode(e){let n=new Array,i=1732584193,a=-271733879,r=-1732584194,o=27...
method ft (line 3358) | ft(e,n,i,a){return e<20?n&i|~n&a:e<40?n^i^a:e<60?n&i|n&a|i&a:n^i^a}
method kt (line 3358) | kt(e){return e<20?1518500249:e<40?1859775393:e<60?-1894007588:-899497514}
method hex (line 3358) | hex(e){let n="",i=0;for(;i<e.length;){let a=e[i];++i,n+=Et.hex(a,8)}retu...
method encode (line 3358) | static encode(e){let n=new ih,i=n.doEncode(ih.str2blks(e));return n.hex(i)}
method str2blks (line 3358) | static str2blks(e){let n=Oi.ofString(e),i=(n.length+8>>6)+1,a=new Array,...
method __name__ (line 3358) | static get __name__(){return"haxe.crypto.Sha1"}
method __class__ (line 3358) | get __class__(){return ih}
method [j.new] (line 3358) | [j.new](e){let n=e.length,i=1;for(;n>1<<i;)++i;if(i>8||n!=1<<i)throw ne....
method initTable (line 3358) | initTable(){let e=new Array,n=0;for(;n<256;){let r=n++;e[r]=-1}let i=0,a...
method decodeBytes (line 3358) | decodeBytes(e){let n=this.nbits,i=this.base;this.tbl==null&&this.initTab...
method __name__ (line 3358) | static get __name__(){return"haxe.crypto.BaseCode"}
method __class__ (line 3358) | get __class__(){return AC}
method decode (line 3358) | static decode(e,n){if(n==null&&(n=!0),n)for(;at.cca(e,e.length-1)==61;)e...
method __name__ (line 3358) | static get __name__(){return"haxe.crypto.Base64"}
method __class__ (line 3358) | get __class__(){return Sv}
method getString (line 3358) | static getString(e){let n=0,i=Ov.content;for(;n<i.length;){let a=i[n];if...
method __name__ (line 3358) | static get __name__(){return"haxe.Resource"}
method __class__ (line 3358) | get __class__(){return Ov}
method [j.new] (line 3358) | [j.new](){this.filesTracked=new et}
method track (line 3358) | track(e){if(xn.exists(e)){let n=this.filesTracked,i=kC.bytesOfBuffer(al....
method revert (line 3358) | revert(){let e=this.filesTracked,n=e,i=e.keys();for(;i.hasNext();){let a...
method __name__ (line 3358) | static get __name__(){return"RevertTracker"}
method __class__ (line 3358) | get __class__(){return TC}
method [j.new] (line 3358) | [j.new](){this.existingDirectories=new et,this.revertMap=new Dv,this.fil...
method reportFilesRemoved (line 3358) | reportFilesRemoved(e){let n=[],i=Mt.adaptIterator(e.inst.keys());for(;i....
method reportFilesAdded (line 3358) | reportFilesAdded(e){let n=[],i=Mt.adaptIterator(this.fileData.inst.keys(...
method reportFilesChanged (line 3358) | reportFilesChanged(e){let n=[],i=Mt.adaptIterator(this.fileData.inst.key...
method reportFileMetadata (line 3358) | reportFileMetadata(){return this.fileData}
method write (line 3358) | write(e,n){let i=this.fileData,a=Cv.encode(n);i.inst.set(e,a),this.rever...
method cleanup (line 3358) | cleanup(){}
method finished (line 3358) | finished(){return!0}
method __name__ (line 3358) | static get __name__(){return"SyncIo"}
method __interfaces__ (line 3358) | static get __interfaces__(){return[ah]}
method __class__ (line 3358) | get __class__(){return CC}
method [j.new] (line 3358) | [j.new](){this.terminated=!1,this.pending=!1,this.done=!1,this.fileData=...
method reportFilesRemoved (line 3358) | reportFilesRemoved(e){let n=[],i=Mt.adaptIterator(e.inst.keys());for(;i....
method reportFilesAdded (line 3358) | reportFilesAdded(e){let n=[],i=Mt.adaptIterator(this.fileData.inst.keys(...
method reportFilesChanged (line 3358) | reportFilesChanged(e){let n=[],i=Mt.adaptIterator(this.fileData.inst.key...
method reportFileMetadata (line 3358) | reportFileMetadata(){return this.fileData}
method log (line 3358) | log(e){this.enableLog&&console.log("src/Io.hx:153:","[ThreadedIo | "+pro...
method flush (line 3358) | flush(){if(this.log("flush"),this.queue.length==0){this.done?(this.log("...
method write (line 3358) | write(e,n){let i=this.fileData,a=Cv.encode(n);if(i.inst.set(e,a),this.lo...
method cleanup (line 3358) | cleanup(){this.log("cleanup"),this.done=!0,this.pending||this.flush()}
method finished (line 3358) | finished(){return this.terminated}
method __name__ (line 3358) | static get __name__(){return"ThreadedIo"}
method __interfaces__ (line 3358) | static get __interfaces__(){return[ah]}
method __class__ (line 3358) | get __class__(){return SC}
method [j.new] (line 3358) | [j.new](e){if(this.fileData=new et,this.idx=0,this.threads=[],e&e-1)thro...
method reportFilesRemoved (line 3358) | reportFilesRemoved(e){let n=[],i=this.reportFileMetadata(),a=Mt.adaptIte...
method reportFilesAdded (line 3358) | reportFilesAdded(e){let n=this.reportFileMetadata(),i=[],a=Mt.adaptItera...
method reportFilesChanged (line 3358) | reportFilesChanged(e){let n=this.reportFileMetadata(),i=[],a=Mt.adaptIte...
method reportFileMetadata (line 3358) | reportFileMetadata(){let e=0,n=this.threads;for(;e<n.length;){let i=n[e]...
method cleanup (line 3358) | cleanup(){let e=0,n=this.threads;for(;e<n.length;){let i=n[e];++e,i.clea...
method write (line 3358) | write(e,n){this.threads[this.idx++&this.mask].write(e,n)}
method finished (line 3358) | finished(){let e=0,n=this.threads;for(;e<n.length;){let i=n[e];if(++e,!i...
method isPowerOfTwo (line 3358) | static isPowerOfTwo(e){return(e&e-1)==0}
method __name__ (line 3358) | static get __name__(){return"MultiThreadIo"}
method __interfaces__ (line 3358) | static get __interfaces__(){return[ah]}
method __class__ (line 3358) | get __class__(){return OC}
method [j.new] (line 3358) | [j.new](){this._subscribers=new Array}
method subscribe (line 3358) | subscribe(e){this._subscribers.push(e)}
method dispatch (line 3358) | dispatch(e){if(this._subscribers.length==0)return Promise.resolve();let ...
method __name__ (line 3358) | static get __name__(){return"mcl.EventDispatcher"}
method __class__ (line 3358) | get __class__(){return DC}
method [j.new] (line 3358) | [j.new](){this.onPostBuild=new Fv,this.onPreBuild=new Fv}
method __name__ (line 3358) | static get __name__(){return"mcl.ConfigEvents"}
method __class__ (line 3358) | get __class__(){return FC}
method lock (line 3358) | static lock(e){Object.freeze(e);let n=0,i=sn.fields(e);for(;n<i.length;)...
method __name__ (line 3358) | static get __name__(){return"mcl._Config.ConfigUtil"}
method __class__ (line 3358) | get __class__(){return Nv}
method [j.new] (line 3358) | [j.new](){this.header=`# Generated with MC-Build
method create (line 3359) | static create(e){Vbe.lock(e);let n=new Rv;if(e.libDir!=null&&(n.libDir=e...
method mergeFeatureFlagsToConfig (line 3359) | static mergeFeatureFlagsToConfig(e){}
method __name__ (line 3359) | static get __name__(){return"mcl.Config"}
method __class__ (line 3359) | get __class__(){return Rv}
method format (line 3359) | static format(e,n){return""+n.file+":"+n.line+":"+(n.col+1)+": "+e}
method formatWithStack (line 3359) | static formatWithStack(e,n){let i=e,a=0;for(;a<n.length;){let r=n[a];++a...
method formatContext (line 3361) | static formatContext(e,n,i){return Pv.formatWithStack(e,i.stack.concat([...
method __name__ (line 3361) | static get __name__(){return"mcl.ErrorUtil"}
method __class__ (line 3361) | get __class__(){return Pv}
method [j.new] (line 3361) | [j.new](){this.uid=0}
method get (line 3361) | get(){return this.uid++}
method __name__ (line 3361) | static get __name__(){return"mcl._Compiler.UidTracker"}
method __class__ (line 3361) | get __class__(){return NC}
method [j.new] (line 3361) | [j.new](e,n,i){this.jsValueCache=new Fc,this.hasBeenUsed=!1,this.tickBlo...
method compileArgs (line 3361) | compileArgs(e,n){let i=[],a=e.split(" "),r=0,o=0;for(;o<a.length;){let l...
method parse (line 3361) | parse(e){let n=0;for(;n<e.length;){let i=e[n];switch(++n,i._hx_index){ca...
method inject (line 3361) | inject(e,n){this.hasBeenUsed=!0;let i=[];if(this.loadBlock!=null&&this.l...
method injectTransform (line 3361) | injectTransform(e,n){this.hasBeenUsed=!0;let i=[];if(this.loadBlock!=nul...
method process (line 3361) | process(e,n,i,a,r){let o=Et.ltrim(a.substring(this.name.length));this.js...
method transform (line 3361) | transform(e,n,i,a,r){let o=Et.ltrim(a.substring(this.name.length));this....
method __name__ (line 3361) | static get __name__(){return"mcl.McTemplate"}
method __class__ (line 3361) | get __class__(){return RC}
method [j.new] (line 3361) | [j.new](e,n){this.parent=e,this.variables=n??new et}
method get (line 3361) | get(){if(this._cache!=null){let r=new et,o=this._cache,l=o,c=o.keys();fo...
method fromObject (line 3361) | static fromObject(e){let n=new et,i=0,a=sn.fields(e);for(;i<a.length;){l...
method __name__ (line 3361) | static get __name__(){return"mcl.VariableMap"}
method __class__ (line 3361) | get __class__(){return Lv}
method [j.new] (line 3361) | [j.new](e,n){this.tagsDir="tags",this.functionsDir="functions",this.file...
method getTemplates (line 3361) | getTemplates(){if(this.ext=="mcbt")return this.exportedTemplates;throw n...
method setup (line 3361) | setup(e){e.config.features.useFolderRenames48&&(this.functionsDir="funct...
method createAnonymousFunction (line 3361) | createAnonymousFunction(e,n,i,a,r,o){r=r!=null?this.injectValues(r,a,e):...
method embedTransform (line 3363) | embedTransform(e,n,i,a,r){r==null&&(r=!1);let o=e.namespace,l=e.append,c...
method embed (line 3363) | embed(e,n,i,a,r){r==null&&(r=!1);let o=e.namespace,l=e.append,c=e.global...
method transformTemplate (line 3363) | transformTemplate(e,n,i,a,r){if(e.compiler.templateParsingEnabled){i.sta...
method processTemplate (line 3363) | processTemplate(e,n,i,a,r){if(e.compiler.templateParsingEnabled){i.start...
method compileInline (line 3363) | compileInline(e,n,i){i==null&&(i=!1);let a=Zn.tokenize(n,"<inline "+this...
method transformInline (line 3363) | transformInline(e,n,i){i==null&&(i=!1);let a=Zn.tokenize(n,"<inline "+th...
method processMlScript (line 3363) | processMlScript(e,n,i,a){a==null&&(a=!1);let r="",o=0;for(;o<i.length;){...
method processMlScriptTransform (line 3366) | processMlScriptTransform(e,n,i,a){a==null&&(a=!1);let r="",o=0;for(;o<i....
method transformCommand (line 3367) | transformCommand(e,n){let i=this;switch(e._hx_index){case 0:let a=e.pos,...
method evaluateFunctionHandle (line 3367) | evaluateFunctionHandle(e,n,i,a){let r=this.injectValues(e,n,i),o=r.charA...
method compileCommand (line 3367) | compileCommand(e,n){let i=this;switch(e._hx_index){case 0:let a=e.pos,r=...
method compileFunction (line 3375) | compileFunction(e,n,i,a,r){n=this.injectValues(n,r,e);let o=[],l=s(funct...
method compileDirectory (line 3377) | compileDirectory(e,n,i,a){n=this.injectValues(n,a,e);let r=a.namespace,o...
method transformTld (line 3377) | transformTld(e,n){let i=this;switch(e._hx_index){case 1:let a=e.pos,r=e....
method compileTld (line 3377) | compileTld(e,n){let i=this;switch(e._hx_index){case 1:let a=e.pos,r=e.na...
method compileJsonFileImpl (line 3379) | compileJsonFileImpl(e,n,i,a,r){let o="{"+this.stringifyJsonTag(e,n,a,r)+...
method compileJsonFile (line 3380) | compileJsonFile(e,n,i,a){switch(i._hx_index){case 0:let r=i.subType,o=i....
method processCompilerLoop (line 3382) | processCompilerLoop(e,n,i,a,r,o){let c=rl.invokeExpressionInline(e,i,r);...
method stringifyJsonTag (line 3382) | stringifyJsonTag(e,n,i,a){n=this.injectValues(n,a,e);let r=[],o=a.path,l...
method injectValues (line 3382) | injectValues(e,n,i){if(e==null)return"";if(e.indexOf("<%")==-1)return e;...
method transformCompileTimeIf (line 3382) | transformCompileTimeIf(e,n,i,a,r,o,l){if(l==null&&(l=!1),rl.invokeExpres...
method compileTimeIf (line 3382) | compileTimeIf(e,n,i,a,r,o,l){if(l==null&&(l=!1),rl.invokeExpressionInlin...
method transform (line 3382) | transform(e,n){let i=n.getInitialPathInfo(this.name),a=new et,r=0,o=sn.f...
method compile (line 3382) | compile(e,n){let i=n.getInitialPathInfo(this.name),a=new et,r=0,o=sn.fie...
method invokeExpressionInline (line 3386) | static invokeExpressionInline(e,n,i){let a=n.variables.get(),r=["context...
method __name__ (line 3386) | static get __name__(){return"mcl.McFile"}
method __class__ (line 3386) | get __class__(){return rl}
method [j.new] (line 3386) | [j.new](e,n,i){this.topLevelAstNodes=new Array,this.success=!0,this.temp...
method addFile (line 3386) | addFile(e,n){let i=new ei(e,n);this.files.inst.set(e,i)}
method resolve (line 3386) | resolve(e,n){if(n.charAt(0)=="."||n.charAt(0)=="/"){let i;n.charAt(0)=="...
method getInitialPathInfo (line 3386) | getInitialPathInfo(e){let n=(e.startsWith(this.baseDir)?e.substring(this...
method compile (line 3386) | compile(e){this.success=!0;try{let n=Mt.adaptIterator(this.files.inst.va...
method transform (line 3386) | transform(e){let n=new Map,i=Mt.adaptIterator(this.files.inst.values());...
method addTopLevelAstNode (line 3386) | addTopLevelAstNode(e){this.topLevelAstNodes.push(e)}
method __name__ (line 3386) | static get __name__(){return"mcl.Compiler"}
method __class__ (line 3386) | get __class__(){return MC}
method [j.new] (line 3386) | [j.new](e,n){super[j.new](e,n),this.expectJsValue=!0}
method parseValue (line 3386) | parseValue(e,n,i){if(e.startsWith("<%")){let a=e.indexOf("%>");if(a==-1)...
method register (line 3386) | static register(){dt.register("js",Vv)}
method __name__ (line 3386) | static get __name__(){return"mcl.args.JsTemplateArgument"}
method __super__ (line 3386) | static get __super__(){return dt}
method __class__ (line 3386) | get __class__(){return Vv}
method [j.new] (line 3386) | [j.new](e,n){this.value=n,super[j.new](null,e)}
method parseValue (line 3386) | parseValue(e,n,i){return e==this.value||e.startsWith(this.value+" ")?{su...
method register (line 3386) | static register(){dt.register("literal",oh)}
method __name__ (line 3386) | static get __name__(){return"mcl.args.LiteralTemplateArgument"}
method __super__ (line 3386) | static get __super__(){return dt}
method __class__ (line 3386) | get __class__(){return BC}
method [j.new] (line 3386) | [j.new](e,n){this.expectJsValue=!1,this.expectBlock=!1,this.name=e,this....
method parseValue (line 3386) | parseValue(e,n,i){throw ne.thrown("override this method in subclass, plz...
method parseValueBlock (line 3386) | parseValueBlock(e,n,i){throw ne.thrown("override this method in subclass...
method parse (line 3386) | static parse(e,n){let i=e.indexOf(":"),a=i==-1?"literal":e.substring(i+1...
method register (line 3386) | static register(e,n){if(Lc.argumentTypes.inst.has(e))throw ne.thrown("Te...
method __name__ (line 3386) | static get __name__(){return"mcl.args.TemplateArgument"}
method __class__ (line 3386) | get __class__(){return Lc}
method [j.new] (line 3386) | [j.new](e,n){super[j.new](e,n)}
method parseValue (line 3386) | parseValue(e,n,i){if(e=="")return{success:!1};let a=e.indexOf(" "),r=a==...
method register (line 3386) | static register(){dt.register("word",Uv)}
method __name__ (line 3386) | static get __name__(){return"mcl.args.WordTemplateArgument"}
method __super__ (line 3386) | static get __super__(){return dt}
method __class__ (line 3386) | get __class__(){return Uv}
method [j.new] (line 3386) | [j.new](e,n){super[j.new](e,n)}
method parseValue (line 3386) | parseValue(e,n,i){return{success:!0,value:e,raw:e}}
method register (line 3386) | static register(){dt.register("raw",qv)}
method __name__ (line 3386) | static get __name__(){return"mcl.args.RawTemplateArgument"}
method __super__ (line 3386) | static get __super__(){return dt}
method __class__ (line 3386) | get __class__(){return qv}
method [j.new] (line 3386) | [j.new](e,n){super[j.new](e,n)}
method parseValue (line 3386) | parseValue(e,n,i){let a=e.indexOf(" ");a!=-1&&(e=e.substring(0,a));let r...
method register (line 3386) | static register(){dt.register("int",Hv)}
method __name__ (line 3386) | static get __name__(){return"mcl.args.IntTemplateArgument"}
method __super__ (line 3386) | static get __super__(){return dt}
method __class__ (line 3386) | get __class__(){return Hv}
method [j.new] (line 3386) | [j.new](e,n){super[j.new](e,n)}
method parseValue (line 3386) | parseValue(e,n,i){let a=e.indexOf(" ");a!=-1&&(e=e.substring(0,a));let r...
method register (line 3386) | static register(){dt.register("float",Jv)}
method __name__ (line 3386) | static get __name__(){return"mcl.args.FloatTemplateArgument"}
method __super__ (line 3386) | static get __super__(){return dt}
method __class__ (line 3386) | get __class__(){return Jv}
method [j.new] (line 3386) | [j.new](e,n){this.node=e,this.ctx=n}
method appendAstNode (line 3386) | appendAstNode(e){let n=this.node;if(n._hx_index==8){let i=n.pos,a=n.name...
method append (line 3386) | append(e){let n=Zn.tokenize(e,"<inline BoundBlock.append>"),i=new ko(n);...
method setName (line 3386) | setName(e){let n=this.node;if(n._hx_index==8){let i=n.name,a=n.pos,r=n.b...
method embedTo (line 3386) | embedTo(e,n,i,a){a==null&&(a=!0);let r=[],o={isTemplate:!1,uidIndex:e.ui...
method __name__ (line 3387) | static get __name__(){return"mcl.args.BoundBlock"}
method __class__ (line 3387) | get __class__(){return UC}
method [j.new] (line 3387) | [j.new](e,n){super[j.new](e,n),this.expectBlock=!0}
method parseValueBlock (line 3387) | parseValueBlock(e,n,i){if(e._hx_index==8){let a=e.pos,r=e.name,o=e.body,...
method register (line 3387) | static register(){dt.register("block",Gv)}
method __name__ (line 3387) | static get __name__(){return"mcl.args.BlockTemplateArgument"}
method __super__ (line 3387) | static get __super__(){return dt}
method __class__ (line 3387) | get __class__(){return Gv}
method register (line 3387) | static register(){LC.register(),VC.register(),oh.register(),qC.register(...
method __name__ (line 3387) | static get __name__(){return"mcl.TemplateRegisterer"}
method __class__ (line 3387) | get __class__(){return HC}
method main (line 3387) | static main(){sh.register()}
method createCompiler (line 3387) | static createCompiler(e,n,i){return new Fn(e,n,i)}
method parseFile (line 3387) | static parseFile(e,n){let i=Ze.extension(e),a=Zn.tokenize(n,e);if(i=="mc...
method addFileToCompiler (line 3387) | static addFileToCompiler(e,n){let i=Ze.extension(n),a=Zn.tokenize(JC.rea...
method compileFromFsLikeMap (line 3387) | static compileFromFsLikeMap(e,n,i){let a=Kv.createCompiler(e,{},null),r=...
method createIoProvider (line 3387) | static createIoProvider(e){switch(e){case 0:return new zi;case 1:return ...
method __name__ (line 3387) | static get __name__(){return"LibMain"}
method __class__ (line 3387) | get __class__(){return Kv}
method [j.new] (line 3387) | [j.new](){this.tabs=[""],this.indent=0,this.segments=[]}
method tab (line 3387) | tab(){let e;if(this.tabs.length>this.indent)e=this.tabs[this.indent];els...
method inc (line 3387) | inc(){this.indent++}
method dec (line 3387) | dec(){this.indent--}
method literal (line 3387) | literal(e){this.segments.push(e)}
method write (line 3387) | write(e,n,i){switch(n==null&&(n=!0),i==null&&(i=!1),!n&&this.segments[th...
method toString (line 3419) | toString(e){return this.write(e),this.segments.join("")}
method stringify (line 3419) | static stringify(e){return new Xv().toString(e)}
method __name__ (line 3419) | static get __name__(){return"mcl.AstStringifier"}
method __class__ (line 3419) | get __class__(){return Xv}
method [j.new] (line 3419) | [j.new](e){super[j.new](`Library Error:
method __name__ (line 3420) | static get __name__(){return"mcl.error.LibraryError"}
method __super__ (line 3420) | static get __super__(){return Ci}
method __class__ (line 3420) | get __class__(){return GC}
method [j.new] (line 3420) | [j.new](e){this.loadedLibs=new et,this.libDir=e}
method lookup (line 3420) | lookup(e,n,i){if(this.loadedLibs.inst.has(e))return this.loadedLibs.inst...
method getFilesInDirectory (line 3420) | getFilesInDirectory(e){let n=ch.readdirSync(e),i=[],a=0;for(;a<n.length;...
method loadLib (line 3420) | loadLib(e,n,i,a){let r=Ze.join([n,"src","mcblib"]),o=Ze.join([n,"src"]);...
method __name__ (line 3420) | static get __name__(){return"mcl.LibStore"}
method __class__ (line 3420) | get __class__(){return WC}
method [j.new] (line 3420) | [j.new](e){this.url=e,this.headers=[],this.params=[],this.emptyOnData=j....
method responseData (line 3420) | get responseData(){return this.get_responseData()}
method onData (line 3420) | onData(e){}
method onBytes (line 3420) | onBytes(e){}
method onError (line 3420) | onError(e){}
method onStatus (line 3420) | onStatus(e){}
method hasOnData (line 3420) | hasOnData(){return j.bind(this,this.onData)!=this.emptyOnData}
method success (line 3420) | success(e){this.responseBytes=e,this.responseAsString=null,this.hasOnDat...
method get_responseData (line 3420) | get_responseData(){return this.responseAsString==null&&this.responseByte...
method __name__ (line 3420) | static get __name__(){return"haxe.http.HttpBase"}
method __class__ (line 3420) | get __class__(){return KC}
method [j.new] (line 3420) | [j.new](e){super[j.new](e)}
method request (line 3420) | request(e){this.responseAsString=null,this.responseBytes=null,this.respo...
method __name__ (line 3420) | static get __name__(){return"haxe.http.HttpNodeJs"}
method __super__ (line 3420) | static get __super__(){return er}
method __class__ (line 3420) | get __class__(){return QC}
method [j.new] (line 3420) | [j.new](){this.length=0}
method add (line 3420) | add(e){let n=new dh(e,null);this.h==null?this.h=n:this.q.next=n,this.q=n...
method push (line 3420) | push(e){let n=new dh(e,this.h);this.h=n,this.q==null&&(this.q=n),this.le...
method first (line 3420) | first(){return this.h==null?null:this.h.item}
method pop (line 3420) | pop(){if(this.h==null)return null;let e=this.h.item;return this.h=this.h...
method isEmpty (line 3420) | isEmpty(){return this.h==null}
method toString (line 3420) | toString(){let e="",n=!0,i=this.h;for(e+="{";i!=null;)n?n=!1:e+=", ",e+=...
method __name__ (line 3420) | static get __name__(){return"haxe.ds.List"}
method __class__ (line 3420) | get __class__(){return $C}
method [j.new] (line 3420) | [j.new](e,n){this.item=e,this.next=n}
method __name__ (line 3420) | static get __name__(){return"haxe.ds._List.ListNode"}
method __class__ (line 3420) | get __class__(){return eS}
method [j.new] (line 3420) | [j.new](){}
method resolveClass (line 3420) | resolveClass(e){return j.global("$hxClasses")[e]}
method resolveEnum (line 3420) | resolveEnum(e){return j.global("$hxEnums")[e]}
method __name__ (line 3420) | static get __name__(){return"haxe._Unserializer.DefaultResolver"}
method __class__ (line 3420) | get __class__(){return nS}
method [j.new] (line 3420) | [j.new](e){this.buf=e,this.length=this.buf.length,this.pos=0,this.scache...
method readDigits (line 3420) | readDigits(){let e=0,n=!1,i=this.pos;for(;;){let a=this.buf.charCodeAt(t...
method readFloat (line 3420) | readFloat(){let e=this.pos;for(;;){let n=this.buf.charCodeAt(this.pos);i...
method unserializeObject (line 3420) | unserializeObject(e){for(;;){if(this.pos>=this.length)throw ne.thrown("I...
method unserializeEnum (line 3420) | unserializeEnum(e,n){if(this.buf.charCodeAt(this.pos++)!=58)throw ne.thr...
method unserialize (line 3420) | unserialize(){switch(this.buf.charCodeAt(this.pos++)){case 65:let e=this...
method initCodes (line 3420) | static initCodes(){let e=new Array,n=0,i=Ao.BASE64.length;for(;n<i;){let...
method __name__ (line 3420) | static get __name__(){return"haxe.Unserializer"}
method __class__ (line 3420) | get __class__(){return Ao}
method [j.new] (line 3420) | [j.new](){this.b=""}
method __name__ (line 3420) | static get __name__(){return"StringBuf"}
method __class__ (line 3420) | get __class__(){return iS}
method [j.new] (line 3420) | [j.new](e){let n=this.parseTokens(e);if(this.expr=this.parseBlock(n),!n....
method execute (line 3420) | execute(e,n){return this.macros=n??{},this.context=e,this.stack=new tr,t...
method resolve (line 3420) | resolve(e){if(e=="__current__")return this.context;if(sn.isObject(this.c...
method parseTokens (line 3420) | parseTokens(e){let n=new tr;for(;ti.splitter.match(e);){let i=ti.splitte...
method parseBlock (line 3420) | parseBlock(e){let n=new tr;for(;;){let i=e.first();if(i==null||!i.s&&(i....
method parse (line 3420) | parse(e){let n=e.pop(),i=n.p;if(n.s)return bi.OpStr(i);if(n.l!=null){let...
method parseExpr (line 3420) | parseExpr(e){let n=new tr,i=e;for(;ti.expr_splitter.match(e);){let r=ti....
method makeConst (line 3420) | makeConst(e){if(ti.expr_trim.match(e),e=ti.expr_trim.matched(1),at.cca(e...
method makePath (line 3420) | makePath(e,n){let i=n.first();if(i==null||i.p!=".")return e;n.pop();let ...
method makeExpr (line 3420) | makeExpr(e){return this.makePath(this.makeExpr2(e),e)}
method skipSpaces (line 3420) | skipSpaces(e){let n=e.first();for(;n!=null;){let i=0,a=n.p;for(;i<a.leng...
method makeExpr2 (line 3420) | makeExpr2(e){this.skipSpaces(e);let n=e.pop();if(this.skipSpaces(e),n==n...
method run (line 3420) | run(e){switch(e._hx_index){case 0:let n=e.v,i=this.buf,a=Ge.string(this....
method __name__ (line 3420) | static get __name__(){return"haxe.Template"}
method __class__ (line 3420) | get __class__(){return ti}
method loadDebugProject (line 3422) | static loadDebugProject(e,n){let i=new nr(en.readFileSync(e,{encoding:"u...
method discoverConfigFile (line 3422) | static discoverConfigFile(e){return xn.exists(e+".cjs")?e+".cjs":xn.exis...
method getFilesInDirectory (line 3422) | static getFilesInDirectory(e){let n=en.readdirSync(e),i=[],a=0;for(;a<n....
method create (line 3422) | static create(e){let n=Ze.join([Ze.directory(__filename),"template"]),i=...
method compile (line 3422) | static compile(e,n){$n.log("Started build at "+at.dateStr(new Date));let...
method doBuild (line 3422) | static doBuild(e){sh.register(),zr.watch=e.watch;let n=Ze.join([e.baseDi...
method generate (line 3424) | static generate(e,n){let i=zr.discoverConfigFile(n.configPath),a;if(en.e...
method __name__ (line 3424) | static get __name__(){return"mcb.AppMain"}
method __class__ (line 3424) | get __class__(){return zr}
function aS (line 3424) | function aS({sourceFiles:t,destPath:e,variables:n,version:i,exportedFile...
function sS (line 3455) | function sS(t,e){let n=[],i=[];function a(o){o.parent==="root"||o.parent...
function Hbe (line 3455) | async function Hbe(t,e,n){let i=Project.animated_java,a=new Tn,r=new ot;...
function Jbe (line 3455) | async function Jbe(t,e){Dn.set("Creating Animation Storage..."),Pt.set(0...
function Gbe (line 3455) | function Gbe(t,e){return t.type==="locator"&&e.type!=="locator"?1:t.type...
function Gd (line 3455) | async function Gd(t,e){console.time("Data Pack Compilation took");let n=...
function Wbe (line 3455) | async function Wbe(t){console.time("Removing Files took");let e=Project....
function Ybe (line 3455) | async function Ybe(t,e){Dn.set("Writing Data Pack..."),Pt.set(0),Bi.set(...
method setOverride (line 3455) | setOverride(e,n){this.overrides.set(e,n)}
method addOverride (line 3455) | addOverride(e){let n=this.lastOverrideId;for(;this.overrides.has(n)||thi...
method assertOverride (line 3455) | assertOverride(e,n){this.overrides.has(e)||this.externalOverrides.has(e)...
method readExisting (line 3455) | readExisting(e){let n=Project.animated_java,i;try{i=JSON.parse(fs.readFi...
method toJSON (line 3455) | toJSON(){let[e,n]=Project.animated_java.display_item.split(":"),i=Projec...
function uS (line 3455) | function uS(t){return{model:{type:"minecraft:model",model:t.resource_loc...
function $be (line 3455) | function $be(t,e,n){let i={model:{type:"minecraft:select",property:"mine...
function Yd (line 3455) | async function Yd(t,e){let n=Project.animated_java,i=new Ur(PathModule.j...
function tye (line 3455) | function tye(t,e,n){if(!t.export)return;let i={};if(i.from=t.from.slice(...
function pS (line 3455) | function pS(t,e){if(Xd.has(t.uuid))return Xd.get(t.uuid);let n=t.name.re...
function _h (line 3455) | function _h(t){let e=new THREE.Box3;if(t instanceof Group){let n=t.child...
function mS (line 3455) | function mS(t,e,n){if(!t.export)return;let i=t.parent instanceof Group?t...
function fS (line 3455) | function fS(t,e){if(!t.export)return;let n=t.parent instanceof Group?t.p...
function hS (line 3455) | function hS(t,e){if(!t.export)return;let n=t.parent instanceof Group?t.p...
function gS (line 3455) | function gS(t,e){if(!t.export)return;let n=t.parent instanceof Group?t.p...
function _S (line 3455) | function _S(t,e){if(!t.export)return;let n=t.parent instanceof Group?t.p...
function xS (line 3455) | function xS(t,e){if(!t.export)return;let n=t.parent instanceof Group?t.p...
function nye (line 3455) | function nye(t,e){let n={},i=qe.getDefault(),a=e.variants[i.uuid].models...
function vS (line 3455) | function vS(t){let e=dS.createHash("sha256");for(let[n,i]of Object.entri...
function iye (line 3455) | function iye(t,e){return{...t.toJSON(),models:nye(t,e)}}
function aye (line 3455) | function aye(t){let e=new Blockbench.Animation;uv(),Nd(e,0);let n=pv(e,t...
function bS (line 3455) | function bS(t,e){console.time("Rendering rig took"),Texture.all.forEach(...
method constructor (line 3455) | constructor(n,i,a){super(n);this.messageBoxOptions=i;this.messageBoxCall...
method constructor (line 3455) | constructor(n,i){let a=PathModule.parse(n);super(`Failed to read file <c...
function rb (line 3458) | function rb(){let t=Project.animated_java,e=$o(t.resource_pack),n=$o(t.d...
function rye (line 3458) | async function rye({forceSave:t=!0,debugMode:e=!1}={}){let n=Project.ani...
function zc (line 3458) | async function zc(t){if(!Project)return!1;if(Cube.all.some(n=>Ad(n)==="i...
method constructor (line 3463) | constructor(e,n,i,a){this.path=e;this.exportNamespace=n;this.lastUsedExp...
method read (line 3463) | read(){if(!fs.existsSync(this.path))return;try{this.previousAJMeta=JSON....
method write (line 3463) | write(){let e=PathModule.dirname(this.path),n={formatVersion:"1.0.0",rig...
method fromFile (line 3463) | static fromFile(e){let n=new Co;if(!fs.existsSync(e))return console.warn...
method toJSON (line 3463) | toJSON(){return structuredClone(this.content)}
method load (line 3463) | load(t,e){let n=ss.get();if(!n)throw new Error("Animated Java Blueprint ...
method parse (line 3465) | parse(t,e){if(console.log(`Parsing Animated Java Blueprint from '${e}'.....
method compile (line 3465) | compile(t={}){if(console.log(`Compiling Animated Java Blueprint from ${P...
method export (line 3465) | export(){if(console.log(`Exporting Animated Java Blueprint for ${Project...
method fileName (line 3465) | fileName(){return Project?.name?`${Project.name}.ajblueprint`:"unnamed_p...
function wS (line 3465) | function wS(t){let e=Math.max(...t.rotation),n=Math.min(...t.rotation);i...
function ES (line 3465) | function ES(){Project.save_path="",Project.last_used_export_namespace=""...
function Qs (line 3465) | function Qs(){return{...qt}}
method mounted (line 3465) | mounted(){Gn({component:iT,target:`div[id="${Qt}/format_page_mount"]`})}
method onSetup (line 3465) | onSetup(t,e){console.log("Animated Java Blueprint format setup");let n=Q...
function Fe (line 3465) | function Fe(){return Format instanceof ModelFormat&&Format.id===Qt}
function aT (line 3465) | function aT(){let t=ss.get();if(!t)throw new Error("Animated Java Bluepr...
function xh (line 3465) | function xh(){if(!Project||!Format||!Fe())return;let t=Hr.get();if(!t)th...
function Rr (line 3465) | function Rr(t){return!compareVersions(t,Project.animated_java.target_min...
function oye (line 3465) | function oye(){return!!Group.first_selected||!!AnimatedJava.TextDisplay....
function zf (line 3465) | function zf(){if(!Fe())return;let t=ss.get();if(!t){console.error("Anima...
function To (line 3465) | function To(t){return new Tn(t.map(e=>new fn(e)))}
function nb (line 3465) | function nb(t){let e=new THREE.Matrix4().copy(t).transpose().toArray().m...
function lS (line 3465) | function lS(t){let e=new ot;return e.set("translation",To(t.translation....
function Wd (line 3465) | function Wd(t,e,n){return t.split(PathModule.sep).map(i=>i===e?n:i).join...
function gh (line 3465) | function gh(t){let e={};return Object.keys(t).sort().forEach(n=>{e[n]=t[...
function Ad (line 3465) | function Ad(t){let e=t.rotation[0]+t.rotation[1]+t.rotation[2];if(e===0)...
function b4 (line 3465) | async function b4(){return new Promise(t=>requestAnimationFrame(t))}
function sye (line 3465) | async function sye(t,e){fj("Downloading Minecraft Assets...");let n=awai...
function yh (line 3465) | async function yh(){let t=3,e=await no();for(t=3;t-->=0;){let n;try{n=aw...
function ob (line 3465) | function ob(){let t=electron.app.getPath("userData");return PathModule.j...
function bh (line 3465) | async function bh(){localStorage.setItem("assetsLoaded","false");let t=a...
function Ux (line 3465) | async function Ux(){console.log("Checking for Minecraft assets update......
function TS (line 3465) | async function TS(){let t=ob(),e=await fs.promises.readFile(t);Uc=await ...
function Qo (line 3465) | async function Qo(){return new Promise(t=>{Uc!==void 0?t():K.MINECRAFT_A...
function Lx (line 3465) | function Lx(t){if(!Uc)throw new Error("Assets not loaded");return!!Uc[t]}
function sb (line 3465) | function sb(t){if(!Uc)throw new Error("Assets not loaded");if(jS[t])retu...
function Zo (line 3465) | function Zo(t){let e=sb(t);if(!e)throw new Error(`Asset not found: ${t}`...
function Mi (line 3465) | function Mi(t){let e=sb(t);if(!e)throw new Error(`Asset not found: ${t}`...
function Ca (line 3465) | function Ca(t){let e="";for(let n of t){let i=lye.indexOf(n.toLowerCase(...
function Kt (line 3465) | function Kt(t){return t.toLowerCase().replace(/[^a-z0-9_]+/g,"_")}
function Fr (line 3465) | function Fr(t,e){let[n,...i]=t.split(":");if(!n)throw new Error(`Invalid...
function qr (line 3465) | function qr(t){let e=Sa(t);return!!(e?.namespace&&e.resourcePath)}
function Sa (line 3465) | function Sa(t){t=t.replaceAll(/\\/g,"/");let e=t.split("/"),n=e.indexOf(...
function bc (line 3465) | function bc(t){let[e,...n]=t.split(":");n.length===0&&(n=[e],e="minecraf...
function CS (line 3465) | function CS(t){let e=Vc(t);return!!(e?.namespace&&e.resourcePath)}
function Vc (line 3465) | function Vc(t){t=t.replaceAll(/\\/g,"/");let e=t.split("/"),n=e.indexOf(...
method has (line 3465) | has(e){let n=Ii.getEntryId(e);return this.values.some(i=>Ii.getEntryId(i...
method add (line 3465) | add(e){this.get(e)||this.values.push(e)}
method get (line 3465) | get(e){let n=Ii.getEntryId(e);return this.values.find(i=>Ii.getEntryId(i...
method filter (line 3465) | filter(e){return this.values=this.values.filter(e),this}
method merge (line 3465) | merge(e){this.replace=e.replace;for(let n of e.values)this.add(n);return...
method sort (line 3465) | sort(){return this.values.sort((e,n)=>{let i=Ii.getEntryId(e),a=Ii.getEn...
method getEntryId (line 3465) | static getEntryId(e){return typeof e=="string"?e:e.id}
method fromJSON (line 3465) | static fromJSON(e){let n=new Ii;return typeof e.replace=="boolean"&&(n.r...
method toJSON (line 3465) | toJSON(){return{replace:this.replace,values:structuredClone(this.values)}}
function Zs (line 3465) | function Zs(t,e){return t==="true"?!0:t==="false"?!1:isNaN(Number(t))?e&...
function bf (line 3465) | async function bf(t){if(!Xn.item){await Qo();return}let[e,n]=t.split(":"...
function vf (line 3465) | async function vf(t){Xn.block||await Qo();let e=await wd(t);return e?(e....
function wd (line 3465) | async function wd(t){let e={};if(t.includes("[")){let i=/(.+?)\[((?:[^,=...
function Jd (line 3465) | function Jd(t){switch(t){case"1.20.4":return 26;case"1.20.5":return 41;c...
function ab (line 3465) | function ab(t){switch(t){case"1.20.4":return 22;case"1.20.5":return 32;c...
function fh (line 3465) | function fh(t){let e=Object.values(vh),n=e.indexOf(t);if(!(n===-1||n===e...
function uye (line 3465) | function uye(t){let e,n,i,a,r;return{c(){e=L("p"),e.textContent=`${A("ac...
method constructor (line 3465) | constructor(e){super(),Ve(this,e,null,uye,De,{})}
function lb (line 3465) | async function lb(){if(cb)return;cb=!0;let t=await electron.dialog.showO...
function dye (line 3465) | function dye(t){try{console.log(`Converting .ajmodel: ${t}`);let e=yf(JS...
method mounted (line 3465) | mounted(){Gn({component:SS,target:"#animated-java\\:upgrade-aj-model-loa...
function Eh (line 3465) | async function Eh(){let t=Project.animated_java,{resourcePackFolder:e,da...
function OS (line 3465) | function OS(t,e,n){let i=t.slice();return i[0]=e[n],i}
function IS (line 3465) | function IS(t,e,n){let i=t.slice();return i[3]=e[n],i}
function DS (line 3465) | function DS(t,e,n){let i=t.slice();i[6]=e[n];let a=/^Fixed \[#(\d+)\]\(....
function mye (line 3465) | function mye(t){let e,n,i=pureMarked(t[6])+"",a;return{c(){e=L("li"),n=n...
function fye (line 3465) | function fye(t){let e,n,i,a,r,o=pureMarked(t[6].replace("[BREAKING]","")...
function hye (line 3465) | function hye(t){let e,n,i={ctx:t,current:null,token:null,hasCatch:!0,pen...
function gye (line 3465) | function gye(t){let e,n=pureMarked(t[6])+"",i;return{c(){e=L("li"),i=J()...
function _ye (line 3465) | function _ye(t){let e,n,i="Fixed ",a,r,o;function l(u,p){return u[10]?vy...
function xye (line 3465) | function xye(t){let e,n="#"+t[7][1],i,a;return{c(){e=L("a"),i=Re(n),E(e,...
function vye (line 3465) | function vye(t){let e,n="#"+t[10].number,i,a,r,o=" - ",l,c,d,u=pureMarke...
function bye (line 3465) | function bye(t){let e,n,i,a,r,o=pureMarked(t[6])+"",l;return{c(){e=L("li...
function FS (line 3465) | function FS(t){let e,n;function i(o,l){return o[7]?hye:o[6].startsWith("...
function NS (line 3465) | function NS(t){let e,n,i=t[3].title+"",a,r,o,l,c=t[3].list,d=[];for(let ...
function RS (line 3465) | function RS(t){let e,n,i,a,r,o="Animated Java "+t[0].title,l,c,d,u=t[0]....
function yye (line 3465) | function yye(t){let e,n,i,a=Object.values(ub).reverse().slice(0,4),r=[];...
method constructor (line 3465) | constructor(e){super(),Ve(this,e,null,yye,De,{})}
function Qd (line 3465) | function Qd(){new cn({id:jye,title:A("dialog.changelog_dialog.title"),wi...
function PS (line 3465) | function PS(t,e,n){let i=t.slice();return i[0]=e[n],i}
function LS (line 3465) | function LS(t,e,n){let i=t.slice();return i[0]=e[n],i}
function VS (line 3465) | function VS(t){let e,n=t[0]+"",i;return{c(){e=L("p"),i=Re(n),E(e,"class"...
function zS (line 3465) | function zS(t){let e,n=t[0]+"",i;return{c(){e=L("p"),i=Re(n),E(e,"class"...
function Tye (line 3465) | function Tye(t){let e,n,i,a,r,o,l,c,d,u,p,m,f,g,x,_,h,v,b,y,w,S,F,N,k,R,...
method constructor (line 3482) | constructor(e){super(),Ve(this,e,null,Tye,De,{})}
function qS (line 3482) | function qS(){new cn({id:`${Ke.name}:aboutDialog`,title:A("dialog.about....
function Cye (line 3482) | function Cye(){let t=document.createElement("img");return Object.assign(...
method click (line 3482) | click(){qS()}
method click (line 3482) | click(){Blockbench.openLink("https://animated-java.dev/docs")}
method click (line 3482) | click(){Qd()}
function GS (line 3482) | function GS(){return Blockbench.ModelProject.all.filter(t=>t.format.id==...
function WS (line 3482) | async function WS(t){let e=Project,n=Blockbench.ModelProject.all.filter(...
method click (line 3482) | click(){console.log("Exporting all open Blueprints in development mode.....
method click (line 3482) | click(){console.log("Exporting all open Blueprints..."),WS(!1)}
method click (line 3482) | click(){jc()}
method click (line 3482) | click(){Eh()}
method click (line 3482) | click(){zc({debugMode:!0})}
method click (line 3482) | click(){zc()}
function Lye (line 3482) | function Lye(){if(HS.get()!=null)return{id:"animated_java:submenu/extrac...
function Ah (line 3482) | function Ah(t,e={}){let n=[];return e?.excludeEmptyGroups?n.push(...Grou...
function $d (line 3482) | function $d(t){return t*t*t}
function mb (line 3482) | function mb(t){let e=t-1;return e*e*e+1}
function ep (line 3482) | function ep(t,{delay:e=0,duration:n=400,easing:i=ou}={}){let a=+getCompu...
function tp (line 3482) | function tp(t,{from:e,to:n},i={}){let a=getComputedStyle(t),r=a.transfor...
function KS (line 3482) | function KS(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){v...
function Sh (line 3482) | function Sh(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=n...
function ap (line 3482) | function ap(t){"@babel/helpers - typeof";return ap=typeof Symbol=="funct...
function Gc (line 3482) | function Gc(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enum...
function Vye (line 3482) | function Vye(t,e){if(t==null)return{};var n={},i=Object.keys(t),a,r;for(...
function zye (line 3482) | function zye(t,e){if(t==null)return{};var n=Vye(t,e),i,a;if(Object.getOw...
function Uye (line 3482) | function Uye(t,e){return Hye(t)||Gye(t,e)||Eb(t,e)||Kye()}
function Ia (line 3482) | function Ia(t){return qye(t)||Jye(t)||Eb(t)||Wye()}
function qye (line 3482) | function qye(t){if(Array.isArray(t))return hb(t)}
function Hye (line 3482) | function Hye(t){if(Array.isArray(t))return t}
function Jye (line 3482) | function Jye(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@ite...
function Gye (line 3482) | function Gye(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterato...
function Eb (line 3482) | function Eb(t,e){if(t){if(typeof t=="string")return hb(t,e);var n=Object...
function hb (line 3482) | function hb(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,i=new A...
function Wye (line 3482) | function Wye(){throw new TypeError(`Invalid attempt to spread non-iterab...
function Kye (line 3483) | function Kye(){throw new TypeError(`Invalid attempt to destructure non-i...
function lp (line 3484) | function lp(t,e){var n=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@itera...
function Wc (li
Copy disabled (too large)
Download .json
Condensed preview — 552 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (13,212K chars).
[
{
"path": ".github/pull_request_template.md",
"chars": 312,
"preview": "> **_IMPORTANT:_** Please remember to update plugin metadata in plugins.json along with the metadata in your plugin. Al"
},
{
"path": ".github/workflows/plugin_updates.yml",
"chars": 853,
"preview": "name: Plugin Updates\n\non:\n push:\n branches: [master]\n\njobs:\n generate-updates:\n if: github.repository == 'Jannis"
},
{
"path": ".github/workflows/validate.yml",
"chars": 885,
"preview": "name: Plugin Validator\non: [pull_request]\n\njobs:\n verify-json-validation:\n runs-on: ubuntu-latest\n steps:\n -"
},
{
"path": ".gitignore",
"chars": 44,
"preview": "node_modules/\n\n.DS_Store\ndesktop.ini\n\n/.idea"
},
{
"path": ".vscode/settings.json",
"chars": 320,
"preview": "{\n \"json.schemas\": [\n {\n \"fileMatch\": [\n \"changelog.json\"\n ],\n "
},
{
"path": "README.md",
"chars": 7665,
"preview": "# Blockbench Plugin Repository\n\nCreate a pull request to submit or update plugins. Open an issue to report bugs within p"
},
{
"path": "build/generate_plugin_updates.mjs",
"chars": 992,
"preview": "import plugins from \"../plugins.json\" with { type: \"json\" }\nimport fs from \"node:fs\"\n\nconst updates = {}\n\nfor (const [id"
},
{
"path": "build/update_plugin_updates.mjs",
"chars": 1038,
"preview": "import plugins from \"../plugins.json\" with { type: \"json\" }\nimport updates from \"../updates.json\" with { type: \"json\" }\n"
},
{
"path": "package.json",
"chars": 637,
"preview": "{\n \"name\": \"blockbench-plugins\",\n \"version\": \"1.0.0\",\n \"description\": \"Blockbench plugins repository.\",\n \"main\": \"in"
},
{
"path": "plugins/_template/LICENSE.MD",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "plugins/_template/about.md",
"chars": 32,
"preview": "Template plugin!\n\n## How to use\n"
},
{
"path": "plugins/_template/members.yml",
"chars": 52,
"preview": "maintainers:\n - YourName\ndevelopers:\n - OtherName\n"
},
{
"path": "plugins/_template/plugin.js",
"chars": 343,
"preview": "/// <reference path=\"../../types/index.d.ts\" />\n\n(function() {\n\n// When updating, apply meta data changes to plugins.jso"
},
{
"path": "plugins/activity_tracker/about.md",
"chars": 1885,
"preview": "<div id=\"about-content\">\n <p>This plugin allows you to keep track of how much time you spend using Blockbench and how l"
},
{
"path": "plugins/activity_tracker/activity_tracker.js",
"chars": 9248,
"preview": "let styles, dialog, action, running, importDialog, exportDialog, interval, timeout, notification, state\n\nconst id = \"act"
},
{
"path": "plugins/activity_tracker/changelog.json",
"chars": 1146,
"preview": "{\n \"1.0.0\": {\n \"title\": \"1.0.0\",\n \"date\": \"2023-03-30\",\n \"author\": \"Ewan Howell\",\n \"categories\": [\n {\n"
},
{
"path": "plugins/ambient_occlusion.js",
"chars": 38173,
"preview": "(function() {\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.EffectComposer = function ( renderer, rend"
},
{
"path": "plugins/animated_java/about.md",
"chars": 6430,
"preview": "<div class=\"blurb animated-java-plugin-page-17qwm57\"><span>Do you wish your Vanilla Minecraft creations could move and a"
},
{
"path": "plugins/animated_java/animated_java.js",
"chars": 2168837,
"preview": "\n//?? ╭─────────────────────────────────────────────────────────────────────────────────╮\n//?? │ ____ _ _ _ "
},
{
"path": "plugins/animated_java/changelog.json",
"chars": 34516,
"preview": "{\n\t\"1.6.0\": {\n\t\t\"title\": \"v1.6.0\",\n\t\t\"author\": \"Titus Evans (SnaveSutit)\",\n\t\t\"date\": \"2025-01-08\",\n\t\t\"categories\": [\n\t\t\t"
},
{
"path": "plugins/animated_java/members.yml",
"chars": 30,
"preview": "maintainers:\n - SnaveSutit\n"
},
{
"path": "plugins/animated_platforms/about.md",
"chars": 19067,
"preview": "# Animated Platforms\n\nAn animated ground plane for Blockbench to preview motion (walk cycles, vehicles, etc.) by scrolli"
},
{
"path": "plugins/animated_platforms/animated_platforms.js",
"chars": 140616,
"preview": "(function () {\n const PLUGIN_ID = \"animated_platforms\";\n const PLUGIN_VERSION = \"1.0.0\";\n\n // Settings storage key fo"
},
{
"path": "plugins/animation_sliders/LICENSE.MD",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "plugins/animation_sliders/about.md",
"chars": 1060,
"preview": "Adds sliders and other tools to modify keyframes:\n\nYou can add the sliders and tools to any of your toolbars by clicking"
},
{
"path": "plugins/animation_sliders/animation_sliders.js",
"chars": 13069,
"preview": "/// <reference path=\"../../types/index.d.ts\" />\n\n\nvar tween_slider, amplify_slider, easing_slider, axis_selector, ground"
},
{
"path": "plugins/animation_sliders/members.yml",
"chars": 27,
"preview": "maintainers:\n - JannisX11\n"
},
{
"path": "plugins/animation_to_java.js",
"chars": 9710,
"preview": "(function () {\n let menuButton;\n\n Plugin.register(\"animation_to_java\", {\n title: \"Animation to Java Convert"
},
{
"path": "plugins/animation_to_json.js",
"chars": 3142,
"preview": "// Based off of https://github.com/JannisX11/blockbench-plugins/blob/master/plugins/animation_to_java.js\n(function () {\n"
},
{
"path": "plugins/animation_utils/README.md",
"chars": 9369,
"preview": "# GeckoLib Animation Utils Developer Readme\n\nThis readme is intended for developers wishing to work on the GeckoLib plug"
},
{
"path": "plugins/animation_utils/about.md",
"chars": 1266,
"preview": "<img src=\"https://i.imgur.com/fjDJ4jM.png\" alt=\"GeckoLib\"/>\n\nBlockbench plugin for the GeckoLib animation and rendering "
},
{
"path": "plugins/animation_utils/animation_utils.js",
"chars": 422582,
"preview": "/******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/css-loader/dist/cjs."
},
{
"path": "plugins/animation_utils/changelog.json",
"chars": 5997,
"preview": "{\n \"3.0.7\": {\n \"title\": \"3.0.7\",\n \"author\": \"Eliot Lash\",\n \"categories\": [\n {\n \"title\": \"Changes\","
},
{
"path": "plugins/animation_utils/members.yml",
"chars": 49,
"preview": "maintainers:\n - bernie-g\n - fadookie\n - Tslat\n"
},
{
"path": "plugins/animation_utils/src/.eslintignore",
"chars": 32,
"preview": "webpack.config.js\njest.config.js"
},
{
"path": "plugins/animation_utils/src/.eslintrc.cjs",
"chars": 373,
"preview": "/* eslint-env node */\nmodule.exports = {\n extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],\n p"
},
{
"path": "plugins/animation_utils/src/.gitignore",
"chars": 1817,
"preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Diagnostic reports (https://nodejs."
},
{
"path": "plugins/animation_utils/src/.nvmrc",
"chars": 7,
"preview": "v16.16\n"
},
{
"path": "plugins/animation_utils/src/jest.config.js",
"chars": 123,
"preview": "/** @type {import('ts-jest').JestConfigWithTsJest} */\nmodule.exports = {\n preset: 'ts-jest',\n testEnvironment: 'node',"
},
{
"path": "plugins/animation_utils/src/package.json",
"chars": 2085,
"preview": "{\n \"name\": \"animation_utils\",\n \"version\": \"4.1.3\",\n \"private\": true,\n \"description\": \"GeckoLib (Legacy)\",\n \"main\": "
},
{
"path": "plugins/animation_utils/src/resources/armorTemplate.json",
"chars": 7094,
"preview": "{\n \"meta\": {\n \"format_version\": \"3.2\",\n \"model_format\": \"animated_entity_model\",\n \"box_uv\": true\n },\n \"name\""
},
{
"path": "plugins/animation_utils/src/resources/easing_keyframes.css",
"chars": 18458,
"preview": "@font-face {\n font-family: 'geckolib_icomoon';\n font-weight: normal;\n font-style: normal;\n src: url(\"data:fo"
},
{
"path": "plugins/animation_utils/src/scripts/updateManifest.mjs",
"chars": 1314,
"preview": "// @ts-check\nimport indentString from 'indent-string';\nimport path from 'path';\nimport fs from 'fs';\nimport eol from 'eo"
},
{
"path": "plugins/animation_utils/src/tests/easing.test.ts",
"chars": 719,
"preview": "import { reverseEasing } from '../ts/easing';\n\ndescribe('easing', () => {\n describe('reverseEasing', () => {\n it('sh"
},
{
"path": "plugins/animation_utils/src/ts/animationUi.ts",
"chars": 19296,
"preview": "import uniq from 'lodash/uniq';\nimport {addMonkeypatch} from './utils';\nimport {EASING_OPTIONS, EASING_DEFAULT, getEasin"
},
{
"path": "plugins/animation_utils/src/ts/codec.ts",
"chars": 14509,
"preview": "import armorTemplate from '../resources/armorTemplate.json';\nimport {isEmpty, isValidPath} from './utils';\nimport {\n "
},
{
"path": "plugins/animation_utils/src/ts/constants.ts",
"chars": 1117,
"preview": "/**\n * GeckoLib plugin model format ID. Used to identify model types generated from this plugin\n */\nexport const GECKOLI"
},
{
"path": "plugins/animation_utils/src/ts/easing.ts",
"chars": 11745,
"preview": "// The MIT license notice below applies to the function findIntervalBorderIndex\n/* The MIT License (MIT)\n\nCopyright (c) "
},
{
"path": "plugins/animation_utils/src/ts/events.ts",
"chars": 17471,
"preview": "import {\n addCodecCallback,\n addEventListener,\n addMonkeypatch, hasModelDisplaySettings, isGeckoLibModel, Monke"
},
{
"path": "plugins/animation_utils/src/ts/index.ts",
"chars": 8297,
"preview": "import semverCoerce from 'semver/functions/coerce';\nimport semverSatisfies from 'semver/functions/satisfies';\nimport pac"
},
{
"path": "plugins/animation_utils/src/ts/keyframe.ts",
"chars": 8493,
"preview": "import groupBy from 'lodash/groupBy';\nimport mapValues from 'lodash/mapValues';\nimport {addMonkeypatch, Monkeypatches} f"
},
{
"path": "plugins/animation_utils/src/ts/utils.ts",
"chars": 4277,
"preview": "import {GECKOLIB_MODEL_ID, GeckoModelType, PROPERTY_MODEL_TYPE, SETTING_ALWAYS_SHOW_DISPLAY} from \"./constants\";\n\nconst "
},
{
"path": "plugins/animation_utils/src/tsconfig.json",
"chars": 370,
"preview": "{\n \"compilerOptions\": {\n \"outDir\": \"'../../plugins\",\n // \"noImplicitAny\": true,\n \"module\": \"es6\",\n \"target\""
},
{
"path": "plugins/animation_utils/src/types/blockbench-types.d.ts",
"chars": 42,
"preview": "/// <reference types=\"blockbench-types\" />"
},
{
"path": "plugins/animation_utils/src/webpack.config.js",
"chars": 611,
"preview": "const PathModule = require('path')\n\nmodule.exports = {\n mode: 'development',\n devtool: false,\n entry: './ts/ind"
},
{
"path": "plugins/animator.js",
"chars": 8600,
"preview": "(function() {\r\n var button;\r\n\tvar start;\r\n\tvar expor;\r\n\r\n Plugin.register('animator', {\r\n title: 'Java Item"
},
{
"path": "plugins/arcaniax_block_exporter.js",
"chars": 13620,
"preview": "(function() {\n\t\n\tvar geometry_name;\n\tvar geometry_name_fancy;\n\tvar bbMinSize = 0;\n\tvar bbMaxOffset = 8;\n\tvar bbMaxSize ="
},
{
"path": "plugins/armor_stand_animator.js",
"chars": 30715,
"preview": "// TODO Make into custom model format, allow multiple armor stands in one animation\n\n// Credit to Misode for this (I did"
},
{
"path": "plugins/asset_browser/about.md",
"chars": 28631,
"preview": "<div id=\"about-content\">\n <p>Asset browser is a browser that lets you view, modify, export, and compare the Minecraft v"
},
{
"path": "plugins/asset_browser/asset_browser.js",
"chars": 162961,
"preview": "const crypto = require(\"node:crypto\")\nconst zlib = require(\"node:zlib\")\n\nlet fs, dialog, action, storage, loader, styles"
},
{
"path": "plugins/asset_browser/changelog.json",
"chars": 1981,
"preview": "{\n \"1.0.0\": {\n \"title\": \"1.0.0\",\n \"date\": \"2025-05-30\",\n \"author\": \"Ewan Howell\",\n \"categories\": [\n {\n"
},
{
"path": "plugins/azurelib_utils/LICENSE.MD",
"chars": 1036,
"preview": "MIT License\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associate"
},
{
"path": "plugins/azurelib_utils/about.md",
"chars": 1875,
"preview": "<p align=\"center\">\n<img src=\"https://www.bisecthosting.com/images/CF/AzureLib/BH_AL_header.png\" />\n<a href=\"https://disc"
},
{
"path": "plugins/azurelib_utils/azurelib_utils.js",
"chars": 165122,
"preview": "/*! For license information please see azurelib_utils.js.LICENSE.txt */\n(()=>{var t={2:(t,e,n)=>{var r=n(2199),i=n(4664)"
},
{
"path": "plugins/azurelib_utils/azurelib_utils.js.LICENSE.txt",
"chars": 336,
"preview": "/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.o"
},
{
"path": "plugins/azurelib_utils/changelog.json",
"chars": 4612,
"preview": "{\n\t\"1.0.6\": {\n\t\t\"title\": \"1.0.6\",\n\t\t\"date\": \"2024-03-27\",\n\t\t\"author\": \"AzureDoom\",\n\t\t\"categories\": [\n\t\t\t{\n\t\t\t\t\"title\": \""
},
{
"path": "plugins/azurelib_utils/members.yml",
"chars": 51,
"preview": "maintainers:\n - AzureDoom\n - bvanseg\n - Collinvh"
},
{
"path": "plugins/backup_viewer/about.md",
"chars": 1711,
"preview": "<div id=\"about-content\">\n <p>This plugin adds a a backup tab to the start screen that allows you to quickly and easily "
},
{
"path": "plugins/backup_viewer/backup_viewer.js",
"chars": 6451,
"preview": "let loaded, styles, oldTemplate\nconst workScreenElement = document.getElementById(\"work_screen\")\nPlugin.register(\"backup"
},
{
"path": "plugins/backup_viewer/changelog.json",
"chars": 980,
"preview": "{\n \"1.0.0\": {\n \"title\": \"1.0.0\",\n \"date\": \"2022-12-28\",\n \"author\": \"Ewan Howell\",\n \"categories\": [\n {\n"
},
{
"path": "plugins/baked_ambient_occlusion/LICENSE.MD",
"chars": 1066,
"preview": "MIT License\n\nCopyright (c) 2025 Kai Salmon\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
},
{
"path": "plugins/baked_ambient_occlusion/README.md",
"chars": 2776,
"preview": "# Mr Salmon's Baked Ambient Occlusion for Blockbench\n\nGenerate instant shaded textures for your models, with one click! "
},
{
"path": "plugins/baked_ambient_occlusion/about.md",
"chars": 5788,
"preview": "# Mr Salmon's Baked Ambient Occlusion\n\nGenerate instant shaded textures for your models with one click! \n\n\n{if(\"object\"==typeof expo"
},
{
"path": "plugins/baked_ambient_occlusion/members.yml",
"chars": 53,
"preview": "maintainers:\n - kaisalmon\ndevelopers:\n - kaisalmon\n"
},
{
"path": "plugins/baked_ambient_occlusion/package.json",
"chars": 582,
"preview": "{\n \"name\": \"blockbench-baked-ao\",\n \"version\": \"1.0.0\",\n \"description\": \"Baked Ambient Occlusion for Blockbench\",\n \"m"
},
{
"path": "plugins/baked_ambient_occlusion/src/index.ts",
"chars": 27092,
"preview": "import {\n MeshBVH,\n} from 'three-mesh-bvh';\n\ndeclare const THREE: typeof import('three');\ninterface Color {\n r: nu"
},
{
"path": "plugins/baked_ambient_occlusion/src/types.d.ts",
"chars": 193,
"preview": "declare namespace Blockbench {\n type Mesh = import('blockbench-types').Mesh;\n type Texture = import('blockbench-ty"
},
{
"path": "plugins/baked_ambient_occlusion/tsconfig.json",
"chars": 524,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"ESNext\",\n \"moduleResolution\": \"node\",\n \"strict\": t"
},
{
"path": "plugins/baked_ambient_occlusion/webpack.config.js",
"chars": 590,
"preview": "const path = require('path');\n\nmodule.exports = {\n entry: './src/index.ts',\n module: {\n rules: [\n {\n te"
},
{
"path": "plugins/bakery.js",
"chars": 4091,
"preview": "/// <reference path=\"../types/index.d.ts\" />\n\n(function() {\n\nvar bake_action;\n\nPlugin.register('bakery', {\n\ttitle: 'Bake"
},
{
"path": "plugins/bamo/bamo.js",
"chars": 454622,
"preview": "/******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/babel-loader/lib/ind"
},
{
"path": "plugins/bamo/src/.gitignore",
"chars": 12,
"preview": "node_modules"
},
{
"path": "plugins/bamo/src/babel.config.js",
"chars": 145,
"preview": "module.exports = {\n presets: [\n [\n \"@babel/preset-env\",\n {\n useBuiltIns: \"usage\",\n corejs: 3"
},
{
"path": "plugins/bamo/src/package.json",
"chars": 723,
"preview": "{\n \"name\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo "
},
{
"path": "plugins/bamo/src/src/components/BamoAdvancedProperties.vue",
"chars": 2094,
"preview": "<script>\n\nimport { rotationTypes, soundOptions, materialOptions, transparencyOptions, tabOptions, particleOptions, custo"
},
{
"path": "plugins/bamo/src/src/components/BamoAdvancedTemplate.html",
"chars": 21947,
"preview": "<div id=\"BAMO\">\n <div class=\"wizardWrapper\">\n <ul id=\"BAMOsideBar\">\n <li v-bind:class=\"{selected: s"
},
{
"path": "plugins/bamo/src/src/components/BamoBaseComponent.vue",
"chars": 28960,
"preview": "<script>\nimport { rotationTypes, soundOptions, materialOptions, transparencyOptions, tabOptions, particleOptions, custom"
},
{
"path": "plugins/bamo/src/src/components/ComponentTemplate.html",
"chars": 0,
"preview": ""
},
{
"path": "plugins/bamo/src/src/components/bamo.css",
"chars": 1304,
"preview": "\n#BAMO .dialog_content {\n margin: 0;\n} \n\n#BAMO .wizardWrapper {\n display: flex; \n flex-direction: row;\n heig"
},
{
"path": "plugins/bamo/src/src/main.js",
"chars": 4139,
"preview": "import BamoBaseComponent from './components/BamoBaseComponent.vue';\nimport codec, { loadCodec, unloadCodec } from './uti"
},
{
"path": "plugins/bamo/src/src/util/Codec.js",
"chars": 3694,
"preview": "import bamoSettings, { BAMO_SETTINGS_DEFAULT } from \"./Settings\";\n\nexport function loadCodec(){\n Codecs.project.on('c"
},
{
"path": "plugins/bamo/src/src/util/GenDataFiles.js",
"chars": 2551,
"preview": "export function genLootTable(namespace, block){\n\n return `{\n \"type\": \"minecraft:block\",\n \"pools\": [\n "
},
{
"path": "plugins/bamo/src/src/util/GenStates.js",
"chars": 5904,
"preview": "export function genStairState(namespace, model, outer, inner){\n return `\n {\n \"variants\": {\n \"fac"
},
{
"path": "plugins/bamo/src/src/util/OptionArrays.js",
"chars": 3463,
"preview": "export const rotationTypes = [\n \"default\",\n //\"axis\",\n //\"y_axis_player\",\n \"y_axis\",\n //\"all_player\",\n "
},
{
"path": "plugins/bamo/src/src/util/Settings.js",
"chars": 1465,
"preview": "export const BAMO_SETTINGS_DEFAULT = {\n displayName: \"\",\n namespace: \"bamo\",\n version: \"1.20.1\",\n typeList: "
},
{
"path": "plugins/bamo/src/src/util/Utils.js",
"chars": 601,
"preview": "export function dictFromTexture(image, ns, name){\n var ret = \"\"\n Texture.all.forEach(function(tx){\n if ((tx"
},
{
"path": "plugins/bamo/src/webpack.config.js",
"chars": 805,
"preview": "const PathModule = require('path');\nconst { VueLoaderPlugin } = require(\"vue-loader\");\nconst path = require(\"path\");\n\nmo"
},
{
"path": "plugins/bbs_exporter/about.md",
"chars": 147,
"preview": "**BBS Model Ex/importer** is a plugin to export models in BBS model format, which can be imported by BBS Studio dedicate"
},
{
"path": "plugins/bbs_exporter/bbs_exporter.js",
"chars": 19422,
"preview": "(function() {\n var exportAction, importAction;\n var lastOptions = {};\n var sides = {\n north: \"front\",\n "
},
{
"path": "plugins/bbs_exporter/changelog.json",
"chars": 1556,
"preview": "{\n\t\"1.2.2\": {\n\t\t\"title\": \"1.2.2\",\n\t\t\"date\": \"2024-05-02\",\n\t\t\"author\": \"McHorse\",\n\t\t\"categories\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Bu"
},
{
"path": "plugins/bedrock_block_transforms/bedrock_block_transforms.js",
"chars": 4859,
"preview": "(function() {\n\nlet action, style;\n\nBBPlugin.register('bedrock_block_transforms', {\n\ttitle: 'Bedrock Block Transformation"
},
{
"path": "plugins/block_multi_collisions/LICENSE.md",
"chars": 1063,
"preview": "MIT License\n\nCopyright (c) 2025 Minato\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof "
},
{
"path": "plugins/block_multi_collisions/about.md",
"chars": 1310,
"preview": "# Block Multi-Collision\n\nBlock Multi-Collision is a Blockbench plugin that allow you to create and preview multiple coll"
},
{
"path": "plugins/block_multi_collisions/block_multi_collisions.js",
"chars": 21697,
"preview": "Blockbench.addCSS(`\ndialog#block_multi_collisions .result-code-container {\n background-color: #181b1f;\n border: 1p"
},
{
"path": "plugins/block_multi_collisions/changelog.json",
"chars": 514,
"preview": "{\n\t\"1.0.0\": {\n\t\t\"title\": \"v1.0.0\",\n\t\t\"author\": \"Minato\",\n\t\t\"date\": \"2025-12-28\",\n\t\t\"categories\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Ch"
},
{
"path": "plugins/block_multi_collisions/members.yml",
"chars": 63,
"preview": "maintainers:\n - minecraftBedrockArabic # Minato (minato4743)"
},
{
"path": "plugins/blockmodels-exporter.js",
"chars": 129716,
"preview": "!function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.expo"
},
{
"path": "plugins/bone_view/LICENSE.md",
"chars": 35148,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "plugins/bone_view/README.md",
"chars": 1416,
"preview": "# Bone View Plugin for Blockbench\n\n\n\nThe Bone View plugin provides an essential toolset for a"
},
{
"path": "plugins/bone_view/about.md",
"chars": 773,
"preview": "# About Bone View\n\nThe Bone View plugin is designed to simplify the process of rigging and animating in Blockbench by pr"
},
{
"path": "plugins/bone_view/bone_view.js",
"chars": 11909,
"preview": "(function () {\n let pluginAction;\n let hotkeySetting;\n\n const RENDER_ORDER_BONE = 500;\n const RENDER_ORDER_H"
},
{
"path": "plugins/bone_view/changelog.json",
"chars": 550,
"preview": "{\n \"1.0.0\": {\n \"release_date\": \"2025-09-17\",\n \"changes\": [\n \"Initial release of the Bone Vie"
},
{
"path": "plugins/bone_view/members.yml",
"chars": 38,
"preview": "maintainers:\n - tyronx\n - codename-B"
},
{
"path": "plugins/brush.js",
"chars": 38327,
"preview": ";(function () {\r\n// \r\n//\r\n\r\nconst { PI } = Math;\r\nconst TWO_PI = PI * 2;\r\nconst QUARTER_NINETY_DEGREES = PI / 8;\r\n\r\n/* W"
},
{
"path": "plugins/brush_randomizer.js",
"chars": 3476,
"preview": "(function () {\n\tvar button;\n\tvar options_dialog;\n\tvar amount = 5;\n\tvar stroke = false;\n\tvar original_color;\n\tPlugin.regi"
},
{
"path": "plugins/brush_tuna/about.md",
"chars": 76514,
"preview": "<div><h2>About Brush Tuna</h2> <p>Brush Tuna overhauls the Brush Presets system, providing an improved interface, and se"
},
{
"path": "plugins/brush_tuna/brush_tuna.js",
"chars": 150051,
"preview": "\n//?? ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────╮\n//??"
},
{
"path": "plugins/brush_tuna/changelog.json",
"chars": 198,
"preview": "{\n\t\"1.0.4\": {\n\t\t\"title\": \"v1.0.4\",\n\t\t\"author\": \"SnaveSutit & Embody Games\",\n\t\t\"date\": \"2025-05-05\",\n\t\t\"categories\": [\n\t\t"
},
{
"path": "plugins/brush_tuna/members.yml",
"chars": 28,
"preview": "maintainers:\n - SnaveSutit\n"
},
{
"path": "plugins/cameras.js",
"chars": 15724,
"preview": "let deletables = [];\n\nBBPlugin.register('cameras', {\n\ttitle: 'Cameras',\n\ticon: 'videocam',\n\tauthor: 'JannisX11',\n\tdescri"
},
{
"path": "plugins/cardinal.js",
"chars": 3477,
"preview": "(function() {\n\n\tlet images = {\n\t\t\tnorth: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAQMAAAC3/F3+AAAABlBMVEVH"
},
{
"path": "plugins/cem_template_loader/about.md",
"chars": 2973,
"preview": "<div id=\"about-content\">\n <img src=\"https://ewanhowell.com/assets/images/plugins/cem-template-loader/logo.webp\" />\n <p"
},
{
"path": "plugins/cem_template_loader/cem_template_loader.js",
"chars": 103395,
"preview": "(() => {\n let plugin\n const connection = {\n roots: [\n `https://wynem.com/assets`,\n `https://raw.githubuse"
},
{
"path": "plugins/cem_template_loader/changelog.json",
"chars": 25730,
"preview": "{\n \"0.1.0\": {\n \"title\": \"0.1.0\",\n \"date\": \"2020-02-02\",\n \"author\": \"Ewan Howell\",\n \"categories\": [\n {\n"
},
{
"path": "plugins/clone_brush.js",
"chars": 3124,
"preview": "(function() {\r\n\r\nvar brush_template, clone_brush_tool;\r\n\r\nPlugin.register('clone_brush', {\r\n\ttitle: 'Clone Brush',\r\n\taut"
},
{
"path": "plugins/code_view.js",
"chars": 1225,
"preview": "var codeViewVue;\n\n(function() {\n\nvar openCodeViewAction;\nvar codeViewDialog;\n \nPlugin.register('code_view', {\n\ttitle:"
},
{
"path": "plugins/collapsible_start_screen_categories.js",
"chars": 5478,
"preview": "(async function () {\r\n let aboutAction, styles, collapsed\r\n const id = \"collapsible_start_screen_categories\"\r\n const "
},
{
"path": "plugins/colour_gradient_generator/about.md",
"chars": 3279,
"preview": "<div id=\"about-content\">\n <img src=\"https://ewanhowell.com/assets/images/plugins/colour-gradient-generator/logo.webp\" /"
},
{
"path": "plugins/colour_gradient_generator/changelog.json",
"chars": 1783,
"preview": "{\n \"1.0.0\": {\n \"title\": \"1.0.0\",\n \"date\": \"2022-06-02\",\n \"author\": \"Ewan Howell\",\n \"categories\": [\n {\n"
},
{
"path": "plugins/colour_gradient_generator/colour_gradient_generator.js",
"chars": 12637,
"preview": "(() => {\n let action, dialog, data\n const id = \"colour_gradient_generator\"\n const defaults = {\n steps: 9,\n angl"
},
{
"path": "plugins/cosmic_reach_model_editor/about.md",
"chars": 287,
"preview": "# Cosmic Reach Model Editor\r\nSimple plugin that allows editing models that were created for the game [Cosmic Reach](http"
},
{
"path": "plugins/cosmic_reach_model_editor/changelog.json",
"chars": 4313,
"preview": "{\r\n \"1.0.0\": {\r\n \"title\": \"1.0.0\",\r\n \"date\": \"2024-03-09\",\r\n \"author\": \"Z. Hoeshin\",\r\n \"c"
},
{
"path": "plugins/cosmic_reach_model_editor/cosmic_reach_model_editor.js",
"chars": 51038,
"preview": "(() => {\n let codec, export_action_block_minimized, export_action_block_maximized, import_action_block, dialog, prope"
},
{
"path": "plugins/creative_mode/LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "plugins/creative_mode/about.md",
"chars": 2829,
"preview": "### Fly like in creative Minecraft\n- From 'WASD Control plugin': Use AWSD to move around, E to go up, Q to go down (keyb"
},
{
"path": "plugins/creative_mode/creative_mode.js",
"chars": 21006,
"preview": "(function() {\n\nlet cubeSample = undefined;\nlet cubeSample_normals = {};\nconst faceNormals = {\n north: { x: 0, y: 0, z"
},
{
"path": "plugins/csmodel.js",
"chars": 17217,
"preview": "(function() {\n\nvar import_action, export_action;\n\n\nPlugin.register('csmodel', {\n\ttitle: 'CraftStudio Model Format',\n\tico"
},
{
"path": "plugins/cube_inverter.js",
"chars": 9799,
"preview": "(async function() {\n let aboutAction, cubeInverterAction\n const id = \"cube_inverter\"\n const name = "
},
{
"path": "plugins/custom_marker_colors.js",
"chars": 18754,
"preview": "(async function() {\r\n let aboutAction, defaultColourFunction\r\n\r\n const E = s => $(document.createElement(s))\r\n "
},
{
"path": "plugins/datagen_export.js",
"chars": 9132,
"preview": "(function () {\n var codec = new Codec(\"datagen\", {\n name: \"Datagen\",\n remember: true,\n extension: \"java\",\n "
},
{
"path": "plugins/discord-rpc.js",
"chars": 29563,
"preview": "! function(e) {\n var t = {};\n\n function n(i) {\n if (t[i]) return t[i].exports;\n var s = t[i] = {\n "
},
{
"path": "plugins/double_sided_cubes.js",
"chars": 1535,
"preview": "(()=> {\n\n\tlet cube_action;\n\n\tPlugin.register('double_sided_cubes', {\n\t\ttitle: 'Double Sided Cubes',\n\t\tauthor: 'SnaveSuti"
},
{
"path": "plugins/duplicate_renamer.js",
"chars": 1623,
"preview": "(function () {\n // Register plugin\n Plugin.register('duplicate_renamer', {\n title: 'Duplicate Bone Renamer'"
},
{
"path": "plugins/easings/about.md",
"chars": 642,
"preview": "# Easings\n\nApply easing to Minecraft: Bedrock Edition animations by utilizing `anim_time_update`.\n\n> Easing can only be "
},
{
"path": "plugins/easings/changelog.json",
"chars": 199,
"preview": "{\n \"1.0.0\": {\n \"title\": \"1.0.0\",\n \"author\": \"Svdex\",\n \"date\": \"2026-02-28\",\n \"categories\": [\n {\n "
},
{
"path": "plugins/easings/easings.js",
"chars": 5248,
"preview": "\"use strict\";(()=>{var u={name:\"easings\",private:!0,version:\"1.0.0\",module:\"src/index.ts\",type:\"module\",author:{name:\"Sv"
},
{
"path": "plugins/emf_animation_addon/about.md",
"chars": 1413,
"preview": "# EMF Animation Addon\n\nThis is an addon plugin for Ewan Howell's `CEM Template Loader` plugin <span style=\"color:dodgerb"
},
{
"path": "plugins/emf_animation_addon/changelog.json",
"chars": 1332,
"preview": "{\n \"1.0.0\": {\n \"title\": \"1.0.0\",\n \"date\": \"2024-06-05\",\n \"author\": \"Traben & Ewan Howell\",\n \"categories\": ["
},
{
"path": "plugins/emf_animation_addon/emf_animation_addon.js",
"chars": 32303,
"preview": "(() => {\n let constants, ranges, booleans, enabledBooleans, functionHints, animDocs\n Plugin.register(\"emf_animatio"
},
{
"path": "plugins/emf_animation_addon/members.yml",
"chars": 88,
"preview": "maintainers:\n - Traben-0\n - ewanhowell5195\ndevelopers:\n - Traben-0\n - ewanhowell5195"
},
{
"path": "plugins/endimations_exporter.js",
"chars": 4557,
"preview": "(function () {\n\tlet exportEndimations;\n\n\tPlugin.register('endimations_exporter', {\n\t\ttitle: 'Endimator Animations Export"
},
{
"path": "plugins/expand_bone_timeline/about.md",
"chars": 1659,
"preview": "# Expand Bone Timeline\n\nA Blockbench plugin that speeds up animation workflow by adding or removing a bone and all its d"
},
{
"path": "plugins/expand_bone_timeline/expand_bone_timeline.js",
"chars": 2804,
"preview": "(function () {\n\tlet expandAction, collapseAction;\n\n\tBBPlugin.register('expand_bone_timeline', {\n\t\ttitle: 'Expand Bone Ti"
},
{
"path": "plugins/explorer/about.md",
"chars": 193,
"preview": "Use the folder icon in the left corner of the tab bar to open the explorer.\n\nClick files to peak into them, double click"
},
{
"path": "plugins/explorer/changelog.json",
"chars": 960,
"preview": "{\n\t\"1.0.0\": {\n\t\t\"title\": \"1.0.0\",\n\t\t\"date\": \"2023-01-17\",\n\t\t\"author\": \"JannisX11\",\n\t\t\"categories\": [\n\t\t\t{\n\t\t\t\t\"title\": \""
},
{
"path": "plugins/explorer/explorer.js",
"chars": 19507,
"preview": "(function() {\n\nlet deletables = [];\nlet resize_line;\nlet sidebar_button;\n\nconst FAV_KEY = 'explorer.favorites';\n\nBBPlugi"
},
{
"path": "plugins/export_to_3mf/LICENSE.MD",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "plugins/export_to_3mf/about.md",
"chars": 1010,
"preview": "# Export to 3MF\n\n**Export to 3MF** is a Blockbench plugin that allows you to directly export your models to .3mf files ("
},
{
"path": "plugins/export_to_3mf/export_to_3mf.js",
"chars": 8234,
"preview": "/// <reference path=\"../node_modules/blockbench-types/types/plugin.d.ts\" />\nconst contentTypes = `<?xml version=\"1.0\" en"
},
{
"path": "plugins/export_to_3mf/members.yml",
"chars": 40,
"preview": "maintainers:\n - Ayden Hodgins-de Jonge\n"
},
{
"path": "plugins/export_to_3mf/src/compile.ts",
"chars": 6212,
"preview": "/// <reference path=\"../node_modules/blockbench-types/types/plugin.d.ts\" />\n\nimport {isObjectManifold} from \"./validatio"
},
{
"path": "plugins/export_to_3mf/src/export_to_3mf.ts",
"chars": 2918,
"preview": "/// <reference path=\"../node_modules/blockbench-types/types/plugin.d.ts\" />\n\nimport {compile} from \"./compile\";\n\n\nlet ex"
},
{
"path": "plugins/export_to_3mf/src/validation.ts",
"chars": 156,
"preview": "import {MFObject} from \"./compile\";\n\n\n\n\nexport function isObjectManifold(object: MFObject): boolean {\n // TODO: Futur"
},
{
"path": "plugins/export_to_blender/LICENSE.MD",
"chars": 1036,
"preview": "MIT License\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associate"
},
{
"path": "plugins/export_to_blender/about.md",
"chars": 314,
"preview": "**Requires Blender to be installed!** \n\nThis plugin adds the option to export your project as a Blender scene file (.ble"
},
{
"path": "plugins/export_to_blender/export_to_blender.js",
"chars": 18088,
"preview": "(function() {\n\nconst windows = Blockbench.operating_system === 'Windows';\nconst linux = Blockbench.operating_system =="
},
{
"path": "plugins/export_to_blender/members.yml",
"chars": 48,
"preview": "maintainers:\n - mr0x13f\ndevelopers:\n - mr0x13f"
},
{
"path": "plugins/farsight/LICENSE",
"chars": 1063,
"preview": "MIT License\n\nCopyright (c) 2026 Luth3r\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof "
},
{
"path": "plugins/farsight/README.md",
"chars": 1196,
"preview": "# 👁️ Farsight\nFarsight is a Blockbench Plugin that increases the culling distance. Perfect for creating whole worlds.\n\n!"
},
{
"path": "plugins/farsight/farsight.js",
"chars": 3320,
"preview": "Plugin.register(\"farsight\", {\n title: \"Farsight\",\n author: \"Luther Gray\",\n icon: \"visibility\",\n description:\n \"In"
},
{
"path": "plugins/figura_format/about.md",
"chars": 2061,
"preview": "Figura uses Blockbench for it's modeling, but some features of Blockbench will not be parsed by Figura.\n\nThis Plugin add"
},
{
"path": "plugins/figura_format/figura_format.js",
"chars": 19430,
"preview": "(function () {\n\tconst toDelete = []\n\n\tfunction isValidLuaIdentifier(str) {\n\t\tconst keywords = [\n\t\t\t\"and\",\n\t\t\t\"break\",\n\t\t"
},
{
"path": "plugins/free_rotation/about.md",
"chars": 2706,
"preview": "<div id=\"about-content\">\n <p>This format is designed to create <strong>Minecraft: Java Edition</strong> item models wit"
},
{
"path": "plugins/free_rotation/changelog.json",
"chars": 1448,
"preview": "{\n \"1.0.0\": {\n \"title\": \"1.0.0\",\n \"date\": \"2024-12-20\",\n \"author\": \"Godlander & Ewan Howell\",\n \"categories\""
},
{
"path": "plugins/free_rotation/free_rotation.js",
"chars": 25112,
"preview": "(() => {\n const path = require(\"node:path\")\n\n let fs, codec, format, action, properties, styles, oldGUILightCondition\n"
},
{
"path": "plugins/free_rotation/members.yml",
"chars": 45,
"preview": "maintainers:\n - ewanhowell5195\n - Godlander"
},
{
"path": "plugins/geckolib/README.md",
"chars": 9360,
"preview": "# GeckoLib Animation Utils Developer Readme\n\nThis readme is intended for developers wishing to work on the GeckoLib plug"
},
{
"path": "plugins/geckolib/about.md",
"chars": 1314,
"preview": "<img src=\"https://github.com/user-attachments/assets/77a85ba0-86c0-41ee-b06d-4cc265a4a2a0\" alt=\"GeckoLib\"/>\n\nBlockbench "
},
{
"path": "plugins/geckolib/changelog.json",
"chars": 8418,
"preview": "{\n \"3.0.7\": {\n \"title\": \"3.0.7\",\n \"author\": \"Eliot Lash\",\n \"categories\": [\n {\n \"title\": \"Changes\","
},
{
"path": "plugins/geckolib/geckolib.js",
"chars": 434942,
"preview": "/******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/css-loader/dist/cjs."
},
{
"path": "plugins/geckolib/members.yml",
"chars": 49,
"preview": "maintainers:\n - bernie-g\n - fadookie\n - Tslat\n"
},
{
"path": "plugins/geckolib/src/.eslintrc.cjs",
"chars": 373,
"preview": "/* eslint-env node */\nmodule.exports = {\n extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],\n p"
},
{
"path": "plugins/geckolib/src/.gitignore",
"chars": 1817,
"preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Diagnostic reports (https://nodejs."
},
{
"path": "plugins/geckolib/src/.nvmrc",
"chars": 8,
"preview": "v24.7.0\n"
},
{
"path": "plugins/geckolib/src/eslint.config.js",
"chars": 74,
"preview": "module.exports = {\n ignores: [\"webpack.config.js\", \"jest.config.js\"],\n}"
},
{
"path": "plugins/geckolib/src/jest.config.js",
"chars": 123,
"preview": "/** @type {import('ts-jest').JestConfigWithTsJest} */\nmodule.exports = {\n preset: 'ts-jest',\n testEnvironment: 'node',"
},
{
"path": "plugins/geckolib/src/package.json",
"chars": 1902,
"preview": "{\n \"name\": \"geckolib\",\n \"version\": \"4.2.5\",\n \"private\": true,\n \"description\": \"GeckoLib Models & Animations\",\n \"mai"
},
{
"path": "plugins/geckolib/src/resources/armorTemplate.json",
"chars": 7087,
"preview": "{\n \"meta\": {\n \"format_version\": \"3.2\",\n \"model_format\": \"geckolib_model\",\n \"box_uv\": true\n },\n \"name\": \"Cust"
},
{
"path": "plugins/geckolib/src/resources/easing_keyframes.css",
"chars": 18547,
"preview": "@font-face {\n font-family: 'geckolib_icomoon';\n font-weight: normal;\n font-style: normal;\n src: url(\"data:fo"
},
{
"path": "plugins/geckolib/src/scripts/updateManifest.mjs",
"chars": 1302,
"preview": "// @ts-check\nimport indentString from 'indent-string';\nimport path from 'path';\nimport fs from 'fs';\nimport eol from 'eo"
},
{
"path": "plugins/geckolib/src/tests/easing.test.ts",
"chars": 719,
"preview": "import { reverseEasing } from '../ts/easing';\n\ndescribe('easing', () => {\n describe('reverseEasing', () => {\n it('sh"
},
{
"path": "plugins/geckolib/src/ts/animationUi.ts",
"chars": 19496,
"preview": "import uniq from 'lodash/uniq';\nimport {addMonkeypatch} from './utils';\nimport {EASING_OPTIONS, EASING_DEFAULT, getEasin"
},
{
"path": "plugins/geckolib/src/ts/codec.ts",
"chars": 14797,
"preview": "import armorTemplate from '../resources/armorTemplate.json';\nimport { isEmpty, isValidPath } from './utils';\nimport {\n "
},
{
"path": "plugins/geckolib/src/ts/constants.ts",
"chars": 1110,
"preview": "/**\n * GeckoLib plugin model format ID. Used to identify model types generated from this plugin\n */\nexport const GECKOLI"
},
{
"path": "plugins/geckolib/src/ts/easing.ts",
"chars": 11766,
"preview": "// The MIT license notice below applies to the function findIntervalBorderIndex\n/* The MIT License (MIT)\n\nCopyright (c) "
},
{
"path": "plugins/geckolib/src/ts/events.ts",
"chars": 19473,
"preview": "import {\n addCodecCallback,\n addEventListener,\n addMonkeypatch, shouldShowDisplayPanel, isGeckoLibModel, Monkey"
},
{
"path": "plugins/geckolib/src/ts/index.ts",
"chars": 8517,
"preview": "import semverCoerce from 'semver/functions/coerce';\nimport semverSatisfies from 'semver/functions/satisfies';\nimport pac"
},
{
"path": "plugins/geckolib/src/ts/keyframe.ts",
"chars": 9124,
"preview": "import groupBy from 'lodash/groupBy';\nimport mapValues from 'lodash/mapValues';\nimport {addMonkeypatch, Monkeypatches} f"
},
{
"path": "plugins/geckolib/src/ts/utils.ts",
"chars": 4969,
"preview": "import {GECKOLIB_MODEL_ID, GeckoModelType, PROPERTY_MODEL_TYPE, SETTING_ALWAYS_SHOW_DISPLAY} from \"./constants\";\n\nconst "
}
]
// ... and 352 more files (download for full content)
About this extraction
This page contains the full source code of the JannisX11/blockbench-plugins GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 552 files (12.0 MB), approximately 3.2M tokens, and a symbol index with 8139 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.