abstract contract BitMonstersAddon is Ownable {
    IBitMonsters internal bitMonsters;

    modifier onlyAdmin() {
        require(bitMonsters.isAdmin(msg.sender), "admins only");
        _;
    }

    modifier ownsToken(uint tokenId) {
        require(bitMonsters.ownerOf(tokenId) == msg.sender, "you don't own this shit");
        _;
    }

    /**
     * @notice This must be called before the Brainz contract can be used.
     *
     * @dev Within the BitMonsters contract, call initializeBrainz().
     */
    function setBitMonstersContract(IBitMonsters _contract) external onlyOwner {
        bitMonsters = _contract;
    }
}
/**
 * @title A contract should inherit this if it provides functionality for the Bit Monsters contract.
 */
function setBitMonstersContract(IBitMonsters _contract) external onlyOwner {
    bitMonsters = _contract;
}

/**
 * @notice This must be called before the Brainz contract can be used.
 *
 * @dev Within the BitMonsters contract, call initializeBrainz().
 */