diff --git a/src/engine/blocks.js b/src/engine/blocks.js index 344f4aae490..ae942e219be 100644 --- a/src/engine/blocks.js +++ b/src/engine/blocks.js @@ -918,8 +918,13 @@ class Blocks { if (preserveStack) { const parent = this._blocks[block.parent]; const next = this._blocks[block.next]; - if (parent) parent.next = block.next; + const input = parent?.inputs + ? [...Object.entries(parent.inputs)] + .find(ent => ent[1].block === blockId)?.[1] + : null; + if (parent && !input) parent.next = block.next; if (next) next.parent = block.parent; + if (next && input) input.block = block.next; } // Delete inputs (including branches) @@ -945,6 +950,8 @@ class Blocks { if (next) { this._scripts.push(next.id); next.topLevel = true; + next.x = block.x; + next.y = block.y; } this._scripts.splice(i, 1); } diff --git a/src/extension-support/extension-manager.js b/src/extension-support/extension-manager.js index 3c37b0ae2ab..0b59680d3fa 100644 --- a/src/extension-support/extension-manager.js +++ b/src/extension-support/extension-manager.js @@ -513,10 +513,9 @@ class ExtensionManager { removeExtension(id) { const serviceName = this._loadedExtensions.get(id); - const {provider} = dispatch._getServiceProvider(serviceName); - if (typeof provider.remove === 'function') { - dispatch.call(serviceName, 'dispose'); - } + dispatch.call(serviceName, 'dispose'); + delete dispatch.services[serviceName]; + delete this.runtime[`ext_${id}`]; this._loadedExtensions.delete(id); const workerId = +serviceName.split('.')[1];