make sure this block of code is secure and then paste it into the console and/or use tampermonkey to run this every session
to paste into console
SnapSerializer.prototype.loadBlocksModel = function (
model,
targetStage,
forPreview
) { // public - answer a new dictionary of custom block definitions
// represented by the given already parsed XML Node,
// forPreview is an optional Boolean flag that prevents customized
// primitives from being installed when merely previewing the blocks
// of a library before actually importing them
var stage, varModel, varFrame, localVarFrame;
this.scene = new Scene();
this.scene.targetStage = targetStage; // for secondary block def look-up
stage = this.scene.stage;
model.palette = model.childNamed('palette');
if (model.palette) {
this.loadPalette(model.palette).forEach((value, key) =>
SpriteMorph.prototype.customCategories.set(key, value)
);
}
model.removeChild(model.palette);
this.loadCustomBlocks(stage, model, true); // global
this.populateCustomBlocks(stage, model, true); // global
model.local = model.childNamed('local');
if (model.local) {
this.loadCustomBlocks(stage, model.local, false); // not global
this.populateCustomBlocks( stage, model.local, false); // not global
}
model.primitives = model.childNamed('primitives');
if (model.primitives && !forPreview) {
this.loadCustomizedPrimitives(stage, {children:
model.primitives.children.filter((def)=>SpriteMorph.prototype.blocks[def.attributes.selector])
}, targetStage);
var customSel = {children:
model.primitives.children.filter((def)=>!SpriteMorph.prototype.blocks[def.attributes.selector])
}
this.loadCustomBlocks(stage, customSel, true); // global
this.populateCustomBlocks(stage, customSel, true); // global
}
varModel = model.childNamed('variables');
if (varModel) {
varFrame = new VariableFrame();
this.loadVariables(varFrame, varModel);
}
varModel = model.childNamed('local-variables');
if (varModel) {
localVarFrame = new VariableFrame();
this.loadVariables(localVarFrame, varModel);
}
this.objects = {};
stage.globalBlocks.forEach(def => def.receiver = null);
this.objects = {};
this.scene = new Scene();
this.mediaDict = {};
return {
global : stage.globalBlocks,
local : stage.customBlocks,
data : varFrame,
localData : localVarFrame
};
};
then drag this(this is an edge case)
then you can use the blocks that are imported