diff --git a/app/renderer/src/Project/RefreshCache.ts b/app/renderer/src/Project/RefreshCache.ts index 272939d8c..6a686f6e5 100644 --- a/app/renderer/src/Project/RefreshCache.ts +++ b/app/renderer/src/Project/RefreshCache.ts @@ -13,19 +13,32 @@ export async function refreshCache(refresh_rp = false, reset = true) { let explorer = refresh_rp ? CURRENT.RPFileExplorer : CURRENT.BPFileExplorer if (explorer === undefined) return + await explorer.loading_promise let files = explorer.getAllFiles() if (reset) LightningCache.init() for (let filePath of files) { - if (FileType.get(filePath) === 'unknown') continue + const fileType = FileType.get(filePath) + if (fileType === 'unknown') continue const fileContent = await FileSystem.loadFileAsTree(filePath) if (fileContent instanceof JSONTree) { - await ComponentRegistry.parse(filePath, fileContent.toJSON(), false) + if (fileType === 'entity') + await ComponentRegistry.parse( + filePath, + fileContent.toJSON(), + false + ) + else if (fileType === 'block') + await ComponentRegistry.parseBlock( + filePath, + fileContent.toJSON(), + false + ) await LightningCache.add(filePath, fileContent, false) } else { - if (FileType.get(filePath) === 'function') + if (fileType === 'function') await BridgeCore.beforeTextSave(fileContent, filePath) } } diff --git a/app/renderer/src/UI/ContextMenu/BPMore.ts b/app/renderer/src/UI/ContextMenu/BPMore.ts index 3e343d2d8..44daf2cc9 100644 --- a/app/renderer/src/UI/ContextMenu/BPMore.ts +++ b/app/renderer/src/UI/ContextMenu/BPMore.ts @@ -159,7 +159,7 @@ export default [ async () => { let lw = new LoadingWindow() await trash(CURRENT.PROJECT_PATH) - trigger('bridge:findDefaultPack', true) + trigger('bridge:findDefaultPack', true, true) lw.close() }, () => {} diff --git a/app/renderer/src/UI/Sidebar/Content/Explorer.vue b/app/renderer/src/UI/Sidebar/Content/Explorer.vue index 6fb2f505b..3291a4198 100644 --- a/app/renderer/src/UI/Sidebar/Content/Explorer.vue +++ b/app/renderer/src/UI/Sidebar/Content/Explorer.vue @@ -114,7 +114,7 @@ import { LoadedProjects, } from '../../Windows/Project/Chooser/definition' import { loadProjects } from '../../Windows/Project/Chooser/load' -import { on } from '../../../AppCycle/EventSystem' +import { on, trigger } from '../../../AppCycle/EventSystem' export default { name: 'content-explorer', @@ -149,7 +149,7 @@ export default { project_select_size: window.innerWidth / 7.5, no_projects: false, loaded_file_defs: FileType.LIB_LOADED, - disposable: null, + disposables: [], projectIcon: undefined, } }, @@ -159,9 +159,11 @@ export default { EventBus.trigger('bridge:refreshExplorer') ) EventBus.on('bridge:refreshExplorer', this.refresh) - EventBus.on('bridge:selectProject', this.selectProject) + this.disposables.push(on('bridge:selectProject', this.selectProject)) EventBus.on('bridge:loadedFileDefs', this.onFileDefsLoaded) - this.disposable = on('bridge:findDefaultPack', this.findDefaultProject) + this.disposables.push( + on('bridge:findDefaultPack', this.findDefaultProject) + ) window.addEventListener('resize', this.onResize) this.findDefaultProject() @@ -171,7 +173,8 @@ export default { EventBus.off('bridge:refreshExplorer', this.refresh) EventBus.off('bridge:selectProject', this.selectProject) EventBus.off('bridge:loadedFileDefs', this.onFileDefsLoaded) - this.disposable.dispose() + + this.disposables.forEach(disposable => disposable.dispose()) window.removeEventListener('resize', this.onResize) }, computed: { @@ -214,32 +217,12 @@ export default { async refresh(force_val) { this.projectIcon = this.loadProjectIcon() - if (this.force_project_algorithm) { - if (force_val) this.selected = force_val - console.log('[REFRESH RP] ' + this.selected) - this.loadDirectory(this.selected, true) - } else { - try { - await loadProjects() - this.items = LoadedProjects.map( - ({ relativeProjectPath }) => relativeProjectPath - ) - } catch (e) { - this.items = [] - } - - this.no_projects = false - console.log('[REFRESH BP] ' + this.selected) - - if (this.items.length === 0) { - this.no_projects = true - } - this.loadDirectory(this.selected, true) - } + await this.findDefaultProject(true) + await this.loadDirectory(this.selected, true) }, - selectProject(val) { - this.loadDirectory(val, true) + async selectProject(val) { + await this.loadDirectory(val, true) }, onFileDefsLoaded() { this.loaded_file_defs = true @@ -283,10 +266,10 @@ export default { this.project_select_size = window.innerWidth / 7.5 }, - async findDefaultProject(force_refresh = false) { + async findDefaultProject(forceRefresh = false, findBP = false) { if (this.force_project_algorithm) { this.selected = undefined - if (force_refresh) setRP(undefined) + if (forceRefresh) setRP(undefined) this.selected = await this.force_project_algorithm() } else { try { @@ -295,6 +278,7 @@ export default { ({ relativeProjectPath }) => relativeProjectPath ) } catch (e) { + console.log(e) this.items = [] } this.no_projects = false @@ -309,9 +293,11 @@ export default { ) { this.no_projects = true } - this.selected = this.selected - ? this.selected - : this.findDefaultBPProject() + + this.selected = + this.selected && !findBP + ? this.selected + : this.findDefaultBPProject() } }, findDefaultBPProject() { diff --git a/app/renderer/src/UI/Windows/Project/Create/BP/Main.vue b/app/renderer/src/UI/Windows/Project/Create/BP/Main.vue index 559853408..319cd48ce 100644 --- a/app/renderer/src/UI/Windows/Project/Create/BP/Main.vue +++ b/app/renderer/src/UI/Windows/Project/Create/BP/Main.vue @@ -40,9 +40,9 @@

The target Minecraft version should be set to what version you - are developing for. Currently 1.16.0 is the - stable release and 1.16.100 is the beta - release. + are developing for. Currently + {{ MC_STABLE_VERSION }} is the stable release + and {{ MC_BETA_VERSION }} is the beta release.

import BaseWindow from '../../../Layout/Base' import { CreateBP } from '../definition' -import fs from 'fs' +import { promises as fs } from 'fs' import ContentWindow from '../../../Common/Content' import { BASE_PATH } from '../../../../../constants' import Vue from '../../../../../../main' @@ -98,10 +98,12 @@ import Manifest from '../../../../../files/Manifest' import uuidv4 from 'uuid/v4' import CreateFiles from '../../../../../Project/CreateFiles' import path from 'path' -import EventBus from '../../../../../EventBus' +import { once, trigger } from '../../../../../AppCycle/EventSystem' import ProjectConfig from '../../../../../Project/Config' import { getFormatVersions } from '../../../../../autoCompletions/components/VersionedTemplate/Common' import { createInformationWindow } from '../../../Common/CommonDefinitions' +import { createErrorNotification } from '../../../../../AppCycle/Errors' +import { writeJSON } from '../../../../../Utilities/JsonFS' export default { name: 'CreateBP', @@ -124,74 +126,60 @@ export default { this.createProject() } }, - createProject() { + async createProject() { CreateBP.close() - let l_w = new LoadingWindow('project.').show() - let b_path = BASE_PATH + let lW = new LoadingWindow('project.').show() - window.setTimeout(() => { - fs.mkdir( - b_path + this.projectName, - { recursive: true }, - err => { - if (err && err.message.includes('already exists')) - return l_w.hide() - else if (err) { - l_w.hide() - throw err - } + try { + await fs.mkdir( + path.join(BASE_PATH, this.projectName, 'bridge'), + { + recursive: true, + } + ) + } catch (err) { + if (err && err.message.includes('already exists')) { + return lW.hide() + } else if (err) { + lW.hide() + createErrorNotification(err) + return + } + } - fs.writeFile( - path.join( - b_path, - this.projectName, - '/manifest.json' - ), - new Manifest( - 'data', - this.registerClientData, - undefined, - this.targetVersion - ).get(), - async () => { - if ( - err && - err.message.includes('already exists') - ) - return l_w.hide() - if (err) { - l_w.hide() - throw err - } + await fs.writeFile( + path.join(BASE_PATH, this.projectName, '/manifest.json'), + new Manifest( + 'data', + this.registerClientData, + undefined, + this.targetVersion + ).get() + ) - //CREATE DEFAULT FILES - await CreateFiles.createBPFiles( - path.join(b_path, this.projectName), - { - name: this.projectName, - description: this.projectDescription, - projectTargetVersion: this - .targetVersion, - } - ) + //Create config file + await writeJSON( + path.join(BASE_PATH, this.projectName, 'bridge/config.json'), + { + prefix: this.projectNamespace, + formatVersion: this.targetVersion, + } + ) - EventBus.trigger( - 'bridge:selectProject', - this.projectName - ) - this.$root.$emit('refreshExplorer') - ProjectConfig.setFormatVersion( - this.targetVersion - ) - ProjectConfig.setPrefix(this.projectNamespace) - l_w.hide() + //Create default files + await CreateFiles.createBPFiles( + path.join(BASE_PATH, this.projectName), + { + name: this.projectName, + description: this.projectDescription, + projectTargetVersion: this.targetVersion, + } + ) - this.reset() - } - ) - } - ) - }, 50) + trigger('bridge:selectProject', this.projectName) + + lW.hide() + this.reset() }, reset() { this.projectName = '' diff --git a/app/renderer/src/UI/Windows/Project/Create/definition.ts b/app/renderer/src/UI/Windows/Project/Create/definition.ts index a21b64533..54712a79e 100644 --- a/app/renderer/src/UI/Windows/Project/Create/definition.ts +++ b/app/renderer/src/UI/Windows/Project/Create/definition.ts @@ -1,6 +1,7 @@ import { createWindow } from '../../create' import CreateRPComponent from './RP/Main.vue' import CreateBPComponent from './BP/Main.vue' +import { MC_BETA_VERSION, MC_STABLE_VERSION } from '../../../../constants' export const CreateRP = createWindow(CreateRPComponent, { RPName: '', @@ -9,10 +10,12 @@ export const CreateRP = createWindow(CreateRPComponent, { export const CreateBP = createWindow(CreateBPComponent, { targetVersions: [], - targetVersion: '', + targetVersion: MC_STABLE_VERSION, projectName: '', projectDescription: '', projectNamespace: 'bridge', registerClientData: false, isFullscreen: false, + MC_BETA_VERSION, + MC_STABLE_VERSION, }) diff --git a/app/renderer/src/constants.ts b/app/renderer/src/constants.ts index 53b33790c..612276f34 100644 --- a/app/renderer/src/constants.ts +++ b/app/renderer/src/constants.ts @@ -36,6 +36,7 @@ export * from '../../shared/DefaultDir' export const BASE_PATH = BP_BASE_PATH export const MC_BETA_VERSION = '1.16.100' +export const MC_STABLE_VERSION = '1.16.0' export const browser_window = remote.getCurrentWindow() diff --git a/app/renderer/src/plugins/CustomComponents.ts b/app/renderer/src/plugins/CustomComponents.ts index 9eebf97f7..592c421d0 100644 --- a/app/renderer/src/plugins/CustomComponents.ts +++ b/app/renderer/src/plugins/CustomComponents.ts @@ -93,10 +93,16 @@ export default class ComponentRegistry { //Save that this file is using the specific custom component inside the LightningCache - let apply_data = this.components[component_name].onApply( - component_data, - location - ) + let apply_data: any = {} + try { + apply_data = this.components[component_name].onApply( + component_data, + location + ) + } catch (err) { + createErrorNotification(err) + } + if (typeof apply_data !== 'object' || Array.isArray(apply_data)) { createErrorNotification( new Error(`Invalid data for component "${component_name}"`) @@ -200,7 +206,13 @@ export default class ComponentRegistry { if (c !== undefined) { usedComponents.push(componentName) - const data = component.onApply(c, 'components') + let data: any = {} + try { + data = component.onApply(c, 'components') + } catch (err) { + createErrorNotification(err) + } + if (typeof data === 'object') MASK.set(`component@${componentName}`, data) else diff --git a/app/renderer/src/plugins/Disposables.ts b/app/renderer/src/plugins/Disposables.ts index 770b7eba1..23e7c7339 100644 --- a/app/renderer/src/plugins/Disposables.ts +++ b/app/renderer/src/plugins/Disposables.ts @@ -3,6 +3,7 @@ import { IDisposable } from '../Types/disposable' const DisposableStore = new Map() export function set(pluginId: string, disposables: IDisposable[]) { + if (DisposableStore.has(pluginId)) clear(pluginId) DisposableStore.set(pluginId, disposables) } diff --git a/app/shared/app_version.ts b/app/shared/app_version.ts index 0a07cb0e8..d138535ec 100644 --- a/app/shared/app_version.ts +++ b/app/shared/app_version.ts @@ -1,4 +1,4 @@ /** * Current bridge. app version */ -export default 'v1.7.10' +export default 'v1.7.11' diff --git a/package.json b/package.json index 9e23f3931..9b134f582 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bridge", - "version": "1.7.10", + "version": "1.7.11", "author": "solvedDev ", "description": "A powerful add-on editor", "license": "GNU", diff --git a/static/presets/sword/item.json b/static/presets/sword/item.json index 7af786bd9..08d360abe 100644 --- a/static/presets/sword/item.json +++ b/static/presets/sword/item.json @@ -13,10 +13,7 @@ "minecraft:use_duration": 3600, "minecraft:hand_equipped": true, "minecraft:durability": { - "max_durability": 150, - "repair_items": [ - "{{PROJ_PREFIX}}:{{IDENTIFIER}}" - ] + "max_durability": 150 }, "minecraft:mining_speed": 1.5, "minecraft:damage": 5,