diff --git a/BondageClub/Tools/Node/AssetCheck.js b/BondageClub/Tools/Node/AssetCheck.js index cfa44f0c4e..2db4546e01 100644 --- a/BondageClub/Tools/Node/AssetCheck.js +++ b/BondageClub/Tools/Node/AssetCheck.js @@ -1279,6 +1279,30 @@ function testDrawCallbacks(assets, window) { } } +/** + * @param {readonly Asset[]} assets + * @param {Record<ExtendedArchetype, Record<string, AssetArchetypeData>>} extendedDataRecords + */ +function testSelfBlock(assets, extendedDataRecords) { + for (const asset of assets) { + /** @type {readonly AssetGroupName[]} */ + const blocks = asset.Block ?? []; + if (blocks.includes(asset.Group.Name)) { + error(`${asset.Group.Name}:${asset.Name}: item must not block its own group`); + } + + /** @type {Record<string, ExtendedItemOption[]>} */ + const extendedOptions = getExtendedOptions(asset, extendedDataRecords); + for (const [extendedName, options] of Object.entries(extendedOptions)) { + /** @type {readonly AssetGroupName[]} */ + const extendedBlocks = options.flatMap(o => o.Property?.Block ?? []); + if (extendedBlocks.includes(asset.Group.Name)) { + error(`${asset.Group.Name}:${asset.Name}:${extendedName} extended item must not block its own group`); + } + } + } +} + /** * Strigify and parse the passed object to get the correct Array and Object prototypes, because VM uses different ones. * This unfortunately results in Functions being lost and replaced with a dummy function @@ -1512,4 +1536,5 @@ function sanitizeVMOutput(input) { testHasPreview(assetList); testAssetHasPNG(assetList, extendedItemSuperRecord, poseRecord); testSetPose(assetList, pose); + testSelfBlock(assetList, extendedItemSuperRecord); })();